harald / rpms / dracut

Forked from rpms/dracut 5 years ago
Clone
Blob Blame History Raw
From 0d186afccd8ad113f21757642c7903d1956200cd Mon Sep 17 00:00:00 2001
From: Ian Dall <ian@beware.dropbear.id.au>
Date: Wed, 22 Sep 2010 16:49:19 +0200
Subject: [PATCH 129/133] 95fstab-sys: mount all /etc/fstab.sys volumes before switch_root

A new dracut module to implement fstab.sys handling

This module implements fstab.sys handling. This has to happen after the root
mount and before the nfsroot-cleanup pre-pivot at least. I've made to happen at
the beginning of the pre-pivot scripts, although it should maybe be at the end
of the mount scripts. This latter would be harder to do because the actual
mount is currently done by 99mount-root.sh and there is no 2 digit integer
higher than 99 :-(

There are perhaps other ways of achieving this end, such as having the
nfsroot-cleanup trawl through the newroot's /etc/fstab and auto-magically
figure out if there are any mounts which are pre-requisites for the
/var/lib/nfs/rpc_pipefs mount and do them first. Likewise post pivot,
/etc/rc.sysinit could figure out of there are any pre-requisite mounts for
/var/lib/stateless/{writeable,state} before doing those mounts. In short, make
it the responsibility of anything doing a mount to check if there are any
pre-requisites in /etc/fstab and mount them first. However, this spreads the
changes needed over more places, so I favour the fstab.sys approach. Also, who
knows what other uses administartors may have put fstab.sys to? and this undoes
a regression caused by the move from mkinitrd to dracut.
---
 modules.d/95fstab-sys/check        |    2 ++
 modules.d/95fstab-sys/install      |    3 +++
 modules.d/95fstab-sys/mount-sys.sh |   15 +++++++++++++++
 3 files changed, 20 insertions(+), 0 deletions(-)
 create mode 100755 modules.d/95fstab-sys/check
 create mode 100755 modules.d/95fstab-sys/install
 create mode 100755 modules.d/95fstab-sys/mount-sys.sh

diff --git a/modules.d/95fstab-sys/check b/modules.d/95fstab-sys/check
new file mode 100755
index 0000000..f5e2f55
--- /dev/null
+++ b/modules.d/95fstab-sys/check
@@ -0,0 +1,2 @@
+#!/bin/sh
+test -f /etc/fstab.sys
diff --git a/modules.d/95fstab-sys/install b/modules.d/95fstab-sys/install
new file mode 100755
index 0000000..a42ee25
--- /dev/null
+++ b/modules.d/95fstab-sys/install
@@ -0,0 +1,3 @@
+#!/bin/sh
+dracut_install /etc/fstab.sys
+inst_hook pre-pivot 00 "$moddir/mount-sys.sh"
diff --git a/modules.d/95fstab-sys/mount-sys.sh b/modules.d/95fstab-sys/mount-sys.sh
new file mode 100755
index 0000000..e8260da
--- /dev/null
+++ b/modules.d/95fstab-sys/mount-sys.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+fstab_mount(){
+    local dev mp type opts rest
+    test -e "$1" || return 1
+    info "Mounting from $1"
+    while read dev mp type opts rest; do
+	[ -z "${dev%%#*}" ]&& continue # Skip comment lines
+	mount -v -t $type -o $opts $dev $NEWROOT/$mp
+    done < $1 | vinfo
+    return 0
+}
+
+for r in $NEWROOT /; do
+    fstab_mount "$r/etc/fstab.sys" && break
+done
-- 
1.7.3