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
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
|
|
|