Blame 0002-module-setup.sh-use-host_fs_types-host_devs.patch

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"