Harald Hoyer 802052
From 2c431e8ec4c9cb538c633e46888912ad83315ce0 Mon Sep 17 00:00:00 2001
Harald Hoyer 802052
From: Harald Hoyer <harald@redhat.com>
Harald Hoyer 802052
Date: Wed, 9 May 2012 11:47:30 +0200
Harald Hoyer 802052
Subject: [PATCH] add systemd module
Harald Hoyer 802052
Harald Hoyer 802052
---
Harald Hoyer 802052
 modules.d/98systemd/dracut-cmdline.sh          |   27 +++++
Harald Hoyer 802052
 modules.d/98systemd/dracut-initqueue.service   |   27 +++++
Harald Hoyer 802052
 modules.d/98systemd/dracut-initqueue.sh        |  111 ++++++++++++++++++
Harald Hoyer 802052
 modules.d/98systemd/dracut-pre-pivot.service   |   27 +++++
Harald Hoyer 802052
 modules.d/98systemd/dracut-pre-pivot.sh        |   54 +++++++++
Harald Hoyer 802052
 modules.d/98systemd/dracut-pre-trigger.service |   28 +++++
Harald Hoyer 802052
 modules.d/98systemd/dracut-pre-trigger.sh      |   20 ++++
Harald Hoyer 802052
 modules.d/98systemd/dracut-pre-udev.service    |   27 +++++
Harald Hoyer 802052
 modules.d/98systemd/dracut-pre-udev.sh         |   17 +++
Harald Hoyer 802052
 modules.d/98systemd/emergency.service          |   30 +++++
Harald Hoyer 802052
 modules.d/98systemd/module-setup.sh            |  150 ++++++++++++++++++++++++
Harald Hoyer 802052
 modules.d/98systemd/rescue.service             |   31 +++++
Harald Hoyer 802052
 modules.d/98systemd/switch-root.service        |   17 +++
Harald Hoyer 802052
 modules.d/98systemd/switch-root.target         |   16 +++
Harald Hoyer 802052
 test/TEST-02-SYSTEMD/99-idesymlinks.rules      |    8 ++
Harald Hoyer 802052
 test/TEST-02-SYSTEMD/Makefile                  |   10 ++
Harald Hoyer 802052
 test/TEST-02-SYSTEMD/create-root.sh            |   23 ++++
Harald Hoyer 802052
 test/TEST-02-SYSTEMD/cryptroot-ask.sh          |    6 +
Harald Hoyer 802052
 test/TEST-02-SYSTEMD/hard-off.sh               |    3 +
Harald Hoyer 802052
 test/TEST-02-SYSTEMD/test-init.sh              |   20 ++++
Harald Hoyer 802052
 test/TEST-02-SYSTEMD/test.sh                   |   95 +++++++++++++++
Harald Hoyer 35271e
 21 files changed, 747 insertions(+)
Harald Hoyer 802052
 create mode 100755 modules.d/98systemd/dracut-cmdline.sh
Harald Hoyer 802052
 create mode 100644 modules.d/98systemd/dracut-initqueue.service
Harald Hoyer 802052
 create mode 100755 modules.d/98systemd/dracut-initqueue.sh
Harald Hoyer 802052
 create mode 100644 modules.d/98systemd/dracut-pre-pivot.service
Harald Hoyer 802052
 create mode 100755 modules.d/98systemd/dracut-pre-pivot.sh
Harald Hoyer 802052
 create mode 100644 modules.d/98systemd/dracut-pre-trigger.service
Harald Hoyer 802052
 create mode 100755 modules.d/98systemd/dracut-pre-trigger.sh
Harald Hoyer 802052
 create mode 100644 modules.d/98systemd/dracut-pre-udev.service
Harald Hoyer 802052
 create mode 100755 modules.d/98systemd/dracut-pre-udev.sh
Harald Hoyer 802052
 create mode 100644 modules.d/98systemd/emergency.service
Harald Hoyer 802052
 create mode 100755 modules.d/98systemd/module-setup.sh
Harald Hoyer 802052
 create mode 100644 modules.d/98systemd/rescue.service
Harald Hoyer 802052
 create mode 100644 modules.d/98systemd/switch-root.service
Harald Hoyer 802052
 create mode 100644 modules.d/98systemd/switch-root.target
Harald Hoyer 802052
 create mode 100644 test/TEST-02-SYSTEMD/99-idesymlinks.rules
Harald Hoyer 802052
 create mode 100644 test/TEST-02-SYSTEMD/Makefile
Harald Hoyer 802052
 create mode 100755 test/TEST-02-SYSTEMD/create-root.sh
Harald Hoyer 802052
 create mode 100755 test/TEST-02-SYSTEMD/cryptroot-ask.sh
Harald Hoyer 802052
 create mode 100755 test/TEST-02-SYSTEMD/hard-off.sh
Harald Hoyer 802052
 create mode 100755 test/TEST-02-SYSTEMD/test-init.sh
Harald Hoyer 802052
 create mode 100755 test/TEST-02-SYSTEMD/test.sh
