]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
dracut.sh: Add --noimageifnotneeded parameter
authorHarald Hoyer <harald@redhat.com>
Wed, 13 Mar 2013 13:47:24 +0000 (14:47 +0100)
committerHarald Hoyer <harald@redhat.com>
Wed, 13 Mar 2013 13:49:20 +0000 (14:49 +0100)
Do not create an image in host-only mode, if no kernel driver is needed
and no $initdir/etc/cmdline/*.conf is generated.

50-dracut.install
dracut-bash-completion.sh
dracut.sh

index 9e9989982283764c90be964db45faac1198134fb..6b63da93fbf6a34e8d2ec99de4bf490902a1f0e4 100755 (executable)
@@ -2,10 +2,27 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 
+if [[ -f /etc/kernel/cmdline ]]; then
+    readarray -t BOOT_OPTIONS < /etc/kernel/cmdline
+fi
+
+if ! [[ "${BOOT_OPTIONS[@]}" ]]; then
+    readarray -t BOOT_OPTIONS < /proc/cmdline
+fi
+
+unset noimageifnotneeded
+
+for ((i=0; i < "${#BOOT_OPTIONS[@]}"; i++)); do
+    if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then
+        noimageifnotneeded="yes"
+        break
+    fi
+done
+
 ret=0
 case "$1" in
     add)
-       dracut "$3"/initrd "$2"
+       dracut ${noimageifnotneeded+--noimageifnotneeded} "$3"/initrd "$2"
         ret=$?
        ;;
     remove)
index da067c517ba227acf531f13e466aa16ca86d3123..38e2ebd935bfac220d79d92e8e8ba66aec065872 100644 (file)
@@ -33,7 +33,7 @@ _dracut() {
                               --lvmconf --nolvmconf --debug --profile --verbose --quiet
                               --local --hostonly --no-hostonly --fstab --help --bzip2 --lzma
                               --xz --no-compress --gzip --list-modules --show-modules --keep
-                              --printsize --regenerate-all'
+                              --printsize --regenerate-all --noimageifnotneeded'
 
                        [ARG]='-a -m -o -d -I -k -c -L --kver --add --force-add --add-drivers
                               --omit-drivers --modules --omit --drivers --filesystems --install
index 2582f7495ac2c34eeeab80ff832fc2659dcfe626..69f528249a3b732aa86b2ceb573dcc3f21f71b77 100755 (executable)
--- a/dracut.sh
+++ b/dracut.sh
@@ -330,6 +330,7 @@ TEMP=$(unset POSIXLY_CORRECT; getopt \
     --long keep \
     --long printsize \
     --long regenerate-all \
+    --long noimageifnotneeded \
     -- "$@")
 
 if (( $? != 0 )); then
@@ -408,6 +409,7 @@ while :; do
         --keep)        keep="yes";;
         --printsize)   printsize="yes";;
         --regenerate-all) regenerate_all="yes";;
+        --noimageifnotneeded) noimageifnotneeded="yes";;
 
         --) shift; break;;
 
@@ -1020,6 +1022,16 @@ if [[ $no_kernel != yes ]]; then
     dinfo "*** Installing kernel module dependencies and firmware ***"
     dracut_kernel_post
     dinfo "*** Installing kernel module dependencies and firmware done ***"
+
+    if [[ $noimageifnotneeded == yes ]] && [[ $hostonly ]]; then
+        if [[ ! -f "$initdir/lib/dracut/need-initqueue" ]] && \
+            [[ -f ${initdir}/lib/modules/$kernel/modules.dep && ! -s ${initdir}/lib/modules/$kernel/modules.dep ]]; then
+            for i in ${initdir}/etc/cmdline.d/*.conf; do
+                # We need no initramfs image and do not generate one.
+                [[ $i == "${initdir}/etc/cmdline.d/*.conf" ]] && exit 0
+            done
+        fi
+    fi
 fi
 
 if [[ $kernel_only != yes ]]; then