omnibus 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: