You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

250 lines
9.9 KiB

From 81c9e224820fa284806690fc64ac39c58e8760a3 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@redhat.com>
Date: Tue, 25 Feb 2014 12:35:32 +0100
Subject: [PATCH] Add flag to toggle hostonly cmdline storing in the initramfs
--hostonly-cmdline:
Store kernel command line arguments needed in the initramfs
--no-hostonly-cmdline:
Do not store kernel command line arguments needed in the initramfs
---
dracut.8.asc | 6 +++++
dracut.conf.5.asc | 3 +++
dracut.sh | 27 ++++++++++++++++-----
modules.d/90crypt/module-setup.sh | 6 +++--
modules.d/90dmraid/module-setup.sh | 6 +++--
modules.d/90lvm/module-setup.sh | 6 +++--
modules.d/90mdraid/module-setup.sh | 6 +++--
modules.d/95rootfs-block/module-setup.sh | 31 +++++++++++++++---------
8 files changed, 66 insertions(+), 25 deletions(-)
diff --git a/dracut.8.asc b/dracut.8.asc
index b2946753..ba125c0d 100644
--- a/dracut.8.asc
+++ b/dracut.8.asc
@@ -294,6 +294,12 @@ provide a valid _/etc/fstab_.
**-N, --no-hostonly**::
Disable Host-Only mode
+**--hostonly-cmdline**:
+ Store kernel command line arguments needed in the initramfs
+
+**--no-hostonly-cmdline**:
+ Do not store kernel command line arguments needed in the initramfs
+
**--persistent-policy** _<policy>_::
Use _<policy>_ to address disks and partitions.
_<policy>_ can be any directory name found in /dev/disk.
diff --git a/dracut.conf.5.asc b/dracut.conf.5.asc
index 5c941188..be62da98 100644
--- a/dracut.conf.5.asc
+++ b/dracut.conf.5.asc
@@ -76,6 +76,9 @@ Configuration files must have the extension .conf; other extensions are ignored.
Host-Only mode: Install only what is needed for booting the local host
instead of a generic host and generate host-specific configuration.
+*hostonly_cmdline*"__{yes|no}__"::
+ If set, store the kernel command line arguments needed in the initramfs
+
*persistent_policy=*"__<policy>__"::
Use _<policy>_ to address disks and partitions.
_<policy>_ can be any directory name found in /dev/disk.
diff --git a/dracut.sh b/dracut.sh
index c4bf4ebc..1c5e6889 100755
--- a/dracut.sh
+++ b/dracut.sh
@@ -136,6 +136,10 @@ Creates initial ramdisk images for preloading modules
-H, --hostonly Host-Only mode: Install only what is needed for
booting the local host instead of a generic host.
-N, --no-hostonly Disables Host-Only mode
+ --hostonly-cmdline Store kernel command line arguments needed
+ in the initramfs
+ --no-hostonly-cmdline Do not store kernel command line arguments needed
+ in the initramfs
--persistent-policy [POLICY]
Use [POLICY] to address disks and partitions.
POLICY can be any directory name found in /dev/disk.
@@ -376,7 +380,8 @@ while :; do
-a|--add) push add_dracutmodules_l "$2"; shift;;
--force-add) push force_add_dracutmodules_l "$2"; shift;;
--add-drivers) push add_drivers_l "$2"; shift;;
- --omit-drivers) push omit_drivers_l "$2"; shift;;
+ --omit-drivers)
+ push omit_drivers_l "$2"; shift;;
-m|--modules) push dracutmodules_l "$2"; shift;;
-o|--omit) push omit_dracutmodules_l "$2"; shift;;
-d|--drivers) push drivers_l "$2"; shift;;
@@ -389,7 +394,8 @@ while :; do
--mount) push fstab_lines "$2"; shift;;
--add-device|--device)
push add_device_l "$2"; shift;;
- --kernel-cmdline) push kernel_cmdline_l "$2"; shift;;
+ --kernel-cmdline)
+ push kernel_cmdline_l "$2"; shift;;
--nofscks) nofscks_l="yes";;
--ro-mnt) ro_mnt_l="yes";;
-k|--kmoddir) drivers_dir_l="$2"; shift;;
@@ -402,9 +408,12 @@ while :; do
-f|--force) force=yes;;
--kernel-only) kernel_only="yes"; no_kernel="no";;
--no-kernel) kernel_only="no"; no_kernel="yes";;
- --print-cmdline) print_cmdline="yes"; hostonly_l="yes"; kernel_only="yes"; no_kernel="yes";;
- --early-microcode) early_microcode_l="yes";;
- --no-early-microcode) early_microcode_l="no";;
+ --print-cmdline)
+ print_cmdline="yes"; hostonly_l="yes"; kernel_only="yes"; no_kernel="yes";;
+ --early-microcode)
+ early_microcode_l="yes";;
+ --no-early-microcode)
+ early_microcode_l="no";;
--strip) do_strip_l="yes";;
--nostrip) do_strip_l="no";;
--prelink) do_prelink_l="yes";;
@@ -430,11 +439,16 @@ while :; do
hostonly_l="yes" ;;
-N|--no-hostonly|--no-host-only)
hostonly_l="no" ;;
+ --hostonly-cmdline)
+ hostonly_cmdline_l="yes" ;;
+ --no-hostonly-cmdline)
+ hostonly_cmdline_l="no" ;;
--persistent-policy)
persistent_policy_l="$2"; shift;;
--fstab) use_fstab_l="yes" ;;
-h|--help) long_usage; exit 1 ;;
- -i|--include) push include_src "$2"
+ -i|--include)
+ push include_src "$2"
shift;;
--bzip2) compress_l="bzip2";;
--lzma) compress_l="lzma";;
@@ -677,6 +691,7 @@ stdloglvl=$((stdloglvl + verbosity_mod_l))
[[ $prefix_l ]] && prefix=$prefix_l
[[ $prefix = "/" ]] && unset prefix
[[ $hostonly_l ]] && hostonly=$hostonly_l
+[[ $hostonly_cmdline_l ]] && hostonly_cmdline=$hostonly_cmdline_l
[[ $persistent_policy_l ]] && persistent_policy=$persistent_policy_l
[[ $use_fstab_l ]] && use_fstab=$use_fstab_l
[[ $mdadmconf_l ]] && mdadmconf=$mdadmconf_l
diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh
index 18583915..267d39d5 100755
--- a/modules.d/90crypt/module-setup.sh
+++ b/modules.d/90crypt/module-setup.sh
@@ -46,8 +46,10 @@ cmdline() {
install() {
- cmdline >> "${initdir}/etc/cmdline.d/90crypt.conf"
- echo >> "${initdir}/etc/cmdline.d/90crypt.conf"
+ if [[ $hostonly_cmdline == "yes" ]]; then
+ cmdline >> "${initdir}/etc/cmdline.d/90crypt.conf"
+ echo >> "${initdir}/etc/cmdline.d/90crypt.conf"
+ fi
inst_multiple cryptsetup rmdir readlink umount
inst_script "$moddir"/cryptroot-ask.sh /sbin/cryptroot-ask
diff --git a/modules.d/90dmraid/module-setup.sh b/modules.d/90dmraid/module-setup.sh
index 11181cf5..b230cb0e 100755
--- a/modules.d/90dmraid/module-setup.sh
+++ b/modules.d/90dmraid/module-setup.sh
@@ -61,8 +61,10 @@ cmdline() {
install() {
local _i
- cmdline >> "${initdir}/etc/cmdline.d/90dmraid.conf"
- echo >> "${initdir}/etc/cmdline.d/90dmraid.conf"
+ if [[ $hostonly_cmdline == "yes" ]]; then
+ cmdline >> "${initdir}/etc/cmdline.d/90dmraid.conf"
+ echo >> "${initdir}/etc/cmdline.d/90dmraid.conf"
+ fi
inst_multiple dmraid
inst_multiple -o kpartx
diff --git a/modules.d/90lvm/module-setup.sh b/modules.d/90lvm/module-setup.sh
index f0c9b964..1c962d54 100755
--- a/modules.d/90lvm/module-setup.sh
+++ b/modules.d/90lvm/module-setup.sh
@@ -48,8 +48,10 @@ install() {
inst lvm
- cmdline >> "${initdir}/etc/cmdline.d/90lvm.conf"
- echo >> "${initdir}/etc/cmdline.d/90lvm.conf"
+ if [[ $hostonly_cmdline == "yes" ]]; then
+ cmdline >> "${initdir}/etc/cmdline.d/90lvm.conf"
+ echo >> "${initdir}/etc/cmdline.d/90lvm.conf"
+ fi
inst_rules "$moddir/64-lvm.rules"
diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh
index 34aae1e3..1e03847f 100755
--- a/modules.d/90mdraid/module-setup.sh
+++ b/modules.d/90mdraid/module-setup.sh
@@ -65,8 +65,10 @@ install() {
inst $(command -v partx) /sbin/partx
inst $(command -v mdadm) /sbin/mdadm
- cmdline >> "${initdir}/etc/cmdline.d/90mdraid.conf"
- echo >> "${initdir}/etc/cmdline.d/90mdraid.conf"
+ if [[ $hostonly_cmdline == "yes" ]]; then
+ cmdline >> "${initdir}/etc/cmdline.d/90mdraid.conf"
+ echo >> "${initdir}/etc/cmdline.d/90mdraid.conf"
+ fi
# <mdadm-3.3 udev rule
inst_rules 64-md-raid.rules
diff --git a/modules.d/95rootfs-block/module-setup.sh b/modules.d/95rootfs-block/module-setup.sh
index 7e714eb0..5bb704a4 100755
--- a/modules.d/95rootfs-block/module-setup.sh
+++ b/modules.d/95rootfs-block/module-setup.sh
@@ -10,17 +10,8 @@ depends() {
echo fs-lib
}
-cmdline() {
- local dev=/dev/block/$(find_root_block_device)
- if [ -e $dev ]; then
- printf " root=%s" "$(shorten_persistent_dev "$(get_persistent_dev "$dev")")"
- printf " rootflags=%s" "$(find_mp_fsopts /)"
- printf " rootfstype=%s" "$(find_mp_fstype /)"
- fi
-}
-
-install() {
+cmdline_journal() {
if [[ $hostonly ]]; then
for dev in "${!host_fs_types[@]}"; do
[[ ${host_fs_types[$dev]} = "reiserfs" ]] || [[ ${host_fs_types[$dev]} = "xfs" ]] || continue
@@ -32,10 +23,28 @@ install() {
fi
if [ -n "$journaldev" ]; then
- printf "%s\n" "root.journaldev=$journaldev" >> "${initdir}/etc/cmdline.d/95root-journaldev.conf"
+ printf " root.journaldev=%s" "$journaldev"
fi
done
fi
+ return 0
+}
+
+cmdline() {
+ local dev=/dev/block/$(find_root_block_device)
+ if [ -e $dev ]; then
+ printf " root=%s" "$(shorten_persistent_dev "$(get_persistent_dev "$dev")")"
+ printf " rootflags=%s" "$(find_mp_fsopts /)"
+ printf " rootfstype=%s" "$(find_mp_fstype /)"
+ fi
+ cmdline_journal
+}
+
+install() {
+ if [[ $hostonly_cmdline == "yes" ]]; then
+ journaldev=$(cmdline_journal)
+ [[ $journaldev ]] && printf "%s\n" "$journaldev" >> "${initdir}/etc/cmdline.d/95root-journaldev.conf"
+ fi
inst_multiple umount
inst_multiple tr