2 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
3 # ex: ts=8 sw=4 sts=4 et filetype=sh
5 # Generator script for a dracut initramfs
6 # Tries to retain some degree of compatibility with the command line
7 # of the various mkinitrd implementations out there
10 # Copyright 2005-2010 Red Hat, Inc. All rights reserved.
12 # This program is free software; you can redistribute it and/or modify
13 # it under the terms of the GNU General Public License as published by
14 # the Free Software Foundation; either version 2 of the License, or
15 # (at your option) any later version.
17 # This program is distributed in the hope that it will be useful,
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
22 # You should have received a copy of the GNU General Public License
23 # along with this program. If not, see <http://www.gnu.org/licenses/>.
30 # 80x25 linebreak here ^
32 Usage: $0 [OPTION]... <initramfs> <kernel-version>
33 Creates initial ramdisk images for preloading modules
35 -f, --force Overwrite existing initramfs file.
36 -m, --modules [LIST] Specify a space-separated list of dracut modules to
37 call when building the initramfs. Modules are located
38 in /usr/lib/dracut/modules.d.
39 -o, --omit [LIST] Omit a space-separated list of dracut modules.
40 -a, --add [LIST] Add a space-separated list of dracut modules.
41 -d, --drivers [LIST] Specify a space-separated list of kernel modules to
42 exclusively include in the initramfs.
43 --add-drivers [LIST] Specify a space-separated list of kernel
44 modules to add to the initramfs.
45 --omit-drivers [LIST] Specify a space-separated list of kernel
46 modules not to add to the initramfs.
47 --filesystems [LIST] Specify a space-separated list of kernel filesystem
48 modules to exclusively include in the generic
50 -k, --kmoddir [DIR] Specify the directory, where to look for kernel
52 --fwdir [DIR] Specify additional directories, where to look for
53 firmwares, separated by :
54 --kernel-only Only install kernel drivers and firmware files
55 --no-kernel Do not install kernel drivers and firmware files
56 --strip Strip binaries in the initramfs
57 --nostrip Do not strip binaries in the initramfs (default)
58 --prefix [DIR] Prefix initramfs files with [DIR]
59 --noprefix Do not prefix initramfs files (default)
60 --mdadmconf Include local /etc/mdadm.conf
61 --nomdadmconf Do not include local /etc/mdadm.conf
62 --lvmconf Include local /etc/lvm/lvm.conf
63 --nolvmconf Do not include local /etc/lvm/lvm.conf
64 --fscks [LIST] Add a space-separated list of fsck helpers.
65 --nofscks Inhibit installation of any fsck helpers.
66 -h, --help This message
67 --debug Output debug information of the build process
68 --profile Output profile information of the build process
69 -L, --stdlog [0-6] Specify logging level (to standard error)
70 0 - suppress any messages
75 5 - debug info (here starts lots of output)
76 6 - trace info (and even more)
77 -v, --verbose Increase verbosity level (default is info(4))
78 -q, --quiet Decrease verbosity level (default is info(4))
79 -c, --conf [FILE] Specify configuration file to use.
80 Default: /etc/dracut.conf
81 --confdir [DIR] Specify configuration directory to use *.conf files
82 from. Default: /etc/dracut.conf.d
83 -l, --local Local mode. Use modules from the current working
84 directory instead of the system-wide installed in
85 /usr/lib/dracut/modules.d.
86 Useful when running dracut from a git checkout.
87 -H, --hostonly Host-Only mode: Install only what is needed for
88 booting the local host instead of a generic host.
89 --fstab Use /etc/fstab to determine the root device.
90 --add-fstab [FILE] Add file to the initramfs fstab
91 --mount "[DEV] [MP] [FSTYPE] [FSOPTS]"
92 Mount device [DEV] on mountpoint [MP] with filesystem
93 [FSTYPE] and options [FSOPTS] in the initramfs
94 -i, --include [SOURCE] [TARGET]
95 Include the files in the SOURCE directory into the
96 Target directory in the final initramfs.
97 If SOURCE is a file, it will be installed to TARGET
98 in the final initramfs.
99 -I, --install [LIST] Install the space separated list of files into the
101 --gzip Compress the generated initramfs using gzip.
102 This will be done by default, unless another
103 compression option or --no-compress is passed.
104 --bzip2 Compress the generated initramfs using bzip2.
105 Make sure your kernel has bzip2 decompression support
106 compiled in, otherwise you will not be able to boot.
107 --lzma Compress the generated initramfs using lzma.
108 Make sure your kernel has lzma support compiled in,
109 otherwise you will not be able to boot.
110 --xz Compress the generated initramfs using xz.
111 Make sure that your kernel has xz support compiled
112 in, otherwise you will not be able to boot.
113 --compress [COMPRESSION] Compress the generated initramfs with the
114 passed compression program. Make sure your kernel
115 knows how to decompress the generated initramfs,
116 otherwise you will not be able to boot.
117 --no-compress Do not compress the generated initramfs. This will
118 override any other compression options.
119 --list-modules List all available dracut modules.
120 -M, --show-modules Print included module's name to standard output during
122 --keep Keep the temporary initramfs for debugging purposes
123 --sshkey [SSHKEY] Add ssh key to initramfs (use with ssh-client module)
124 --ctty Add control tty for emergency shells
126 If [LIST] has multiple arguments, then you have to put these in quotes.
128 # dracut --add-drivers "module1 module2" ...
133 # push values to a stack
134 # $1 = stack variable
137 # push stack 1 2 "3 4"
139 local __stack=$1; shift
141 eval ${__stack}'[${#'${__stack}'[@]}]="$i"'
146 # pops the last value from a stack
147 # assigns value to second argument variable
148 # or echo to stdout, if no second argument
149 # $1 = stack variable
150 # $2 = optional variable to store the value
155 local __stack=$1; shift
158 # check for empty stack
159 eval '[[ ${#'${__stack}'[@]} -eq 0 ]] && return 1'
161 eval myresult='${'${__stack}'[${#'${__stack}'[@]}-1]}'
163 if [[ "$__resultvar" ]]; then
164 eval $__resultvar="'$myresult'"
168 eval unset ${__stack}'[${#'${__stack}'[@]}-1]'
172 # Little helper function for reading args from the commandline.
173 # it automatically handles -a b and -a=b variants, and returns 1 if
174 # we need to shift $3.
179 local rematch='^[^=]*=(.*)$'
180 if [[ $2 =~ $rematch ]]; then
181 read "$1" <<< "${BASH_REMATCH[1]}"
184 # There is no way to shift our callers args, so
185 # return 1 to indicate they should do it instead.
190 # Little helper function for reading args from the commandline to a stack.
191 # it automatically handles -a b and -a=b variants, and returns 1 if
192 # we need to shift $3.
197 local rematch='^[^=]*=(.*)$'
198 if [[ $2 =~ $rematch ]]; then
199 push "$1" "${BASH_REMATCH[1]}"
202 # There is no way to shift our callers args, so
203 # return 1 to indicate they should do it instead.
212 -a|--add) push_arg add_dracutmodules_l "$@" || shift;;
213 --force-add) push_arg force_add_dracutmodules_l "$@" || shift;;
214 --add-drivers) push_arg add_drivers_l "$@" || shift;;
215 --omit-drivers) push_arg omit_drivers_l "$@" || shift;;
216 -m|--modules) push_arg dracutmodules_l "$@" || shift;;
217 -o|--omit) push_arg omit_dracutmodules_l "$@" || shift;;
218 -d|--drivers) push_arg drivers_l "$@" || shift;;
219 --filesystems) push_arg filesystems_l "$@" || shift;;
220 -I|--install) push_arg install_items_l "$@" || shift;;
221 --fwdir) push_arg fw_dir_l "$@" || shift;;
222 --fscks) push_arg fscks_l "$@" || shift;;
223 --add-fstab) push_arg add_fstab_l "$@" || shift;;
224 --mount) push_arg fstab_lines "$@" || shift;;
225 --nofscks) nofscks_l="yes";;
226 -k|--kmoddir) read_arg drivers_dir_l "$@" || shift;;
227 -c|--conf) read_arg conffile "$@" || shift;;
228 --confdir) read_arg confdir "$@" || shift;;
229 -L|--stdlog) read_arg stdloglvl_l "$@" || shift;;
230 --compress) read_arg compress_l "$@" || shift;;
231 --prefix) read_arg prefix_l "$@" || shift;;
232 -f|--force) force=yes;;
233 --kernel-only) kernel_only="yes"; no_kernel="no";;
234 --no-kernel) kernel_only="no"; no_kernel="yes";;
235 --strip) do_strip_l="yes";;
236 --nostrip) do_strip_l="no";;
237 --noprefix) prefix_l="/";;
238 --mdadmconf) mdadmconf_l="yes";;
239 --nomdadmconf) mdadmconf_l="no";;
240 --lvmconf) lvmconf_l="yes";;
241 --nolvmconf) lvmconf_l="no";;
242 --debug) debug="yes";;
243 --profile) profile="yes";;
244 --ctty) cttyhack="yes";;
245 --sshkey) read_arg sshkey "$@" || shift;;
246 -v|--verbose) ((verbosity_mod_l++));;
247 -q|--quiet) ((verbosity_mod_l--));;
248 -l|--local) allowlocal="yes" ;;
249 -H|--hostonly) hostonly_l="yes" ;;
250 --fstab) use_fstab_l="yes" ;;
251 -h|--help) usage; exit 1 ;;
252 -i|--include) push include_src "$2"
253 push include_target "$3"
255 --bzip2) compress_l="bzip2";;
256 --lzma) compress_l="lzma";;
257 --xz) compress_l="xz";;
258 --no-compress) _no_compress_l="cat";;
259 --gzip) compress_l="gzip";;
267 -*) printf "\nUnknown option: %s\n\n" "$1" >&2; usage; exit 1;;
269 if ! [[ ${outfile+x} ]]; then
271 elif ! [[ ${kernel+x} ]]; then
280 if ! [[ $kernel ]]; then
283 [[ $outfile ]] || outfile="/boot/initramfs-$kernel.img"
285 for i in /usr/sbin /sbin /usr/bin /bin; do
292 export PATH="${NPATH#:}"
294 unset LD_LIBRARY_PATH
298 export PS4='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]}): ';
303 export PS4='+ $(date "+%s.%N") ${BASH_SOURCE}@${LINENO}: ';
308 [[ $dracutbasedir ]] || dracutbasedir=/usr/lib/dracut
310 [[ $allowlocal && -f "$(readlink -f ${0%/*})/dracut-functions.sh" ]] && \
311 dracutbasedir="$(readlink -f ${0%/*})"
313 # if we were not passed a config file, try the default one
314 if [[ ! -f $conffile ]]; then
315 [[ $allowlocal ]] && conffile="$dracutbasedir/dracut.conf" || \
316 conffile="/etc/dracut.conf"
319 if [[ ! -d $confdir ]]; then
320 [[ $allowlocal ]] && confdir="$dracutbasedir/dracut.conf.d" || \
321 confdir="/etc/dracut.conf.d"
324 # source our config file
325 [[ -f $conffile ]] && . "$conffile"
327 # source our config dir
328 if [[ $confdir && -d $confdir ]]; then
329 for f in "$confdir"/*.conf; do
330 [[ -e $f ]] && . "$f"
334 # these optins add to the stuff in the config file
335 if (( ${#add_dracutmodules_l[@]} )); then
336 while pop add_dracutmodules_l val; do
337 add_dracutmodules+=" $val "
341 if (( ${#force_add_dracutmodules_l[@]} )); then
342 while pop force_add_dracutmodules_l val; do
343 force_add_dracutmodules+=" $val "
347 if (( ${#fscks_l[@]} )); then
348 while pop fscks_l val; do
353 if (( ${#add_fstab_l[@]} )); then
354 while pop add_fstab_l val; do
359 if (( ${#fstab_lines_l[@]} )); then
360 while pop fstab_lines_l val; do
361 push fstab_lines $val
365 if (( ${#install_items_l[@]} )); then
366 while pop install_items_l val; do
367 install_items+=" $val "
371 # these options override the stuff in the config file
372 if (( ${#dracutmodules_l[@]} )); then
374 while pop dracutmodules_l val; do
375 dracutmodules+="$val "
379 if (( ${#omit_dracutmodules_l[@]} )); then
380 omit_dracutmodules=''
381 while pop omit_dracutmodules_l val; do
382 omit_dracutmodules+="$val "
386 if (( ${#filesystems_l[@]} )); then
388 while pop filesystems_l val; do
393 if (( ${#fw_dir_l[@]} )); then
395 while pop fw_dir_l val; do
400 [[ $stdloglvl_l ]] && stdloglvl=$stdloglvl_l
401 [[ ! $stdloglvl ]] && stdloglvl=4
402 stdloglvl=$((stdloglvl + verbosity_mod_l))
403 ((stdloglvl > 6)) && stdloglvl=6
404 ((stdloglvl < 0)) && stdloglvl=0
406 [[ $drivers_dir_l ]] && drivers_dir=$drivers_dir_l
407 [[ $do_strip_l ]] && do_strip=$do_strip_l
408 [[ $prefix_l ]] && prefix=$prefix_l
409 [[ $prefix = "/" ]] && unset prefix
410 [[ $hostonly_l ]] && hostonly=$hostonly_l
411 [[ $use_fstab_l ]] && use_fstab=$use_fstab_l
412 [[ $mdadmconf_l ]] && mdadmconf=$mdadmconf_l
413 [[ $lvmconf_l ]] && lvmconf=$lvmconf_l
414 [[ $dracutbasedir ]] || dracutbasedir=/usr/lib/dracut
415 [[ $fw_dir ]] || fw_dir="/lib/firmware/updates /lib/firmware"
416 [[ $do_strip ]] || do_strip=no
417 [[ $compress_l ]] && compress=$compress_l
418 [[ $show_modules_l ]] && show_modules=$show_modules_l
419 [[ $nofscks_l ]] && nofscks="yes"
420 # eliminate IFS hackery when messing with fw_dir
421 fw_dir=${fw_dir//:/ }
423 # handle compression options.
424 [[ $compress ]] || compress="gzip"
426 bzip2) compress="bzip2 -9";;
427 lzma) compress="lzma -9";;
428 xz) compress="xz --check=crc32 --lzma2=dict=1MiB";;
429 gzip) command -v pigz > /dev/null 2>&1 && compress="pigz -9" || \
432 if [[ $_no_compress_l = "cat" ]]; then
436 [[ $hostonly = yes ]] && hostonly="-h"
437 [[ $hostonly != "-h" ]] && unset hostonly
439 if [[ -f $dracutbasedir/dracut-functions.sh ]]; then
440 . $dracutbasedir/dracut-functions.sh
442 echo "Cannot find $dracutbasedir/dracut-functions.sh." >&2
443 echo "Are you running from a git checkout?" >&2
444 echo "Try passing -l as an argument to $0" >&2
448 # Verify bash version, curret minimum is 3.1
449 if (( ${BASH_VERSINFO[0]} < 3 ||
450 ( ${BASH_VERSINFO[0]} == 3 && ${BASH_VERSINFO[1]} < 1 ) )); then
451 dfatal 'You need at least Bash 3.1 to use dracut, sorry.'
455 dracutfunctions=$dracutbasedir/dracut-functions.sh
456 export dracutfunctions
458 if (( ${#drivers_l[@]} )); then
460 while pop drivers_l val; do
464 drivers=${drivers/-/_}
466 if (( ${#add_drivers_l[@]} )); then
467 while pop add_drivers_l val; do
468 add_drivers+=" $val "
471 add_drivers=${add_drivers/-/_}
473 if (( ${#omit_drivers_l[@]} )); then
474 while pop omit_drivers_l val; do
475 omit_drivers+=" $val "
478 omit_drivers=${omit_drivers/-/_}
480 unset omit_drivers_corrected
481 for d in $omit_drivers; do
482 strstr " $drivers $add_drivers " " $d " && continue
483 omit_drivers_corrected+=" $d "
485 omit_drivers=$omit_drivers_corrected
486 unset omit_drivers_corrected
489 ddebug "Executing $0 $dracut_args"
491 [[ $do_list = yes ]] && {
492 for mod in $dracutbasedir/modules.d/*; do
493 [[ -d $mod ]] || continue;
494 [[ -e $mod/install || -e $mod/installkernel || \
495 -e $mod/module-setup.sh ]] || continue
502 [[ $libdir ]] || for libdir in /lib64 /lib; do
503 [[ -d $libdir ]] && break
505 dfatal 'No lib directory?!!!'
509 [[ $usrlibdir ]] || for usrlibdir in /usr/lib64 /usr/lib; do
510 [[ -d $usrlibdir ]] && break
511 done || dwarn 'No usr/lib directory!'
513 # This is kinda legacy -- eventually it should go away.
514 case $dracutmodules in
515 ""|auto) dracutmodules="all" ;;
518 abs_outfile=$(readlink -f "$outfile") && outfile="$abs_outfile"
520 srcmods="/lib/modules/$kernel/"
521 [[ $drivers_dir ]] && {
522 if vercmp $(modprobe --version | cut -d' ' -f3) lt 3.7; then
523 dfatal 'To use --kmoddir option module-init-tools >= 3.7 is required.'
526 srcmods="$drivers_dir"
530 if [[ -f $outfile && ! $force ]]; then
531 dfatal "Will not override existing initramfs ($outfile) without --force"
536 [[ $outdir ]] || outdir="/"
538 if [[ ! -d "$outdir" ]]; then
539 dfatal "Can't write $outfile: Directory $outdir does not exist."
541 elif [[ ! -w "$outdir" ]]; then
542 dfatal "No permission to write $outdir."
544 elif [[ -f "$outfile" && ! -w "$outfile" ]]; then
545 dfatal "No permission to write $outfile."
549 readonly TMPDIR=/var/tmp
550 readonly initdir=$(mktemp --tmpdir=/var/tmp/ -d -t initramfs.XXXXXX)
551 [ -d "$initdir" ] || {
552 dfatal "mktemp failed."
556 # clean up after ourselves no matter how we die.
557 trap 'ret=$?;[[ $keep ]] && echo "Not removing $initdir." >&2 || rm -rf "$initdir";exit $ret;' EXIT
558 # clean up after ourselves no matter how we die.
559 trap 'exit 1;' SIGINT
561 # Need to be able to have non-root users read stuff (rpcbind etc)
564 for line in "${fstab_lines[@]}"; do
568 push host_fs_types "$1|$3"
571 for f in $add_fstab; do
572 [ -e $f ] || continue
573 while read dev rest; do
578 if [[ $hostonly ]]; then
579 # in hostonly mode, determine all devices, which have to be accessed
580 # and examine them for filesystem types
592 for mp in "${host_mp[@]}"; do
593 mountpoint "$mp" >/dev/null 2>&1 || continue
594 push host_devs $(readlink -f "/dev/block/$(find_block_device "$mp")")
600 if [[ -b $1 ]] && get_fs_env $1; then
601 echo "$1|$ID_FS_TYPE"
604 if [[ -b /dev/block/$1 ]] && get_fs_env /dev/block/$1; then
605 echo "/dev/block/$1|$ID_FS_TYPE"
608 if fstype=$(find_dev_fstype $1); then
615 for dev in "${host_devs[@]}"; do
617 for fstype in $(_get_fs_type $dev) \
618 $(check_block_and_slaves _get_fs_type $(get_maj_min $dev)); do
619 if ! strstr " ${host_fs_types[*]} " " $fstype ";then
620 push host_fs_types "$fstype"
625 export initdir dracutbasedir dracutmodules drivers \
626 fw_dir drivers_dir debug no_kernel kernel_only \
627 add_drivers omit_drivers mdadmconf lvmconf filesystems \
628 use_fstab fstab_lines libdir usrlibdir fscks nofscks cttyhack \
629 stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \
630 debug host_fs_types host_devs sshkey
632 # Create some directory structure first
633 [[ $prefix ]] && mkdir -m 0755 -p "${initdir}${prefix}"
635 [[ -h /lib ]] || mkdir -m 0755 -p "${initdir}${prefix}/lib"
636 [[ $prefix ]] && ln -sfn "${prefix#/}/lib" "$initdir/lib"
638 if [[ $prefix ]]; then
639 for d in bin etc lib "$libdir" sbin tmp usr var; do
640 ln -sfn "${prefix#/}/${d#/}" "$initdir/$d"
644 if [[ $kernel_only != yes ]]; then
645 for d in bin etc lib "$libdir" sbin tmp usr var var/log usr/bin usr/sbin; do
646 [[ -e "${initdir}${prefix}/$d" ]] && continue
647 if [ -h "/$d" ]; then
648 inst "/$d" "${prefix}/$d"
650 mkdir -m 0755 -p "${initdir}${prefix}/$d"
654 for d in dev proc sys sysroot root run run/lock run/initramfs; do
655 if [ -h "/$d" ]; then
658 mkdir -m 0755 -p "$initdir/$d"
662 ln -sfn /run "$initdir/var/run"
663 ln -sfn /run/lock "$initdir/var/lock"
665 for d in lib "$libdir"; do
666 [[ -e "${initdir}${prefix}/$d" ]] && continue
667 if [ -h "/$d" ]; then
668 inst "/$d" "${prefix}/$d"
670 mkdir -m 0755 -p "${initdir}${prefix}/$d"
675 mkdir -p "${initdir}/etc/cmdline.d"
678 # check all our modules to see if they should be sourced.
679 # This builds a list of modules that we will install next.
680 for_each_module_dir check_module
681 for_each_module_dir check_mount
684 # source our modules.
685 for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
686 _d_mod=${moddir##*/}; _d_mod=${_d_mod#[0-9][0-9]}
687 if strstr "$mods_to_load" " $_d_mod "; then
688 [[ $show_modules = yes ]] && echo "$_d_mod" || \
689 dinfo "*** Including module: $_d_mod ***"
690 if [[ $kernel_only = yes ]]; then
691 module_installkernel $_d_mod
693 module_install $_d_mod
694 if [[ $no_kernel != yes ]]; then
695 module_installkernel $_d_mod
698 mods_to_load=${mods_to_load// $_d_mod /}
699 modules_loaded+="$_d_mod "
703 dinfo "*** Including modules done ***"
705 ## final stuff that has to happen
707 # generate module dependencies for the initrd
708 if [[ -d $initdir/lib/modules/$kernel ]] && \
709 ! depmod -a -b "$initdir" $kernel; then
710 dfatal "\"depmod -a $kernel\" failed."
714 while pop include_src src && pop include_target tgt; do
715 if [[ $src && $tgt ]]; then
716 if [[ -f $src ]]; then
719 ddebug "Including directory: $src"
720 mkdir -p "${initdir}/${tgt}"
721 # check for preexisting symlinks, so we can cope with the
722 # symlinks to $prefix
723 for i in "$src"/*; do
724 [[ -e "$i" || -h "$i" ]] || continue
725 s=${initdir}/${tgt}/${i#$src/}
726 if [[ -d "$i" ]]; then
727 if ! [[ -e "$s" ]]; then
728 mkdir -m 0755 -p "$s"
729 chmod --reference="$i" "$s"
740 for item in $install_items; do
741 dracut_install -o "$item"
745 while pop fstab_lines line; do
746 echo "$line 0 0" >> "${initdir}/etc/fstab"
749 for f in $add_fstab; do
750 cat $f >> "${initdir}/etc/fstab"
753 if [[ $kernel_only != yes ]]; then
754 # make sure that library links are correct and up to date
755 for f in /etc/ld.so.conf /etc/ld.so.conf.d/*; do
756 [[ -f $f ]] && inst_simple "$f"
758 if ! ldconfig -r "$initdir"; then
759 if [[ $UID = 0 ]]; then
760 derror "ldconfig exited ungracefully"
762 derror "ldconfig might need uid=0 (root) for chroot()"
767 if (($maxloglvl >= 5)); then
768 ddebug "Listing sizes of included files:"
769 du -c "$initdir" | sort -n | ddebug
773 if [[ $do_strip = yes ]] ; then
774 for p in strip grep find; do
775 if ! type -P $p >/dev/null; then
776 derror "Could not find '$p'. You should run $0 with '--nostrip'."
782 if [[ $do_strip = yes ]] ; then
783 for f in $(find "$initdir" -type f \
784 \( -perm -0100 -or -perm -0010 -or -perm -0001 \
785 -or -path '*/lib/modules/*.ko' \) ); do
787 strip -g "$f" 2>/dev/null|| :
791 type hardlink &>/dev/null && {
792 hardlink "$initdir" 2>&1
795 if strstr "$modules_loaded" " fips " && command -v prelink >/dev/null; then
796 for i in $initdir/bin/* \
799 $initdir/usr/sbin/*; do
800 [ -x $i ] && prelink -u $i &>/dev/null
804 if ! ( cd "$initdir"; find . |cpio -R 0:0 -H newc -o --quiet| \
805 $compress > "$outfile"; ); then
806 dfatal "dracut: creation of $outfile failed"
810 dinfo "Wrote $outfile:"
811 dinfo "$(ls -l "$outfile")"