omnibus 8.2.2 → 8.3.2
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.
- checksums.yaml +4 -4
- data/lib/omnibus/config.rb +3 -1
- data/lib/omnibus/health_check.rb +147 -38
- data/lib/omnibus/packagers/pkg.rb +10 -12
- data/lib/omnibus/version.rb +1 -1
- data/lib/omnibus/whitelist.rb +32 -12
- data/omnibus.gemspec +1 -1
- data/resources/rpm/spec.erb +3 -0
- data/spec/unit/health_check_spec.rb +75 -6
- data/spec/unit/packagers/pkg_spec.rb +9 -3
- metadata +4 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0ead593d30d6adc565642ff443cce0b239294752253a6811d94f830160af190c
         | 
| 4 | 
            +
              data.tar.gz: b75f1260a3b3acfb23bc31f9f376edb1be0799567d5623a2c33a3d350041468f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c403ea34e2b0352ed171abc7d329a797f36f1b8bd9d79c4bd2f4da1c3d5c187a9caa7bcad4fca8d7ab4577b9d3c079b05927fe872d145ccd0e2ffa1b9c302820
         | 
| 7 | 
            +
              data.tar.gz: 3230fb144ca86a372f6de1e3e5fd21f1e9e0c72c95c2a8ef0194bca0b0f8437a7881d1de882666c9980d2a9c2ccaba371646ae69648eb6191d55266875d3258e
         | 
    
        data/lib/omnibus/config.rb
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            #
         | 
| 2 | 
            -
            # Copyright  | 
| 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 | 
             
                  #
         | 
    
        data/lib/omnibus/health_check.rb
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 1 |  | 
| 2 | 
            -
            # Copyright  | 
| 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 = | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 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)$'  | 
| 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 \" | 
| 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  | 
| 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  | 
| 333 | 
            -
                   | 
| 334 | 
            -
                   | 
| 335 | 
            -
                   | 
| 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  | 
| 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+ | 
| 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+ | 
| 429 | 
            +
                    when /^\s+statically linked$/
         | 
| 356 430 | 
             
                      next
         | 
| 357 | 
            -
                    when /^\s+ | 
