|
Harald Hoyer |
6adbc8 |
From 480d772f22a2f690928c59c7c0ebfa7dc00332ea 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:43:29 +0100
|
|
Harald Hoyer |
6adbc8 |
Subject: [PATCH] */module-setup.sh: use host_fs_types host_devs
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
For the $hostonly case, use $host_fs_types and $host_devs to determine,
|
|
Harald Hoyer |
6adbc8 |
if a module has to be included in the initramfs.
|
|
Harald Hoyer |
6adbc8 |
---
|
|
Harald Hoyer |
6adbc8 |
dracut | 16 +++++---
|
|
Harald Hoyer |
6adbc8 |
dracut-functions | 31 +++++++++++++---
|
|
Harald Hoyer |
6adbc8 |
modules.d/90btrfs/module-setup.sh | 16 ++++----
|
|
Harald Hoyer |
6adbc8 |
modules.d/90crypt/module-setup.sh | 26 ++++++++-----
|
|
Harald Hoyer |
6adbc8 |
modules.d/90dmraid/module-setup.sh | 40 +++++++++++++++------
|
|
Harald Hoyer |
6adbc8 |
modules.d/90kernel-modules/module-setup.sh | 6 +++-
|
|
Harald Hoyer |
6adbc8 |
modules.d/90lvm/module-setup.sh | 25 ++++++++-----
|
|
Harald Hoyer |
6adbc8 |
modules.d/90mdraid/module-setup.sh | 40 +++++++++++++++-----
|
|
Harald Hoyer |
6adbc8 |
modules.d/95fstab-sys/module-setup.sh | 2 +-
|
|
Harald Hoyer |
6adbc8 |
modules.d/95nfs/module-setup.sh | 14 +++++--
|
|
Harald Hoyer |
6adbc8 |
modules.d/99base/module-setup.sh | 1 +
|
|
Harald Hoyer |
6adbc8 |
modules.d/99fs-lib/module-setup.sh | 55 ++++++++++++++--------------
|
|
Harald Hoyer |
6adbc8 |
12 files changed, 179 insertions(+), 93 deletions(-)
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
diff --git a/dracut b/dracut
|
|
Harald Hoyer |
6adbc8 |
index 3d08680..46694f8 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/dracut
|
|
Harald Hoyer |
6adbc8 |
+++ b/dracut
|
|
Harald Hoyer |
6adbc8 |
@@ -508,15 +508,19 @@ trap 'exit 1;' SIGINT
|
|
Harald Hoyer |
6adbc8 |
chmod 755 "$initdir"
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
if [[ $hostonly ]]; then
|
|
Harald Hoyer |
6adbc8 |
+ # in hostonly mode, determine all devices, which have to be accessed
|
|
Harald Hoyer |
6adbc8 |
+ # and examine them for filesystem types
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ unset host_fs_types
|
|
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 |
+ echo "$1|$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 |
+ if fstype=$(find_dev_fstype $1); then
|
|
Harald Hoyer |
6adbc8 |
+ echo "$1|$fstype"
|
|
Harald Hoyer |
6adbc8 |
return 1
|
|
Harald Hoyer |
6adbc8 |
fi
|
|
Harald Hoyer |
6adbc8 |
return 1
|
|
Harald Hoyer |
6adbc8 |
@@ -532,7 +536,6 @@ if [[ $hostonly ]]; then
|
|
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 |
@@ -541,11 +544,12 @@ if [[ $hostonly ]]; then
|
|
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 |
+ if ! strstr " ${host_fs_types[*]} " " $fstype ";then
|
|
Harald Hoyer |
6adbc8 |
+ push host_fs_types "$fstype"
|
|
Harald Hoyer |
6adbc8 |
+ fi
|
|
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 |
diff --git a/dracut-functions b/dracut-functions
|
|
Harald Hoyer |
6adbc8 |
index 258d376..d95df14 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/dracut-functions
|
|
Harald Hoyer |
6adbc8 |
+++ b/dracut-functions
|
|
Harald Hoyer |
6adbc8 |
@@ -177,6 +177,14 @@ get_fs_uuid() (
|
|
Harald Hoyer |
6adbc8 |
echo $ID_FS_UUID
|
|
Harald Hoyer |
6adbc8 |
)
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+get_maj_min() {
|
|
Harald Hoyer |
6adbc8 |
+ local _dev
|
|
Harald Hoyer |
6adbc8 |
+ _dev=$(stat -c '$((0x%T)):$((0x%t))' "$1" 2>/dev/null)
|
|
Harald Hoyer |
6adbc8 |
+ _dev=$(eval "echo $_dev")
|
|
Harald Hoyer |
6adbc8 |
+ echo $_dev
|
|
Harald Hoyer |
6adbc8 |
+}
|
|
Harald Hoyer |
6adbc8 |
+
|
|
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 |
@@ -186,11 +194,8 @@ find_block_device() {
|
|
Harald Hoyer |
6adbc8 |
[[ $_fs = nfs3 ]] && { echo $_dev; return 0;}
|
|
Harald Hoyer |
6adbc8 |
[[ $_fs = nfs4 ]] && { echo $_dev; return 0;}
|
|
Harald Hoyer |
6adbc8 |
[[ $_fs = btrfs ]] && {
|
|
Harald Hoyer |
6adbc8 |
- ls -nLl "$_dev" | {
|
|
Harald Hoyer |
6adbc8 |
- read _x _x _x _x _maj _min _x
|
|
Harald Hoyer |
6adbc8 |
- _maj=${_maj//,/}
|
|
Harald Hoyer |
6adbc8 |
- echo $_maj:$_min
|
|
Harald Hoyer |
6adbc8 |
- } && return 0
|
|
Harald Hoyer |
6adbc8 |
+ get_maj_min $_dev
|
|
Harald Hoyer |
6adbc8 |
+ return 0;
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
if [[ ${_majmin#0:} = $_majmin ]]; then
|
|
Harald Hoyer |
6adbc8 |
echo $_majmin
|
|
Harald Hoyer |
6adbc8 |
@@ -239,6 +244,22 @@ find_dev_fstype() {
|
|
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 |
+for_each_host_dev_fs()
|
|
Harald Hoyer |
6adbc8 |
+{
|
|
Harald Hoyer |
6adbc8 |
+ local _func="$1"
|
|
Harald Hoyer |
6adbc8 |
+ for f in ${host_fs_types[@]}; do
|
|
Harald Hoyer |
6adbc8 |
+ OLDIFS="$IFS"
|
|
Harald Hoyer |
6adbc8 |
+ IFS="|"
|
|
Harald Hoyer |
6adbc8 |
+ set -- $f
|
|
Harald Hoyer |
6adbc8 |
+ IFS="$OLDIFS"
|
|
Harald Hoyer |
6adbc8 |
+ dev=$1
|
|
Harald Hoyer |
6adbc8 |
+ [[ -b /dev/block/$dev ]] && dev="/dev/block/$dev"
|
|
Harald Hoyer |
6adbc8 |
+ [[ -b $dev ]] || continue
|
|
Harald Hoyer |
6adbc8 |
+ fs="$2"
|
|
Harald Hoyer |
6adbc8 |
+ $_func $dev $fs
|
|
Harald Hoyer |
6adbc8 |
+ done
|
|
Harald Hoyer |
6adbc8 |
+}
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
# Walk all the slave relationships for a given block device.
|
|
Harald Hoyer |
6adbc8 |
# Stop when our helper function returns success
|
|
Harald Hoyer |
6adbc8 |
# $1 = function to call on every found block device
|
|
Harald Hoyer |
6adbc8 |
diff --git a/modules.d/90btrfs/module-setup.sh b/modules.d/90btrfs/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
index 7b0b424..f89713f 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/modules.d/90btrfs/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
+++ b/modules.d/90btrfs/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
@@ -11,14 +11,14 @@ check() {
|
|
Harald Hoyer |
6adbc8 |
. $dracutfunctions
|
|
Harald Hoyer |
6adbc8 |
[[ $debug ]] && set -x
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
- is_btrfs() { get_fs_type /dev/block/$1 | grep -q btrfs; }
|
|
Harald Hoyer |
6adbc8 |
-
|
|
Harald Hoyer |
6adbc8 |
- if [[ $hostonly ]]; then
|
|
Harald Hoyer |
6adbc8 |
- _rootdev=$(find_root_block_device)
|
|
Harald Hoyer |
6adbc8 |
- if [[ $_rootdev ]]; then
|
|
Harald Hoyer |
6adbc8 |
- is_btrfs "$_rootdev" || return 1
|
|
Harald Hoyer |
6adbc8 |
- fi
|
|
Harald Hoyer |
6adbc8 |
- fi
|
|
Harald Hoyer |
6adbc8 |
+ [[ $hostonly ]] && {
|
|
Harald Hoyer |
6adbc8 |
+ local _found
|
|
Harald Hoyer |
6adbc8 |
+ for fs in $host_fs_types; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ "$fs" = "|btrfs" ]] && _found="1"
|
|
Harald Hoyer |
6adbc8 |
+ done
|
|
Harald Hoyer |
6adbc8 |
+ [[ $_found ]] || return 1
|
|
Harald Hoyer |
6adbc8 |
+ unset _found
|
|
Harald Hoyer |
6adbc8 |
+ }
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
return 0
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
index 2a8268f..42c6b48 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/modules.d/90crypt/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
+++ b/modules.d/90crypt/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
@@ -9,18 +9,24 @@ check() {
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
. $dracutfunctions
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
- is_crypt() { [[ $(get_fs_type /dev/block/$1) = crypto_LUKS ]]; }
|
|
Harald Hoyer |
6adbc8 |
+ check_crypt() {
|
|
Harald Hoyer |
6adbc8 |
+ local dev=$1 fs=$2
|
|
Harald Hoyer |
6adbc8 |
+ [[ $fs = "crypto_LUKS" ]] || continue
|
|
Harald Hoyer |
6adbc8 |
+ ID_FS_UUID=$(udevadm info --query=property --name=$dev \
|
|
Harald Hoyer |
6adbc8 |
+ | while read line; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ ${line#ID_FS_UUID} = $line ]] && continue
|
|
Harald Hoyer |
6adbc8 |
+ eval "$line"
|
|
Harald Hoyer |
6adbc8 |
+ echo $ID_FS_UUID
|
|
Harald Hoyer |
6adbc8 |
+ break
|
|
Harald Hoyer |
6adbc8 |
+ done)
|
|
Harald Hoyer |
6adbc8 |
+ [[ ${ID_FS_UUID} ]] || continue
|
|
Harald Hoyer |
6adbc8 |
+ echo " rd.luks.uuid=${ID_FS_UUID} " >> "${initdir}/etc/cmdline.d/90crypt.conf"
|
|
Harald Hoyer |
6adbc8 |
+ }
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
[[ $hostonly ]] && {
|
|
Harald Hoyer |
6adbc8 |
- _rootdev=$(find_root_block_device)
|
|
Harald Hoyer |
6adbc8 |
- if [[ $_rootdev ]]; then
|
|
Harald Hoyer |
6adbc8 |
- # root lives on a block device, so we can be more precise about
|
|
Harald Hoyer |
6adbc8 |
- # hostonly checking
|
|
Harald Hoyer |
6adbc8 |
- check_block_and_slaves is_crypt "$_rootdev" || return 1
|
|
Harald Hoyer |
6adbc8 |
- else
|
|
Harald Hoyer |
6adbc8 |
- # root is not on a block device, use the shotgun approach
|
|
Harald Hoyer |
6adbc8 |
- blkid | grep -q crypto\?_LUKS || return 1
|
|
Harald Hoyer |
6adbc8 |
- fi
|
|
Harald Hoyer |
6adbc8 |
+ [[ -d "${initdir}/etc/cmdline.d" ]] || mkdir -p "${initdir}/etc/cmdline.d"
|
|
Harald Hoyer |
6adbc8 |
+ for_each_host_dev_fs check_crypt
|
|
Harald Hoyer |
6adbc8 |
+ [ -f "${initdir}/etc/cmdline.d/90crypt.conf" ] || return 1
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
return 0
|
|
Harald Hoyer |
6adbc8 |
diff --git a/modules.d/90dmraid/module-setup.sh b/modules.d/90dmraid/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
index 87a4d1e..9de6c63 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/modules.d/90dmraid/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
+++ b/modules.d/90dmraid/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
@@ -11,19 +11,37 @@ check() {
|
|
Harald Hoyer |
6adbc8 |
. $dracutfunctions
|
|
Harald Hoyer |
6adbc8 |
[[ $debug ]] && set -x
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
- is_dmraid() { get_fs_type /dev/block/$1 |grep -v linux_raid_member | \
|
|
Harald Hoyer |
6adbc8 |
- grep -q _raid_member; }
|
|
Harald Hoyer |
6adbc8 |
+ check_dmraid() {
|
|
Harald Hoyer |
6adbc8 |
+ local dev=$1 fs=$2 holder DEVPATH DM_NAME
|
|
Harald Hoyer |
6adbc8 |
+ [[ "$fs" = "linux_raid_member" ]] && continue
|
|
Harald Hoyer |
6adbc8 |
+ [[ "$fs" = "${fs%%_raid_member}" ]] && continue
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ DEVPATH=$(udevadm info --query=property --name=$dev \
|
|
Harald Hoyer |
6adbc8 |
+ | while read line; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ ${line#DEVPATH} = $line ]] && continue
|
|
Harald Hoyer |
6adbc8 |
+ eval "$line"
|
|
Harald Hoyer |
6adbc8 |
+ echo $DEVPATH
|
|
Harald Hoyer |
6adbc8 |
+ break
|
|
Harald Hoyer |
6adbc8 |
+ done)
|
|
Harald Hoyer |
6adbc8 |
+ for holder in /sys/$DEVPATH/holders/*; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ -e $holder ]] || continue
|
|
Harald Hoyer |
6adbc8 |
+ DM_NAME=$(udevadm info --query=property --path=$holder \
|
|
Harald Hoyer |
6adbc8 |
+ | while read line; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ ${line#DM_NAME} = $line ]] && continue
|
|
Harald Hoyer |
6adbc8 |
+ eval "$line"
|
|
Harald Hoyer |
6adbc8 |
+ echo $DM_NAME
|
|
Harald Hoyer |
6adbc8 |
+ break
|
|
Harald Hoyer |
6adbc8 |
+ done)
|
|
Harald Hoyer |
6adbc8 |
+ done
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ [[ ${DM_NAME} ]] || continue
|
|
Harald Hoyer |
6adbc8 |
+ echo " rd.dm.uuid=${DM_NAME} " >> "${initdir}/etc/cmdline.d/90dmraid.conf"
|
|
Harald Hoyer |
6adbc8 |
+ }
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
[[ $hostonly ]] && {
|
|
Harald Hoyer |
6adbc8 |
- _rootdev=$(find_root_block_device)
|
|
Harald Hoyer |
6adbc8 |
- if [[ $_rootdev ]]; then
|
|
Harald Hoyer |
6adbc8 |
- # root lives on a block device, so we can be more precise about
|
|
Harald Hoyer |
6adbc8 |
- # hostonly checking
|
|
Harald Hoyer |
6adbc8 |
- check_block_and_slaves is_dmraid "$_rootdev" || return 1
|
|
Harald Hoyer |
6adbc8 |
- else
|
|
Harald Hoyer |
6adbc8 |
- # root is not on a block device, use the shotgun approach
|
|
Harald Hoyer |
6adbc8 |
- dmraid -r | grep -q ok || return 1
|
|
Harald Hoyer |
6adbc8 |
- fi
|
|
Harald Hoyer |
6adbc8 |
+ [[ -d "${initdir}/etc/cmdline.d" ]] || mkdir -p "${initdir}/etc/cmdline.d"
|
|
Harald Hoyer |
6adbc8 |
+ for_each_host_dev_fs check_dmraid
|
|
Harald Hoyer |
6adbc8 |
+ [ -f "${initdir}/etc/cmdline.d/90dmraid.conf" ] || return 1
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
return 0
|
|
Harald Hoyer |
6adbc8 |
diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
index d7aadd8..8d2ab91 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/modules.d/90kernel-modules/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
+++ b/modules.d/90kernel-modules/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
@@ -50,7 +50,11 @@ installkernel() {
|
|
Harald Hoyer |
6adbc8 |
rm -fr ${initdir}/lib/modules/*/kernel/fs/ocfs2
|
|
Harald Hoyer |
6adbc8 |
fi
|
|
Harald Hoyer |
6adbc8 |
else
|
|
Harald Hoyer |
6adbc8 |
- hostonly='' instmods $(get_fs_type "/dev/block/$(find_root_block_device)")
|
|
Harald Hoyer |
6adbc8 |
+ inst_fs() {
|
|
Harald Hoyer |
6adbc8 |
+ [[ $2 ]] || return 1
|
|
Harald Hoyer |
6adbc8 |
+ hostonly='' instmods $2
|
|
Harald Hoyer |
6adbc8 |
+ }
|
|
Harald Hoyer |
6adbc8 |
+ for_each_host_dev_fs inst_fs
|
|
Harald Hoyer |
6adbc8 |
fi
|
|
Harald Hoyer |
6adbc8 |
else
|
|
Harald Hoyer |
6adbc8 |
hostonly='' instmods $drivers
|
|
Harald Hoyer |
6adbc8 |
diff --git a/modules.d/90lvm/module-setup.sh b/modules.d/90lvm/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
index 40dc350..87751cb 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/modules.d/90lvm/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
+++ b/modules.d/90lvm/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
@@ -10,18 +10,23 @@ check() {
|
|
Harald Hoyer |
6adbc8 |
. $dracutfunctions
|
|
Harald Hoyer |
6adbc8 |
[[ $debug ]] && set -x
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
- is_lvm() { [[ $(get_fs_type /dev/block/$1) = LVM2_member ]]; }
|
|
Harald Hoyer |
6adbc8 |
+ check_lvm() {
|
|
Harald Hoyer |
6adbc8 |
+ local dev=$1
|
|
Harald Hoyer |
6adbc8 |
+ DM_LV_NAME=$(udevadm info --query=property --name=$dev \
|
|
Harald Hoyer |
6adbc8 |
+ | while read line; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ ${line#DM_LV_NAME} = $line ]] && continue
|
|
Harald Hoyer |
6adbc8 |
+ eval "$line"
|
|
Harald Hoyer |
6adbc8 |
+ echo $DM_LV_NAME
|
|
Harald Hoyer |
6adbc8 |
+ break
|
|
Harald Hoyer |
6adbc8 |
+ done)
|
|
Harald Hoyer |
6adbc8 |
+ [[ ${DM_LV_NAME} ]] || continue
|
|
Harald Hoyer |
6adbc8 |
+ echo " rd.lvm.lv=${DM_LV_NAME} " >> "${initdir}/etc/cmdline.d/90lvm.conf"
|
|
Harald Hoyer |
6adbc8 |
+ }
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
[[ $hostonly ]] && {
|
|
Harald Hoyer |
6adbc8 |
- _rootdev=$(find_root_block_device)
|
|
Harald Hoyer |
6adbc8 |
- if [[ $_rootdev ]]; then
|
|
Harald Hoyer |
6adbc8 |
- # root lives on a block device, so we can be more precise about
|
|
Harald Hoyer |
6adbc8 |
- # hostonly checking
|
|
Harald Hoyer |
6adbc8 |
- check_block_and_slaves is_lvm "$_rootdev" || return 1
|
|
Harald Hoyer |
6adbc8 |
- else
|
|
Harald Hoyer |
6adbc8 |
- # root is not on a block device, use the shotgun approach
|
|
Harald Hoyer |
6adbc8 |
- blkid | grep -q LVM2_member || return 1
|
|
Harald Hoyer |
6adbc8 |
- fi
|
|
Harald Hoyer |
6adbc8 |
+ [[ -d "${initdir}/etc/cmdline.d" ]] || mkdir -p "${initdir}/etc/cmdline.d"
|
|
Harald Hoyer |
6adbc8 |
+ for_each_host_dev_fs check_lvm
|
|
Harald Hoyer |
6adbc8 |
+ [ -f "${initdir}/etc/cmdline.d/90lvm.conf" ] || return 1
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
return 0
|
|
Harald Hoyer |
6adbc8 |
diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
index 029d667..05e0127 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/modules.d/90mdraid/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
+++ b/modules.d/90mdraid/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
@@ -10,18 +10,38 @@ check() {
|
|
Harald Hoyer |
6adbc8 |
. $dracutfunctions
|
|
Harald Hoyer |
6adbc8 |
[[ $debug ]] && set -x
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
- is_mdraid() { [[ -d "/sys/dev/block/$1/md" ]]; }
|
|
Harald Hoyer |
6adbc8 |
+ check_mdraid() {
|
|
Harald Hoyer |
6adbc8 |
+ local dev=$1 fs=$2 holder DEVPATH MD_UUID
|
|
Harald Hoyer |
6adbc8 |
+ [[ "$fs" = "linux_raid_member" ]] && continue
|
|
Harald Hoyer |
6adbc8 |
+ [[ "$fs" = "${fs%%_raid_member}" ]] && continue
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ DEVPATH=$(udevadm info --query=property --name=$dev \
|
|
Harald Hoyer |
6adbc8 |
+ | while read line; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ ${line#DEVPATH} = $line ]] && continue
|
|
Harald Hoyer |
6adbc8 |
+ eval "$line"
|
|
Harald Hoyer |
6adbc8 |
+ echo $DEVPATH
|
|
Harald Hoyer |
6adbc8 |
+ break
|
|
Harald Hoyer |
6adbc8 |
+ done)
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ for holder in /sys/$DEVPATH/holders/*; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ -e $holder ]] || continue
|
|
Harald Hoyer |
6adbc8 |
+ MD_UUID=$(udevadm info --query=property --path=$holder \
|
|
Harald Hoyer |
6adbc8 |
+ | while read line; do
|
|
Harald Hoyer |
6adbc8 |
+ [[ ${line#MD_UUID} = $line ]] && continue
|
|
Harald Hoyer |
6adbc8 |
+ eval "$line"
|
|
Harald Hoyer |
6adbc8 |
+ echo $MD_UUID
|
|
Harald Hoyer |
6adbc8 |
+ break
|
|
Harald Hoyer |
6adbc8 |
+ done)
|
|
Harald Hoyer |
6adbc8 |
+ done
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ [[ ${MD_UUID} ]] || continue
|
|
Harald Hoyer |
6adbc8 |
+ echo " rd.md.uuid=${MD_UUID} " >> "${initdir}/etc/cmdline.d/90mdraid.conf"
|
|
Harald Hoyer |
6adbc8 |
+ }
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
[[ $hostonly ]] && {
|
|
Harald Hoyer |
6adbc8 |
- _rootdev=$(find_root_block_device)
|
|
Harald Hoyer |
6adbc8 |
- if [[ $_rootdev ]]; then
|
|
Harald Hoyer |
6adbc8 |
- # root lives on a block device, so we can be more precise about
|
|
Harald Hoyer |
6adbc8 |
- # hostonly checking
|
|
Harald Hoyer |
6adbc8 |
- check_block_and_slaves is_mdraid "$_rootdev" || return 1
|
|
Harald Hoyer |
6adbc8 |
- else
|
|
Harald Hoyer |
6adbc8 |
- # root is not on a block device, use the shotgun approach
|
|
Harald Hoyer |
6adbc8 |
- blkid | egrep -q '(linux|isw|ddf)_raid' || return 1
|
|
Harald Hoyer |
6adbc8 |
- fi
|
|
Harald Hoyer |
6adbc8 |
+ [[ -d "${initdir}/etc/cmdline.d" ]] || mkdir -p "${initdir}/etc/cmdline.d"
|
|
Harald Hoyer |
6adbc8 |
+ for_each_host_dev_fs check_mdraid
|
|
Harald Hoyer |
6adbc8 |
+ [[ -f "${initdir}/etc/cmdline.d/90mdraid.conf" ]] || return 1
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
return 0
|
|
Harald Hoyer |
6adbc8 |
diff --git a/modules.d/95fstab-sys/module-setup.sh b/modules.d/95fstab-sys/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
index c22b047..ea9db83 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/modules.d/95fstab-sys/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
+++ b/modules.d/95fstab-sys/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
@@ -11,6 +11,6 @@ depends() {
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
install() {
|
|
Harald Hoyer |
6adbc8 |
- dracut_install /etc/fstab.sys
|
|
Harald Hoyer |
6adbc8 |
+ inst /etc/fstab.sys /etc/fstab
|
|
Harald Hoyer |
6adbc8 |
inst_hook pre-pivot 00 "$moddir/mount-sys.sh"
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
diff --git a/modules.d/95nfs/module-setup.sh b/modules.d/95nfs/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
index c5f97c9..bb3b793 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/modules.d/95nfs/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
+++ b/modules.d/95nfs/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
@@ -3,13 +3,19 @@
|
|
Harald Hoyer |
6adbc8 |
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
check() {
|
|
Harald Hoyer |
6adbc8 |
- # If hostonly was requested, fail the check if we are not actually
|
|
Harald Hoyer |
6adbc8 |
- # booting from root.
|
|
Harald Hoyer |
6adbc8 |
- [ $hostonly ] && ! egrep -q '/ nfs[34 ]' /proc/mounts && return 1
|
|
Harald Hoyer |
6adbc8 |
-
|
|
Harald Hoyer |
6adbc8 |
# If our prerequisites are not met, fail anyways.
|
|
Harald Hoyer |
6adbc8 |
type -P rpcbind >/dev/null || type -P portmap >/dev/null || return 1
|
|
Harald Hoyer |
6adbc8 |
type -P rpc.statd mount.nfs mount.nfs4 umount >/dev/null || return 1
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+ [[ $hostonly ]] && {
|
|
Harald Hoyer |
6adbc8 |
+ for fs in ${host_fs_types[@]}; do
|
|
Harald Hoyer |
6adbc8 |
+ strstr "$fs" "|nfs" && return 0
|
|
Harald Hoyer |
6adbc8 |
+ strstr "$fs" "|nfs3" && return 0
|
|
Harald Hoyer |
6adbc8 |
+ strstr "$fs" "|nfs4" && return 0
|
|
Harald Hoyer |
6adbc8 |
+ done
|
|
Harald Hoyer |
6adbc8 |
+ return 255
|
|
Harald Hoyer |
6adbc8 |
+ }
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
return 0
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
index f6dc920..5297a9d 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/modules.d/99base/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
+++ b/modules.d/99base/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
@@ -38,6 +38,7 @@ install() {
|
|
Harald Hoyer |
6adbc8 |
dracut_install switch_root || dfatal "Failed to install switch_root"
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
inst "$moddir/dracut-lib.sh" "/lib/dracut-lib.sh"
|
|
Harald Hoyer |
6adbc8 |
+ inst "$moddir/mount-hook.sh" "/usr/bin/mount-hook"
|
|
Harald Hoyer |
6adbc8 |
inst_hook cmdline 10 "$moddir/parse-root-opts.sh"
|
|
Harald Hoyer |
6adbc8 |
mkdir -p "${initdir}/var"
|
|
Harald Hoyer |
6adbc8 |
[ -x /lib/systemd/systemd-timestamp ] && inst /lib/systemd/systemd-timestamp
|
|
Harald Hoyer |
6adbc8 |
diff --git a/modules.d/99fs-lib/module-setup.sh b/modules.d/99fs-lib/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
index 04b63f1..9c900cc 100755
|
|
Harald Hoyer |
6adbc8 |
--- a/modules.d/99fs-lib/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
+++ b/modules.d/99fs-lib/module-setup.sh
|
|
Harald Hoyer |
6adbc8 |
@@ -10,6 +10,32 @@ depends() {
|
|
Harald Hoyer |
6adbc8 |
return 0
|
|
Harald Hoyer |
6adbc8 |
}
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+echo_fs_helper() {
|
|
Harald Hoyer |
6adbc8 |
+ local dev=$1 fs=$2
|
|
Harald Hoyer |
6adbc8 |
+ case "$fs" in
|
|
Harald Hoyer |
6adbc8 |
+ xfs)
|
|
Harald Hoyer |
6adbc8 |
+ echo -n " xfs_db xfs_repair xfs_check "
|
|
Harald Hoyer |
6adbc8 |
+ ;;
|
|
Harald Hoyer |
6adbc8 |
+ ext?)
|
|
Harald Hoyer |
6adbc8 |
+ echo -n " e2fsck "
|
|
Harald Hoyer |
6adbc8 |
+ ;;
|
|
Harald Hoyer |
6adbc8 |
+ jfs)
|
|
Harald Hoyer |
6adbc8 |
+ echo -n " jfs_fsck "
|
|
Harald Hoyer |
6adbc8 |
+ ;;
|
|
Harald Hoyer |
6adbc8 |
+ reiserfs)
|
|
Harald Hoyer |
6adbc8 |
+ echo -n " reiserfsck "
|
|
Harald Hoyer |
6adbc8 |
+ ;;
|
|
Harald Hoyer |
6adbc8 |
+ btrfs)
|
|
Harald Hoyer |
6adbc8 |
+ echo -n " btrfsck "
|
|
Harald Hoyer |
6adbc8 |
+ ;;
|
|
Harald Hoyer |
6adbc8 |
+ *)
|
|
Harald Hoyer |
6adbc8 |
+ [[ -x fsck.$fs ]] && echo -n " fsck.$fs "
|
|
Harald Hoyer |
6adbc8 |
+ ;;
|
|
Harald Hoyer |
6adbc8 |
+ esac
|
|
Harald Hoyer |
6adbc8 |
+}
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
+
|
|
Harald Hoyer |
6adbc8 |
install() {
|
|
Harald Hoyer |
6adbc8 |
local _helpers
|
|
Harald Hoyer |
6adbc8 |
|
|
Harald Hoyer |
6adbc8 |
@@ -25,33 +51,8 @@ install() {
|
|
Harald Hoyer |
6adbc8 |
e2fsck jfs_fsck reiserfsck btrfsck
|
|
Harald Hoyer |
6adbc8 |
"
|
|
Harald Hoyer |
6adbc8 |
if [[ $hostonly ]]; then
|
|
Harald Hoyer |
6adbc8 |
- print_fs_type() { get_fs_type /dev/block/$1; }
|
|
Harald Hoyer |
6adbc8 |
- _rootdev=$(find_root_block_device)
|
|
Harald Hoyer |
6adbc8 |
- if [[ $_rootdev ]]; then
|
|
Harald Hoyer |
6adbc8 |
- _helpers="umount mount "
|
|
Harald Hoyer |
6adbc8 |
- for fs in $(check_block_and_slaves print_fs_type "$_rootdev"); do
|
|
Harald Hoyer |
6adbc8 |
- case "$fs" in
|
|
Harald Hoyer |
6adbc8 |
- xfs)
|
|
Harald Hoyer |
6adbc8 |
- _helpers+=" xfs_db xfs_repair xfs_check "
|
|
Harald Hoyer |
6adbc8 |
- ;;
|
|
Harald Hoyer |
6adbc8 |
- ext?)
|
|
Harald Hoyer |
6adbc8 |
- _helpers+=" e2fsck "
|
|
Harald Hoyer |
6adbc8 |
- ;;
|
|
Harald Hoyer |
6adbc8 |
- jfs)
|
|
Harald Hoyer |
6adbc8 |
- _helpers+=" jfs_fsck "
|
|
Harald Hoyer |
6adbc8 |
- ;;
|
|
Harald Hoyer |
6adbc8 |
- reiserfs)
|
|
Harald Hoyer |
6adbc8 |
- _helpers+=" reiserfsck "
|
|
Harald Hoyer |
6adbc8 |
- ;;
|
|
Harald Hoyer |
6adbc8 |
- btrfs)
|
|
Harald Hoyer |
6adbc8 |
- _helpers+=" btrfsck "
|
|
Harald Hoyer |
6adbc8 |
- ;;
|
|
Harald Hoyer |
6adbc8 |
- *)
|
|
Harald Hoyer |
6adbc8 |
- [[ -x fsck.$fs ]] && _helpers+= " fsck.$fs "
|
|
Harald Hoyer |
6adbc8 |
- ;;
|
|
Harald Hoyer |
6adbc8 |
- esac
|
|
Harald Hoyer |
6adbc8 |
- done
|
|
Harald Hoyer |
6adbc8 |
- fi
|
|
Harald Hoyer |
6adbc8 |
+ _helpers="umount mount "
|
|
Harald Hoyer |
6adbc8 |
+ _helpers+=$(for_each_host_dev_fs echo_fs_helper)
|
|
Harald Hoyer |
6adbc8 |
fi
|
|
Harald Hoyer |
6adbc8 |
else
|
|
Harald Hoyer |
6adbc8 |
_helpers="$fscks"
|