omnibus 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,39 @@
1
+ ## 1.3.0 (December 6, 2013)
2
+
3
+ FEATURES:
4
+
5
+ * Add `build_retries` global config value (still 3 by default). ([@fujin][], [#63][])
6
+ * Add support for pre-install scripts. ([@christophermaier][])
7
+ * Add support for `*.tar.xz` files. ([@jf647][], [#71][])
8
+ * Add `erb` builder command. ([@ohlol][], [#79][])
9
+ * Add `package_user`, `package_group` to project definitions for setting
10
+ user and group ownership for of deb/rpm/solaris packages. ([@ohlol][], [#80][])
11
+ * Add `config_file` to project definitions for passing `--config-files`
12
+ options to the `fpm` builder commands. ([@christophergeers][], [#85][])
13
+
14
+ IMPROVEMENTS:
15
+
16
+ * Bump default cpus to get better throughput when Ohai is wrong. ([@lamont-granquist][])
17
+ * Whitelist `libnsl` on Arch Linux. ([@sl4mmy][], [#67][])
18
+ * Switch to using pkgmk for Solaris. ([@lamont-granquist][], [#72][])
19
+ * Remove make install from c-example. ([@johntdyer][], [#73][])
20
+ * Update Vagrantfile template to use provisionerless base boxes. ([@schisamo][], [#74][])
21
+ * Allow access to `Omnibus.project_root` in builder blocks. ([@ohlol][], [#78][])
22
+ * Refactor how we handle loading dirs for software files. ([@benjaminws][], [#82][])
23
+ * Update depdencies: ([@schisamo][], [#86][])
24
+ * fpm 1.0.0
25
+ * mixlib-config 2.1.0
26
+ * mixlib-shellout 1.3.0
27
+
28
+ BUG FIXES:
29
+
30
+ * Properly handle `HTTP_PROXY_USER` and `HTTP_PROXY_PASS`. ([@databus23][], [#77][])
31
+ * Fix the incorrect error message logged when the Git fetcher failed to
32
+ resolve refs to commits. ([@mumoshu][], [#81][])
33
+ * Removin unsupported `config.ssh.max_tries` and `config.ssh.timeout`
34
+ from Vagrantfile template. ([@totally][], [#83][])
35
+ * Mention the required Vagrant plugins. ([@jacobvosmaer][], [#70][])
36
+
1
37
  ## 1.2.0 (July 12, 2013)
2
38
 
3
39
  FEATURES:
@@ -94,3 +130,35 @@ BUG FIXES:
94
130
  ## 1.0.0 (April 21, 2013)
95
131
 
96
132
  * The initial release.
133
+
134
+ <!--- The following link definition list is generated by PimpMyChangelog --->
135
+ [#63]: https://github.com/opscode/omnibus-ruby/issues/63
136
+ [#67]: https://github.com/opscode/omnibus-ruby/issues/67
137
+ [#70]: https://github.com/opscode/omnibus-ruby/issues/70
138
+ [#71]: https://github.com/opscode/omnibus-ruby/issues/71
139
+ [#72]: https://github.com/opscode/omnibus-ruby/issues/72
140
+ [#73]: https://github.com/opscode/omnibus-ruby/issues/73
141
+ [#74]: https://github.com/opscode/omnibus-ruby/issues/74
142
+ [#77]: https://github.com/opscode/omnibus-ruby/issues/77
143
+ [#78]: https://github.com/opscode/omnibus-ruby/issues/78
144
+ [#79]: https://github.com/opscode/omnibus-ruby/issues/79
145
+ [#80]: https://github.com/opscode/omnibus-ruby/issues/80
146
+ [#81]: https://github.com/opscode/omnibus-ruby/issues/81
147
+ [#82]: https://github.com/opscode/omnibus-ruby/issues/82
148
+ [#83]: https://github.com/opscode/omnibus-ruby/issues/83
149
+ [#85]: https://github.com/opscode/omnibus-ruby/issues/85
150
+ [#86]: https://github.com/opscode/omnibus-ruby/issues/86
151
+ [@benjaminws]: https://github.com/benjaminws
152
+ [@christophergeers]: https://github.com/christophergeers
153
+ [@christophermaier]: https://github.com/christophermaier
154
+ [@databus23]: https://github.com/databus23
155
+ [@fujin]: https://github.com/fujin
156
+ [@jacobvosmaer]: https://github.com/jacobvosmaer
157
+ [@jf647]: https://github.com/jf647
158
+ [@johntdyer]: https://github.com/johntdyer
159
+ [@lamont-granquist]: https://github.com/lamont-granquist
160
+ [@mumoshu]: https://github.com/mumoshu
161
+ [@ohlol]: https://github.com/ohlol
162
+ [@schisamo]: https://github.com/schisamo
163
+ [@sl4mmy]: https://github.com/sl4mmy
164
+ [@totally]: https://github.com/totally
data/README.md CHANGED
@@ -23,6 +23,8 @@ need the following:
23
23
  Though not *strictly* necessary, Vagrant makes using Omnibus easier,
24
24
  and is highly recommended.
25
25
  - Vagrant 1.2.1 or later (http://www.vagrantup.com)
26
+ - the vagrant-berkshelf plugin (https://github.com/RiotGames/vagrant-berkshelf)
27
+ - the vagrant-omnibus plugin (https://github.com/schisamo/vagrant-omnibus)
26
28
 
27
29
  ## Get Started
28
30
 
@@ -154,6 +154,17 @@ module Omnibus
154
154
  ruby_files(File.join(project_root, Config.software_dir))
155
155
  end
156
156
 
157
+ # Return directories to search for {Omnibus::Software} DSL files.
158
+ #
159
+ # @return [Array<String>]
160
+ def self.software_dirs
161
+ @software_dirs ||= begin
162
+ software_dirs = [File.join(project_root, Config.software_dir)]
163
+ software_dirs << File.join(omnibus_software_root, 'config', 'software') if omnibus_software_root
164
+ software_dirs
165
+ end
166
+ end
167
+
157
168
  # Backward compat alias
158
169
  #
159
170
  # @todo print a deprecation message
@@ -288,9 +299,7 @@ module Omnibus
288
299
  dep_file = software_map[dependency_name]
289
300
 
290
301
  unless dep_file
291
- raise MissingProjectDependency.new(dependency_name,
292
- [File.join(project_root, Config.software_dir),
293
- File.join(omnibus_software_root, 'config', 'software')])
302
+ raise MissingProjectDependency.new(dependency_name, software_dirs)
294
303
  end
295
304
 
296
305
  dep_software = Omnibus::Software.load(dep_file, project, overrides)
@@ -17,6 +17,7 @@
17
17
 
18
18
  require 'forwardable'
19
19
  require 'omnibus/exceptions'
20
+ require 'ostruct'
20
21
 
21
22
  module Omnibus
22
23
  class Builder
@@ -31,6 +32,7 @@ module Omnibus
31
32
  # @todo def_delegators :@builder, :patch, :command, :ruby, ...
32
33
 
33
34
  def_delegator :@builder, :patch
35
+ def_delegator :@builder, :erb
34
36
  def_delegator :@builder, :command
35
37
  def_delegator :@builder, :ruby
36
38
  def_delegator :@builder, :gem
@@ -38,6 +40,7 @@ module Omnibus
38
40
  def_delegator :@builder, :rake
39
41
  def_delegator :@builder, :block
40
42
  def_delegator :@builder, :name
43
+ def_delegator :@builder, :project_root
41
44
 
42
45
  def initialize(builder, software)
43
46
  @builder, @software = builder, software
@@ -149,6 +152,25 @@ module Omnibus
149
152
  end
150
153
  end
151
154
 
155
+ def erb(*args)
156
+ args = args.dup.pop
157
+
158
+ source_path = File.expand_path("#{Omnibus.project_root}/config/templates/#{name}/#{args[:source]}")
159
+
160
+ unless File.exists?(source_path)
161
+ raise MissingTemplate.new(args[:source], "#{Omnibus.project_root}/config/templates/#{name}")
162
+ end
163
+
164
+ block do
165
+ template = ERB.new(File.new(source_path).read, nil, "%")
166
+ File.open(args[:dest], "w") do |file|
167
+ file.write(template.result(OpenStruct.new(args[:vars]).instance_eval { binding }))
168
+ end
169
+
170
+ File.chmod(args[:mode], args[:dest])
171
+ end
172
+ end
173
+
152
174
  # @todo all these ruby commands (ruby, gem, bundle, rake) could
153
175
  # all be collapsed into a single underlying implementation, since
154
176
  # they all just differ on the executable being called
@@ -172,6 +194,10 @@ module Omnibus
172
194
  @build_commands << rb_block
173
195
  end
174
196
 
197
+ def project_root
198
+ Omnibus.project_root
199
+ end
200
+
175
201
  def project_dir
176
202
  @software.project_dir
177
203
  end
@@ -213,6 +239,10 @@ module Omnibus
213
239
  raise
214
240
  end
215
241
 
242
+ def build_retries
243
+ Omnibus.config[:build_retries]
244
+ end
245
+
216
246
  def execute_sh(cmd)
217
247
  retries ||= 0
218
248
  shell = nil
@@ -243,10 +273,11 @@ module Omnibus
243
273
  shell.error!
244
274
  end
245
275
  rescue Exception => e
276
+ raise if build_retries.nil? || build_retries == 0
246
277
  # Getting lots of errors from github, particularly with erlang/rebar
247
278
  # projects fetching tons of deps via git all the time. This isn't a
248
279
  # particularly elegant way to solve that problem. But it should work.
249
- if retries >= 3
280
+ if retries >= build_retries
250
281
  ErrorReporter.new(e, self).explain("Failed to build #{name} while running `#{cmd_string}` with #{cmd_opts_for_display}")
251
282
  raise
252
283
  else
@@ -85,7 +85,7 @@ module Omnibus
85
85
  template(File.join("Vagrantfile.erb"), File.join(target, "Vagrantfile"), opts)
86
86
 
87
87
  # render out stub packge scripts
88
- %w{ makeselfinst postinst postrm }.each do |package_script|
88
+ %w{ makeselfinst preinst prerm postinst postrm }.each do |package_script|
89
89
  script_path = File.join(target, "package-scripts", name, package_script)
90
90
  template_path = File.join("package_scripts", "#{package_script}.erb")
91
91
  # render the package script
@@ -197,6 +197,13 @@ module Omnibus
197
197
 
198
198
  # # @!endgroup
199
199
 
200
+ # @!group Build Control Parameters
201
+
202
+ # @! attribute [rw] build_retries
203
+ #
204
+ # @return [Integer, nil]
205
+ build_retries 3
206
+
200
207
  # @!group Validation Methods
201
208
 
202
209
  # Asserts that the Config object is in a valid state. If invalid
@@ -126,6 +126,21 @@ module Omnibus
126
126
  end
127
127
  end
128
128
 
129
+ class MissingTemplate < RuntimeError
130
+ def initialize(template_name, search_paths)
131
+ @template_name, @search_paths = template_name, search_paths
132
+ end
133
+
134
+ def to_s
135
+ """
136
+ Attempting to evaluate the template #{@template_name}, but it was not
137
+ found at any of the following locations:
138
+
139
+ #{@search_paths.join("\n ")}
140
+ """
141
+ end
142
+ end
143
+
129
144
  class MissingProjectDependency < RuntimeError
130
145
  def initialize(dep_name, search_paths)
131
146
  @dep_name, @search_paths = dep_name, search_paths
@@ -164,7 +164,7 @@ E
164
164
  commit_ref
165
165
  rescue Exception => e
166
166
  if retries >= 3
167
- ErrorReporter.new(e, self).explain("Failed to fetch git repository '#{@source[:git]}'")
167
+ ErrorReporter.new(e, self).explain("Failed to find any commits for the ref '#{ref}'")
168
168
  raise
169
169
  else
170
170
  # Deal with github failing all the time :(
@@ -88,7 +88,12 @@ E
88
88
  end
89
89
 
90
90
  req = Net::HTTP::Get.new(url.request_uri, headers)
91
- http_client = Net::HTTP.new(url.host, url.port)
91
+
92
+ http_client = if http_proxy && !excluded_from_proxy?(url.host)
93
+ Net::HTTP::Proxy(http_proxy.host, http_proxy.port, http_proxy.user, http_proxy.password).new(url.host, url.port)
94
+ else
95
+ Net::HTTP.new(url.host, url.port)
96
+ end
92
97
  http_client.use_ssl = (url.scheme == "https")
93
98
 
94
99
  response = http_client.start { |http| http.request(req) }
@@ -104,6 +109,31 @@ E
104
109
  end
105
110
  end
106
111
 
112
+ # search environment variable as given, all lowercase and all upper case
113
+ def get_env(name)
114
+ ENV[name] || ENV[name.downcase] || ENV[name.upcase] || nil
115
+ end
116
+
117
+ # constructs a http_proxy uri from HTTP_PROXY* env vars
118
+ def http_proxy
119
+ @http_proxy ||= begin
120
+ proxy = get_env('HTTP_PROXY') or return
121
+ proxy = "http://#{proxy}" unless proxy =~ /^https?:/
122
+ uri = URI.parse(proxy)
123
+ uri.user ||= get_env('HTTP_PROXY_USER')
124
+ uri.password ||= get_env('HTTP_PROXY_PASS')
125
+ uri
126
+ end
127
+ end
128
+
129
+ # return true if the host is excluded from proxying via the no_proxy directive.
130
+ # the 'no_proxy' variable contains a list of host suffixes separated by comma
131
+ # example: example.com,www.examle.org,localhost
132
+ def excluded_from_proxy?(host)
133
+ no_proxy = get_env('no_proxy') || ""
134
+ no_proxy.split(/\s*,\s*/).any? { |pattern| host.end_with? pattern }
135
+ end
136
+
107
137
  def download
108
138
  tries = 5
109
139
  begin
@@ -179,6 +209,8 @@ E
179
209
  "7z.exe x #{project_file} -o#{source_dir} -r -y"
180
210
  elsif project_file.end_with?(".zip")
181
211
  "unzip #{project_file} -d #{source_dir}"
212
+ elsif project_file.end_with?(".xz") || project_file.end_with?(".txz")
213
+ "xz -dc #{project_file} | ( cd #{source_dir} && tar -xf - )"
182
214
  else
183
215
  #if we don't recognize the extension, simply copy over the file
184
216
  Proc.new do
@@ -44,6 +44,7 @@ module Omnibus
44
44
  /libffi\.so/,
45
45
  /libgdbm\.so/,
46
46
  /libm\.so/,
47
+ /libnsl\.so/,
47
48
  /libpthread\.so/,
48
49
  /librt\.so/,
49
50
  /libutil\.so/
@@ -188,7 +189,7 @@ module Omnibus
188
189
  log " PROVIDED BY: #{location}"
189
190
  log " FAILED BECAUSE: #{reason}"
190
191
  end
191
- raise "Health Check Failed"
192
+ raise "Health Check Failed"
192
193
  end
193
194
  end
194
195
 
@@ -18,6 +18,7 @@ require 'omnibus/artifact'
18
18
  require 'omnibus/exceptions'
19
19
  require 'omnibus/library'
20
20
  require 'omnibus/util'
21
+ require 'time'
21
22
 
22
23
  module Omnibus
23
24
 
@@ -65,6 +66,7 @@ module Omnibus
65
66
 
66
67
  @exclusions = Array.new
67
68
  @conflicts = Array.new
69
+ @config_files = Array.new
68
70
  @dependencies = Array.new
69
71
  @runtime_dependencies = Array.new
70
72
  instance_eval(io)
@@ -240,6 +242,24 @@ module Omnibus
240
242
  @build_iteration || 1
241
243
  end
242
244
 
245
+ # Set or retrieve the {deb/rpm/solaris}-user fpm argument.
246
+ #
247
+ # @param val [String]
248
+ # @return [String]
249
+ def package_user(val=NULL_ARG)
250
+ @pkg_user = val unless val.equal?(NULL_ARG)
251
+ @pkg_user
252
+ end
253
+
254
+ # Set or retrieve the {deb/rpm/solaris}-group fpm argument.
255
+ #
256
+ # @param val [String]
257
+ # @return [String]
258
+ def package_group(val=NULL_ARG)
259
+ @pkg_group = val unless val.equal?(NULL_ARG)
260
+ @pkg_group
261
+ end
262
+
243
263
  # Add an Omnibus software dependency.
244
264
  #
245
265
  # Note that this is a *build time* dependency. If you need to
@@ -295,6 +315,14 @@ module Omnibus
295
315
  @exclusions << pattern
296
316
  end
297
317
 
318
+ # Add a config file.
319
+ #
320
+ # @param val [String] the name of a config file of your software
321
+ # @return [void]
322
+ def config_file(val)
323
+ @config_files << val
324
+ end
325
+
298
326
  # Returns the platform version of the machine on which Omnibus is
299
327
  # running, as determined by Ohai.
300
328
  #
@@ -381,7 +409,7 @@ module Omnibus
381
409
  when 'aix'
382
410
  [ "bff" ]
383
411
  when 'solaris2'
384
- [ "solaris" ]
412
+ [ "pkgmk" ]
385
413
  when 'windows'
386
414
  [ "msi" ]
387
415
  else
@@ -461,6 +489,8 @@ module Omnibus
461
489
  "#{package_name}-#{build_version}-#{iteration}.msi"
462
490
  when "bff"
463
491
  "#{package_name}.#{bff_version}.bff"
492
+ when "pkgmk"
493
+ "#{package_name}-#{build_version}-#{iteration}.solaris"
464
494
  else # fpm
465
495
  require "fpm/package/#{pkg_type}"
466
496
  pkg = FPM::Package.types[pkg_type].new
@@ -503,10 +533,11 @@ module Omnibus
503
533
  end
504
534
 
505
535
  def bff_command
506
- bff_command = ["mkinstallp -d / -T /tmp/bff/gen.template"]
536
+ bff_command = ["sudo /usr/sbin/mkinstallp -d / -T /tmp/bff/gen.template"]
507
537
  [bff_command.join(" "), {:returns => [0]}]
508
538
  end
509
539
 
540
+
510
541
  # The {https://github.com/jordansissel/fpm fpm} command to
511
542
  # generate a package for RedHat, Ubuntu, Solaris, etc. platforms.
512
543
  #
@@ -532,21 +563,29 @@ module Omnibus
532
563
  "-m '#{maintainer}'",
533
564
  "--description '#{description}'",
534
565
  "--url #{homepage}"]
566
+ if File.exist?(File.join(package_scripts_path, "preinst"))
567
+ command_and_opts << "--before-install '#{File.join(package_scripts_path, "preinst")}'"
568
+ end
569
+
535
570
  if File.exist?("#{package_scripts_path}/postinst")
536
- command_and_opts << "--post-install '#{package_scripts_path}/postinst'"
571
+ command_and_opts << "--after-install '#{File.join(package_scripts_path, "postinst")}'"
537
572
  end
538
573
  # solaris packages don't support --pre-uninstall
539
- if File.exist?("#{package_scripts_path}/prerm") && pkg_type != "solaris"
540
- command_and_opts << "--pre-uninstall '#{package_scripts_path}/prerm'"
574
+ if File.exist?("#{package_scripts_path}/prerm")
575
+ command_and_opts << "--before-remove '#{File.join(package_scripts_path, "prerm")}'"
541
576
  end
542
577
  # solaris packages don't support --post-uninstall
543
- if File.exist?("#{package_scripts_path}/postrm") && pkg_type != "solaris"
544
- command_and_opts << "--post-uninstall '#{package_scripts_path}/postrm'"
578
+ if File.exist?("#{package_scripts_path}/postrm")
579
+ command_and_opts << "--after-remove '#{File.join(package_scripts_path, "postrm")}'"
545
580
  end
546
581
 
547
582
  @exclusions.each do |pattern|
548
583
  command_and_opts << "--exclude '#{pattern}'"
549
584
  end
585
+
586
+ @config_files.each do |config_file|
587
+ command_and_opts << "--config-files '#{config_file}'"
588
+ end
550
589
 
551
590
  @runtime_dependencies.each do |runtime_dep|
552
591
  command_and_opts << "--depends '#{runtime_dep}'"
@@ -556,6 +595,18 @@ module Omnibus
556
595
  command_and_opts << "--conflicts '#{conflict}'"
557
596
  end
558
597
 
598
+ if @pkg_user
599
+ %w[ deb rpm solaris ].each do |type|
600
+ command_and_opts << " --#{type}-user #{@pkg_user}"
601
+ end
602
+ end
603
+
604
+ if @pkg_group
605
+ %w[ deb rpm solaris ].each do |type|
606
+ command_and_opts << " --#{type}-group #{@pkg_group}"
607
+ end
608
+ end
609
+
559
610
  command_and_opts << " --replaces #{@replaces}" if @replaces
560
611
  command_and_opts << install_path
561
612
  command_and_opts
@@ -602,7 +653,7 @@ module Omnibus
602
653
  end
603
654
 
604
655
  def run_bff
605
- FileUtils.rm_rf "/.info"
656
+ FileUtils.rm_rf "/.info/*"
606
657
  FileUtils.rm_rf "/tmp/bff"
607
658
  FileUtils.mkdir "/tmp/bff"
608
659
 
@@ -621,6 +672,65 @@ module Omnibus
621
672
  FileUtils.cp "/tmp/chef.#{bff_version}.bff", "/var/cache/omnibus/pkg/chef.#{bff_version}.bff"
622
673
  end
623
674
 
675
+ def pkgmk_version
676
+ "#{build_version}-#{iteration}"
677
+ end
678
+
679
+ def run_pkgmk
680
+ install_dirname = File.dirname(install_path)
681
+ install_basename = File.basename(install_path)
682
+
683
+ system "sudo rm -rf /tmp/pkgmk"
684
+ FileUtils.mkdir "/tmp/pkgmk"
685
+
686
+ system "cd #{install_dirname} && find #{install_basename} -print > /tmp/pkgmk/files"
687
+
688
+ prototype_content = <<-EOF
689
+ i pkginfo
690
+ i postinstall
691
+ i postremove
692
+ EOF
693
+
694
+ File.open "/tmp/pkgmk/Prototype", "w+" do |f|
695
+ f.write prototype_content
696
+ end
697
+
698
+ # generate the prototype's file list
699
+ system "cd #{install_dirname} && pkgproto < /tmp/pkgmk/files > /tmp/pkgmk/Prototype.files"
700
+
701
+ # fix up the user and group in the file list to root
702
+ system "awk '{ $5 = \"root\"; $6 = \"root\"; print }' < /tmp/pkgmk/Prototype.files >> /tmp/pkgmk/Prototype"
703
+
704
+ pkginfo_content = <<-EOF
705
+ CLASSES=none
706
+ TZ=PST
707
+ PATH=/sbin:/usr/sbin:/usr/bin:/usr/sadm/install/bin
708
+ BASEDIR=#{install_dirname}
709
+ PKG=#{package_name}
710
+ NAME=#{package_name}
711
+ ARCH=#{`uname -p`.chomp}
712
+ VERSION=#{pkgmk_version}
713
+ CATEGORY=application
714
+ DESC=#{description}
715
+ VENDOR=#{maintainer}
716
+ EMAIL=#{maintainer}
717
+ PSTAMP=#{`hostname`.chomp + Time.now.utc.iso8601}
718
+ EOF
719
+
720
+ File.open "/tmp/pkgmk/pkginfo", "w+" do |f|
721
+ f.write pkginfo_content
722
+ end
723
+
724
+ FileUtils.cp "#{package_scripts_path}/postinst", "/tmp/pkgmk/postinstall"
725
+ FileUtils.cp "#{package_scripts_path}/postrm", "/tmp/pkgmk/postremove"
726
+
727
+ shellout!("pkgmk -o -r #{install_dirname} -d /tmp/pkgmk -f /tmp/pkgmk/Prototype", :timeout => 3600)
728
+
729
+ system "pkgchk -vd /tmp/pkgmk chef"
730
+
731
+ system "pkgtrans /tmp/pkgmk /var/cache/omnibus/pkg/#{output_package("pkgmk")} chef"
732
+ end
733
+
624
734
  # Runs the necessary command to make a package with fpm. As a side-effect,
625
735
  # sets `output_package`
626
736
  # @return void
@@ -672,6 +782,8 @@ module Omnibus
672
782
  run_msi
673
783
  elsif pkg_type == "bff"
674
784
  run_bff
785
+ elsif pkg_type == "pkgmk"
786
+ run_pkgmk
675
787
  else # pkg_type == "fpm"
676
788
  run_fpm(pkg_type)
677
789
  end
@@ -262,7 +262,7 @@ module Omnibus
262
262
  if OHAI.cpu && OHAI.cpu[:total] && OHAI.cpu[:total].to_s =~ /^\d+$/
263
263
  OHAI.cpu[:total].to_i + 1
264
264
  else
265
- 2
265
+ 3
266
266
  end
267
267
  end
268
268
 
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'omnibus', '~> 1.2.0'
3
+ gem 'omnibus', '~> 1.3.0'
4
4
  gem 'omnibus-software', :git => 'git://github.com/opscode/omnibus-software.git', :branch => 'master'
@@ -1,72 +1,52 @@
1
1
  # -*- mode: ruby -*-
2
2
  # vi: set ft=ruby :
3
3
 
4
- require "vagrant"
4
+ require 'vagrant'
5
5
 
6
- if Vagrant::VERSION < "1.2.1"
7
- raise "The Omnibus Build Lab is only compatible with Vagrant 1.2.1+"
6
+ if Vagrant::VERSION < '1.2.1'
7
+ raise 'The Omnibus Build Lab is only compatible with Vagrant 1.2.1+'
8
8
  end
9
9
 
10
- host_project_path = File.expand_path("..", __FILE__)
10
+ host_project_path = File.expand_path('..', __FILE__)
11
11
  guest_project_path = "/home/vagrant/#{File.basename(host_project_path)}"
12
- project_name = "<%= config[:name] %>"
12
+ project_name = '<%= config[:name] %>'
13
13
 
14
- Vagrant.configure("2") do |config|
14
+ Vagrant.configure('2') do |config|
15
15
 
16
16
  config.vm.hostname = "#{project_name}-omnibus-build-lab"
17
17
 
18
- config.vm.define 'ubuntu-10.04' do |c|
19
- c.berkshelf.berksfile_path = "./Berksfile"
20
- c.vm.box = "opscode-ubuntu-10.04"
21
- c.vm.box_url = "http://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-10.04_chef-11.2.0.box"
22
- end
23
-
24
- config.vm.define 'ubuntu-11.04' do |c|
25
- c.berkshelf.berksfile_path = "./Berksfile"
26
- c.vm.box = "opscode-ubuntu-11.04"
27
- c.vm.box_url = "http://opscode-vm.s3.amazonaws.com/vagrant/boxes/opscode-ubuntu-11.04.box"
28
- end
18
+ %w{
19
+ ubuntu-10.04
20
+ ubuntu-11.04
21
+ ubuntu-12.04
22
+ centos-5.10
23
+ centos-6.5
24
+ }.each do |platform|
29
25
 
30
- config.vm.define 'ubuntu-12.04' do |c|
31
- c.berkshelf.berksfile_path = "./Berksfile"
32
- c.vm.box = "canonical-ubuntu-12.04"
33
- c.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box"
34
- end
26
+ config.vm.define platform do |c|
27
+ c.vm.box = "opscode-#{platform}"
28
+ c.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_#{platform}_chef-provisionerless.box"
29
+ end
35
30
 
36
- config.vm.define 'centos-5' do |c|
37
- c.berkshelf.berksfile_path = "./Berksfile"
38
- c.vm.box = "opscode-centos-5.8"
39
- c.vm.box_url = "http://opscode-vm.s3.amazonaws.com/vagrant/opscode_centos-5.8_chef-11.2.0.box"
40
- end
41
-
42
- config.vm.define 'centos-6' do |c|
43
- c.berkshelf.berksfile_path = "./Berksfile"
44
- c.vm.box = "opscode-centos-6.3"
45
- c.vm.box_url = "http://opscode-vm.s3.amazonaws.com/vagrant/opscode_centos-6.3_chef-11.2.0.box"
46
31
  end
47
32
 
48
33
  config.vm.provider :virtualbox do |vb|
49
34
  # Give enough horsepower to build without taking all day.
50
35
  vb.customize [
51
- "modifyvm", :id,
52
- "--memory", "1536",
53
- "--cpus", "2"
36
+ 'modifyvm', :id,
37
+ '--memory', '1536',
38
+ '--cpus', '2'
54
39
  ]
55
40
  end
56
41
 
57
42
  # Ensure a recent version of the Chef Omnibus packages are installed
58
- config.omnibus.chef_version = :latest
43
+ config.omnibus.chef_version = '11.6.2'
59
44
 
60
45
  # Enable the berkshelf-vagrant plugin
61
46
  config.berkshelf.enabled = true
62
- # The path to the Berksfile to use with Vagrant Berkshelf
63
- config.berkshelf.berksfile_path = "./Berksfile"
64
-
65
- config.ssh.max_tries = 40
66
- config.ssh.timeout = 120
67
47
  config.ssh.forward_agent = true
68
48
 
69
- host_project_path = File.expand_path("..", __FILE__)
49
+ host_project_path = File.expand_path('..', __FILE__)
70
50
  guest_project_path = "/home/vagrant/#{File.basename(host_project_path)}"
71
51
 
72
52
  config.vm.synced_folder host_project_path, guest_project_path
@@ -74,15 +54,15 @@ Vagrant.configure("2") do |config|
74
54
  # prepare VM to be an Omnibus builder
75
55
  config.vm.provision :chef_solo do |chef|
76
56
  chef.json = {
77
- "omnibus" => {
78
- "build_user" => "vagrant",
79
- "build_dir" => guest_project_path,
80
- "install_dir" => "/opt/#{project_name}"
57
+ 'omnibus' => {
58
+ 'build_user' => 'vagrant',
59
+ 'build_dir' => guest_project_path,
60
+ 'install_dir' => "/opt/#{project_name}"
81
61
  }
82
62
  }
83
63
 
84
64
  chef.run_list = [
85
- "recipe[omnibus::default]"
65
+ 'recipe[omnibus::default]'
86
66
  ]
87
67
  end
88
68
 
@@ -3,3 +3,4 @@
3
3
  # s3_bucket "some-bucket"
4
4
  # use_s3_caching true
5
5
  # solaris_compiler "gcc"
6
+ # build_retries 3
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ #
3
+ # Perform necessary <%= config[:name] %> setup steps
4
+ # before package is installed.
5
+ #
6
+
7
+ echo "You're about to install <%= config[:name] %>!"
@@ -0,0 +1,15 @@
1
+ #!/bin/bash
2
+ #
3
+ # Perform necessary <%= config[:name] %> setup steps
4
+ # prior to installing package.
5
+ #
6
+
7
+ PROGNAME=$(basename $0)
8
+
9
+ function error_exit
10
+ {
11
+ echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2
12
+ exit 1
13
+ }
14
+
15
+ exit 0
@@ -38,5 +38,5 @@ build do
38
38
  "--with-zlib=#{install_dir}/embedded"].join(" "), :env => env
39
39
 
40
40
  command "make -j #{max_build_jobs}", :env => env
41
- command "make install"
41
+
42
42
  end
@@ -16,5 +16,5 @@
16
16
  #
17
17
 
18
18
  module Omnibus
19
- VERSION = "1.2.0"
19
+ VERSION = "1.3.0"
20
20
  end
@@ -21,11 +21,11 @@ Gem::Specification.new do |gem|
21
21
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
22
22
  gem.require_paths = ["lib"]
23
23
 
24
- gem.add_dependency "mixlib-shellout", "~> 1.0"
25
- gem.add_dependency "mixlib-config", "~> 1.1.2"
24
+ gem.add_dependency "mixlib-shellout", "~> 1.3.0"
25
+ gem.add_dependency "mixlib-config", "~> 2.1.0"
26
26
  gem.add_dependency "ohai", ">= 0.6.12"
27
27
  gem.add_dependency "rake", ">= 0.9"
28
- gem.add_dependency "fpm", "~> 0.4.33"
28
+ gem.add_dependency "fpm", "~> 1.0.0"
29
29
  gem.add_dependency "uber-s3"
30
30
  gem.add_dependency "thor", ">= 0.16.0"
31
31
 
@@ -30,9 +30,9 @@ describe Omnibus::BuildVersion do
30
30
  ENV['BUILD_ID'] = nil
31
31
  ENV['OMNIBUS_APPEND_TIMESTAMP'] = nil
32
32
  Omnibus::BuildVersion.any_instance.stub(:shellout)
33
- .and_return(mock("ouput",
34
- :stdout => git_describe,
35
- :exitstatus => 0))
33
+ .and_return(double("ouput",
34
+ :stdout => git_describe,
35
+ :exitstatus => 0))
36
36
  end
37
37
 
38
38
  describe "git describe parsing" do
@@ -239,9 +239,9 @@ fatal: No tags can describe '809ea1afcce67e1148c1bf0822d40a7ef12c380e'.
239
239
  Try --always, or create some tags.
240
240
  STDERR
241
241
  build_version.stub(:shellout)
242
- .and_return(mock("ouput",
243
- :stderr => stderr,
244
- :exitstatus => 128))
242
+ .and_return(double("ouput",
243
+ :stderr => stderr,
244
+ :exitstatus => 128))
245
245
  end
246
246
  it "sets the version to 0.0.0" do
247
247
  build_version.git_describe.should eq("0.0.0")
@@ -257,9 +257,9 @@ Try --always, or create some tags.
257
257
  .with("git describe",
258
258
  {:live_stream => nil,
259
259
  :cwd => path})
260
- .and_return(mock("ouput",
261
- :stdout => git_describe,
262
- :exitstatus => 0))
260
+ .and_return(double("ouput",
261
+ :stdout => git_describe,
262
+ :exitstatus => 0))
263
263
  build_version.git_describe
264
264
  end
265
265
  end
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+
3
+ describe Omnibus::GitFetcher do
4
+ let(:shell_out) {
5
+ shell_out = double('Mixlib::ShellOut')
6
+ stub_const('Mixlib::ShellOut', shell_out)
7
+ shell_out
8
+ }
9
+ let(:software) {
10
+ double('software').tap { |s|
11
+ s.stub :name => 'project',
12
+ :source => { :git => 'git@example.com:test/project.git' },
13
+ :version => '0.0.1',
14
+ :project_dir => '/tmp/project'
15
+ }
16
+ }
17
+ def expect_git_clone_and_ls_remote
18
+ expect_git_clone
19
+ expect_git_ls_remote
20
+ end
21
+ def expect_git_clone
22
+ double('git_clone').tap do |g|
23
+ shell_out.should_receive(:new)
24
+ .with('git clone git@example.com:test/project.git /tmp/project', :live_stream => STDOUT)
25
+ .ordered
26
+ .and_return(g)
27
+ g.should_receive(:run_command).ordered
28
+ g.should_receive(:error!).ordered
29
+ end
30
+ end
31
+ def expect_git_ls_remote
32
+ double('git_ls_remote').tap do |g|
33
+ shell_out.should_receive(:new)
34
+ .with('git ls-remote origin 0.0.1*', :live_stream => STDOUT, :cwd => '/tmp/project')
35
+ .ordered
36
+ .and_return(g)
37
+ g.should_receive(:run_command).ordered
38
+ g.should_receive(:error!).ordered
39
+ g.stub(:stdout => git_ls_remote_out)
40
+ end
41
+ end
42
+ describe "#fetch" do
43
+ context "when the project is not cloned yet" do
44
+ before {
45
+ File.stub(:exist?).with('/tmp/project/.git').and_return(false)
46
+ }
47
+ context "when the source repository is accessible" do
48
+ subject {
49
+ Omnibus::GitFetcher.new software
50
+ }
51
+ context "when the ref exists" do
52
+ let(:git_ls_remote_out) {
53
+ 'a2ed66c01f42514bcab77fd628149eccb4ecee28 refs/tags/0.0.1'
54
+ }
55
+ it 'should clone the Git repository and then check out the commit' do
56
+ 1.times { expect_git_clone_and_ls_remote }
57
+ double('git_checkout').tap do |g|
58
+ shell_out.should_receive(:new)
59
+ .with('git checkout a2ed66c01f42514bcab77fd628149eccb4ecee28', :live_stream => STDOUT, :cwd => '/tmp/project')
60
+ .ordered
61
+ .and_return(g)
62
+ g.should_receive(:run_command).ordered
63
+ g.should_receive(:error!).ordered
64
+ end
65
+
66
+ expect { subject.fetch }.to_not raise_error
67
+ end
68
+ end
69
+ context "when the ref does not exist" do
70
+ let(:git_ls_remote_out) {
71
+ ''
72
+ }
73
+ it 'should clone the Git repository and then fail while retrying 3 times' do
74
+ 4.times {
75
+ expect_git_clone
76
+ 4.times {
77
+ expect_git_ls_remote
78
+ }
79
+ }
80
+ Omnibus::Fetcher::ErrorReporter.any_instance
81
+ .should_receive(:explain).with(%q|Failed to find any commits for the ref '0.0.1'|)
82
+ subject.should_receive(:log).with(%r|git ls-remote failed|).at_least(1).times
83
+ subject.should_receive(:log).with(%r|git clone/fetch failed|).at_least(1).times
84
+ # Prevent sleeping to run the spec fast
85
+ subject.stub(:sleep)
86
+ expect { subject.fetch }.to raise_error(/Could not parse SHA reference/)
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Omnibus::NetFetcher do
4
4
  it "should download and uncompress zip files" do
5
- software_mock = stub 'software'
5
+ software_mock = double('software')
6
6
  software_mock.stub :project_file => 'file.zip',
7
7
  :name => 'file',
8
8
  :source => '/tmp/out',
@@ -13,4 +13,113 @@ describe Omnibus::NetFetcher do
13
13
  net_fetcher = Omnibus::NetFetcher.new software_mock
14
14
  net_fetcher.extract_cmd.should == 'unzip file.zip -d /tmp/out'
15
15
  end
16
+ it "should download and uncompress .tar.xz files" do
17
+ software_mock = double('software')
18
+ software_mock.stub :project_file => 'file.tar.xz',
19
+ :name => 'file',
20
+ :source => '/tmp/out',
21
+ :checksum => 'abc123',
22
+ :source_uri => 'http://example.com/file.tar.xz',
23
+ :source_dir => '/tmp/out',
24
+ :project_dir => '/tmp/project'
25
+ net_fetcher = Omnibus::NetFetcher.new software_mock
26
+ net_fetcher.extract_cmd.should == 'xz -dc file.tar.xz | ( cd /tmp/out && tar -xf - )'
27
+ end
28
+ it "should download and uncompress .txz files" do
29
+ software_mock = double('software')
30
+ software_mock.stub :project_file => 'file.txz',
31
+ :name => 'file',
32
+ :source => '/tmp/out',
33
+ :checksum => 'abc123',
34
+ :source_uri => 'http://example.com/file.txz',
35
+ :source_dir => '/tmp/out',
36
+ :project_dir => '/tmp/project'
37
+ net_fetcher = Omnibus::NetFetcher.new software_mock
38
+ net_fetcher.extract_cmd.should == 'xz -dc file.txz | ( cd /tmp/out && tar -xf - )'
39
+ end
40
+
41
+ describe "http_proxy helper" do
42
+ before(:each) do
43
+ software_mock = double('software')
44
+ software_mock.stub(:project_file => 'file.txz',
45
+ :name => 'file',
46
+ :source => '/tmp/out',
47
+ :checksum => 'abc123',
48
+ :source_uri => 'http://example.com/file.txz',
49
+ :source_dir => '/tmp/out',
50
+ :project_dir => '/tmp/project')
51
+ @net_fetcher = Omnibus::NetFetcher.new(software_mock)
52
+ env_vars = ['HTTP_PROXY',
53
+ 'HTTP_PROXY_USER',
54
+ 'HTTP_PROXY_PASS',
55
+ 'http_proxy',
56
+ 'http_proxy_user',
57
+ 'http_proxy_pass']
58
+ @orig_env = env_vars.inject({}) do |h, var|
59
+ h[var] = ENV.delete(var)
60
+ h
61
+ end
62
+ end
63
+
64
+ after(:each) do
65
+ # restore ENV hash
66
+ @orig_env.each { |var, val| ENV[var] = val }
67
+ end
68
+
69
+ describe "get_env handles upper and lower case env vars" do
70
+ it "lower via upper" do
71
+ ENV['lower'] = "abc"
72
+ @net_fetcher.get_env('LOWER').should == "abc"
73
+ @net_fetcher.get_env('lower').should == "abc"
74
+ end
75
+
76
+ it "upper via lower" do
77
+ ENV['UPPER'] = "abc"
78
+ @net_fetcher.get_env('upper').should == "abc"
79
+ @net_fetcher.get_env('UPPER').should == "abc"
80
+ end
81
+ end
82
+
83
+ it "should return nil when no proxy is set in env" do
84
+ @net_fetcher.http_proxy.should be_nil
85
+ end
86
+
87
+ it "should return a URI object when HTTP_PROXY is set" do
88
+ ENV['HTTP_PROXY'] = "http://my.proxy"
89
+ @net_fetcher.http_proxy.should == URI.parse("http://my.proxy")
90
+ end
91
+
92
+ it "sets user and pass from env when set" do
93
+ ENV['HTTP_PROXY'] = "my.proxy"
94
+ ENV['HTTP_PROXY_USER'] = "alex"
95
+ ENV['HTTP_PROXY_PASS'] = "sesame"
96
+ @net_fetcher.http_proxy.should == URI.parse("http://alex:sesame@my.proxy")
97
+ end
98
+
99
+ it "uses user and pass in URL before those in env" do
100
+ ENV['HTTP_PROXY'] = "sally:peanut@my.proxy"
101
+ ENV['HTTP_PROXY_USER'] = "alex"
102
+ ENV['HTTP_PROXY_PASS'] = "sesame"
103
+ @net_fetcher.http_proxy.should == URI.parse("http://sally:peanut@my.proxy")
104
+ end
105
+
106
+ it "proxies if host doesn't match exclude list" do
107
+ ENV['NO_PROXY'] = "google.com,www.buz.org"
108
+ a_url = URI.parse("http://should.proxy.com/123")
109
+ @net_fetcher.excluded_from_proxy?(a_url.host).should be_false
110
+
111
+ b_url = URI.parse("http://buz.org/123")
112
+ @net_fetcher.excluded_from_proxy?(b_url.host).should be_false
113
+ end
114
+
115
+ it "does not proxy if host matches exclude list" do
116
+ ENV['NO_PROXY'] = "google.com,www.buz.org"
117
+ a_url = URI.parse("http://google.com/hello")
118
+ @net_fetcher.excluded_from_proxy?(a_url.host).should be_true
119
+
120
+ b_url = URI.parse("http://www.buz.org/123")
121
+ @net_fetcher.excluded_from_proxy?(b_url.host).should be_true
122
+ end
123
+ end
16
124
  end
125
+
@@ -47,7 +47,7 @@ describe Omnibus::PackageRelease do
47
47
  describe "validating configuration" do
48
48
 
49
49
  before do
50
- Omnibus.stub!(:config).and_return(config)
50
+ Omnibus.stub(:config).and_return(config)
51
51
  end
52
52
 
53
53
  it "validates that the s3 key is set" do
@@ -104,7 +104,7 @@ describe Omnibus::PackageRelease do
104
104
  end
105
105
 
106
106
  before do
107
- package_release.stub!(:config).and_return(config)
107
+ package_release.stub(:config).and_return(config)
108
108
  File.stub(:exist?).with(pkg_metadata_path).and_return(true)
109
109
  File.stub(:exist?).with(pkg_path).and_return(true)
110
110
  IO.stub(:read).with(pkg_metadata_path).and_return(metadata_json)
@@ -23,17 +23,17 @@ describe Omnibus::S3Cache do
23
23
  describe '#tarball_software' do
24
24
  subject(:tarball_software) { described_class.new.tarball_software }
25
25
 
26
- let(:source_a) { stub(source: { url: 'a' }) }
27
- let(:source_b) { stub(source: { url: 'b' }) }
28
- let(:source_c) { stub(source: {}) }
26
+ let(:source_a) { double(source: { url: 'a' }) }
27
+ let(:source_b) { double(source: { url: 'b' }) }
28
+ let(:source_c) { double(source: {}) }
29
29
  let(:projects) { [
30
- stub({ library: [source_a, source_c] }),
31
- stub({ library: [source_c, source_b] })
30
+ double({ library: [source_a, source_c] }),
31
+ double({ library: [source_c, source_b] })
32
32
  ] }
33
33
  let(:software_with_urls) { [source_a, source_b] }
34
34
 
35
35
  before do
36
- Omnibus.stub(config: stub({
36
+ Omnibus.stub(config: double({
37
37
  s3_bucket: 'test', s3_access_key: 'test', s3_secret_key: 'test'
38
38
  }))
39
39
 
@@ -0,0 +1,34 @@
1
+ require 'omnibus'
2
+ require 'spec_helper'
3
+
4
+ describe Omnibus do
5
+
6
+ describe '#software_dirs' do
7
+
8
+ before :each do
9
+ # This is probably really silly, but it works
10
+ Omnibus.class_eval { @software_dirs = nil }
11
+ end
12
+
13
+ context 'omnibus_software_root not nil' do
14
+ before :each do
15
+ Omnibus.stub(:omnibus_software_root) { './data' }
16
+ end
17
+
18
+ it 'will include list of software from omnibus-software gem' do
19
+ Omnibus.software_dirs.length.should eq 2
20
+ end
21
+ end
22
+
23
+ context 'omnibus_software_root nil' do
24
+ before :each do
25
+ Omnibus.stub(:omnibus_software_root) { nil }
26
+ end
27
+
28
+ it 'will not include list of software from omnibus-software gem' do
29
+ Omnibus.software_dirs.length.should eq 1
30
+ end
31
+ end
32
+ end
33
+
34
+ end
@@ -6,8 +6,8 @@ require 'spec_helper'
6
6
  describe Omnibus::Software do
7
7
 
8
8
  let(:project) do
9
- p = mock(Omnibus::Project)
10
- p.should_receive(:install_path).any_number_of_times.and_return("monkeys")
9
+ p = double(Omnibus::Project)
10
+ p.stub(:install_path).and_return("monkeys")
11
11
  p
12
12
  end
13
13
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnibus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-12 00:00:00.000000000 Z
12
+ date: 2013-12-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mixlib-shellout
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '1.0'
21
+ version: 1.3.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: '1.0'
29
+ version: 1.3.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: mixlib-config
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 1.1.2
37
+ version: 2.1.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 1.1.2
45
+ version: 2.1.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: ohai
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +82,7 @@ dependencies:
82
82
  requirements:
83
83
  - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: 0.4.33
85
+ version: 1.0.0
86
86
  type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,7 @@ dependencies:
90
90
  requirements:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: 0.4.33
93
+ version: 1.0.0
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: uber-s3
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -211,6 +211,8 @@ files:
211
211
  - lib/omnibus/templates/package_scripts/makeselfinst.erb
212
212
  - lib/omnibus/templates/package_scripts/postinst.erb
213
213
  - lib/omnibus/templates/package_scripts/postrm.erb
214
+ - lib/omnibus/templates/package_scripts/preinst.erb
215
+ - lib/omnibus/templates/package_scripts/prerm.erb
214
216
  - lib/omnibus/templates/project.rb.erb
215
217
  - lib/omnibus/templates/software/c-example.rb.erb
216
218
  - lib/omnibus/templates/software/erlang-example.rb.erb
@@ -224,10 +226,12 @@ files:
224
226
  - spec/data/overrides/good.overrides
225
227
  - spec/data/overrides/with_dupes.overrides
226
228
  - spec/data/software/erchef.rb
229
+ - spec/fetchers/git_fetcher_spec.rb
227
230
  - spec/fetchers/net_fetcher_spec.rb
228
231
  - spec/overrides_spec.rb
229
232
  - spec/package_release_spec.rb
230
233
  - spec/s3_cacher_spec.rb
234
+ - spec/software_dirs_spec.rb
231
235
  - spec/software_spec.rb
232
236
  - spec/spec_helper.rb
233
237
  homepage: https://github.com/opscode/omnibus-ruby
@@ -251,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
251
255
  version: '0'
252
256
  segments:
253
257
  - 0
254
- hash: -2339140264674066912
258
+ hash: -488059737138888426
255
259
  requirements: []
256
260
  rubyforge_project:
257
261
  rubygems_version: 1.8.23
@@ -265,10 +269,12 @@ test_files:
265
269
  - spec/data/overrides/good.overrides
266
270
  - spec/data/overrides/with_dupes.overrides
267
271
  - spec/data/software/erchef.rb
272
+ - spec/fetchers/git_fetcher_spec.rb
268
273
  - spec/fetchers/net_fetcher_spec.rb
269
274
  - spec/overrides_spec.rb
270
275
  - spec/package_release_spec.rb
271
276
  - spec/s3_cacher_spec.rb
277
+ - spec/software_dirs_spec.rb
272
278
  - spec/software_spec.rb
273
279
  - spec/spec_helper.rb
274
280
  has_rdoc: