diff --git a/config/patches/ruby/ruby-win32_resolv.patch b/config/patches/ruby/ruby-win32_resolv.patch new file mode 100644 index 000000000..b4592f2f1 --- /dev/null +++ b/config/patches/ruby/ruby-win32_resolv.patch @@ -0,0 +1,11 @@ +--- ext/win32/lib/win32/resolv.rb.org 2024-03-25 19:48:15 ++++ ext/win32/lib/win32/resolv.rb 2024-03-25 19:49:01 +@@ -4,7 +4,7 @@ + + =end + +-require 'win32/registry' ++require 'win32/registry' unless defined?(Win32::Registry) + + module Win32 + module Resolv diff --git a/config/software/ruby.rb b/config/software/ruby.rb index 4b4a1ead0..57a7f55c2 100644 --- a/config/software/ruby.rb +++ b/config/software/ruby.rb @@ -153,6 +153,20 @@ patch source: "ruby-win32_warning_removal.patch", plevel: 1, env: patch_env end + # We fixed a bug regarding Windows fqdn resolution in Ohai on the 17-stable branch. + # That Ohai update requires the Resolv class. The 'resolv' class unconditionally + # loads the Win32::Registry class as a dependency. + # Chef Infra already loads Win32::Registry and has a monkeypatch for the export_string method. + # When the Resolv class loads again in Ohai, it overwrites the monkeypatch and that + # leads to registry encoding/decoding errors - Base Ruby classes return text encoded in + # UTF-16LE format and we need UTF-8. + # Here we patch the Ruby Win32/Reolv.rb file to make reloading the Win32::Registry class + # conditional and therefore prevent the monkeypatch from being overwritten. + if windows? && version.satisfies?("~> 3.0.0") + patch source: "ruby-win32_resolv.patch", plevel: 1, env: patch_env + end + + # RHEL6 has a base compiler that does not support -fstack-protector-strong, but we # cannot build modern ruby on the RHEL6 base compiler, and the configure script # determines that it supports that flag and so includes it and then ultimately