Harald Hoyer 802052
Harald Hoyer 802052
diff --git a/modules.d/98systemd/dracut-cmdline.sh b/modules.d/98systemd/dracut-cmdline.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..26ca9c2
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/dracut-cmdline.sh
Harald Hoyer 802052
@@ -0,0 +1,27 @@
Harald Hoyer 802052
+#!/bin/sh
Harald Hoyer 802052
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 802052
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 802052
+
Harald Hoyer 802052
+NEWROOT="/sysroot"
Harald Hoyer 802052
+[ -d $NEWROOT ] || mkdir -p -m 0755 $NEWROOT
Harald Hoyer 802052
+[ -d /run/initramfs ] || mkdir -p -m 0755 /run/initramfs
Harald Hoyer 802052
+[ -d /run/lock ] || mkdir -p -m 0755 /run/lock
Harald Hoyer 802052
+
Harald Hoyer 802052
+exec </dev/console >/dev/console 2>&1
Harald Hoyer 802052
+
Harald Hoyer 802052
+if [ -f /dracut-state.sh ]; then
Harald Hoyer 802052
+    . /dracut-state.sh || :
Harald Hoyer 802052
+fi
Harald Hoyer 802052
+. /lib/dracut-lib.sh
Harald Hoyer 802052
+source_conf /etc/conf.d
Harald Hoyer 802052
+
Harald Hoyer 802052
+# run scriptlets to parse the command line
Harald Hoyer 802052
+getarg 'rd.break=cmdline' 'rdbreak=cmdline' && emergency_shell -n cmdline "Break before cmdline"
Harald Hoyer 802052
+source_hook cmdline
Harald Hoyer 802052
+
Harald Hoyer 802052
+[ -z "$root" ] && die "No or empty root= argument"
Harald Hoyer 802052
+[ -z "$rootok" ] && die "Don't know how to handle 'root=$root'"
Harald Hoyer 802052
+
Harald Hoyer 802052
+export root rflags fstype netroot NEWROOT
Harald Hoyer 802052
+
Harald Hoyer 802052
+export -p > /dracut-state.sh
Harald Hoyer 802052
diff --git a/modules.d/98systemd/dracut-initqueue.service b/modules.d/98systemd/dracut-initqueue.service
Harald Hoyer 802052
new file mode 100644
Harald Hoyer 802052
index 0000000..b0c8509
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/dracut-initqueue.service
Harald Hoyer 802052
@@ -0,0 +1,27 @@
Harald Hoyer 802052
+#  This file is part of systemd.
Harald Hoyer 802052
+#
Harald Hoyer 802052
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 802052
+#  under the terms of the GNU Lesser General Public License as published by
Harald Hoyer 802052
+#  the Free Software Foundation; either version 2.1 of the License, or
Harald Hoyer 802052
+#  (at your option) any later version.
Harald Hoyer 802052
+
Harald Hoyer 802052
+# See systemd.special(7) for details
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Unit]
Harald Hoyer 802052
+Description=Dracut initqueue hook
Harald Hoyer 802052
+DefaultDependencies=no
Harald Hoyer 802052
+After=systemd-udev-trigger.service
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Service]
Harald Hoyer 802052
+Environment=HOME=/
Harald Hoyer 802052
+WorkingDirectory=/
Harald Hoyer 802052
+ExecStart=-/bin/dracut-initqueue
Harald Hoyer 802052
+Type=simple
Harald Hoyer 802052
+StandardInput=tty-force
Harald Hoyer 802052
+StandardOutput=inherit
Harald Hoyer 802052
+StandardError=inherit
Harald Hoyer 802052
+KillMode=process
Harald Hoyer 802052
+
Harald Hoyer 802052
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
Harald Hoyer 802052
+# terminates cleanly.
Harald Hoyer 802052
+KillSignal=SIGHUP
Harald Hoyer 802052
diff --git a/modules.d/98systemd/dracut-initqueue.sh b/modules.d/98systemd/dracut-initqueue.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..402f536
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/dracut-initqueue.sh
Harald Hoyer 802052
@@ -0,0 +1,111 @@
Harald Hoyer 802052
+#!/bin/sh
Harald Hoyer 802052
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 802052
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 802052
+exec </dev/console >/dev/console 2>&1
Harald Hoyer 802052
+
Harald Hoyer 802052
+if [ -f /dracut-state.sh ]; then
Harald Hoyer 802052
+    . /dracut-state.sh || :
Harald Hoyer 802052
+fi
Harald Hoyer 802052
+. /lib/dracut-lib.sh
Harald Hoyer 802052
+source_conf /etc/conf.d
Harald Hoyer 802052
+source_hook pre-trigger
Harald Hoyer 802052
+
Harald Hoyer 802052
+getarg 'rd.break=initqueue' 'rdbreak=initqueue' && emergency_shell -n initqueue "Break before initqueue"
Harald Hoyer 802052
+
Harald Hoyer 802052
+RDRETRY=$(getarg rd.retry 'rd_retry=')
Harald Hoyer 802052
+RDRETRY=${RDRETRY:-20}
Harald Hoyer 802052
+RDRETRY=$(($RDRETRY*2))
Harald Hoyer 802052
+export RDRETRY
Harald Hoyer 802052
+
Harald Hoyer 802052
+main_loop=0
Harald Hoyer 802052
+export main_loop
Harald Hoyer 802052
+
Harald Hoyer 802052
+while :; do
Harald Hoyer 802052
+
Harald Hoyer 802052
+    check_finished && break
Harald Hoyer 802052
+
Harald Hoyer 802052
+    udevsettle
Harald Hoyer 802052
+
Harald Hoyer 802052
+    check_finished && break
Harald Hoyer 802052
+
Harald Hoyer 802052
+    if [ -f $hookdir/initqueue/work ]; then
Harald Hoyer 802052
+        rm $hookdir/initqueue/work
Harald Hoyer 802052
+    fi
Harald Hoyer 802052
+
Harald Hoyer 802052
+    for job in $hookdir/initqueue/*.sh; do
Harald Hoyer 802052
+        [ -e "$job" ] || break
Harald Hoyer 802052
+        job=$job . $job
Harald Hoyer 802052
+        check_finished && break 2
Harald Hoyer 802052
+    done
Harald Hoyer 802052
+
Harald Hoyer 802052
+    $UDEV_QUEUE_EMPTY >/dev/null 2>&1 || continue
Harald Hoyer 802052
+
Harald Hoyer 802052
+    for job in $hookdir/initqueue/settled/*.sh; do
Harald Hoyer 802052
+        [ -e "$job" ] || break
Harald Hoyer 802052
+        job=$job . $job
Harald Hoyer 802052
+        check_finished && break 2
Harald Hoyer 802052
+    done
Harald Hoyer 802052
+
Harald Hoyer 802052
+    $UDEV_QUEUE_EMPTY >/dev/null 2>&1 || continue
Harald Hoyer 802052
+
Harald Hoyer 802052
+    # no more udev jobs and queues empty.
Harald Hoyer 802052
+    sleep 0.5
Harald Hoyer 802052
+
Harald Hoyer 802052
+
Harald Hoyer 802052
+    if [ $main_loop -gt $(($RDRETRY/2)) ]; then
Harald Hoyer 802052
+        for job in $hookdir/initqueue/timeout/*.sh; do
Harald Hoyer 802052
+            [ -e "$job" ] || break
Harald Hoyer 802052
+            job=$job . $job
Harald Hoyer 802052
+            main_loop=0
Harald Hoyer 802052
+        done
Harald Hoyer 802052
+    fi
Harald Hoyer 802052
+
Harald Hoyer 802052
+    main_loop=$(($main_loop+1))
Harald Hoyer 802052
+    [ $main_loop -gt $RDRETRY ] \
Harald Hoyer 802052
+        && { flock -s 9 ; emergency_shell "Unable to process initqueue"; } 9>/.console_lock
Harald Hoyer 802052
+done
Harald Hoyer 802052
+
Harald Hoyer 802052
+unset job
Harald Hoyer 802052
+unset queuetriggered
Harald Hoyer 802052
+unset main_loop
Harald Hoyer 802052
+unset RDRETRY
Harald Hoyer 802052
+
Harald Hoyer 802052
+
Harald Hoyer 802052
+# pre-mount happens before we try to mount the root filesystem,
Harald Hoyer 802052
+# and happens once.
Harald Hoyer 802052
+getarg 'rd.break=pre-mount' 'rdbreak=pre-mount' && emergency_shell -n pre-mount "Break pre-mount"
Harald Hoyer 802052
+source_hook pre-mount
Harald Hoyer 802052
+
Harald Hoyer 802052
+
Harald Hoyer 802052
+getarg 'rd.break=mount' 'rdbreak=mount' && emergency_shell -n mount "Break mount"
Harald Hoyer 802052
+# mount scripts actually try to mount the root filesystem, and may
Harald Hoyer 802052
+# be sourced any number of times. As soon as one suceeds, no more are sourced.
Harald Hoyer 802052
+i=0
Harald Hoyer 802052
+while :; do
Harald Hoyer 802052
+    if ismounted "$NEWROOT"; then
Harald Hoyer 802052
+        usable_root "$NEWROOT" && break;
Harald Hoyer 802052
+        umount "$NEWROOT"
Harald Hoyer 802052
+    fi
Harald Hoyer 802052
+    for f in $hookdir/mount/*.sh; do
Harald Hoyer 802052
+        [ -f "$f" ] && . "$f"
Harald Hoyer 802052
+        if ismounted "$NEWROOT"; then
Harald Hoyer 802052
+            usable_root "$NEWROOT" && break;
Harald Hoyer 802052
+            warn "$NEWROOT has no proper rootfs layout, ignoring and removing offending mount hook"
Harald Hoyer 802052
+            umount "$NEWROOT"
Harald Hoyer 802052
+            rm -f "$f"
Harald Hoyer 802052
+        fi
Harald Hoyer 802052
+    done
Harald Hoyer 802052
+
Harald Hoyer 802052
+    i=$(($i+1))
Harald Hoyer 802052
+    [ $i -gt 20 ] \
Harald Hoyer 802052
+        && { flock -s 9 ; emergency_shell "Can't mount root filesystem"; } 9>/.console_lock
Harald Hoyer 802052
+done
Harald Hoyer 802052
+
Harald Hoyer 802052
+{
Harald Hoyer 802052
+    echo -n "Mounted root filesystem "
Harald Hoyer 802052
+    while read dev mp rest; do [ "$mp" = "$NEWROOT" ] && echo $dev; done < /proc/mounts
Harald Hoyer 802052
+} | vinfo
Harald Hoyer 802052
+
Harald Hoyer 802052
+systemctl switch-root
Harald Hoyer 802052
+
Harald Hoyer 802052
+export -p > /dracut-state.sh
Harald Hoyer 802052
diff --git a/modules.d/98systemd/dracut-pre-pivot.service b/modules.d/98systemd/dracut-pre-pivot.service
Harald Hoyer 802052
new file mode 100644
Harald Hoyer 802052
index 0000000..112834a
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/dracut-pre-pivot.service
Harald Hoyer 802052
@@ -0,0 +1,27 @@
Harald Hoyer 802052
+#  This file is part of systemd.
Harald Hoyer 802052
+#
Harald Hoyer 802052
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 802052
+#  under the terms of the GNU Lesser General Public License as published by
Harald Hoyer 802052
+#  the Free Software Foundation; either version 2.1 of the License, or
Harald Hoyer 802052
+#  (at your option) any later version.
Harald Hoyer 802052
+
Harald Hoyer 802052
+# See systemd.special(7) for details
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Unit]
Harald Hoyer 802052
+Description=Dracut pre-pivot and cleanup hook
Harald Hoyer 802052
+DefaultDependencies=no
Harald Hoyer 802052
+Before=switch-root.service
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Service]
Harald Hoyer 802052
+Environment=HOME=/
Harald Hoyer 802052
+WorkingDirectory=/
Harald Hoyer 802052
+ExecStart=-/bin/dracut-pre-pivot
Harald Hoyer 802052
+Type=oneshot
Harald Hoyer 802052
+StandardInput=tty-force
Harald Hoyer 802052
+StandardOutput=inherit
Harald Hoyer 802052
+StandardError=inherit
Harald Hoyer 802052
+KillMode=process
Harald Hoyer 802052
+
Harald Hoyer 802052
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
Harald Hoyer 802052
+# terminates cleanly.
Harald Hoyer 802052
+KillSignal=SIGHUP
Harald Hoyer 802052
diff --git a/modules.d/98systemd/dracut-pre-pivot.sh b/modules.d/98systemd/dracut-pre-pivot.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..5ee1dd0
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/dracut-pre-pivot.sh
Harald Hoyer 802052
@@ -0,0 +1,54 @@
Harald Hoyer 802052
+#!/bin/sh
Harald Hoyer 802052
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 802052
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 802052
+
Harald Hoyer 802052
+exec </dev/console >/dev/console 2>&1
Harald Hoyer 802052
+if [ -f /dracut-state.sh ]; then
Harald Hoyer 802052
+    . /dracut-state.sh || :
Harald Hoyer 802052
+fi
Harald Hoyer 802052
+. /lib/dracut-lib.sh
Harald Hoyer 802052
+source_conf /etc/conf.d
Harald Hoyer 802052
+
Harald Hoyer 802052
+# pre pivot scripts are sourced just before we doing cleanup and switch over
Harald Hoyer 802052
+# to the new root.
Harald Hoyer 802052
+getarg 'rd.break=pre-pivot' 'rdbreak=pre-pivot' && emergency_shell -n pre-pivot "Break pre-pivot"
Harald Hoyer 802052
+source_hook pre-pivot
Harald Hoyer 802052
+
Harald Hoyer 802052
+# pre pivot cleanup scripts are sourced just before we switch over to the new root.
Harald Hoyer 802052
+getarg 'rd.break=cleanup' 'rdbreak=cleanup' && emergency_shell -n cleanup "Break cleanup"
Harald Hoyer 802052
+source_hook cleanup
Harald Hoyer 802052
+
Harald Hoyer 802052
+# By the time we get here, the root filesystem should be mounted.
Harald Hoyer 802052
+# Try to find init. 
Harald Hoyer 802052
+for i in "$(getarg real_init=)" "$(getarg init=)" $(getargs rd.distroinit=) /sbin/init; do
Harald Hoyer 802052
+    [ -n "$i" ] || continue
Harald Hoyer 802052
+
Harald Hoyer 802052
+    __p=$(readlink -f "${NEWROOT}/${i}")
Harald Hoyer 802052
+    if [ -x "$__p" ]; then
Harald Hoyer 802052
+        INIT="$i"
Harald Hoyer 802052
+        break
Harald Hoyer 802052
+    fi
Harald Hoyer 802052
+done
Harald Hoyer 802052
+
Harald Hoyer 802052
+if [ -n "$INIT" ]; then
Harald Hoyer 802052
+    {
Harald Hoyer 802052
+        echo "NEWROOT=\"$NEWROOT\""
Harald Hoyer 802052
+        echo "NEWINIT=\"$INIT\""
Harald Hoyer 802052
+    } > /etc/switch-root.conf
Harald Hoyer 802052
+else
Harald Hoyer 802052
+    echo "Cannot find init!"
Harald Hoyer 802052
+    echo "Please check to make sure you passed a valid root filesystem!"
Harald Hoyer 802052
+    emergency_shell
Harald Hoyer 802052
+fi
Harald Hoyer 802052
+
Harald Hoyer 802052
+udevadm control --stop-exec-queue
Harald Hoyer 802052
+systemctl stop udevd.service
Harald Hoyer 802052
+udevadm info --cleanup-db
Harald Hoyer 802052
+
Harald Hoyer 802052
+# remove helper symlink
Harald Hoyer 802052
+[ -h /dev/root ] && rm -f /dev/root
Harald Hoyer 802052
+
Harald Hoyer 802052
+getarg rd.break rdbreak && emergency_shell -n switch_root "Break before switch_root"
Harald Hoyer 802052
+info "Switching root"
Harald Hoyer 802052
+
Harald Hoyer 802052
+export -p > /dracut-state.sh
Harald Hoyer 802052
diff --git a/modules.d/98systemd/dracut-pre-trigger.service b/modules.d/98systemd/dracut-pre-trigger.service
Harald Hoyer 802052
new file mode 100644
Harald Hoyer 802052
index 0000000..080b1f5
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/dracut-pre-trigger.service
Harald Hoyer 802052
@@ -0,0 +1,28 @@
Harald Hoyer 802052
+#  This file is part of systemd.
Harald Hoyer 802052
+#
Harald Hoyer 802052
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 802052
+#  under the terms of the GNU Lesser General Public License as published by
Harald Hoyer 802052
+#  the Free Software Foundation; either version 2.1 of the License, or
Harald Hoyer 802052
+#  (at your option) any later version.
Harald Hoyer 802052
+
Harald Hoyer 802052
+# See systemd.special(7) for details
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Unit]
Harald Hoyer 802052
+Description=Dracut pre-trigger hook
Harald Hoyer 802052
+DefaultDependencies=no
Harald Hoyer 802052
+After=systemd-udev.service
Harald Hoyer 802052
+Before=systemd-udev-trigger.service
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Service]
Harald Hoyer 802052
+Environment=HOME=/
Harald Hoyer 802052
+WorkingDirectory=/
Harald Hoyer 802052
+ExecStart=-/bin/dracut-pre-trigger
Harald Hoyer 802052
+Type=oneshot
Harald Hoyer 802052
+StandardInput=tty-force
Harald Hoyer 802052
+StandardOutput=inherit
Harald Hoyer 802052
+StandardError=inherit
Harald Hoyer 802052
+KillMode=process
Harald Hoyer 802052
+
Harald Hoyer 802052
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
Harald Hoyer 802052
+# terminates cleanly.
Harald Hoyer 802052
+KillSignal=SIGHUP
Harald Hoyer 802052
diff --git a/modules.d/98systemd/dracut-pre-trigger.sh b/modules.d/98systemd/dracut-pre-trigger.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..a6c66e4
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/dracut-pre-trigger.sh
Harald Hoyer 802052
@@ -0,0 +1,20 @@
Harald Hoyer 802052
+#!/bin/sh
Harald Hoyer 802052
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 802052
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 802052
+exec </dev/console >/dev/console 2>&1
Harald Hoyer 802052
+
Harald Hoyer 802052
+if [ -f /dracut-state.sh ]; then
Harald Hoyer 802052
+    . /dracut-state.sh || :
Harald Hoyer 802052
+fi
Harald Hoyer 802052
+. /lib/dracut-lib.sh
Harald Hoyer 802052
+source_conf /etc/conf.d
Harald Hoyer 802052
+
Harald Hoyer 802052
+getargbool 0 rd.udev.info -y rdudevinfo && udevadm control "$UDEV_LOG_PRIO_ARG=info"
Harald Hoyer 802052
+getargbool 0 rd.udev.debug -y rdudevdebug && udevadm control "$UDEV_LOG_PRIO_ARG=debug"
Harald Hoyer 802052
+udevproperty "hookdir=$hookdir"
Harald Hoyer 802052
+
Harald Hoyer 802052
+source_hook pre-trigger
Harald Hoyer 802052
+
Harald Hoyer 802052
+udevadm control --reload >/dev/null 2>&1 || :
Harald Hoyer 802052
+
Harald Hoyer 802052
+export -p > /dracut-state.sh
Harald Hoyer 802052
diff --git a/modules.d/98systemd/dracut-pre-udev.service b/modules.d/98systemd/dracut-pre-udev.service
Harald Hoyer 802052
new file mode 100644
Harald Hoyer 802052
index 0000000..09a349d
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/dracut-pre-udev.service
Harald Hoyer 802052
@@ -0,0 +1,27 @@
Harald Hoyer 802052
+#  This file is part of systemd.
Harald Hoyer 802052
+#
Harald Hoyer 802052
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 802052
+#  under the terms of the GNU Lesser General Public License as published by
Harald Hoyer 802052
+#  the Free Software Foundation; either version 2.1 of the License, or
Harald Hoyer 802052
+#  (at your option) any later version.
Harald Hoyer 802052
+
Harald Hoyer 802052
+# See systemd.special(7) for details
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Unit]
Harald Hoyer 802052
+Description=Dracut pre-trigger hook
Harald Hoyer 802052
+DefaultDependencies=no
Harald Hoyer 802052
+Before=systemd-udev.service
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Service]
Harald Hoyer 802052
+Environment=HOME=/
Harald Hoyer 802052
+WorkingDirectory=/
Harald Hoyer 802052
+ExecStart=-/bin/dracut-pre-udev
Harald Hoyer 802052
+Type=oneshot
Harald Hoyer 802052
+StandardInput=tty-force
Harald Hoyer 802052
+StandardOutput=inherit
Harald Hoyer 802052
+StandardError=inherit
Harald Hoyer 802052
+KillMode=process
Harald Hoyer 802052
+
Harald Hoyer 802052
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
Harald Hoyer 802052
+# terminates cleanly.
Harald Hoyer 802052
+KillSignal=SIGHUP
Harald Hoyer 802052
diff --git a/modules.d/98systemd/dracut-pre-udev.sh b/modules.d/98systemd/dracut-pre-udev.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..5740174
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/dracut-pre-udev.sh
Harald Hoyer 802052
@@ -0,0 +1,17 @@
Harald Hoyer 802052
+#!/bin/sh
Harald Hoyer 802052
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 802052
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 802052
+
Harald Hoyer 802052
+exec </dev/console >/dev/console 2>&1
Harald Hoyer 802052
+if [ -f /dracut-state.sh ]; then
Harald Hoyer 802052
+    . /dracut-state.sh || :
Harald Hoyer 802052
+fi
Harald Hoyer 802052
+. /lib/dracut-lib.sh
Harald Hoyer 802052
+source_conf /etc/conf.d
Harald Hoyer 802052
+
Harald Hoyer 802052
+# pre pivot scripts are sourced just before we doing cleanup and switch over
Harald Hoyer 802052
+# to the new root.
Harald Hoyer 802052
+getarg 'rd.break=pre-udev' 'rdbreak=pre-udev' && emergency_shell -n pre-udev "Break pre-udev"
Harald Hoyer 802052
+source_hook pre-udev
Harald Hoyer 802052
+
Harald Hoyer 802052
+export -p > /dracut-state.sh
Harald Hoyer 802052
diff --git a/modules.d/98systemd/emergency.service b/modules.d/98systemd/emergency.service
Harald Hoyer 802052
new file mode 100644
Harald Hoyer 802052
index 0000000..ecebf96
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/emergency.service
Harald Hoyer 802052
@@ -0,0 +1,30 @@
Harald Hoyer 802052
+#  This file is part of systemd.
Harald Hoyer 802052
+#
Harald Hoyer 802052
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 802052
+#  under the terms of the GNU Lesser General Public License as published by
Harald Hoyer 802052
+#  the Free Software Foundation; either version 2.1 of the License, or
Harald Hoyer 802052
+#  (at your option) any later version.
Harald Hoyer 802052
+
Harald Hoyer 802052
+# See systemd.special(7) for details
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Unit]
Harald Hoyer 802052
+Description=Emergency Shell
Harald Hoyer 802052
+DefaultDependencies=no
Harald Hoyer 802052
+Conflicts=shutdown.target
Harald Hoyer 802052
+Before=shutdown.target
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Service]
Harald Hoyer 802052
+Environment=HOME=/
Harald Hoyer 802052
+WorkingDirectory=/
Harald Hoyer 802052
+ExecStart=-/bin/sh -i -l
Harald Hoyer 802052
+ExecStopPost=-/usr/bin/systemctl --fail --no-block switch-root 
Harald Hoyer 802052
+Type=idle
Harald Hoyer 802052
+StandardInput=tty-force
Harald Hoyer 802052
+StandardOutput=inherit
Harald Hoyer 802052
+StandardError=inherit
Harald Hoyer 802052
+KillMode=process
Harald Hoyer 802052
+IgnoreSIGPIPE=no
Harald Hoyer 802052
+
Harald Hoyer 802052
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
Harald Hoyer 802052
+# terminates cleanly.
Harald Hoyer 802052
+KillSignal=SIGHUP
Harald Hoyer 802052
diff --git a/modules.d/98systemd/module-setup.sh b/modules.d/98systemd/module-setup.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..22e570f
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/module-setup.sh
Harald Hoyer 802052
@@ -0,0 +1,150 @@
Harald Hoyer 802052
+#!/bin/bash
Harald Hoyer 802052
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 802052
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 802052
+
Harald Hoyer 802052
+check() {
Harald Hoyer 802052
+    [[ $mount_needs ]] && return 1
Harald Hoyer 802052
+    [ -x /lib/systemd/systemd ] && return 255
Harald Hoyer 802052
+    return 1
Harald Hoyer 802052
+}
Harald Hoyer 802052
+
Harald Hoyer 802052
+depends() {
Harald Hoyer 802052
+    return 0
Harald Hoyer 802052
+}
Harald Hoyer 802052
+
Harald Hoyer 802052
+install() {
Harald Hoyer 802052
+
Harald Hoyer 802052
+    for i in \
Harald Hoyer 802052
+    systemd \
Harald Hoyer 802052
+    systemd-cgroups-agent \
Harald Hoyer 802052
+    systemd-initctl \
Harald Hoyer 802052
+    systemd-shutdownd \
Harald Hoyer 802052
+    systemd-shutdown \
Harald Hoyer 802052
+    systemd-modules-load \
Harald Hoyer 802052
+    systemd-remount-fs \
Harald Hoyer 802052
+    systemd-reply-password \
Harald Hoyer 802052
+    systemd-fsck \
Harald Hoyer 802052
+    systemd-timestamp \
Harald Hoyer 802052
+    systemd-ac-power \
Harald Hoyer 802052
+    systemd-sysctl \
Harald Hoyer 802052
+    systemd-udevd \
Harald Hoyer 802052
+    systemd-journald \
Harald Hoyer 802052
+    systemd-coredump \
Harald Hoyer 802052
+    systemd-vconsole-setup \
Harald Hoyer 802052
+    systemd-cryptsetup \
Harald Hoyer 802052
+    systemd-localed \
Harald Hoyer 802052
+    system/emergency.target \
Harald Hoyer 802052
+    system/sysinit.target \
Harald Hoyer 802052
+    system/basic.target \
Harald Hoyer 802052
+    system/halt.target \
Harald Hoyer 802052
+    system/kexec.target \
Harald Hoyer 802052
+    system/local-fs.target \
Harald Hoyer 802052
+    system/local-fs-pre.target \
Harald Hoyer 802052
+    system/remote-fs.target \
Harald Hoyer 802052
+    system/remote-fs-pre.target \
Harald Hoyer 802052
+    system/network.target \
Harald Hoyer 802052
+    system/nss-lookup.target \
Harald Hoyer 802052
+    system/nss-user-lookup.target \
Harald Hoyer 802052
+    system/poweroff.target \
Harald Hoyer 802052
+    system/reboot.target \
Harald Hoyer 802052
+    system/rescue.target \
Harald Hoyer 802052
+    system/rpcbind.target \
Harald Hoyer 802052
+    system/shutdown.target \
Harald Hoyer 802052
+    system/final.target \
Harald Hoyer 802052
+    system/sigpwr.target \
Harald Hoyer 802052
+    system/sockets.target \
Harald Hoyer 802052
+    system/swap.target \
Harald Hoyer 802052
+    system/systemd-initctl.socket \
Harald Hoyer 802052
+    system/systemd-shutdownd.socket \
Harald Hoyer 802052
+    system/bluetooth.target \
Harald Hoyer 802052
+    system/systemd-ask-password-console.path \
Harald Hoyer 802052
+    system/systemd-udev-control.socket \
Harald Hoyer 802052
+    system/systemd-udev-kernel.socket \
Harald Hoyer 802052
+    system/systemd-ask-password-plymouth.path \
Harald Hoyer 802052
+    system/systemd-journald.socket \
Harald Hoyer 802052
+    system/cryptsetup.target \
Harald Hoyer 802052
+    system/console-shell.service \
Harald Hoyer 802052
+    system/console-getty.service \
Harald Hoyer 802052
+    system/systemd-initctl.service \
Harald Hoyer 802052
+    system/systemd-shutdownd.service \
Harald Hoyer 802052
+    system/systemd-modules-load.service \
Harald Hoyer 802052
+    system/systemd-remount-fs.service \
Harald Hoyer 802052
+    system/systemd-ask-password-console.service \
Harald Hoyer 802052
+    system/halt.service \
Harald Hoyer 802052
+    system/poweroff.service \
Harald Hoyer 802052
+    system/reboot.service \
Harald Hoyer 802052
+    system/kexec.service \
Harald Hoyer 802052
+    system/fsck@.service \
Harald Hoyer 802052
+    system/systemd-udev.service \
Harald Hoyer 802052
+    system/systemd-udev-trigger.service \
Harald Hoyer 802052
+    system/systemd-udev-settle.service \
Harald Hoyer 802052
+    system/systemd-ask-password-plymouth.service \
Harald Hoyer 802052
+    system/systemd-journald.service \
Harald Hoyer 802052
+    system/systemd-vconsole-setup.service \
Harald Hoyer 802052
+    system/systemd-localed.service \
Harald Hoyer 802052
+    system/sysinit.target.wants/systemd-modules-load.service \
Harald Hoyer 802052
+    system/sysinit.target.wants/systemd-ask-password-console.path \
Harald Hoyer 802052
+    system/sysinit.target.wants/systemd-journald.service \
Harald Hoyer 802052
+    system/sysinit.target.wants/systemd-vconsole-setup.service \
Harald Hoyer 802052
+    system/sysinit.target.wants/cryptsetup.target \
Harald Hoyer 802052
+    system/sockets.target.wants/systemd-initctl.socket \
Harald Hoyer 802052
+    system/sockets.target.wants/systemd-shutdownd.socket \
Harald Hoyer 802052
+    system/sockets.target.wants/systemd-udev-control.socket \
Harald Hoyer 802052
+    system/sockets.target.wants/systemd-udev-kernel.socket \
Harald Hoyer 802052
+    system/sockets.target.wants/systemd-journald.socket \
Harald Hoyer 802052
+    system/basic.target.wants/systemd-udev.service \
Harald Hoyer 802052
+    system/basic.target.wants/systemd-udev-trigger.service \
Harald Hoyer 802052
+    system/local-fs.target.wants/systemd-remount-fs.service \
Harald Hoyer 802052
+    system/local-fs.target.wants/fsck-root.service \
Harald Hoyer 802052
+    system/local-fs.target.wants/tmp.mount \
Harald Hoyer 802052
+    system/ctrl-alt-del.target \
Harald Hoyer 802052
+    system/autovt@.service \
Harald Hoyer 802052
+    system/single.service \
Harald Hoyer 802052
+    system/syslog.socket \
Harald Hoyer 802052
+    system/syslog.target \
Harald Hoyer 802052
+    system/switch-root.target \
Harald Hoyer 802052
+    system/switch-root.service \
Harald Hoyer 802052
+    system/umount.target \
Harald Hoyer 802052
+    ;do
Harald Hoyer 802052
+        [ -e "/lib/systemd/$i" ] && dracut_install "/lib/systemd/$i"
Harald Hoyer 802052
+    done
Harald Hoyer 802052
+    for i in /etc/systemd/*.conf; do 
Harald Hoyer 802052
+        dracut_install "$i"
Harald Hoyer 802052
+    done
Harald Hoyer 802052
+
Harald Hoyer 802052
+    ln -fs /lib/systemd/systemd "$initdir/init"
Harald Hoyer 802052
+
Harald Hoyer 802052
+    {
Harald Hoyer 802052
+        echo "LogLevel=debug"
Harald Hoyer 802052
+        echo "LogTarget=console"
Harald Hoyer 802052
+    } >> "$initdir/etc/systemd/system.conf"
Harald Hoyer 802052
+
Harald Hoyer 802052
+    rm -f "$initdir/lib/systemd/system/emergency.service"
Harald Hoyer 802052
+    inst "$moddir/emergency.service" /lib/systemd/system/emergency.service
Harald Hoyer 802052
+    rm -f "$initdir/lib/systemd/system/rescue.service"
Harald Hoyer 802052
+    inst "$moddir/rescue.service" /lib/systemd/system/rescue.service
Harald Hoyer 802052
+    inst "$moddir/switch-root.target" /lib/systemd/system/switch-root.target
Harald Hoyer 802052
+    inst "$moddir/switch-root.service" /lib/systemd/system/switch-root.service
Harald Hoyer 802052
+    ln -s basic.target "$initdir/lib/systemd/system/default.target"
Harald Hoyer 802052
+
Harald Hoyer 802052
+    inst "$moddir/dracut-cmdline.sh" /lib/systemd/system-generators/dracut-cmdline.sh
Harald Hoyer 802052
+
Harald Hoyer 802052
+    inst "$moddir/dracut-pre-udev.sh" /bin/dracut-pre-udev
Harald Hoyer 802052
+    inst "$moddir/dracut-pre-udev.service" /lib/systemd/system/dracut-pre-udev.service
Harald Hoyer 802052
+    ln -s ../dracut-pre-udev.service "$initdir/lib/systemd/system/basic.target.wants/dracut-pre-udev.service"
Harald Hoyer 802052
+
Harald Hoyer 802052
+    inst "$moddir/dracut-pre-trigger.sh" /bin/dracut-pre-trigger
Harald Hoyer 802052
+    inst "$moddir/dracut-pre-trigger.service" /lib/systemd/system/dracut-pre-trigger.service
Harald Hoyer 802052
+    ln -s ../dracut-pre-trigger.service "$initdir/lib/systemd/system/basic.target.wants/dracut-pre-trigger.service"
Harald Hoyer 802052
+
Harald Hoyer 802052
+    inst "$moddir/dracut-initqueue.sh" /bin/dracut-initqueue
Harald Hoyer 802052
+    inst "$moddir/dracut-initqueue.service" /lib/systemd/system/dracut-initqueue.service
Harald Hoyer 802052
+    ln -s ../dracut-initqueue.service "$initdir/lib/systemd/system/basic.target.wants/dracut-initqueue.service"
Harald Hoyer 802052
+    
Harald Hoyer 802052
+    inst "$moddir/dracut-pre-pivot.sh" /bin/dracut-pre-pivot
Harald Hoyer 802052
+    inst "$moddir/dracut-pre-pivot.service" /lib/systemd/system/dracut-pre-pivot.service
Harald Hoyer 802052
+    mkdir -p "$initdir/lib/systemd/system/switch-root.target.wants"
Harald Hoyer 802052
+    ln -s ../dracut-pre-pivot.service "$initdir/lib/systemd/system/switch-root.target.wants/dracut-pre-pivot.service"
Harald Hoyer 802052
+    
Harald Hoyer 802052
+}
Harald Hoyer 802052
+
Harald Hoyer 802052
diff --git a/modules.d/98systemd/rescue.service b/modules.d/98systemd/rescue.service
Harald Hoyer 802052
new file mode 100644
Harald Hoyer 802052
index 0000000..057f8b4
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/rescue.service
Harald Hoyer 802052
@@ -0,0 +1,31 @@
Harald Hoyer 802052
+#  This file is part of systemd.
Harald Hoyer 802052
+#
Harald Hoyer 802052
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 802052
+#  under the terms of the GNU Lesser General Public License as published by
Harald Hoyer 802052
+#  the Free Software Foundation; either version 2.1 of the License, or
Harald Hoyer 802052
+#  (at your option) any later version.
Harald Hoyer 802052
+
Harald Hoyer 802052
+# See systemd.special(7) for details
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Unit]
Harald Hoyer 802052
+Description=Rescue Shell
Harald Hoyer 802052
+DefaultDependencies=no
Harald Hoyer 802052
+Conflicts=shutdown.target
Harald Hoyer 802052
+After=basic.target plymouth-start.service
Harald Hoyer 802052
+Before=shutdown.target
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Service]
Harald Hoyer 802052
+Environment=HOME=/
Harald Hoyer 802052
+WorkingDirectory=/
Harald Hoyer 802052
+ExecStart=-/bin/sh -i -l
Harald Hoyer 802052
+#ExecStopPost=-/usr/bin/systemctl --fail --no-block switch-root /sysroot /sbin/init
Harald Hoyer 802052
+ExecStopPost=-/usr/bin/systemctl --fail --no-block switch-root
Harald Hoyer 802052
+Type=idle
Harald Hoyer 802052
+StandardInput=tty-force
Harald Hoyer 802052
+StandardOutput=inherit
Harald Hoyer 802052
+StandardError=inherit
Harald Hoyer 802052
+KillMode=process
Harald Hoyer 802052
+
Harald Hoyer 802052
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
Harald Hoyer 802052
+# terminates cleanly.
Harald Hoyer 802052
+KillSignal=SIGHUP
Harald Hoyer 802052
diff --git a/modules.d/98systemd/switch-root.service b/modules.d/98systemd/switch-root.service
Harald Hoyer 802052
new file mode 100644
Harald Hoyer 802052
index 0000000..f72739e
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/switch-root.service
Harald Hoyer 802052
@@ -0,0 +1,17 @@
Harald Hoyer 802052
+#  This file is part of systemd.
Harald Hoyer 802052
+#
Harald Hoyer 802052
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 802052
+#  under the terms of the GNU Lesser General Public License as published by
Harald Hoyer 802052
+#  the Free Software Foundation; either version 2.1 of the License, or
Harald Hoyer 802052
+#  (at your option) any later version.
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Unit]
Harald Hoyer 802052
+Description=Switch Root
Harald Hoyer 802052
+DefaultDependencies=no
Harald Hoyer 802052
+Requires=shutdown.target final.target
Harald Hoyer 802052
+After=shutdown.target final.target
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Service]
Harald Hoyer 802052
+Type=oneshot
Harald Hoyer 802052
+EnvironmentFile=/etc/switch-root.conf
Harald Hoyer 802052
+ExecStart=/usr/bin/systemctl --force switch-root ${NEWROOT} ${NEWINIT}
Harald Hoyer 802052
diff --git a/modules.d/98systemd/switch-root.target b/modules.d/98systemd/switch-root.target
Harald Hoyer 802052
new file mode 100644
Harald Hoyer 802052
index 0000000..d0d60e1
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/modules.d/98systemd/switch-root.target
Harald Hoyer 802052
@@ -0,0 +1,16 @@
Harald Hoyer 802052
+#  This file is part of systemd.
Harald Hoyer 802052
+#
Harald Hoyer 802052
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 802052
+#  under the terms of the GNU Lesser General Public License as published by
Harald Hoyer 802052
+#  the Free Software Foundation; either version 2.1 of the License, or
Harald Hoyer 802052
+#  (at your option) any later version.
Harald Hoyer 802052
+
Harald Hoyer 802052
+# See systemd.special(7) for details
Harald Hoyer 802052
+
Harald Hoyer 802052
+[Unit]
Harald Hoyer 802052
+Description=Switch Root
Harald Hoyer 802052
+DefaultDependencies=no
Harald Hoyer 802052
+Requires=switch-root.service
Harald Hoyer 802052
+After=switch-root.service
Harald Hoyer 802052
+AllowIsolate=yes
Harald Hoyer 802052
+
Harald Hoyer 802052
diff --git a/test/TEST-02-SYSTEMD/99-idesymlinks.rules b/test/TEST-02-SYSTEMD/99-idesymlinks.rules
Harald Hoyer 802052
new file mode 100644
Harald Hoyer 802052
index 0000000..d557790
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/test/TEST-02-SYSTEMD/99-idesymlinks.rules
Harald Hoyer 802052
@@ -0,0 +1,8 @@
Harald Hoyer 802052
+ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
Harald Hoyer 802052
+ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
Harald Hoyer 802052
+ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
Harald Hoyer 802052
+ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
Harald Hoyer 802052
+ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
Harald Hoyer 802052
+ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
Harald Hoyer 802052
+ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
Harald Hoyer 802052
+ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"
Harald Hoyer 802052
diff --git a/test/TEST-02-SYSTEMD/Makefile b/test/TEST-02-SYSTEMD/Makefile
Harald Hoyer 802052
new file mode 100644
Harald Hoyer 802052
index 0000000..bc0ddb6
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/test/TEST-02-SYSTEMD/Makefile
Harald Hoyer 802052
@@ -0,0 +1,10 @@
Harald Hoyer 802052
+all:
Harald Hoyer 802052
+	@make -s --no-print-directory -C ../.. all
Harald Hoyer 802052
+	@basedir=../.. testdir=../ ./test.sh --all
Harald Hoyer 802052
+setup:
Harald Hoyer 802052
+	@make --no-print-directory -C ../.. all
Harald Hoyer 802052
+	@basedir=../.. testdir=../ ./test.sh --setup
Harald Hoyer 802052
+clean:
Harald Hoyer 802052
+	@basedir=../.. testdir=../ ./test.sh --clean
Harald Hoyer 802052
+run:
Harald Hoyer 802052
+	@basedir=../.. testdir=../ ./test.sh --run
Harald Hoyer 802052
diff --git a/test/TEST-02-SYSTEMD/create-root.sh b/test/TEST-02-SYSTEMD/create-root.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..0e91ab5
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/test/TEST-02-SYSTEMD/create-root.sh
Harald Hoyer 802052
@@ -0,0 +1,23 @@
Harald Hoyer 802052
+#!/bin/sh
Harald Hoyer 802052
+# don't let udev and this script step on eachother's toes
Harald Hoyer 802052
+for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
Harald Hoyer 802052
+    > "/etc/udev/rules.d/$x"
Harald Hoyer 802052
+done
Harald Hoyer 802052
+rm /etc/lvm/lvm.conf
Harald Hoyer 802052
+udevadm control --reload-rules
Harald Hoyer 802052
+set -e
Harald Hoyer 802052
+# save a partition at the beginning for future flagging purposes
Harald Hoyer 802052
+sfdisk -C 1280 -H 2 -S 32 -L /dev/sda <
Harald Hoyer 802052
+,16
Harald Hoyer 802052
+,
Harald Hoyer 802052
+EOF
Harald Hoyer 802052
+
Harald Hoyer 802052
+mkfs.ext3 -L dracut /dev/sda2
Harald Hoyer 802052
+mkdir -p /root
Harald Hoyer 802052
+mount /dev/sda2 /root
Harald Hoyer 802052
+cp -a -t /root /source/*
Harald Hoyer 802052
+mkdir -p /root/run
Harald Hoyer 802052
+umount /root
Harald Hoyer 802052
+echo "dracut-root-block-created" >/dev/sda1
Harald Hoyer 802052
+poweroff -f
Harald Hoyer 802052
+
Harald Hoyer 802052
diff --git a/test/TEST-02-SYSTEMD/cryptroot-ask.sh b/test/TEST-02-SYSTEMD/cryptroot-ask.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..db27c5b
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/test/TEST-02-SYSTEMD/cryptroot-ask.sh
Harald Hoyer 802052
@@ -0,0 +1,6 @@
Harald Hoyer 802052
+#!/bin/sh
Harald Hoyer 802052
+
Harald Hoyer 802052
+[ -b /dev/mapper/$2 ] && exit 0
Harald Hoyer 802052
+echo -n test >/keyfile
Harald Hoyer 802052
+/sbin/cryptsetup luksOpen $1 $2 
Harald Hoyer 802052
+
Harald Hoyer 802052
diff --git a/test/TEST-02-SYSTEMD/hard-off.sh b/test/TEST-02-SYSTEMD/hard-off.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..12c3d5a
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/test/TEST-02-SYSTEMD/hard-off.sh
Harald Hoyer 802052
@@ -0,0 +1,3 @@
Harald Hoyer 802052
+#!/bin/sh
Harald Hoyer 802052
+getarg rd.shell || poweroff -f
Harald Hoyer 802052
+getarg failme && poweroff -f
Harald Hoyer 802052
diff --git a/test/TEST-02-SYSTEMD/test-init.sh b/test/TEST-02-SYSTEMD/test-init.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..ff17b6b
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/test/TEST-02-SYSTEMD/test-init.sh
Harald Hoyer 802052
@@ -0,0 +1,20 @@
Harald Hoyer 802052
+#!/bin/sh
Harald Hoyer 802052
+export PATH=/sbin:/bin:/usr/sbin:/usr/bin
Harald Hoyer 802052
+strstr() { [ "${1#*$2*}" != "$1" ]; }
Harald Hoyer 802052
+CMDLINE=$(while read line; do echo $line;done < /proc/cmdline)
Harald Hoyer 802052
+plymouth --quit
Harald Hoyer 802052
+exec </dev/console >/dev/console 2>&1
Harald Hoyer 802052
+echo "dracut-root-block-success" >/dev/sda1
Harald Hoyer 802052
+export TERM=linux
Harald Hoyer 802052
+export PS1='initramfs-test:\w\$ '
Harald Hoyer 802052
+[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
Harald Hoyer 802052
+[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
Harald Hoyer 802052
+stty sane
Harald Hoyer 802052
+echo "made it to the rootfs!"
Harald Hoyer 802052
+if strstr "$CMDLINE" "rd.shell"; then
Harald Hoyer 802052
+	strstr "$(setsid --help)" "control" && CTTY="-c"
Harald Hoyer 802052
+	setsid $CTTY sh -i
Harald Hoyer 802052
+fi
Harald Hoyer 802052
+echo "Powering down."
Harald Hoyer 802052
+mount -n -o remount,ro /
Harald Hoyer 802052
+poweroff -f
Harald Hoyer 802052
diff --git a/test/TEST-02-SYSTEMD/test.sh b/test/TEST-02-SYSTEMD/test.sh
Harald Hoyer 802052
new file mode 100755
Harald Hoyer 802052
index 0000000..fe3bfd1
Harald Hoyer 802052
--- /dev/null
Harald Hoyer 802052
+++ b/test/TEST-02-SYSTEMD/test.sh
Harald Hoyer 802052
@@ -0,0 +1,95 @@
Harald Hoyer 802052
+#!/bin/bash
Harald Hoyer 802052
+TEST_DESCRIPTION="root filesystem on a ext3 filesystem"
Harald Hoyer 802052
+
Harald Hoyer 802052
+KVERSION=${KVERSION-$(uname -r)}
Harald Hoyer 802052
+
Harald Hoyer 802052
+# Uncomment this to debug failures
Harald Hoyer 802052
+#DEBUGFAIL="rd.shell"
Harald Hoyer 802052
+test_run() {
Harald Hoyer 802052
+    $testdir/run-qemu \
Harald Hoyer 802052
+	-hda $TESTDIR/root.ext3 \
Harald Hoyer 802052
+	-m 256M -nographic \
Harald Hoyer 802052
+	-net none -kernel /boot/vmlinuz-$KVERSION \
Harald Hoyer 802052
+	-append "root=LABEL=dracut rw loglevel=77 systemd.log_level=debug systemd.log_target=console rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \
Harald Hoyer 802052
+	-initrd $TESTDIR/initramfs.testing
Harald Hoyer 802052
+    grep -m 1 -q dracut-root-block-success $TESTDIR/root.ext3 || return 1
Harald Hoyer 802052
+}
Harald Hoyer 802052
+
Harald Hoyer 802052
+test_setup() {
Harald Hoyer 802052
+    rm -f $TESTDIR/root.ext3
Harald Hoyer 802052
+    # Create the blank file to use as a root filesystem
Harald Hoyer 802052
+    dd if=/dev/null of=$TESTDIR/root.ext3 bs=1M seek=40
Harald Hoyer 802052
+
Harald Hoyer 802052
+    kernel=$KVERSION
Harald Hoyer 802052
+    # Create what will eventually be our root filesystem onto an overlay
Harald Hoyer 802052
+    (
Harald Hoyer 802052
+	initdir=$TESTDIR/overlay/source
Harald Hoyer 802052
+	mkdir -p $initdir
Harald Hoyer 802052
+	. $basedir/dracut-functions.sh
Harald Hoyer 802052
+	dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
Harald Hoyer 802052
+	    mount dmesg ifconfig dhclient mkdir cp ping dhclient \
Harald Hoyer 802052
+	    umount strace less setsid
Harald Hoyer 802052
+	for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
Harald Hoyer 802052
+            [ -f ${_terminfodir}/l/linux ] && break
Harald Hoyer 802052
+	done
Harald Hoyer 802052
+	dracut_install -o ${_terminfodir}/l/linux
Harald Hoyer 802052
+	inst "$basedir/modules.d/40network/dhclient-script" "/sbin/dhclient-script"
Harald Hoyer 802052
+	inst "$basedir/modules.d/40network/ifup" "/sbin/ifup"
Harald Hoyer 802052
+	dracut_install grep
Harald Hoyer 802052
+	inst ./test-init.sh /sbin/init
Harald Hoyer 802052
+	find_binary plymouth >/dev/null && dracut_install plymouth
Harald Hoyer 802052
+	(cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
Harald Hoyer 802052
+	cp -a /etc/ld.so.conf* $initdir/etc
Harald Hoyer 802052
+	sudo ldconfig -r "$initdir"
Harald Hoyer 802052
+    )
Harald Hoyer 802052
+
Harald Hoyer 802052
+    # second, install the files needed to make the root filesystem
Harald Hoyer 802052
+    (
Harald Hoyer 802052
+	initdir=$TESTDIR/overlay
Harald Hoyer 802052
+	. $basedir/dracut-functions.sh
Harald Hoyer 802052
+	dracut_install sfdisk mkfs.ext3 poweroff cp umount
Harald Hoyer 802052
+	inst_hook initqueue 01 ./create-root.sh
Harald Hoyer 802052
+	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
Harald Hoyer 802052
+    )
Harald Hoyer 802052
+
Harald Hoyer 802052
+    # create an initramfs that will create the target root filesystem.
Harald Hoyer 802052
+    # We do it this way so that we do not risk trashing the host mdraid
Harald Hoyer 802052
+    # devices, volume groups, encrypted partitions, etc.
Harald Hoyer 802052
+    $basedir/dracut.sh -l -i $TESTDIR/overlay / \
Harald Hoyer 802052
+	-m "dash udev-rules base rootfs-block kernel-modules" \
Harald Hoyer 802052
+	-d "piix ide-gd_mod ata_piix ext3 sd_mod" \
Harald Hoyer 802052
+        --nomdadmconf \
Harald Hoyer 802052
+	-f $TESTDIR/initramfs.makeroot $KVERSION || return 1
Harald Hoyer 802052
+    rm -rf $TESTDIR/overlay
Harald Hoyer 802052
+    # Invoke KVM and/or QEMU to actually create the target filesystem.
Harald Hoyer 802052
+
Harald Hoyer 802052
+    $testdir/run-qemu \
Harald Hoyer 802052
+	-hda $TESTDIR/root.ext3 \
Harald Hoyer 802052
+	-m 256M -nographic -net none \
Harald Hoyer 802052
+	-kernel "/boot/vmlinuz-$kernel" \
Harald Hoyer 802052
+	-append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
Harald Hoyer 802052
+	-initrd $TESTDIR/initramfs.makeroot  || return 1
Harald Hoyer 802052
+    grep -m 1 -q dracut-root-block-created $TESTDIR/root.ext3 || return 1
Harald Hoyer 802052
+
Harald Hoyer 802052
+
Harald Hoyer 802052
+    (
Harald Hoyer 802052
+	initdir=$TESTDIR/overlay
Harald Hoyer 802052
+	. $basedir/dracut-functions.sh
Harald Hoyer 802052
+	dracut_install poweroff shutdown
Harald Hoyer 802052
+	inst_hook emergency 000 ./hard-off.sh
Harald Hoyer 802052
+	inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
Harald Hoyer 802052
+    )
Harald Hoyer 802052
+    sudo $basedir/dracut.sh -l -i $TESTDIR/overlay / \
Harald Hoyer 802052
+	-a "debug systemd" \
Harald Hoyer 802052
+	-o "network" \
Harald Hoyer 802052
+	-d "piix ide-gd_mod ata_piix ext3 sd_mod" \
Harald Hoyer 802052
+	-f $TESTDIR/initramfs.testing $KVERSION || return 1
Harald Hoyer 802052
+
Harald Hoyer 802052
+#	-o "plymouth network md dmraid multipath fips caps crypt btrfs resume dmsquash-live dm"
Harald Hoyer 802052
+}
Harald Hoyer 802052
+
Harald Hoyer 802052
+test_cleanup() {
Harald Hoyer 802052
+    return 0
Harald Hoyer 802052
+}
Harald Hoyer 802052
+
Harald Hoyer 802052
+. $testdir/test-functions