]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
Factor out all the "type -V" commands
authorHarald Hoyer <harald@redhat.com>
Thu, 6 Feb 2014 15:45:20 +0000 (16:45 +0100)
committerHarald Hoyer <harald@redhat.com>
Thu, 2 Jul 2015 13:16:06 +0000 (15:16 +0200)
Add new functions require_binaries() and require_any_binary() to be used
in the check() section of module-setup.sh.

These functions print a warning line telling the user, which binary is
missing for the specific dracut module.

This unifies the way of checking for binaries and makes the life of an
initramfs creator easier, if he wants to find out why a specific dracut
module is not included in the initramfs.

(cherry picked from commit 30e6e809ed8d189cc8374df3c28cfbcab5a299b9)

37 files changed:
dracut-functions.sh
modules.d/00bash/module-setup.sh
modules.d/00bootchart/module-setup.sh
modules.d/00dash/module-setup.sh
modules.d/00systemd-bootchart/module-setup.sh
modules.d/02caps/module-setup.sh
modules.d/03modsign/module-setup.sh
modules.d/05busybox/module-setup.sh
modules.d/10i18n/module-setup.sh
modules.d/40network/module-setup.sh
modules.d/45url-lib/module-setup.sh
modules.d/50plymouth/module-setup.sh
modules.d/90btrfs/module-setup.sh
modules.d/90crypt/module-setup.sh
modules.d/90dm/module-setup.sh
modules.d/90dmraid/module-setup.sh
modules.d/90lvm/module-setup.sh
modules.d/90mdraid/module-setup.sh
modules.d/90multipath/module-setup.sh
modules.d/91crypt-gpg/module-setup.sh
modules.d/91crypt-loop/module-setup.sh
modules.d/95cifs/module-setup.sh
modules.d/95dasd/module-setup.sh
modules.d/95dasd_mod/module-setup.sh
modules.d/95fcoe-uefi/module-setup.sh
modules.d/95fcoe/module-setup.sh
modules.d/95iscsi/module-setup.sh
modules.d/95nbd/module-setup.sh
modules.d/95nfs/module-setup.sh
modules.d/95ssh-client/module-setup.sh
modules.d/95udev-rules/module-setup.sh
modules.d/95zfcp/module-setup.sh
modules.d/95znet/module-setup.sh
modules.d/97biosdevname/module-setup.sh
modules.d/97masterkey/module-setup.sh
modules.d/98systemd/module-setup.sh
modules.d/99img-lib/module-setup.sh

index 89438b29211a02438f01f981d58b14c9c093c501..4ea3204d3c431d56ee0cc01341a2de742491334d 100755 (executable)
@@ -35,6 +35,51 @@ fi
 # Generic substring function.  If $2 is in $1, return 0.
 strstr() { [[ $1 = *$2* ]]; }
 
