omnibus 8.2.2 → 9.0.8

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: af0b9ab4b9d9903d007df7fe7ef6400f29c440f6de01c3c76f2fb18690f04001
4
- data.tar.gz: aa35f665517e110e781329b7e97ea9ff154633fb25c80d274bae96d4f46a6bde
3
+ metadata.gz: f05719c1cecdc2defbb5641b5a61517b84f88a844932ca0568e3b435997e6fd9
4
+ data.tar.gz: 7593e4150d3222b368a722f84f92755a4f246e2a31fc8bdb72b8bc9495c42420
5
5
  SHA512:
6
- metadata.gz: f8a052707df85029b1a29c3b55a24abd7f81d9b288707bc98512c1bc185c1f309c753d72e792dc68e814c67ccc06f059cddf1b16c593f913de68cfb356d8a903
7
- data.tar.gz: 46626cb42cca8480b546bd4281b853bc2c5a51063350109cff57a2f51c766963be06737af5ff26f0610c9ac9b9d2cf53ba5ae6da5df5077901569baf2bd00bfb
6
+ metadata.gz: bb4cd2da9b1baab9d1b2555f498d0efdf71627a0a8686654ebdab0e1da8546004b48215ac907e768c964409f8f08caa0a91cd75d664de76d8b7607f509795c5c
7
+ data.tar.gz: e1a6e11eac83c8e192c2468fbd457b20eacecca8d0aa7c2e286f77cdc1357cba4a9cb1618c0c03014fb7fdb4d7f9bfd346036abe277abed169d1b26f74f833e7
@@ -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
  #
@@ -212,7 +212,7 @@ module Omnibus
212
212
  # :seven_zip - use 7zip for all tar/compressed tar files on windows.
213
213
  # :lax_tar - use tar.exe on windows but ignore errors.
214
214
  #
215
- # Both 7z and bsdtar have issues on windows.
215
+ # 7z has issues on windows.
216
216
  #
217
217
  # 7z cannot extract and untar at the same time. You need to extract to a
218
218
  # temporary location and then extract again into project_dir.
@@ -221,15 +221,6 @@ module Omnibus
221
221
  # location simply results in a text file with the target path written in
222
222
  # it. It does this without throwing any errors.
223
223
  #
224
- # bsdtar will exit(1) if it is encounters symlinks on windows. So we can't
225
- # use shellout! directly.
226
- #
227
- # bsdtar will also exit(1) and fail to overwrite files at the destination
228
- # during extraction if a file already exists at the destination and is
229
- # marked read-only. This used to be a problem when we weren't properly
230
- # cleaning an existing project_dir. It should be less of a problem now...
231
- # but who knows.
232
- #
233
224
  def extract
234
225
  # Only used by tar
235
226
  compression_switch = ""
@@ -243,7 +234,7 @@ module Omnibus
243
234
  returns = [0]
244
235
  returns << 1 if source[:extract] == :lax_tar
245
236
 
246
- shellout!("tar #{compression_switch}xf #{safe_downloaded_file} -C#{safe_project_dir}", returns: returns)
237
+ shellout!("tar #{compression_switch}xf #{downloaded_file} --force-local -C#{project_dir}", returns: returns)
247
238
  elsif downloaded_file.end_with?(*COMPRESSED_TAR_EXTENSIONS)
248
239
  Dir.mktmpdir do |temp_dir|
249
240
  log.debug(log_key) { "Temporarily extracting `#{safe_downloaded_file}' to `#{temp_dir}'" }
@@ -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,68 @@ 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 = {}
347
+
348
+ # The case/when below depends on the "current_library" being output with a : at the end
349
+ # and then the dependencies on subsequent lines in the form "library.so.1 => /lib/64/library.so.1"
350
+ # This output format only happens if ldd is passed multiple libraries (for Solaris, similar to Linux)
351
+ # FIXME if any of the `when` clauses in the `health_check_*` methods run before the `current_library`
352
+ # they probably should error out with an explicit callout of formatting with their environment's
353
+ # respective ldd parsing
354
+ read_shared_libs("find #{project.install_dir}/ -type f | xargs file | grep \"ELF\" | awk -F: '{print $1}' | sed -e 's/:$//'", "xargs ldd") do |line|
355
+ case line
356
+ when /^(.+):$/
357
+ current_library = Regexp.last_match[1]
358
+ when /^\s+(.+) \=\>\s+(.+)( \(.+\))?$/
359
+ name = Regexp.last_match[1]
360
+ linked = Regexp.last_match[2]
361
+ ( bad_libs, good_libs ) = check_for_bad_library(bad_libs, good_libs, current_library, name, linked)
362
+ when /^\s+(.+) \(.+\)$/
363
+ next
364
+ when /^\s+statically linked$/
365
+ next
366
+ when /^\s+not a dynamic executable$/ # ignore non-executable files
367
+ else
368
+ log.warn(log_key) do
369
+ "Line did not match for #{current_library}\n#{line}"
370
+ end
371
+ end
372
+ end
336
373
 
