From 70cb8a686f710b237c6f7c7524b47d2649f6751a Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@redhat.com>
Date: Thu, 15 Dec 2011 14:36:37 +0100
Subject: [PATCH] dracut: add --add-fstab and --mount option
--add-fstab [FILE] Add file to the initramfs fstab
--mount "[DEV] [MP] [FSTYPE] [FSOPTS]"
Mount device [DEV] on mountpoint [MP] with filesystem
[FSTYPE] and options [FSOPTS] in the initramfs
---
dracut | 40 ++++++++++++++++++++++++++++++++++++
modules.d/95fstab-sys/mount-sys.sh | 4 +-
2 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/dracut b/dracut
index 46694f8..8449fc1 100755
--- a/dracut
+++ b/dracut
@@ -85,6 +85,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.
--fstab Use /etc/fstab to determine the root device.
+ --add-fstab [FILE] Add file to the initramfs fstab
+ --mount "[DEV] [MP] [FSTYPE] [FSOPTS]"
+ Mount device [DEV] on mountpoint [MP] with filesystem
+ [FSTYPE] and options [FSOPTS] in the initramfs
-i, --include [SOURCE] [TARGET]
Include the files in the SOURCE directory into the
Target directory in the final initramfs.
@@ -207,6 +211,8 @@ while (($# > 0)); do
-I|--install) push_arg install_items_l "$@" || shift;;
--fwdir) push_arg fw_dir_l "$@" || shift;;
--fscks) push_arg fscks_l "$@" || shift;;
+ --add-fstab) push_arg add_fstab_l "$@" || shift;;
+ --mount) push_arg fstab_lines "$@" || shift;;
--nofscks) nofscks_l="yes";;
-k|--kmoddir) read_arg drivers_dir_l "$@" || shift;;
-c|--conf) read_arg conffile "$@" || shift;;
@@ -332,6 +338,18 @@ if (( ${#fscks_l[@]} )); then
done
fi
+if (( ${#add_fstab_l[@]} )); then
+ while pop add_fstab_l val; do
+ add_fstab+=" $val "
+ done
+fi
+
+if (( ${#fstab_lines_l[@]} )); then
+ while pop fstab_lines_l val; do
+ push fstab_lines $val
+ done
+fi
+
if (( ${#install_items_l[@]} )); then
while pop install_items_l val; do
push install_items $val
@@ -526,6 +544,21 @@ if [[ $hostonly ]]; then
return 1
)
+ for line in "${fstab_lines[@]}"; do
+ set -- $line
+ #dev mp fs fsopts
+ dev="$(get_maj_min $1)"
+ push host_devs "${dev:-$1}"
+ push host_fs_types "$dev|$3"
+ done
+
+ for f in $add_fstab; do
+ [ -e $f ] || continue
+ while read dev rest; do
+ push host_devs $dev
+ done < $f
+ done
+
push host_mp \
"/" \
"/etc" \
@@ -668,6 +701,13 @@ while pop install_items items; do
done
unset item
+while pop fstab_lines line; do
+ echo "$line 0 0" >> "${initdir}/etc/fstab"
+done
+
+for f in $add_fstab; do
+ cat $f >> "${initdir}/etc/fstab"
+done
if [[ $kernel_only != yes ]]; then
# make sure that library links are correct and up to date
diff --git a/modules.d/95fstab-sys/mount-sys.sh b/modules.d/95fstab-sys/mount-sys.sh
index f44351d..a8fbd50 100755
--- a/modules.d/95fstab-sys/mount-sys.sh
+++ b/modules.d/95fstab-sys/mount-sys.sh
@@ -25,6 +25,6 @@ fstab_mount() {
return 0
}
-for r in $NEWROOT /; do
- fstab_mount "$r/etc/fstab.sys" && break
+for r in $NEWROOT/etc/fstab.sys /etc/fstab; do
+ fstab_mount $r && break
done