3 # Generator script for a dracut initramfs
5 # Copyright 2005-2013 Red Hat, Inc. All rights reserved.
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
26 # Verify bash version, current minimum is 4
27 if ((BASH_VERSINFO
[0] < 4)); then
28 printf -- 'You need at least Bash 4 to use dracut, sorry.' >&2
33 # shellcheck disable=SC2155
34 readonly dracut_cmd
=$
(readlink
-f "$0")
39 [[ $sysroot_l ]] && dracutsysrootdir
="$sysroot_l"
40 [[ $dracutbasedir ]] || dracutbasedir
="$dracutsysrootdir"/usr
/lib
/dracut
41 if [[ -f $dracutbasedir/dracut-version.sh
]]; then
42 # shellcheck source=./dracut-version.sh
43 .
"$dracutbasedir"/dracut-version.sh
46 # 80x25 linebreak here ^
48 Usage: $dracut_cmd [OPTION]... [<initramfs> [<kernel-version>]]
50 Version: $DRACUT_VERSION
52 Creates initial ramdisk images for preloading modules
54 -h, --help Display all options
56 If a [LIST] has multiple arguments, then you have to put these in quotes.
60 # dracut --add-drivers "module1 module2" ...
66 [[ $dracutbasedir ]] || dracutbasedir
="$dracutsysrootdir"/usr
/lib
/dracut
67 if [[ -f $dracutbasedir/dracut-version.sh
]]; then
68 # shellcheck source=./dracut-version.sh
69 .
"$dracutbasedir"/dracut-version.sh
72 # 80x25 linebreak here ^
74 Usage: $dracut_cmd [OPTION]... [<initramfs> [<kernel-version>]]
76 Version: $DRACUT_VERSION
78 Creates initial ramdisk images for preloading modules
80 --kver [VERSION] Set kernel version to [VERSION].
81 -f, --force Overwrite existing initramfs file.
82 -a, --add [LIST] Add a space-separated list of dracut modules.
83 --rebuild Append arguments to those of existing image and rebuild
84 -m, --modules [LIST] Specify a space-separated list of dracut modules to
85 call when building the initramfs. Modules are located
86 in /usr/lib/dracut/modules.d.
87 -o, --omit [LIST] Omit a space-separated list of dracut modules.
88 --force-add [LIST] Force to add a space-separated list of dracut modules
89 to the default set of modules, when -H is specified.
90 -d, --drivers [LIST] Specify a space-separated list of kernel modules to
91 exclusively include in the initramfs.
92 --add-drivers [LIST] Specify a space-separated list of kernel
93 modules to add to the initramfs.
94 --force-drivers [LIST] Specify a space-separated list of kernel
95 modules to add to the initramfs and make sure they
96 are tried to be loaded via modprobe same as passing
97 rd.driver.pre=DRIVER kernel parameter.
98 --omit-drivers [LIST] Specify a space-separated list of kernel
99 modules not to add to the initramfs.
100 --filesystems [LIST] Specify a space-separated list of kernel filesystem
101 modules to exclusively include in the generic
103 -k, --kmoddir [DIR] Specify the directory, where to look for kernel
105 --fwdir [DIR] Specify additional directories, where to look for
106 firmwares, separated by :
107 --kernel-only Only install kernel drivers and firmware files
108 --no-kernel Do not install kernel drivers and firmware files
109 --print-cmdline Print the kernel command line for the given disk layout
110 --early-microcode Combine early microcode with ramdisk
111 --no-early-microcode Do not combine early microcode with ramdisk
112 --kernel-cmdline [PARAMETERS] Specify default kernel command line parameters
113 --strip Strip binaries in the initramfs
114 --aggresive-strip Strip more than just debug symbol and sections,
115 for a smaller initramfs build.
116 --nostrip Do not strip binaries in the initramfs
117 --hardlink Hardlink files in the initramfs
118 --nohardlink Do not hardlink files in the initramfs
119 --prefix [DIR] Prefix initramfs files with [DIR]
120 --noprefix Do not prefix initramfs files
121 --mdadmconf Include local /etc/mdadm.conf
122 --nomdadmconf Do not include local /etc/mdadm.conf
123 --lvmconf Include local /etc/lvm/lvm.conf
124 --nolvmconf Do not include local /etc/lvm/lvm.conf
125 --fscks [LIST] Add a space-separated list of fsck helpers.
126 --nofscks Inhibit installation of any fsck helpers.
127 --ro-mnt Mount / and /usr read-only by default.
128 -h, --help This message
129 --debug Output debug information of the build process
130 --profile Output profile information of the build process
131 -L, --stdlog [0-6] Specify logging level (to standard error)
132 0 - suppress any messages
133 1 - only fatal errors
137 5 - debug info (here starts lots of output)
138 6 - trace info (and even more)
139 -v, --verbose Increase verbosity level
140 -q, --quiet Decrease verbosity level
141 -c, --conf [FILE] Specify configuration file to use.
142 Default: /etc/dracut.conf
143 --confdir [DIR] Specify configuration directory to use *.conf files
144 from. Default: /etc/dracut.conf.d
145 --tmpdir [DIR] Temporary directory to be used instead of default
147 -r, --sysroot [DIR] Specify sysroot directory to collect files from.
148 -l, --local Local mode. Use modules from the current working
149 directory instead of the system-wide installed in
150 /usr/lib/dracut/modules.d.
151 Useful when running dracut from a git checkout.
152 -H, --hostonly Host-Only mode: Install only what is needed for
153 booting the local host instead of a generic host.
154 -N, --no-hostonly Disables Host-Only mode
155 --hostonly-mode <mode>
156 Specify the hostonly mode to use. <mode> could be
157 one of "sloppy" or "strict". "sloppy" mode is used
159 In "sloppy" hostonly mode, extra drivers and modules
160 will be installed, so minor hardware change won't make
161 the image unbootable (eg. changed keyboard), and the
162 image is still portable among similar hosts.
163 With "strict" mode enabled, anything not necessary
164 for booting the local host in its current state will
165 not be included, and modules may do some extra job
166 to save more space. Minor change of hardware or
167 environment could make the image unbootable.
168 DO NOT use "strict" mode unless you know what you
170 --hostonly-cmdline Store kernel command line arguments needed
172 --no-hostonly-cmdline Do not store kernel command line arguments needed
174 --no-hostonly-default-device
175 Do not generate implicit host devices like root,
176 swap, fstab, etc. Use "--mount" or "--add-device"
177 to explicitly add devices as needed.
178 --hostonly-i18n Install only needed keyboard and font files according
179 to the host configuration (default).
180 --no-hostonly-i18n Install all keyboard and font files available.
181 --hostonly-nics [LIST]
182 Only enable listed NICs in the initramfs.
183 --persistent-policy [POLICY]
184 Use [POLICY] to address disks and partitions.
185 POLICY can be any directory name found in /dev/disk.
186 E.g. "by-uuid", "by-label"
187 --fstab Use /etc/fstab to determine the root device.
188 --add-fstab [FILE] Add file to the initramfs fstab
189 --mount "[DEV] [MP] [FSTYPE] [FSOPTS]"
190 Mount device [DEV] on mountpoint [MP] with filesystem
191 [FSTYPE] and options [FSOPTS] in the initramfs
192 --mount "[MP]" Same as above, but [DEV], [FSTYPE] and [FSOPTS] are
193 determined by looking at the current mounts.
194 --add-device "[DEV]" Bring up [DEV] in initramfs
195 -i, --include [SOURCE] [TARGET]
196 Include the files in the SOURCE directory into the
197 Target directory in the final initramfs.
198 If SOURCE is a file, it will be installed to TARGET
199 in the final initramfs.
200 -I, --install [LIST] Install the space separated list of files into the
202 --install-optional [LIST] Install the space separated list of files into the
203 initramfs, if they exist.
204 --gzip Compress the generated initramfs using gzip.
205 This will be done by default, unless another
206 compression option or --no-compress is passed.
207 --bzip2 Compress the generated initramfs using bzip2.
208 Make sure your kernel has bzip2 decompression support
209 compiled in, otherwise you will not be able to boot.
210 --lzma Compress the generated initramfs using lzma.
211 Make sure your kernel has lzma support compiled in,
212 otherwise you will not be able to boot.
213 --xz Compress the generated initramfs using xz.
214 Make sure that your kernel has xz support compiled
215 in, otherwise you will not be able to boot.
216 --lzo Compress the generated initramfs using lzop.
217 Make sure that your kernel has lzo support compiled
218 in, otherwise you will not be able to boot.
219 --lz4 Compress the generated initramfs using lz4.
220 Make sure that your kernel has lz4 support compiled
221 in, otherwise you will not be able to boot.
222 --zstd Compress the generated initramfs using Zstandard.
223 Make sure that your kernel has zstd support compiled
224 in, otherwise you will not be able to boot.
225 --compress [COMPRESSION] Compress the generated initramfs with the
226 passed compression program. Make sure your kernel
227 knows how to decompress the generated initramfs,
228 otherwise you will not be able to boot.
229 --no-compress Do not compress the generated initramfs. This will
230 override any other compression options.
231 --squash-compressor [COMPRESSION] Specify the compressor and compressor
232 specific options used by mksquashfs if squash module
233 is called when building the initramfs.
234 --enhanced-cpio Attempt to reflink cpio file data using dracut-cpio.
235 --list-modules List all available dracut modules.
236 -M, --show-modules Print included module's name to standard output during
238 --keep Keep the temporary initramfs for debugging purposes
239 --printsize Print out the module install size
240 --sshkey [SSHKEY] Add ssh key to initramfs (use with ssh-client module)
241 --logfile [FILE] Logfile to use (overrides configuration setting)
242 --reproducible Create reproducible images
243 --no-reproducible Do not create reproducible images
244 --loginstall [DIR] Log all files installed from the host to [DIR]
245 --uefi Create an UEFI executable with the kernel cmdline and
247 --no-uefi Disables UEFI mode
248 --uefi-stub [FILE] Use the UEFI stub [FILE] to create an UEFI executable
249 --uefi-splash-image [FILE]
250 Use [FILE] as a splash image when creating an UEFI
252 --kernel-image [FILE] location of the kernel image
253 --regenerate-all Regenerate all initramfs images at the default location
254 for the kernel versions found on the system
255 --version Display version
257 If [LIST] has multiple arguments, then you have to put these in quotes.
261 # dracut --add-drivers "module1 module2" ...
267 [[ $dracutbasedir ]] || dracutbasedir
="$dracutsysrootdir"/usr
/lib
/dracut
268 if [[ -f $dracutbasedir/dracut-version.sh
]]; then
269 # shellcheck source=./dracut-version.sh
270 .
"$dracutbasedir"/dracut-version.sh
272 echo "dracut $DRACUT_VERSION"
275 # Fills up host_devs stack variable and makes sure there are no duplicates
279 [[ " ${host_devs[*]} " == *" $_dev "* ]] && return
284 # Little helper function for reading args from the commandline.
285 # it automatically handles -a b and -a=b variants, and returns 1 if
286 # we need to shift $3.
291 local rematch
='^[^=]*=(.*)$'
292 if [[ $2 =~
$rematch ]]; then
293 read -r "$1" <<< "${BASH_REMATCH[1]}"
295 read -r "$1" <<< "$3"
296 # There is no way to shift our callers args, so
297 # return 1 to indicate they should do it instead.
303 if grep -H -e '^[^#]*[+]=\("[^ ]\|.*[^ ]"\)' "$@"; then
304 printf '\ndracut: WARNING: <key>+=" <values> ": <values> should have surrounding white spaces!\n' >&2
305 printf 'dracut: WARNING: This will lead to unwanted side effects! Please fix the configuration file.\n\n' >&2
316 for i
in "$d/"*"$suffix"; do
318 printf "%s\n" "${i##*/}"
324 for f
in "${files[@]}"; do
326 if [[ -e "$d/$f" ]]; then
327 printf "%s\n" "$d/$f"
336 # Workaround -i, --include taking 2 arguments
339 if [[ $i == "-i" ]] ||
[[ $i == "--include" ]]; then
340 newat
+=("++include") # Replace --include by ++include
345 set -- "${newat[@]}" # Set new $@
348 unset POSIXLY_CORRECT
350 -o "a:m:o:d:I:k:c:r:L:fvqlHhMN" \
354 --long add-drivers
: \
355 --long force-drivers
: \
356 --long omit-drivers
: \
360 --long filesystems
: \
362 --long install-optional
: \
379 --long squash-compressor
: \
385 --long print-cmdline \
386 --long kernel-cmdline
: \
388 --long aggresive-strip \
407 --long no-host-only \
408 --long hostonly-mode
: \
409 --long hostonly-cmdline \
410 --long no-hostonly-cmdline \
411 --long no-hostonly-default-device \
412 --long persistent-policy
: \
423 --long enhanced-cpio \
424 --long list-modules \
425 --long show-modules \
428 --long regenerate-all \
429 --long noimageifnotneeded \
430 --long early-microcode \
431 --long no-early-microcode \
432 --long reproducible \
433 --long no-reproducible \
438 --long uefi-splash-image
: \
439 --long kernel-image
: \
440 --long no-hostonly-i18n \
441 --long hostonly-i18n \
442 --long hostonly-nics
: \
443 --long no-machineid \
448 # shellcheck disable=SC2181
459 rearrange_params
"$@"
462 # parse command line args to check if '--rebuild' option is present
466 if [ "$1" == "--" ]; then
470 if [ "$1" == "--rebuild" ]; then
473 if [ ! -e "$rebuild_file" ]; then
474 echo "Image file '$rebuild_file', for rebuild, does not exist!"
477 abs_rebuild_file
=$
(readlink
-f "$rebuild_file") && rebuild_file
="$abs_rebuild_file"
484 # get output file name and kernel version from command line arguments
491 if ! [[ ${outfile+x} ]]; then
493 elif ! [[ ${kernel+x} ]]; then
496 printf "\nUnknown arguments: %s\n\n" "$*" >&2
505 # extract input image file provided with rebuild option to get previous parameters, if any
506 if [[ $append_args_l == "yes" ]]; then
509 # determine resultant file
510 if ! [[ $outfile ]]; then
511 outfile
=$rebuild_file
514 if ! rebuild_param
=$
(lsinitrd
"$rebuild_file" '*lib/dracut/build-parameter.txt'); then
515 echo "Image '$rebuild_file' has no rebuild information stored"
519 # prepend previous parameters to current command line args
520 if [[ $rebuild_param ]]; then
521 TEMP
="$rebuild_param $TEMP"
523 rearrange_params
"$@"
533 if [[ $1 != "--" ]] && [[ $1 != "--rebuild" ]]; then
534 PARMS_TO_STORE
+=" $1"
539 PARMS_TO_STORE
+=" '$2'"
543 add_dracutmodules_l
+=("$2")
544 PARMS_TO_STORE
+=" '$2'"
548 force_add_dracutmodules_l
+=("$2")
549 PARMS_TO_STORE
+=" '$2'"
553 add_drivers_l
+=("$2")
554 PARMS_TO_STORE
+=" '$2'"
558 force_drivers_l
+=("$2")
559 PARMS_TO_STORE
+=" '$2'"
563 omit_drivers_l
+=("$2")
564 PARMS_TO_STORE
+=" '$2'"
568 dracutmodules_l
+=("$2")
569 PARMS_TO_STORE
+=" '$2'"
573 omit_dracutmodules_l
+=("$2")
574 PARMS_TO_STORE
+=" '$2'"
579 PARMS_TO_STORE
+=" '$2'"
583 filesystems_l
+=("$2")
584 PARMS_TO_STORE
+=" '$2'"
588 install_items_l
+=("$2")
589 PARMS_TO_STORE
+=" '$2'"
593 install_optional_items_l
+=("$2")
594 PARMS_TO_STORE
+=" '$2'"
599 PARMS_TO_STORE
+=" '$2'"
604 PARMS_TO_STORE
+=" '$2'"
609 PARMS_TO_STORE
+=" '$2'"
614 PARMS_TO_STORE
+=" '$2'"
619 PARMS_TO_STORE
+=" '$2'"
622 --add-device |
--device)
624 PARMS_TO_STORE
+=" '$2'"
628 kernel_cmdline_l
+=("$2")
629 PARMS_TO_STORE
+=" '$2'"
632 --nofscks) nofscks_l
="yes" ;;
633 --ro-mnt) ro_mnt_l
="yes" ;;
636 PARMS_TO_STORE
+=" '$2'"
641 PARMS_TO_STORE
+=" '$2'"
646 PARMS_TO_STORE
+=" '$2'"
651 PARMS_TO_STORE
+=" '$2'"
656 PARMS_TO_STORE
+=" '$2'"
661 PARMS_TO_STORE
+=" '$2'"
666 PARMS_TO_STORE
+=" '$2'"
670 squash_compress_l
="$2"
671 PARMS_TO_STORE
+=" '$2'"
676 PARMS_TO_STORE
+=" '$2'"
681 PARMS_TO_STORE
+=" '$2'"
685 if [[ $rebuild_file == "$outfile" ]]; then
690 -f |
--force) force
=yes ;;
706 early_microcode_l
="yes"
708 --no-early-microcode)
709 early_microcode_l
="no"
711 --strip) do_strip_l
="yes" ;;
712 --aggresive-strip) aggresive_strip_l
="yes" ;;
713 --nostrip) do_strip_l
="no" ;;
714 --hardlink) do_hardlink_l
="yes" ;;
715 --nohardlink) do_hardlink_l
="no" ;;
716 --noprefix) prefix_l
="/" ;;
717 --mdadmconf) mdadmconf_l
="yes" ;;
718 --nomdadmconf) mdadmconf_l
="no" ;;
719 --lvmconf) lvmconf_l
="yes" ;;
720 --nolvmconf) lvmconf_l
="no" ;;
721 --debug) debug
="yes" ;;
722 --profile) profile
="yes" ;;
725 PARMS_TO_STORE
+=" '$2'"
732 -v |
--verbose) ((verbosity_mod_l
++)) ;;
733 -q |
--quiet) ((verbosity_mod_l--
)) ;;
736 [[ -f "$(readlink -f "${0%/*}")/dracut-init.sh" ]] \
737 && dracutbasedir
="$(readlink -f "${0%/*}")"
739 -H |
--hostonly |
--host-only)
742 -N |
--no-hostonly |
--no-host-only)
747 PARMS_TO_STORE
+=" '$2'"
751 hostonly_cmdline_l
="yes"
754 i18n_install_all_l
="no"
757 hostonly_nics_l
+=("$2")
758 PARMS_TO_STORE
+=" '$2'"
762 i18n_install_all_l
="yes"
764 --no-hostonly-cmdline)
765 hostonly_cmdline_l
="no"
767 --no-hostonly-default-device)
768 hostonly_default_device
="no"
771 persistent_policy_l
="$2"
772 PARMS_TO_STORE
+=" '$2'"
775 --fstab) use_fstab_l
="yes" ;;
780 --bzip2) compress_l
="bzip2" ;;
781 --lzma) compress_l
="lzma" ;;
782 --xz) compress_l
="xz" ;;
783 --lzo) compress_l
="lzo" ;;
784 --lz4) compress_l
="lz4" ;;
785 --zstd) compress_l
="zstd" ;;
786 --no-compress) _no_compress_l
="cat" ;;
787 --gzip) compress_l
="gzip" ;;
788 --enhanced-cpio) enhanced_cpio_l
="yes" ;;
789 --list-modules) do_list
="yes" ;;
793 --keep) keep
="yes" ;;
794 --printsize) printsize
="yes" ;;
795 --regenerate-all) regenerate_all
="yes" ;;
796 --noimageifnotneeded) noimageifnotneeded
="yes" ;;
797 --reproducible) reproducible_l
="yes" ;;
798 --no-reproducible) reproducible_l
="no" ;;
799 --uefi) uefi_l
="yes" ;;
800 --no-uefi) uefi_l
="no" ;;
803 PARMS_TO_STORE
+=" '$2'"
807 uefi_splash_image_l
="$2"
808 PARMS_TO_STORE
+=" '$2'"
813 PARMS_TO_STORE
+=" '$2'"
828 *) # should not even reach this point
829 printf "\n!Unknown option: '%s'\n\n" "$1" >&2
837 # getopt cannot handle multiple arguments, so just handle "-I,--include"
838 # the old fashioned way
841 if [ "${1%%=*}" == "++include" ]; then
843 include_target
+=("$3")
844 PARMS_TO_STORE
+=" --include '$2' '$3'"
850 [[ $sysroot_l ]] && dracutsysrootdir
="$sysroot_l"
852 if [[ $regenerate_all == "yes" ]]; then
854 if [[ $kernel ]]; then
855 printf -- "--regenerate-all cannot be called with a kernel version\n" >&2
859 if [[ $outfile ]]; then
860 printf -- "--regenerate-all cannot be called with a image file\n" >&2
864 ((len
= ${#dracut_args[@]}))
865 for ((i
= 0; i
< len
; i
++)); do
866 [[ ${dracut_args[$i]} == "--regenerate-all" ]] \
867 && unset dracut_args
["$i"]
870 cd "$dracutsysrootdir"/lib
/modules ||
exit 1
872 [[ -f $i/modules.dep
]] ||
[[ -f $i/modules.dep.bin
]] ||
continue
873 "$dracut_cmd" --kver="$i" "${dracut_args[@]}"
879 if ! [[ $kernel ]]; then
887 unset LD_LIBRARY_PATH
891 export DRACUT_LOG_LEVEL
=warning
893 export DRACUT_LOG_LEVEL
=debug
894 export PS4
='${BASH_SOURCE}@${LINENO}(${FUNCNAME[0]-}): '
899 export PS4
='+ $(date "+%s.%N") ${BASH_SOURCE}@${LINENO}: '
904 [[ $dracutbasedir ]] || dracutbasedir
="$dracutsysrootdir"/usr
/lib
/dracut
906 # if we were not passed a config file, try the default one
907 if [[ -z $conffile ]]; then
908 if [[ $allowlocal ]]; then
909 conffile
="$dracutbasedir/dracut.conf"
911 conffile
="$dracutsysrootdir/etc/dracut.conf"
913 elif [[ ! -f $conffile ]]; then
914 printf "%s\n" "dracut: Configuration file '$conffile' not found." >&2
918 if [[ -z $confdir ]]; then
919 if [[ $allowlocal ]]; then
920 confdir
="$dracutbasedir/dracut.conf.d"
922 confdir
="$dracutsysrootdir/etc/dracut.conf.d"
924 elif [[ ! -d $confdir ]]; then
925 printf "%s\n" "dracut: Configuration directory '$confdir' not found." >&2
929 # source our config file
930 if [[ -f $conffile ]]; then
931 check_conf_file
"$conffile"
932 # shellcheck disable=SC1090
936 # source our config dir
937 for f
in $
(dropindirs_sort
".conf" "$confdir" "$dracutbasedir/dracut.conf.d"); do
939 # shellcheck disable=SC1090
940 [[ -e $f ]] && .
"$f"
943 DRACUT_PATH
=${DRACUT_PATH:-/sbin /bin /usr/sbin /usr/bin}
945 for i
in $DRACUT_PATH; do
947 if [ -L "$dracutsysrootdir$i" ]; then
948 rl
=$
(readlink
-f "$dracutsysrootdir$i")
950 rl
="${rl#$dracutsysrootdir}"
951 if [[ $NPATH != *:$rl* ]]; then
955 [[ -z $dracutsysrootdir ]] && export PATH
="${NPATH#:}"
958 export SYSTEMCTL
=${SYSTEMCTL:-systemctl}
960 # these options add to the stuff in the config file
961 ((${#add_dracutmodules_l[@]})) && add_dracutmodules
+=" ${add_dracutmodules_l[*]} "
962 ((${#omit_dracutmodules_l[@]})) && omit_dracutmodules
+=" ${omit_dracutmodules_l[*]} "
963 ((${#force_add_dracutmodules_l[@]})) && force_add_dracutmodules
+=" ${force_add_dracutmodules_l[*]} "
964 ((${#fscks_l[@]})) && fscks
+=" ${fscks_l[*]} "
965 ((${#add_fstab_l[@]})) && add_fstab
+=" ${add_fstab_l[*]} "
966 ((${#install_items_l[@]})) && install_items
+=" ${install_items_l[*]} "
967 ((${#install_optional_items_l[@]})) && install_optional_items
+=" ${install_optional_items_l[*]} "
968 ((${#hostonly_nics_l[@]})) && hostonly_nics
+=" ${hostonly_nics_l[*]} "
970 # these options override the stuff in the config file
971 ((${#dracutmodules_l[@]})) && dracutmodules
="${dracutmodules_l[*]}"
972 ((${#filesystems_l[@]})) && filesystems
="${filesystems_l[*]}"
973 ((${#fw_dir_l[@]})) && fw_dir
="${fw_dir_l[*]}"
974 ((${#libdirs_l[@]})) && libdirs
="${libdirs_l[*]}"
976 [[ $stdloglvl_l ]] && stdloglvl
=$stdloglvl_l
977 [[ ! $stdloglvl ]] && stdloglvl
=4
978 stdloglvl
=$
((stdloglvl
+ verbosity_mod_l
))
979 ((stdloglvl
> 6)) && stdloglvl
=6
980 ((stdloglvl
< 0)) && stdloglvl
=0
982 [[ $drivers_dir_l ]] && drivers_dir
=$drivers_dir_l
983 [[ $do_strip_l ]] && do_strip
=$do_strip_l
984 [[ $do_strip ]] || do_strip
=yes
985 [[ $aggresive_strip_l ]] && aggresive_strip
=$aggresive_strip_l
986 [[ $do_hardlink_l ]] && do_hardlink
=$do_hardlink_l
987 [[ $do_hardlink ]] || do_hardlink
=yes
988 [[ $prefix_l ]] && prefix
=$prefix_l
989 [[ $prefix == "/" ]] && unset prefix
990 [[ $hostonly_l ]] && hostonly
=$hostonly_l
991 [[ $hostonly_cmdline_l ]] && hostonly_cmdline
=$hostonly_cmdline_l
992 [[ $hostonly_mode_l ]] && hostonly_mode
=$hostonly_mode_l
993 [[ $hostonly == "yes" ]] && ! [[ $hostonly_cmdline ]] && hostonly_cmdline
="yes"
994 # shellcheck disable=SC2034
995 [[ $i18n_install_all_l ]] && i18n_install_all
=$i18n_install_all_l
996 # shellcheck disable=SC2034
997 [[ $persistent_policy_l ]] && persistent_policy
=$persistent_policy_l
998 [[ $use_fstab_l ]] && use_fstab
=$use_fstab_l
999 [[ $mdadmconf_l ]] && mdadmconf
=$mdadmconf_l
1000 [[ $lvmconf_l ]] && lvmconf
=$lvmconf_l
1001 [[ $dracutbasedir ]] || dracutbasedir
="$dracutsysrootdir"/usr
/lib
/dracut
1002 [[ $fw_dir ]] || fw_dir
="$dracutsysrootdir/lib/firmware/updates:$dracutsysrootdir/lib/firmware:$dracutsysrootdir/lib/firmware/$kernel"
1003 [[ $tmpdir_l ]] && tmpdir
="$tmpdir_l"
1004 [[ $tmpdir ]] || tmpdir
="$TMPDIR"
1005 [[ $tmpdir ]] || tmpdir
="$dracutsysrootdir"/var
/tmp
1006 [[ $INITRD_COMPRESS ]] && compress=$INITRD_COMPRESS
1007 [[ $compress_l ]] && compress=$compress_l
1008 [[ $squash_compress_l ]] && squash_compress
=$squash_compress_l
1009 [[ $enhanced_cpio_l ]] && enhanced_cpio
=$enhanced_cpio_l
1010 [[ $show_modules_l ]] && show_modules
=$show_modules_l
1011 [[ $nofscks_l ]] && nofscks
="yes"
1012 [[ $ro_mnt_l ]] && ro_mnt
="yes"
1013 [[ $early_microcode_l ]] && early_microcode
=$early_microcode_l
1014 [[ $early_microcode ]] || early_microcode
=yes
1015 [[ $early_microcode_image_dir ]] || early_microcode_image_dir
=('/boot')
1016 [[ $early_microcode_image_name ]] \
1017 || early_microcode_image_name
=('intel-uc.img' 'intel-ucode.img' 'amd-uc.img' 'amd-ucode.img' 'early_ucode.cpio' 'microcode.cpio')
1018 [[ $logfile_l ]] && logfile
="$logfile_l"
1019 [[ $reproducible_l ]] && reproducible
="$reproducible_l"
1020 [[ $loginstall_l ]] && loginstall
="$loginstall_l"
1021 [[ $uefi_l ]] && uefi
=$uefi_l
1022 [[ $uefi_stub_l ]] && uefi_stub
="$uefi_stub_l"
1023 [[ $uefi_splash_image_l ]] && uefi_splash_image
="$uefi_splash_image_l"
1024 [[ $kernel_image_l ]] && kernel_image
="$kernel_image_l"
1025 [[ $machine_id_l ]] && machine_id
="$machine_id_l"
1027 if ! [[ $outfile ]]; then
1028 if [[ $machine_id != "no" ]]; then
1029 [[ -f "$dracutsysrootdir"/etc
/machine-id
]] && read -r MACHINE_ID
< "$dracutsysrootdir"/etc
/machine-id
1032 if [[ $uefi == "yes" ]]; then
1033 # shellcheck disable=SC2154
1034 if [[ -n $uefi_secureboot_key && -z $uefi_secureboot_cert ]] ||
[[ -z $uefi_secureboot_key && -n $uefi_secureboot_cert ]]; then
1035 dfatal
"Need 'uefi_secureboot_key' and 'uefi_secureboot_cert' both to be set."
1039 if [[ -n $uefi_secureboot_key && -n $uefi_secureboot_cert ]] && ! command -v sbsign
&> /dev
/null
; then
1040 dfatal
"Need 'sbsign' to create a signed UEFI executable"
1044 BUILD_ID
=$
(cat "$dracutsysrootdir"/etc
/os-release
"$dracutsysrootdir"/usr
/lib
/os-release \
1045 |
while read -r line ||
[[ $line ]]; do
1046 [[ $line =~ BUILD_ID\
=* ]] && eval "$line" && echo "$BUILD_ID" && break
1048 if [[ -z $dracutsysrootdir ]]; then
1049 if [[ -d /efi
]] && mountpoint
-q /efi
; then
1053 if [[ -d $dracutsysrootdir/boot
/efi
/EFI
]]; then
1054 efidir
=/boot
/efi
/EFI
1059 if [[ -d $dracutsysrootdir/boot
/efi
/EFI
]]; then
1060 efidir
=/boot
/efi
/EFI
1063 mkdir
-p "$dracutsysrootdir$efidir/Linux"
1064 outfile
="$dracutsysrootdir$efidir/Linux/linux-$kernel${MACHINE_ID:+-${MACHINE_ID}}${BUILD_ID:+-${BUILD_ID}}.efi"
1066 if [[ -e $dracutsysrootdir/boot
/vmlinuz-
$kernel ]]; then
1067 outfile
="/boot/initramfs-$kernel.img"
1068 elif [[ $MACHINE_ID ]] && { [[ -d $dracutsysrootdir/boot
/${MACHINE_ID} ]] || [[ -L $dracutsysrootdir/boot/${MACHINE_ID} ]]; }; then
1069 outfile
="$dracutsysrootdir/boot/${MACHINE_ID}/$kernel/initrd"
1071 outfile
="$dracutsysrootdir/boot/initramfs-$kernel.img"
1076 # eliminate IFS hackery when messing with fw_dir
1077 export DRACUT_FIRMWARE_PATH
=${fw_dir// /:}
1078 fw_dir
=${fw_dir//:/ }
1080 # check for logfile and try to create one if it doesn't exist
1081 if [[ -n $logfile ]]; then
1082 if [[ ! -f $logfile ]]; then
1083 if touch "$logfile"; then
1084 printf "%s\n" "dracut: touch $logfile failed." >&2
1089 # handle compression options.
1090 DRACUT_COMPRESS_BZIP2
=${DRACUT_COMPRESS_BZIP2:-bzip2}
1091 DRACUT_COMPRESS_LBZIP2
=${DRACUT_COMPRESS_LBZIP2:-lbzip2}
1092 DRACUT_COMPRESS_LZMA
=${DRACUT_COMPRESS_LZMA:-lzma}
1093 DRACUT_COMPRESS_XZ
=${DRACUT_COMPRESS_XZ:-xz}
1094 DRACUT_COMPRESS_GZIP
=${DRACUT_COMPRESS_GZIP:-gzip}
1095 DRACUT_COMPRESS_PIGZ
=${DRACUT_COMPRESS_PIGZ:-pigz}
1096 DRACUT_COMPRESS_LZOP
=${DRACUT_COMPRESS_LZOP:-lzop}
1097 DRACUT_COMPRESS_ZSTD
=${DRACUT_COMPRESS_ZSTD:-zstd}
1098 DRACUT_COMPRESS_LZ4
=${DRACUT_COMPRESS_LZ4:-lz4}
1099 DRACUT_COMPRESS_CAT
=${DRACUT_COMPRESS_CAT:-cat}
1101 if [[ $_no_compress_l == "$DRACUT_COMPRESS_CAT" ]]; then
1102 compress="$DRACUT_COMPRESS_CAT"
1105 [[ $hostonly == yes ]] && hostonly
="-h"
1106 [[ $hostonly != "-h" ]] && unset hostonly
1108 case $hostonly_mode in
1110 [[ $hostonly ]] && hostonly_mode
="sloppy"
1113 if [[ ! $hostonly ]]; then
1118 printf "%s\n" "dracut: Invalid hostonly mode '$hostonly_mode'." >&2
1123 [[ $reproducible == yes ]] && DRACUT_REPRODUCIBLE
=1
1125 case "${drivers_dir}" in
1126 '' |
*lib
/modules
/${kernel} |
*lib
/modules
/${kernel}/) ;;
1128 [[ "$DRACUT_KMODDIR_OVERRIDE" ]] ||
{
1129 printf "%s\n" 'dracut: -k/--kmoddir path must contain "lib/modules" as a parent of your kernel module directory,'
1130 printf "%s\n" "dracut: or modules may not be placed in the correct location inside the initramfs."
1131 printf "%s\n" "dracut: was given: ${drivers_dir}"
1132 printf "%s\n" "dracut: expected: $(dirname "${drivers_dir}")/lib/modules/${kernel}"
1133 printf "%s\n" "dracut: Please move your modules into the correct directory structure and pass the new location,"
1134 printf "%s\n" "dracut: or set DRACUT_KMODDIR_OVERRIDE=1 to ignore this check."
1140 # shellcheck disable=SC2155
1141 readonly TMPDIR
="$(realpath -e "$tmpdir")"
1142 [ -d "$TMPDIR" ] ||
{
1143 printf "%s\n" "dracut: Invalid tmpdir '$tmpdir'." >&2
1147 if findmnt
--raw -n --target "$tmpdir" --output=options |
grep -q noexec
; then
1148 [[ $debug == yes ]] && printf "%s\n" "dracut: Tmpdir '$tmpdir' is mounted with 'noexec'."
1152 # shellcheck disable=SC2155
1153 readonly DRACUT_TMPDIR
="$(mktemp -p "$TMPDIR/" -d -t dracut.XXXXXX)"
1154 [ -d "$DRACUT_TMPDIR" ] ||
{
1155 printf "%s\n" "dracut: mktemp -p '$TMPDIR/' -d -t dracut.XXXXXX failed." >&2
1159 # Cache file used to optimize get_maj_min()
1160 declare -x -r get_maj_min_cache_file
="${DRACUT_TMPDIR}/majmin_cache"
1161 : > "$get_maj_min_cache_file"
1163 # clean up after ourselves no matter how we die.
1166 [[ $keep ]] && echo "Not removing $DRACUT_TMPDIR." >&2 || { [[ $DRACUT_TMPDIR ]] && rm -rf -- "$DRACUT_TMPDIR"; };
1167 if [[ ${FSFROZEN} ]]; then
1168 fsfreeze -u "${FSFROZEN}"
1173 # clean up after ourselves no matter how we die.
1174 trap 'exit 1;' SIGINT
1176 readonly initdir
="${DRACUT_TMPDIR}/initramfs"
1179 # shellcheck disable=SC2154
1180 if [[ $early_microcode == yes ]] ||
{ [[ $acpi_override == yes ]] && [[ -d $acpi_table_dir ]]; }; then
1181 readonly early_cpio_dir
="${DRACUT_TMPDIR}/earlycpio"
1182 mkdir
"$early_cpio_dir"
1185 [[ "$dracutsysrootdir" ]] ||
[[ "$noexec" ]] ||
export DRACUT_RESOLVE_LAZY
="1"
1187 if [[ $print_cmdline ]]; then
1194 if [[ -f $dracutbasedir/dracut-version.sh
]]; then
1195 # shellcheck source=./dracut-version.sh
1196 .
"$dracutbasedir"/dracut-version.sh
1199 if systemd-detect-virt
-c &> /dev
/null
; then
1200 export DRACUT_NO_MKNOD
=1 DRACUT_NO_XATTR
=1
1201 if [[ $hostonly ]]; then
1202 printf "%s\n" "dracut: WARNING: running in hostonly mode in a container!!"
1206 if [[ -f $dracutbasedir/dracut-init.sh
]]; then
1207 # shellcheck source=./dracut-init.sh
1208 .
"$dracutbasedir"/dracut-init.sh
1210 printf "%s\n" "dracut: Cannot find $dracutbasedir/dracut-init.sh." >&2
1211 printf "%s\n" "dracut: Are you running from a git checkout?" >&2
1212 printf "%s\n" "dracut: Try passing -l as an argument to $dracut_cmd" >&2
1216 if [[ $enhanced_cpio == "yes" ]]; then
1217 enhanced_cpio
="$dracutbasedir/dracut-cpio"
1218 if [[ -x $enhanced_cpio ]]; then
1219 # align based on statfs optimal transfer size
1220 cpio_align
=$
(stat
--file-system -c "%s" -- "$initdir")
1222 dinfo
"--enhanced-cpio ignored due to lack of dracut-cpio"
1229 # shellcheck disable=SC2154
1230 if [[ $no_kernel != yes ]] && ! [[ -d $srcmods ]]; then
1231 printf "%s\n" "dracut: Cannot find module directory $srcmods" >&2
1232 printf "%s\n" "dracut: and --no-kernel was not specified" >&2
1236 if ! [[ $print_cmdline ]]; then
1237 inst
"$DRACUT_TESTBIN"
1238 if ! $DRACUT_INSTALL ${initdir:+-D "$initdir"} ${dracutsysrootdir:+-r "$dracutsysrootdir"} -R "$DRACUT_TESTBIN" &> /dev
/null
; then
1239 unset DRACUT_RESOLVE_LAZY
1240 export DRACUT_RESOLVE_DEPS
=1
1242 rm -fr -- "${initdir:?}"/*
1245 dracutfunctions
=$dracutbasedir/dracut-functions.sh
1246 export dracutfunctions
1248 ((${#drivers_l[@]})) && drivers
="${drivers_l[*]}"
1249 drivers
=${drivers/-/_}
1251 ((${#add_drivers_l[@]})) && add_drivers
+=" ${add_drivers_l[*]} "
1252 add_drivers
=${add_drivers/-/_}
1254 ((${#force_drivers_l[@]})) && force_drivers
+=" ${force_drivers_l[*]} "
1255 force_drivers
=${force_drivers/-/_}
1257 ((${#omit_drivers_l[@]})) && omit_drivers
+=" ${omit_drivers_l[*]} "
1258 omit_drivers
=${omit_drivers/-/_}
1260 ((${#kernel_cmdline_l[@]})) && kernel_cmdline
+=" ${kernel_cmdline_l[*]} "
1262 omit_drivers_corrected
=""
1263 for d
in $omit_drivers; do
1264 [[ " $drivers $add_drivers " == *\
$d\
* ]] && continue
1265 [[ " $drivers $force_drivers " == *\
$d\
* ]] && continue
1266 omit_drivers_corrected
+="$d|"
1268 omit_drivers
="${omit_drivers_corrected%|}"
1269 unset omit_drivers_corrected
1271 # prepare args for logging
1272 for ((i
= 0; i
< ${#dracut_args[@]}; i
++)); do
1273 [[ ${dracut_args[$i]} == *\
* ]] \
1274 && dracut_args
[$i]="\"${dracut_args[$i]}\""
1278 dinfo
"Executing: $dracut_cmd ${dracut_args[*]}"
1280 [[ $do_list == yes ]] && {
1281 for mod
in "$dracutbasedir"/modules.d
/*; do
1282 [[ -d $mod ]] ||
continue
1283 [[ -e $mod/install ||
-e $mod/installkernel ||
-e \
1284 $mod/module-setup.sh
]] ||
continue
1285 printf "%s\n" "${mod##*/??}"
1290 # This is kinda legacy -- eventually it should go away.
1291 case $dracutmodules in
1292 "" | auto
) dracutmodules
="all" ;;
1295 abs_outfile
=$
(readlink
-f "$outfile") && outfile
="$abs_outfile"
1297 [[ -d $dracutsysrootdir$systemdutildir ]] \
1298 || systemdutildir
=$
(pkg-config systemd
--variable=systemdutildir
2> /dev
/null
)
1300 if ! [[ -d $dracutsysrootdir$systemdutildir ]]; then
1301 [[ -e $dracutsysrootdir/lib
/systemd
/systemd-udevd
]] && systemdutildir
=/lib
/systemd
1302 [[ -e $dracutsysrootdir/usr
/lib
/systemd
/systemd-udevd
]] && systemdutildir
=/usr
/lib
/systemd
1305 [[ -d $dracutsysrootdir$systemdutilconfdir ]] \
1306 || systemdutilconfdir
=$
(pkg-config systemd
--variable=systemdutilconfdir
2> /dev
/null
)
1308 [[ -d $dracutsysrootdir$systemdutilconfdir ]] || systemdutilconfdir
=/etc
/systemd
1310 if [[ $no_kernel != yes ]] && [[ -d $srcmods ]]; then
1311 if ! [[ -f $srcmods/modules.dep
]]; then
1312 if [[ -n "$(find "$srcmods" -name '*.ko*')" ]]; then
1313 dfatal
"$srcmods/modules.dep is missing. Did you run depmod?"
1316 dwarn
"$srcmods/modules.dep is missing. Did you run depmod?"
1321 if [[ ! $print_cmdline ]]; then
1322 if [[ -f $outfile && ! $force ]]; then
1323 dfatal
"Will not override existing initramfs ($outfile) without --force"
1327 outdir
=${outfile%/*}
1328 [[ $outdir ]] || outdir
="/"
1330 if [[ ! -d $outdir ]]; then
1331 dfatal
"Can't write to $outdir: Directory $outdir does not exist or is not accessible."
1333 elif [[ ! -w $outdir ]]; then
1334 dfatal
"No permission to write to $outdir."
1336 elif [[ -f $outfile && ! -w $outfile ]]; then
1337 dfatal
"No permission to write $outfile."
1341 if [[ $loginstall ]]; then
1342 if ! mkdir
-p "$loginstall"; then
1343 dfatal
"Could not create directory to log installed files to '$loginstall'."
1346 loginstall
=$
(readlink
-f "$loginstall")
1349 if [[ $uefi == yes ]]; then
1350 if ! command -v objcopy
&> /dev
/null
; then
1351 dfatal
"Need 'objcopy' to create a UEFI executable"
1354 unset EFI_MACHINE_TYPE_NAME
1357 EFI_MACHINE_TYPE_NAME
=x64
1360 EFI_MACHINE_TYPE_NAME
=ia32
1363 dfatal
"Architecture '$(uname -m)' not supported to create a UEFI executable"
1368 if ! [[ -s $uefi_stub ]]; then
1369 uefi_stub
="$dracutsysrootdir${systemdutildir}/boot/efi/linux${EFI_MACHINE_TYPE_NAME}.efi.stub"
1372 if ! [[ -s $uefi_stub ]]; then
1373 dfatal
"Can't find a uefi stub '$uefi_stub' to create a UEFI executable"
1377 if ! [[ $kernel_image ]]; then
1378 for kernel_image
in "$dracutsysrootdir/lib/modules/$kernel/vmlinuz" "$dracutsysrootdir/boot/vmlinuz-$kernel"; do
1379 [[ -s $kernel_image ]] ||
continue
1383 if ! [[ -s $kernel_image ]]; then
1384 dfatal
"Can't find a kernel image '$kernel_image' to create a UEFI executable"
1390 if [[ $acpi_override == yes ]] && ! (check_kernel_config CONFIG_ACPI_TABLE_UPGRADE || check_kernel_config CONFIG_ACPI_INITRD_TABLE_OVERRIDE
); then
1391 dwarn
"Disabling ACPI override, because kernel does not support it. CONFIG_ACPI_INITRD_TABLE_OVERRIDE!=y or CONFIG_ACPI_TABLE_UPGRADE!=y"
1395 if [[ $early_microcode == yes ]]; then
1396 if [[ $hostonly ]]; then
1397 if [[ $
(get_cpu_vendor
) == "AMD" ]]; then
1398 check_kernel_config CONFIG_MICROCODE_AMD ||
unset early_microcode
1399 elif [[ $
(get_cpu_vendor
) == "Intel" ]]; then
1400 check_kernel_config CONFIG_MICROCODE_INTEL ||
unset early_microcode
1402 unset early_microcode
1405 ! check_kernel_config CONFIG_MICROCODE_AMD \
1406 && ! check_kernel_config CONFIG_MICROCODE_INTEL \
1407 && unset early_microcode
1409 # Do not complain on non-x86 architectures as it makes no sense
1412 [[ $early_microcode != yes ]] \
1413 && dwarn
"Disabling early microcode, because kernel does not support it. CONFIG_MICROCODE_[AMD|INTEL]!=y"
1419 # Need to be able to have non-root users read stuff (rpcbind etc)
1420 chmod 755 "$initdir"
1422 if [[ $hostonly ]]; then
1423 for i
in /sys
/proc
/run
/dev
; do
1424 if ! findmnt
--target "$i" &> /dev
/null
; then
1425 dwarning
"Turning off host-only mode: '$i' is not mounted!"
1431 declare -A host_fs_types
1433 for line
in "${fstab_lines[@]}"; do
1434 # shellcheck disable=SC2086
1440 dev
=$
(blkid
-l -t "UUID=${dev#UUID=}" -o device
)
1443 dev
=$
(blkid
-l -t "LABEL=${dev#LABEL=}" -o device
)
1446 dev
=$
(blkid
-l -t "PARTUUID=${dev#PARTUUID=}" -o device
)
1449 dev
=$
(blkid
-l -t "PARTLABEL=${dev#PARTLABEL=}" -o device
)
1452 [ -z "$dev" ] && dwarn
"Bad fstab entry $*" && continue
1453 if [[ $3 == btrfs
]]; then
1454 for mp
in $
(findmnt
--source "$1" -o TARGET
-n); do
1455 for i
in $
(btrfs_devs
"$mp"); do
1459 elif [[ $3 == zfs
]]; then
1460 for mp
in $
(zfs_devs
"$1"); do
1461 push_host_devs
"$mp"
1464 push_host_devs
"$dev"
1465 host_fs_types
["$dev"]="$3"
1468 for f
in $add_fstab; do
1469 [[ -e $f ]] ||
continue
1470 while read -r dev rest ||
[ -n "$dev" ]; do
1471 push_host_devs
"$dev"
1475 for dev
in $add_device; do
1476 push_host_devs
"$dev"
1479 if ((${#add_device_l[@]})); then
1480 add_device
+=" ${add_device_l[*]} "
1481 push_host_devs
"${add_device_l[@]}"
1484 if [[ $hostonly ]] && [[ $hostonly_default_device != "no" ]]; then
1485 # in hostonly mode, determine all devices, which have to be accessed
1486 # and examine them for filesystem types
1503 mp
=$
(readlink
-f "$dracutsysrootdir$mp")
1504 mountpoint
"$mp" > /dev
/null
2>&1 ||
continue
1505 _dev
=$
(find_block_device
"$mp")
1506 _bdev
=$
(readlink
-f "/dev/block/$_dev")
1507 [[ -b $_bdev ]] && _dev
=$_bdev
1508 [[ $mp == "/" ]] && root_devs
+=("$_dev")
1509 push_host_devs
"$_dev"
1510 if [[ $
(find_mp_fstype
"$mp") == btrfs
]]; then
1511 for i
in $
(btrfs_devs
"$mp"); do
1512 [[ $mp == "/" ]] && root_devs
+=("$i")
1515 elif [[ $
(find_mp_fstype
"$mp") == zfs
]]; then
1516 for i
in $
(zfs_devs
"$(findmnt -n -o SOURCE "$mp")"); do
1517 [[ $mp == "/" ]] && root_devs
+=("$i")
1524 # TODO - with sysroot, /proc/swaps is not relevant
1525 if [[ -f /proc
/swaps
]] && [[ -f $dracutsysrootdir/etc
/fstab
]]; then
1526 while read -r dev
type rest ||
[ -n "$dev" ]; do
1527 [[ -b $dev ]] ||
continue
1528 [[ $type == "partition" ]] ||
continue
1530 while read -r _d _m _t _o _ ||
[ -n "$_d" ]; do
1531 [[ $_d == \
#* ]] && continue
1532 [[ $_d ]] ||
continue
1533 [[ $_t != "swap" ]] && continue
1534 [[ $_m != "swap" ]] && [[ $_m != "none" ]] && continue
1535 [[ $_o == *noauto
* ]] && continue
1536 _d
=$
(expand_persistent_dev
"$_d")
1537 [[ $_d -ef $dev ]] ||
continue
1539 if [[ -f $dracutsysrootdir/etc
/crypttab
]]; then
1540 while read -r _mapper _ _p _o ||
[ -n "$_mapper" ]; do
1541 [[ $_mapper == \
#* ]] && continue
1542 [[ $_d -ef /dev
/mapper
/"$_mapper" ]] ||
continue
1543 [[ "$_o" ]] || _o
="$_p"
1544 # skip entries with password files
1545 [[ $_p == /* ]] && [[ -f $_p ]] && continue 2
1547 [[ $_o == *swap
* ]] && continue 2
1548 done < "$dracutsysrootdir"/etc
/crypttab
1551 _dev
="$(readlink -f "$dev")"
1552 push_host_devs
"$_dev"
1553 swap_devs
+=("$_dev")
1555 done < "$dracutsysrootdir"/etc
/fstab
1559 # collect all "x-initrd.mount" entries from /etc/fstab
1560 if [[ -f $dracutsysrootdir/etc
/fstab
]]; then
1561 while read -r _d _m _t _o _ ||
[ -n "$_d" ]; do
1562 [[ $_d == \
#* ]] && continue
1563 [[ $_d ]] ||
continue
1564 [[ $_o != *x-initrd.mount
* ]] && continue
1565 _dev
=$
(expand_persistent_dev
"$_d")
1566 _dev
="$(readlink -f "$_dev")"
1567 [[ -b $_dev ]] ||
continue
1569 push_host_devs
"$_dev"
1570 if [[ $_t == btrfs
]]; then
1571 for i
in $
(btrfs_devs
"$_m"); do
1574 elif [[ $_t == zfs
]]; then
1575 for i
in $
(zfs_devs
"$_d"); do
1579 done < "$dracutsysrootdir"/etc
/fstab
1588 if [[ -b /dev
/block
/$1 ]]; then
1589 ID_FS_TYPE
=$
(get_fs_env
"/dev/block/$1") && host_fs_types
["$(readlink -f "/dev
/block
/$1")"]="$ID_FS_TYPE"
1592 if [[ -b $1 ]]; then
1593 ID_FS_TYPE
=$
(get_fs_env
"$1") && host_fs_types
["$(readlink -f "$1")"]="$ID_FS_TYPE"
1596 if fstype
=$
(find_dev_fstype
"$1"); then
1597 host_fs_types
["$1"]="$fstype"
1603 for dev
in "${host_devs[@]}"; do
1605 check_block_and_slaves_all _get_fs_type
"$(get_maj_min "$dev")"
1608 for dev
in "${!host_fs_types[@]}"; do
1609 [[ ${host_fs_types[$dev]} == "reiserfs" ]] ||
[[ ${host_fs_types[$dev]} == "xfs" ]] ||
continue
1610 rootopts
=$
(find_dev_fsopts
"$dev")
1611 if [[ ${host_fs_types[$dev]} == "reiserfs" ]]; then
1612 journaldev
=$
(fs_get_option
"$rootopts" "jdev")
1613 elif [[ ${host_fs_types[$dev]} == "xfs" ]]; then
1614 journaldev
=$
(fs_get_option
"$rootopts" "logdev")
1616 if [[ $journaldev ]]; then
1617 dev
="$(readlink -f "$dev")"
1618 push_host_devs
"$dev"
1620 check_block_and_slaves_all _get_fs_type
"$(get_maj_min "$dev")"
1624 [[ -d $dracutsysrootdir$dbus ]] \
1625 || dbus
=$
(pkg-config dbus
--variable=dbus
2> /dev
/null
)
1627 [[ -d $dracutsysrootdir$dbus ]] || dbus
=/usr
/share
/dbus-1
1629 [[ -d $dracutsysrootdir$dbusconfdir ]] \
1630 || dbusconfdir
=$
(pkg-config dbus
--variable=dbusconfdir
2> /dev
/null
)
1632 [[ -d $dracutsysrootdir$dbusconfdir ]] || dbusconfdir
=/etc
/dbus-1
1634 [[ -d $dracutsysrootdir$dbusinterfaces ]] \
1635 || dbusinterfaces
=$
(pkg-config dbus
--variable=dbusinterfaces
2> /dev
/null
)
1637 [[ -d $dracutsysrootdir$dbusinterfaces ]] || dbusinterfaces
=${dbus}/interfaces
1639 [[ -d $dracutsysrootdir$dbusinterfacesconfdir ]] \
1640 || dbusinterfacesconfdir
=$
(pkg-config dbus
--variable=dbusinterfacesconfdir
2> /dev
/null
)
1642 [[ -d $dracutsysrootdir$dbusinterfacesconfdir ]] || dbusinterfacesconfdir
=${dbusconfdir}/interfaces
1644 [[ -d $dracutsysrootdir$dbusservices ]] \
1645 || dbusservices
=$
(pkg-config dbus
--variable=dbusservices
2> /dev
/null
)
1647 [[ -d $dracutsysrootdir$dbusservices ]] || dbusservices
=${dbus}/services
1649 [[ -d $dracutsysrootdir$dbusservicesconfdir ]] \
1650 || dbusservicesconfdir
=$
(pkg-config dbus
--variable=dbusservicesconfdir
2> /dev
/null
)
1652 [[ -d $dracutsysrootdir$dbusservicesconfdir ]] || dbusservicesconfdir
=${dbusconfdir}/services
1654 [[ -d $dracutsysrootdir$dbussession ]] \
1655 || dbussession
=$
(pkg-config dbus
--variable=dbussession
2> /dev
/null
)
1657 [[ -d $dracutsysrootdir$dbussession ]] || dbussession
=${dbus}/session.d
1659 [[ -d $dracutsysrootdir$dbussessionconfdir ]] \
1660 || dbussessionconfdir
=$
(pkg-config dbus
--variable=dbussessionconfdir
2> /dev
/null
)
1662 [[ -d $dracutsysrootdir$dbussessionconfdir ]] || dbussessionconfdir
=${dbusconfdir}/session.d
1664 [[ -d $dracutsysrootdir$dbussystem ]] \
1665 || dbussystem
=$
(pkg-config dbus
--variable=dbussystem
2> /dev
/null
)
1667 [[ -d $dracutsysrootdir$dbussystem ]] || dbussystem
=${dbus}/system.d
1669 [[ -d $dracutsysrootdir$dbussystemconfdir ]] \
1670 || dbussystemconfdir
=$
(pkg-config dbus
--variable=dbussystemconfdir
2> /dev
/null
)
1672 [[ -d $dracutsysrootdir$dbussystemconfdir ]] || dbussystemconfdir
=${dbusconfdir}/system.d
1674 [[ -d $dracutsysrootdir$dbussystemservices ]] \
1675 || dbussystemservices
=$
(pkg-config dbus
--variable=dbussystemservices
2> /dev
/null
)
1677 [[ -d $dracutsysrootdir$dbussystemservices ]] || dbussystemservices
=${dbus}/system-services
1679 [[ -d $dracutsysrootdir$dbussystemservicesconfdir ]] \
1680 || dbussystemservicesconfdir
=$
(pkg-config dbus
--variable=dbussystemservicesconfdir
2> /dev
/null
)
1682 [[ -d $dracutsysrootdir$dbussystemservicesconfdir ]] || dbussystemservicesconfdir
=${dbusconfdir}/system-services
1684 [[ -d $dracutsysrootdir$udevdir ]] \
1685 || udevdir
="$(pkg-config udev --variable=udevdir 2> /dev/null)"
1686 if ! [[ -d $dracutsysrootdir$udevdir ]]; then
1687 [[ -e $dracutsysrootdir/lib
/udev
/ata_id
]] && udevdir
=/lib
/udev
1688 [[ -e $dracutsysrootdir/usr
/lib
/udev
/ata_id
]] && udevdir
=/usr
/lib
/udev
1691 [[ -d $dracutsysrootdir$udevconfdir ]] \
1692 || udevconfdir
=$
(pkg-config udev
--variable=udevconfdir
2> /dev
/null
)
1694 [[ -d $dracutsysrootdir$udevconfdir ]] || udevconfdir
=/etc
/udev
1696 [[ -d $dracutsysrootdir$udevrulesdir ]] \
1697 || udevrulesdir
=$
(pkg-config udev
--variable=udevrulesdir
2> /dev
/null
)
1699 [[ -d $dracutsysrootdir$udevrulesdir ]] || udevrulesdir
=${udevdir}/rules.d
1701 [[ -d $dracutsysrootdir$udevrulesconfdir ]] \
1702 || udevrulesconfdir
=$
(pkg-config udev
--variable=udevrulesconfdir
2> /dev
/null
)
1704 [[ -d $dracutsysrootdir$udevrulesconfdir ]] || udevrulesconfdir
=${udevconfdir}/rules.d
1706 [[ -d $dracutsysrootdir$sysctld ]] \
1707 || sysctld
=$
(pkg-config systemd
--variable=sysctld
2> /dev
/null
)
1709 [[ -d $dracutsysrootdir$sysctld ]] || sysctld
=/usr
/lib
/sysctl.d
1711 [[ -d $dracutsysrootdir$sysctlconfdir ]] \
1712 || sysctlconfdir
=$
(pkg-config systemd
--variable=sysctlconfdir
2> /dev
/null
)
1714 [[ -d $dracutsysrootdir$sysctlconfdir ]] || sysctlconfdir
=/etc
/sysctl.d
1716 [[ -d $dracutsysrootdir$environment ]] \
1717 || environment
=$
(pkg-config systemd
--variable=environment
2> /dev
/null
)
1719 [[ -d $dracutsysrootdir$environment ]] || environment
=/usr
/lib
/environment.d
1721 [[ -d $dracutsysrootdir$environmentconfdir ]] \
1722 || environmentconfdir
=$
(pkg-config systemd
--variable=environmentconfdir
2> /dev
/null
)
1724 [[ -d $dracutsysrootdir$environmentconfdir ]] || environmentconfdir
=/etc
/environment.d
1726 [[ -d $dracutsysrootdir$systemdcatalog ]] \
1727 || systemdcatalog
=$
(pkg-config systemd
--variable=systemdcatalog
2> /dev
/null
)
1729 [[ -d $dracutsysrootdir$systemdcatalog ]] || systemdcatalog
=${systemdutildir}/catalog
1731 [[ -d $dracutsysrootdir$modulesload ]] \
1732 || modulesload
=$
(pkg-config systemd
--variable=modulesload
2> /dev
/null
)
1734 [[ -d $dracutsysrootdir$modulesload ]] || modulesload
=/usr
/lib
/modules-load.d
1736 [[ -d $dracutsysrootdir$modulesloadconfdir ]] \
1737 || modulesloadconfdir
=$
(pkg-config systemd
--variable=modulesloadconfdir
2> /dev
/null
)
1739 [[ -d $dracutsysrootdir$modulesloadconfdir ]] || modulesloadconfdir
=/etc
/modules-load.d
1741 [[ -d $dracutsysrootdir$systemdnetwork ]] \
1742 || systemdnetwork
=$
(pkg-config systemd
--variable=systemdnetwork
2> /dev
/null
)
1744 [[ -d $dracutsysrootdir$systemdnetwork ]] || systemdnetwork
=${systemdutildir}/network
1746 [[ -d $dracutsysrootdir$systemdnetworkconfdir ]] \
1747 || systemdnetworkconfdir
=$
(pkg-config systemd
--variable=systemdnetworkconfdir
2> /dev
/null
)
1749 [[ -d $dracutsysrootdir$systemdnetworkconfdir ]] || systemdnetworkconfdir
=${systemdsystemconfdir}/network
1751 [[ -d $dracutsysrootdir$systemdntpunits ]] \
1752 || systemdntpunits
=$
(pkg-config systemd
--variable=systemdntpunits
2> /dev
/null
)
1754 [[ -d $dracutsysrootdir$systemdntpunits ]] || systemdntpunits
=${systemdutildir}/ntp-units.d
1756 [[ -d $dracutsysrootdir$systemdntpunitsconfdir ]] \
1757 || systemdntpunitsconfdir
=$
(pkg-config systemd
--variable=systemdntpunitsconfdir
2> /dev
/null
)
1759 [[ -d $dracutsysrootdir$systemdntpunitsconfdir ]] || systemdntpunitsconfdir
=${systemdsystemconfdir}/ntp-units.d
1761 [[ -d $dracutsysrootdir$systemdportable ]] \
1762 || systemdportable
=$
(pkg-config systemd
--variable=systemdportable
2> /dev
/null
)
1764 [[ -d $dracutsysrootdir$systemdportable ]] || systemdportable
=${systemdutildir}/portable
1766 [[ -d $dracutsysrootdir$systemdportableconfdir ]] \
1767 || systemdportableconfdir
=$
(pkg-config systemd
--variable=systemdportableconfdir
2> /dev
/null
)
1769 [[ -d "$dracutsysrootdir$systemdportableconfdir" ]] || systemdportableconfdir
=${systemdsystemconfdir}/portable
1771 [[ -d $dracutsysrootdir$systemdsystemunitdir ]] \
1772 || systemdsystemunitdir
=$
(pkg-config systemd
--variable=systemdsystemunitdir
2> /dev
/null
)
1774 [[ -d "$dracutsysrootdir$systemdsystemunitdir" ]] || systemdsystemunitdir
=${systemdutildir}/system
1776 [[ -d $dracutsysrootdir$systemduser ]] \
1777 || systemduser
=$
(pkg-config systemd
--variable=systemduser
2> /dev
/null
)
1779 [[ -d $dracutsysrootdir$systemduser ]] || systemduser
=${systemdutildir}/user
1781 [[ -d $dracutsysrootdir$systemduserconfdir ]] \
1782 || systemduserconfdir
=$
(pkg-config systemd
--variable=systemduserconfdir
2> /dev
/null
)
1784 [[ -d $dracutsysrootdir$systemduserconfdir ]] || systemduserconfdir
=${systemdsystemconfdir}/user
1786 [[ -d $dracutsysrootdir$systemdsystemconfdir ]] \
1787 || systemdsystemconfdir
=$
(pkg-config systemd
--variable=systemdsystemconfdir
2> /dev
/null
)
1789 [[ -d $dracutsysrootdir$systemdsystemconfdir ]] || systemdsystemconfdir
=/etc
/systemd
/system
1791 [[ -d $dracutsysrootdir$sysusers ]] \
1792 || sysusers
=$
(pkg-config systemd
--variable=sysusers
2> /dev
/null
)
1794 [[ -d $dracutsysrootdir$sysusers ]] || sysusers
=/usr
/lib
/sysusers.d
1796 [[ -d $dracutsysrootdir$sysusersconfdir ]] \
1797 || sysusersconfdir
=$
(pkg-config systemd
--variable=sysusersconfdir
2> /dev
/null
)
1799 [[ -d $dracutsysrootdir$sysusersconfdir ]] || sysusersconfdir
=/etc
/sysusers.d
1801 [[ -d $dracutsysrootdir$tmpfilesdir ]] \
1802 || tmpfilesdir
=$
(pkg-config systemd
--variable=tmpfilesdir
2> /dev
/null
)
1804 if ! [[ -d $dracutsysrootdir$tmpfilesdir ]]; then
1805 [[ -d $dracutsysrootdir/lib
/tmpfiles.d
]] && tmpfilesdir
=/lib
/tmpfiles.d
1806 [[ -d $dracutsysrootdir/usr
/lib
/tmpfiles.d
]] && tmpfilesdir
=/usr
/lib
/tmpfiles.d
1809 [[ -d $dracutsysrootdir$tmpfilesconfdir ]] \
1810 || tmpfilesconfdir
=$
(pkg-config systemd
--variable=tmpfilesconfdir
2> /dev
/null
)
1812 [[ -d $dracutsysrootdir$tmpfilesconfdir ]] || tmpfilesconfdir
=/etc
/tmpfiles.d
1814 [[ -d $dracutsysrootdir$depmodd ]] \
1815 || depmodd
=$
(pkg-config libkmod
--variable=depmodd
2> /dev
/null
)
1817 [[ -d $dracutsysrootdir$depmodd ]] || depmodd
=/usr
/lib
/depmod.d
1819 [[ -d $dracutsysrootdir$depmodconfdir ]] \
1820 || depmodconfdir
=$
(pkg-config libkmod
--variable=depmodconfdir
2> /dev
/null
)
1822 [[ -d $dracutsysrootdir$depmodconfdir ]] || depmodconfdir
=/etc
/depmod.d
1824 export initdir dracutbasedir \
1825 dracutmodules force_add_dracutmodules add_dracutmodules omit_dracutmodules \
1827 fw_dir drivers_dir debug no_kernel kernel_only \
1828 omit_drivers mdadmconf lvmconf root_devs \
1829 use_fstab fstab_lines libdirs fscks nofscks ro_mnt \
1830 stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \
1831 debug host_fs_types host_devs swap_devs sshkey add_fstab \
1832 DRACUT_VERSION udevdir udevconfdir udevrulesdir udevrulesconfdir \
1833 prefix filesystems drivers dbus dbusconfdir dbusinterfaces \
1834 dbusinterfacesconfdir dbusservices dbusservicesconfdir dbussession \
1835 dbussessionconfdir dbussystem dbussystemconfdir dbussystemservices \
1836 dbussystemservicesconfdir environment environmentconfdir modulesload \
1837 modulesloadconfdir sysctld sysctlconfdir sysusers sysusersconfdir \
1838 systemdutildir systemdutilconfdir systemdcatalog systemdntpunits \
1839 systemdntpunitsconfdir systemdsystemunitdir systemdsystemconfdir \
1840 hostonly_cmdline loginstall tmpfilesdir tmpfilesconfdir depmodd \
1844 # check all our modules to see if they should be sourced.
1845 # This builds a list of modules that we will install next.
1846 for_each_module_dir check_module
1847 for_each_module_dir check_mount
1849 dracut_module_included
"fips" && export DRACUT_FIPS_MODE
=1
1851 do_print_cmdline
() {
1852 local -A _mods_to_print
1853 for i
in $modules_loaded $mods_to_load; do
1854 _mods_to_print
[$i]=1
1857 # source our modules.
1858 for moddir
in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
1859 _d_mod
=${moddir##*/}
1860 _d_mod
=${_d_mod#[0-9][0-9]}
1861 [[ ${_mods_to_print[$_d_mod]} ]] ||
continue
1862 module_cmdline
"$_d_mod" "$moddir"
1867 if [[ $print_cmdline ]]; then
1873 # Create some directory structure first
1874 # shellcheck disable=SC2174
1875 [[ $prefix ]] && mkdir
-m 0755 -p "${initdir}${prefix}"
1877 # shellcheck disable=SC2174
1878 [[ -L $dracutsysrootdir/lib
]] || mkdir
-m 0755 -p "${initdir}${prefix}/lib"
1879 [[ $prefix ]] && ln -sfn "${prefix#/}/lib" "$initdir/lib"
1881 if [[ $prefix ]]; then
1882 for d
in bin etc lib sbin tmp usr var
$libdirs; do
1884 [[ $d == */* ]] && continue
1885 ln -sfn "${prefix#/}/${d#/}" "$initdir/$d"
1889 if [[ $kernel_only != yes ]]; then
1890 for d
in usr usr
/bin usr
/sbin bin etc lib sbin tmp var var
/tmp
$libdirs; do
1892 [[ -e "${initdir}${prefix}/$d" ]] && continue
1893 if [ -L "/$d" ]; then
1894 inst_symlink
"/$d" "${prefix}/$d"
1896 # shellcheck disable=SC2174
1897 mkdir
-m 0755 -p "${initdir}${prefix}/$d"
1901 for d
in dev proc sys sysroot root run
; do
1902 if [ -L "/$d" ]; then
1905 # shellcheck disable=SC2174
1906 mkdir
-m 0755 -p "$initdir/$d"
1910 ln -sfn ..
/run
"$initdir/var/run"
1911 ln -sfn ..
/run
/lock
"$initdir/var/lock"
1913 for d
in lib
"$libdirs"; do
1914 [[ -e "${initdir}${prefix}/$d" ]] && continue
1915 if [ -h "/$d" ]; then
1916 inst
"/$d" "${prefix}/$d"
1918 # shellcheck disable=SC2174
1919 mkdir
-m 0755 -p "${initdir}${prefix}/$d"
1924 if [[ $kernel_only != yes ]]; then
1925 mkdir
-p "${initdir}/etc/cmdline.d"
1926 # shellcheck disable=SC2174
1927 mkdir
-m 0755 -p "${initdir}"/lib "${initdir}"/lib/dracut "${initdir}"/lib
/dracut
/hooks
1928 # shellcheck disable=SC2154
1929 for _d
in $hookdirs; do
1930 # shellcheck disable=SC2174
1931 mkdir
-m 0755 -p "${initdir}/lib/dracut/hooks/$_d"
1933 if [[ $EUID == "0" ]] && ! [[ $DRACUT_NO_MKNOD ]]; then
1934 [[ -c ${initdir}/dev
/null
]] || mknod
"${initdir}"/dev
/null c
1 3
1935 [[ -c ${initdir}/dev
/kmsg
]] || mknod
"${initdir}"/dev
/kmsg c
1 11
1936 [[ -c ${initdir}/dev
/console
]] || mknod
"${initdir}"/dev
/console c
5 1
1937 [[ -c ${initdir}/dev
/random
]] || mknod
"${initdir}"/dev
/random c
1 8
1938 [[ -c ${initdir}/dev
/urandom
]] || mknod
"${initdir}"/dev
/urandom c
1 9
1942 _isize
=0 #initramfs size
1944 # source our modules.
1945 for moddir
in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
1946 _d_mod
=${moddir##*/}
1947 _d_mod
=${_d_mod#[0-9][0-9]}
1948 [[ $mods_to_load == *\
$_d_mod\
* ]] ||
continue
1949 if [[ $show_modules == yes ]]; then
1950 printf "%s\n" "$_d_mod"
1952 dinfo
"*** Including module: $_d_mod ***"
1954 if [[ $kernel_only == yes ]]; then
1955 module_installkernel
"$_d_mod" "$moddir" ||
{
1956 dfatal
"installkernel failed in module $_d_mod"
1960 module_install
"$_d_mod" "$moddir"
1961 if [[ $no_kernel != yes ]]; then
1962 module_installkernel
"$_d_mod" "$moddir" ||
{
1963 dfatal
"installkernel failed in module $_d_mod"
1968 mods_to_load
=${mods_to_load// $_d_mod /}
1969 modules_loaded
+="$_d_mod "
1971 #print the module install size
1972 if [ -n "$printsize" ]; then
1973 _isize_new
=$
(du
-sk "${initdir}" |
{
1977 _isize_delta
=$
((_isize_new
- _isize
))
1978 printf "%s\n" "$_d_mod install size: ${_isize_delta}k"
1984 for i
in $modules_loaded; do
1985 mkdir
-p "$initdir"/lib
/dracut
1986 printf "%s\n" "$i" >> "$initdir"/lib
/dracut
/modules.txt
1989 dinfo
"*** Including modules done ***"
1991 ## final stuff that has to happen
1992 if [[ $no_kernel != yes ]]; then
1993 if [[ $hostonly_mode == "strict" ]]; then
1994 cp "$DRACUT_KERNEL_MODALIASES" "$initdir"/lib
/dracut
/hostonly-kernel-modules.txt
1997 if [[ $drivers ]]; then
1998 # shellcheck disable=SC2086
1999 hostonly
='' instmods
$drivers
2002 if [[ -n ${add_drivers// /} ]]; then
2003 # shellcheck disable=SC2086
2004 hostonly
='' instmods
-c $add_drivers
2006 if [[ $force_drivers ]]; then
2007 # shellcheck disable=SC2086
2008 hostonly
='' instmods
-c $force_drivers
2009 rm -f "$initdir"/etc
/cmdline.d
/20-force_driver.conf
2010 for mod
in $force_drivers; do
2011 echo "rd.driver.pre=$mod" >> "$initdir"/etc
/cmdline.d
/20-force_drivers.conf
2014 if [[ $filesystems ]]; then
2015 # shellcheck disable=SC2086
2016 hostonly
='' instmods
-c $filesystems
2019 dinfo
"*** Installing kernel module dependencies ***"
2021 dinfo
"*** Installing kernel module dependencies done ***"
2023 if [[ $noimageifnotneeded == yes ]] && [[ $hostonly ]]; then
2024 if [[ ! -f "$initdir/lib/dracut/need-initqueue" ]] \
2025 && [[ -f ${initdir}/lib
/modules
/$kernel/modules.dep
&& ! -s ${initdir}/lib
/modules
/$kernel/modules.dep
]]; then
2026 for i
in "${initdir}"/etc
/cmdline.d
/*.conf
; do
2027 # We need no initramfs image and do not generate one.
2028 [[ $i == "${initdir}/etc/cmdline.d/*.conf" ]] && exit 0
2034 if [[ $kernel_only != yes ]]; then
2035 # FIXME: handle legacy item split
2036 # shellcheck disable=SC2068
2037 ((${#install_items[@]} > 0)) && inst_multiple
${install_items[@]}
2038 # shellcheck disable=SC2068
2039 ((${#install_optional_items[@]} > 0)) && inst_multiple
-o ${install_optional_items[@]}
2041 if [[ $kernel_cmdline ]] && [[ $uefi != yes ]]; then
2042 printf "%s\n" "$kernel_cmdline" >> "${initdir}/etc/cmdline.d/01-default.conf"
2045 for line
in "${fstab_lines[@]}"; do
2046 read -r -a fstab_field
<<< "$line"
2047 if [ -z "${fstab_field[1]}" ]; then
2048 # Determine device and mount options from current system
2049 mountpoint
-q "${fstab_field[0]}" || derror
"${fstab_field[0]} is not a mount point!"
2050 read -r -a fstab_field
< <(findmnt
--raw -n --target "${fstab_field[0]}" --output=source,target
,fstype
,options
)
2051 dinfo
"Line for ${fstab_field[1]}: ${fstab_field[*]}"
2053 # Use default options
2054 [ -z "${fstab_field[3]}" ] && fstab_field
[3]="defaults"
2057 # Default options for freq and passno
2058 [ -z "${fstab_field[4]}" ] && fstab_field
[4]="0"
2059 [ -z "${fstab_field[5]}" ] && fstab_field
[5]="2"
2061 strstr
"${fstab_field[2]}" "nfs" && fstab_field
[5]="0"
2062 echo "${fstab_field[@]}" >> "${initdir}/etc/fstab"
2065 for f
in $add_fstab; do
2066 cat "$f" >> "${initdir}/etc/fstab"
2069 if [[ $dracutsysrootdir$systemdutildir ]]; then
2070 if [[ -d ${initdir}/$systemdutildir ]]; then
2071 mkdir
-p "${initdir}"/etc
/conf.d
2073 printf "%s\n" "systemdutildir=\"$systemdutildir\""
2074 printf "%s\n" "systemdsystemunitdir=\"$systemdsystemunitdir\""
2075 printf "%s\n" "systemdsystemconfdir=\"$systemdsystemconfdir\""
2076 } > "${initdir}"/etc
/conf.d
/systemd.conf
2080 if [[ $DRACUT_RESOLVE_LAZY ]] && [[ $DRACUT_INSTALL ]]; then
2081 dinfo
"*** Resolving executable dependencies ***"
2082 find "$initdir" -type f
-perm /0111 -not -path '*.ko' -print0 \
2083 |
xargs -r -0 "$DRACUT_INSTALL" ${initdir:+-D "$initdir"} ${dracutsysrootdir:+-r "$dracutsysrootdir"} -R ${DRACUT_FIPS_MODE:+-f} --
2084 dinfo
"*** Resolving executable dependencies done ***"
2087 # Now we are done with lazy resolving, always install dependencies
2088 unset DRACUT_RESOLVE_LAZY
2089 export DRACUT_RESOLVE_DEPS
=1
2092 for ((i
= 0; i
< ${#include_src[@]}; i
++)); do
2093 src
="${include_src[$i]}"
2094 target
="${include_target[$i]}"
2095 if [[ $src && $target ]]; then
2096 if [[ -f $src ]]; then
2097 inst
"$src" "$target"
2098 elif [[ -d $src ]]; then
2099 ddebug
"Including directory: $src"
2100 destdir
="${initdir}/${target}"
2102 # check for preexisting symlinks, so we can cope with the
2103 # symlinks to $prefix
2104 # Objectname is a file or a directory
2105 reset_dotglob
="$(shopt -p dotglob)"
2107 for objectname
in "$src"/*; do
2108 [[ -e $objectname ||
-L $objectname ]] ||
continue
2109 if [[ -d $objectname ]] && [[ ! -L $objectname ]]; then
2110 # objectname is a directory, let's compute the final directory name
2111 object_destdir
=${destdir}/${objectname#$src/}
2112 if ! [[ -e $object_destdir ]]; then
2113 # shellcheck disable=SC2174
2114 mkdir
-m 0755 -p "$object_destdir"
2115 chmod --reference="$objectname" "$object_destdir"
2117 $DRACUT_CP -t "$object_destdir" "$dracutsysrootdir$objectname"/.
2119 $DRACUT_CP -t "$destdir" "$dracutsysrootdir$objectname"
2122 eval "$reset_dotglob"
2123 elif [[ -e $src ]]; then
2124 derror
"$src is neither a directory nor a regular file"
2126 derror
"$src doesn't exist"
2131 if [[ $do_hardlink == yes ]] && command -v hardlink
> /dev
/null
; then
2132 dinfo
"*** Hardlinking files ***"
2133 hardlink
"$initdir" 2>&1 | dinfo
2134 dinfo
"*** Hardlinking files done ***"
2138 if [[ $do_strip == yes ]]; then
2139 # Prefer strip from elfutils for package size
2141 strip_cmd
=$
(command -v eu-strip
)
2142 [ -z "$strip_cmd" ] && strip_cmd
="strip"
2144 for p
in $strip_cmd xargs find; do
2145 if ! type -P $p > /dev
/null
; then
2146 dinfo
"Could not find '$p'. Not stripping the initramfs."
2151 if [[ $aggresive_strip ]]; then
2152 # `eu-strip` and `strip` both strips all unneeded parts by default
2159 # cleanup empty ldconfig_paths directories
2160 for d
in $
(ldconfig_paths
); do
2161 rmdir -p --ignore-fail-on-non-empty "$initdir/$d" > /dev
/null
2>&1
2164 if [[ $early_microcode == yes ]]; then
2165 dinfo
"*** Generating early-microcode cpio image ***"
2166 ucode_dir
=(amd-ucode intel-ucode
)
2167 ucode_dest
=(AuthenticAMD.bin GenuineIntel.bin
)
2168 _dest_dir
="$early_cpio_dir/d/kernel/x86/microcode"
2170 mkdir
-p "$_dest_dir"
2171 if [[ $hostonly ]]; then
2172 [[ $
(get_cpu_vendor
) == "AMD" ]] && _dest_idx
="0"
2173 [[ $
(get_cpu_vendor
) == "Intel" ]] && _dest_idx
="1"
2175 for idx
in $_dest_idx; do
2176 _fw
=${ucode_dir[$idx]}
2177 for _fwdir
in $fw_dir; do
2178 if [[ -d $_fwdir && -d $_fwdir/$_fw ]]; then
2180 dinfo
"*** Constructing ${ucode_dest[$idx]} ***"
2181 if [[ $hostonly ]]; then
2182 _src
=$
(get_ucode_file
)
2183 [[ $_src ]] ||
break
2184 [[ -r $_fwdir/$_fw/$_src ]] || _src
="${_src}.early"
2185 [[ -r $_fwdir/$_fw/$_src ]] ||
break
2188 for i
in $_fwdir/$_fw/$_src; do
2189 [ -e "$i" ] && break
2192 for i
in $_fwdir/$_fw/$_src; do
2193 [[ -e $i ]] ||
continue
2195 str_ends
"$i" ".asc" && continue
2196 cat "$i" >> "$_dest_dir/${ucode_dest[$idx]}"
2198 create_early_cpio
="yes"
2201 if [[ ! -e "$_dest_dir/${ucode_dest[$idx]}" ]]; then
2202 if cd "$early_cpio_dir/d"; then
2203 for _ucodedir
in "${early_microcode_image_dir[@]}"; do
2204 for _ucodename
in "${early_microcode_image_name[@]}"; do
2205 [[ -e "$_ucodedir/$_ucodename" ]] \
2206 && cpio --extract --file "$_ucodedir/$_ucodename" --quiet \
2207 "kernel/x86/microcode/${ucode_dest[$idx]}"
2208 if [[ -e "$_dest_dir/${ucode_dest[$idx]}" ]]; then
2209 dinfo
"*** Using microcode found in '$_ucodedir/$_ucodename' ***"
2210 create_early_cpio
="yes"
2220 if [[ $acpi_override == yes ]] && [[ -d $acpi_table_dir ]]; then
2221 dinfo
"*** Packaging ACPI tables to override BIOS provided ones ***"
2222 _dest_dir
="$early_cpio_dir/d/kernel/firmware/acpi"
2223 mkdir
-p "$_dest_dir"
2224 for table
in "$acpi_table_dir"/*.aml
; do
2225 dinfo
" Adding ACPI table: $table"
2226 $DRACUT_CP "$table" "$_dest_dir"
2227 create_early_cpio
="yes"
2231 dinfo
"*** Store current command line parameters ***"
2232 if ! (echo "$PARMS_TO_STORE" > "$initdir"/lib
/dracut
/build-parameter.txt
); then
2233 dfatal
"Could not store the current command line parameters"
2237 if [[ $hostonly_cmdline == "yes" ]]; then
2238 unset _stored_cmdline
2239 if [[ -d $initdir/etc
/cmdline.d
]]; then
2240 dinfo
"Stored kernel commandline:"
2241 for conf
in "$initdir"/etc
/cmdline.d
/*.conf
; do
2242 [ -e "$conf" ] ||
continue
2243 dinfo
"$(< "$conf")"
2247 if ! [[ $_stored_cmdline ]]; then
2248 dinfo
"No dracut internal kernel commandline stored in the initramfs"
2252 if [[ $kernel_only != yes ]]; then
2253 # libpthread workaround: pthread_cancel wants to dlopen libgcc_s.so
2254 for _dir
in $libdirs; do
2255 for _f
in "$dracutsysrootdir$_dir/libpthread.so"*; do
2256 [[ -e $_f ]] ||
continue
2257 inst_libdir_file
"libgcc_s.so*"
2262 # FIPS workaround for Fedora/RHEL: libcrypto needs libssl when FIPS is enabled
2263 if [[ $DRACUT_FIPS_MODE ]]; then
2264 for _dir
in $libdirs; do
2265 for _f
in "$dracutsysrootdir$_dir/libcrypto.so"*; do
2266 [[ -e $_f ]] ||
continue
2267 inst_libdir_file
-o "libssl.so*"
2274 if [[ $kernel_only != yes ]]; then
2275 # make sure that library links are correct and up to date
2276 for f
in "$dracutsysrootdir"/etc
/ld.so.conf
"$dracutsysrootdir"/etc
/ld.so.conf.d
/*; do
2277 [[ -f $f ]] && inst_simple
"${f#$dracutsysrootdir}"
2279 if ! $DRACUT_LDCONFIG -r "$initdir" -f /etc
/ld.so.conf
; then
2280 if [[ $EUID == 0 ]]; then
2281 derror
"ldconfig exited ungracefully"
2283 derror
"ldconfig might need uid=0 (root) for chroot()"
2288 if dracut_module_included
"squash"; then
2289 readonly squash_dir
="$initdir/squash/root"
2290 readonly squash_img
="$initdir/squash-root.img"
2291 mkdir
-p "$squash_dir"
2292 dinfo
"*** Install squash loader ***"
2293 DRACUT_SQUASH_POST_INST
=1 module_install
"squash"
2296 if [[ $do_strip == yes ]] && ! [[ $DRACUT_FIPS_MODE ]]; then
2297 # stripping files negates (dedup) benefits of using reflink
2298 [[ -n $enhanced_cpio ]] && ddebug
"strip is enabled alongside cpio reflink"
2299 dinfo
"*** Stripping files ***"
2300 find "$initdir" -type f \
2301 -executable -not -path '*/lib/modules/*.ko' -print0 \
2302 |
xargs -r -0 $strip_cmd "${strip_args[@]}" 2> /dev
/null
2304 # strip kernel modules, but do not touch signed modules
2305 find "$initdir" -type f
-path '*/lib/modules/*.ko' -print0 \
2306 |
while read -r -d $
'\0' f ||
[ -n "$f" ]; do
2307 SIG
=$
(tail -c 28 "$f" |
tr -d '\000')
2308 [[ $SIG == '~Module signature appended~' ]] ||
{ printf "%s\000" "$f"; }
2309 done |
xargs -r -0 $strip_cmd "${strip_args[@]}"
2310 dinfo
"*** Stripping files done ***"
2313 if dracut_module_included
"squash"; then
2314 dinfo
"*** Squashing the files inside the initramfs ***"
2315 declare squash_compress_arg
2316 # shellcheck disable=SC2086
2317 if [[ $squash_compress ]]; then
2318 if ! mksquashfs
/dev
/null
"$DRACUT_TMPDIR"/.squash-test.img
-no-progress -comp $squash_compress &> /dev
/null
; then
2319 dwarn
"mksquashfs doesn't support compressor '$squash_compress', failing back to default compressor."
2321 squash_compress_arg
="$squash_compress"
2325 # shellcheck disable=SC2086
2326 if ! mksquashfs
"$squash_dir" "$squash_img" \
2327 -no-xattrs -no-exports -noappend -no-recovery -always-use-fragments \
2328 -no-progress ${squash_compress_arg:+-comp $squash_compress_arg} 1> /dev
/null
; then
2329 dfatal
"dracut: Failed making squash image"
2333 rm -rf "$squash_dir"
2334 dinfo
"*** Squashing the files inside the initramfs done ***"
2336 # Skip initramfs compress
2340 dinfo
"*** Creating image file '$outfile' ***"
2342 if [[ $uefi == yes ]]; then
2343 readonly uefi_outdir
="$DRACUT_TMPDIR/uefi"
2344 mkdir
-p "$uefi_outdir"
2347 if [[ $DRACUT_REPRODUCIBLE ]]; then
2348 find "$initdir" -newer "$dracutbasedir/dracut-functions.sh" -print0 \
2349 |
xargs -r -0 touch -h -m -c -r "$dracutbasedir/dracut-functions.sh"
2351 if [[ "$(cpio --help)" == *--reproducible* ]]; then
2354 dinfo
"cpio does not support '--reproducible'. Resulting image will not be reproducible."
2358 [[ $EUID != 0 ]] && cpio_owner
="0:0"
2360 if [[ $create_early_cpio == yes ]]; then
2361 echo 1 > "$early_cpio_dir/d/early_cpio"
2363 if [[ $DRACUT_REPRODUCIBLE ]]; then
2364 find "$early_cpio_dir/d" -newer "$dracutbasedir/dracut-functions.sh" -print0 \
2365 |
xargs -r -0 touch -h -m -c -r "$dracutbasedir/dracut-functions.sh"
2368 # The microcode blob is _before_ the initramfs blob, not after
2369 if [[ -n $enhanced_cpio ]]; then
2372 cd "$early_cpio_dir/d"
2373 find .
-print0 |
sort -z \
2374 |
$enhanced_cpio --null ${cpio_owner:+--owner "$cpio_owner"} \
2375 --mtime 0 --data-align "$cpio_align" --truncate-existing \
2376 "${DRACUT_TMPDIR}/initramfs.img"
2378 dfatal
"dracut-cpio: creation of $outfile failed"
2384 cd "$early_cpio_dir/d"
2385 find .
-print0 |
sort -z \
2386 |
cpio ${CPIO_REPRODUCIBLE:+--reproducible} --null \
2387 ${cpio_owner:+-R "$cpio_owner"} -H newc
-o --quiet > "${DRACUT_TMPDIR}/initramfs.img"
2389 dfatal
"dracut: creation of $outfile failed"
2395 if check_kernel_config CONFIG_RD_ZSTD
; then
2396 DRACUT_KERNEL_RD_ZSTD
=yes
2398 DRACUT_KERNEL_RD_ZSTD
=
2401 if [[ $compress == $DRACUT_COMPRESS_ZSTD* && ! $DRACUT_KERNEL_RD_ZSTD ]]; then
2402 dwarn
"dracut: kernel has no zstd support compiled in."
2406 if [[ $compress && $compress != cat ]]; then
2407 if ! command -v "${compress%% *}" &> /dev
/null
; then
2408 derror
"dracut: cannot execute compression command '$compress', falling back to default"
2413 if ! [[ $compress ]]; then
2414 # check all known compressors, if none specified
2415 for i
in $DRACUT_COMPRESS_PIGZ $DRACUT_COMPRESS_GZIP $DRACUT_COMPRESS_LZ4 $DRACUT_COMPRESS_LZOP $DRACUT_COMPRESS_ZSTD $DRACUT_COMPRESS_LZMA $DRACUT_COMPRESS_XZ $DRACUT_COMPRESS_LBZIP2 $DRACUT_COMPRESS_BZIP2 $DRACUT_COMPRESS_CAT; do
2416 [[ $i != "$DRACUT_COMPRESS_ZSTD" ||
$DRACUT_KERNEL_RD_ZSTD ]] ||
continue
2417 command -v "$i" &> /dev
/null ||
continue
2421 if [[ $compress == cat ]]; then
2422 dwarn
"dracut: no compression tool available. Initramfs image is going to be big."
2424 dinfo
"dracut: using auto-determined compression method '$compress'"
2428 # choose the right arguments for the compressor
2431 if [[ $compress == lbzip2
]] ||
command -v "$DRACUT_COMPRESS_LBZIP2" &> /dev
/null
; then
2432 compress="$DRACUT_COMPRESS_LBZIP2 -9"
2434 compress="$DRACUT_COMPRESS_BZIP2 -9"
2438 compress="$DRACUT_COMPRESS_LZMA -9 -T0"
2441 compress="$DRACUT_COMPRESS_XZ --check=crc32 --lzma2=dict=1MiB -T0"
2444 if [[ $compress == pigz
]] ||
command -v "$DRACUT_COMPRESS_PIGZ" &> /dev
/null
; then
2445 compress="$DRACUT_COMPRESS_PIGZ -9 -n -T -R"
2446 elif command -v gzip &> /dev
/null
&& $DRACUT_COMPRESS_GZIP --help 2>&1 |
grep -q rsyncable
; then
2447 compress="$DRACUT_COMPRESS_GZIP -n -9 --rsyncable"
2449 compress="$DRACUT_COMPRESS_GZIP -n -9"
2453 compress="$DRACUT_COMPRESS_LZOP -9"
2456 compress="$DRACUT_COMPRESS_LZ4 -l -9"
2459 compress="$DRACUT_COMPRESS_ZSTD -15 -q -T0"
2463 if [[ -n $enhanced_cpio ]]; then
2464 if [[ $compress == "cat" ]]; then
2465 # dracut-cpio appends by default, so any ucode remains
2466 cpio_outfile
="${DRACUT_TMPDIR}/initramfs.img"
2468 ddebug
"$compress compression enabled alongside cpio reflink"
2469 # dracut-cpio doesn't output to stdout, so stage for compression
2470 cpio_outfile
="${DRACUT_TMPDIR}/initramfs.img.uncompressed"
2476 find .
-print0 |
sort -z \
2477 |
$enhanced_cpio --null ${cpio_owner:+--owner "$cpio_owner"} \
2478 --mtime 0 --data-align "$cpio_align" "$cpio_outfile" ||
exit 1
2479 [[ $compress == "cat" ]] && exit 0
2480 $compress < "$cpio_outfile" >> "${DRACUT_TMPDIR}/initramfs.img" \
2481 && rm "$cpio_outfile"
2483 dfatal
"dracut-cpio: creation of $outfile failed"
2491 find .
-print0 |
sort -z \
2492 |
cpio ${CPIO_REPRODUCIBLE:+--reproducible} --null ${cpio_owner:+-R "$cpio_owner"} -H newc
-o --quiet \
2493 |
$compress >> "${DRACUT_TMPDIR}/initramfs.img"
2495 dfatal
"dracut: creation of $outfile failed"
2500 # shellcheck disable=SC2154
2501 if ((maxloglvl
>= 5)) && ((verbosity_mod_l
>= 0)); then
2502 if [[ $allowlocal ]]; then
2503 "$dracutbasedir/lsinitrd.sh" "${DRACUT_TMPDIR}/initramfs.img" | ddebug
2505 lsinitrd
"${DRACUT_TMPDIR}/initramfs.img" | ddebug
2511 if [[ $uefi == yes ]]; then
2512 if [[ $kernel_cmdline ]]; then
2513 echo -n "$kernel_cmdline" > "$uefi_outdir/cmdline.txt"
2514 elif [[ $hostonly_cmdline == yes ]] && [ -d "$initdir/etc/cmdline.d" ]; then
2515 for conf
in "$initdir"/etc
/cmdline.d
/*.conf
; do
2516 [ -e "$conf" ] ||
continue
2517 printf "%s " "$(< "$conf")" >> "$uefi_outdir/cmdline.txt"
2521 if [[ $kernel_cmdline ]] ||
[[ $hostonly_cmdline == yes && -d "$initdir/etc/cmdline.d" ]]; then
2522 echo -ne "\x00" >> "$uefi_outdir/cmdline.txt"
2523 dinfo
"Using UEFI kernel cmdline:"
2524 dinfo
"$(tr -d '\000' < "$uefi_outdir/cmdline.txt
")"
2525 uefi_cmdline
="${uefi_outdir}/cmdline.txt"
2530 [[ -s $dracutsysrootdir/usr
/lib
/os-release
]] && uefi_osrelease
="$dracutsysrootdir/usr/lib/os-release"
2531 [[ -s $dracutsysrootdir/etc
/os-release
]] && uefi_osrelease
="$dracutsysrootdir/etc/os-release"
2532 if [[ -s ${dracutsysrootdir}${uefi_splash_image} ]]; then
2533 uefi_splash_image
="${dracutsysrootdir}${uefi_splash_image}"
2535 unset uefi_splash_image
2539 ${uefi_osrelease:+--add-section .osrel="$uefi_osrelease" --change-section-vma .osrel=0x20000} \
2540 ${uefi_cmdline:+--add-section .cmdline="$uefi_cmdline" --change-section-vma .cmdline=0x30000} \
2541 ${uefi_splash_image:+--add-section .splash="$uefi_splash_image" --change-section-vma .splash=0x40000} \
2542 --add-section .linux
="$kernel_image" --change-section-vma .linux
=0x2000000 \
2543 --add-section .initrd
="${DRACUT_TMPDIR}/initramfs.img" --change-section-vma .initrd
=0x3000000 \
2544 "$uefi_stub" "${uefi_outdir}/linux.efi"; then
2545 if [[ -n ${uefi_secureboot_key} && -n ${uefi_secureboot_cert} ]]; then
2547 --key "${uefi_secureboot_key}" \
2548 --cert "${uefi_secureboot_cert}" \
2549 --output "$outfile" "${uefi_outdir}/linux.efi"; then
2550 dinfo
"*** Creating signed UEFI image file '$outfile' done ***"
2552 dfatal
"*** Creating signed UEFI image file '$outfile' failed ***"
2556 if cp --reflink=auto
"${uefi_outdir}/linux.efi" "$outfile"; then
2557 dinfo
"*** Creating UEFI image file '$outfile' done ***"
2562 dfatal
"*** Creating UEFI image file '$outfile' failed ***"
2566 if cp --reflink=auto
"${DRACUT_TMPDIR}/initramfs.img" "$outfile"; then
2567 dinfo
"*** Creating initramfs image file '$outfile' done ***"
2570 dfatal
"dracut: creation of $outfile failed"
2575 command -v restorecon
&> /dev
/null
&& restorecon
-- "$outfile"
2578 btrfs filesystem show
"$1" |
sed -n '1s/^.*uuid: //p'
2581 freeze_ok_for_btrfs
() {
2582 local mnt uuid1 uuid2
2583 # If the output file is on btrfs, we need to make sure that it's
2584 # not on a subvolume of the same file system as the root FS.
2585 # Otherwise, fsfreeze() might freeze the entire system.
2586 # This is most conveniently checked by comparing the FS uuid.
2588 [[ "$(stat -f -c %T -- "/")" == "btrfs" ]] ||
return 0
2589 mnt
=$
(stat
-c %m
-- "$1")
2590 uuid1
=$
(btrfs_uuid
"$mnt")
2591 uuid2
=$
(btrfs_uuid
"/")
2592 [[ $uuid1 && $uuid2 && $uuid1 != "$uuid2" ]]
2595 freeze_ok_for_fstype
() {
2599 [[ "$(stat -c %m -- "$outfile")" == "/" ]] && return 1
2600 fstype
=$
(stat
-f -c %T
-- "$outfile")
2609 freeze_ok_for_btrfs
"$outfile"
2617 # We sync/fsfreeze only if we're operating on a live booted system.
2618 # It's possible for e.g. `kernel` to be installed as an RPM BuildRequires or equivalent,
2619 # and there's no reason to sync, and *definitely* no reason to fsfreeze.
2620 # Another case where this happens is rpm-ostree, which performs its own sync/fsfreeze
2621 # globally. See e.g. https://github.com/ostreedev/ostree/commit/8642ef5ab3fec3ac8eb8f193054852f83a8bc4d0
2622 if [[ -d $dracutsysrootdir/run
/systemd
/system
]]; then
2623 if ! sync
"$outfile" 2> /dev
/null
; then
2624 dinfo
"dracut: sync operation on newly created initramfs $outfile failed"
2628 # use fsfreeze only if we're not writing to /
2629 if [[ "$(stat -c %m -- "$outfile")" != "/" ]] && freeze_ok_for_fstype
"$outfile"; then
2630 FSFROZEN
="$(dirname "$outfile")"
2631 if ! (fsfreeze
-f "${FSFROZEN}" 2> /dev
/null
&& fsfreeze
-u "${FSFROZEN}" 2> /dev
/null
); then
2632 dinfo
"dracut: warning: could not fsfreeze $(dirname "$outfile")"