374
+ [bad_libs, good_libs]
375
+ end
376
+
377
+ #
378
+ # Run healthchecks on FreeBSD
379
+ #
380
+ # @return [Hash<String, Hash<String, Hash<String, Int>>>]
381
+ # the bad libraries (library_name -> dependency_name -> satisfied_lib_path -> count)
382
+ #
383
+ def health_check_freebsd
337
384
  current_library = nil
338
385
  bad_libs = {}
386
+ good_libs = {}
339
387
 
340
- read_shared_libs("find #{project.install_dir}/ -type f -regextype posix-extended ! -regex '#{regexp}' | xargs ldd") do |line|
388
+ 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
389
  case line
342
390
  when /^(.+):$/
343
391
  current_library = Regexp.last_match[1]
@@ -345,16 +393,51 @@ module Omnibus
345
393
  when /^\s+(.+) \=\>\s+(.+)( \(.+\))?$/
346
394
  name = Regexp.last_match[1]
347
395
  linked = Regexp.last_match[2]
348
- bad_libs = check_for_bad_library(bad_libs, current_library, name, linked)
396
+ ( bad_libs, good_libs ) = check_for_bad_library(bad_libs, good_libs, current_library, name, linked)
349
397
  when /^\s+(.+) \(.+\)$/
350
398
  next
351
399
  when /^\s+statically linked$/
352
400
  next
353
- when /^\s+libjvm.so/
401
+ when /^\s+not a dynamic executable$/ # ignore non-executable files
402
+ else
403
+ log.warn(log_key) do
404
+ "Line did not match for #{current_library}\n#{line}"
405
+ end
406
+ end
407
+ end
408
+
409
+ [bad_libs, good_libs]
410
+ end
411
+
412
+ #
413
+ # Run healthchecks against ldd.
414
+ #
415
+ # @return [Hash<String, Hash<String, Hash<String, Int>>>]
416
+ # the bad libraries (library_name -> dependency_name -> satisfied_lib_path -> count)
417
+ #
418
+ def health_check_linux
419
+ current_library = nil
420
+ bad_libs = {}
421
+ good_libs = {}
422
+
423
+ read_shared_libs("find #{project.install_dir}/ -type f | xargs file | grep \"ELF\" | awk -F: '{print $1}' | sed -e 's/:$//'", "xargs ldd") do |line|
424
+ case line
425
+ when /^(.+):$/
426
+ current_library = Regexp.last_match[1]
427
+ log.debug(log_key) { "Analyzing dependencies for #{current_library}" }
428
+ when /^\s+(.+) \=\>\s+(.+)( \(.+\))?$/
429
+ name = Regexp.last_match[1]
430
+ linked = Regexp.last_match[2]
431
+ ( bad_libs, good_libs ) = check_for_bad_library(bad_libs, good_libs, current_library, name, linked)
432
+ when /^\s+(.+) \(.+\)$/
433
+ next
434
+ when /^\s+statically linked$/
354
435
  next
355
- when /^\s+libjava.so/
436
+ when /^\s+libjvm.so/ # FIXME: should remove if it doesn't blow up server
356
437
  next
357
- when /^\s+libmawt.so/
438
+ when /^\s+libjava.so/ # FIXME: should remove if it doesn't blow up server
439
+ next
440
+ when /^\s+libmawt.so/ # FIXME: should remove if it doesn't blow up server
358
441
  next
359
442
  when /^\s+not a dynamic executable$/ # ignore non-executable files
360
443
  else
@@ -364,7 +447,7 @@ module Omnibus
364
447
  end
365
448
  end
366
449
 
367
- bad_libs
450
+ [bad_libs, good_libs]
368
451
  end
369
452
 
370
453
  private
@@ -399,10 +482,40 @@ module Omnibus
399
482
  # @yield [String]
400
483
  # each line
401
484
  #
402
- def read_shared_libs(command)
403
- cmd = shellout(command)
404
- cmd.stdout.each_line do |line|
405
- yield line
485
+ def read_shared_libs(find_command, ldd_command, &output_proc)
486
+ #
487
+ # construct the list of files to check
488
+ #
489
+
490
+ find_output = shellout!(find_command).stdout.lines
491
+
492
+ find_output.reject! { |file| IGNORED_ENDINGS.any? { |ending| file.end_with?("#{ending}\n") } }
493
+
494
+ find_output.reject! { |file| IGNORED_SUBSTRINGS.any? { |substr| file.include?(substr) } }
495
+
496
+ if find_output.empty?
497
+ # probably the find_command is busted, it should never be empty or why are you using omnibus?
498
+ raise "Internal Error: Health Check found no lines"
499
+ end
500
+
501
+ if find_output.any? { |file| file !~ Regexp.new(project.install_dir) }
502
+ # every file in the find output should be within the install_dir
503
+ raise "Internal Error: Health Check lines not matching the install_dir"
504
+ end
505
+
506
+ #
507
+ # feed the list of files to the "ldd" command
508
+ #
509
+
510
+ # this command will typically fail if the last file isn't a valid lib/binary which happens often
511
+ ldd_output = shellout(ldd_command, input: find_output.join).stdout
512
+
513
+ #
514
+ # do the output process to determine if the files are good or bad
515
+ #
516
+
517
+ ldd_output.each_line do |line|
518
+ output_proc.call(line)
406
519
  end
