128 lines
3.7 KiB
Diff
128 lines
3.7 KiB
Diff
|
From bb61d657c1ff11c4339a777e1fcf57173783bf7d Mon Sep 17 00:00:00 2001
|
||
|
From: Harald Hoyer <harald@redhat.com>
|
||
|
Date: Thu, 15 Dec 2011 14:37:34 +0100
|
||
|
Subject: [PATCH] 99base/dracut-lib.sh: added inst_mount_hook add_mount_point
|
||
|
|
||
|
inst_mount_hook <mountpoint> <prio> <name> <script>
|
||
|
|
||
|
Install a mount hook with priority <prio>,
|
||
|
which executes <script> as soon as <mountpoint> is mounted.
|
||
|
|
||
|
add_mount_point <dev> <mountpoint> <filesystem> <fsopts>
|
||
|
|
||
|
Mount <dev> on <mountpoint> with <filesystem> and <fsopts>
|
||
|
and call any mount hooks, as soon, as it is mounted
|
||
|
---
|
||
|
modules.d/99base/dracut-lib.sh | 91 ++++++++++++++++++++++++++++++++++++++++
|
||
|
1 files changed, 91 insertions(+), 0 deletions(-)
|
||
|
|
||
|
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
|
||
|
index c881869..9eae4d9 100755
|
||
|
--- a/modules.d/99base/dracut-lib.sh
|
||
|
+++ b/modules.d/99base/dracut-lib.sh
|
||
|
@@ -602,6 +602,92 @@ usable_root() {
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
+inst_hook() {
|
||
|
+ local _hookname _unique _name _job _exe
|
||
|
+ while [ $# -gt 0 ]; do
|
||
|
+ case "$1" in
|
||
|
+ --hook)
|
||
|
+ _hookname="/$2";shift;;
|
||
|
+ --unique)
|
||
|
+ _unique="yes";;
|
||
|
+ --name)
|
||
|
+ _name="$2";shift;;
|
||
|
+ *)
|
||
|
+ break;;
|
||
|
+ esac
|
||
|
+ shift
|
||
|
+ done
|
||
|
+
|
||
|
+ if [ -z "$_unique" ]; then
|
||
|
+ _job="${_name}$$"
|
||
|
+ else
|
||
|
+ _job="${_name:-$1}"
|
||
|
+ _job=${_job##*/}
|
||
|
+ fi
|
||
|
+
|
||
|
+ _exe=$1
|
||
|
+ shift
|
||
|
+
|
||
|
+ [ -x "$_exe" ] || _exe=$(command -v $_exe)
|
||
|
+
|
||
|
+ if [ -n "$onetime" ]; then
|
||
|
+ {
|
||
|
+ echo '[ -e "$_job" ] && rm "$_job"'
|
||
|
+ echo "$_exe $@"
|
||
|
+ } > "/tmp/$$-${_job}.sh"
|
||
|
+ else
|
||
|
+ echo "$_exe $@" > "/tmp/$$-${_job}.sh"
|
||
|
+ fi
|
||
|
+
|
||
|
+ mv -f "/tmp/$$-${_job}.sh" "$hookdir/${_hookname}/${_job}.sh"
|
||
|
+}
|
||
|
+
|
||
|
+# inst_mount_hook <mountpoint> <prio> <name> <script>
|
||
|
+#
|
||
|
+# Install a mount hook with priority <prio>,
|
||
|
+# which executes <script> as soon as <mountpoint> is mounted.
|
||
|
+inst_mount_hook() {
|
||
|
+ local _prio="$2" _jobname="$3" _script="$4"
|
||
|
+ local _hookname="mount-$(str_replace "$1" '/' '\\x2f')"
|
||
|
+ [ -d "$hookdir/${_hookname}" ] || mkdir -p "$hookdir/${_hookname}"
|
||
|
+ inst_hook --hook "$_hookname" --unique --name "${_prio}-${_jobname}" "$_script"
|
||
|
+}
|
||
|
+
|
||
|
+# add_mount_point <dev> <mountpoint> <filesystem> <fsopts>
|
||
|
+#
|
||
|
+# Mount <dev> on <mountpoint> with <filesystem> and <fsopts>
|
||
|
+# and call any mount hooks, as soon, as it is mounted
|
||
|
+add_mount_point() {
|
||
|
+ local _dev="$1" _mp="$2" _fs="$3" _fsopts="$4"
|
||
|
+ local _hookname="mount-$(str_replace "$2" '/' '\\x2f')"
|
||
|
+ local _devname="dev-$(str_replace "$1" '/' '\\x2f')"
|
||
|
+ echo "$_dev $_mp $_fs $_fsopts 0 0" >> /etc/fstab
|
||
|
+
|
||
|
+ exec 7>/etc/udev/rules.d/99-mount-${_devname}.rules
|
||
|
+ echo 'SUBSYSTEM!="block", GOTO="mount_end"' >&7
|
||
|
+ echo 'ACTION!="add|change", GOTO="mount_end"' >&7
|
||
|
+ if [ -n "$_dev" ]; then
|
||
|
+ udevmatch "$_dev" >&7 || {
|
||
|
+ warn "add_mount_point dev=$_dev incorrect!"
|
||
|
+ continue
|
||
|
+ }
|
||
|
+ printf ', ' >&7
|
||
|
+ fi
|
||
|
+
|
||
|
+ {
|
||
|
+ printf -- 'RUN+="%s --unique --onetime ' $(command -v initqueue)
|
||
|
+ printf -- '--name mount-%%k '
|
||
|
+ printf -- '%s %s"\n' "$(command -v mount_hook)" "${_mp}"
|
||
|
+ } >&7
|
||
|
+ echo 'LABEL="mount_end"' >&7
|
||
|
+ exec 7>&-
|
||
|
+}
|
||
|
+
|
||
|
+# wait_for_mount <mountpoint>
|
||
|
+#
|
||
|
+# Installs a initqueue-finished script,
|
||
|
+# which will cause the main loop only to exit,
|
||
|
+# if <mountpoint> is mounted.
|
||
|
wait_for_mount()
|
||
|
{
|
||
|
local _name
|
||
|
@@ -614,6 +700,11 @@ wait_for_mount()
|
||
|
} >> "$hookdir/emergency/90-${_name}.sh"
|
||
|
}
|
||
|
|
||
|
+# wait_for_dev <dev>
|
||
|
+#
|
||
|
+# Installs a initqueue-finished script,
|
||
|
+# which will cause the main loop only to exit,
|
||
|
+# if the device <dev> is recognized by the system.
|
||
|
wait_for_dev()
|
||
|
{
|
||
|
local _name
|