omnibus 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MmE1YTFhZDlhZTEyOGJlMzFiNTc2YzY0OWU2NTYxODVlOGVkNWZkMg==
4
+ NmUyOTcwNzFiYmJmNDE5YmM5Y2RhMDBkNzE2ZjVlOTEwNzMzOTFhMg==
5
5
  data.tar.gz: !binary |-
6
- OWVkZDk0ZTg4OTNiODU4OWQwYzU5ZDRkMmMxMzM1ODM5OGZiYWRjZA==
6
+ MDU0ZjEwNDhiZjJkYjliYzY1NzM3NzI2ZjE3YjQxNzYxMGRhZDBhZQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MWEyOWQyZDNkMWNjZDNmNmExODE5OWNhNDRiZDVkOTQyYzg4NjZhZWNkZDVl
10
- MGY2OWMxMWFlNzljMWJkZDY2ODExYjIwZjEwN2NmODM1ZDkxZjJjN2FhMDQx
11
- ZjliZDA0MWQzYzExNmY4ZmI0MmE4NjA4ZGZmZDU4ZmE5MzA3OTE=
9
+ ODY2MDNhOTQ1YzAzYWJjZTI2OTQwZDBkZjIwMWYyMmRhNTZkOTFjN2Q2MmE4
10
+ ZjMxZDY5NGZkZmJmMjkzZWNiNjQxZDU4MGExYjRkNmI0ZmFhNjYwYjM3NDlh
11
+ NjJhMjVkZmU1YmU5NTA0OGNmY2NlOWMzYTg2OGM0NjNkMzkwMTQ=
12
12
  data.tar.gz: !binary |-
13
- MWQ4Yjg1Mjc3ZTMxNDBjNjk1MGRiZWZlNDk5NWUxOGU0OTQ4Y2NkNTQ2OTVj
14
- MjIxZmNhMjY0ZTFhNGVlYzIxOTYwNmNjZTY4MjczODhkYmUyMWFmZGYwOTI1
15
- ZGY2ZGExN2ZlODRlNWE2YzBlMjUxYjY1NmZmOWY1YTU0MjNiNmU=
13
+ ZTUxMmFiM2M0ZGNiNjMxODkwNGE2OTBlOGQ3MjYzMDE3NTA5NTIzOWExZWI3
14
+ MzA4NmVhZTAzNDY1MGI4MTE1MTdiMTdkOWQ1MTViNzBiZmY1YWZjZjMyMjRm
15
+ YWE4NzcwNTdiZTRiNWI3MTlmYjA1Yjg4ZTFiNTY0MjQ5MWEyZGI=
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## 1.1.0 (June 12, 2013)
2
+
3
+ FEATURES:
4
+
5
+ * AIX health check whitelist support
6
+ * AIX Backup-File Format (BFF) package support
7
+
8
+ IMPROVEMENTS:
9
+
10
+ * Add libstdc++ to SmartOS whitelist libs - this allows the health check pass when
11
+ depending on C++ libs.
12
+
13
+ BUG FIXES:
14
+
15
+ * [CHEF-4246] - omnibus cache populate failing
16
+
1
17
  ## 1.0.4 (May 23, 2013)
2
18
 
3
19
  FEATURES:
@@ -16,7 +32,6 @@ BUG FIXES:
16
32
 
17
33
  * [CHEF-4214] - projects in multi-project omnibus repositories share dependency scope
18
34
 
19
-
20
35
  ## 1.0.3 (May 2, 2013)
21
36
 
22
37
  FEATURES:
@@ -45,8 +45,11 @@ module Omnibus
45
45
  Omnibus::BuildVersion.new.git_describe
46
46
  end
47
47
 
48
- # @todo Remove this... it does nothing
49
- def initialize
48
+ # Create a new BuildVersion
49
+ #
50
+ # @param [String] path Path from which to read git version information
51
+ def initialize(path=Omnibus.root)
52
+ @path = path
50
53
  end
51
54
 
52
55
  # @!group Version Generator Methods
