omnibus 4.0.0.beta.1 → 4.0.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +29 -0
- data/docs/Building on RHEL.md +1 -0
- data/lib/omnibus/builder.rb +48 -1
- data/lib/omnibus/config.rb +13 -0
- data/lib/omnibus/digestable.rb +2 -2
- data/lib/omnibus/exceptions.rb +21 -0
- data/lib/omnibus/fetchers/git_fetcher.rb +75 -9
- data/lib/omnibus/fetchers/net_fetcher.rb +5 -3
- data/lib/omnibus/generator.rb +0 -13
- data/{resources/bff/postinstall.sh → lib/omnibus/generator_files/package_scripts/makeselfinst.erb} +0 -0
- data/lib/omnibus/packagers/base.rb +25 -1
- data/lib/omnibus/packagers/bff.rb +99 -12
- data/lib/omnibus/packagers/deb.rb +10 -8
- data/lib/omnibus/packagers/makeself.rb +24 -16
- data/lib/omnibus/packagers/msi.rb +6 -5
- data/lib/omnibus/packagers/pkg.rb +59 -10
- data/lib/omnibus/packagers/rpm.rb +42 -25
- data/lib/omnibus/packagers/solaris.rb +5 -5
- data/lib/omnibus/project.rb +54 -5
- data/lib/omnibus/software.rb +37 -39
- data/lib/omnibus/version.rb +1 -1
- data/omnibus.gemspec +1 -0
- data/resources/bff/gen.template.erb +3 -2
- data/resources/rpm/signing.erb +1 -1
- data/spec/functional/builder_spec.rb +75 -3
- data/spec/functional/fetchers/git_fetcher_spec.rb +31 -2
- data/spec/support/examples.rb +8 -2
- data/spec/support/git_helpers.rb +8 -0
- data/spec/unit/builder_spec.rb +6 -0
- data/spec/unit/config_spec.rb +1 -0
- data/spec/unit/generator_spec.rb +0 -12
- data/spec/unit/packagers/base_spec.rb +16 -0
- data/spec/unit/packagers/bff_spec.rb +58 -5
- data/spec/unit/packagers/deb_spec.rb +15 -3
- data/spec/unit/packagers/makeself_spec.rb +56 -9
- data/spec/unit/packagers/pkg_spec.rb +57 -4
- data/spec/unit/packagers/rpm_spec.rb +38 -23
- data/spec/unit/project_spec.rb +16 -5
- data/spec/unit/software_spec.rb +0 -1
- metadata +18 -6
- data/resources/bff/unpostinstall.sh +0 -0
- data/resources/makeself/post_extract.sh.erb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6839ae316c6146ee459f8acbd869d83d495d90c
|
4
|
+
data.tar.gz: 30a70eb80420dbab5e8196eb1a626b7b62c7b65f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b8c99b56cd409f5b4df98dea2e19ade09fdeac89e42ee53a3724cf0a1c6440430d9994fd41b36aecd68c1c9239709bf578590b46ad1602f4fc2a6fbb21e3ba4
|
7
|
+
data.tar.gz: d07dbc0bcab759ecc4f6017d71e662cd07d81ff7919854fd790fe4ec476eacdf11f8eb8a8163d2005808d8618d947d791df6f62da8e620f5cf009647bef685f9
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,35 @@
|
|
1
1
|
Omnibus CHANGELOG
|
2
2
|
=================
|
3
3
|
|
4
|
+
v4.0.0.rc.1 (September 23, 2014)
|
5
|
+
--------------------------------
|
6
|
+
|
7
|
+
### New Features
|
8
|
+
- Expose `build_version` to all `pkg` templates
|
9
|
+
- Improve info messages during RPM creation
|
10
|
+
- Make PKG packager aware of scripts with default Omnibus naming
|
11
|
+
- Make RPM packager aware of scripts with default Omnibus naming
|
12
|
+
- Clean up script logic in BFF packager
|
13
|
+
- Add an option for configuring Fetcher read timeout
|
14
|
+
|
15
|
+
### DSL Changes
|
16
|
+
#### Builder
|
17
|
+
- Add an `appbundle` function to the builder DSL
|
18
|
+
|
19
|
+
#### Packager
|
20
|
+
- Expose `install_dir` in Packager DSL
|
21
|
+
- Expose `windows_safe_path` in Packager DSL
|
22
|
+
|
23
|
+
### Bugfixes
|
24
|
+
- Replace dashes with underscores in RPM version names.
|
25
|
+
- The achitecture of deb package is i386, not i686.
|
26
|
+
- Re-ignore 204 exit code from `light.exe`
|
27
|
+
- Use single quotes in main `rpmbuild` command
|
28
|
+
- Be sure to create and sign the RPM if `~/.rpmmacros` exists
|
29
|
+
- Switch to OpenSSL::Digest which is threadsafe on 2.1.2
|
30
|
+
- Ensure `GitFetcher` properly resolves remote refs
|
31
|
+
- Ensure we clean ALL Ruby environment vars
|
32
|
+
|
4
33
|
v4.0.0.beta.1 (August 20, 2014)
|
5
34
|
-------------------------------
|
6
35
|
### New Features
|
data/docs/Building on RHEL.md
CHANGED
data/lib/omnibus/builder.rb
CHANGED
@@ -261,6 +261,46 @@ module Omnibus
|
|
261
261
|
end
|
262
262
|
expose :bundle
|
263
263
|
|
264
|
+
#
|
265
|
+
# Execute the given appbundler command against the embedded Ruby's
|
266
|
+
# appbundler. This command assumes the +appbundle+ gem is installed and
|
267
|
+
# in the embedded Ruby. You should add a dependency on the +appbundler+
|
268
|
+
# software definition if you want to use this command.
|
269
|
+
#
|
270
|
+
# @example
|
271
|
+
# appbundle 'chef'
|
272
|
+
#
|
273
|
+
# @param (see #command)
|
274
|
+
# @return (see #command)
|
275
|
+
#
|
276
|
+
def appbundle(app_name, options = {})
|
277
|
+
build_commands << BuildCommand.new("appbundle `#{app_name}'") do
|
278
|
+
bin_dir = "#{install_dir}/bin"
|
279
|
+
embedded_apps_root = "#{install_dir}/embedded/apps"
|
280
|
+
embedded_app_dir = "#{embedded_apps_root}/#{app_name}"
|
281
|
+
gemfile_lock = "#{embedded_app_dir}/Gemfile.lock"
|
282
|
+
appbundler_bin = windows_safe_path("#{install_dir}/embedded/bin/appbundler")
|
283
|
+
|
284
|
+
# Ensure the main bin dir exists
|
285
|
+
FileUtils.mkdir_p(bin_dir)
|
286
|
+
# Ensure the embedded app directory exists
|
287
|
+
FileUtils.mkdir_p(embedded_apps_root)
|
288
|
+
# Copy the application code into place
|
289
|
+
FileUtils.cp_r("#{Omnibus::Config.source_dir}/#{app_name}", embedded_apps_root)
|
290
|
+
# Delete any top-level `.git` directory
|
291
|
+
FileUtils.rm_rf("#{embedded_app_dir}/.git")
|
292
|
+
|
293
|
+
# Prepare the environment
|
294
|
+
options[:env] ||= {}
|
295
|
+
env = with_embedded_path || {}
|
296
|
+
env["BUNDLE_GEMFILE"] = gemfile_lock
|
297
|
+
options[:env].merge!(env)
|
298
|
+
|
299
|
+
shellout!("#{appbundler_bin} '#{embedded_app_dir}' '#{bin_dir}'", options)
|
300
|
+
end
|
301
|
+
end
|
302
|
+
expose :appbundle
|
303
|
+
|
264
304
|
#
|
265
305
|
# Execute the given Rake command against the embedded Ruby's rake. This
|
266
306
|
# command assumes the +rake+ gem has been installed.
|
@@ -704,11 +744,17 @@ module Omnibus
|
|
704
744
|
# which only removes Bundler-specific values. We need to remove all
|
705
745
|
# values, specifically:
|
706
746
|
#
|
747
|
+
# - _ORIGINAL_GEM_PATH
|
707
748
|
# - GEM_PATH
|
708
749
|
# - GEM_HOME
|
709
750
|
# - GEM_ROOT
|
751
|
+
# - BUNDLE_BIN_PATH
|
710
752
|
# - BUNDLE_GEMFILE
|
753
|
+
# - RUBYLIB
|
711
754
|
# - RUBYOPT
|
755
|
+
# - RUBY_ENGINE
|
756
|
+
# - RUBY_ROOT
|
757
|
+
# - RUBY_VERSION
|
712
758
|
#
|
713
759
|
# The original environment restored at the end of this call.
|
714
760
|
#
|
@@ -718,9 +764,10 @@ module Omnibus
|
|
718
764
|
def with_clean_env(&block)
|
719
765
|
original = ENV.to_hash
|
720
766
|
|
721
|
-
ENV.delete('
|
767
|
+
ENV.delete('_ORIGINAL_GEM_PATH')
|
722
768
|
ENV.delete_if { |k,_| k.start_with?('BUNDLE_') }
|
723
769
|
ENV.delete_if { |k,_| k.start_with?('GEM_') }
|
770
|
+
ENV.delete_if { |k,_| k.start_with?('RUBY') }
|
724
771
|
|
725
772
|
block.call
|
726
773
|
ensure
|
data/lib/omnibus/config.rb
CHANGED
@@ -466,6 +466,19 @@ module Omnibus
|
|
466
466
|
# @!endgroup
|
467
467
|
#
|
468
468
|
|
469
|
+
#
|
470
|
+
# @!group Fetcher Parameters
|
471
|
+
# --------------------------------------------------
|
472
|
+
|
473
|
+
# The number of seconds to wait
|
474
|
+
#
|
475
|
+
# @return [Integer]
|
476
|
+
default(:fetcher_read_timeout, 60)
|
477
|
+
|
478
|
+
# --------------------------------------------------
|
479
|
+
# @!endgroup
|
480
|
+
#
|
481
|
+
|
469
482
|
private
|
470
483
|
|
471
484
|
#
|
data/lib/omnibus/digestable.rb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
-
require '
|
17
|
+
require 'openssl'
|
18
18
|
require 'pathname'
|
19
19
|
|
20
20
|
module Omnibus
|
@@ -96,7 +96,7 @@ module Omnibus
|
|
96
96
|
#
|
97
97
|
def digest_from_type(type)
|
98
98
|
id = type.to_s.upcase
|
99
|
-
instance = Digest.const_get(id).new
|
99
|
+
instance = OpenSSL::Digest.const_get(id).new
|
100
100
|
end
|
101
101
|
|
102
102
|
#
|
data/lib/omnibus/exceptions.rb
CHANGED
@@ -285,6 +285,27 @@ The following shell command timed out at #{timeout} seconds:
|
|
285
285
|
Please increase the `:timeout' value or run the command manually to make sure it
|
286
286
|
is completing successfully. Sometimes it is common for a command to wait for
|
287
287
|
user input.
|
288
|
+
EOH
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
class ProjectAlreadyDirty < Error
|
293
|
+
def initialize(project)
|
294
|
+
name = project.name
|
295
|
+
culprit = project.culprit.name
|
296
|
+
|
297
|
+
super <<-EOH
|
298
|
+
The project `#{name}' was already marked as dirty by `#{culprit}'. You cannot
|
299
|
+
mark a project as dirty twice. This is probably a bug in Omnibus and should be
|
300
|
+
reported.
|
301
|
+
EOH
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
class UnresolvableGitReference < Error
|
306
|
+
def initialize(ref)
|
307
|
+
super <<-EOH
|
308
|
+
Could not resolve `#{ref}' to a valid git SHA-1.
|
288
309
|
EOH
|
289
310
|
end
|
290
311
|
end
|
@@ -146,15 +146,11 @@ module Omnibus
|
|
146
146
|
# @return [String]
|
147
147
|
#
|
148
148
|
def target_revision
|
149
|
-
@target_revision ||=
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
else
|
155
|
-
log.warn { 'Could not determine target revision!' }
|
156
|
-
nil
|
157
|
-
end
|
149
|
+
@target_revision ||= if sha_hash?(version)
|
150
|
+
version
|
151
|
+
else
|
152
|
+
revision_from_remote_reference(version)
|
153
|
+
end
|
158
154
|
end
|
159
155
|
|
160
156
|
#
|
@@ -166,6 +162,76 @@ module Omnibus
|
|
166
162
|
current_revision == target_revision
|
167
163
|
end
|
168
164
|
|
165
|
+
#
|
166
|
+
# Determine if the given revision is a SHA
|
167
|
+
#
|
168
|
+
# @return [true, false]
|
169
|
+
#
|
170
|
+
def sha_hash?(rev)
|
171
|
+
rev =~ /^[0-9a-f]{4,40}$/
|
172
|
+
end
|
173
|
+
|
174
|
+
#
|
175
|
+
# Return the SHA corresponding to ref. If ref is an annotated tag,
|
176
|
+
# return the SHA that was tagged not the SHA of the tag itself.
|
177
|
+
#
|
178
|
+
# @return [String]
|
179
|
+
#
|
180
|
+
def revision_from_remote_reference(ref)
|
181
|
+
# execute `git ls-remote` the trailing '*' does globbing. This
|
182
|
+
# allows us to return the SHA of the tagged commit for annotated
|
183
|
+
# tags. We take care to only return exact matches in
|
184
|
+
# process_remote_list.
|
185
|
+
remote_list = git("ls-remote origin #{ref}*").stdout
|
186
|
+
commit_ref = dereference_annotated_tag(remote_list, ref)
|
187
|
+
|
188
|
+
unless commit_ref
|
189
|
+
raise UnresolvableGitReference.new(ref)
|
190
|
+
end
|
191
|
+
commit_ref
|
192
|
+
end
|
193
|
+
|
194
|
+
#
|
195
|
+
# Dereference annotated tags.
|
196
|
+
#
|
197
|
+
# The +remote_list+ parameter is assumed to look like this:
|
198
|
+
#
|
199
|
+
# a2ed66c01f42514bcab77fd628149eccb4ecee28 refs/tags/rel-0.11.0
|
200
|
+
# f915286abdbc1907878376cce9222ac0b08b12b8 refs/tags/rel-0.11.0^{}
|
201
|
+
#
|
202
|
+
# The SHA with ^{} is the commit pointed to by an annotated
|
203
|
+
# tag. If ref isn't an annotated tag, there will not be a line
|
204
|
+
# with trailing ^{}.
|
205
|
+
#
|
206
|
+
# @param [String] remote_list
|
207
|
+
# output from `git ls-remote origin` command
|
208
|
+
# @param [String] ref
|
209
|
+
# the target git ref
|
210
|
+
#
|
211
|
+
# @return [String]
|
212
|
+
#
|
213
|
+
def dereference_annotated_tag(remote_list, ref)
|
214
|
+
# We'll return the SHA corresponding to the ^{} which is the
|
215
|
+
# commit pointed to by an annotated tag. If no such commit
|
216
|
+
# exists (not an annotated tag) then we return the SHA of the
|
217
|
+
# ref. If nothing matches, return "".
|
218
|
+
lines = remote_list.split("\n")
|
219
|
+
matches = lines.map { |line| line.split("\t") }
|
220
|
+
# First try for ^{} indicating the commit pointed to by an
|
221
|
+
# annotated tag.
|
222
|
+
tagged_commit = matches.find { |m| m[1].end_with?("#{ref}^{}") }
|
223
|
+
if tagged_commit
|
224
|
+
tagged_commit.first
|
225
|
+
else
|
226
|
+
found = matches.find { |m| m[1].end_with?("#{ref}") }
|
227
|
+
if found
|
228
|
+
found.first
|
229
|
+
else
|
230
|
+
nil
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
169
235
|
#
|
170
236
|
# Execute the given git command, inside the +project_dir+.
|
171
237
|
#
|
@@ -139,14 +139,16 @@ module Omnibus
|
|
139
139
|
def download
|
140
140
|
log.warn(log_key) { source[:warning] } if source.key?(:warning)
|
141
141
|
|
142
|
-
|
142
|
+
options = download_headers
|
143
143
|
|
144
144
|
if source[:unsafe]
|
145
145
|
log.warn(log_key) { "Permitting unsafe redirects!" }
|
146
|
-
|
146
|
+
options[:allow_unsafe_redirects] = true
|
147
147
|
end
|
148
148
|
|
149
|
-
|
149
|
+
options[:read_timeout] = Omnibus::Config.fetcher_read_timeout
|
150
|
+
|
151
|
+
file = open(download_url, options)
|
150
152
|
FileUtils.cp(file.path, downloaded_file)
|
151
153
|
file.close
|
152
154
|
rescue SocketError,
|
data/lib/omnibus/generator.rb
CHANGED
@@ -50,11 +50,6 @@ module Omnibus
|
|
50
50
|
type: :boolean,
|
51
51
|
default: false
|
52
52
|
|
53
|
-
class_option :makeself_assets,
|
54
|
-
desc: 'Generate makeself assets',
|
55
|
-
type: :boolean,
|
56
|
-
default: false
|
57
|
-
|
58
53
|
class_option :msi_assets,
|
59
54
|
desc: 'Generate Windows MSI assets',
|
60
55
|
type: :boolean,
|
@@ -112,8 +107,6 @@ module Omnibus
|
|
112
107
|
return unless options[:bff_assets]
|
113
108
|
|
114
109
|
copy_file(resource_path('bff/gen.template.erb'), "#{target}/resources/bff/gen.template.erb")
|
115
|
-
copy_file(resource_path('bff/postinstall.sh'), "#{target}/resources/bff/postinstall.sh")
|
116
|
-
copy_file(resource_path('bff/unpostinstall.sh'), "#{target}/resources/bff/unpostinstall.sh")
|
117
110
|
end
|
118
111
|
|
119
112
|
def create_deb_assets
|
@@ -131,12 +124,6 @@ module Omnibus
|
|
131
124
|
copy_file(resource_path('dmg/icon.png'), "#{target}/resources/dmg/icon.png")
|
132
125
|
end
|
133
126
|
|
134
|
-
def create_makeself_assets
|
135
|
-
return unless options[:makeself_assets]
|
136
|
-
|
137
|
-
copy_file(resource_path('makeself/post_extract.sh.erb'), "#{target}/resources/makeself/post_extract.sh.erb")
|
138
|
-
end
|
139
|
-
|
140
127
|
def create_msi_assets
|
141
128
|
return unless options[:msi_assets]
|
142
129
|
|
data/{resources/bff/postinstall.sh → lib/omnibus/generator_files/package_scripts/makeselfinst.erb}
RENAMED
File without changes
|
@@ -105,6 +105,30 @@ module Omnibus
|
|
105
105
|
)
|
106
106
|
end
|
107
107
|
|
108
|
+
#
|
109
|
+
# @!group DSL methods
|
110
|
+
# --------------------------------------------------
|
111
|
+
|
112
|
+
#
|
113
|
+
# Retrieve the path at which the project will be installed by the
|
114
|
+
# generated package.
|
115
|
+
#
|
116
|
+
# @return [String]
|
117
|
+
#
|
118
|
+
def install_dir
|
119
|
+
project.install_dir
|
120
|
+
end
|
121
|
+
expose :install_dir
|
122
|
+
|
123
|
+
#
|
124
|
+
# (see Util#windows_safe_path)
|
125
|
+
#
|
126
|
+
expose :windows_safe_path
|
127
|
+
|
128
|
+
#
|
129
|
+
# @!endgroup
|
130
|
+
# --------------------------------------------------
|
131
|
+
|
108
132
|
#
|
109
133
|
# Execute this packager by running the following phases in order:
|
110
134
|
#
|
@@ -149,7 +173,7 @@ module Omnibus
|
|
149
173
|
# @return [String]
|
150
174
|
#
|
151
175
|
def staging_dir
|
152
|
-
@staging_dir ||= Dir.mktmpdir(project.
|
176
|
+
@staging_dir ||= Dir.mktmpdir(project.package_name)
|
153
177
|
end
|
154
178
|
|
155
179
|
#
|
@@ -16,6 +16,15 @@
|
|
16
16
|
|
17
17
|
module Omnibus
|
18
18
|
class Packager::BFF < Packager::Base
|
19
|
+
# @return [Hash]
|
20
|
+
SCRIPT_MAP = {
|
21
|
+
# Default Omnibus naming
|
22
|
+
preinst: 'Pre-installation Script',
|
23
|
+
postinst: 'Post-installation Script',
|
24
|
+
prerm: 'Pre_rm Script',
|
25
|
+
postrm: 'Unconfiguration Script',
|
26
|
+
}.freeze
|
27
|
+
|
19
28
|
id :bff
|
20
29
|
|
21
30
|
setup do
|
@@ -25,6 +34,9 @@ module Omnibus
|
|
25
34
|
# /opt/hamlet => /tmp/daj29013/opt/hamlet
|
26
35
|
destination = File.join(staging_dir, project.install_dir)
|
27
36
|
FileSyncer.sync(project.install_dir, destination, exclude: exclusions)
|
37
|
+
|
38
|
+
# Create the scripts staging directory
|
39
|
+
create_directory(scripts_staging_dir)
|
28
40
|
end
|
29
41
|
|
30
42
|
build do
|
@@ -37,7 +49,42 @@ module Omnibus
|
|
37
49
|
|
38
50
|
# @see Base#package_name
|
39
51
|
def package_name
|
40
|
-
"#{
|
52
|
+
"#{safe_base_package_name}.#{bff_version}.#{safe_architecture}.bff"
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
# The path where the package scripts in the install directory.
|
57
|
+
#
|
58
|
+
# @return [String]
|
59
|
+
#
|
60
|
+
def scripts_install_dir
|
61
|
+
File.expand_path("#{project.install_dir}/embedded/share/installp")
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# The path where the package scripts will staged.
|
66
|
+
#
|
67
|
+
# @return [String]
|
68
|
+
#
|
69
|
+
def scripts_staging_dir
|
70
|
+
File.expand_path("#{staging_dir}#{scripts_install_dir}")
|
71
|
+
end
|
72
|
+
|
73
|
+
#
|
74
|
+
# Copy all scripts in {Project#package_scripts_path} to the package
|
75
|
+
# directory.
|
76
|
+
#
|
77
|
+
# @return [void]
|
78
|
+
#
|
79
|
+
def write_scripts
|
80
|
+
SCRIPT_MAP.each do |script, _installp_name|
|
81
|
+
source_path = File.join(project.package_scripts_path, script.to_s)
|
82
|
+
|
83
|
+
if File.file?(source_path)
|
84
|
+
log.debug(log_key) { "Adding script `#{script}' to `#{scripts_staging_dir}'" }
|
85
|
+
copy_file(source_path, scripts_staging_dir)
|
86
|
+
end
|
87
|
+
end
|
41
88
|
end
|
42
89
|
|
43
90
|
#
|
@@ -45,7 +92,50 @@ module Omnibus
|
|
45
92
|
#
|
46
93
|
# @return [void]
|
47
94
|
#
|
95
|
+
# Some details on the various lifecycle scripts:
|
96
|
+
#
|
97
|
+
# The order of the installp scripts is:
|
98
|
+
# - install
|
99
|
+
# - pre-install
|
100
|
+
# - post-install
|
101
|
+
# - config
|
102
|
+
# - upgrade
|
103
|
+
# - pre-remove (of previous version)
|
104
|
+
# - pre-install (previous version of software not present anymore)
|
105
|
+
# - post-install
|
106
|
+
# - config
|
107
|
+
# - remove
|
108
|
+
# - unconfig
|
109
|
+
# - unpre-install
|
110
|
+
#
|
111
|
+
# To run the new version of scc, the post-install will do.
|
112
|
+
# To run the previous version with an upgrade, use the pre-remove script.
|
113
|
+
# To run a source install of scc upon installation of installp package, use the pre-install.
|
114
|
+
# Upon upgrade, both the pre-remove and the pre-install scripts will run.
|
115
|
+
# As scc has been removed between the runs of these scripts, it will only run once during upgrade.
|
116
|
+
#
|
117
|
+
# Keywords for scripts:
|
118
|
+
#
|
119
|
+
# Pre-installation Script: /path/script
|
120
|
+
# Unpre-installation Script: /path/script
|
121
|
+
# Post-installation Script: /path/script
|
122
|
+
# Pre_rm Script: /path/script
|
123
|
+
# Configuration Script: /path/script
|
124
|
+
# Unconfiguration Script: /path/script
|
125
|
+
#
|
48
126
|
def write_gen_template
|
127
|
+
# Create a map of scripts that exist and install path
|
128
|
+
scripts = SCRIPT_MAP.inject({}) do |hash, (script, installp_key)|
|
129
|
+
staging_path = File.join(scripts_staging_dir, script.to_s)
|
130
|
+
install_path = File.join(scripts_install_dir, script.to_s)
|
131
|
+
|
132
|
+
if File.file?(staging_path)
|
133
|
+
hash[installp_key] = install_path
|
134
|
+
end
|
135
|
+
|
136
|
+
hash
|
137
|
+
end
|
138
|
+
|
49
139
|
# Get a list of all files
|
50
140
|
files = FileSyncer.glob("#{staging_dir}/**/*")
|
51
141
|
.map { |path| path.gsub(/^#{staging_dir}/, '') }
|
@@ -53,16 +143,13 @@ module Omnibus
|
|
53
143
|
render_template(resource_path('gen.template.erb'),
|
54
144
|
destination: File.join(staging_dir, 'gen.template'),
|
55
145
|
variables: {
|
56
|
-
name:
|
146
|
+
name: safe_base_package_name,
|
57
147
|
install_dir: project.install_dir,
|
58
148
|
friendly_name: project.friendly_name,
|
59
149
|
version: bff_version,
|
60
150
|
description: project.description,
|
61
151
|
files: files,
|
62
|
-
|
63
|
-
# Add configuration files
|
64
|
-
configuration_script: resource_path('postinstall.sh'),
|
65
|
-
unconfiguration_script: resource_path('unpostinstall.sh'),
|
152
|
+
scripts: scripts,
|
66
153
|
}
|
67
154
|
)
|
68
155
|
end
|
@@ -87,21 +174,21 @@ module Omnibus
|
|
87
174
|
end
|
88
175
|
|
89
176
|
#
|
90
|
-
# Return the BFF-ready
|
177
|
+
# Return the BFF-ready base package name, converting any invalid characters to
|
91
178
|
# dashes (+-+).
|
92
179
|
#
|
93
180
|
# @return [String]
|
94
181
|
#
|
95
|
-
def
|
96
|
-
if project.
|
97
|
-
project.
|
182
|
+
def safe_base_package_name
|
183
|
+
if project.package_name =~ /\A[a-z0-9\.\+\-]+\z/
|
184
|
+
project.package_name.dup
|
98
185
|
else
|
99
|
-
converted = project.
|
186
|
+
converted = project.package_name.downcase.gsub(/[^a-z0-9\.\+\-]+/, '-')
|
100
187
|
|
101
188
|
log.warn(log_key) do
|
102
189
|
"The `name' compontent of BFF package names can only include " \
|
103
190
|
"lowercase alphabetical characters (a-z), numbers (0-9), dots (.), " \
|
104
|
-
"plus signs (+), and dashes (-). Converting `#{project.
|
191
|
+
"plus signs (+), and dashes (-). Converting `#{project.package_name}' to " \
|
105
192
|
"`#{converted}'."
|
106
193
|
end
|
107
194
|
|