+# helper function for check() in module-setup.sh
+# to check for required installed binaries
+# issues a standardized warning message
+require_binaries() {
+    local _module_name="${moddir##*/}"
+    local _ret=0
+
+    if [[ "$1" = "-m" ]]; then
+        _module_name="$2"
+        shift 2
+    fi
+
+    for cmd in "$@"; do
+        if ! find_binary "$cmd" &>/dev/null; then
+            dwarning "$_module_name: Could not find command '$cmd'!"
+            ((_ret++))
+        fi
+    done
+    return $_ret
+}
+
+require_any_binary() {
+    local _module_name="${moddir##*/}"
+    local _ret=1
+
+    if [[ "$1" = "-m" ]]; then
+        _module_name="$2"
+        shift 2
+    fi
+
+    for cmd in "$@"; do
+        if find_binary "$cmd" &>/dev/null; then
+            _ret=0
+            break
+        fi
+    done
+
+    if (( $_ret != 0 )); then
+        dwarning "$_module_name: Could not find any command of '$@'!"
+        return 1
+    fi
+
+    return 0
+}
+
 # find a binary.  If we were not passed the full path directly,
 # search in the usual places to find the binary.
 find_binary() {
@@ -1055,7 +1100,7 @@ module_check() {
         . $_moddir/module-setup.sh
         is_func check || return 0
         [ $_forced -ne 0 ] && unset hostonly
-        check $hostonly
+        moddir=$_moddir check $hostonly
         _ret=$?
         unset check depends cmdline install installkernel
     fi
@@ -1081,7 +1126,7 @@ module_check_mount() {
         unset check depends cmdline install installkernel
         check() { false; }
         . $_moddir/module-setup.sh
-        check 0
+        moddir=$_moddir check 0
         _ret=$?
         unset check depends cmdline install installkernel
     fi
@@ -1105,7 +1150,7 @@ module_depends() {
         unset check depends cmdline install installkernel
         depends() { true; }
         . $_moddir/module-setup.sh
-        depends
+        moddir=$_moddir depends
         _ret=$?
         unset check depends cmdline install installkernel
         return $_ret
@@ -1126,7 +1171,7 @@ module_cmdline() {
         unset check depends cmdline install installkernel
         cmdline() { true; }
         . $_moddir/module-setup.sh
-        cmdline
+        moddir=$_moddir cmdline
         _ret=$?
         unset check depends cmdline install installkernel
         return $_ret
@@ -1147,7 +1192,7 @@ module_install() {
         unset check depends cmdline install installkernel
         install() { true; }
         . $_moddir/module-setup.sh
-        install
+        moddir=$_moddir install
         _ret=$?
         unset check depends cmdline install installkernel
         return $_ret
@@ -1168,7 +1213,7 @@ module_installkernel() {
         unset check depends cmdline install installkernel
         installkernel() { true; }
         . $_moddir/module-setup.sh
-        installkernel
+        moddir=$_moddir installkernel
         _ret=$?
         unset check depends cmdline install installkernel
         return $_ret
index e874e73d90f616da9eb783e1f00bd40e56fb8871..109642acc8a334c09dcabe2b1c14dafae5b745bb 100755 (executable)
@@ -3,7 +3,7 @@
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 
 check() {
-    [ -x /bin/bash ]
+    require_binaries /bin/bash
 }
 
 depends() {
index 72b60633814171e89b42794bfd243ade83f2a227..f03fc5408a4e600239cb2ea36eb480ef20294f15 100755 (executable)
@@ -4,7 +4,7 @@
 
 check() {
     [[ "$mount_needs" ]] && return 1
-    [ -x /sbin/bootchartd ] || return 1
+    require_binaries /sbin/bootchartd || return 1
     return 255
 }
 
index dfd4d7bf09f25a41c232b3b427e9c32e981f40ac..9a2a92fc0cfd1dcfa7a48da017ed24a6ad04d28f 100755 (executable)
@@ -3,7 +3,7 @@
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 
 check() {
-    [ -x /bin/dash ]
+    require_binaries /bin/dash
 }
 
 depends() {
index 3eb4de1e97220615ff6c58e0d41bee5979d0ed7a..eb6f383ca4e74fc3c991079821216edab699f286 100755 (executable)
@@ -4,7 +4,7 @@
 
 check() {
     [[ "$mount_needs" ]] && return 1
-    [ -x $systemdutildir/systemd-bootchart ] || return 1
+    require_binaries $systemdutildir/systemd-bootchart || return 1
     return 255
 }
 
index c9d94eeb2b322451056417e167e8dd62a9c9f0cc..73eb215b425469a8da5944d4d65cca3a1b171bf2 100755 (executable)
@@ -3,7 +3,7 @@
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 
 check() {
-    type -P capsh >/dev/null 2>&1
+    require_binaries capsh
 }
 
 depends() {
@@ -11,9 +11,13 @@ depends() {
 }
 
 install() {
-    inst_hook pre-pivot 00 "$moddir/caps.sh"
-    inst $(type -P capsh 2>/dev/null) /usr/sbin/capsh
-    # capsh wants bash and we need bash also
-    inst /bin/bash
+    if ! dracut_module_included "systemd"; then
+        inst_hook pre-pivot 00 "$moddir/caps.sh"
+        inst $(type -P capsh 2>/dev/null) /usr/sbin/capsh
+        # capsh wants bash and we need bash also
+        inst /bin/bash
+    else
+        dwarning "caps: does not work with systemd in the initramfs"
+    fi
 }
 
index 730cd86e174184734d45f41156b6956d2aa3d401..bed5cfe1885f314ea0379b2697cd54576d6aa73d 100755 (executable)
@@ -8,7 +8,7 @@
 # Peter Jones <pjones@redhat.com>
 
 check() {
-    [[ -x /usr/bin/keyctl ]] || return 1
+    require_binaries keyctl || return 1
 
     # do not include module in hostonly mode,
     # if no keys are present
index edcc8daa848f5951d19c3da8811a893a69ec97d6..c35ab2e9302fd068a261178dffbc9b465d4e769d 100755 (executable)
@@ -3,7 +3,7 @@
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 
 check() {
-    type -P busybox >/dev/null || return 1
+    require_binaries busybox || return 1
 
     return 255
 }
index 413ee1235a05bcd9e982d3dda47d3915bd43b614..2c0a275c6b604914e151773f6be44d6b3a800916 100755 (executable)
@@ -5,9 +5,7 @@
 check() {
     [[ "$mount_needs" ]] && return 1
 
-    for i in setfont loadkeys kbd_mode; do
-        type -P "$i" >/dev/null || return 1
-    done
+    require_binaries setfont loadkeys kbd_mode || return 1
 
     return 0
 }
index a52e881b4c4f7eea6728eada168bc1ae48fdaad3..3134b5ff4f7f18d1cc938a54c7fd55ea59c4e46e 100755 (executable)
@@ -5,12 +5,7 @@
 check() {
     local _program
 
-    for _program in ip arping dhclient ; do
-        if ! type -P $_program >/dev/null; then
-            derror "Could not find program \"$_program\" required by network."
-            return 1
-        fi
-    done
+    require_binaries ip arping dhclient || return 1
 
     return 255
 }
index b5cf36f28ba12582015607a661a06b432ac76c3f..f2d068b34de482ee716a7b95b782951b2a56a5fa 100755 (executable)
@@ -2,7 +2,7 @@
 # module-setup for url-lib
 
 check() {
-    command -v curl >/dev/null || return 1
+    require_binaries curl || return 1
     return 255
 }
 
index e0e69367c1ea45a4d50998078429d130a737981c..961c1e3913c2a78048dc28a16e5995038bf27c7d 100755 (executable)
@@ -4,7 +4,7 @@
 
 check() {
     [[ "$mount_needs" ]] && return 1
-    type -P plymouthd >/dev/null && type -P plymouth >/dev/null
+    require_binaries plymouthd plymouth
 }
 
 depends() {
index a2805946230e103cb9356ba412c2de32a880cb43..4804f58b3ee5617881391d1e8cc405181492da23 100755 (executable)
@@ -6,7 +6,7 @@ check() {
     local _rootdev
     # if we don't have btrfs installed on the host system,
     # no point in trying to support it in the initramfs.
-    type -P btrfs >/dev/null || return 1
+    require_binaries btrfs || return 1
 
     [[ $hostonly ]] || [[ $mount_needs ]] && {
         for fs in ${host_fs_types[@]}; do
index 272e527d440b59ddc773cd983282f64a350dc15b..dbc87a43c0d88f28f8d4ea8020a970ba655a0268 100755 (executable)
@@ -5,7 +5,7 @@
 check() {
     local _rootdev
     # if cryptsetup is not installed, then we cannot support encrypted devices.
-    type -P cryptsetup >/dev/null || return 1
+    require_binaries cryptsetup || return 1
 
     [[ $hostonly ]] || [[ $mount_needs ]] && {
         for fs in "${host_fs_types[@]}"; do
index 1fd92987b0e9737f077a7bf8d498532b9f29e08e..ed94f4366db4705ba597c94daa6dc07cdf35f282 100755 (executable)
@@ -3,7 +3,7 @@
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 
 check() {
-    type -P dmsetup >/dev/null || return 1
+    require_binaries dmsetup || return 1
     return 255
 }
 
index b230cb0ea88c8f69258570e50feb21d1e9723198..8ca69aa879b422975698c23d03c86cf9ff9cbbe4 100755 (executable)
@@ -6,7 +6,7 @@ check() {
     local _rootdev
     # if we don't have dmraid installed on the host system, no point
     # in trying to support it in the initramfs.
-    type -P dmraid >/dev/null || return 1
+    require_binaries dmraid || return 1
 
     [[ $hostonly ]] || [[ $mount_needs ]] && {
         for dev in "${!host_fs_types[@]}"; do
index 0c5890a77d00e1173e3dacff05043f78d50eaea0..5ec62812f0f397d2317498aa559d621803ebde51 100755 (executable)
@@ -4,7 +4,7 @@
 
 check() {
     # No point trying to support lvm if the binaries are missing
-    type -P lvm >/dev/null || return 1
+    require_binaries lvm || return 1
 
     [[ $hostonly ]] || [[ $mount_needs ]] && {
         for fs in "${host_fs_types[@]}"; do
index 815a3ebc37c2520b1320b9a72c18a1902a5e1185..2092daeaf5f709985b09261d89cdaac230951fb8 100755 (executable)
@@ -5,7 +5,7 @@
 check() {
     local _rootdev
     # No mdadm?  No mdraid support.
-    type -P mdadm >/dev/null || return 1
+    require_binaries mdadm || return 1
 
     [[ $hostonly ]] || [[ $mount_needs ]] && {
         for dev in "${!host_fs_types[@]}"; do
index feb58dcd3c851816eb0ef80f60d968115f4f9cad..d37f958712dbe513ee043b6386ce7ff37d250e67 100755 (executable)
@@ -5,7 +5,7 @@
 check() {
     local _rootdev
     # if there's no multipath binary, no go.
-    type -P multipath >/dev/null || return 1
+    require_binaries multipath || return 1
 
     is_mpath() {
         local _dev=$1
index 43a5a00089c0186a459f2da148cd40c954227161..17b58f1a66304f3d03fe2322ced927c19706d14d 100755 (executable)
@@ -4,7 +4,7 @@
 
 # GPG support is optional
 check() {
-    type -P gpg >/dev/null || return 1
+    require_binaries gpg || return 1
 
     return 255
 }
index c14fd45ae81caa82ec268d9bb9e07fe4f8e0972b..d0a495676c6bd61fee61764ada222e25efb602f2 100644 (file)
@@ -1,19 +1,24 @@
+#!/bin/bash
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+
+# called by dracut
 check() {
-       type -P losetup >/dev/null || return 1
-       
-       return 255
+    require_binaries losetup || return 1
+
+    return 255
 }
 
 depends() {
-       echo crypt
+    echo crypt
 }
 
 installkernel() {
-           instmods loop
+    instmods loop
 }
 
 install() {
-       inst_multiple losetup
-       inst "$moddir/crypt-loop-lib.sh" "/lib/dracut-crypt-loop-lib.sh"
-        dracut_need_initqueue
+    inst_multiple losetup
+    inst "$moddir/crypt-loop-lib.sh" "/lib/dracut-crypt-loop-lib.sh"
+    dracut_need_initqueue
 }
index c17b973a825a7dd5d7c10af54a21f307bec79dd1..9e36f87f8b06f93f65412babc86de1644155ab11 100755 (executable)
@@ -4,7 +4,7 @@
 
 check() {
     # If our prerequisites are not met, fail anyways.
-    type -P mount.cifs >/dev/null || return 1
+    require_binaries mount.cifs || return 1
 
     [[ $hostonly ]] || [[ $mount_needs ]] && {
         for fs in ${host_fs_types[@]}; do
index 3b8396dba56fe73a9a970fc5975b03bc64144d51..70b2fcc86626436d9e5ef5c1e6f65859a513f8bd 100755 (executable)
@@ -5,6 +5,7 @@
 check() {
     local _arch=$(uname -m)
     [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
+    require_binaries normalize_dasd_arg || return 1
     return 0
 }
 
index 9c9eeead640b2f6b135af0e561553db7fe3ca79d..d20764ebd1d4cd7a4a0448ff2e45436eafbe9589 100755 (executable)
@@ -5,6 +5,7 @@
 check() {
     local _arch=$(uname -m)
     [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
+    require_binaries grep sed seq
 
     return 0
 }
index c91f77540a3a3a1b4c6ac59e5aea554932d7447d..0fb06e23383035113afdf3d33b936821560cf017 100755 (executable)
@@ -4,9 +4,7 @@
 
 # called by dracut
 check() {
-    for i in dcbtool fipvlan lldpad ip readlink; do
-        type -P $i >/dev/null || return 1
-    done
+    require_binaries dcbtool fipvlan lldpad ip readlink || return 1
     return 0
 }
 
index 3ffaf5a5f2c13f823cec6da14e2d123c69479ecc..8c6290d485fe006a181ad44132c33a01f6c24c8f 100755 (executable)
@@ -3,10 +3,7 @@
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 
 check() {
-    for i in dcbtool fipvlan lldpad ip readlink; do
-        type -P $i >/dev/null || return 1
-    done
-
+    require_binaries dcbtool fipvlan lldpad ip readlink || return 1
     return 0
 }
 
index c6901c089622895b28cbb559da3574f4c7d299ab..49f9a0ed38479001e60fc6b7da8263373bf30a29 100755 (executable)
@@ -5,7 +5,7 @@
 check() {
     local _rootdev
     # If our prerequisites are not met, fail anyways.
-    type -P iscsistart hostname iscsi-iname >/dev/null || return 1
+    require_binaries iscsistart hostname iscsi-iname || return 1
 
     # If hostonly was requested, fail the check if we are not actually
     # booting from root.
index 3ac00f603943e6745baae5d3f121e492ef7743ef..7e8a416c1220c6ccbdc9b593bcd92a6e03467766 100755 (executable)
@@ -5,7 +5,7 @@
 check() {
     local _rootdev
     # If our prerequisites are not met, fail.
-    type -P nbd-client >/dev/null || return 1
+    require_binaries nbd-client || return 1
 
     # if an nbd device is not somewhere in the chain of devices root is
     # mounted on, fail the hostonly check.
index 75beb746d3a1d8603305122a4624aa004bf6fbf3..02838a49b314844b8ab0d4058b00a603a56e2637 100755 (executable)
@@ -4,8 +4,8 @@
 
 check() {
     # If our prerequisites are not met, fail anyways.
-    type -P rpcbind >/dev/null || type -P portmap >/dev/null || return 1
-    type -P rpc.statd mount.nfs mount.nfs4 umount >/dev/null || return 1
+    require_any_binary rpcbind portmap || return 1
+    require_binaries rpc.statd mount.nfs mount.nfs4 umount || return 1
 
     [[ $hostonly ]] || [[ $mount_needs ]] && {
         for fs in ${host_fs_types[@]}; do
index c7d8ee24b6311eeda3f2fec2104b2ff9abe7098f..6b441075f5f7bd861e9f3d47471c76cf653a22fe 100755 (executable)
@@ -5,11 +5,11 @@
 # fixme: assume user is root
 
 check() {
-    # If our prerequisites are not met, fail.
-    type -P ssh >/dev/null || return 1
-    type -P scp >/dev/null || return 1
     [[ $mount_needs ]] && return 1
 
+    # If our prerequisites are not met, fail.
+    require_binaries ssh scp  || return 1
+
     if [[ $sshkey ]]; then
         [ ! -f $sshkey ] && {
             derror "ssh key: $sshkey is not found!"
index 094479a3c16f8ee47a824892de55bc4e5dacf13e..fdea8c6db7868b7c863cd427522cd8658de1a2a7 100755 (executable)
@@ -5,7 +5,7 @@
 install() {
     local _i
 
-    # Fixme: would be nice if we didn't have to know which rules to grab....
+    # Fixme: would be nice if we didn't have to guess, which rules to grab....
     # ultimately, /lib/initramfs/rules.d or somesuch which includes links/copies
     # of the rules we want so that we just copy those in would be best
     inst_multiple udevadm cat uname blkid \
index 99066958606de6146a8c45e10ad595eaa1ab9140..d19eba4c4e728625746b3587abbc03e152c3fe1d 100755 (executable)
@@ -6,6 +6,8 @@ check() {
     arch=$(uname -m)
     [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
 
+    require_binaries zfcp_cio_free grep sed seq || return 1
+
     return 0
 }
 
index 16f849383a8219cef970447ce65e36b339a4d26c..b052ec375fadb029b99271629873e1085ffa30c9 100755 (executable)
@@ -6,6 +6,8 @@ check() {
     arch=$(uname -m)
     [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1
 
+    require_binaries znet_cio_free grep sed seq readlink || return 1
+
     return 0
 }
 
index 4a0b4f41e0e37ba3f2d983f4a36c2e0488edf960..fd4d4632430638baa874b91e4c37198fa30a7596 100755 (executable)
@@ -4,7 +4,7 @@
 
 check() {
     [[ "$mount_needs" ]] && return 1
-    type -P biosdevname >/dev/null || return 1
+    require_binaries biosdevname || return 1
     return 0
 }
 
index a94c4f539f01c45a0004b01a1f7b5a278af9d5e7..cda6e809d44f8358e31a11c2fb7b2b201a215c4b 100755 (executable)
@@ -4,7 +4,7 @@
 
 check() {
     [[ $hostonly ]] && {
-        [ -x "/bin/keyctl" ] || return 1
+        require_binaries keyctl uname || return 1
     }
 
     return 255
index aae0319a813e145ad2405eb0bf74b821ec80440b..d0271f15f6507a564b7b44117502e71e466560e0 100755 (executable)
@@ -4,7 +4,7 @@
 
 check() {
     [[ $mount_needs ]] && return 1
-    if [[ -x $systemdutildir/systemd ]]; then
+    if require_binaries $systemdutildir/systemd; then
         SYSTEMD_VERSION=$($systemdutildir/systemd --version | { read a b a; echo $b; })
         (( $SYSTEMD_VERSION >= 198 )) && return 0
        return 255
index 28bfc2aa7f1e2515b4780fcaae2241df1b21745f..a951b9309828a056410dbbcdebd81c09b4653fc3 100755 (executable)
@@ -2,9 +2,7 @@
 # module-setup for img-lib
 
 check() {
-    for cmd in tar gzip dd; do
-        command -v $cmd >/dev/null || return 1
-    done
+    require_binaries tar gzip dd bash || return 1
     return 255
 }