@@ -130,7 +133,7 @@ module Omnibus
130
133
  git_cmd = "git describe"
131
134
  cmd = shellout(git_cmd,
132
135
  :live_stream => nil,
133
- :cwd => Omnibus.project_root)
136
+ :cwd => @path)
134
137
  if cmd.exitstatus == 0
135
138
  cmd.stdout.chomp
136
139
  else
@@ -49,6 +49,16 @@ module Omnibus
49
49
  /libutil\.so/
50
50
  ]
51
51
 
52
+ AIX_WHITELIST_LIBS = [
53
+ /libpthread\.a/,
54
+ /libpthreads\.a/,
55
+ /libdl.a/,
56
+ /librtl\.a/,
57
+ /libc\.a/,
58
+ /libcrypt\.a/,
59
+ /unix$/,
60
+ ]
61
+
52
62
  SOLARIS_WHITELIST_LIBS = [
53
63
  /libaio\.so/,
54
64
  /libavl\.so/,
@@ -94,6 +104,7 @@ module Omnibus
94
104
  /libmd.so/,
95
105
  /libc.so/,
96
106
  /libgcc_s.so/,
107
+ /libstdc\+\+\.so/,
97
108
  /libcrypt.so/
98
109
  ]
99
110
 
@@ -134,8 +145,11 @@ module Omnibus
134
145
  end
135
146
 
136
147
  def self.run(install_dir)
137
- if OHAI.platform == "mac_os_x"
148
+ case OHAI.platform
149
+ when "mac_os_x"
138
150
  bad_libs = health_check_otool(install_dir)
151
+ when "aix"
152
+ bad_libs = health_check_aix(install_dir)
139
153
  else
140
154
  bad_libs = health_check_ldd(install_dir)
141
155
  end
@@ -226,6 +240,8 @@ module Omnibus
226
240
  SMARTOS_WHITELIST_LIBS
227
241
  when 'freebsd'
228
242
  FREEBSD_WHITELIST_LIBS
243
+ when 'aix'
244
+ AIX_WHITELIST_LIBS
229
245
  else
230
246
  WHITELIST_LIBS
231
247
  end
@@ -255,6 +271,43 @@ module Omnibus
255
271
  bad_libs
256
272
  end
257
273
 
274
+ def self.health_check_aix(install_dir)
275
+ #
276
+ # ShellOut has GC turned off during execution, so when we're
277
+ # executing extremely long commands with lots of output, we
278
+ # should be mindful that the string concatentation for building
279
+ # #stdout will hurt memory usage drastically
280
+ #
281
+ ldd_cmd = "find #{install_dir}/ -type f | xargs file | grep \"RISC System\" | awk -F: '{print $1}' | xargs -n 1 ldd > ldd.out 2>/dev/null"
282
+
283
+ log "Executing `#{ldd_cmd}`"
284
+ shell = Mixlib::ShellOut.new(ldd_cmd, :timeout => 3600)
285
+ shell.run_command
286
+
287
+ ldd_output = File.read('ldd.out')
288
+
289
+ current_library = nil
290
+ bad_libs = {}
291
+
292
+ ldd_output.each_line do |line|
293
+ case line
294
+ when /^(.+) needs:$/
295
+ current_library = $1
296
+ log "*** Analysing dependencies for #{current_library}" if ARGV[0] == "verbose"
297
+ when /^\s+(.+)$/
298
+ name = $1
299
+ linked = $1
300
+ bad_libs = check_for_bad_library(install_dir, bad_libs, current_library, name, linked)
301
+ when /File is not an executable XCOFF file/ # ignore non-executable files
302
+ else
303
+ log "*** Line did not match for #{current_library}\n#{line}"
304
+ end
305
+ end
306
+
307
+ File.delete('ldd.out')
308
+ bad_libs
309
+ end
310
+
258
311
  def self.health_check_ldd(install_dir)
259
312
  #
260
313
  # ShellOut has GC turned off during execution, so when we're
@@ -263,6 +316,7 @@ module Omnibus
263
316
  # #stdout will hurt memory usage drastically
