Harald Hoyer 460d2c
From 4159819fbb20fca8c0a80ddb17e211f481ec7717 Mon Sep 17 00:00:00 2001
Harald Hoyer 460d2c
From: Kairui Song <kasong@redhat.com>
Harald Hoyer 460d2c
Date: Tue, 9 Jun 2020 00:41:24 +0800
Harald Hoyer 460d2c
Subject: [PATCH] 99squash: simplify the code
Harald Hoyer 460d2c
Harald Hoyer 460d2c
The new dracutsysrootdir could be used to replace the shell function
Harald Hoyer 460d2c
required_in_root, so drop it and also simplify the code.
Harald Hoyer 460d2c
Harald Hoyer 460d2c
Signed-off-by: Kairui Song <kasong@redhat.com>
Harald Hoyer 460d2c
---
Harald Hoyer 460d2c
 dracut.sh | 89 ++++++++++++++-------------------------------------------------
Harald Hoyer 460d2c
 1 file changed, 20 insertions(+), 69 deletions(-)
Harald Hoyer 460d2c
Harald Hoyer 460d2c
diff --git a/dracut.sh b/dracut.sh
Harald Hoyer 460d2c
index 8f78da06..12f75670 100755
Harald Hoyer 460d2c
--- a/dracut.sh
Harald Hoyer 460d2c
+++ b/dracut.sh
Harald Hoyer 460d2c
@@ -1833,23 +1833,19 @@ fi
Harald Hoyer 460d2c
 
Harald Hoyer 460d2c
 if dracut_module_included "squash"; then
Harald Hoyer 460d2c
     dinfo "*** Install squash loader ***"
Harald Hoyer 460d2c
-    if ! check_kernel_config CONFIG_SQUASHFS; then
Harald Hoyer 460d2c
-        dfatal "CONFIG_SQUASHFS have to be enabled for dracut squash module to work"
Harald Hoyer 460d2c
-        exit 1
Harald Hoyer 460d2c
-    fi
Harald Hoyer 460d2c
-    if ! check_kernel_config CONFIG_OVERLAY_FS; then
Harald Hoyer 460d2c
-        dfatal "CONFIG_OVERLAY_FS have to be enabled for dracut squash module to work"
Harald Hoyer 460d2c
-        exit 1
Harald Hoyer 460d2c
-    fi
Harald Hoyer 460d2c
-    if ! check_kernel_config CONFIG_DEVTMPFS; then
Harald Hoyer 460d2c
-        dfatal "CONFIG_DEVTMPFS have to be enabled for dracut squash module to work"
Harald Hoyer 460d2c
+    for config in \
Harald Hoyer 460d2c
+      CONFIG_SQUASHFS \
Harald Hoyer 460d2c
+      CONFIG_OVERLAY_FS \
Harald Hoyer 460d2c
+      CONFIG_DEVTMPFS;
Harald Hoyer 460d2c
+    do
Harald Hoyer 460d2c
+      if ! check_kernel_config $config; then
Harald Hoyer 460d2c
+        dfatal "$config have to be enabled for dracut squash module to work"
Harald Hoyer 460d2c
         exit 1
Harald Hoyer 460d2c
-    fi
Harald Hoyer 460d2c
+      fi
Harald Hoyer 460d2c
+    done
Harald Hoyer 460d2c
 
Harald Hoyer 460d2c
     readonly squash_dir="$initdir/squash/root"
Harald Hoyer 460d2c
-    readonly squash_img=$initdir/squash/root.img
Harald Hoyer 460d2c
-
Harald Hoyer 460d2c
-    # Currently only move "usr" "etc" to squashdir
Harald Hoyer 460d2c
+    readonly squash_img="$initdir/squash/root.img"
Harald Hoyer 460d2c
     readonly squash_candidate=( "usr" "etc" )
Harald Hoyer 460d2c
 
Harald Hoyer 460d2c
     mkdir -m 0755 -p $squash_dir
Harald Hoyer 460d2c
@@ -1860,57 +1856,15 @@ if dracut_module_included "squash"; then
Harald Hoyer 460d2c
     # Move some files out side of the squash image, including:
Harald Hoyer 460d2c
     # - Files required to boot and mount the squashfs image
Harald Hoyer 460d2c
     # - Files need to be accessible without mounting the squash image
