From b7d7c3d2a3b26d5f332caa17291091e65482d64f Mon Sep 17 00:00:00 2001 From: Takuro Ashie Date: Fri, 16 Feb 2024 14:28:12 +0900 Subject: [PATCH] Add a patch for RubyInstaller to avoid crash on start up When a non-ASCII key exists under the registry key `SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/`, Fluentd fails to start workers due to `Encoding::UndefinedConversionError`. This patch avoid this issue. Fix #616 Signed-off-by: Takuro Ashie --- fluent-package/Rakefile | 13 ++++++-- fluent-package/config.rb | 8 ++--- ...egistry-for-detecting-MSYS2-installa.patch | 30 +++++++++++++++++++ 3 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 fluent-package/patches/rubyinstaller/0001-Skip-searching-registry-for-detecting-MSYS2-installa.patch diff --git a/fluent-package/Rakefile b/fluent-package/Rakefile index 759830c8e..5b1b37912 100755 --- a/fluent-package/Rakefile +++ b/fluent-package/Rakefile @@ -791,8 +791,17 @@ class BuildTask dependency = Gem::Dependency.new('', version_condition) if dependency.match?('', ruby_version) patch_path = File.join(__dir__, "patches", patch_name) - cd(ruby_lib_dir) do - sh("ridk", "exec", "patch", "-p2", "--input=#{patch_path}") + if patch_name.start_with?("rubyinstaller/") + # Patches for RubyInstaller's binary package + base_dir = fluent_package_staging_dir + strip_level = 1 + else + # patches for Ruby source tree + base_dir = ruby_lib_dir + strip_level = 2 + end + cd(base_dir) do + sh("ridk", "exec", "patch", "-p#{strip_level}", "--input=#{patch_path}") end end end diff --git a/fluent-package/config.rb b/fluent-package/config.rb index 21c06bf35..26b747067 100644 --- a/fluent-package/config.rb +++ b/fluent-package/config.rb @@ -35,10 +35,8 @@ BUNDLED_RUBY_INSTALLER_X64_VERSION = "3.2.2-1" BUNDLED_RUBY_INSTALLER_X64_SHA256SUM = "1f0f55ba0790676be6d701515a244159e9ca2d6314f1101560e3e8a277a2661e" -# Patch files are assumed to be for Ruby's source tree, then applied to -# lib/ruby/x.y.0 in RubyInstaller. So that "-p2" options will be passed -# to patch command. +# Files under rubyinstaller/ are patches for RubyInstaller's binary package. +# Other patches for Ruby's source tree which can be shared with BUNDLED_RUBY_PATCHES. BUNDLED_RUBY_INSTALLER_PATCHES = [ - # An example entry: - # ["ruby-3.0/0001-ruby-resolv-Fix-confusion-of-received-response-messa.patch", ["= 3.0.1"]], + ["rubyinstaller/0001-Skip-searching-registry-for-detecting-MSYS2-installa.patch", [">= 0"]], ] diff --git a/fluent-package/patches/rubyinstaller/0001-Skip-searching-registry-for-detecting-MSYS2-installa.patch b/fluent-package/patches/rubyinstaller/0001-Skip-searching-registry-for-detecting-MSYS2-installa.patch new file mode 100644 index 000000000..9ac49a835 --- /dev/null +++ b/fluent-package/patches/rubyinstaller/0001-Skip-searching-registry-for-detecting-MSYS2-installa.patch @@ -0,0 +1,30 @@ +From 2b87f213db0e73ad7e55a53b0a75a263a92e9709 Mon Sep 17 00:00:00 2001 +From: Takuro Ashie +Date: Fri, 16 Feb 2024 13:50:04 +0900 +Subject: [PATCH] Skip searching registry for detecting MSYS2 installation + +It causes crash when the registry key contains a non-ASCII subkey and +ruby is executed with '-Eascii-8bit:ascii-8bit'. +In addition, make sure to eliminate influences of external MSYS2. + +Signed-off-by: Takuro Ashie +--- + .../3.2.0/ruby_installer/runtime/msys2_installation.rb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/lib/ruby/site_ruby/3.2.0/ruby_installer/runtime/msys2_installation.rb b/lib/ruby/site_ruby/3.2.0/ruby_installer/runtime/msys2_installation.rb +index ae1db823..90b4928a 100644 +--- a/lib/ruby/site_ruby/3.2.0/ruby_installer/runtime/msys2_installation.rb ++++ b/lib/ruby/site_ruby/3.2.0/ruby_installer/runtime/msys2_installation.rb +@@ -62,6 +62,8 @@ module Runtime # Rewrite from D:/a/rubyinstaller2/rubyinstaller2/lib/ruby_instal + yield "c:/msys64" + yield "c:/msys32" + ++ raise MsysNotFound, "MSYS2 could not be found" ++ + # If msys2 is installed per installer.exe + require "win32/registry" + [ +-- +2.34.1 +