264
317
  #
265
318
  ldd_cmd = "find #{install_dir}/ -type f | xargs ldd > ldd.out 2>/dev/null"
319
+
266
320
  log "Executing `#{ldd_cmd}`"
267
321
  shell = Mixlib::ShellOut.new(ldd_cmd, :timeout => 3600)
268
322
  shell.run_command
@@ -168,6 +168,8 @@ module Omnibus
168
168
  "#{build_iteration}.#{platform}.#{maj}.#{machine}"
169
169
  when 'windows'
170
170
  "#{build_iteration}.windows"
171
+ when 'aix'
172
+ "#{build_iteration}"
171
173
  else
172
174
  "#{build_iteration}.#{platform}.#{platform_version}"
173
175
  end
@@ -376,6 +378,8 @@ module Omnibus
376
378
  [ "deb" ]
377
379
  when 'fedora', 'rhel'
378
380
  [ "rpm" ]
381
+ when 'aix'
382
+ [ "bff" ]
379
383
  when 'solaris2'
380
384
  [ "solaris" ]
381
385
  when 'windows'
@@ -455,6 +459,8 @@ module Omnibus
455
459
  "#{package_name}-#{build_version}_#{iteration}.sh"
456
460
  when "msi"
457
461
  "#{package_name}-#{build_version}-#{iteration}.msi"
462
+ when "bff"
463
+ "#{package_name}.#{bff_version}.bff"
458
464
  else # fpm
459
465
  require "fpm/package/#{pkg_type}"
460
466
  pkg = FPM::Package.types[pkg_type].new
@@ -492,6 +498,11 @@ module Omnibus
492
498
  [msi_command.join(" "), {:returns => [0, 204]}]
493
499
  end
494
500
 
501
+ def bff_command
502
+ bff_command = ["mkinstallp -d / -T /tmp/bff/gen.template"]
503
+ [bff_command.join(" "), {:returns => [0]}]
504
+ end
505
+
495
506
  # The {https://github.com/jordansissel/fpm fpm} command to
496
507
  # generate a package for RedHat, Ubuntu, Solaris, etc. platforms.
497
508
  #
@@ -582,6 +593,30 @@ module Omnibus
582
593
  run_package_command(msi_command)
583
594
  end
584
595
 
596
+ def bff_version
597
+ build_version.split(/[^\d]/)[0..2].join(".") + ".#{iteration}"
598
+ end
599
+
600
+ def run_bff
601
+ FileUtils.rm_rf "/.info"
602
+ FileUtils.rm_rf "/tmp/bff"
603
+ FileUtils.mkdir "/tmp/bff"
604
+
605
+ system "find #{install_path} -print > /tmp/bff/file.list"
606
+
607
+ system "cat #{package_scripts_path}/aix/opscode.chef.client.template | sed -e 's/TBS/#{bff_version}/' > /tmp/bff/gen.preamble"
608
+
609
+ # @todo can we just use an erb template here?
610
+ system "cat /tmp/bff/gen.preamble /tmp/bff/file.list #{package_scripts_path}/aix/opscode.chef.client.template.last > /tmp/bff/gen.template"
611
+
612
+ FileUtils.cp "#{package_scripts_path}/aix/unpostinstall.sh", "#{install_path}/bin"
613
+ FileUtils.cp "#{package_scripts_path}/aix/postinstall.sh", "#{install_path}/bin"
614
+
615
+ run_package_command(bff_command)
616
+
617
+ FileUtils.cp "/tmp/chef.#{bff_version}.bff", "/var/cache/omnibus/pkg/chef.#{bff_version}.bff"
618
+ end
619
+
585
620
  # Runs the necessary command to make a package with fpm. As a side-effect,
586
621
  # sets `output_package`
587
622
  # @return void
@@ -631,6 +666,8 @@ module Omnibus
631
666
  run_makeself
632
667
  elsif pkg_type == "msi"
633
668
  run_msi
669
+ elsif pkg_type == "bff"
670
+ run_bff
634
671
  else # pkg_type == "fpm"
