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
|