116 lines
4.5 KiB
Diff
116 lines
4.5 KiB
Diff
|
From 866a4b9f163c3aec31736ac0ce25f564fe016cb4 Mon Sep 17 00:00:00 2001
|
||
|
From: Jarek Prokop <jprokop@redhat.com>
|
||
|
Date: Tue, 5 Nov 2024 10:15:28 +0100
|
||
|
Subject: [PATCH 28/40] Add el9toel10 actor to handle symlink -> directory with
|
||
|
ruby IRB.
|
||
|
|
||
|
The `/usr/share/ruby/irb` path is a symlink in RHEL 9,
|
||
|
but a regular directory in RHEL 10.
|
||
|
This puts us back in line with RHEL 8 and Fedora in terms of the
|
||
|
path's file type regarding the rubygem-irb package.
|
||
|
|
||
|
Since this was not handled on RPM level, handle it as actor again.
|
||
|
This was copied and adjusted from same-named el8->el9 actor.
|
||
|
|
||
|
We do not care about the validity or target of the symlink, we just
|
||
|
remove it to allow DNF create the correct directory on upgrade.
|
||
|
|
||
|
Without this workaround, the upgrade will fail in transaction test with
|
||
|
reports of file conflicts on the directory path.
|
||
|
|
||
|
Users should not expect to ever retain anything in this directory.
|
||
|
---
|
||
|
.../actors/registerrubyirbadjustment/actor.py | 31 +++++++++++++++++++
|
||
|
.../test_register_ruby_irb_adjustments.py | 11 +++++++
|
||
|
.../el9toel10/tools/handlerubyirbsymlink | 22 +++++++++++++
|
||
|
3 files changed, 64 insertions(+)
|
||
|
create mode 100644 repos/system_upgrade/el9toel10/actors/registerrubyirbadjustment/actor.py
|
||
|
create mode 100644 repos/system_upgrade/el9toel10/actors/registerrubyirbadjustment/tests/test_register_ruby_irb_adjustments.py
|
||
|
create mode 100755 repos/system_upgrade/el9toel10/tools/handlerubyirbsymlink
|
||
|
|
||
|
diff --git a/repos/system_upgrade/el9toel10/actors/registerrubyirbadjustment/actor.py b/repos/system_upgrade/el9toel10/actors/registerrubyirbadjustment/actor.py
|
||
|
new file mode 100644
|
||
|
index 00000000..4fbec7ff
|
||
|
--- /dev/null
|
||
|
+++ b/repos/system_upgrade/el9toel10/actors/registerrubyirbadjustment/actor.py
|
||
|
@@ -0,0 +1,31 @@
|
||
|
+from leapp.actors import Actor
|
||
|
+from leapp.models import DNFWorkaround
|
||
|
+from leapp.tags import FactsPhaseTag, IPUWorkflowTag
|
||
|
+
|
||
|
+
|
||
|
+class RegisterRubyIRBAdjustment(Actor):
|
||
|
+ """
|
||
|
+ Register a workaround to allow rubygem-irb's symlink -> directory conversion.
|
||
|
+
|
||
|
+ The /usr/share/ruby/irb has been moved from a symlink to a directory
|
||
|
+ in RHEL 10 and this conversion was not handled on the RPM level.
|
||
|
+ This leads to DNF reporting package file conflicts when a major upgrade
|
||
|
+ is attempted and rubygem-irb is installed.
|
||
|
+
|
||
|
+ Register "handlerubyirbsymlink" script that removes the symlink prior
|
||
|
+ to DNF upgrade and allows it to create the expected directory in place of
|
||
|
+ the removed symlink.
|
||
|
+ """
|
||
|
+
|
||
|
+ name = 'register_ruby_irb_adjustment'
|
||
|
+ consumes = ()
|
||
|
+ produces = (DNFWorkaround,)
|
||
|
+ tags = (IPUWorkflowTag, FactsPhaseTag)
|
||
|
+
|
||
|
+ def process(self):
|
||
|
+ self.produce(
|
||
|
+ DNFWorkaround(
|
||
|
+ display_name='IRB directory fix',
|
||
|
+ script_path=self.get_tool_path('handlerubyirbsymlink'),
|
||
|
+ )
|
||
|
+ )
|
||
|
diff --git a/repos/system_upgrade/el9toel10/actors/registerrubyirbadjustment/tests/test_register_ruby_irb_adjustments.py b/repos/system_upgrade/el9toel10/actors/registerrubyirbadjustment/tests/test_register_ruby_irb_adjustments.py
|
||
|
new file mode 100644
|
||
|
index 00000000..fc341646
|
||
|
--- /dev/null
|
||
|
+++ b/repos/system_upgrade/el9toel10/actors/registerrubyirbadjustment/tests/test_register_ruby_irb_adjustments.py
|
||
|
@@ -0,0 +1,11 @@
|
||
|
+import os.path
|
||
|
+
|
||
|
+from leapp.models import DNFWorkaround
|
||
|
+
|
||
|
+
|
||
|
+def test_register_ruby_irb_adjustments(current_actor_context):
|
||
|
+ current_actor_context.run()
|
||
|
+ assert len(current_actor_context.consume(DNFWorkaround)) == 1
|
||
|
+ assert current_actor_context.consume(DNFWorkaround)[0].display_name == 'IRB directory fix'
|
||
|
+ assert os.path.basename(current_actor_context.consume(DNFWorkaround)[0].script_path) == 'handlerubyirbsymlink'
|
||
|
+ assert os.path.exists(current_actor_context.consume(DNFWorkaround)[0].script_path)
|
||
|
diff --git a/repos/system_upgrade/el9toel10/tools/handlerubyirbsymlink b/repos/system_upgrade/el9toel10/tools/handlerubyirbsymlink
|
||
|
new file mode 100755
|
||
|
index 00000000..e9ac40fe
|
||
|
--- /dev/null
|
||
|
+++ b/repos/system_upgrade/el9toel10/tools/handlerubyirbsymlink
|
||
|
@@ -0,0 +1,22 @@
|
||
|
+#!/usr/bin/bash -e
|
||
|
+
|
||
|
+# just in case of hidden files.. not sure why would someone do that, it's more
|
||
|
+# like forgotten cache file possibility, but rather do that..
|
||
|
+shopt -s dotglob
|
||
|
+
|
||
|
+handle_dir() {
|
||
|
+ # Check that $1 is a symlink then unlink it so that RPM
|
||
|
+ # can freely create the directory.
|
||
|
+ if [ ! -L "$1" ]; then
|
||
|
+ return
|
||
|
+ fi
|
||
|
+
|
||
|
+ # There is no configuration or anything that the user should ever customize
|
||
|
+ # and expect to retain.
|
||
|
+ unlink "$1"
|
||
|
+
|
||
|
+ return 0
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
+handle_dir /usr/share/ruby/irb
|
||
|
--
|
||
|
2.47.0
|
||
|
|