635
672
  run_fpm(pkg_type)
636
673
  end
@@ -643,6 +680,8 @@ module Omnibus
643
680
  task "copy" => package_types do
644
681
  if OHAI.platform == "windows"
645
682
  cp_cmd = "xcopy #{config.package_dir}\\*.msi pkg\\ /Y"
683
+ elsif OHAI.platform == "aix"
684
+ cp_cmd = "cp #{config.package_dir}/*.bff pkg/"
646
685
  else
647
686
  cp_cmd = "cp #{config.package_dir}/* pkg/"
648
687
  end
@@ -85,7 +85,9 @@ module Omnibus
85
85
  end
86
86
 
87
87
  def tarball_software
88
- Omnibus.library.select {|s| s.source && s.source.key?(:url)}
88
+ Omnibus.projects.map do |project|
89
+ project.library.select {|s| s.source && s.source.key?(:url)}
90
+ end.flatten
89
91
  end
90
92
 
91
93
  def populate
@@ -16,5 +16,5 @@
16
16
  #
17
17
 
18
18
  module Omnibus
19
- VERSION = "1.0.4"
19
+ VERSION = "1.1.0"
20
20
  end
@@ -247,4 +247,20 @@ Try --always, or create some tags.
247
247
  build_version.git_describe.should eq("0.0.0")
248
248
  end
249
249
  end
250
+
251
+ describe "#initialize `path` parameter" do
252
+ let(:path) { "/some/fake/path" }
253
+ subject(:build_version){ Omnibus::BuildVersion.new(path) }
254
+
255
+ it "runs `git describe` at an alternate path" do
256
+ build_version.should_receive(:shellout)
257
+ .with("git describe",
258
+ {:live_stream => nil,
259
+ :cwd => path})
260
+ .and_return(mock("ouput",
261
+ :stdout => git_describe,
262
+ :exitstatus => 0))
263
+ build_version.git_describe
264
+ end
265
+ end
250
266
  end
@@ -0,0 +1,47 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2013 Opscode, Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require 'spec_helper'
19
+ require 'omnibus/s3_cacher'
20
+
21
+ describe Omnibus::S3Cache do
22
+
23
+ describe '#tarball_software' do
24
+ subject(:tarball_software) { described_class.new.tarball_software }
25
+
26
+ let(:source_a) { stub(source: { url: 'a' }) }
27
+ let(:source_b) { stub(source: { url: 'b' }) }
28
+ let(:source_c) { stub(source: {}) }
29
+ let(:projects) { [
30
+ stub({ library: [source_a, source_c] }),
31
+ stub({ library: [source_c, source_b] })
32
+ ] }
33
+ let(:software_with_urls) { [source_a, source_b] }
34
+
35
+ before do
36
+ Omnibus.stub(config: stub({
37
+ s3_bucket: 'test', s3_access_key: 'test', s3_secret_key: 'test'
38
+ }))
39
+
40
+ Omnibus.stub(projects: projects)
41
+ end
42
+
43
+ it 'lists all software with urls' do
44
+ tarball_software.should == software_with_urls
45
+ end
46
+ end
47
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnibus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Opscode
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-24 00:00:00.000000000 Z
11
+ date: 2013-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -208,6 +208,7 @@ files:
208
208
  - spec/fetchers/net_fetcher_spec.rb
209
209
  - spec/overrides_spec.rb
210
210
  - spec/package_release_spec.rb
211
+ - spec/s3_cacher_spec.rb
211
212
  - spec/software_spec.rb
212
213
  - spec/spec_helper.rb
213
214
  homepage: https://github.com/opscode/omnibus-ruby
@@ -244,6 +245,7 @@ test_files:
244
245
  - spec/fetchers/net_fetcher_spec.rb
245
246
  - spec/overrides_spec.rb
246
247
  - spec/package_release_spec.rb
248
+ - spec/s3_cacher_spec.rb
247
249
  - spec/software_spec.rb
248
250
  - spec/spec_helper.rb
249
251
  has_rdoc: