d1a34d
From 456c3badc622cb8c4b6ec59bc37436f3d50f7ed5 Mon Sep 17 00:00:00 2001
d1a34d
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Nykr=C3=BDn?= <lnykryn@redhat.com>
d1a34d
Date: Fri, 9 Jul 2021 12:32:00 +0200
d1a34d
Subject: [PATCH] Merge pull request #7 from lnykryn/bz1977347
d1a34d
d1a34d
Bz1977347
d1a34d
---
d1a34d
 dracut.sh                          | 7 +++++--
d1a34d
 modules.d/99squash/module-setup.sh | 8 ++++----
d1a34d
 2 files changed, 9 insertions(+), 6 deletions(-)
d1a34d
d1a34d
diff --git a/dracut.sh b/dracut.sh
d1a34d
index 60ac46f4..78917763 100755
d1a34d
--- a/dracut.sh
d1a34d
+++ b/dracut.sh
d1a34d
@@ -2067,9 +2067,11 @@ for ((i = 0; i < ${#include_src[@]}; i++)); do
d1a34d
             # check for preexisting symlinks, so we can cope with the
d1a34d
             # symlinks to $prefix
d1a34d
             # Objectname is a file or a directory
d1a34d
+            reset_dotglob="$(shopt -p dotglob)"
d1a34d
+            shopt -q -s dotglob
d1a34d
             for objectname in "$src"/*; do
d1a34d
                 [[ -e $objectname || -L $objectname ]] || continue
d1a34d
-                if [[ -d $objectname ]]; then
d1a34d
+                if [[ -d $objectname ]] && [[ ! -L $objectname ]]; then
d1a34d
                     # objectname is a directory, let's compute the final directory name
d1a34d
                     object_destdir=${destdir}/${objectname#$src/}
d1a34d
                     if ! [[ -e $object_destdir ]]; then
d1a34d
@@ -2077,11 +2079,12 @@ for ((i = 0; i < ${#include_src[@]}; i++)); do
d1a34d
                         mkdir -m 0755 -p "$object_destdir"
d1a34d
                         chmod --reference="$objectname" "$object_destdir"
d1a34d
                     fi
d1a34d
-                    $DRACUT_CP -t "$object_destdir" "$dracutsysrootdir$objectname"/*
d1a34d
+                    $DRACUT_CP -t "$object_destdir" "$dracutsysrootdir$objectname"/.
d1a34d
                 else
d1a34d
                     $DRACUT_CP -t "$destdir" "$dracutsysrootdir$objectname"
d1a34d
                 fi
d1a34d
             done
d1a34d
+            eval "$reset_dotglob"
d1a34d
         elif [[ -e $src ]]; then
d1a34d
             derror "$src is neither a directory nor a regular file"
d1a34d
         else
d1a34d
diff --git a/modules.d/99squash/module-setup.sh b/modules.d/99squash/module-setup.sh
d1a34d
index e3196213..a2525cff 100644
d1a34d
--- a/modules.d/99squash/module-setup.sh
d1a34d
+++ b/modules.d/99squash/module-setup.sh
d1a34d
@@ -42,19 +42,19 @@ installpost() {
d1a34d
     # Install required modules and binaries for the squash image init script.
d1a34d
     if [[ $_busybox ]]; then
d1a34d
         inst "$_busybox" /usr/bin/busybox
d1a34d
-        for _i in sh echo mount modprobe mkdir switch_root grep; do
d1a34d
+        for _i in sh echo mount modprobe mkdir switch_root grep umount; do
d1a34d
             ln_r /usr/bin/busybox /usr/bin/$_i
d1a34d
         done
d1a34d
     else
d1a34d
-        DRACUT_RESOLVE_DEPS=1 inst_multiple sh mount modprobe mkdir switch_root grep
d1a34d
+        DRACUT_RESOLVE_DEPS=1 inst_multiple sh mount modprobe mkdir switch_root grep umount
d1a34d
     fi
d1a34d
 
d1a34d
     hostonly="" instmods "loop" "squashfs" "overlay"
d1a34d
     dracut_kernel_post
d1a34d
 
d1a34d
     # Install squash image init script.
d1a34d
-    ln -sfn /usr/bin "$initdir/bin"
d1a34d
-    ln -sfn /usr/sbin "$initdir/sbin"
d1a34d
+    ln_r /usr/bin /bin
d1a34d
+    ln_r /usr/sbin /sbin
d1a34d
     inst_simple "$moddir"/init-squash.sh /init
d1a34d
 }
d1a34d
 
d1a34d