| 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( | 
| 403 | 
            -
                   | 
| 404 | 
            -
                   | 
| 405 | 
            -
             | 
| 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
         | 
| @@ -431,23 +431,21 @@ module Omnibus | |
| 431 431 | 
             
                end
         | 
| 432 432 |  | 
| 433 433 | 
             
                def is_binary?(bin)
         | 
| 434 | 
            -
                   | 
| 435 | 
            -
             | 
| 436 | 
            -
             | 
| 437 | 
            -
                   | 
| 438 | 
            -
                  is_binary
         | 
| 434 | 
            +
                  return false unless File.file?(bin) && File.executable?(bin) && !File.symlink?(bin)
         | 
| 435 | 
            +
             | 
| 436 | 
            +
                  log.debug(log_key) { "    skipping non-binary file from signing: #{bin}" }
         | 
| 437 | 
            +
                  true
         | 
| 439 438 | 
             
                end
         | 
| 440 439 |  | 
| 441 440 | 
             
                def is_macho?(lib)
         | 
| 442 | 
            -
                   | 
| 443 | 
            -
                  if is_binary?(lib)
         | 
| 444 | 
            -
                    command = "file #{lib}"
         | 
| 441 | 
            +
                  return false unless File.file?(lib) && File.executable?(lib) && !File.symlink?(lib)
         | 
| 445 442 |  | 
| 446 | 
            -
             | 
| 447 | 
            -
                     | 
| 443 | 
            +
                  if shellout!("file #{lib}").stdout.match?(/Mach-O.*(library|bundle)/) # https://rubular.com/r/nRgaQlAbkM9wHL
         | 
| 444 | 
            +
                    log.debug(log_key) { "    skipping non-Mach-O library file from signing: #{lib}" }
         | 
| 445 | 
            +
                    return true
         | 
| 448 446 | 
             
                  end
         | 
| 449 | 
            -
             | 
| 450 | 
            -
                   | 
| 447 | 
            +
             | 
| 448 | 
            +
                  false
         | 
| 451 449 | 
             
                end
         | 
| 452 450 | 
             
              end
         | 
| 453 451 | 
             
            end
         | 
    
        data/lib/omnibus/version.rb
    CHANGED
    
    
    
        data/lib/omnibus/whitelist.rb
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 1 |  | 
| 2 | 
            -
            # Copyright  | 
| 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.
         | 
| @@ -49,12 +49,18 @@ ARCH_WHITELIST_LIBS = [ | |
| 49 49 | 
             
            ].freeze
         | 
| 50 50 |  | 
| 51 51 | 
             
            AIX_WHITELIST_LIBS = [
         | 
| 52 | 
            +
              /libc\.a/,
         | 
| 53 | 
            +
              /libcfg\.a/,
         | 
| 54 | 
            +
              /libcorcfg\.a/,
         | 
| 55 | 
            +
              /libcrypt\.a/,
         | 
| 56 | 
            +
              /libdl\.a/,
         | 
| 57 | 
            +
              /liblvm\.a/,
         | 
| 58 | 
            +
              /libodm\.a/,
         | 
| 59 | 
            +
              /libperfstat\.a/,
         | 
| 52 60 | 
             
              /libpthread\.a/,
         | 
| 53 61 | 
             
              /libpthreads\.a/,
         | 
| 54 | 
            -
              /libdl.a/,
         | 
| 55 62 | 
             
              /librtl\.a/,
         | 
| 56 | 
            -
              / | 
| 57 | 
            -
              /libcrypt\.a/,
         | 
| 63 | 
            +
              /libsrc\.a/,
         | 
| 58 64 | 
             
              /unix$/,
         | 
| 59 65 | 
             
            ].freeze
         | 
| 60 66 |  | 
| @@ -177,28 +183,34 @@ FREEBSD_WHITELIST_LIBS = [ | |
| 177 183 | 
             
              /libkvm\.so/,
         | 
| 178 184 | 
             
              /libprocstat\.so/,
         | 
| 179 185 | 
             
              /libmd\.so/,
         | 
| 186 | 
            +
              /libdl\.so/,
         | 
| 180 187 | 
             
            ].freeze
         | 
| 181 188 |  | 
| 182 189 | 
             
            IGNORED_ENDINGS = %w{
         | 
| 183 190 | 
             
              .TXT
         | 
| 184 | 
            -
              .[ch]
         | 
| 185 | 
            -
              .[ch]pp
         | 
| 186 | 
            -
              .[eh]rl
         | 
| 187 191 | 
             
              .app
         | 
| 188 192 | 
             
              .appup
         | 
| 189 193 | 
             
              .bat
         | 
| 190 194 | 
             
              .beam
         | 
| 195 | 
            +
              .c
         | 
| 191 196 | 
             
              .cc
         | 
| 192 197 | 
             
              .cmake
         | 
| 193 198 | 
             
              .conf
         | 
| 199 | 
            +
              .cpp
         | 
| 194 200 | 
             
              .css
         | 
| 195 | 
            -
              . | 
| 201 | 
            +
              .erb
         | 
| 202 | 
            +
              .erl
         | 
| 196 203 | 
             
              .feature
         | 
| 197 204 | 
             
              .gemspec
         | 
| 198 205 | 
             
              .gif
         | 
| 199 206 | 
             
              .gitignore
         | 
| 200 207 | 
             
              .gitkeep
         | 
| 201 | 
            -
              .h | 
| 208 | 
            +
              .h
         | 
| 209 | 
            +
              .h
         | 
| 210 | 
            +
              .hh
         | 
| 211 | 
            +
              .hpp
         | 
| 212 | 
            +
              .hrl
         | 
| 213 | 
            +
              .html
         | 
| 202 214 | 
             
              .jar
         | 
| 203 215 | 
             
              .java
         | 
| 204 216 | 
             
              .jpg
         | 
| @@ -210,6 +222,7 @@ IGNORED_ENDINGS = %w{ | |
| 210 222 | 
             
              .lua
         | 
| 211 223 | 
             
              .md
         | 
| 212 224 | 
             
              .mkd
         | 
| 225 | 
            +
              .mo
         | 
| 213 226 | 
             
              .npmignore
         | 
| 214 227 | 
             
              .out
         | 
| 215 228 | 
             
              .packlist
         | 
| @@ -219,21 +232,28 @@ IGNORED_ENDINGS = %w{ | |
| 219 232 | 
             
              .png
         | 
| 220 233 | 
             
              .pod
         | 
| 221 234 | 
             
              .properties
         | 
| 222 | 
            -
              .py | 
| 223 | 
            -
              . | 
| 235 | 
            +
              .py
         | 
| 236 | 
            +
              .pyc
         | 
| 237 | 
            +
              .pyo
         | 
| 224 238 | 
             
              .rake
         | 
| 239 | 
            +
              .rb
         | 
| 240 | 
            +
              .rbs
         | 
| 225 241 | 
             
              .rdoc
         | 
| 242 | 
            +
              .rhtml
         | 
| 226 243 | 
             
              .ri
         | 
| 244 | 
            +
              .rpm
         | 
| 227 245 | 
             
              .rst
         | 
| 228 246 | 
             
              .scss
         | 
| 229 247 | 
             
              .sh
         | 
| 230 248 | 
             
              .sql
         | 
| 231 249 | 
             
              .svg
         | 
| 232 250 | 
             
              .toml
         | 
| 251 | 
            +
              .tt
         | 
| 233 252 | 
             
              .ttf
         | 
| 234 253 | 
             
              .txt
         | 
| 235 254 | 
             
              .xml
         | 
| 236 255 | 
             
              .yml
         | 
| 256 | 
            +
              COPYING
         | 
| 237 257 | 
             
              Gemfile
         | 
| 238 258 | 
             
              LICENSE
         | 
| 239 259 | 
             
              Makefile
         | 
| @@ -243,7 +263,7 @@ IGNORED_ENDINGS = %w{ | |
| 243 263 | 
             
              license
         | 
| 244 264 | 
             
            }.freeze
         | 
| 245 265 |  | 
| 246 | 
            -
             | 
| 266 | 
            +
            IGNORED_SUBSTRINGS = %w{
         | 
| 247 267 | 
             
              /build_info/
         | 
| 248 268 | 
             
              /licenses/
         | 
| 249 269 | 
             
              /LICENSES/
         | 
    
        data/omnibus.gemspec
    CHANGED
    
    | @@ -25,7 +25,7 @@ Gem::Specification.new do |gem| | |
| 25 25 | 
             
              gem.add_dependency "chef-cleanroom",   "~> 1.0"
         | 
| 26 26 | 
             
              gem.add_dependency "ffi-yajl",         "~> 2.2"
         | 
| 27 27 | 
             
              gem.add_dependency "mixlib-shellout",  ">= 2.0", "< 4.0"
         | 
| 28 | 
            -
              gem.add_dependency "ohai",             ">= 15", "<  | 
| 28 | 
            +
              gem.add_dependency "ohai",             ">= 15", "< 18"
         | 
| 29 29 | 
             
              gem.add_dependency "ruby-progressbar", "~> 1.7"
         | 
| 30 30 | 
             
              gem.add_dependency "thor",             ">= 0.18", "< 2.0"
         | 
| 31 31 | 
             
              gem.add_dependency "license_scout",    "~> 1.0"
         | 
    
        data/resources/rpm/spec.erb
    CHANGED
    
    
| @@ -99,9 +99,47 @@ module Omnibus | |
| 99 99 | 
             
                context "on linux" do
         | 
| 100 100 | 
             
                  before { stub_ohai(platform: "ubuntu", version: "16.04") }
         | 
| 101 101 |  | 
| 102 | 
            +
                  # file_list just needs to have one file which is inside of the install_dir
         | 
| 103 | 
            +
                  let(:file_list) do
         | 
| 104 | 
            +
                    double("Mixlib::Shellout",
         | 
| 105 | 
            +
                      error!: false,
         | 
| 106 | 
            +
                      stdout: <<~EOH
         | 
| 107 | 
            +
                        /opt/chefdk/shouldnt/matter
         | 
| 108 | 
            +
                      EOH
         | 
| 109 | 
            +
                    )
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  let(:empty_list) do
         | 
| 113 | 
            +
                    double("Mixlib::Shellout",
         | 
| 114 | 
            +
                      error!: false,
         | 
| 115 | 
            +
                      stdout: <<~EOH
         | 
| 116 | 
            +
                      EOH
         | 
| 117 | 
            +
                    )
         | 
| 118 | 
            +
                  end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                  let(:failed_list) do
         | 
| 121 | 
            +
                    failed_list = double("Mixlib::Shellout",
         | 
| 122 | 
            +
                      stdout: <<~EOH
         | 
| 123 | 
            +
                        /opt/chefdk/shouldnt/matter
         | 
| 124 | 
            +
                      EOH
         | 
| 125 | 
            +
                    )
         | 
| 126 | 
            +
                    allow(failed_list).to receive(:error!).and_raise("Mixlib::Shellout::ShellCommandFailed")
         | 
| 127 | 
            +
                    failed_list
         | 
| 128 | 
            +
                  end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                  let(:bad_list) do
         | 
| 131 | 
            +
                    double("Mixlib::Shellout",
         | 
| 132 | 
            +
                      error!: false,
         | 
| 133 | 
            +
                      stdout: <<~EOH
         | 
| 134 | 
            +
                        /somewhere/other/than/install/dir
         | 
| 135 | 
            +
                      EOH
         | 
| 136 | 
            +
                    )
         | 
| 137 | 
            +
                  end
         | 
| 138 | 
            +
             | 
| 102 139 | 
             
                  let(:bad_healthcheck) do
         | 
| 103 140 | 
             
                    double("Mixlib::Shellout",
         | 
| 104 | 
            -
                       | 
| 141 | 
            +
                      error!: false,
         | 
| 142 | 
            +
                      stdout: <<~EOH
         | 
| 105 143 | 
             
                        /bin/ls:
         | 
| 106 144 | 
             
                          linux-vdso.so.1 =>  (0x00007fff583ff000)
         | 
| 107 145 | 
             
                          libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fad8592a000)
         | 
| @@ -122,7 +160,8 @@ module Omnibus | |
| 122 160 |  | 
| 123 161 | 
             
                  let(:good_healthcheck) do
         | 
| 124 162 | 
             
                    double("Mixlib::Shellout",
         | 
| 125 | 
            -
                       | 
| 163 | 
            +
                      error!: false,
         | 
| 164 | 
            +
                      stdout: <<~EOH
         | 
| 126 165 | 
             
                        /bin/echo:
         | 
| 127 166 | 
             
                          linux-vdso.so.1 =>  (0x00007fff8a6ee000)
         | 
| 128 167 | 
             
                          libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f70f58c0000)
         | 
| @@ -135,11 +174,13 @@ module Omnibus | |
| 135 174 | 
             
                    )
         | 
| 136 175 | 
             
                  end
         | 
| 137 176 |  | 
| 138 | 
            -
                  let(:regexp) { ".*(\\.TXT|\\.[ch]|\\.[ch]pp|\\.[eh]rl|\\.app|\\.appup|\\.bat|\\.beam|\\.cc|\\.cmake|\\.conf|\\.css|\\.e*rb|\\.feature|\\.gemspec|\\.gif|\\.gitignore|\\.gitkeep|\\.h*h|\\.jar|\\.java|\\.jpg|\\.js|\\.jsm|\\.json|\\.lock|\\.log|\\.lua|\\.md|\\.mkd|\\.npmignore|\\.out|\\.packlist|\\.perl|\\.pl|\\.pm|\\.png|\\.pod|\\.properties|\\.py[oc]*|\\.r*html|\\.rake|\\.rdoc|\\.ri|\\.rst|\\.scss|\\.sh|\\.sql|\\.svg|\\.toml|\\.ttf|\\.txt|\\.xml|\\.yml|Gemfile|LICENSE|Makefile|README|Rakefile|VERSION|license)$|.*\\/build_info\\/.*|.*\\/licenses\\/.*|.*\\/LICENSES\\/.*|.*\\/man\\/.*|.*\\/share\\/doc\\/.*|.*\\/share\\/info\\/.*|.*\\/share\\/postgresql\\/.*|.*\\/share\\/terminfo\\/.*|.*\\/share\\/timezone\\/.*|.*\\/terminfo\\/.*" }
         | 
| 139 | 
            -
             | 
| 140 177 | 
             
                  it "raises an exception when there are external dependencies" do
         | 
| 141 178 | 
             
                    allow(subject).to receive(:shellout)
         | 
| 142 | 
            -
                      .with("find  | 
| 179 | 
            +
                      .with("find /opt/chefdk/ -type f | xargs file | grep \"ELF\" | awk -F: '{print $1}' | sed -e 's/:$//'")
         | 
| 180 | 
            +
                      .and_return(file_list)
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                    allow(subject).to receive(:shellout)
         | 
| 183 | 
            +
                      .with("xargs ldd", { input: "/opt/chefdk/shouldnt/matter\n" })
         | 
| 143 184 | 
             
                      .and_return(bad_healthcheck)
         | 
| 144 185 |  | 
| 145 186 | 
             
                    expect { subject.run! }.to raise_error(HealthCheckFailed)
         | 
| @@ -147,7 +188,11 @@ module Omnibus | |
| 147 188 |  | 
| 148 189 | 
             
                  it "does not raise an exception when the healthcheck passes" do
         | 
| 149 190 | 
             
                    allow(subject).to receive(:shellout)
         | 
| 150 | 
            -
                      .with("find  | 
| 191 | 
            +
                      .with("find /opt/chefdk/ -type f | xargs file | grep \"ELF\" | awk -F: '{print $1}' | sed -e 's/:$//'")
         | 
| 192 | 
            +
                      .and_return(file_list)
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                    allow(subject).to receive(:shellout)
         | 
| 195 | 
            +
                      .with("xargs ldd", { input: "/opt/chefdk/shouldnt/matter\n" })
         | 
| 151 196 | 
             
                      .and_return(good_healthcheck)
         | 
| 152 197 |  | 
| 153 198 | 
             
                    expect { subject.run! }.to_not raise_error
         | 
| @@ -156,6 +201,30 @@ module Omnibus | |
| 156 201 | 
             
                  it "will not perform dll base relocation checks" do
         | 
| 157 202 | 
             
                    expect(subject.relocation_checkable?).to be false
         | 
| 158 203 | 
             
                  end
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                  it "raises an exception if there's nothing in the file list" do
         | 
| 206 | 
            +
                    allow(subject).to receive(:shellout)
         | 
| 207 | 
            +
                      .with("find /opt/chefdk/ -type f | xargs file | grep \"ELF\" | awk -F: '{print $1}' | sed -e 's/:$//'")
         | 
| 208 | 
            +
                      .and_return(empty_list)
         | 
| 209 | 
            +
             | 
| 210 | 
            +
                    expect { subject.run! }.to raise_error(RuntimeError, "Internal Error: Health Check found no lines")
         | 
| 211 | 
            +
                  end
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                  it "raises an exception if the file list command raises" do
         | 
| 214 | 
            +
                    allow(subject).to receive(:shellout)
         | 
| 215 | 
            +
                      .with("find /opt/chefdk/ -type f | xargs file | grep \"ELF\" | awk -F: '{print $1}' | sed -e 's/:$//'")
         | 
| 216 | 
            +
                      .and_return(failed_list)
         | 
| 217 | 
            +
             | 
| 218 | 
            +
                    expect { subject.run! }.to raise_error(RuntimeError, "Mixlib::Shellout::ShellCommandFailed")
         | 
| 219 | 
            +
                  end
         | 
| 220 | 
            +
             | 
| 221 | 
            +
                  it "raises an exception if the file list command has no entries in the install_dir" do
         | 
| 222 | 
            +
                    allow(subject).to receive(:shellout)
         | 
| 223 | 
            +
                      .with("find /opt/chefdk/ -type f | xargs file | grep \"ELF\" | awk -F: '{print $1}' | sed -e 's/:$//'")
         | 
| 224 | 
            +
                      .and_return(bad_list)
         | 
| 225 | 
            +
             | 
| 226 | 
            +
                    expect { subject.run! }.to raise_error(RuntimeError, "Internal Error: Health Check lines not matching the install_dir")
         | 
| 227 | 
            +
                  end
         | 
| 159 228 | 
             
                end
         | 
| 160 229 | 
             
              end
         | 
| 161 230 | 
             
            end
         | 
| @@ -557,7 +557,9 @@ module Omnibus | |
| 557 557 |  | 
| 558 558 | 
             
                  context "when is a Mach-O library" do
         | 
| 559 559 | 
             
                    before do
         | 
| 560 | 
            -
                      allow( | 
| 560 | 
            +
                      allow(File).to receive(:file?).with("file").and_return(true)
         | 
| 561 | 
            +
                      allow(File).to receive(:executable?).with("file").and_return(true)
         | 
| 562 | 
            +
                      allow(File).to receive(:symlink?).with("file").and_return(false)
         | 
| 561 563 | 
             
                      expect(subject).to receive(:shellout!).with("file file").and_return(shellout)
         | 
| 562 564 | 
             
                      allow(shellout).to receive(:stdout)
         | 
| 563 565 | 
             
                        .and_return("file: Mach-O 64-bit dynamically linked shared library x86_64")
         | 
| @@ -570,7 +572,9 @@ module Omnibus | |
| 570 572 |  | 
| 571 573 | 
             
                  context "when is a Mach-O Bundle" do
         | 
| 572 574 | 
             
                    before do
         | 
| 573 | 
            -
                      allow( | 
| 575 | 
            +
                      allow(File).to receive(:file?).with("file").and_return(true)
         | 
| 576 | 
            +
                      allow(File).to receive(:executable?).with("file").and_return(true)
         | 
| 577 | 
            +
                      allow(File).to receive(:symlink?).with("file").and_return(false)
         | 
| 574 578 | 
             
                      expect(subject).to receive(:shellout!).with("file file").and_return(shellout)
         | 
| 575 579 | 
             
                      allow(shellout).to receive(:stdout)
         | 
| 576 580 | 
             
                        .and_return("file: Mach-O 64-bit bundle x86_64")
         | 
| @@ -583,7 +587,9 @@ module Omnibus | |
| 583 587 |  | 
| 584 588 | 
             
                  context "when is not a Mach-O Bundle or Mach-O library" do
         | 
| 585 589 | 
             
                    before do
         | 
| 586 | 
            -
                      allow( | 
| 590 | 
            +
                      allow(File).to receive(:file?).with("file").and_return(true)
         | 
| 591 | 
            +
                      allow(File).to receive(:executable?).with("file").and_return(true)
         | 
| 592 | 
            +
                      allow(File).to receive(:symlink?).with("file").and_return(false)
         | 
| 587 593 | 
             
                      expect(subject).to receive(:shellout!).with("file file").and_return(shellout)
         | 
| 588 594 | 
             
                      allow(shellout).to receive(:stdout)
         | 
| 589 595 | 
             
                        .and_return("file: ASCII text")
         | 
    
        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: 8. | 
| 4 | 
            +
              version: 8.3.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Chef Software, Inc.
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2022-02-15 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: aws-sdk-s3
         | 
| @@ -95,7 +95,7 @@ dependencies: | |
| 95 95 | 
             
                    version: '15'
         | 
| 96 96 | 
             
                - - "<"
         | 
| 97 97 | 
             
                  - !ruby/object:Gem::Version
         | 
| 98 | 
            -
                    version: ' | 
| 98 | 
            +
                    version: '18'
         | 
| 99 99 | 
             
              type: :runtime
         | 
| 100 100 | 
             
              prerelease: false
         | 
| 101 101 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -105,7 +105,7 @@ dependencies: | |
| 105 105 | 
             
                    version: '15'
         | 
| 106 106 | 
             
                - - "<"
         | 
| 107 107 | 
             
                  - !ruby/object:Gem::Version
         | 
| 108 | 
            -
                    version: ' | 
| 108 | 
            +
                    version: '18'
         | 
| 109 109 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 110 110 | 
             
              name: ruby-progressbar
         | 
| 111 111 | 
             
              requirement: !ruby/object:Gem::Requirement
         |