]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
systemd: add missing dracut-mount.sh dracut-pre-mount.sh dracut.target
authorHarald Hoyer <harald@redhat.com>
Thu, 7 Mar 2013 09:19:25 +0000 (10:19 +0100)
committerHarald Hoyer <harald@redhat.com>
Thu, 7 Mar 2013 09:35:06 +0000 (10:35 +0100)
modules.d/98systemd/dracut-mount.sh [new file with mode: 0755]
modules.d/98systemd/dracut-pre-mount.sh [new file with mode: 0755]
modules.d/98systemd/dracut.target [new file with mode: 0644]

diff --git a/modules.d/98systemd/dracut-mount.sh b/modules.d/98systemd/dracut-mount.sh
new file mode 100755 (executable)
index 0000000..6cb4519
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+export DRACUT_SYSTEMD=1
+if [ -f /dracut-state.sh ]; then
+    . /dracut-state.sh 2>/dev/null
+fi
+type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+
+source_conf /etc/conf.d
+
+make_trace_mem "hook mount" '1:shortmem' '2+:mem' '3+:slab'
+
+getarg 'rd.break=mount' -d 'rdbreak=mount' && emergency_shell -n mount "Break mount"
+# mount scripts actually try to mount the root filesystem, and may
+# be sourced any number of times. As soon as one suceeds, no more are sourced.
+i=0
+while :; do
+    if ismounted "$NEWROOT"; then
+        usable_root "$NEWROOT" && break;
+        umount "$NEWROOT"
+    fi
+    for f in $hookdir/mount/*.sh; do
+        [ -f "$f" ] && . "$f"
+        if ismounted "$NEWROOT"; then
+            usable_root "$NEWROOT" && break;
+            warn "$NEWROOT has no proper rootfs layout, ignoring and removing offending mount hook"
+            umount "$NEWROOT"
+            rm -f "$f"
+        fi
+    done
+
+    i=$(($i+1))
+    [ $i -gt 20 ] && emergency_shell "Can't mount root filesystem"
+done
+
+export -p > /dracut-state.sh
+
+service="${0##*/}"
+cp "/etc/systemd/system/${service%.sh}.service" /run/systemd/system/
+exit 0
diff --git a/modules.d/98systemd/dracut-pre-mount.sh b/modules.d/98systemd/dracut-pre-mount.sh
new file mode 100755 (executable)
index 0000000..cc2aa43
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+export DRACUT_SYSTEMD=1
+if [ -f /dracut-state.sh ]; then
+    . /dracut-state.sh 2>/dev/null
+fi
+type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+
+source_conf /etc/conf.d
+
+make_trace_mem "hook pre-mount" '1:shortmem' '2+:mem' '3+:slab'
+# pre pivot scripts are sourced just before we doing cleanup and switch over
+# to the new root.
+getarg 'rd.break=pre-mount' 'rdbreak=pre-mount' && emergency_shell -n pre-mount "Break pre-mount"
+source_hook pre-mount
+
+export -p > /dracut-state.sh
+
+service="${0##*/}"
+cp "/etc/systemd/system/${service%.sh}.service" /run/systemd/system/
+exit 0
diff --git a/modules.d/98systemd/dracut.target b/modules.d/98systemd/dracut.target
new file mode 100644 (file)
index 0000000..08a22d2
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]
+Description=dracut
+Requires=basic.target
+Conflicts=rescue.service rescue.target
+After=basic.target rescue.service rescue.target
+AllowIsolate=yes
+OnFailure=emergency.target
+OnFailureIsolate=yes
+
+[Install]
+Alias=default.target