407
520
  end
408
521
 
@@ -420,7 +533,7 @@ module Omnibus
420
533
  #
421
534
  # @return the modified bad_library hash
422
535
  #
423
- def check_for_bad_library(bad_libs, current_library, name, linked)
536
+ def check_for_bad_library(bad_libs, good_libs, current_library, name, linked)
424
537
  safe = nil
425
538
 
426
539
  whitelist_libs = case Ohai["platform"]
@@ -463,10 +576,11 @@ module Omnibus
463
576
  bad_libs[current_library][name][linked] = 1
464
577
  end
465
578
  else
579
+ good_libs[current_library] = true
466
580
  log.debug(log_key) { " -> PASSED: #{name} is either whitelisted or safely provided." }
467
581
  end
468
582
 
469
- bad_libs
583
+ [bad_libs, good_libs]
470
584
  end
471
585
  end
472
586
  end
@@ -218,7 +218,7 @@ module Omnibus
218
218
  # version is the same as Windows 2012R2. It's only here for completeness
219
219
  # and documentation.
220
220
  when /6\.3\.\d+/, "8.1" then "8.1"
221
- when /^10\.0/ then "10"
221
+ when "10", /^10\.0/ then "10"
222
222
  else
223
223
  raise UnknownPlatformVersion.new(platform, platform_version)
224
224
  end
@@ -431,23 +431,21 @@ module Omnibus
431
431
  end
432
432
 
433
433
  def is_binary?(bin)
434
- is_binary = File.file?(bin) &&
435
- File.executable?(bin) &&
436
- !File.symlink?(bin)
437
- log.debug(log_key) { " removing non-binary file from signing: #{bin}" } unless is_binary
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
- is_macho = false
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
- stdout = shellout!(command).stdout
447
- is_macho = stdout.match?(/Mach-O.*(library|bundle)/)
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
- log.debug(log_key) { " removing non-Mach-O library file from signing: #{lib}" } unless is_macho
450
- is_macho
447
+
448
+ false
451
449
  end
452
450
  end
453
451
  end
@@ -179,7 +179,7 @@ module Omnibus
179
179
  if null?(val)
180
180
  @install_dir || raise(MissingRequiredAttribute.new(self, :install_dir, "/opt/chef"))
181
181
  else
182
- @install_dir = val.tr('\\', "/").squeeze("/").chomp("/")
182
+ @install_dir = val.tr('\\', "/").squeeze("/").chomp("/") # rubocop:disable Style/StringLiterals
183
183
  end
184
184
  end
185
185
  expose :install_dir
@@ -717,7 +717,7 @@ module Omnibus
717
717
  {
718
718
  "CC" => "clang",
719
719
  "CXX" => "clang++",
720
- "LDFLAGS" => "-L#{install_dir}/embedded/lib",
720
+ "LDFLAGS" => "-L#{install_dir}/embedded/lib -Wl,-rpath,#{install_dir}/embedded/lib",
721
721
  "CFLAGS" => "-I#{install_dir}/embedded/include -O3 -D_FORTIFY_SOURCE=2 -fstack-protector",
722
722
  }
723
723
  when "windows"
@@ -15,5 +15,5 @@
15
15
  #
16
16
 
17
17
  module Omnibus
18
- VERSION = "8.2.2".freeze
18
+ VERSION = "9.0.8".freeze
19
19
  end
@@ -1,5 +1,5 @@
1
1
 
2
- # Copyright 2012-2020, 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.
@@ -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
- /libc\.a/,
57
- /libcrypt\.a/,
63
+ /libsrc\.a/,
58
64
  /unix$/,
59
65
  ].freeze
60
66
 
