From b340fc8c1c3aff3bd826d7c05d064a6b2a8fd848 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 24 Dec 2025 19:47:55 +0100 Subject: [PATCH 1/3] Introduce variables for ISO file paths This makes it easier to follow what's related --- lib/fog/libvirt/models/compute/server.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/fog/libvirt/models/compute/server.rb b/lib/fog/libvirt/models/compute/server.rb index 805898f..9290f5c 100644 --- a/lib/fog/libvirt/models/compute/server.rb +++ b/lib/fog/libvirt/models/compute/server.rb @@ -254,11 +254,13 @@ def generate_config_iso(user_data, &blk) end def generate_config_iso_in_dir(dir_path, user_data, &blk) - FileUtils.touch(File.join(dir_path, "meta-data")) - File.open(File.join(dir_path, 'user-data'), 'w') { |f| f.write user_data } + meta_data_path = File.join(dir_path, 'meta-data') + FileUtils.touch(meta_data_path) + user_data_path = File.join(dir_path, 'user-data') + File.write(user_data_path, user_data) isofile = Tempfile.new(['init', '.iso']).path - unless system("genisoimage -output #{isofile} -volid cidata -joliet -rock #{File.join(dir_path, 'user-data')} #{File.join(dir_path, 'meta-data')}") + unless system("genisoimage -output #{isofile} -volid cidata -joliet -rock #{user_data_path} #{meta_data_path}") raise Fog::Errors::Error.new("Couldn't generate cloud-init iso disk with genisoimage.") end blk.call(isofile) From 3e88185188c305b0bcfd60f58ba027369bfc71b6 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 24 Dec 2025 20:03:19 +0100 Subject: [PATCH 2/3] Switch from genisoimage to xorriso The genisoimage package is no longer available in EL10 because it was long unmaintained. The xorrisofs command is a drop in replacement. --- lib/fog/libvirt/models/compute/server.rb | 4 ++-- minitests/server/user_data_iso_test.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/fog/libvirt/models/compute/server.rb b/lib/fog/libvirt/models/compute/server.rb index 9290f5c..0daacad 100644 --- a/lib/fog/libvirt/models/compute/server.rb +++ b/lib/fog/libvirt/models/compute/server.rb @@ -260,8 +260,8 @@ def generate_config_iso_in_dir(dir_path, user_data, &blk) File.write(user_data_path, user_data) isofile = Tempfile.new(['init', '.iso']).path - unless system("genisoimage -output #{isofile} -volid cidata -joliet -rock #{user_data_path} #{meta_data_path}") - raise Fog::Errors::Error.new("Couldn't generate cloud-init iso disk with genisoimage.") + unless system("xorrisofs -output #{isofile} -volid cidata -joliet -rock #{user_data_path} #{meta_data_path}") + raise Fog::Errors::Error.new("Couldn't generate cloud-init iso disk with xorrisofs.") end blk.call(isofile) end diff --git a/minitests/server/user_data_iso_test.rb b/minitests/server/user_data_iso_test.rb index 936ba00..d4d3ef4 100644 --- a/minitests/server/user_data_iso_test.rb +++ b/minitests/server/user_data_iso_test.rb @@ -26,7 +26,7 @@ def test_contains_user_data_file def test_iso_is_generated in_a_temp_dir do |d| - @server.expects(:system).with(regexp_matches(/^genisoimage/)).returns(true) + @server.expects(:system).with(regexp_matches(/^xorrisofs/)).returns(true) @server.generate_config_iso_in_dir(d, @test_data) {|iso| } end end From f6e01e537b9cf2a200438c6917930fbe57524650 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 24 Dec 2025 20:12:56 +0100 Subject: [PATCH 3/3] Call system() with an array of arguments This avoids using a shell and can deal properly with spaces in paths. --- lib/fog/libvirt/models/compute/server.rb | 2 +- minitests/server/user_data_iso_test.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/fog/libvirt/models/compute/server.rb b/lib/fog/libvirt/models/compute/server.rb index 0daacad..2059669 100644 --- a/lib/fog/libvirt/models/compute/server.rb +++ b/lib/fog/libvirt/models/compute/server.rb @@ -260,7 +260,7 @@ def generate_config_iso_in_dir(dir_path, user_data, &blk) File.write(user_data_path, user_data) isofile = Tempfile.new(['init', '.iso']).path - unless system("xorrisofs -output #{isofile} -volid cidata -joliet -rock #{user_data_path} #{meta_data_path}") + unless system('xorrisofs', '-output', isofile, '-volid', 'cidata', '-joliet', '-rock', user_data_path, meta_data_path) raise Fog::Errors::Error.new("Couldn't generate cloud-init iso disk with xorrisofs.") end blk.call(isofile) diff --git a/minitests/server/user_data_iso_test.rb b/minitests/server/user_data_iso_test.rb index d4d3ef4..553be30 100644 --- a/minitests/server/user_data_iso_test.rb +++ b/minitests/server/user_data_iso_test.rb @@ -26,7 +26,7 @@ def test_contains_user_data_file def test_iso_is_generated in_a_temp_dir do |d| - @server.expects(:system).with(regexp_matches(/^xorrisofs/)).returns(true) + @server.expects(:system).with { |command, *_args| command == 'xorrisofs' }.returns(true) @server.generate_config_iso_in_dir(d, @test_data) {|iso| } end end