omnibus 8.0.9 → 8.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d82119c178b28f06df2bcd81c54b97ffbbe8b16b072021e3c86297e7ba76b9c
4
- data.tar.gz: 0fd1477fe37432ec09256c115243b1a06eaa62911b741ba8a2dec730b9b8e42b
3
+ metadata.gz: 0ead593d30d6adc565642ff443cce0b239294752253a6811d94f830160af190c
4
+ data.tar.gz: b75f1260a3b3acfb23bc31f9f376edb1be0799567d5623a2c33a3d350041468f
5
5
  SHA512:
6
- metadata.gz: 534731ae9d91c9b9108cb63e6bacf731817ae8e01a80d22615e93787e50ba148c4e7919934879c2b7bdf1bda51586cbe488648dc3c6c31b9d3684f489602fd02
7
- data.tar.gz: 37bbc008548ed0ab0a1d20f958a81a19de17c47da4176ca263587cf11bfb6bffc31c50691d76ea9304e2c22223becfa1afa79de6682e32f8fe9f07d63e8ddd6e
6
+ metadata.gz: c403ea34e2b0352ed171abc7d329a797f36f1b8bd9d79c4bd2f4da1c3d5c187a9caa7bcad4fca8d7ab4577b9d3c079b05927fe872d145ccd0e2ffa1b9c302820
7
+ data.tar.gz: 3230fb144ca86a372f6de1e3e5fd21f1e9e0c72c95c2a8ef0194bca0b0f8437a7881d1de882666c9980d2a9c2ccaba371646ae69648eb6191d55266875d3258e
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  [![Gem Version](http://img.shields.io/gem/v/omnibus.svg)][gem]
4
4
  [![Build Status](https://badge.buildkite.com/446fd6049a9a5eeab50112aba117d3b7670ec085acb91f78dd.svg?branch=master)](https://buildkite.com/chef-oss/chef-omnibus-master-verify)
5
- [![AppVeyor Build Status](http://img.shields.io/appveyor/ci/chef/omnibus.svg?label=AppVeyor)][appveyor]
6
5
 
7
6
  **Umbrella Project**: [Chef Foundation](https://github.com/chef/chef-oss-practices/blob/master/projects/chef-foundation.md)
8
7
 
@@ -16,7 +15,6 @@ Easily create full-stack installers for your project across a variety of platfor
16
15
 
17
16
  Seth Chisamore and Christopher Maier of CHEF gave an introductory talk on Omnibus at ChefConf 2013, entitled **Eat the Whole Bowl: Building a Full-Stack Installer with Omnibus**:
18
17
 
19
- - [Video](http://www.youtube.com/watch?v=q8iJAntXCNY)
20
18
  - [Slides](https://speakerdeck.com/schisamo/eat-the-whole-bowl-building-a-full-stack-installer-with-omnibus)
21
19
 
22
20
  This project is managed by the CHEF Release Engineering team. For more information on the Release Engineering team's contribution, triage, and release process, please consult the [CHEF Release Engineering OSS Management Guide](https://docs.google.com/a/opscode.com/document/d/1oJB0vZb_3bl7_ZU2YMDBkMFdL-EWplW1BJv_FXTUOzg/edit).
@@ -196,6 +194,7 @@ DSL Method | Description
196
194
  `patch` | Apply a patch from disk
197
195
  `workers` | The maximum number of builders
198
196
  `windows_safe_path` | Format the path to be safe for shelling out on Windows
197
+ `go` | Execute the code as the embedded Go
199
198
  `ruby` | Execute the code as the embedded Ruby
200
199
  `gem` | Execute the code as the embedded Rubygems
201
200
  `bundle` | Execute the code as the embedded Bundler
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2012-2019, Chef Software Inc.
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -82,7 +82,7 @@ module Omnibus
82
82
  warn_for_shell_commands(command)
83
83
 
84
84
  build_commands << BuildCommand.new("Execute: `#{command}'") do
85
- shellout!(command, options)
85
+ shellout!(command, **options)
86
86
  end
87
87
  end
88
88
  expose :command
@@ -248,7 +248,7 @@ module Omnibus
248
248
  patches << patch_path
249
249
  options[:in_msys_bash] = true
250
250
  build_commands << BuildCommand.new("Apply patch `#{source}'") do
251
- shellout!(patch_cmd, options)
251
+ shellout!(patch_cmd, **options)
252
252
  end
253
253
  end
254
254
  expose :patch
@@ -296,6 +296,41 @@ module Omnibus
296
296
  # @!endgroup
297
297
  # --------------------------------------------------
298
298
 
299
+ #
300
+ # @!group Go DSL methods
301
+ #
302
+ # The following DSL methods are available from within build blocks and
303
+ # expose Go DSL methods.
304
+ # --------------------------------------------------
305
+
306
+ #
307
+ # Execute the given Go command or script against the embedded Go.
308
+ #
309
+ # @example
310
+ # go 'build -o hello'
311
+ #
312
+ # @param (see #command)
313
+ # @return (see #command)
314
+ #
315
+ def go(command, options = {})
316
+ build_commands << BuildCommand.new("go `#{command}'") do
317
+ bin = windows? ? windows_safe_path("#{install_dir}/embedded/go/bin/go") : embedded_bin("go")
318
+
319
+ # Check if we are building a go binary and then check if we are on
320
+ # Red Hat or CentOS so we build the binary properly with a build-id
321
+ if command.start_with?("build", " build") && rhel?
322
+ command << " -ldflags=-linkmode=external"
323
+ end
324
+
325
+ shellout!("#{bin} #{command}", options)
326
+ end
327
+ end
328
+ expose :go
329
+
330
+ #
331
+ # @!endgroup
332
+ # --------------------------------------------------
333
+
299
334
  #
300
335
  # @!group Ruby DSL methods
301
336
  #
@@ -315,7 +350,7 @@ module Omnibus
315
350
  def ruby(command, options = {})
316
351
  build_commands << BuildCommand.new("ruby `#{command}'") do
317
352
  bin = embedded_bin("ruby")
318
- shellout!("#{bin} #{command}", options)
353
+ shellout!("#{bin} #{command}", **options)
319
354
  end
320
355
  end
321
356
  expose :ruby
@@ -332,7 +367,7 @@ module Omnibus
332
367
  def gem(command, options = {})
333
368
  build_commands << BuildCommand.new("gem `#{command}'") do
334
369
  bin = embedded_bin("gem")
335
- shellout!("#{bin} #{command}", options)
370
+ shellout!("#{bin} #{command}", **options)
336
371
  end
337
372
  end
338
373
  expose :gem
@@ -352,7 +387,7 @@ module Omnibus
352
387
  def bundle(command, options = {})
353
388
  build_commands << BuildCommand.new("bundle `#{command}'") do
354
389
  bin = embedded_bin("bundle")
355
- shellout!("#{bin} #{command}", options)
390
+ shellout!("#{bin} #{command}", **options)
356
391
  end
357
392
  end
358
393
  expose :bundle
@@ -373,11 +408,16 @@ module Omnibus
373
408
  # @param (see #command)
374
409
  # @return (see #command)
375
410
  #
376
- def appbundle(software_name, lockdir: nil, gem: nil, without: nil, extra_bin_files: nil , **options)
411
+ def appbundle(software_name, options = {})
377
412
  build_commands << BuildCommand.new("appbundle `#{software_name}'") do
378
413
  bin_dir = "#{install_dir}/bin"
379
414
  appbundler_bin = embedded_bin("appbundler")
380
415
 
416
+ lockdir = options.delete(:lockdir)
417
+ gem = options.delete(:gem)
418
+ without = options.delete(:without)
419
+ extra_bin_files = options.delete(:extra_bin_files)
420
+
381
421
  lockdir ||=
382
422
  begin
383
423
  app_software = project.softwares.find do |p|
@@ -425,7 +465,7 @@ module Omnibus
425
465
  def rake(command, options = {})
426
466
  build_commands << BuildCommand.new("rake `#{command}'") do
427
467
  bin = embedded_bin("rake")
428
- shellout!("#{bin} #{command}", options)
468
+ shellout!("#{bin} #{command}", **options)
429
469
  end
430
470
  end
431
471
  expose :rake
@@ -535,7 +575,7 @@ module Omnibus
535
575
  def mkdir(directory, options = {})
536
576
  build_commands << BuildCommand.new("mkdir `#{directory}'") do
537
577
  Dir.chdir(software.project_dir) do
538
- FileUtils.mkdir_p(directory, options)
578
+ FileUtils.mkdir_p(directory, **options)
539
579
  end
540
580
  end
541
581
  end
@@ -557,7 +597,7 @@ module Omnibus
557
597
  parent = File.dirname(file)
558
598
  FileUtils.mkdir_p(parent) unless File.directory?(parent)
559
599
 
560
- FileUtils.touch(file, options)
600
+ FileUtils.touch(file, **options)
561
601
  end
562
602
  end
563
603
  end
@@ -578,7 +618,7 @@ module Omnibus
578
618
  build_commands << BuildCommand.new("delete `#{path}'") do
579
619
  Dir.chdir(software.project_dir) do
580
620
  FileSyncer.glob(path).each do |file|
581
- FileUtils.rm_rf(file, options)
621
+ FileUtils.rm_rf(file, **options)
582
622
  end
583
623
  end
584
624
  end
@@ -629,7 +669,7 @@ module Omnibus
629
669
  log.warn(log_key) { "no matched files for glob #{command}" }
630
670
  else
631
671
  files.each do |file|
632
- FileUtils.cp_r(file, destination, options)
672
+ FileUtils.cp_r(file, destination, **options)
633
673
  end
634
674
  end
635
675
  end
@@ -658,7 +698,7 @@ module Omnibus
658
698
  log.warn(log_key) { "no matched files for glob #{command}" }
659
699
  else
660
700
  files.each do |file|
661
- FileUtils.mv(file, destination, options)
701
+ FileUtils.mv(file, destination, **options)
662
702
  end
663
703
  end
664
704
  end
@@ -683,14 +723,14 @@ module Omnibus
683
723
  build_commands << BuildCommand.new(command) do
684
724
  Dir.chdir(software.project_dir) do
685
725
  if options.delete(:unchecked)
686
- FileUtils.ln_s(source, destination, options)
726
+ FileUtils.ln_s(source, destination, **options)
687
727
  else
688
728
  files = FileSyncer.glob(source)
689
729
  if files.empty?
690
730
  log.warn(log_key) { "no matched files for glob #{command}" }
691
731
  else
692
732
  files.each do |file|
693
- FileUtils.ln_s(file, destination, options)
733
+ FileUtils.ln_s(file, destination, **options)
694
734
  end
695
735
  end
696
736
  end
@@ -711,7 +751,7 @@ module Omnibus
711
751
  def sync(source, destination, options = {})
712
752
  build_commands << BuildCommand.new("sync `#{source}' to `#{destination}'") do
713
753
  Dir.chdir(software.project_dir) do
714
- FileSyncer.sync(source, destination, options)
754
+ FileSyncer.sync(source, destination, **options)
715
755
  end
716
756
  end
717
757
  end
@@ -868,7 +908,7 @@ module Omnibus
868
908
  options[:live_stream] ||= log.live_stream(:debug)
869
909
 
870
910
  # Use Util's shellout
871
- super(command_string, options)
911
+ super(command_string, **options)
872
912
  end
873
913
 
874
914
  #
@@ -259,8 +259,8 @@ module Omnibus
259
259
  sync
260
260
  hdiutil unmount "#{@device}"
261
261
  # Give some time to the system so unmount dmg
262
- ATTEMPTS=0
263
- until [ $ATTEMPTS -eq 5 ] || hdiutil detach "#{@device}"; do
262
+ ATTEMPTS=1
263
+ until [ $ATTEMPTS -eq 6 ] || hdiutil detach "#{@device}"; do
264
264
  sleep 10
265
265
  echo Attempt number $(( ATTEMPTS++ ))
266
266
  done
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2012-2018 Chef Software, Inc.
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
15
15
  #
16
16
 
17
17
  require "singleton" unless defined?(Singleton)
18
+ require "omnibus/sugarable" unless defined?(Sugarable)
18
19
 
19
20
  module Omnibus
20
21
  class Config
@@ -22,6 +23,7 @@ module Omnibus
22
23
  include NullArgumentable
23
24
  include Singleton
24
25
  include Util
26
+ include Sugarable
25
27
 
26
28
  class << self
27
29
  #
@@ -1,5 +1,5 @@
1
1
 
2
- # Copyright 2012-2018 Chef Software, Inc.
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -66,20 +66,25 @@ module Omnibus
66
66
  def run!
67
67
  measure("Health check time") do
68
68
  log.info(log_key) { "Running health on #{project.name}" }
69
- bad_libs = case Ohai["platform"]
70
- when "mac_os_x"
71
- health_check_otool
72
- when "aix"
73
- health_check_aix
74
- when "windows"
75
- # TODO: objdump -p will provided a very limited check of
76
- # explicit dependencies on windows. Most dependencies are
77
- # implicit and hence not detected.
78
- log.warn(log_key) { "Skipping dependency health checks on Windows." }
79
- {}
80
- else
81
- health_check_ldd
82
- end
69
+ bad_libs, good_libs =
70
+ case Ohai["platform"]
71
+ when "mac_os_x"
72
+ health_check_otool
73
+ when "aix"
74
+ health_check_aix
75
+ when "windows"
76
+ # TODO: objdump -p will provided a very limited check of
77
+ # explicit dependencies on windows. Most dependencies are
78
+ # implicit and hence not detected.
79
+ log.warn(log_key) { "Skipping dependency health checks on Windows." }
80
+ [{}, {}]
81
+ when "solaris2"
82
+ health_check_solaris
83
+ when "freebsd", "openbsd", "netbsd"
84
+ health_check_freebsd
85
+ else
86
+ health_check_linux
87
+ end
83
88
 
84
89
  unresolved = []
85
90
  unreliable = []
@@ -167,6 +172,10 @@ module Omnibus
167
172
  raise HealthCheckFailed
168
173
  end
169
174
 
175
+ if good_libs.keys.length == 0 && !windows?
176
+ raise "Internal error: no good libraries were found"
177
+ end
178
+
170
179
  conflict_map = {}
171
180
 
172
181
  conflict_map = relocation_check if relocation_checkable?
@@ -280,19 +289,20 @@ module Omnibus
280
289
  def health_check_otool
281
290
  current_library = nil
282
291
  bad_libs = {}
292
+ good_libs = {}
283
293
 
284
- read_shared_libs("find #{project.install_dir}/ -type f | egrep '\.(dylib|bundle)$' | xargs otool -L") do |line|
294
+ read_shared_libs("find #{project.install_dir}/ -type f | egrep '\.(dylib|bundle)$'", "xargs otool -L") do |line|
285
295
  case line
286
296
  when /^(.+):$/
287
297
  current_library = Regexp.last_match[1]
288
298
  when /^\s+(.+) \(.+\)$/
289
299
  linked = Regexp.last_match[1]
290
300
  name = File.basename(linked)
291
- bad_libs = check_for_bad_library(bad_libs, current_library, name, linked)
301
+ bad_libs, good_libs = check_for_bad_library(bad_libs, good_libs, current_library, name, linked)
292
302
  end
293
303
  end
294
304
 
295
- bad_libs
305
+ [bad_libs, good_libs]
296
306
  end
297
307
 
298
308
  #
@@ -304,8 +314,9 @@ module Omnibus
304
314
  def health_check_aix
305
315
  current_library = nil
306
316
  bad_libs = {}
317
+ good_libs = {}
307
318
 
308
- read_shared_libs("find #{project.install_dir}/ -type f | xargs file | grep \"RISC System\" | awk -F: '{print $1}' | xargs -n 1 ldd") do |line|
319
+ read_shared_libs("find #{project.install_dir}/ -type f | xargs file | grep \"XCOFF\" | awk -F: '{print $1}'", "xargs -n 1 ldd") do |line|
309
320
  case line
310
321
  when /^(.+) needs:$/
311
322
  current_library = Regexp.last_match[1]
@@ -313,31 +324,63 @@ module Omnibus
313
324
  when /^\s+(.+)$/
314
325
  name = Regexp.last_match[1]
315
326
  linked = Regexp.last_match[1]
316
- bad_libs = check_for_bad_library(bad_libs, current_library, name, linked)
327
+ ( bad_libs, good_libs ) = check_for_bad_library(bad_libs, good_libs, current_library, name, linked)
317
328
  when /File is not an executable XCOFF file/ # ignore non-executable files
318
329
  else
319
330
  log.warn(log_key) { "Line did not match for #{current_library}\n#{line}" }
320
331
  end
321
332
  end
322
333
 
323
- bad_libs
334
+ [bad_libs, good_libs]
324
335
  end
325
336
 
326
337
  #
327
- # Run healthchecks against ldd.
338
+ # Run healthchecks on Solaris.
328
339
  #
329
340
  # @return [Hash<String, Hash<String, Hash<String, Int>>>]
330
341
  # the bad libraries (library_name -> dependency_name -> satisfied_lib_path -> count)
331
342
  #
332
- def health_check_ldd
333
- regexp_ends = ".*(" + IGNORED_ENDINGS.map { |e| e.gsub(/\./, '\.') }.join("|") + ")$"
334
- regexp_patterns = IGNORED_PATTERNS.map { |e| ".*" + e.gsub(%r{/}, '\/') + ".*" }.join("|")
335
- regexp = regexp_ends + "|" + regexp_patterns
343
+ def health_check_solaris
344
+ current_library = nil
345
+ bad_libs = {}
346
+ good_libs = {}
336
347
 
348
+ read_shared_libs("find #{project.install_dir}/ -type f | xargs file | grep \"ELF\" | awk -F: '{print $1}' | sed -e 's/:$//'", "xargs -n 1 ldd") do |line|
349
+ case line
350
+ when /^(.+):$/
351
+ current_library = Regexp.last_match[1]
352
+ log.debug(log_key) { "Analyzing dependencies for #{current_library}" }
353
+ when /^\s+(.+) \=\>\s+(.+)( \(.+\))?$/
354
+ name = Regexp.last_match[1]
355
+ linked = Regexp.last_match[2]
356
+ ( bad_libs, good_libs ) = check_for_bad_library(bad_libs, good_libs, current_library, name, linked)
357
+ when /^\s+(.+) \(.+\)$/
358
+ next
359
+ when /^\s+statically linked$/
360
+ next
361
+ when /^\s+not a dynamic executable$/ # ignore non-executable files
362
+ else
363
+ log.warn(log_key) do
364
+ "Line did not match for #{current_library}\n#{line}"
365
+ end
366
+ end
367
+ end
368
+
369
+ [bad_libs, good_libs]
370
+ end
371
+
372
+ #
373
+ # Run healthchecks on FreeBSD
374
+ #
375
+ # @return [Hash<String, Hash<String, Hash<String, Int>>>]
376
+ # the bad libraries (library_name -> dependency_name -> satisfied_lib_path -> count)
377
+ #
378
+ def health_check_freebsd
337
379
  current_library = nil
338
380
  bad_libs = {}
381
+ good_libs = {}
339
382
 
340
- read_shared_libs("find #{project.install_dir}/ -type f -regextype posix-extended ! -regex '#{regexp}' | xargs ldd") do |line|
383
+ read_shared_libs("find #{project.install_dir}/ -type f | xargs file | grep \"ELF\" | awk -F: '{print $1}' | sed -e 's/:$//'", "xargs ldd") do |line|
341
384
  case line
342
385
  when /^(.+):$/
343
386
  current_library = Regexp.last_match[1]
@@ -345,16 +388,51 @@ module Omnibus
345
388
  when /^\s+(.+) \=\>\s+(.+)( \(.+\))?$/
346
389
  name = Regexp.last_match[1]
347
390
  linked = Regexp.last_match[2]
348
- bad_libs = check_for_bad_library(bad_libs, current_library, name, linked)
391
+ ( bad_libs, good_libs ) = check_for_bad_library(bad_libs, good_libs, current_library, name, linked)
349
392
  when /^\s+(.+) \(.+\)$/
350
393
  next
351
394
  when /^\s+statically linked$/
352
395
  next
353
- when /^\s+libjvm.so/
396
+ when /^\s+not a dynamic executable$/ # ignore non-executable files
397
+ else
398
+ log.warn(log_key) do
399
+ "Line did not match for #{current_library}\n#{line}"
400
+ end
401
+ end
402
+ end
403
+
404
+ [bad_libs, good_libs]
405
+ end
406
+
407
+ #
408
+ # Run healthchecks against ldd.
409
+ #
410
+ # @return [Hash<String, Hash<String, Hash<String, Int>>>]
411
+ # the bad libraries (library_name -> dependency_name -> satisfied_lib_path -> count)
412
+ #
413
+ def health_check_linux
414
+ current_library = nil
415
+ bad_libs = {}
416
+ good_libs = {}
417
+
418
+ read_shared_libs("find #{project.install_dir}/ -type f | xargs file | grep \"ELF\" | awk -F: '{print $1}' | sed -e 's/:$//'", "xargs ldd") do |line|
419
+ case line
420
+ when /^(.+):$/
421
+ current_library = Regexp.last_match[1]
422
+ log.debug(log_key) { "Analyzing dependencies for #{current_library}" }
423
+ when /^\s+(.+) \=\>\s+(.+)( \(.+\))?$/
424
+ name = Regexp.last_match[1]
425
+ linked = Regexp.last_match[2]
426
+ ( bad_libs, good_libs ) = check_for_bad_library(bad_libs, good_libs, current_library, name, linked)
427
+ when /^\s+(.+) \(.+\)$/
354
428
  next
355
- when /^\s+libjava.so/
429
+ when /^\s+statically linked$/
356
430
  next
357
- when /^\s+libmawt.so/
431
+ when /^\s+libjvm.so/ # FIXME: should remove if it doesn't blow up server
432
+ next
433
+ when /^\s+libjava.so/ # FIXME: should remove if it doesn't blow up server
434
+ next
435
+ when /^\s+libmawt.so/ # FIXME: should remove if it doesn't blow up server
358
436
  next
359
437
  when /^\s+not a dynamic executable$/ # ignore non-executable files
360
438
  else
@@ -364,7 +442,7 @@ module Omnibus
364
442
  end
365
443
  end
366
444
 
367
- bad_libs
445
+ [bad_libs, good_libs]
368
446
  end
369
447
 
370
448
  private
@@ -399,10 +477,40 @@ module Omnibus
399
477
  # @yield [String]
400
478
  # each line
401
479
  #
402
- def read_shared_libs(command)
403
- cmd = shellout(command)
404
- cmd.stdout.each_line do |line|
405
- yield line
480
+ def read_shared_libs(find_command, ldd_command, &output_proc)
481
+ #
482
+ # construct the list of files to check
483
+ #
484
+
485
+ find_output = shellout!(find_command).stdout.lines
486
+
487
+ find_output.reject! { |file| IGNORED_ENDINGS.any? { |ending| file.end_with?("#{ending}\n") } }
488
+
489
+ find_output.reject! { |file| IGNORED_SUBSTRINGS.any? { |substr| file.include?(substr) } }
490
+
491
+ if find_output.empty?
492
+ # probably the find_command is busted, it should never be empty or why are you using omnibus?
493
+ raise "Internal Error: Health Check found no lines"
494
+ end
495
+
496
+ if find_output.any? { |file| file !~ Regexp.new(project.install_dir) }
497
+ # every file in the find output should be within the install_dir
498
+ raise "Internal Error: Health Check lines not matching the install_dir"
499
+ end
500
+
501
+ #
502
+ # feed the list of files to the "ldd" command
503
+ #
504
+
505
+ # this command will typically fail if the last file isn't a valid lib/binary which happens often
506
+ ldd_output = shellout(ldd_command, input: find_output.join).stdout
507
+
508
+ #
509
+ # do the output process to determine if the files are good or bad
510
+ #
511
+
512
+ ldd_output.each_line do |line|
513
+ output_proc.call(line)
406
514
  end
407
515
  end
408
516
 
@@ -420,7 +528,7 @@ module Omnibus
420
528
  #
421
529
  # @return the modified bad_library hash
422
530
  #
423
- def check_for_bad_library(bad_libs, current_library, name, linked)
531
+ def check_for_bad_library(bad_libs, good_libs, current_library, name, linked)
424
532
  safe = nil
425
533
 
426
534
  whitelist_libs = case Ohai["platform"]
@@ -463,10 +571,11 @@ module Omnibus
463
571
  bad_libs[current_library][name][linked] = 1
464
572
  end
465
573
  else
574
+ good_libs[current_library] = true
466
575
  log.debug(log_key) { " -> PASSED: #{name} is either whitelisted or safely provided." }
467
576
  end
468
577
 
469
- bad_libs
578
+ [bad_libs, good_libs]
470
579
  end
471
580
  end
472
581
  end
@@ -25,28 +25,22 @@ module Omnibus
25
25
 
26
26
  def updated
27
27
  @updated ||=
28
- begin
29
- (first.entry_names & second.entry_names).collect do |name|
30
- diff(first.entry_for(name), second.entry_for(name))
31
- end.compact
32
- end
28
+ (first.entry_names & second.entry_names).collect do |name|
29
+ diff(first.entry_for(name), second.entry_for(name))
30
+ end.compact
33
31
  end
34
32
 
35
33
  def removed
36
34
  @removed ||=
37
- begin
38
- (first.entry_names - second.entry_names).collect do |name|
39
- removed_entry(first.entry_for(name))
40
- end
35
+ (first.entry_names - second.entry_names).collect do |name|
36
+ removed_entry(first.entry_for(name))
41
37
  end
42
38
  end
43
39
 
44
40
  def added
45
41
  @added ||=
46
- begin
47
- (second.entry_names - first.entry_names).collect do |name|
48
- new_entry(second.entry_for(name))
49
- end
42
+ (second.entry_names - first.entry_names).collect do |name|
43
+ new_entry(second.entry_for(name))
50
44
  end
51
45
  end
52
46
 
@@ -170,12 +170,16 @@ module Omnibus
170
170
  # rubocop:disable Lint/DuplicateCaseCondition
171
171
  def truncate_platform_version(platform_version, platform)
172
172
  case platform
173
- when "centos", "debian", "el", "fedora", "freebsd", "omnios", "pidora", "raspbian", "rhel", "sles", "suse", "smartos"
173
+ when "centos", "cumulus", "debian", "el", "fedora", "freebsd", "omnios", "pidora", "raspbian", "rhel", "sles", "suse", "smartos"
174
174
  # Only want MAJOR (e.g. Debian 7, OmniOS r151006, SmartOS 20120809T221258Z)
175
175
  platform_version.split(".").first
176
- when "aix", "alpine", "mac_os_x", "openbsd", "slackware", "solaris2", "opensuse", "opensuseleap", "ubuntu", "amazon"
177
- # Only want MAJOR.MINOR (e.g. Mac OS X 10.9, Ubuntu 12.04)
176
+ when "aix", "alpine", "openbsd", "slackware", "solaris2", "opensuse", "opensuseleap", "ubuntu", "amazon"
177
+ # Only want MAJOR.MINOR (e.g. Ubuntu 12.04)
178
178
  platform_version.split(".")[0..1].join(".")
179
+ when "mac_os_x", "darwin", "macos"
180
+ # If running macOS >= 11, use only MAJOR version. Otherwise, use MAJOR.MINOR
181
+ pv_bits = platform_version.split(".")
182
+ pv_bits[0].to_i >= 11 ? pv_bits[0] : pv_bits[0..1].join(".")
179
183
  when "arch", "gentoo", "kali"
180
184
  # Arch Linux / Gentoo do not have a platform_version ohai attribute, they are rolling release (lsb_release -r)
181
185
  "rolling"