@@ -82,11 +88,13 @@ OMNIOS_WHITELIST_LIBS = [
82
88
  SOLARIS_WHITELIST_LIBS = [
83
89
  /libaio\.so/,
84
90
  /libavl\.so/,
91
+ /libbsm\.so/,
85
92
  /libcrypt_[di]\.so/,
86
93
  /libcrypto.so/,
87
94
  /libcurses\.so/,
88
95
  /libdoor\.so/,
89
96
  /libgen\.so/,
97
+ /libinetutil\.so/,
90
98
  /libmd5\.so/,
91
99
  /libmd\.so/,
92
100
  /libmp\.so/,
@@ -96,9 +104,11 @@ SOLARIS_WHITELIST_LIBS = [
96
104
  /libsocket\.so/,
97
105
  /libssl.so/,
98
106
  /libthread.so/,
107
+ /libtsol\.so/,
99
108
  /libuutil\.so/,
100
109
  /libkstat\.so/,
101
110
  # solaris 11 libraries:
111
+ /libstdc\+\+\.so/,
102
112
  /libc\.so\.1/,
103
113
  /libm\.so\.2/,
104
114
  /libdl\.so\.1/,
@@ -167,6 +177,8 @@ MAC_WHITELIST_LIBS = [
167
177
 
168
178
  FREEBSD_WHITELIST_LIBS = [
169
179
  /libc\.so/,
180
+ /libc\+\+\.so/,
181
+ /libcxxrt\.so/,
170
182
  /libgcc_s\.so/,
171
183
  /libcrypt\.so/,
172
184
  /libm\.so/,
@@ -177,28 +189,34 @@ FREEBSD_WHITELIST_LIBS = [
177
189
  /libkvm\.so/,
178
190
  /libprocstat\.so/,
179
191
  /libmd\.so/,
192
+ /libdl\.so/,
180
193
  ].freeze
181
194
 
182
195
  IGNORED_ENDINGS = %w{
183
196
  .TXT
184
- .[ch]
185
- .[ch]pp
186
- .[eh]rl
187
197
  .app
188
198
  .appup
189
199
  .bat
190
200
  .beam
201
+ .c
191
202
  .cc
192
203
  .cmake
193
204
  .conf
205
+ .cpp
194
206
  .css
195
- .e*rb
207
+ .erb
208
+ .erl
196
209
  .feature
197
210
  .gemspec
198
211
  .gif
199
212
  .gitignore
200
213
  .gitkeep
201
- .h*h
214
+ .h
215
+ .h
216
+ .hh
217
+ .hpp
218
+ .hrl
219
+ .html
202
220
  .jar
203
221
  .java
204
222
  .jpg
@@ -210,6 +228,7 @@ IGNORED_ENDINGS = %w{
210
228
  .lua
211
229
  .md
212
230
  .mkd
231
+ .mo
213
232
  .npmignore
214
233
  .out
215
234
  .packlist
@@ -219,21 +238,28 @@ IGNORED_ENDINGS = %w{
219
238
  .png
220
239
  .pod
221
240
  .properties
222
- .py[oc]*
223
- .r*html
241
+ .py
242
+ .pyc
243
+ .pyo
224
244
  .rake
245
+ .rb
246
+ .rbs
225
247
  .rdoc
248
+ .rhtml
226
249
  .ri
250
+ .rpm
227
251
  .rst
228
252
  .scss
229
253
  .sh
230
254
  .sql
231
255
  .svg
232
256
  .toml
257
+ .tt
233
258
  .ttf
234
259
  .txt
235
260
  .xml
236
261
  .yml
262
+ COPYING
237
263
  Gemfile
238
264
  LICENSE
239
265
  Makefile
@@ -243,7 +269,7 @@ IGNORED_ENDINGS = %w{
243
269
  license
244
270
  }.freeze
245
271
 
246
- IGNORED_PATTERNS = %w{
272
+ IGNORED_SUBSTRINGS = %w{
247
273
  /build_info/
248
274
  /licenses/
249
275
  /LICENSES/
data/omnibus.gemspec CHANGED
@@ -25,18 +25,19 @@ 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", "< 17"
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"
32
32
  gem.add_dependency "contracts", ">= 0.16.0", "< 0.17.0"
33
+ gem.add_dependency "rexml", "~> 3.2"
33
34
 
34
35
  gem.add_dependency "mixlib-versioning"
35
36
  gem.add_dependency "pedump"
36
37
 
37
38
  gem.add_development_dependency "artifactory", "~> 3.0"
38
39
  gem.add_development_dependency "aruba", "~> 2.0"
39
- gem.add_development_dependency "chefstyle", "= 1.7.5"
40
+ gem.add_development_dependency "chefstyle", "= 2.2.2"
40
41
  gem.add_development_dependency "fauxhai-ng", ">= 7.5"
41
42
  gem.add_development_dependency "rspec", "~> 3.0"
42
43
  gem.add_development_dependency "rspec-json_expectations"
@@ -13,6 +13,9 @@
13
13
 
14
14
  %define _binary_payload <%= compression %>
15
15
 
16
+ # Disable creation of build-id links
17
+ %define _build_id_links none
18
+
16
19
  # Metadata
17
20
  Name: <%= name %>
18
21
  Version: <%= version %>
@@ -222,7 +222,7 @@ module Omnibus
222
222
  output = capture_logging { subject.build }
223
223
 
224
224
  appbundler_path = File.join(embedded_bin_dir, "appbundler")
225
- appbundler_path.gsub!(%r{/}, '\\') if windows?
225
+ appbundler_path.gsub!(%r{/}, '\\') if windows? # rubocop:disable Style/StringLiterals
226
226
  expect(output).to include("#{appbundler_path} '#{project_dir}' '#{bin_dir}'")
227
227
  end
228
228
  end
@@ -60,7 +60,7 @@ RSpec.shared_examples "a software" do |name = "chefdk"|
60
60
 
61
61
  allow(software).to receive(:embedded_bin) do |binary|
62
62
  p = File.join(embedded_bin_dir, binary)
63
- p.gsub!(%r{/}, '\\') if windows?
63
+ p.gsub!(%r{/}, '\\') if windows? # rubocop:disable Style/StringLiterals
64
64
  p
65
65
  end
66
66
  end
@@ -14,7 +14,7 @@ module Omnibus
14
14
  # If we asked for Windows, we should also specify that magical
15
15
  # +File::ALT_SEPARATOR+ variable
16
16
  if options[:platform] && options[:platform] == "windows"
17
- stub_const("File::ALT_SEPARATOR", '\\')
17
+ stub_const("File::ALT_SEPARATOR", '\\') # rubocop:disable Style/StringLiterals
18
18
  end
19
19
  end
20
20
  end
@@ -23,7 +23,7 @@ module Omnibus
23
23
  allow(subject).to receive(:windows?).and_return(on_windows)
24
24
  allow(subject).to receive(:windows_safe_path) do |*args|
25
25
  path = File.join(*args)
26
- path.gsub!(File::SEPARATOR, '\\') if on_windows
26
+ path.gsub!(File::SEPARATOR, '\\') if on_windows # rubocop:disable Style/StringLiterals
27
27
  end
28
28
  end
29
29
 
@@ -171,7 +171,7 @@ module Omnibus
171
171
  context "when :bin is present" do
172
172
  it "uses the custom bin" do
173
173
  expect(subject).to receive(:command)
174
- .with("/path/to/make", in_msys_bash: true)
174
+ .with("/path/to/make", { in_msys_bash: true })
175
175
  subject.make(bin: "/path/to/make")
176
176
  end
177
177
  end
@@ -185,7 +185,7 @@ module Omnibus
185
185
 
186
186
  it "uses gmake and sets MAKE=gmake" do
187
187
  expect(subject).to receive(:command)
188
- .with("gmake", env: { "MAKE" => "gmake" }, in_msys_bash: true)
188
+ .with("gmake", { env: { "MAKE" => "gmake" }, in_msys_bash: true } )
189
189
  subject.make
190
190
  end
191
191
  end
@@ -198,26 +198,26 @@ module Omnibus
198
198
 
199
199
  it "uses make" do
200
200
  expect(subject).to receive(:command)
201
- .with("make", in_msys_bash: true)
201
+ .with("make", { in_msys_bash: true } )
202
202
  subject.make
203
203
  end
204
204
  end
205
205
 
206
206
  it "accepts 0 options" do
207
207
  expect(subject).to receive(:command)
208
- .with("make", in_msys_bash: true)
208
+ .with("make", { in_msys_bash: true } )
209
209
  expect { subject.make }.to_not raise_error
210
210
  end
211
211
 
212
212
  it "accepts an additional command string" do
213
213
  expect(subject).to receive(:command)
214
- .with("make install", in_msys_bash: true)
214
+ .with("make install", { in_msys_bash: true } )
215
215
  expect { subject.make("install") }.to_not raise_error
216
216
  end
217
217
 
218
218
  it "persists given options" do
219
219
  expect(subject).to receive(:command)
220
- .with("make", timeout: 3600, in_msys_bash: true)
220
+ .with("make", { timeout: 3600, in_msys_bash: true } )
221
221
  subject.make(timeout: 3600)
222
222
  end
223
223
  end
@@ -242,7 +242,7 @@ module Omnibus
242
242
 
243
243
  it "appends platform host to the options" do
244
244
  expect(subject).to receive(:command)
245
- .with("./configure --build=x86_64-w64-mingw32 --prefix=#{project_dir}/embedded", in_msys_bash: true)
245
+ .with("./configure --build=x86_64-w64-mingw32 --prefix=#{project_dir}/embedded", { in_msys_bash: true } )
246
246
  subject.configure
247
247
  end
248
248
  end
@@ -258,7 +258,7 @@ module Omnibus
258
258
 
259
259
  it "appends platform host to the options" do
260
260
  expect(subject).to receive(:command)
261
- .with("./configure --build=i686-w64-mingw32 --prefix=#{project_dir}/embedded", in_msys_bash: true)
261
+ .with("./configure --build=i686-w64-mingw32 --prefix=#{project_dir}/embedded", { in_msys_bash: true } )
262
262
  subject.configure
263
263
  end
264
264
  end
@@ -266,7 +266,7 @@ module Omnibus
266
266
  context "when :bin is present" do
267
267
  it "uses the custom bin" do
268
268
  expect(subject).to receive(:command)
269
- .with("/path/to/configure --prefix=#{project_dir}/embedded", in_msys_bash: true)
269
+ .with("/path/to/configure --prefix=#{project_dir}/embedded", { in_msys_bash: true } )
270
270
  subject.configure(bin: "/path/to/configure")
271
271
  end
272
272
  end
@@ -274,32 +274,32 @@ module Omnibus
274
274
  context "when :prefix is present" do
275
275
  it "emits non-empty prefix" do
276
276
  expect(subject).to receive(:command)
277
- .with("./configure --prefix=/some/prefix", in_msys_bash: true)
277
+ .with("./configure --prefix=/some/prefix", { in_msys_bash: true } )
278
278
  subject.configure(prefix: "/some/prefix")
279
279
  end
280
280
 
281
281
  it "omits prefix if empty" do
282
282
  expect(subject).to receive(:command)
283
- .with("./configure", in_msys_bash: true)
283
+ .with("./configure", { in_msys_bash: true } )
284
284
  subject.configure(prefix: "")
285
285
  end
286
286
  end
287
287
 
288
288
  it "accepts 0 options" do
289
289
  expect(subject).to receive(:command)
290
- .with("./configure --prefix=#{project_dir}/embedded", in_msys_bash: true)
290
+ .with("./configure --prefix=#{project_dir}/embedded", { in_msys_bash: true } )
291
291
  expect { subject.configure }.to_not raise_error
292
292
  end
293
293
 
294
294
  it "accepts an additional command string" do
295
295
  expect(subject).to receive(:command)
296
- .with("./configure --prefix=#{project_dir}/embedded --myopt", in_msys_bash: true)
296
+ .with("./configure --prefix=#{project_dir}/embedded --myopt", { in_msys_bash: true } )
297
297
  expect { subject.configure("--myopt") }.to_not raise_error
298
298
  end
299
299
 
300
300
  it "persists given options" do
301
301
  expect(subject).to receive(:command)
302
- .with("./configure --prefix=#{project_dir}/embedded", timeout: 3600, in_msys_bash: true)
302
+ .with("./configure --prefix=#{project_dir}/embedded", { timeout: 3600, in_msys_bash: true } )
303
303
  subject.configure(timeout: 3600)
304
304
  end
305
305
  end
@@ -321,28 +321,28 @@ module Omnibus
321
321
  it "invokes patch with patch level 1 unless specified" do
322
322
  expect { subject.patch(source: "good_patch") }.to_not raise_error
323
323
  expect(subject).to receive(:shellout!)
324
- .with("patch -p1 -i #{project_dir}/patch_location2/good_patch", in_msys_bash: true)
324
+ .with("patch -p1 -i #{project_dir}/patch_location2/good_patch", { in_msys_bash: true } )
325
325
  run_build_command
326
326
  end
327
327
 
328
328
  it "invokes patch with patch level provided" do
329
329
  expect { subject.patch(source: "good_patch", plevel: 0) }.to_not raise_error
330
330
  expect(subject).to receive(:shellout!)
331
- .with("patch -p0 -i #{project_dir}/patch_location2/good_patch", in_msys_bash: true)
331
+ .with("patch -p0 -i #{project_dir}/patch_location2/good_patch", { in_msys_bash: true } )
332
332
  run_build_command
333
333
  end
334
334
 
335
335
  it "invokes patch differently if target is provided" do
336
336
  expect { subject.patch(source: "good_patch", target: "target/path") }.to_not raise_error
337
337
  expect(subject).to receive(:shellout!)
338
- .with("cat #{project_dir}/patch_location2/good_patch | patch -p1 target/path", in_msys_bash: true)
338
+ .with("cat #{project_dir}/patch_location2/good_patch | patch -p1 target/path", { in_msys_bash: true } )
339
339
  run_build_command
340
340
  end
341
341
 
342
342
  it "persists other options" do
343
343
  expect { subject.patch(source: "good_patch", timeout: 3600) }.to_not raise_error
344
344
  expect(subject).to receive(:shellout!)
345
- .with("patch -p1 -i #{project_dir}/patch_location2/good_patch", timeout: 3600, in_msys_bash: true)
345
+ .with("patch -p1 -i #{project_dir}/patch_location2/good_patch", { timeout: 3600, in_msys_bash: true } )
346
346
  run_build_command
347
347
  end
348
348
  end
@@ -421,19 +421,19 @@ module Omnibus
421
421
  it_behaves_like "an extractor", "zip", {},
422
422
  ['7z.exe x C:\\file.zip -oC:\\tmp\\project -r -y']
423
423
  it_behaves_like "an extractor", "tar", {},
424
- [['tar xf C:\\file.tar -CC:\\tmp\\project', { returns: [0] }]]
424
+ [["tar xf C:/file.tar --force-local -CC:/tmp/project", { returns: [0] }]]
425
425
  it_behaves_like "an extractor", "tgz", {},
426
- [['tar zxf C:\\file.tgz -CC:\\tmp\\project', { returns: [0] }]]
426
+ [["tar zxf C:/file.tgz --force-local -CC:/tmp/project", { returns: [0] }]]
427
427
  it_behaves_like "an extractor", "tar.gz", {},
428
- [['tar zxf C:\\file.tar.gz -CC:\\tmp\\project', { returns: [0] }]]
428
+ [["tar zxf C:/file.tar.gz --force-local -CC:/tmp/project", { returns: [0] }]]
429
429
  it_behaves_like "an extractor", "tar.bz2", {},
430
- [['tar jxf C:\\file.tar.bz2 -CC:\\tmp\\project', { returns: [0] }]]
430
+ [["tar jxf C:/file.tar.bz2 --force-local -CC:/tmp/project", { returns: [0] }]]
431
431
  it_behaves_like "an extractor", "txz", {},
432
- [['tar Jxf C:\\file.txz -CC:\\tmp\\project', { returns: [0] }]]
432
+ [["tar Jxf C:/file.txz --force-local -CC:/tmp/project", { returns: [0] }]]
433
433
  it_behaves_like "an extractor", "tar.xz", {},
434
- [['tar Jxf C:\\file.tar.xz -CC:\\tmp\\project', { returns: [0] }]]
434
+ [["tar Jxf C:/file.tar.xz --force-local -CC:/tmp/project", { returns: [0] }]]
435
435
  it_behaves_like "an extractor", "tar.lzma", {},
436
- [['tar --lzma -xf C:\\file.tar.lzma -CC:\\tmp\\project', { returns: [0] }]]
436
+ [["tar --lzma -xf C:/file.tar.lzma --force-local -CC:/tmp/project", { returns: [0] }]]
437
437
  end
438
438
 
439
439
  context "when seven_zip extract strategy is chosen" do
@@ -469,19 +469,19 @@ module Omnibus
469
469
  it_behaves_like "an extractor", "zip", { extract: :lax_tar },
470
470
  ['7z.exe x C:\\file.zip -oC:\\tmp\\project -r -y']
471
471
  it_behaves_like "an extractor", "tar", { extract: :lax_tar },
472
- [['tar xf C:\\file.tar -CC:\\tmp\\project', { returns: [0, 1] }]]
472
+ [["tar xf C:/file.tar --force-local -CC:/tmp/project", { returns: [0, 1] }]]
473
473
  it_behaves_like "an extractor", "tgz", { extract: :lax_tar },
474
- [['tar zxf C:\\file.tgz -CC:\\tmp\\project', { returns: [0, 1] }]]
474
+ [["tar zxf C:/file.tgz --force-local -CC:/tmp/project", { returns: [0, 1] }]]
475
475
  it_behaves_like "an extractor", "tar.gz", { extract: :lax_tar },
476
- [['tar zxf C:\\file.tar.gz -CC:\\tmp\\project', { returns: [0, 1] }]]
476
+ [["tar zxf C:/file.tar.gz --force-local -CC:/tmp/project", { returns: [0, 1] }]]
477
477
  it_behaves_like "an extractor", "tar.bz2", { extract: :lax_tar },
478
- [['tar jxf C:\\file.tar.bz2 -CC:\\tmp\\project', { returns: [0, 1] }]]
478
+ [["tar jxf C:/file.tar.bz2 --force-local -CC:/tmp/project", { returns: [0, 1] }]]
479
479
  it_behaves_like "an extractor", "txz", { extract: :lax_tar },
480
- [['tar Jxf C:\\file.txz -CC:\\tmp\\project', { returns: [0, 1] }]]
480
+ [["tar Jxf C:/file.txz --force-local -CC:/tmp/project", { returns: [0, 1] }]]
481
481
  it_behaves_like "an extractor", "tar.xz", { extract: :lax_tar },
482
- [['tar Jxf C:\\file.tar.xz -CC:\\tmp\\project', { returns: [0, 1] }]]
482
+ [["tar Jxf C:/file.tar.xz --force-local -CC:/tmp/project", { returns: [0, 1] }]]
483
483
  it_behaves_like "an extractor", "tar.lzma", { extract: :lax_tar },
484
- [['tar --lzma -xf C:\\file.tar.lzma -CC:\\tmp\\project', { returns: [0, 1] }]]
484
+ [["tar --lzma -xf C:/file.tar.lzma --force-local -CC:/tmp/project", { returns: [0, 1] }]]
485
485
  end
486
486
  end
487
487
 
@@ -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
- stdout: <<-EOH.gsub(/^ {12}/, "")
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
- stdout: <<-EOH.gsub(/^ {12}/, "")
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 #{project.install_dir}/ -type f -regextype posix-extended ! -regex '#{regexp}' | xargs ldd")
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 #{project.install_dir}/ -type f -regextype posix-extended ! -regex '#{regexp}' | xargs ldd")
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(subject).to receive(:is_binary?).with("file").and_return(true)
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(subject).to receive(:is_binary?).with("file").and_return(true)
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(subject).to receive(:is_binary?).with("file").and_return(true)
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")
@@ -229,7 +229,7 @@ module Omnibus
229
229
 
230
230
  context "when on Windows" do
231
231
  before { stub_ohai(platform: "windows", version: "2019") }
232
- before { stub_const("File::ALT_SEPARATOR", '\\') }
232
+ before { stub_const("File::ALT_SEPARATOR", '\\') } # rubocop:disable Style/StringLiterals
233
233
  it "returns a Windows iteration" do
234
234
  expect(subject.build_iteration).to eq(1)
235
235
  end
@@ -239,7 +239,7 @@ module Omnibus
239
239
  "CXXFLAGS" => "-I/opt/project/embedded/include -O3 -D_FORTIFY_SOURCE=2 -fstack-protector",
240
240
  "CPPFLAGS" => "-I/opt/project/embedded/include -O3 -D_FORTIFY_SOURCE=2 -fstack-protector",
241
241
  "CXX" => "clang++",
242
- "LDFLAGS" => "-L/opt/project/embedded/lib",
242
+ "LDFLAGS" => "-L/opt/project/embedded/lib -Wl,-rpath,/opt/project/embedded/lib",
243
243
  "LD_RUN_PATH" => "/opt/project/embedded/lib",
244
244
  "PKG_CONFIG_PATH" => "/opt/project/embedded/lib/pkgconfig",
245
245
  "OMNIBUS_INSTALL_DIR" => "/opt/project"
@@ -543,7 +543,7 @@ module Omnibus
543
543
 
544
544
  it "fetches from a fully expanded git path" do
545
545
  expect(subject.source).to eq(git: "https://github.com/chef/ohai.git")
546
- expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", git: "https://github.com/chef/ohai.git").and_return("1.2.8")
546
+ expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", { git: "https://github.com/chef/ohai.git" } ).and_return("1.2.8")
547
547
  subject.send(:fetcher)
548
548
  end
549
549
 
@@ -552,7 +552,7 @@ module Omnibus
552
552
 
553
553
  it "fetches from the override path" do
554
554
  expect(subject.source).to eq(git: "https://blah.com/git.git")
555
- expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", git: "https://blah.com/git.git").and_return("1.2.8")
555
+ expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", { git: "https://blah.com/git.git" } ).and_return("1.2.8")
556
556
  subject.send(:fetcher)
557
557
  end
558
558
  end
@@ -562,7 +562,7 @@ module Omnibus
562
562
 
563
563
  it "fetches from the override path" do
564
564
  expect(subject.source).to eq(git: "https://github.com/a/b.git")
565
- expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", git: "https://github.com/a/b.git").and_return("1.2.8")
565
+ expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", { git: "https://github.com/a/b.git" } ).and_return("1.2.8")
566
566
  subject.send(:fetcher)
567
567
  end
568
568
  end
@@ -577,7 +577,7 @@ module Omnibus
577
577
 
578
578
  it "fetches from the git spec" do
579
579
  expect(subject.source).to eq(git: "https://blah.com/git.git")
580
- expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", git: "https://blah.com/git.git").and_return("1.2.8")
580
+ expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", { git: "https://blah.com/git.git" } ).and_return("1.2.8")
581
581
  subject.send(:fetcher)
582
582
  end
583
583
 
@@ -586,7 +586,7 @@ module Omnibus
586
586
 
587
587
  it "fetches from the override path" do
588
588
  expect(subject.source).to eq(git: "https://github.com/a/b.git")
589
- expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", git: "https://github.com/a/b.git").and_return("1.2.8")
589
+ expect(Omnibus::Fetcher).to receive(:resolve_version).with("1.2.3", { git: "https://github.com/a/b.git" } ).and_return("1.2.8")
590
590
  subject.send(:fetcher)
591
591
  end
592
592
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnibus
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.2.2
4
+ version: 9.0.8
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: 2021-09-28 00:00:00.000000000 Z
11
+ date: 2022-10-07 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: '17'
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: '17'
108
+ version: '18'
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: ruby-progressbar
111
111
  requirement: !ruby/object:Gem::Requirement
@@ -174,6 +174,20 @@ dependencies:
174
174
  - - "<"
175
175
  - !ruby/object:Gem::Version
176
176
  version: 0.17.0
177
+ - !ruby/object:Gem::Dependency
178
+ name: rexml
179
+ requirement: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - "~>"
182
+ - !ruby/object:Gem::Version
183
+ version: '3.2'
184
+ type: :runtime
185
+ prerelease: false
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - "~>"
189
+ - !ruby/object:Gem::Version
190
+ version: '3.2'
177
191
  - !ruby/object:Gem::Dependency
178
192
  name: mixlib-versioning
179
193
  requirement: !ruby/object:Gem::Requirement
@@ -236,14 +250,14 @@ dependencies:
236
250
  requirements:
237
251
  - - '='
238
252
  - !ruby/object:Gem::Version
239
- version: 1.7.5
253
+ version: 2.2.2
240
254
  type: :development
241
255
  prerelease: false
242
256
  version_requirements: !ruby/object:Gem::Requirement
243
257
  requirements:
244
258
  - - '='
245
259
  - !ruby/object:Gem::Version
246
- version: 1.7.5
260
+ version: 2.2.2
247
261
  - !ruby/object:Gem::Dependency
248
262
  name: fauxhai-ng
249
263
  requirement: !ruby/object:Gem::Requirement