|
Harald Hoyer |
6adbc8 |
From 7ae5d9d11d1a0ccd31dced528e2792f1c1d5aeca Mon Sep 17 00:00:00 2001
|
|
Harald Hoyer |
6adbc8 |
From: Harald Hoyer <harald@redhat.com>
|
|
Harald Hoyer |
6adbc8 |
Date: Thu, 8 Dec 2011 10:25:58 +0100
|
|
Harald Hoyer |
6adbc8 |
Subject: [PATCH] dracut: export host_fs_types host_devs
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
Determine devices and filesystems to be included in the host-only
|
|
Harald Hoyer |
6adbc8 |
initramfs image.
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
To get a minimal initramfs, which can mount
|
|
Harald Hoyer |
6adbc8 |
/
|
|
Harald Hoyer |
6adbc8 |
/etc
|
|
Harald Hoyer |
6adbc8 |
/usr
|
|
Harald Hoyer |
6adbc8 |
/usr/bin
|
|
Harald Hoyer |
6adbc8 |
/usr/sbin
|
|
Harald Hoyer |
6adbc8 |
/usr/lib
|
|
Harald Hoyer |
6adbc8 |
/usr/lib64
|
|
Harald Hoyer |
6adbc8 |
/boot
|
|
Harald Hoyer |
6adbc8 |
we look in fstab for the corresponding devices and determine their and
|
|
Harald Hoyer |
6adbc8 |
their slaves' filesystem type and put all that in $host_fs_types
|
|
Harald Hoyer |
6adbc8 |
and $host_devs.
|
|
Harald Hoyer |
6adbc8 |
---
|
|
Harald Hoyer |
6adbc8 |
dracut | 42 +++++++++++++++++++++++++++++++++++++++++-
|
|
Harald Hoyer |
6adbc8 |
dracut-functions | 30 ++++++++++++++++++++++++++----
|
|
Harald Hoyer |
6adbc8 |
2 files changed, 67 insertions(+), 5 deletions(-)
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
diff --git a/dracut b/dracut
|
|
Harald Hoyer |
6adbc8 |
index 45ee759..3d08680 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/dracut
|
|
Harald Hoyer |
6adbc8 |
+++ b/dracut
|
|
Harald Hoyer |
6adbc8 |
@@ -507,12 +507,52 @@ trap 'exit 1;' SIGINT
|
|
Harald Hoyer |
6adbc8 |
# Need to be able to have non-root users read stuff (rpcbind etc)
|
|
Harald Hoyer |
6adbc8 |
chmod 755 "$initdir"
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
+if [[ $hostonly ]]; then
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ _get_fs_type() (
|
|
Harald Hoyer |
6adbc8 |
+ [[ $1 ]] || return
|
|
Harald Hoyer |
6adbc8 |
+ if [[ -b /dev/block/$1 ]] && get_fs_env /dev/block/$1; then
|
|
Harald Hoyer |
6adbc8 |
+ echo -n "$ID_FS_TYPE "
|
|
Harald Hoyer |
6adbc8 |
+ return 1
|
|
Harald Hoyer |
6adbc8 |
+ fi
|
|
Harald Hoyer |
6adbc8 |
+ if find_dev_fstype $1; then
|
|
Harald Hoyer |
6adbc8 |
+ echo -n " "
|
|
Harald Hoyer |
6adbc8 |
+ return 1
|
|
Harald Hoyer |
6adbc8 |
+ fi
|
|
Harald Hoyer |
6adbc8 |
+ return 1
|
|
Harald Hoyer |
6adbc8 |
+ )
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ push host_mp \
|
|
Harald Hoyer |
6adbc8 |
+ "/" \
|
|
Harald Hoyer |
6adbc8 |
+ "/etc" \
|
|
Harald Hoyer |
6adbc8 |
+ "/usr" \
|
|
Harald Hoyer |
6adbc8 |
+ "/usr/bin" \
|
|
Harald Hoyer |
6adbc8 |
+ "/usr/sbin" \
|
|
Harald Hoyer |
6adbc8 |
+ "/usr/lib" \
|
|
Harald Hoyer |
6adbc8 |
+ "/usr/lib64" \
|
|
Harald Hoyer |
6adbc8 |
+ "/boot"
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ host_fs_types=""
|
|
Harald Hoyer |
6adbc8 |
+ for mp in "${host_mp[@]}"; do
|
|
Harald Hoyer |
6adbc8 |
+ mountpoint "$mp" >/dev/null 2>&1 || continue
|
|
Harald Hoyer |
6adbc8 |
+ push host_devs $(find_block_device "$mp")
|
|
Harald Hoyer |
6adbc8 |
+ done
|
|
Harald Hoyer |
6adbc8 |
+ for dev in "${host_devs[@]}"; do
|
|
Harald Hoyer |
6adbc8 |
+ unset fs_type
|
|
Harald Hoyer |
6adbc8 |
+ for fstype in $(_get_fs_type $dev) \
|
|
Harald Hoyer |
6adbc8 |
+ $(check_block_and_slaves _get_fs_type $dev); do
|
|
Harald Hoyer |
6adbc8 |
+ strstr " $host_fs_types " "$fstype" || host_fs_types+="$fstype "
|
|
Harald Hoyer |
6adbc8 |
+ done
|
|
Harald Hoyer |
6adbc8 |
+ done
|
|
Harald Hoyer |
6adbc8 |
+fi
|
|
Harald Hoyer |
6adbc8 |
+echo "host_fs_types=$host_fs_types"
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
export initdir dracutbasedir dracutmodules drivers \
|
|
Harald Hoyer |
6adbc8 |
fw_dir drivers_dir debug no_kernel kernel_only \
|
|
Harald Hoyer |
6adbc8 |
add_drivers mdadmconf lvmconf filesystems \
|
|
Harald Hoyer |
6adbc8 |
use_fstab libdir usrlibdir fscks nofscks \
|
|
Harald Hoyer |
6adbc8 |
stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \
|
|
Harald Hoyer |
6adbc8 |
- debug
|
|
Harald Hoyer |
6adbc8 |
+ debug host_fs_types host_devs
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
# Create some directory structure first
|
|
Harald Hoyer |
6adbc8 |
[[ $prefix ]] && mkdir -m 0755 -p "${initdir}${prefix}"
|
|
Harald Hoyer |
6adbc8 |
diff --git a/dracut-functions b/dracut-functions
|
|
Harald Hoyer |
6adbc8 |
index c54cd7c..258d376 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/dracut-functions
|
|
Harald Hoyer |
6adbc8 |
+++ b/dracut-functions
|
|
Harald Hoyer |
6adbc8 |
@@ -165,8 +165,11 @@ get_fs_type() (
|
|
Harald Hoyer |
6adbc8 |
echo "nfs"
|
|
Harald Hoyer |
6adbc8 |
return
|
|
Harald Hoyer |
6adbc8 |
fi
|
|
Harald Hoyer |
6adbc8 |
- get_fs_env $1 || return
|
|
Harald Hoyer |
6adbc8 |
- echo $ID_FS_TYPE
|
|
Harald Hoyer |
6adbc8 |
+ if get_fs_env $1; then
|
|
Harald Hoyer |
6adbc8 |
+ echo $ID_FS_TYPE
|
|
Harald Hoyer |
6adbc8 |
+ return
|
|
Harald Hoyer |
6adbc8 |
+ fi
|
|
Harald Hoyer |
6adbc8 |
+ find_dev_fstype $1
|
|
Harald Hoyer |
6adbc8 |
)
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
get_fs_uuid() (
|
|
Harald Hoyer |
6adbc8 |
@@ -174,11 +177,11 @@ get_fs_uuid() (
|
|
Harald Hoyer |
6adbc8 |
echo $ID_FS_UUID
|
|
Harald Hoyer |
6adbc8 |
)
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
-# finds the major:minor of the block device backing the root filesystem.
|
|
Harald Hoyer |
6adbc8 |
find_block_device() {
|
|
Harald Hoyer |
6adbc8 |
local _x _mpt _majmin _dev _fs _maj _min
|
|
Harald Hoyer |
6adbc8 |
if [[ $use_fstab != yes ]]; then
|
|
Harald Hoyer |
6adbc8 |
while read _x _x _majmin _x _mpt _x _x _fs _dev _x; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ $_mpt = $1 ]] || continue
|
|
Harald Hoyer |
6adbc8 |
[[ $_fs = nfs ]] && { echo $_dev; return 0;}
|
|
Harald Hoyer |
6adbc8 |
[[ $_fs = nfs3 ]] && { echo $_dev; return 0;}
|
|
Harald Hoyer |
6adbc8 |
[[ $_fs = nfs4 ]] && { echo $_dev; return 0;}
|
|
Harald Hoyer |
6adbc8 |
@@ -189,7 +192,7 @@ find_block_device() {
|
|
Harald Hoyer |
6adbc8 |
echo $_maj:$_min
|
|
Harald Hoyer |
6adbc8 |
} && return 0
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
- if [[ $_mpt = $1 ]] && [[ ${_majmin#0:} = $_majmin ]]; then
|
|
Harald Hoyer |
6adbc8 |
+ if [[ ${_majmin#0:} = $_majmin ]]; then
|
|
Harald Hoyer |
6adbc8 |
echo $_majmin
|
|
Harald Hoyer |
6adbc8 |
return 0 # we have a winner!
|
|
Harald Hoyer |
6adbc8 |
fi
|
|
Harald Hoyer |
6adbc8 |
@@ -215,6 +218,25 @@ find_block_device() {
|
|
Harald Hoyer |
6adbc8 |
return 1
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
+find_dev_fstype() {
|
|
Harald Hoyer |
6adbc8 |
+ local _x _mpt _majmin _dev _fs _maj _min
|
|
Harald Hoyer |
6adbc8 |
+ while read _x _x _majmin _x _mpt _x _x _fs _dev _x; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ $_dev = $1 ]] || continue
|
|
Harald Hoyer |
6adbc8 |
+ echo -n $_fs;
|
|
Harald Hoyer |
6adbc8 |
+ return 0;
|
|
Harald Hoyer |
6adbc8 |
+ done < /proc/self/mountinfo
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ # fall back to /etc/fstab
|
|
Harald Hoyer |
6adbc8 |
+ while read _dev _mpt _fs _x; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ $_dev = $1 ]] || continue
|
|
Harald Hoyer |
6adbc8 |
+ echo -n $_fs;
|
|
Harald Hoyer |
6adbc8 |
+ return 0;
|
|
Harald Hoyer |
6adbc8 |
+ done < /etc/fstab
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ return 1
|
|
Harald Hoyer |
6adbc8 |
+}
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+# finds the major:minor of the block device backing the root filesystem.
|
|
Harald Hoyer |
6adbc8 |
find_root_block_device() { find_block_device /; }
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
# Walk all the slave relationships for a given block device.
|