Blob Blame History Raw
From a45048b80c27ee5a45a380052a6d29ab1925f7f9 Mon Sep 17 00:00:00 2001
From: Laszlo Gombos <laszlo.gombos@gmail.com>
Date: Fri, 5 Apr 2024 15:50:20 +0200
Subject: [PATCH] fix(dracut): move hooks directory from /usr/lib to /var/lib

Since https://github.com/systemd/systemd/commit/ffc1ec73, /usr is mounted as
read-only in the initramfs by default.

Fixes #2588

Co-authored-by: Antonio Alvarez Feijoo <antonio.feijoo@suse.com>
---
 dracut-init.sh                       | 2 +-
 dracut.sh                            | 6 +++++-
 modules.d/99base/module-setup.sh     | 5 ++++-
 modules.d/99shutdown/module-setup.sh | 8 +++++---
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/dracut-init.sh b/dracut-init.sh
index 7ce3d1dd..863df0cb 100755
--- a/dracut-init.sh
+++ b/dracut-init.sh
@@ -633,7 +633,7 @@ inst_hook() {
         dfatal "No such hook type $1. Aborting initrd creation."
         exit 1
     fi
-    hook="/lib/dracut/hooks/${1}/${2}-${3##*/}"
+    hook="/var/lib/dracut/hooks/${1}/${2}-${3##*/}"
     inst_simple "$3" "$hook"
     chmod u+x "$initdir/$hook"
 }
diff --git a/dracut.sh b/dracut.sh
index 3914d7c5..148ef8b0 100755
--- a/dracut.sh
+++ b/dracut.sh
@@ -1884,7 +1884,11 @@ mkdir -p "${initdir}"/lib/dracut
 
 if [[ $kernel_only != yes ]]; then
     mkdir -p "${initdir}/etc/cmdline.d"
-    mkdir -m 0755 "${initdir}"/lib/dracut/hooks
+    mkdir -m 0755 -p "${initdir}"/var/lib/dracut/hooks
+
+    # symlink to old hooks location for compatibility
+    ln_r /var/lib/dracut/hooks /lib/dracut/hooks
+
     for _d in $hookdirs; do
         # shellcheck disable=SC2174
         mkdir -m 0755 -p "${initdir}/lib/dracut/hooks/$_d"
diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh
index 54b0deb9..bfdc51d4 100755
--- a/modules.d/99base/module-setup.sh
+++ b/modules.d/99base/module-setup.sh
@@ -45,7 +45,10 @@ install() {
 
     [ -e "${initdir}/lib" ] || mkdir -m 0755 -p "${initdir}"/lib
     mkdir -m 0755 -p "${initdir}"/lib/dracut
-    mkdir -m 0755 -p "${initdir}"/lib/dracut/hooks
+    mkdir -m 0755 -p "${initdir}"/var/lib/dracut/hooks
+
+    # symlink to old hooks location for compatibility
+    ln_r /var/lib/dracut/hooks /lib/dracut/hooks
 
     mkdir -p "${initdir}"/tmp
 
diff --git a/modules.d/99shutdown/module-setup.sh b/modules.d/99shutdown/module-setup.sh
index 2b999024..f53017ff 100755
--- a/modules.d/99shutdown/module-setup.sh
+++ b/modules.d/99shutdown/module-setup.sh
@@ -17,9 +17,11 @@ install() {
     inst_multiple umount poweroff reboot halt losetup stat sleep timeout
     inst_multiple -o kexec
     inst "$moddir/shutdown.sh" "$prefix/shutdown"
-    [ -e "${initdir}/lib" ] || mkdir -m 0755 -p "${initdir}"/lib
-    mkdir -m 0755 -p "${initdir}"/lib/dracut
-    mkdir -m 0755 -p "${initdir}"/lib/dracut/hooks
+    mkdir -m 0755 -p "${initdir}"/var/lib/dracut/hooks
+
+    # symlink to old hooks location for compatibility
+    ln_r /var/lib/dracut/hooks /lib/dracut/hooks
+
     for _d in $hookdirs shutdown shutdown-emergency; do
         mkdir -m 0755 -p "${initdir}"/lib/dracut/hooks/"$_d"
     done
-- 
2.44.0