omnibus 8.2.2 → 9.0.8

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 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