Harald Hoyer 460d2c
-    required_in_root() {
Harald Hoyer 460d2c
-        local file=$1
Harald Hoyer 460d2c
-        local _sqsh_file=$squash_dir/$file
Harald Hoyer 460d2c
-        local _init_file=$initdir/$file
Harald Hoyer 460d2c
-
Harald Hoyer 460d2c
-        if [[ -e $_init_file ]]; then
Harald Hoyer 460d2c
-            return
Harald Hoyer 460d2c
-        fi
Harald Hoyer 460d2c
-
Harald Hoyer 460d2c
-        if [[ ! -e $_sqsh_file ]] && [[ ! -L $_sqsh_file ]]; then
Harald Hoyer 460d2c
-            derror "$file is required to boot a squashed initramfs but it's not installed!"
Harald Hoyer 460d2c
-            return
Harald Hoyer 460d2c
-        fi
Harald Hoyer 460d2c
-
Harald Hoyer 460d2c
-        if [[ ! -d $(dirname $_init_file) ]]; then
Harald Hoyer 460d2c
-            required_in_root $(dirname $file)
Harald Hoyer 460d2c
-        fi
Harald Hoyer 460d2c
-
Harald Hoyer 460d2c
-        if [[ -L $_sqsh_file ]]; then
Harald Hoyer 460d2c
-          cp --preserve=all -P $_sqsh_file $_init_file
Harald Hoyer 460d2c
-          _sqsh_file=$(realpath $_sqsh_file 2>/dev/null)
Harald Hoyer 460d2c
-          if [[ -e $_sqsh_file ]] && [[ "$_sqsh_file" == "$squash_dir"* ]]; then
Harald Hoyer 460d2c
-            # Relative symlink
Harald Hoyer 460d2c
-            required_in_root ${_sqsh_file#$squash_dir/}
Harald Hoyer 460d2c
-            return
Harald Hoyer 460d2c
-          fi
Harald Hoyer 460d2c
-          if [[ -e $squash_dir$_sqsh_file ]]; then
Harald Hoyer 460d2c
-            # Absolute symlink
Harald Hoyer 460d2c
-            required_in_root ${_sqsh_file#/}
Harald Hoyer 460d2c
-            return
Harald Hoyer 460d2c
-          fi
Harald Hoyer 460d2c
-          required_in_root ${module_spec#$squash_dir/}
Harald Hoyer 460d2c
-        else
Harald Hoyer 460d2c
-          if [[ -d $_sqsh_file ]]; then
Harald Hoyer 460d2c
-            mkdir $_init_file
Harald Hoyer 460d2c
-          else
Harald Hoyer 460d2c
-            mv $_sqsh_file $_init_file
Harald Hoyer 460d2c
-          fi
Harald Hoyer 460d2c
-        fi
Harald Hoyer 460d2c
-    }
Harald Hoyer 460d2c
-
Harald Hoyer 460d2c
-    required_in_root etc/initrd-release
Harald Hoyer 460d2c
-
Harald Hoyer 460d2c
-    for module_spec in $squash_dir/usr/lib/modules/*/modules.*;
Harald Hoyer 460d2c
-    do
Harald Hoyer 460d2c
-        required_in_root ${module_spec#$squash_dir/}
Harald Hoyer 460d2c
-    done
Harald Hoyer 460d2c
-
Harald Hoyer 460d2c
-    for dracut_spec in $squash_dir/usr/lib/dracut/*;
Harald Hoyer 460d2c
+    # - Initramfs marker
Harald Hoyer 460d2c
+    for file in \
Harald Hoyer 460d2c
+        $squash_dir/usr/lib/modules/*/modules.* \
Harald Hoyer 460d2c
+        $squash_dir/usr/lib/dracut/* \
Harald Hoyer 460d2c
+        $squash_dir/etc/initrd-release
Harald Hoyer 460d2c
     do
Harald Hoyer 460d2c
-        required_in_root ${dracut_spec#$squash_dir/}
Harald Hoyer 460d2c
+        [[ -d $file ]] && continue
Harald Hoyer 460d2c
+        DRACUT_RESOLVE_DEPS=1 dracutsysrootdir=$squash_dir inst ${file#$squash_dir}
Harald Hoyer 460d2c
+        rm $file
Harald Hoyer 460d2c
     done
Harald Hoyer 460d2c
 
Harald Hoyer 460d2c
     mv $initdir/init $initdir/init.stock
Harald Hoyer 460d2c
@@ -1921,17 +1875,14 @@ if dracut_module_included "squash"; then
Harald Hoyer 460d2c
     # accessible before mounting the image.
Harald Hoyer 460d2c
     inst_multiple "echo" "sh" "mount" "modprobe" "mkdir"
Harald Hoyer 460d2c
     hostonly="" instmods "loop" "squashfs" "overlay"
Harald Hoyer 460d2c
-
Harald Hoyer 460d2c
     # Only keep systemctl outsite if we need switch root
Harald Hoyer 460d2c
     if [[ ! -f "$initdir/lib/dracut/no-switch-root" ]]; then
Harald Hoyer 460d2c
       inst "systemctl"
Harald Hoyer 460d2c
     fi
Harald Hoyer 460d2c
 
Harald Hoyer 460d2c
+    # Remove duplicated files
Harald Hoyer 460d2c
     for folder in "${squash_candidate[@]}"; do
Harald Hoyer 460d2c
-        # Remove duplicated files in squashfs image, save some more space
Harald Hoyer 460d2c
-        [[ ! -d $initdir/$folder/ ]] && continue
Harald Hoyer 460d2c
-        for file in $(find $initdir/$folder/ -not -type d);
Harald Hoyer 460d2c
-        do
Harald Hoyer 460d2c
+        for file in $(find $initdir/$folder/ -not -type d); do
Harald Hoyer 460d2c
             if [[ -e $squash_dir${file#$initdir} ]]; then
Harald Hoyer 460d2c
                 mv $squash_dir${file#$initdir} $file
Harald Hoyer 460d2c
             fi
Harald Hoyer 460d2c