summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Hoyer <harald@redhat.com>2013-08-09 14:21:29 +0200
committerHarald Hoyer <harald@redhat.com>2013-08-09 14:21:29 +0200
commitf8c4a0f4e5e46e7b415502f39eb98c7f261086a3 (patch)
treeb888b11ebb6397582d545d75acc4a15caae121b7
parentda021423ae95d6f703b30c16de1f5279dcf29742 (diff)
downloaddracut-f8c4a0f4e5e46e7b415502f39eb98c7f261086a3.tar.gz
dracut-f8c4a0f4e5e46e7b415502f39eb98c7f261086a3.tar.xz
dracut-f8c4a0f4e5e46e7b415502f39eb98c7f261086a3.zip
dracut-031-22.git20130809
- lsinitrd.sh: add old cpio signature - dracut.sh: call find with -print0 and cpio with --null - dracut.asc: small corrections - systemd/dracut-initqueue.sh: continue to boot if finished failed - dracut.sh/dracut-functions.sh: handle root on non-block device - dracut-functions.sh: removed non dracut-install shell functions - dracut-functions.sh: inst_multiple == dracut_install - 51-dracut-rescue.install: fixed rescue image creation - dracut.sh: do not strip in FIPS mode Resolves: rhbz#990250 - dracut.sh: check the value of --kver - crypt: Fix typo--/etc/crypttab not /etc/cryptab - network/net-lib.sh: fix ibft interface configuration - iscsi/module-setup.sh: install some modules regardless of hostonly - multipath: need_shutdown if multipath devices exist Resolves: rhbz#994913 - omit drivers fix
-rw-r--r--0007-lsinitrd.sh-add-old-cpio-signature.patch21
-rw-r--r--0008-dracut.sh-call-find-with-print0-and-cpio-with-null.patch31
-rw-r--r--0009-dracut.asc-small-corrections.patch198
-rw-r--r--0010-systemd-dracut-initqueue.sh-continue-to-boot-if-fini.patch31
-rw-r--r--0011-dracut.sh-dracut-functions.sh-handle-root-on-non-blo.patch42
-rw-r--r--0012-dracut-functions.sh-removed-non-dracut-install-shell.patch354
-rw-r--r--0013-dracut-functions.sh-inst_multiple-dracut_install.patch1758
-rw-r--r--0014-51-dracut-rescue.install-fixed-rescue-image-creation.patch31
-rw-r--r--0015-dracut.sh-do-not-strip-in-FIPS-mode.patch43
-rw-r--r--0016-dracut.sh-check-the-value-of-kver.patch26
-rw-r--r--0017-crypt-Fix-typo-etc-crypttab-not-etc-cryptab.patch24
-rw-r--r--0018-network-net-lib.sh-fix-ibft-interface-configuration.patch58
-rw-r--r--0019-iscsi-module-setup.sh-install-some-modules-regardles.patch24
-rw-r--r--0020-multipath-need_shutdown-if-multipath-devices-exist.patch41
-rw-r--r--0021-omit-drivers-fix.patch30
-rw-r--r--dracut.spec36
16 files changed, 2747 insertions, 1 deletions
diff --git a/0007-lsinitrd.sh-add-old-cpio-signature.patch b/0007-lsinitrd.sh-add-old-cpio-signature.patch
new file mode 100644
index 0000000..1362882
--- /dev/null
+++ b/0007-lsinitrd.sh-add-old-cpio-signature.patch
@@ -0,0 +1,21 @@
+From 1cb652491858464a1ce04f263bb78f313338aa68 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 5 Aug 2013 11:14:24 +0200
+Subject: [PATCH] lsinitrd.sh: add old cpio signature
+
+---
+ lsinitrd.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/lsinitrd.sh b/lsinitrd.sh
+index ae71d2e..ef1c262 100755
+--- a/lsinitrd.sh
++++ b/lsinitrd.sh
+@@ -109,6 +109,7 @@ case $bin in
+ CAT="zcat";;
+ BZh*)
+ CAT="bzcat";;
++ $'\x71\xc7'*)
+ 070701)
+ CAT="cat";;
+ *)
diff --git a/0008-dracut.sh-call-find-with-print0-and-cpio-with-null.patch b/0008-dracut.sh-call-find-with-print0-and-cpio-with-null.patch
new file mode 100644
index 0000000..4738bed
--- /dev/null
+++ b/0008-dracut.sh-call-find-with-print0-and-cpio-with-null.patch
@@ -0,0 +1,31 @@
+From 283c34fc2b0b3ecb06613e57163a88dc4ce53ff7 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 5 Aug 2013 11:22:21 +0200
+Subject: [PATCH] dracut.sh: call find with -print0 and cpio with --null
+
+---
+ dracut.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/dracut.sh b/dracut.sh
+index cf92397..3140b7e 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1259,7 +1259,7 @@ if [[ $early_microcode = yes ]]; then
+ fi
+ done
+ done
+- (cd "$microcode_dir/d"; find . | cpio -o -H newc --quiet >../ucode.cpio)
++ (cd "$microcode_dir/d"; find . -print0 | cpio --null -o -H newc --quiet >../ucode.cpio)
+ fi
+
+ rm -f -- "$outfile"
+@@ -1268,7 +1268,7 @@ if [[ $early_microcode = yes ]]; then
+ # The microcode blob is _before_ the initramfs blob, not after
+ mv $microcode_dir/ucode.cpio $outfile.$$
+ fi
+-if ! ( umask 077; cd "$initdir"; find . |cpio -R 0:0 -H newc -o --quiet| \
++if ! ( umask 077; cd "$initdir"; find . -print0 | cpio --null -R 0:0 -H newc -o --quiet| \
+ $compress >> "$outfile.$$"; ); then
+ dfatal "dracut: creation of $outfile.$$ failed"
+ exit 1
diff --git a/0009-dracut.asc-small-corrections.patch b/0009-dracut.asc-small-corrections.patch
new file mode 100644
index 0000000..6389b32
--- /dev/null
+++ b/0009-dracut.asc-small-corrections.patch
@@ -0,0 +1,198 @@
+From 89f7217954231dc11307cc481f1e3ca8ad3ad001 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 5 Aug 2013 11:22:55 +0200
+Subject: [PATCH] dracut.asc: small corrections
+
+---
+ dracut.asc | 75 ++++++++++++++------------------------------------------------
+ 1 file changed, 16 insertions(+), 59 deletions(-)
+
+diff --git a/dracut.asc b/dracut.asc
+index 4de3dbf..dfad67e 100644
+--- a/dracut.asc
++++ b/dracut.asc
+@@ -777,25 +777,12 @@ scripts and udev rules.
+ [[stages]]
+ == Boot Process Stages
+
+-The init script in _99base_ is the main script, which prepares the root file
+-system for usage, runs udev, mounts the real root device, kills the remaining
+-processes, and switches to the real root device for further booting. dracut
+-modules can insert custom script at various points, to control the boot process.
++dracut modules can insert custom script at various points, to control the boot
++process.
+ These hooks are plain directories containing shell scripts ending with ".sh",
+ which are sourced by init.
+ Common used functions are in _dracut-lib.sh_, which can be sourced by any script.
+
+-
+-
+-=== Basic Setup
+-
+-The first thing init does, is to mount _/proc_ and _/sys_ and manually create
+-the basic device nodes and symbolic links in _/dev_ needed to execute basic
+-commands. Then logging is setup according to kernel command line arguments.
+-_/dev/pts_ and _/dev/shm_ are mounted and the first hook is sourced.
+-
+-
+-
+ === Hook: cmdline
+
+ The _cmdline_ hook is a place to insert scripts to parse the kernel command line
+@@ -813,63 +800,49 @@ This hook is executed right after the cmdline hook and a check if root and
+ rootok were set. Here modules can take action with the final root, and before
+ udev has been run.
+
+-
+-
+ === Start Udev
+
+ Now udev is started and the logging for udev is setup.
+
+-
+-
+ === Hook: pre-trigger
+
+ In this hook, you can set udev environment variables with **udevadm control
+ --property=KEY=_value_** or control the further execution of udev with
+ udevadm.
+
+-
+-
+ === Trigger Udev
+
+ udev is triggered by calling udevadm trigger, which sends add events for all
+ devices and subsystems.
+
+-
+-
+ === Main Loop
+
+-Now the main loop of 99base/init begins. Here we loop until udev has settled and
+-all scripts in _initqueue/finished_ returned true. In this loop there are three
+-hooks, where scripts can be inserted by calling /sbin/initqueue.
+-
+-
++In the main loop of dracut loops until udev has settled and
++all scripts in _initqueue/finished_ returned true.
++In this loop there are three hooks, where scripts can be inserted
++by calling /sbin/initqueue.
+
+ ==== Initqueue
+
+ This hook gets executed every time a script is inserted here, regardless of the
+ udev state.
+
+-
+-
+ ==== Initqueue settled
+
+-This hooks gets executed every time udev has settled.
+-
++This hooks (initqueue/settled) gets executed every time udev has settled.
+
+
+ ==== Initqueue timeout
+
+-This hooks gets executed, when the main loop counter becomes half of the
++This hooks (initqueue/timeout) gets executed, when the main loop counter becomes half of the
+ rd.retry counter.
+
+-
+-
+ ==== Initqueue finished
+
+-This hook is called after udev has settled and if all scripts herein return 0
+-the main loop will be ended.
+-
+-
++This hook (initqueue/finished) is called after udev has settled and
++if all scripts herein return 0 the main loop will be ended.
++Abritary scripts can be added here, to loop in the
++initqueue until something happens, which a dracut module wants to wait for.
+
+ === Hook: pre-mount
+
+@@ -877,20 +850,15 @@ Before the root device is mounted all scripts in the hook pre-mount are
+ executed. In some cases (e.g. NFS) the real root device is already mounted,
+ though.
+
+-
+-
+ === Hook: mount
+
+ This hook is mainly to mount the real root device.
+
+-
+-
+ === Hook: pre-pivot
+
+ This hook is called before cleanup hook, This is a good place for
+ actions other than cleanups which need to be called before pivot.
+
+-
+ === Hook: cleanup
+
+ This hook is the last hook and is called before init finally switches root to
+@@ -900,21 +868,18 @@ needed anymore.
+
+ === Cleanup and switch_root
+
+-Init kills all udev processes, cleans up the environment, sets up the arguments
+-for the real init process and finally calls switch_root. switch_root removes the
+-whole filesystem hierarchy of the initramfs, chroot()s to the real root device
+-and calls /sbin/init with the specified arguments.
++Init (or systemd) kills all udev processes, cleans up the environment,
++sets up the arguments for the real init process and finally calls switch_root.
++switch_root removes the whole filesystem hierarchy of the initramfs,
++chroot()s to the real root device and calls /sbin/init with the specified arguments.
+
+ To ensure all files in the initramfs hierarchy can be removed, all processes
+ still running from the initramfs should not have any open file descriptors left.
+
+-
+-
+ == Network Infrastructure
+
+ FIXME
+
+-
+ == Writing a Module
+
+ A simple example module is _96insmodpost_, which modprobes a kernel module after
+@@ -926,8 +891,6 @@ First we create a check() function, which just exits with 0 indicating that this
+ module should be included by default.
+
+ check():
+-
+-
+ ----
+ return 0
+ ----
+@@ -937,8 +900,6 @@ priority number 20 called _parse-insmodpost.sh_. It also installs the
+ _insmodpost.sh_ script in _/sbin_.
+
+ install():
+-
+-
+ ----
+ inst_hook cmdline 20 "$moddir/parse-insmodpost.sh"
+ inst_simple "$moddir/insmodpost.sh" /sbin/insmodpost.sh
+@@ -949,8 +910,6 @@ rd.driver.post, blacklists the module from being autoloaded and installs the
+ hook _insmodpost.sh_ in the _initqueue/settled_.
+
+ _parse-insmodpost.sh_:
+-
+-
+ ----
+ for p in $(getargs rd.driver.post=); do
+ echo "blacklist $p" >> /etc/modprobe.d/initramfsblacklist.conf
+@@ -967,8 +926,6 @@ modprobe the kernel modules specified in all rd.driver.post kernel command line
+ parameters. It runs after udev has settled and is only called once (--onetime).
+
+ _insmodpost.sh_:
+-
+-
+ ----
+ . /lib/dracut-lib.sh
+
diff --git a/0010-systemd-dracut-initqueue.sh-continue-to-boot-if-fini.patch b/0010-systemd-dracut-initqueue.sh-continue-to-boot-if-fini.patch
new file mode 100644
index 0000000..d273a51
--- /dev/null
+++ b/0010-systemd-dracut-initqueue.sh-continue-to-boot-if-fini.patch
@@ -0,0 +1,31 @@
+From 226e3710b4236c69a8f821b6a5c53a264fe4892a Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 5 Aug 2013 11:23:16 +0200
+Subject: [PATCH] systemd/dracut-initqueue.sh: continue to boot if finished
+ failed
+
+but /sysroot/etc/fstab exists.
+---
+ modules.d/98systemd/dracut-initqueue.sh | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/98systemd/dracut-initqueue.sh b/modules.d/98systemd/dracut-initqueue.sh
+index 35cd76f..893ebc4 100755
+--- a/modules.d/98systemd/dracut-initqueue.sh
++++ b/modules.d/98systemd/dracut-initqueue.sh
+@@ -62,7 +62,14 @@ while :; do
+ fi
+
+ main_loop=$(($main_loop+1))
+- [ $main_loop -gt $RDRETRY ] && action_on_fail "Could not boot." && break
++ if [ $main_loop -gt $RDRETRY ];
++ if ! [ -d /sysroot/etc/fstab ] || ! [ -e /sysroot/sbin/init ] ; then
++ action_on_fail "Could not boot." && break
++ fi
++ warn "Not all disks have been found."
++ warn "You might want to regenerate your initramfs."
++ break
++ fi
+ done
+
+ unset job
diff --git a/0011-dracut.sh-dracut-functions.sh-handle-root-on-non-blo.patch b/0011-dracut.sh-dracut-functions.sh-handle-root-on-non-blo.patch
new file mode 100644
index 0000000..7c6ea1f
--- /dev/null
+++ b/0011-dracut.sh-dracut-functions.sh-handle-root-on-non-blo.patch
@@ -0,0 +1,42 @@
+From a4f7b504712bd7499d60d16f358ec89ab31bbb47 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 5 Aug 2013 11:25:45 +0200
+Subject: [PATCH] dracut.sh/dracut-functions.sh: handle root on non-block
+ device
+
+---
+ dracut-functions.sh | 4 +++-
+ dracut.sh | 5 ++++-
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index eb1278e..dee53bb 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -421,7 +421,9 @@ find_mp_fstype() {
+ find_dev_fstype() {
+ local _find_dev _fs
+ _find_dev="$1"
+- [[ "$_find_dev" = /dev* ]] || _find_dev="/dev/block/$_find_dev"
++ if ! [[ "$_find_dev" = /dev* ]]; then
++ [[ -b "/dev/block/$_find_dev" ]] && _find_dev="/dev/block/$_find_dev"
++ fi
+
+ if [[ $use_fstab != yes ]]; then
+ findmnt -e -v -n -o 'FSTYPE' --source "$_find_dev" | { \
+diff --git a/dracut.sh b/dracut.sh
+index 3140b7e..c35d771 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -871,7 +871,10 @@ if [[ $hostonly ]]; then
+ do
+ mp=$(readlink -f "$mp")
+ mountpoint "$mp" >/dev/null 2>&1 || continue
+- _dev="$(readlink -f "/dev/block/$(find_block_device "$mp")")"
++ _dev=$(find_block_device "$mp")
++ _bdev=$(readlink -f "/dev/block/$dev")
++ [[ -b $_bdev ]] && _dev=$_bdev
++ push host_devs $_dev
+ [[ "$_mp" == "/" ]] && root_dev="$_dev"
+ push host_devs "$_dev"
+ done
diff --git a/0012-dracut-functions.sh-removed-non-dracut-install-shell.patch b/0012-dracut-functions.sh-removed-non-dracut-install-shell.patch
new file mode 100644
index 0000000..72d0420
--- /dev/null
+++ b/0012-dracut-functions.sh-removed-non-dracut-install-shell.patch
@@ -0,0 +1,354 @@
+From 55a0b3abc7b8da4f3714cfcb5d34f7aa4e78e5bc Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 5 Aug 2013 11:47:54 +0200
+Subject: [PATCH] dracut-functions.sh: removed non dracut-install shell
+ functions
+
+---
+ dracut-functions.sh | 315 ++++++++++------------------------------------------
+ 1 file changed, 56 insertions(+), 259 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index dee53bb..c0a12cd 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -55,14 +55,6 @@ if ! [[ $dracutbasedir ]]; then
+ dracutbasedir="$(readlink -f $dracutbasedir)"
+ fi
+
+-if ! [[ $DRACUT_INSTALL ]]; then
+- DRACUT_INSTALL=$(find_binary dracut-install)
+-fi
+-
+-if ! [[ $DRACUT_INSTALL ]] && [[ -x $dracutbasedir/dracut-install ]]; then
+- DRACUT_INSTALL=$dracutbasedir/dracut-install
+-fi
+-
+ # Detect lib paths
+ if ! [[ $libdirs ]] ; then
+ if [[ "$(ldd /bin/sh)" == */lib64/* ]] &>/dev/null \
+@@ -588,268 +580,73 @@ fs_get_option() {
+ done
+ }
+
+-if [[ $DRACUT_INSTALL ]]; then
+- [[ $DRACUT_RESOLVE_LAZY ]] || export DRACUT_RESOLVE_DEPS=1
+- inst_dir() {
+- [[ -e ${initdir}/"$1" ]] && return 0 # already there
+- $DRACUT_INSTALL ${initdir+-D "$initdir"} -d "$@"
+- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -d "$@" || :
+- }
+-
+- inst() {
+- [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
+- #dinfo "$DRACUT_INSTALL -l $@"
+- $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
+- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
+- }
+-
+- inst_simple() {
+- [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
+- [[ -e $1 ]] || return 1 # no source
+- $DRACUT_INSTALL ${initdir+-D "$initdir"} "$@"
+- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} "$@" || :
+- }
+-
+- inst_symlink() {
+- [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
+- [[ -L $1 ]] || return 1
+- $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
+- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
+- }
+-
+- dracut_install() {
+- local ret
+- #dinfo "initdir=$initdir $DRACUT_INSTALL -l $@"
+- $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
+- ret=$?
+- (($ret != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
+- return $ret
+- }
+-
+- inst_library() {
+- [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
+- [[ -e $1 ]] || return 1 # no source
+- $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
+- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
+- }
+-
+- inst_binary() {
+- $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
+- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
+- }
+-
+- inst_script() {
+- $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
+- (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
+- }
+-
+-else
+-
+- # Install a directory, keeping symlinks as on the original system.
+- # Example: if /lib points to /lib64 on the host, "inst_dir /lib/file"
+- # will create ${initdir}/lib64, ${initdir}/lib64/file,
+- # and a symlink ${initdir}/lib -> lib64.
+- inst_dir() {
+- [[ -e ${initdir}/"$1" ]] && return 0 # already there
+-
+- local _dir="$1" _part="${1%/*}" _file
+- while [[ "$_part" != "${_part%/*}" ]] && ! [[ -e "${initdir}/${_part}" ]]; do
+- _dir="$_part $_dir"
+- _part=${_part%/*}
+- done
+-
+- # iterate over parent directories
+- for _file in $_dir; do
+- [[ -e "${initdir}/$_file" ]] && continue
+- if [[ -L $_file ]]; then
+- inst_symlink "$_file"
+- else
+- # create directory
+- mkdir -m 0755 -p "${initdir}/$_file" || return 1
+- [[ -e "$_file" ]] && chmod --reference="$_file" "${initdir}/$_file"
+- chmod u+w "${initdir}/$_file"
+- fi
+- done
+- }
+
+- # $1 = file to copy to ramdisk
+- # $2 (optional) Name for the file on the ramdisk
+- # Location of the image dir is assumed to be $initdir
+- # We never overwrite the target if it exists.
+- inst_simple() {
+- [[ -f "$1" ]] || return 1
+- [[ "$1" == */* ]] || return 1
+- local _src=$1 _target="${2:-$1}"
+-
+- [[ -L $_src ]] && { inst_symlink $_src $_target; return $?; }
+-
+- if ! [[ -d ${initdir}/$_target ]]; then
+- [[ -e ${initdir}/$_target ]] && return 0
+- [[ -L ${initdir}/$_target ]] && return 0
+- [[ -d "${initdir}/${_target%/*}" ]] || inst_dir "${_target%/*}"
+- fi
+- if [[ $DRACUT_FIPS_MODE ]]; then
+- # install checksum files also
+- if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then
+- inst "${_src%/*}/.${_src##*/}.hmac" "${_target%/*}/.${_target##*/}.hmac"
+- fi
+- if [[ -e "/lib/fipscheck/${_src##*/}.hmac" ]]; then
+- inst "/lib/fipscheck/${_src##*/}.hmac" "/lib/fipscheck/${_target##*/}.hmac"
+- fi
+- if [[ -e "/lib64/fipscheck/${_src##*/}.hmac" ]]; then
+- inst "/lib64/fipscheck/${_src##*/}.hmac" "/lib64/fipscheck/${_target##*/}.hmac"
+- fi
+- fi
+- ddebug "Installing $_src"
+- cp --reflink=auto --sparse=auto -pfL "$_src" "${initdir}/$_target"
+- }
++if ! [[ $DRACUT_INSTALL ]]; then
++ DRACUT_INSTALL=$(find_binary dracut-install)
++fi
+
+- # same as above, but specialized for symlinks
+- inst_symlink() {
+- local _src=$1 _target=${2:-$1} _realsrc
+- [[ "$1" == */* ]] || return 1
+- [[ -L $1 ]] || return 1
+- [[ -L $initdir/$_target ]] && return 0
+- _realsrc=$(readlink -f "$_src")
+- if ! [[ -e $initdir/$_realsrc ]]; then
+- if [[ -d $_realsrc ]]; then
+- inst_dir "$_realsrc"
+- else
+- inst "$_realsrc"
+- fi
+- fi
+- [[ ! -e $initdir/${_target%/*} ]] && inst_dir "${_target%/*}"
++if ! [[ $DRACUT_INSTALL ]] && [[ -x $dracutbasedir/dracut-install ]]; then
++ DRACUT_INSTALL=$dracutbasedir/dracut-install
++fi
+
+- ln_r "${_realsrc}" "${_target}"
+- }
++if ! [[ -x $DRACUT_INSTALL ]]; then
++ dfatal "dracut-install not found!"
++ exit 10
++fi
+
+- # Same as above, but specialized to handle dynamic libraries.
+- # It handles making symlinks according to how the original library
+- # is referenced.
+- inst_library() {
+- local _src="$1" _dest=${2:-$1} _lib _reallib _symlink
+- [[ "$1" == */* ]] || return 1
+- [[ -e $initdir/$_dest ]] && return 0
+- if [[ -L $_src ]]; then
+- if [[ $DRACUT_FIPS_MODE ]]; then
+- # install checksum files also
+- if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then
+- inst "${_src%/*}/.${_src##*/}.hmac" "${_dest%/*}/.${_dest##*/}.hmac"
+- fi
+- if [[ -e "/lib/fipscheck/${_src##*/}.hmac" ]]; then
+- inst "/lib/fipscheck/${_src##*/}.hmac" "/lib/fipscheck/${_dest##*/}.hmac"
+- fi
+- if [[ -e "/lib64/fipscheck/${_src##*/}.hmac" ]]; then
+- inst "/lib64/fipscheck/${_src##*/}.hmac" "/lib64/fipscheck/${_dest##*/}.hmac"
+- fi
+- fi
+- _reallib=$(readlink -f "$_src")
+- inst_simple "$_reallib" "$_reallib"
+- inst_dir "${_dest%/*}"
+- ln_r "${_reallib}" "${_dest}"
+- else
+- inst_simple "$_src" "$_dest"
+- fi
++[[ $DRACUT_RESOLVE_LAZY ]] || export DRACUT_RESOLVE_DEPS=1
++inst_dir() {
++ [[ -e ${initdir}/"$1" ]] && return 0 # already there
++ $DRACUT_INSTALL ${initdir+-D "$initdir"} -d "$@"
++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -d "$@" || :
++}
+
+- # Create additional symlinks. See rev_symlinks description.
+- for _symlink in $(rev_lib_symlinks $_src) $(rev_lib_symlinks $_reallib); do
+- [[ ! -e $initdir/$_symlink ]] && {
+- ddebug "Creating extra symlink: $_symlink"
+- inst_symlink $_symlink
+- }
+- done
+- }
++inst() {
++ [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
++ #dinfo "$DRACUT_INSTALL -l $@"
++ $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
++}
+
+- # Same as above, but specialized to install binary executables.
+- # Install binary executable, and all shared library dependencies, if any.
+- inst_binary() {
+- local _bin _target
+- _bin=$(find_binary "$1") || return 1
+- _target=${2:-$_bin}
+- [[ -e $initdir/$_target ]] && return 0
+- local _file _line
+- local _so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)'
+- # I love bash!
+- LC_ALL=C ldd "$_bin" 2>/dev/null | while read _line; do
+- [[ $_line = 'not a dynamic executable' ]] && break
+-
+- if [[ $_line =~ $_so_regex ]]; then
+- _file=${BASH_REMATCH[1]}
+- [[ -e ${initdir}/$_file ]] && continue
+- inst_library "$_file"
+- continue
+- fi
++inst_simple() {
++ [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
++ [[ -e $1 ]] || return 1 # no source
++ $DRACUT_INSTALL ${initdir+-D "$initdir"} "$@"
++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} "$@" || :
++}
+
+- if [[ $_line == *not\ found* ]]; then
+- dfatal "Missing a shared library required by $_bin."
+- dfatal "Run \"ldd $_bin\" to find out what it is."
+- dfatal "$_line"
+- dfatal "dracut cannot create an initrd."
+- exit 1
+- fi
+- done
+- inst_simple "$_bin" "$_target"
+- }
++inst_symlink() {
++ [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
++ [[ -L $1 ]] || return 1
++ $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
++}
+
+- # same as above, except for shell scripts.
+- # If your shell script does not start with shebang, it is not a shell script.
+- inst_script() {
+- local _bin
+- _bin=$(find_binary "$1") || return 1
+- shift
+- local _line _shebang_regex
+- read -r -n 80 _line <"$_bin"
+- # If debug is set, clean unprintable chars to prevent messing up the term
+- [[ $debug ]] && _line=$(echo -n "$_line" | tr -c -d '[:print:][:space:]')
+- _shebang_regex='(#! *)(/[^ ]+).*'
+- [[ $_line =~ $_shebang_regex ]] || return 1
+- inst "${BASH_REMATCH[2]}" && inst_simple "$_bin" "$@"
+- }
++dracut_install() {
++ local ret
++ #dinfo "initdir=$initdir $DRACUT_INSTALL -l $@"
++ $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
++ ret=$?
++ (($ret != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
++ return $ret
++}
+
+- # general purpose installation function
+- # Same args as above.
+- inst() {
+- local _x
+-
+- case $# in
+- 1) ;;
+- 2) [[ ! $initdir && -d $2 ]] && export initdir=$2
+- [[ $initdir = $2 ]] && set $1;;
+- 3) [[ -z $initdir ]] && export initdir=$2
+- set $1 $3;;
+- *) dfatal "inst only takes 1 or 2 or 3 arguments"
+- exit 1;;
+- esac
+- for _x in inst_symlink inst_script inst_binary inst_simple; do
+- $_x "$@" && return 0
+- done
+- return 1
+- }
++inst_library() {
++ [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
++ [[ -e $1 ]] || return 1 # no source
++ $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
++}
+
+- # dracut_install [-o ] <file> [<file> ... ]
+- # Install <file> to the initramfs image
+- # -o optionally install the <file> and don't fail, if it is not there
+- dracut_install() {
+- local _optional=no
+- if [[ $1 = '-o' ]]; then
+- _optional=yes
+- shift
+- fi
+- while (($# > 0)); do
+- if ! inst "$1" ; then
+- if [[ $_optional = yes ]]; then
+- dinfo "Skipping program $1 as it cannot be found and is" \
+- "flagged to be optional"
+- else
+- dfatal "Failed to install $1"
+- exit 1
+- fi
+- fi
+- shift
+- done
+- }
++inst_binary() {
++ $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
++}
+
+-fi
++inst_script() {
++ $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
++ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
++}
+
+ # find symlinks linked to given library file
+ # $1 = library file
diff --git a/0013-dracut-functions.sh-inst_multiple-dracut_install.patch b/0013-dracut-functions.sh-inst_multiple-dracut_install.patch
new file mode 100644
index 0000000..843ecd3
--- /dev/null
+++ b/0013-dracut-functions.sh-inst_multiple-dracut_install.patch
@@ -0,0 +1,1758 @@
+From af11946054193dbb13eec70cb62e6b0963c5fb41 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Mon, 5 Aug 2013 12:10:12 +0200
+Subject: [PATCH] dracut-functions.sh: inst_multiple == dracut_install
+
+---
+ dracut-functions.sh | 12 +++++++----
+ dracut.asc | 2 +-
+ dracut.sh | 6 +++---
+ modules.d/00bootchart/module-setup.sh | 2 +-
+ modules.d/00systemd-bootchart/module-setup.sh | 2 +-
+ modules.d/01fips/module-setup.sh | 4 ++--
+ modules.d/03rescue/module-setup.sh | 2 +-
+ modules.d/04watchdog/module-setup.sh | 2 +-
+ modules.d/10i18n/module-setup.sh | 8 ++++----
+ modules.d/30convertfs/module-setup.sh | 2 +-
+ modules.d/40network/module-setup.sh | 8 ++++----
+ modules.d/45url-lib/module-setup.sh | 2 +-
+ modules.d/50gensplash/module-setup.sh | 2 +-
+ modules.d/50plymouth/module-setup.sh | 2 +-
+ modules.d/50plymouth/plymouth-populate-initrd.sh | 6 +++---
+ modules.d/80cms/module-setup.sh | 2 +-
+ modules.d/90bcache/module-setup.sh | 2 +-
+ modules.d/90btrfs/module-setup.sh | 2 +-
+ modules.d/90crypt/module-setup.sh | 4 ++--
+ modules.d/90dm/module-setup.sh | 4 ++--
+ modules.d/90dmraid/module-setup.sh | 4 ++--
+ modules.d/90dmsquash-live/module-setup.sh | 4 ++--
+ modules.d/90kernel-modules/module-setup.sh | 4 ++--
+ modules.d/90lvm/module-setup.sh | 2 +-
+ modules.d/90mdraid/module-setup.sh | 4 ++--
+ modules.d/90multipath/module-setup.sh | 4 ++--
+ modules.d/91crypt-gpg/module-setup.sh | 2 +-
+ modules.d/91crypt-loop/module-setup.sh | 2 +-
+ modules.d/95cifs/module-setup.sh | 4 ++--
+ modules.d/95dasd/module-setup.sh | 2 +-
+ modules.d/95dasd_mod/module-setup.sh | 2 +-
+ modules.d/95debug/module-setup.sh | 2 +-
+ modules.d/95fcoe/module-setup.sh | 2 +-
+ modules.d/95iscsi/module-setup.sh | 4 ++--
+ modules.d/95nfs/module-setup.sh | 6 +++---
+ modules.d/95rootfs-block/module-setup.sh | 4 ++--
+ modules.d/95ssh-client/module-setup.sh | 2 +-
+ modules.d/95udev-rules/module-setup.sh | 6 +++---
+ modules.d/95zfcp/module-setup.sh | 2 +-
+ modules.d/95znet/module-setup.sh | 2 +-
+ modules.d/97biosdevname/module-setup.sh | 2 +-
+ modules.d/97masterkey/module-setup.sh | 2 +-
+ modules.d/98selinux/module-setup.sh | 2 +-
+ modules.d/98syslog/module-setup.sh | 2 +-
+ modules.d/98systemd/module-setup.sh | 8 ++++----
+ modules.d/99base/module-setup.sh | 10 ++++-----
+ modules.d/99fs-lib/module-setup.sh | 2 +-
+ modules.d/99img-lib/module-setup.sh | 4 ++--
+ modules.d/99shutdown/module-setup.sh | 4 ++--
+ test/TEST-01-BASIC/test.sh | 12 +++++------
+ test/TEST-02-SYSTEMD/test.sh | 12 +++++------
+ test/TEST-03-USR-MOUNT/test.sh | 12 +++++------
+ test/TEST-04-FULL-SYSTEMD/test.sh | 26 ++++++++++++------------
+ test/TEST-10-RAID/test.sh | 14 ++++++-------
+ test/TEST-11-LVM/test.sh | 12 +++++------
+ test/TEST-12-RAID-DEG/test.sh | 12 +++++------
+ test/TEST-13-ENC-RAID-LVM/test.sh | 12 +++++------
+ test/TEST-15-BTRFSRAID/test.sh | 12 +++++------
+ test/TEST-16-DMSQUASH/test.sh | 10 ++++-----
+ test/TEST-20-NFS/test.sh | 22 ++++++++++----------
+ test/TEST-30-ISCSI/test.sh | 20 +++++++++---------
+ test/TEST-40-NBD/test.sh | 20 +++++++++---------
+ test/TEST-50-MULTINIC/test.sh | 24 +++++++++++-----------
+ test/old.TEST-14-IMSM/test.sh | 12 +++++------
+ 64 files changed, 206 insertions(+), 202 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index c0a12cd..fbe0633 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -622,7 +622,7 @@ inst_symlink() {
+ (($? != 0)) && derror $DRACUT_INSTALL ${initdir+-D "$initdir"} ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@" || :
+ }
+
+-dracut_install() {
++inst_multiple() {
+ local ret
+ #dinfo "initdir=$initdir $DRACUT_INSTALL -l $@"
+ $DRACUT_INSTALL ${initdir+-D "$initdir"} -a ${DRACUT_RESOLVE_DEPS+-l} ${DRACUT_FIPS_MODE+-H} "$@"
+@@ -631,6 +631,10 @@ dracut_install() {
+ return $ret
+ }
+
++dracut_install() {
++ inst_multiple "$@"
++}
++
+ inst_library() {
+ [[ -e ${initdir}/"${2:-$1}" ]] && return 0 # already there
+ [[ -e $1 ]] || return 1 # no source
+@@ -689,7 +693,7 @@ inst_rule_programs() {
+ }
+ fi
+
+- [[ $_bin ]] && dracut_install "$_bin"
++ [[ $_bin ]] && inst_binary "$_bin"
+ done
+ fi
+ if grep -qE 'RUN[+=]=?"[^ "]+' "$1"; then
+@@ -704,7 +708,7 @@ inst_rule_programs() {
+ }
+ fi
+
+- [[ $_bin ]] && dracut_install "$_bin"
++ [[ $_bin ]] && inst_binary "$_bin"
+ done
+ fi
+ if grep -qE 'IMPORT\{program\}==?"[^ "]+' "$1"; then
+@@ -878,7 +882,7 @@ inst_libdir_file() {
+ done
+ done
+ fi
+- [[ $_files ]] && dracut_install $_files
++ [[ $_files ]] && inst_multiple $_files
+ }
+
+
+diff --git a/dracut.asc b/dracut.asc
+index dfad67e..e0431dc 100644
+--- a/dracut.asc
++++ b/dracut.asc
+@@ -967,7 +967,7 @@ depends on.
+
+ === install()
+
+-dracut_install
++inst_multiple
+
+ inst
+
+diff --git a/dracut.sh b/dracut.sh
+index c35d771..e119bd2 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1107,7 +1107,7 @@ if [[ $no_kernel != yes ]]; then
+ fi
+
+ if [[ $kernel_only != yes ]]; then
+- (( ${#install_items[@]} > 0 )) && dracut_install ${install_items[@]}
++ (( ${#install_items[@]} > 0 )) && inst_multiple ${install_items[@]}
+
+ [[ $kernel_cmdline ]] && printf "%s\n" "$kernel_cmdline" >> "${initdir}/etc/cmdline.d/01-default.conf"
+
+@@ -1182,10 +1182,10 @@ PRELINK_BIN="$(command -v prelink)"
+ if [[ $UID = 0 ]] && [[ $PRELINK_BIN ]]; then
+ if [[ $DRACUT_FIPS_MODE ]]; then
+ dinfo "*** Installing prelink files ***"
+- dracut_install -o prelink /etc/prelink.conf /etc/prelink.conf.d/*.conf /etc/prelink.cache
++ inst_multiple -o prelink /etc/prelink.conf /etc/prelink.conf.d/*.conf /etc/prelink.cache
+ else
+ dinfo "*** Pre-linking files ***"
+- dracut_install -o prelink /etc/prelink.conf /etc/prelink.conf.d/*.conf
++ inst_multiple -o prelink /etc/prelink.conf /etc/prelink.conf.d/*.conf
+ chroot "$initdir" "$PRELINK_BIN" -a
+ rm -f -- "$initdir/$PRELINK_BIN"
+ rm -fr -- "$initdir"/etc/prelink.*
+diff --git a/modules.d/00bootchart/module-setup.sh b/modules.d/00bootchart/module-setup.sh
+index 8a9f470..72b6063 100755
+--- a/modules.d/00bootchart/module-setup.sh
++++ b/modules.d/00bootchart/module-setup.sh
+@@ -16,7 +16,7 @@ install() {
+ inst_symlink /init /sbin/init
+ inst_dir /lib/bootchart/tmpfs
+
+- dracut_install bootchartd bash \
++ inst_multiple bootchartd bash \
+ /lib/bootchart/bootchart-collector /etc/bootchartd.conf \
+ accton \
+ echo \
+diff --git a/modules.d/00systemd-bootchart/module-setup.sh b/modules.d/00systemd-bootchart/module-setup.sh
+index 74935a9..3eb4de1 100755
+--- a/modules.d/00systemd-bootchart/module-setup.sh
++++ b/modules.d/00systemd-bootchart/module-setup.sh
+@@ -14,5 +14,5 @@ depends() {
+
+ install() {
+ inst_symlink /init /sbin/init
+- dracut_install $systemdutildir/systemd-bootchart
++ inst_multiple $systemdutildir/systemd-bootchart
+ }
+diff --git a/modules.d/01fips/module-setup.sh b/modules.d/01fips/module-setup.sh
+index 6013318..d08e3f7 100755
+--- a/modules.d/01fips/module-setup.sh
++++ b/modules.d/01fips/module-setup.sh
+@@ -34,12 +34,12 @@ install() {
+ inst_hook pre-pivot 01 "$moddir/fips-noboot.sh"
+ inst_script "$moddir/fips.sh" /sbin/fips.sh
+
+- dracut_install sha512hmac rmmod insmod mount uname umount fipscheck
++ inst_multiple sha512hmac rmmod insmod mount uname umount fipscheck
+
+ inst_libdir_file libsoftokn3.so libsoftokn3.so \
+ libsoftokn3.chk libfreebl3.so libfreebl3.chk \
+ libssl.so 'hmaccalc/sha512hmac.hmac' libssl.so.10
+
+- dracut_install -o prelink
++ inst_multiple -o prelink
+ }
+
+diff --git a/modules.d/03rescue/module-setup.sh b/modules.d/03rescue/module-setup.sh
+index 3f10b7c..72a4287 100755
+--- a/modules.d/03rescue/module-setup.sh
++++ b/modules.d/03rescue/module-setup.sh
+@@ -12,7 +12,7 @@ depends() {
+ }
+
+ install() {
+- dracut_install -o ps grep more cat rm strace free showmount \
++ inst_multiple -o ps grep more cat rm strace free showmount \
+ ping netstat rpcinfo vi scp ping6 ssh \
+ fsck fsck.ext2 fsck.ext4 fsck.ext3 fsck.ext4dev fsck.vfat e2fsck
+ }
+diff --git a/modules.d/04watchdog/module-setup.sh b/modules.d/04watchdog/module-setup.sh
+index 5eff390..b7725ef 100755
+--- a/modules.d/04watchdog/module-setup.sh
++++ b/modules.d/04watchdog/module-setup.sh
+@@ -23,6 +23,6 @@ install() {
+ inst_hook cleanup 00 "$moddir/watchdog.sh"
+ inst_hook cleanup 99 "$moddir/watchdog.sh"
+ inst_hook emergency 02 "$moddir/watchdog-stop.sh"
+- dracut_install -o wdctl
++ inst_multiple -o wdctl
+ }
+
+diff --git a/modules.d/10i18n/module-setup.sh b/modules.d/10i18n/module-setup.sh
+index e7e5a1c..be9d90b 100755
+--- a/modules.d/10i18n/module-setup.sh
++++ b/modules.d/10i18n/module-setup.sh
+@@ -21,7 +21,7 @@ install() {
+ [[ $FONT ]] || [[ $KEYMAP ]] || return 0
+ fi
+
+- dracut_install -o $systemdutildir/systemd-vconsole-setup
++ inst_multiple -o $systemdutildir/systemd-vconsole-setup
+ KBDSUBDIRS=consolefonts,consoletrans,keymaps,unimaps
+ DEFAULT_FONT="${i18n_default_font:-LatArCyrHeb-16}"
+ I18N_CONF="/etc/locale.conf"
+@@ -93,7 +93,7 @@ install() {
+ }
+
+ install_base() {
+- dracut_install setfont loadkeys kbd_mode stty
++ inst_multiple setfont loadkeys kbd_mode stty
+
+ if ! dracut_module_included "systemd"; then
+ inst ${moddir}/console_init.sh /lib/udev/console_init
+@@ -115,12 +115,12 @@ install() {
+ find "${initdir}${kbddir}/" -name README\* -delete
+ find "${initdir}${kbddir}/" -name '*.gz' -print -quit \
+ | while read line; do
+- dracut_install gzip
++ inst_multiple gzip
+ done
+
+ find "${initdir}${kbddir}/" -name '*.bz2' -print -quit \
+ | while read line; do
+- dracut_install bzip2
++ inst_multiple bzip2
+ done
+ }
+
+diff --git a/modules.d/30convertfs/module-setup.sh b/modules.d/30convertfs/module-setup.sh
+index d87e935..9efd5dd 100755
+--- a/modules.d/30convertfs/module-setup.sh
++++ b/modules.d/30convertfs/module-setup.sh
+@@ -12,7 +12,7 @@ depends() {
+ }
+
+ install() {
+- dracut_install bash find ldconfig mv rm cp ln
++ inst_multiple bash find ldconfig mv rm cp ln
+ inst_hook pre-pivot 99 "$moddir/do-convertfs.sh"
+ inst_script "$moddir/convertfs.sh" /usr/bin/convertfs
+ }
+diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh
+index bd2542d..a5f635d 100755
+--- a/modules.d/40network/module-setup.sh
++++ b/modules.d/40network/module-setup.sh
+@@ -70,10 +70,10 @@ installkernel() {
+
+ install() {
+ local _arch _i _dir
+- dracut_install ip arping dhclient sed
+- dracut_install -o ping ping6
+- dracut_install -o brctl
+- dracut_install -o teamd teamdctl teamnl
++ inst_multiple ip arping dhclient sed
++ inst_multiple -o ping ping6
++ inst_multiple -o brctl
++ inst_multiple -o teamd teamdctl teamnl
+ inst_simple /etc/libnl/classid
+ inst_script "$moddir/ifup.sh" "/sbin/ifup"
+ inst_script "$moddir/netroot.sh" "/sbin/netroot"
+diff --git a/modules.d/45url-lib/module-setup.sh b/modules.d/45url-lib/module-setup.sh
+index 3e82548..b5cf36f 100755
+--- a/modules.d/45url-lib/module-setup.sh
++++ b/modules.d/45url-lib/module-setup.sh
+@@ -14,7 +14,7 @@ depends() {
+ install() {
+ local _dir _crt _found _lib
+ inst_simple "$moddir/url-lib.sh" "/lib/url-lib.sh"
+- dracut_install curl
++ inst_multiple curl
+ # also install libs for curl https
+ inst_libdir_file "libnsspem.so*"
+ inst_libdir_file "libnsssysinit.so*"
+diff --git a/modules.d/50gensplash/module-setup.sh b/modules.d/50gensplash/module-setup.sh
+index 29b93cd..cfee55a 100755
+--- a/modules.d/50gensplash/module-setup.sh
++++ b/modules.d/50gensplash/module-setup.sh
+@@ -71,7 +71,7 @@ install() {
+ mv dev.old dev
+ popd >/dev/null
+
+- dracut_install chvt
++ inst_multiple chvt
+ inst /usr/share/splashutils/initrd.splash /lib/gensplash-lib.sh
+ inst_hook pre-pivot 90 "${moddir}"/gensplash-newroot.sh
+ inst_hook pre-trigger 10 "${moddir}"/gensplash-pretrigger.sh
+diff --git a/modules.d/50plymouth/module-setup.sh b/modules.d/50plymouth/module-setup.sh
+index ae35b11..e0e6936 100755
+--- a/modules.d/50plymouth/module-setup.sh
++++ b/modules.d/50plymouth/module-setup.sh
+@@ -22,7 +22,7 @@ install() {
+
+ inst_hook emergency 50 "$moddir"/plymouth-emergency.sh
+
+- dracut_install readlink
++ inst_multiple readlink
+
+ if ! dracut_module_included "systemd"; then
+ inst_hook pre-trigger 10 "$moddir"/plymouth-pretrigger.sh
+diff --git a/modules.d/50plymouth/plymouth-populate-initrd.sh b/modules.d/50plymouth/plymouth-populate-initrd.sh
+index 6e0f561..f8ef519 100755
+--- a/modules.d/50plymouth/plymouth-populate-initrd.sh
++++ b/modules.d/50plymouth/plymouth-populate-initrd.sh
+@@ -4,7 +4,7 @@
+ PLYMOUTH_LOGO_FILE="/usr/share/pixmaps/system-logo-white.png"
+ PLYMOUTH_THEME=$(plymouth-set-default-theme)
+
+-dracut_install plymouthd plymouth \
++inst_multiple plymouthd plymouth \
+ "${PLYMOUTH_LOGO_FILE}" \
+ /etc/system-release
+
+@@ -13,7 +13,7 @@ mkdir -m 0755 -p "${initdir}/usr/share/plymouth"
+ inst_libdir_file "plymouth/text.so" "plymouth/details.so"
+
+ if [[ $hostonly ]]; then
+- dracut_install \
++ inst_multiple \
+ "/usr/share/plymouth/themes/details/details.plymouth" \
+ "/usr/share/plymouth/themes/text/text.plymouth" \
+
+@@ -35,7 +35,7 @@ else
+ [[ -f "$x" ]] || continue
+ THEME_DIR=$(dirname "$x")
+ mkdir -m 0755 -p "${initdir}/$THEME_DIR"
+- dracut_install "$x"
++ inst_multiple "$x"
+ done
+ (
+ cd ${initdir}/usr/share/plymouth/themes;
+diff --git a/modules.d/80cms/module-setup.sh b/modules.d/80cms/module-setup.sh
+index dcba4c6..c99f236 100755
+--- a/modules.d/80cms/module-setup.sh
++++ b/modules.d/80cms/module-setup.sh
+@@ -23,7 +23,7 @@ install() {
+ inst_hook pre-trigger 30 "$moddir/cmssetup.sh"
+ inst_hook pre-pivot 95 "$moddir/cms-write-ifcfg.sh"
+ inst_script "$moddir/cmsifup.sh" /sbin/cmsifup
+- dracut_install /etc/cmsfs-fuse/filetypes.conf /etc/udev/rules.d/99-fuse.rules /etc/fuse.conf \
++ inst_multiple /etc/cmsfs-fuse/filetypes.conf /etc/udev/rules.d/99-fuse.rules /etc/fuse.conf \
+ cmsfs-fuse fusermount ulockmgr_server bash insmod rmmod cat normalize_dasd_arg sed \
+ $(rpm -ql s390utils-base)
+
+diff --git a/modules.d/90bcache/module-setup.sh b/modules.d/90bcache/module-setup.sh
+index fb881cc..3bb03f4 100755
+--- a/modules.d/90bcache/module-setup.sh
++++ b/modules.d/90bcache/module-setup.sh
+@@ -24,7 +24,7 @@ installkernel() {
+ }
+
+ install() {
+- dracut_install probe-bcache ${udevdir}/bcache-register
++ inst_multiple probe-bcache ${udevdir}/bcache-register
+ inst_rules 61-bcache.rules
+ }
+
+diff --git a/modules.d/90btrfs/module-setup.sh b/modules.d/90btrfs/module-setup.sh
+index e1c8577..638a050 100755
+--- a/modules.d/90btrfs/module-setup.sh
++++ b/modules.d/90btrfs/module-setup.sh
+@@ -43,7 +43,7 @@ install() {
+ /usr/lib/dracut/hooks/initqueue/timeout/btrfs_timeout.sh
+ fi
+
+- dracut_install -o btrfsck btrfs-zero-log
++ inst_multiple -o btrfsck btrfs-zero-log
+ inst $(command -v btrfs) /sbin/btrfs
+ }
+
+diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh
+index 6b32b6a..975f115 100755
+--- a/modules.d/90crypt/module-setup.sh
++++ b/modules.d/90crypt/module-setup.sh
+@@ -48,7 +48,7 @@ install() {
+
+ for_each_host_dev_fs check_crypt
+
+- dracut_install cryptsetup rmdir readlink umount
++ inst_multiple cryptsetup rmdir readlink umount
+ inst_script "$moddir"/cryptroot-ask.sh /sbin/cryptroot-ask
+ inst_script "$moddir"/probe-keydev.sh /sbin/probe-keydev
+ inst_hook cmdline 10 "$moddir/parse-keydev.sh"
+@@ -78,7 +78,7 @@ install() {
+
+ inst_simple "$moddir/crypt-lib.sh" "/lib/dracut-crypt-lib.sh"
+
+- dracut_install -o \
++ inst_multiple -o \
+ $systemdutildir/system-generators/systemd-cryptsetup-generator \
+ $systemdutildir/system-generators/systemd-cryptsetup-generator \
+ $systemdutildir/systemd-cryptsetup \
+diff --git a/modules.d/90dm/module-setup.sh b/modules.d/90dm/module-setup.sh
+index 5576b02..fa38e85 100755
+--- a/modules.d/90dm/module-setup.sh
++++ b/modules.d/90dm/module-setup.sh
+@@ -20,8 +20,8 @@ install() {
+ modinfo -k $kernel dm_mod >/dev/null 2>&1 && \
+ inst_hook pre-udev 30 "$moddir/dm-pre-udev.sh"
+
+- dracut_install dmsetup
+- dracut_install -o dmeventd
++ inst_multiple dmsetup
++ inst_multiple -o dmeventd
+
+ inst_libdir_file "libdevmapper-event.so*"
+
+diff --git a/modules.d/90dmraid/module-setup.sh b/modules.d/90dmraid/module-setup.sh
+index 76daa4a..cea7bd8 100755
+--- a/modules.d/90dmraid/module-setup.sh
++++ b/modules.d/90dmraid/module-setup.sh
+@@ -57,8 +57,8 @@ install() {
+
+ for_each_host_dev_fs check_dmraid
+
+- dracut_install dmraid
+- dracut_install -o kpartx
++ inst_multiple dmraid
++ inst_multiple -o kpartx
+ inst $(command -v partx) /sbin/partx
+
+ inst "$moddir/dmraid.sh" /sbin/dmraid_scan
+diff --git a/modules.d/90dmsquash-live/module-setup.sh b/modules.d/90dmsquash-live/module-setup.sh
+index 5b283d1..c6d1f9d 100755
+--- a/modules.d/90dmsquash-live/module-setup.sh
++++ b/modules.d/90dmsquash-live/module-setup.sh
+@@ -20,8 +20,8 @@ installkernel() {
+ }
+
+ install() {
+- dracut_install umount dmsetup blkid dd losetup grep blockdev
+- dracut_install -o checkisomd5
++ inst_multiple umount dmsetup blkid dd losetup grep blockdev
++ inst_multiple -o checkisomd5
+ inst_hook cmdline 30 "$moddir/parse-dmsquash-live.sh"
+ inst_hook cmdline 31 "$moddir/parse-iso-scan.sh"
+ inst_hook pre-udev 30 "$moddir/dmsquash-live-genrules.sh"
+diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh
+index 0e7a9a1..e7e2ca0 100755
+--- a/modules.d/90kernel-modules/module-setup.sh
++++ b/modules.d/90kernel-modules/module-setup.sh
+@@ -74,8 +74,8 @@ installkernel() {
+ }
+
+ install() {
+- dracut_install -o /lib/modprobe.d/*.conf
+- [[ $hostonly ]] && dracut_install -o /etc/modprobe.d/*.conf /etc/modprobe.conf
++ inst_multiple -o /lib/modprobe.d/*.conf
++ [[ $hostonly ]] && inst_multiple -o /etc/modprobe.d/*.conf /etc/modprobe.conf
+ if ! dracut_module_included "systemd"; then
+ inst_hook cmdline 01 "$moddir/parse-kernel.sh"
+ fi
+diff --git a/modules.d/90lvm/module-setup.sh b/modules.d/90lvm/module-setup.sh
+index d714c13..00eb66d 100755
+--- a/modules.d/90lvm/module-setup.sh
++++ b/modules.d/90lvm/module-setup.sh
+@@ -74,7 +74,7 @@ install() {
+ inst_libdir_file "libdevmapper-event-lvm*.so"
+
+ if [[ $_needthin ]]; then
+- dracut_install -o thin_dump thin_restore thin_check
++ inst_multiple -o thin_dump thin_restore thin_check
+ fi
+
+ }
+diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh
+index 8d63028..b44ce50 100755
+--- a/modules.d/90mdraid/module-setup.sh
++++ b/modules.d/90mdraid/module-setup.sh
+@@ -27,8 +27,8 @@ installkernel() {
+ }
+
+ install() {
+- dracut_install cat
+- dracut_install -o mdmon
++ inst_multiple cat
++ inst_multiple -o mdmon
+ inst $(command -v partx) /sbin/partx
+ inst $(command -v mdadm) /sbin/mdadm
+
+diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh
+index 28fc48d..6cdc511 100755
+--- a/modules.d/90multipath/module-setup.sh
++++ b/modules.d/90multipath/module-setup.sh
+@@ -69,7 +69,7 @@ installkernel() {
+
+ install() {
+ local _f
+- dracut_install -o \
++ inst_multiple -o \
+ dmsetup \
+ kpartx \
+ mpath_wait \
+@@ -87,7 +87,7 @@ install() {
+ inst_libdir_file "libmultipath*" "multipath/*"
+
+ if dracut_module_included "systemd"; then
+- dracut_install \
++ inst_multiple \
+ $systemdsystemunitdir/multipathd.service
+ mkdir -p "${initdir}${systemdsystemconfdir}/sysinit.target.wants"
+ ln -rfs "${initdir}${systemdsystemunitdir}/multipathd.service" "${initdir}${systemdsystemconfdir}/sysinit.target.wants/multipathd.service"
+diff --git a/modules.d/91crypt-gpg/module-setup.sh b/modules.d/91crypt-gpg/module-setup.sh
+index 3adb3a6..43a5a00 100755
+--- a/modules.d/91crypt-gpg/module-setup.sh
++++ b/modules.d/91crypt-gpg/module-setup.sh
+@@ -14,6 +14,6 @@ depends() {
+ }
+
+ install() {
+- dracut_install gpg
++ inst_multiple gpg
+ inst "$moddir/crypt-gpg-lib.sh" "/lib/dracut-crypt-gpg-lib.sh"
+ }
+diff --git a/modules.d/91crypt-loop/module-setup.sh b/modules.d/91crypt-loop/module-setup.sh
+index 218d27a..c14fd45 100644
+--- a/modules.d/91crypt-loop/module-setup.sh
++++ b/modules.d/91crypt-loop/module-setup.sh
+@@ -13,7 +13,7 @@ installkernel() {
+ }
+
+ install() {
+- dracut_install losetup
++ inst_multiple losetup
+ inst "$moddir/crypt-loop-lib.sh" "/lib/dracut-crypt-loop-lib.sh"
+ dracut_need_initqueue
+ }
+diff --git a/modules.d/95cifs/module-setup.sh b/modules.d/95cifs/module-setup.sh
+index bf0eddf..c17b973 100755
+--- a/modules.d/95cifs/module-setup.sh
++++ b/modules.d/95cifs/module-setup.sh
+@@ -28,8 +28,8 @@ installkernel() {
+ install() {
+ local _i
+ local _nsslibs
+- dracut_install -o mount.cifs
+- dracut_install /etc/services /etc/nsswitch.conf /etc/protocols
++ inst_multiple -o mount.cifs
++ inst_multiple /etc/services /etc/nsswitch.conf /etc/protocols
+
+ inst_libdir_file 'libcap-ng.so*'
+
+diff --git a/modules.d/95dasd/module-setup.sh b/modules.d/95dasd/module-setup.sh
+index 62bf18c..3b8396d 100755
+--- a/modules.d/95dasd/module-setup.sh
++++ b/modules.d/95dasd/module-setup.sh
+@@ -18,7 +18,7 @@ installkernel() {
+
+ install() {
+ inst_hook cmdline 30 "$moddir/parse-dasd.sh"
+- dracut_install dasdinfo dasdconf.sh normalize_dasd_arg
++ inst_multiple dasdinfo dasdconf.sh normalize_dasd_arg
+ if [[ $hostonly ]]; then
+ inst /etc/dasd.conf
+ fi
+diff --git a/modules.d/95dasd_mod/module-setup.sh b/modules.d/95dasd_mod/module-setup.sh
+index 2c98fff..9c9eeea 100755
+--- a/modules.d/95dasd_mod/module-setup.sh
++++ b/modules.d/95dasd_mod/module-setup.sh
+@@ -19,6 +19,6 @@ installkernel() {
+
+ install() {
+ inst_hook cmdline 31 "$moddir/parse-dasd-mod.sh"
+- dracut_install dasd_cio_free grep sed seq
++ inst_multiple dasd_cio_free grep sed seq
+ }
+
+diff --git a/modules.d/95debug/module-setup.sh b/modules.d/95debug/module-setup.sh
+index f8be7a5..1a554c6 100755
+--- a/modules.d/95debug/module-setup.sh
++++ b/modules.d/95debug/module-setup.sh
+@@ -12,7 +12,7 @@ depends() {
+ }
+
+ install() {
+- dracut_install -o ps grep more cat rm strace free showmount \
++ inst_multiple -o ps grep more cat rm strace free showmount \
+ ping netstat rpcinfo vi scp ping6 ssh \
+ fsck fsck.ext2 fsck.ext4 fsck.ext3 fsck.ext4dev fsck.vfat e2fsck
+
+diff --git a/modules.d/95fcoe/module-setup.sh b/modules.d/95fcoe/module-setup.sh
+index 227035f..d3c58cc 100755
+--- a/modules.d/95fcoe/module-setup.sh
++++ b/modules.d/95fcoe/module-setup.sh
+@@ -25,7 +25,7 @@ installkernel() {
+ }
+
+ install() {
+- dracut_install ip dcbtool fipvlan lldpad readlink
++ inst_multiple ip dcbtool fipvlan lldpad readlink
+
+ mkdir -m 0755 -p "$initdir/var/lib/lldpad"
+
+diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh
+index a9afefd..3f817ec 100755
+--- a/modules.d/95iscsi/module-setup.sh
++++ b/modules.d/95iscsi/module-setup.sh
+@@ -75,8 +75,8 @@ installkernel() {
+ }
+
+ install() {
+- dracut_install umount iscsistart hostname iscsi-iname
+- dracut_install -o iscsiuio
++ inst_multiple umount iscsistart hostname iscsi-iname
++ inst_multiple -o iscsiuio
+ inst_hook cmdline 90 "$moddir/parse-iscsiroot.sh"
+ inst_hook cleanup 90 "$moddir/cleanup-iscsi.sh"
+ inst "$moddir/iscsiroot.sh" "/sbin/iscsiroot"
+diff --git a/modules.d/95nfs/module-setup.sh b/modules.d/95nfs/module-setup.sh
+index 6d4d412..75beb74 100755
+--- a/modules.d/95nfs/module-setup.sh
++++ b/modules.d/95nfs/module-setup.sh
+@@ -31,12 +31,12 @@ installkernel() {
+ install() {
+ local _i
+ local _nsslibs
+- dracut_install -o portmap rpcbind rpc.statd mount.nfs \
++ inst_multiple -o portmap rpcbind rpc.statd mount.nfs \
+ mount.nfs4 umount rpc.idmapd sed /etc/netconfig
+- dracut_install /etc/services /etc/nsswitch.conf /etc/rpc /etc/protocols /etc/idmapd.conf
++ inst_multiple /etc/services /etc/nsswitch.conf /etc/rpc /etc/protocols /etc/idmapd.conf
+
+ if [ -f /lib/modprobe.d/nfs.conf ]; then
+- dracut_install /lib/modprobe.d/nfs.conf
++ inst_multiple /lib/modprobe.d/nfs.conf
+ else
+ [ -d $initdir/etc/modprobe.d/ ] || mkdir $initdir/etc/modprobe.d
+ echo "alias nfs4 nfs" > $initdir/etc/modprobe.d/nfs.conf
+diff --git a/modules.d/95rootfs-block/module-setup.sh b/modules.d/95rootfs-block/module-setup.sh
+index 6167beb..d2e1019 100755
+--- a/modules.d/95rootfs-block/module-setup.sh
++++ b/modules.d/95rootfs-block/module-setup.sh
+@@ -30,8 +30,8 @@ depends() {
+ }
+
+ install() {
+- dracut_install umount
+- dracut_install tr
++ inst_multiple umount
++ inst_multiple tr
+ if ! dracut_module_included "systemd"; then
+ inst_hook cmdline 95 "$moddir/parse-block.sh"
+ inst_hook pre-udev 30 "$moddir/block-genrules.sh"
+diff --git a/modules.d/95ssh-client/module-setup.sh b/modules.d/95ssh-client/module-setup.sh
+index 536c8d0..66e5307 100755
+--- a/modules.d/95ssh-client/module-setup.sh
++++ b/modules.d/95ssh-client/module-setup.sh
+@@ -47,7 +47,7 @@ inst_sshenv()
+ }
+
+ install() {
+- dracut_install ssh scp
++ inst_multiple ssh scp
+ inst_sshenv
+ }
+
+diff --git a/modules.d/95udev-rules/module-setup.sh b/modules.d/95udev-rules/module-setup.sh
+index 1e9a055..2cdcc1b 100755
+--- a/modules.d/95udev-rules/module-setup.sh
++++ b/modules.d/95udev-rules/module-setup.sh
+@@ -8,7 +8,7 @@ install() {
+ # Fixme: would be nice if we didn't have to know 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
+- dracut_install udevadm cat uname blkid \
++ inst_multiple udevadm cat uname blkid \
+ /etc/udev/udev.conf
+
+ [ -d ${initdir}/$systemdutildir ] || mkdir -p ${initdir}/$systemdutildir
+@@ -54,7 +54,7 @@ install() {
+ done
+ } >> "$initdir/etc/group"
+
+- dracut_install -o \
++ inst_multiple -o \
+ ${udevdir}/ata_id \
+ ${udevdir}/cdrom_id \
+ ${udevdir}/create_floppy_devices \
+@@ -72,7 +72,7 @@ install() {
+ ${udevdir}/pcmcia-socket-startup \
+ ${udevdir}/pcmcia-check-broken-cis
+
+- dracut_install -o /etc/pcmcia/config.opts
++ inst_multiple -o /etc/pcmcia/config.opts
+
+ [ -f /etc/arch-release ] && \
+ inst_script "$moddir/load-modules.sh" /lib/udev/load-modules.sh
+diff --git a/modules.d/95zfcp/module-setup.sh b/modules.d/95zfcp/module-setup.sh
+index fc8f422..9906695 100755
+--- a/modules.d/95zfcp/module-setup.sh
++++ b/modules.d/95zfcp/module-setup.sh
+@@ -22,7 +22,7 @@ installkernel() {
+
+ install() {
+ inst_hook cmdline 30 "$moddir/parse-zfcp.sh"
+- dracut_install zfcp_cio_free grep sed seq
++ inst_multiple zfcp_cio_free grep sed seq
+
+ inst_script /sbin/zfcpconf.sh
+ inst_rules 56-zfcp.rules
+diff --git a/modules.d/95znet/module-setup.sh b/modules.d/95znet/module-setup.sh
+index 406d139..16f8493 100755
+--- a/modules.d/95znet/module-setup.sh
++++ b/modules.d/95znet/module-setup.sh
+@@ -20,6 +20,6 @@ installkernel() {
+ install() {
+ inst_hook cmdline 30 "$moddir/parse-ccw.sh"
+ inst_rules 81-ccw.rules
+- dracut_install znet_cio_free grep sed seq readlink /lib/udev/ccw_init
++ inst_multiple znet_cio_free grep sed seq readlink /lib/udev/ccw_init
+ }
+
+diff --git a/modules.d/97biosdevname/module-setup.sh b/modules.d/97biosdevname/module-setup.sh
+index 4d492a9..4a0b4f4 100755
+--- a/modules.d/97biosdevname/module-setup.sh
++++ b/modules.d/97biosdevname/module-setup.sh
+@@ -13,7 +13,7 @@ depends() {
+ }
+
+ install() {
+- dracut_install biosdevname
++ inst_multiple biosdevname
+ inst_rules 71-biosdevname.rules
+ }
+
+diff --git a/modules.d/97masterkey/module-setup.sh b/modules.d/97masterkey/module-setup.sh
+index fe6d5f4..a94c4f5 100755
+--- a/modules.d/97masterkey/module-setup.sh
++++ b/modules.d/97masterkey/module-setup.sh
+@@ -19,6 +19,6 @@ installkernel() {
+ }
+
+ install() {
+- dracut_install keyctl uname
++ inst_multiple keyctl uname
+ inst_hook pre-pivot 60 "$moddir/masterkey.sh"
+ }
+diff --git a/modules.d/98selinux/module-setup.sh b/modules.d/98selinux/module-setup.sh
+index 78e8cf8..4d5147b 100755
+--- a/modules.d/98selinux/module-setup.sh
++++ b/modules.d/98selinux/module-setup.sh
+@@ -12,6 +12,6 @@ depends() {
+
+ install() {
+ inst_hook pre-pivot 50 "$moddir/selinux-loadpolicy.sh"
+- dracut_install setenforce
++ inst_multiple setenforce
+ }
+
+diff --git a/modules.d/98syslog/module-setup.sh b/modules.d/98syslog/module-setup.sh
+index f73c2c8..daa9021 100755
+--- a/modules.d/98syslog/module-setup.sh
++++ b/modules.d/98syslog/module-setup.sh
+@@ -26,7 +26,7 @@ install() {
+ "is selected to be installed. Please check."
+ fi
+ if [ -n "$_installs" ]; then
+- dracut_install cat $_installs
++ inst_multiple cat $_installs
+ inst_hook cmdline 90 "$moddir/parse-syslog-opts.sh"
+ inst_hook pre-udev 61 "$moddir/syslog-genrules.sh"
+ inst_hook cleanup 99 "$moddir/syslog-cleanup.sh"
+diff --git a/modules.d/98systemd/module-setup.sh b/modules.d/98systemd/module-setup.sh
+index 8775fd2..a5ac2a5 100755
+--- a/modules.d/98systemd/module-setup.sh
++++ b/modules.d/98systemd/module-setup.sh
+@@ -25,7 +25,7 @@ install() {
+ exit 1
+ fi
+
+- dracut_install -o \
++ inst_multiple -o \
+ $systemdutildir/systemd \
+ $systemdutildir/systemd-cgroups-agent \
+ $systemdutildir/systemd-shutdown \
+@@ -111,7 +111,7 @@ install() {
+ \
+ journalctl systemctl echo swapoff systemd-cgls systemd-tmpfiles
+
+- dracut_install -o \
++ inst_multiple -o \
+ /usr/lib/modules-load.d/*.conf \
+ /usr/lib/sysctl.d/*.conf
+
+@@ -136,7 +136,7 @@ install() {
+ [[ $_mods ]] && instmods $_mods
+
+ if [[ $hostonly ]]; then
+- dracut_install -o \
++ inst_multiple -o \
+ /etc/systemd/journald.conf \
+ /etc/systemd/system.conf \
+ /etc/hostname \
+@@ -156,7 +156,7 @@ install() {
+ fi
+
+ # install adm user/group for journald
+- dracut_install nologin
++ inst_multiple nologin
+ egrep '^systemd-journal:' "$initdir/etc/passwd" 2>/dev/null >> "$initdir/etc/passwd"
+ egrep '^systemd-journal:' /etc/group >> "$initdir/etc/group"
+
+diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh
+index 842dde6..f217ccb 100755
+--- a/modules.d/99base/module-setup.sh
++++ b/modules.d/99base/module-setup.sh
+@@ -14,14 +14,14 @@ depends() {
+ install() {
+ local _d
+
+- dracut_install mount mknod mkdir sleep chroot \
++ inst_multiple mount mknod mkdir sleep chroot \
+ sed ls flock cp mv dmesg rm ln rmmod mkfifo umount readlink setsid
+ inst $(command -v modprobe) /sbin/modprobe
+
+- dracut_install -o findmnt less kmod
++ inst_multiple -o findmnt less kmod
+
+ if [ ! -e "${initdir}/bin/sh" ]; then
+- dracut_install bash
++ inst_multiple bash
+ (ln -s bash "${initdir}/bin/sh" || :)
+ fi
+
+@@ -41,7 +41,7 @@ install() {
+
+ mkdir -p ${initdir}/tmp
+
+- dracut_install switch_root || dfatal "Failed to install switch_root"
++ inst_multiple switch_root || dfatal "Failed to install switch_root"
+
+ inst_simple "$moddir/dracut-lib.sh" "/lib/dracut-lib.sh"
+
+@@ -52,7 +52,7 @@ install() {
+ mkdir -p "${initdir}/var"
+
+ if ! dracut_module_included "systemd"; then
+- dracut_install -o $systemdutildir/systemd-timestamp
++ inst_multiple -o $systemdutildir/systemd-timestamp
+ fi
+
+ if [[ $realinitpath ]]; then
+diff --git a/modules.d/99fs-lib/module-setup.sh b/modules.d/99fs-lib/module-setup.sh
+index b04b2cb..9539f63 100755
+--- a/modules.d/99fs-lib/module-setup.sh
++++ b/modules.d/99fs-lib/module-setup.sh
+@@ -80,5 +80,5 @@ install() {
+ inst_simple /etc/e2fsck.conf
+ fi
+
+- dracut_install -o $_helpers
++ inst_multiple -o $_helpers
+ }
+diff --git a/modules.d/99img-lib/module-setup.sh b/modules.d/99img-lib/module-setup.sh
+index ebd0436..28bfc2a 100755
+--- a/modules.d/99img-lib/module-setup.sh
++++ b/modules.d/99img-lib/module-setup.sh
+@@ -13,9 +13,9 @@ depends() {
+ }
+
+ install() {
+- dracut_install tar gzip dd bash
++ inst_multiple tar gzip dd bash
+ # TODO: make this conditional on a cmdline flag / config option
+- dracut_install -o cpio xz bzip2
++ inst_multiple -o cpio xz bzip2
+ inst_simple "$moddir/img-lib.sh" "/lib/img-lib.sh"
+ }
+
+diff --git a/modules.d/99shutdown/module-setup.sh b/modules.d/99shutdown/module-setup.sh
+index fb0b7ad..5361936 100755
+--- a/modules.d/99shutdown/module-setup.sh
++++ b/modules.d/99shutdown/module-setup.sh
+@@ -13,8 +13,8 @@ depends() {
+
+ install() {
+ local _d
+- dracut_install umount poweroff reboot halt losetup
+- dracut_install -o kexec
++ inst_multiple umount poweroff reboot halt losetup
++ inst_multiple -o kexec
+ inst "$moddir/shutdown.sh" "$prefix/shutdown"
+ [ -e "${initdir}/lib" ] || mkdir -m 0755 -p ${initdir}/lib
+ mkdir -m 0755 -p ${initdir}/lib/dracut
+diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh
+index 161fcf3..f857fd4 100755
+--- a/test/TEST-01-BASIC/test.sh
++++ b/test/TEST-01-BASIC/test.sh
+@@ -30,19 +30,19 @@ test_setup() {
+ export initdir=$TESTDIR/overlay/source
+ mkdir -p $initdir
+ . $basedir/dracut-functions.sh
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient \
+ umount strace less setsid
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep
++ inst_multiple grep
+ inst_simple /etc/os-release
+ inst ./test-init.sh /sbin/init
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+ cp -a /etc/ld.so.conf* $initdir/etc
+ sudo ldconfig -r "$initdir"
+@@ -52,7 +52,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mkfs.ext3 poweroff cp umount sync
++ inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -81,7 +81,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+diff --git a/test/TEST-02-SYSTEMD/test.sh b/test/TEST-02-SYSTEMD/test.sh
+index 155982c..cc9da27 100755
+--- a/test/TEST-02-SYSTEMD/test.sh
++++ b/test/TEST-02-SYSTEMD/test.sh
+@@ -26,19 +26,19 @@ test_setup() {
+ export initdir=$TESTDIR/overlay/source
+ mkdir -p $initdir
+ . $basedir/dracut-functions.sh
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient \
+ umount strace less setsid
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep
++ inst_multiple grep
+ inst_simple /etc/os-release
+ inst ./test-init.sh /sbin/init
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+ cp -a /etc/ld.so.conf* $initdir/etc
+ sudo ldconfig -r "$initdir"
+@@ -48,7 +48,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mkfs.ext3 poweroff cp umount
++ inst_multiple sfdisk mkfs.ext3 poweroff cp umount
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -77,7 +77,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+diff --git a/test/TEST-03-USR-MOUNT/test.sh b/test/TEST-03-USR-MOUNT/test.sh
+index 246fc9a..b3d709e 100755
+--- a/test/TEST-03-USR-MOUNT/test.sh
++++ b/test/TEST-03-USR-MOUNT/test.sh
+@@ -57,20 +57,20 @@ test_setup() {
+ export initdir=$TESTDIR/overlay/source
+ mkdir -p $initdir
+ . $basedir/dracut-functions.sh
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient \
+ umount strace less setsid
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep
++ inst_multiple grep
+ inst_simple ./fstab /etc/fstab
+ inst_simple /etc/os-release
+ inst ./test-init.sh /sbin/init
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+ cp -a /etc/ld.so.conf* $initdir/etc
+ sudo ldconfig -r "$initdir"
+@@ -80,7 +80,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mkfs.btrfs btrfs poweroff cp umount sync
++ inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -116,7 +116,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+diff --git a/test/TEST-04-FULL-SYSTEMD/test.sh b/test/TEST-04-FULL-SYSTEMD/test.sh
+index 92c2f8d..d4998d8 100755
+--- a/test/TEST-04-FULL-SYSTEMD/test.sh
++++ b/test/TEST-04-FULL-SYSTEMD/test.sh
+@@ -70,17 +70,17 @@ test_setup() {
+ ln -sfn /run "$initdir/var/run"
+ ln -sfn /run/lock "$initdir/var/lock"
+
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient \
+ umount strace less setsid tree systemctl reset
+
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep
++ inst_multiple grep
+ inst_simple ./fstab /etc/fstab
+ rpm -ql systemd | xargs -r $DRACUT_INSTALL ${initdir+-D "$initdir"} -o -a -l
+ inst /lib/systemd/system/systemd-remount-fs.service
+@@ -89,13 +89,13 @@ test_setup() {
+ inst /etc/sysconfig/init
+ inst /lib/systemd/system/slices.target
+ inst /lib/systemd/system/system.slice
+- dracut_install -o /lib/systemd/system/dracut*
++ inst_multiple -o /lib/systemd/system/dracut*
+
+ # make a journal directory
+ mkdir -p $initdir/var/log/journal
+
+ # install some basic config files
+- dracut_install -o \
++ inst_multiple -o \
+ /etc/machine-id \
+ /etc/adjtime \
+ /etc/sysconfig/init \
+@@ -149,9 +149,9 @@ EOF
+ # EOF
+
+ # install basic tools needed
+- dracut_install sh bash setsid loadkeys setfont \
++ inst_multiple sh bash setsid loadkeys setfont \
+ login sushell sulogin gzip sleep echo mount umount
+- dracut_install modprobe
++ inst_multiple modprobe
+
+ # install libnss_files for login
+ inst_libdir_file "libnss_files*"
+@@ -164,7 +164,7 @@ EOF
+ /lib64/security \
+ /lib/security -xtype f \
+ | while read file; do
+- dracut_install -o $file
++ inst_multiple -o $file
+ done
+
+ # install dbus socket and service file
+@@ -185,7 +185,7 @@ EOF
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+
+ # softlink mtab
+ ln -fs /proc/self/mounts $initdir/etc/mtab
+@@ -194,11 +194,11 @@ EOF
+ egrep -ho '^Exec[^ ]*=[^ ]+' $initdir/lib/systemd/system/*.service \
+ | while read i; do
+ i=${i##Exec*=}; i=${i##-}
+- dracut_install -o $i
++ inst_multiple -o $i
+ done
+
+ # some helper tools for debugging
+- [[ $DEBUGTOOLS ]] && dracut_install $DEBUGTOOLS
++ [[ $DEBUGTOOLS ]] && inst_multiple $DEBUGTOOLS
+
+ # install ld.so.conf* and run ldconfig
+ cp -a /etc/ld.so.conf* $initdir/etc
+@@ -222,7 +222,7 @@ EOF
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mkfs.btrfs btrfs poweroff cp umount sync
++ inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -257,7 +257,7 @@ EOF
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+diff --git a/test/TEST-10-RAID/test.sh b/test/TEST-10-RAID/test.sh
+index b6af703..a2226cd 100755
+--- a/test/TEST-10-RAID/test.sh
++++ b/test/TEST-10-RAID/test.sh
+@@ -29,19 +29,19 @@ test_setup() {
+ export initdir=$TESTDIR/overlay/source
+ (mkdir -p "$initdir"; cd "$initdir"; mkdir -p dev sys proc etc var/run tmp run)
+ . $basedir/dracut-functions.sh
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst_simple /etc/os-release
+ inst ./test-init.sh /sbin/init
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep
+- dracut_install -o /lib/systemd/systemd-shutdown
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ inst_multiple grep
++ inst_multiple -o /lib/systemd/systemd-shutdown
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ cp -a /etc/ld.so.conf* $initdir/etc
+ sudo ldconfig -r "$initdir"
+ )
+@@ -50,7 +50,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mke2fs poweroff cp umount
++ inst_multiple sfdisk mke2fs poweroff cp umount
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -78,7 +78,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst ./cryptroot-ask.sh /sbin/cryptroot-ask
+ mkdir -p $initdir/etc
+diff --git a/test/TEST-11-LVM/test.sh b/test/TEST-11-LVM/test.sh
+index 47761b3..6f2461c 100755
+--- a/test/TEST-11-LVM/test.sh
++++ b/test/TEST-11-LVM/test.sh
+@@ -25,18 +25,18 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay/source
+ . $basedir/dracut-functions.sh
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep
++ inst_multiple grep
+ inst_simple /etc/os-release
+ inst ./test-init.sh /sbin/init
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+ cp -a /etc/ld.so.conf* $initdir/etc
+ mkdir $initdir/run
+@@ -47,7 +47,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mke2fs poweroff cp umount
++ inst_multiple sfdisk mke2fs poweroff cp umount
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -70,7 +70,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+diff --git a/test/TEST-12-RAID-DEG/test.sh b/test/TEST-12-RAID-DEG/test.sh
+index 3eabbd5..6ddff3f 100755
+--- a/test/TEST-12-RAID-DEG/test.sh
++++ b/test/TEST-12-RAID-DEG/test.sh
+@@ -66,18 +66,18 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay/source
+ . $basedir/dracut-functions.sh
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep
++ inst_multiple grep
+ inst_simple /etc/os-release
+ inst ./test-init.sh /sbin/init
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+ cp -a /etc/ld.so.conf* $initdir/etc
+ sudo ldconfig -r "$initdir"
+@@ -87,7 +87,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mke2fs poweroff cp umount dd grep
++ inst_multiple sfdisk mke2fs poweroff cp umount dd grep
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -120,7 +120,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ inst ./cryptroot-ask.sh /sbin/cryptroot-ask
+diff --git a/test/TEST-13-ENC-RAID-LVM/test.sh b/test/TEST-13-ENC-RAID-LVM/test.sh
+index d069293..5102142 100755
+--- a/test/TEST-13-ENC-RAID-LVM/test.sh
++++ b/test/TEST-13-ENC-RAID-LVM/test.sh
+@@ -63,18 +63,18 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay/source
+ . $basedir/dracut-functions.sh
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep
++ inst_multiple grep
+ inst_simple /etc/os-release
+ inst ./test-init.sh /sbin/init
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+ cp -a /etc/ld.so.conf* $initdir/etc
+ sudo ldconfig -r "$initdir"
+@@ -84,7 +84,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mke2fs poweroff cp umount grep
++ inst_multiple sfdisk mke2fs poweroff cp umount grep
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -114,7 +114,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ inst ./cryptroot-ask.sh /sbin/cryptroot-ask
+diff --git a/test/TEST-15-BTRFSRAID/test.sh b/test/TEST-15-BTRFSRAID/test.sh
+index 6f66875..e6ff351 100755
+--- a/test/TEST-15-BTRFSRAID/test.sh
++++ b/test/TEST-15-BTRFSRAID/test.sh
+@@ -27,17 +27,17 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay/source
+ . $basedir/dracut-functions.sh
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep
++ inst_multiple grep
+ inst ./test-init.sh /sbin/init
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+ cp -a /etc/ld.so.conf* $initdir/etc
+ sudo ldconfig -r "$initdir"
+@@ -47,7 +47,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mkfs.btrfs poweroff cp umount
++ inst_multiple sfdisk mkfs.btrfs poweroff cp umount
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -77,7 +77,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+diff --git a/test/TEST-16-DMSQUASH/test.sh b/test/TEST-16-DMSQUASH/test.sh
+index e9d9655..252e845 100755
+--- a/test/TEST-16-DMSQUASH/test.sh
++++ b/test/TEST-16-DMSQUASH/test.sh
+@@ -31,7 +31,7 @@ test_setup() {
+ (
+ export initdir="$TESTDIR"/overlay
+ . "$basedir"/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+@@ -49,16 +49,16 @@ test_setup() {
+ (
+ export initdir="$TESTDIR"/root-source
+ . "$basedir"/dracut-functions.sh
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient \
+ umount strace less
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [[ -f ${_terminfodir}/l/linux ]] && break
+ done
+- dracut_install -o "${_terminfodir}"/l/linux
++ inst_multiple -o "${_terminfodir}"/l/linux
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep syslinux isohybrid
++ inst_multiple grep syslinux isohybrid
+ for f in /usr/share/syslinux/*; do
+ inst_simple "$f"
+ done
+@@ -66,7 +66,7 @@ test_setup() {
+ inst ./test-init.sh /sbin/init
+ inst "$TESTDIR"/initramfs.testing "/boot/initramfs-$KVERSION.img"
+ inst /boot/vmlinuz-"$KVERSION"
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ (cd "$initdir"; mkdir -p -- dev sys proc etc var/run tmp )
+ cp -a -- /etc/ld.so.conf* "$initdir"/etc
+ sudo ldconfig -r -- "$initdir"
+diff --git a/test/TEST-20-NFS/test.sh b/test/TEST-20-NFS/test.sh
+index 2c8ee18..bd3cd3f 100755
+--- a/test/TEST-20-NFS/test.sh
++++ b/test/TEST-20-NFS/test.sh
+@@ -235,18 +235,18 @@ test_setup() {
+ [[ $srcmods/$_f ]] && inst_simple "$srcmods/$_f" "/lib/modules/$kernel/$_f"
+ done
+
+- dracut_install sh ls shutdown poweroff stty cat ps ln ip \
++ inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
+ dmesg mkdir cp ping exportfs \
+ modprobe rpc.nfsd rpc.mountd showmount tcpdump \
+ /etc/services sleep mount chmod
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
+- type -P portmap >/dev/null && dracut_install portmap
+- type -P rpcbind >/dev/null && dracut_install rpcbind
+- [ -f /etc/netconfig ] && dracut_install /etc/netconfig
+- type -P dhcpd >/dev/null && dracut_install dhcpd
++ inst_multiple -o ${_terminfodir}/l/linux
++ type -P portmap >/dev/null && inst_multiple portmap
++ type -P rpcbind >/dev/null && inst_multiple rpcbind
++ [ -f /etc/netconfig ] && inst_multiple /etc/netconfig
++ type -P dhcpd >/dev/null && inst_multiple dhcpd
+ [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
+ instmods nfsd sunrpc ipv6 lockd af_packet
+ inst ./server-init.sh /sbin/init
+@@ -254,8 +254,8 @@ test_setup() {
+ inst ./hosts /etc/hosts
+ inst ./exports /etc/exports
+ inst ./dhcpd.conf /etc/dhcpd.conf
+- dracut_install /etc/nsswitch.conf /etc/rpc /etc/protocols
+- dracut_install rpc.idmapd /etc/idmapd.conf
++ inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols
++ inst_multiple rpc.idmapd /etc/idmapd.conf
+
+ inst_libdir_file 'libnfsidmap_nsswitch.so*'
+ inst_libdir_file 'libnfsidmap/*.so*'
+@@ -290,12 +290,12 @@ test_setup() {
+ export initdir=$TESTDIR/mnt/nfs/client
+ . $basedir/dracut-functions.sh
+
+- dracut_install sh shutdown poweroff stty cat ps ln ip \
++ inst_multiple sh shutdown poweroff stty cat ps ln ip \
+ mount dmesg mkdir cp ping grep
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst ./client-init.sh /sbin/init
+ inst_simple /etc/os-release
+ (
+@@ -334,7 +334,7 @@ test_setup() {
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+ mkdir $TESTDIR/overlay
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh
+index 29c8d0c..4c29956 100755
+--- a/test/TEST-30-ISCSI/test.sh
++++ b/test/TEST-30-ISCSI/test.sh
+@@ -105,12 +105,12 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay/source
+ . $basedir/dracut-functions.sh
+- dracut_install sh shutdown poweroff stty cat ps ln ip \
++ inst_multiple sh shutdown poweroff stty cat ps ln ip \
+ mount dmesg mkdir cp ping grep
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst_simple /etc/os-release
+ inst ./client-init.sh /sbin/init
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+@@ -122,7 +122,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mkfs.ext3 poweroff cp umount
++ inst_multiple sfdisk mkfs.ext3 poweroff cp umount
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+@@ -158,7 +158,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+@@ -183,25 +183,25 @@ test_setup() {
+ mkdir -p dev sys proc etc var/run tmp var/lib/dhcpd /etc/iscsi
+ )
+ inst /etc/passwd /etc/passwd
+- dracut_install sh ls shutdown poweroff stty cat ps ln ip \
++ inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
+ dmesg mkdir cp ping \
+ modprobe tcpdump \
+ /etc/services sleep mount chmod
+- dracut_install /usr/sbin/iscsi-target
++ inst_multiple /usr/sbin/iscsi-target
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ instmods iscsi_tcp crc32c ipv6
+ inst ./targets /etc/iscsi/targets
+- [ -f /etc/netconfig ] && dracut_install /etc/netconfig
+- type -P dhcpd >/dev/null && dracut_install dhcpd
++ [ -f /etc/netconfig ] && inst_multiple /etc/netconfig
++ type -P dhcpd >/dev/null && inst_multiple dhcpd
+ [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
+ inst_simple /etc/os-release
+ inst ./server-init.sh /sbin/init
+ inst ./hosts /etc/hosts
+ inst ./dhcpd.conf /etc/dhcpd.conf
+- dracut_install /etc/nsswitch.conf /etc/rpc /etc/protocols
++ inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols
+ inst /etc/group /etc/group
+
+ cp -a /etc/ld.so.conf* $initdir/etc
+diff --git a/test/TEST-40-NBD/test.sh b/test/TEST-40-NBD/test.sh
+index 124682a..7cf64b1 100755
+--- a/test/TEST-40-NBD/test.sh
++++ b/test/TEST-40-NBD/test.sh
+@@ -198,15 +198,15 @@ make_encrypted_root() {
+ . $basedir/dracut-functions.sh
+ mkdir -p "$initdir"
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \
+ mount dmesg mkdir cp ping
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst ./client-init.sh /sbin/init
+ inst_simple /etc/os-release
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ cp -a /etc/ld.so.conf* $initdir/etc
+ sudo ldconfig -r "$initdir"
+ )
+@@ -215,7 +215,7 @@ make_encrypted_root() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install mke2fs poweroff cp umount tune2fs
++ inst_multiple mke2fs poweroff cp umount tune2fs
+ inst_hook emergency 000 ./hard-off.sh
+ inst_hook initqueue 01 ./create-root.sh
+ inst_hook initqueue/finished 01 ./finished-false.sh
+@@ -256,12 +256,12 @@ make_client_root() {
+ . $basedir/dracut-functions.sh
+ mkdir -p "$initdir"
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+- dracut_install sh ls shutdown poweroff stty cat ps ln ip \
++ inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
+ dmesg mkdir cp ping
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst ./client-init.sh /sbin/init
+ inst_simple /etc/os-release
+ inst /etc/nsswitch.conf /etc/nsswitch.conf
+@@ -294,15 +294,15 @@ make_server_root() {
+ cd "$initdir";
+ mkdir -p dev sys proc etc var/run var/lib/dhcpd tmp
+ )
+- dracut_install sh ls shutdown poweroff stty cat ps ln ip \
++ inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
+ dmesg mkdir cp ping grep \
+ sleep nbd-server chmod
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ instmods af_packet
+- type -P dhcpd >/dev/null && dracut_install dhcpd
++ type -P dhcpd >/dev/null && inst_multiple dhcpd
+ [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
+ inst ./server-init.sh /sbin/init
+ inst_simple /etc/os-release
+@@ -336,7 +336,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ inst ./cryptroot-ask.sh /sbin/cryptroot-ask
+diff --git a/test/TEST-50-MULTINIC/test.sh b/test/TEST-50-MULTINIC/test.sh
+index 6e991d3..b616e6b 100755
+--- a/test/TEST-50-MULTINIC/test.sh
++++ b/test/TEST-50-MULTINIC/test.sh
+@@ -156,18 +156,18 @@ test_setup() {
+ [[ $srcmods/$_f ]] && inst_simple "$srcmods/$_f" "/lib/modules/$kernel/$_f"
+ done
+
+- dracut_install sh ls shutdown poweroff stty cat ps ln ip \
++ inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
+ dmesg mkdir cp ping exportfs \
+ modprobe rpc.nfsd rpc.mountd showmount tcpdump \
+ /etc/services sleep mount chmod
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f "${_terminfodir}"/l/linux ] && break
+ done
+- dracut_install -o "${_terminfodir}"/l/linux
+- type -P portmap >/dev/null && dracut_install portmap
+- type -P rpcbind >/dev/null && dracut_install rpcbind
+- [ -f /etc/netconfig ] && dracut_install /etc/netconfig
+- type -P dhcpd >/dev/null && dracut_install dhcpd
++ inst_multiple -o "${_terminfodir}"/l/linux
++ type -P portmap >/dev/null && inst_multiple portmap
++ type -P rpcbind >/dev/null && inst_multiple rpcbind
++ [ -f /etc/netconfig ] && inst_multiple /etc/netconfig
++ type -P dhcpd >/dev/null && inst_multiple dhcpd
+ [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
+ instmods nfsd sunrpc ipv6 lockd af_packet
+ inst_simple /etc/os-release
+@@ -175,9 +175,9 @@ test_setup() {
+ inst ./hosts /etc/hosts
+ inst ./exports /etc/exports
+ inst ./dhcpd.conf /etc/dhcpd.conf
+- dracut_install /etc/nsswitch.conf /etc/rpc /etc/protocols
++ inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols
+
+- dracut_install rpc.idmapd /etc/idmapd.conf
++ inst_multiple rpc.idmapd /etc/idmapd.conf
+
+ inst_libdir_file 'libnfsidmap_nsswitch.so*'
+ inst_libdir_file 'libnfsidmap/*.so*'
+@@ -203,12 +203,12 @@ test_setup() {
+ (
+ export initdir="$TESTDIR"/mnt/nfs/client
+ . "$basedir"/dracut-functions.sh
+- dracut_install sh shutdown poweroff stty cat ps ln ip \
++ inst_multiple sh shutdown poweroff stty cat ps ln ip \
+ mount dmesg mkdir cp ping grep ls
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [[ -f ${_terminfodir}/l/linux ]] && break
+ done
+- dracut_install -o "${_terminfodir}"/l/linux
++ inst_multiple -o "${_terminfodir}"/l/linux
+ inst_simple /etc/os-release
+ inst ./client-init.sh /sbin/init
+ (
+@@ -220,7 +220,7 @@ test_setup() {
+ inst /etc/passwd /etc/passwd
+ inst /etc/group /etc/group
+
+- dracut_install rpc.idmapd /etc/idmapd.conf
++ inst_multiple rpc.idmapd /etc/idmapd.conf
+ inst_libdir_file 'libnfsidmap_nsswitch.so*'
+ inst_libdir_file 'libnfsidmap/*.so*'
+ inst_libdir_file 'libnfsidmap*.so*'
+@@ -243,7 +243,7 @@ test_setup() {
+ (
+ export initdir="$TESTDIR"/overlay
+ . "$basedir"/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+diff --git a/test/old.TEST-14-IMSM/test.sh b/test/old.TEST-14-IMSM/test.sh
+index fbb459d..434283b 100755
+--- a/test/old.TEST-14-IMSM/test.sh
++++ b/test/old.TEST-14-IMSM/test.sh
+@@ -59,17 +59,17 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay/source
+ . $basedir/dracut-functions.sh
+- dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \
+ mount dmesg ifconfig dhclient mkdir cp ping dhclient
+ for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+ [ -f ${_terminfodir}/l/linux ] && break
+ done
+- dracut_install -o ${_terminfodir}/l/linux
++ inst_multiple -o ${_terminfodir}/l/linux
+ inst "$basedir/modules.d/40network/dhclient-script.sh" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup.sh" "/sbin/ifup"
+- dracut_install grep
++ inst_multiple grep
+ inst ./test-init.sh /sbin/init
+- find_binary plymouth >/dev/null && dracut_install plymouth
++ find_binary plymouth >/dev/null && inst_multiple plymouth
+ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
+ cp -a /etc/ld.so.conf* $initdir/etc
+ mkdir $initdir/run
+@@ -80,7 +80,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install sfdisk mke2fs poweroff cp umount
++ inst_multiple sfdisk mke2fs poweroff cp umount
+ inst_hook initqueue 01 ./create-root.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
+@@ -106,7 +106,7 @@ test_setup() {
+ (
+ export initdir=$TESTDIR/overlay
+ . $basedir/dracut-functions.sh
+- dracut_install poweroff shutdown
++ inst_multiple poweroff shutdown
+ inst_hook emergency 000 ./hard-off.sh
+ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
+ )
diff --git a/0014-51-dracut-rescue.install-fixed-rescue-image-creation.patch b/0014-51-dracut-rescue.install-fixed-rescue-image-creation.patch
new file mode 100644
index 0000000..6d8c5a1
--- /dev/null
+++ b/0014-51-dracut-rescue.install-fixed-rescue-image-creation.patch
@@ -0,0 +1,31 @@
+From 8652d5493d139105620ab82f34334f8acae13f13 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 6 Aug 2013 11:01:45 +0200
+Subject: [PATCH] 51-dracut-rescue.install: fixed rescue image creation
+
+---
+ 51-dracut-rescue.install | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/51-dracut-rescue.install b/51-dracut-rescue.install
+index 39d01a7..b655bc2 100755
+--- a/51-dracut-rescue.install
++++ b/51-dracut-rescue.install
+@@ -6,6 +6,9 @@ export LANG=C
+
+ COMMAND="$1"
+ KERNEL_VERSION="$2"
++BOOT_DIR_ABS="${3%/*}/0-rescue"
++KERNEL_IMAGE="$4"
++
+
+ dropindirs_sort()
+ {
+@@ -50,7 +53,6 @@ fi
+
+ LOADER_ENTRY="/boot/loader/entries/${MACHINE_ID}-0-rescue.conf"
+ BOOT_DIR="/${MACHINE_ID}/0-rescue"
+-BOOT_DIR_ABS="/boot${BOOT_DIR}"
+
+ ret=0
+
diff --git a/0015-dracut.sh-do-not-strip-in-FIPS-mode.patch b/0015-dracut.sh-do-not-strip-in-FIPS-mode.patch
new file mode 100644
index 0000000..32c4ca3
--- /dev/null
+++ b/0015-dracut.sh-do-not-strip-in-FIPS-mode.patch
@@ -0,0 +1,43 @@
+From 5ae33613ab3145db12f21bca491d97832160cc1a Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 6 Aug 2013 11:43:58 +0200
+Subject: [PATCH] dracut.sh: do not strip in FIPS mode
+
+---
+ dracut.sh | 22 ++++------------------
+ 1 file changed, 4 insertions(+), 18 deletions(-)
+
+diff --git a/dracut.sh b/dracut.sh
+index e119bd2..4ef71f3 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -1209,25 +1209,11 @@ if [[ $do_strip = yes ]] ; then
+ done
+ fi
+
+-if [[ $do_strip = yes ]] ; then
++if [[ $do_strip = yes ]] && ! [[ $DRACUT_FIPS_MODE ]]; then
+ dinfo "*** Stripping files ***"
+- if [[ $DRACUT_FIPS_MODE ]]; then
+- find "$initdir" -type f \
+- -executable -not -path '*/lib/modules/*.ko' -print0 \
+- | while read -r -d $'\0' f; do
+- if ! [[ -e "${f%/*}/.${f##*/}.hmac" ]] \
+- && ! [[ -e "/lib/hmaccalc/${f##*/}.hmac" ]] \
+- && ! [[ -e "/lib64/hmaccalc/${f##*/}.hmac" ]] \
+- && ! [[ -e "/lib/fipscheck/${f##*/}.hmac" ]] \
+- && ! [[ -e "/lib64/fipscheck/${f##*/}.hmac" ]]; then
+- printf "%s\000" "$f";
+- fi
+- done | xargs -r -0 strip -g 2>/dev/null
+- else
+- find "$initdir" -type f \
+- -executable -not -path '*/lib/modules/*.ko' -print0 \
+- | xargs -r -0 strip -g 2>/dev/null
+- fi
++ find "$initdir" -type f \
++ -executable -not -path '*/lib/modules/*.ko' -print0 \
++ | xargs -r -0 strip -g 2>/dev/null
+
+ # strip kernel modules, but do not touch signed modules
+ find "$initdir" -type f -path '*/lib/modules/*.ko' -print0 \
diff --git a/0016-dracut.sh-check-the-value-of-kver.patch b/0016-dracut.sh-check-the-value-of-kver.patch
new file mode 100644
index 0000000..208eb46
--- /dev/null
+++ b/0016-dracut.sh-check-the-value-of-kver.patch
@@ -0,0 +1,26 @@
+From aacdba2bdb3efddd7b3b9cdb149204d86f5020b0 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Tue, 6 Aug 2013 16:56:42 +0200
+Subject: [PATCH] dracut.sh: check the value of --kver
+
+https://bugzilla.redhat.com/show_bug.cgi?id=993327
+---
+ dracut.sh | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/dracut.sh b/dracut.sh
+index 4ef71f3..0b674ae 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -478,6 +478,11 @@ if [[ $regenerate_all == "yes" ]]; then
+ ((ret+=$?))
+ done
+ exit $ret
++elif [[ $kernel ]]; then
++ if ! [[ -d /lib/modules/$kernel ]] && [[ $no_kernel != yes ]]; then
++ printf -- "Kernel version $kernel has no modules in /lib/modules/$kernel\n" >&2
++ exit 1
++ fi
+ fi
+
+ if ! [[ $kernel ]]; then
diff --git a/0017-crypt-Fix-typo-etc-crypttab-not-etc-cryptab.patch b/0017-crypt-Fix-typo-etc-crypttab-not-etc-cryptab.patch
new file mode 100644
index 0000000..8074530
--- /dev/null
+++ b/0017-crypt-Fix-typo-etc-crypttab-not-etc-cryptab.patch
@@ -0,0 +1,24 @@
+From 7deba0428a23b3f410a7cf8cac7cf8355e4dc150 Mon Sep 17 00:00:00 2001
+From: James Lee <jlee@thestaticvoid.com>
+Date: Tue, 6 Aug 2013 11:25:58 -0400
+Subject: [PATCH] crypt: Fix typo--/etc/crypttab not /etc/cryptab
+
+1ae8b8a breaks the crypt module for those who use keyfiles due to a
+typo leading to the exclusion of /etc/crypttab from the initrd.
+---
+ modules.d/90crypt/module-setup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh
+index 975f115..68b5fbe 100755
+--- a/modules.d/90crypt/module-setup.sh
++++ b/modules.d/90crypt/module-setup.sh
+@@ -57,7 +57,7 @@ install() {
+ inst_hook cleanup 30 "$moddir/crypt-cleanup.sh"
+ fi
+
+- if [[ $hostonly ]] && [[ -f /etc/cryptab ]]; then
++ if [[ $hostonly ]] && [[ -f /etc/crypttab ]]; then
+ # filter /etc/crypttab for the devices we need
+ while read _mapper _dev _rest; do
+ [[ $_mapper = \#* ]] && continue
diff --git a/0018-network-net-lib.sh-fix-ibft-interface-configuration.patch b/0018-network-net-lib.sh-fix-ibft-interface-configuration.patch
new file mode 100644
index 0000000..fa20e3b
--- /dev/null
+++ b/0018-network-net-lib.sh-fix-ibft-interface-configuration.patch
@@ -0,0 +1,58 @@
+From 0b11ea71996a7b804afbc38d1d5461fb0f4ef882 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Wed, 7 Aug 2013 16:05:03 +0200
+Subject: [PATCH] network/net-lib.sh: fix ibft interface configuration
+
+also skip ibft$num names, which have been already given
+
+https://bugzilla.redhat.com/show_bug.cgi?id=989944
+---
+ modules.d/40network/net-lib.sh | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index 494960c..ca4b393 100644
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -172,13 +172,20 @@ save_netinfo() {
+ }
+
+ set_ifname() {
+- local name="$1" mac="$2" num=0 n=""
++ local name="$1" mac="$2" num=-1 n=""
+ # if it's already set, return the existing name
+ for n in $(getargs ifname=); do
+ strstr "$n" "$mac" && echo ${n%%:*} && return
+ done
+ # otherwise, pick a new name and use that
+- while [ -e /sys/class/net/$name$num ]; do num=$(($num+1)); done
++ while :; do
++ num=$(($num+1));
++ [ -e /sys/class/net/$name$num ] && continue
++ for n in $(getargs ifname=); do
++ [ "$name$num" = "${n%%:*}" ] && continue 2
++ done
++ break
++ done
+ echo "ifname=$name$num:$mac" >> /etc/cmdline.d/45-ifname.conf
+ echo "$name$num"
+ }
+@@ -205,6 +212,9 @@ ibft_to_cmdline() {
+ mac=$(read a < ${iface}/mac; echo $a)
+ [ -z "$mac" ] && continue
+ dev=$(set_ifname ibft $mac)
++
++ [ -e /tmp/net.${dev}.has_ibft_config ] && continue
++
+ [ -e ${iface}/dhcp ] && dhcp=$(read a < ${iface}/dhcp; echo $a)
+ if [ -e ${iface}/vlan ]; then
+ vlan=$(read a < ${iface}/vlan; echo $a)
+@@ -215,6 +225,8 @@ ibft_to_cmdline() {
+ echo "ip=$dev:dhcp"
+ elif [ -e ${iface}/ip-addr ]; then
+ [ -e ${iface}/ip-addr ] && ip=$(read a < ${iface}/ip-addr; echo $a)
++ # skip not assigned ip adresses
++ [ "$ip" = "0.0.0.0" ] && continue
+ [ -e ${iface}/gateway ] && gw=$(read a < ${iface}/gateway; echo $a)
+ [ -e ${iface}/subnet-mask ] && mask=$(read a < ${iface}/subnet-mask; echo $a)
+ [ -e ${iface}/hostname ] && hostname=$(read a < ${iface}/hostname; echo $a)
diff --git a/0019-iscsi-module-setup.sh-install-some-modules-regardles.patch b/0019-iscsi-module-setup.sh-install-some-modules-regardles.patch
new file mode 100644
index 0000000..dfae8d8
--- /dev/null
+++ b/0019-iscsi-module-setup.sh-install-some-modules-regardles.patch
@@ -0,0 +1,24 @@
+From 7929ec198fa693f07160518b6858e967fdd53f48 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 9 Aug 2013 10:33:27 +0200
+Subject: [PATCH] iscsi/module-setup.sh: install some modules regardless of
+ hostonly
+
+---
+ modules.d/95iscsi/module-setup.sh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh
+index 3f817ec..502e834 100755
+--- a/modules.d/95iscsi/module-setup.sh
++++ b/modules.d/95iscsi/module-setup.sh
+@@ -36,7 +36,8 @@ depends() {
+ installkernel() {
+ local _arch=$(uname -m)
+
+- instmods iscsi_tcp iscsi_ibft crc32c bnx2i iscsi_boot_sysfs qla4xxx cxgb3i cxgb4i be2iscsi
++ instmods bnx2i qla4xxx cxgb3i cxgb4i be2iscsi
++ hostonly="" instmods iscsi_tcp iscsi_ibft crc32c iscsi_boot_sysfs
+ iscsi_module_filter() {
+ local _funcs='iscsi_register_transport'
+ # subfunctions inherit following FDs
diff --git a/0020-multipath-need_shutdown-if-multipath-devices-exist.patch b/0020-multipath-need_shutdown-if-multipath-devices-exist.patch
new file mode 100644
index 0000000..f446e15
--- /dev/null
+++ b/0020-multipath-need_shutdown-if-multipath-devices-exist.patch
@@ -0,0 +1,41 @@
+From e84d115b93428bf93e82a2c808721aadc048b163 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald@redhat.com>
+Date: Fri, 9 Aug 2013 10:44:34 +0200
+Subject: [PATCH] multipath: need_shutdown if multipath devices exist
+
+https://bugzilla.redhat.com/show_bug.cgi?id=994913
+---
+ modules.d/90multipath/module-setup.sh | 3 +++
+ modules.d/90multipath/multipathd-needshutdown.sh | 9 +++++++++
+ 2 files changed, 12 insertions(+)
+ create mode 100755 modules.d/90multipath/multipathd-needshutdown.sh
+
+diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh
+index 6cdc511..feb58dc 100755
+--- a/modules.d/90multipath/module-setup.sh
++++ b/modules.d/90multipath/module-setup.sh
+@@ -95,6 +95,9 @@ install() {
+ inst_hook pre-trigger 02 "$moddir/multipathd.sh"
+ inst_hook cleanup 02 "$moddir/multipathd-stop.sh"
+ fi
++
++ inst_hook cleanup 80 "$moddir/multipathd-needshutdown.sh"
++
+ inst_rules 40-multipath.rules 62-multipath.rules 65-multipath.rules 66-kpartx.rules
+ }
+
+diff --git a/modules.d/90multipath/multipathd-needshutdown.sh b/modules.d/90multipath/multipathd-needshutdown.sh
+new file mode 100755
+index 0000000..1565d4d
+--- /dev/null
++++ b/modules.d/90multipath/multipathd-needshutdown.sh
+@@ -0,0 +1,9 @@
++#!/bin/sh
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=8 sw=4 sts=4 et filetype=sh
++
++for i in /dev/mapper/mpath*; do
++ [ -b "$i" ] || continue
++ need_shutdown
++ break
++done
diff --git a/0021-omit-drivers-fix.patch b/0021-omit-drivers-fix.patch
new file mode 100644
index 0000000..36aa478
--- /dev/null
+++ b/0021-omit-drivers-fix.patch
@@ -0,0 +1,30 @@
+From beb26a084794a4bc8baffc8384cb8e41844f89f9 Mon Sep 17 00:00:00 2001
+From: "dyoung@redhat.com" <dyoung@redhat.com>
+Date: Thu, 8 Aug 2013 14:05:02 +0800
+Subject: [PATCH] omit drivers fix
+
+Because omit_drivers list use underline always, so when maching with it
+the _mod need to be converted as well or sometimes omit-drivers will fail
+silently.
+
+Fix this by replace '-' with '_' in instmods function.
+
+Signed-off-by: Dave Young <dyoung@redhat.com>
+---
+ dracut-functions.sh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index fbe0633..6033a1a 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -1420,7 +1420,8 @@ instmods() {
+ return $_ret
+ fi
+
+- if [[ $omit_drivers ]] && [[ "$1" =~ $omit_drivers ]]; then
++ _mod=${_mod/-/_}
++ if [[ $omit_drivers ]] && [[ "$_mod" =~ $omit_drivers ]]; then
+ dinfo "Omitting driver ${_mod##$srcmods}"
+ return 0
+ fi
diff --git a/dracut.spec b/dracut.spec
index edaea2a..44c2c7c 100644
--- a/dracut.spec
+++ b/dracut.spec
@@ -10,7 +10,7 @@
Name: dracut
Version: 031
-Release: 7.git20130801%{?dist}
+Release: 22.git20130809%{?dist}
Summary: Initramfs generator using udev
%if 0%{?fedora} || 0%{?rhel}
@@ -35,6 +35,21 @@ Patch3: 0003-Change-the-implementation-of-action_on_fail.patch
Patch4: 0004-lvm-add-yes-to-lvm-lvchange.patch
Patch5: 0005-cms-cmssetup.sh-correct-port-for-zfcp.conf.patch
Patch6: 0006-95terminfo-install-vt102.patch
+Patch7: 0007-lsinitrd.sh-add-old-cpio-signature.patch
+Patch8: 0008-dracut.sh-call-find-with-print0-and-cpio-with-null.patch
+Patch9: 0009-dracut.asc-small-corrections.patch
+Patch10: 0010-systemd-dracut-initqueue.sh-continue-to-boot-if-fini.patch
+Patch11: 0011-dracut.sh-dracut-functions.sh-handle-root-on-non-blo.patch
+Patch12: 0012-dracut-functions.sh-removed-non-dracut-install-shell.patch
+Patch13: 0013-dracut-functions.sh-inst_multiple-dracut_install.patch
+Patch14: 0014-51-dracut-rescue.install-fixed-rescue-image-creation.patch
+Patch15: 0015-dracut.sh-do-not-strip-in-FIPS-mode.patch
+Patch16: 0016-dracut.sh-check-the-value-of-kver.patch
+Patch17: 0017-crypt-Fix-typo-etc-crypttab-not-etc-cryptab.patch
+Patch18: 0018-network-net-lib.sh-fix-ibft-interface-configuration.patch
+Patch19: 0019-iscsi-module-setup.sh-install-some-modules-regardles.patch
+Patch20: 0020-multipath-need_shutdown-if-multipath-devices-exist.patch
+Patch21: 0021-omit-drivers-fix.patch
BuildRequires: bash git
@@ -450,6 +465,25 @@ rm -rf -- $RPM_BUILD_ROOT
%endif
%changelog
+* Fri Aug 09 2013 Harald Hoyer <harald@redhat.com> 031-22.git20130809
+- lsinitrd.sh: add old cpio signature
+- dracut.sh: call find with -print0 and cpio with --null
+- dracut.asc: small corrections
+- systemd/dracut-initqueue.sh: continue to boot if finished failed
+- dracut.sh/dracut-functions.sh: handle root on non-block device
+- dracut-functions.sh: removed non dracut-install shell functions
+- dracut-functions.sh: inst_multiple == dracut_install
+- 51-dracut-rescue.install: fixed rescue image creation
+- dracut.sh: do not strip in FIPS mode
+Resolves: rhbz#990250
+- dracut.sh: check the value of --kver
+- crypt: Fix typo--/etc/crypttab not /etc/cryptab
+- network/net-lib.sh: fix ibft interface configuration
+- iscsi/module-setup.sh: install some modules regardless of hostonly
+- multipath: need_shutdown if multipath devices exist
+Resolves: rhbz#994913
+- omit drivers fix
+
* Thu Aug 01 2013 Harald Hoyer <harald@redhat.com> 031-7.git20130801
- also install vt102 terminfo