You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.4 KiB
99 lines
3.4 KiB
From 8ab3020205ea92cbef3ca250c924d9b500c5d9aa Mon Sep 17 00:00:00 2001 |
|
From: Hari Bathini <hbathini@linux.ibm.com> |
|
Date: Tue, 12 Jul 2022 13:55:47 +0530 |
|
Subject: [PATCH] fix(squash): build ld cache for squash loader |
|
|
|
Commit dc21638c3f0a fixes kdump kernel crash, due to non-conventional |
|
library path in powerpc, by copying /etc/ld.so.cache under initdir. |
|
While that works in general, it is vulnerable to failure because of |
|
missing links, when the CPU is reconfigured to run in compatibility |
|
mode of older CPU version. Avoid this by running ldconfig for squash |
|
loader to create the necessary links & ld cache for it. Doing this |
|
also saves a few kilobyes of space as the copied ld cache is bigger |
|
in size than the one needed for squash loader environment. |
|
|
|
Fixes: dc21638c3f0a ("fix(squash): keep ld cache under initdir") |
|
Cc: Pingfan Liu <piliu@redhat.com> |
|
Signed-off-by: Hari Bathini <hbathini@linux.ibm.com> |
|
|
|
Resolves: rhbz#2122274 |
|
--- |
|
dracut-init.sh | 14 ++++++++++++++ |
|
dracut.sh | 11 +---------- |
|
modules.d/99squash/module-setup.sh | 8 +++----- |
|
3 files changed, 18 insertions(+), 15 deletions(-) |
|
|
|
diff --git a/dracut-init.sh b/dracut-init.sh |
|
index 900e8b83..fe1b1426 100644 |
|
--- a/dracut-init.sh |
|
+++ b/dracut-init.sh |
|
@@ -504,6 +504,20 @@ inst_rules_wildcard() { |
|
[[ $_found ]] || dinfo "Skipping udev rule: $_rule" |
|
} |
|
|
|
+# make sure that library links are correct and up to date |
|
+build_ld_cache() { |
|
+ for f in "$dracutsysrootdir"/etc/ld.so.conf "$dracutsysrootdir"/etc/ld.so.conf.d/*; do |
|
+ [[ -f $f ]] && inst_simple "${f#$dracutsysrootdir}" |
|
+ done |
|
+ if ! $DRACUT_LDCONFIG -r "$initdir" -f /etc/ld.so.conf; then |
|
+ if [[ $EUID == 0 ]]; then |
|
+ derror "ldconfig exited ungracefully" |
|
+ else |
|
+ derror "ldconfig might need uid=0 (root) for chroot()" |
|
+ fi |
|
+ fi |
|
+} |
|
+ |
|
prepare_udev_rules() { |
|
if [ -z "$UDEVVERSION" ]; then |
|
UDEVVERSION=$(udevadm --version) |
|
diff --git a/dracut.sh b/dracut.sh |
|
index 210a8275..d2f07ac6 100755 |
|
--- a/dracut.sh |
|
+++ b/dracut.sh |
|
@@ -2360,16 +2360,7 @@ fi |
|
|
|
if [[ $kernel_only != yes ]]; then |
|
# make sure that library links are correct and up to date |
|
- for f in "$dracutsysrootdir"/etc/ld.so.conf "$dracutsysrootdir"/etc/ld.so.conf.d/*; do |
|
- [[ -f $f ]] && inst_simple "${f#$dracutsysrootdir}" |
|
- done |
|
- if ! $DRACUT_LDCONFIG -r "$initdir" -f /etc/ld.so.conf; then |
|
- if [[ $EUID == 0 ]]; then |
|
- derror "ldconfig exited ungracefully" |
|
- else |
|
- derror "ldconfig might need uid=0 (root) for chroot()" |
|
- fi |
|
- fi |
|
+ build_ld_cache |
|
fi |
|
|
|
if dracut_module_included "squash"; then |
|
diff --git a/modules.d/99squash/module-setup.sh b/modules.d/99squash/module-setup.sh |
|
index c42eb679..f31ff556 100644 |
|
--- a/modules.d/99squash/module-setup.sh |
|
+++ b/modules.d/99squash/module-setup.sh |
|
@@ -28,11 +28,6 @@ installpost() { |
|
[[ $squash_dir == "$i"/* ]] || mv "$i" "$squash_dir"/ |
|
done |
|
|
|
- # initdir also needs ld.so.* to make ld.so work |
|
- inst /etc/ld.so.cache |
|
- inst /etc/ld.so.conf |
|
- inst_dir /etc/ld.so.conf.d |
|
- |
|
# Create mount points for squash loader |
|
mkdir -p "$initdir"/squash/ |
|
mkdir -p "$squash_dir"/squash/ |
|
@@ -67,6 +62,9 @@ installpost() { |
|
ln_r /usr/bin /bin |
|
ln_r /usr/sbin /sbin |
|
inst_simple "$moddir"/init-squash.sh /init |
|
+ |
|
+ # make sure that library links are correct and up to date for squash loader |
|
+ build_ld_cache |
|
} |
|
|
|
install() { |
|
|
|
|