Harald Hoyer 9d87a2
From fb67e4aa36948b3ed1208bf963da5569d1b13409 Mon Sep 17 00:00:00 2001
Harald Hoyer 9d87a2
From: Harald Hoyer <harald@redhat.com>
Harald Hoyer 9d87a2
Date: Fri, 10 Feb 2012 11:14:42 +0100
Harald Hoyer 9d87a2
Subject: [PATCH] shutdown on demand
Harald Hoyer 9d87a2
Harald Hoyer 9d87a2
Do not save and restore the initramfs, but instead, just unpack the
Harald Hoyer 9d87a2
default initramfs for shutdown on shutdown.
Harald Hoyer 9d87a2
---
Harald Hoyer 9d87a2
 Makefile                                     |    9 +++------
Harald Hoyer 9d87a2
 dracut-backup.service                        |   15 ---------------
Harald Hoyer 9d87a2
 dracut-initramfs-backup.sh                   |   22 ----------------------
Harald Hoyer 9d87a2
 dracut-initramfs-restore.sh                  |   10 ++++++++++
Harald Hoyer 9d87a2
 dracut-restore.service                       |   18 ------------------
Harald Hoyer 9d87a2
 dracut-shutdown.service                      |   18 ++++++++++++++++++
Harald Hoyer 9d87a2
 dracut.conf.d/fedora.conf.example            |    1 -
Harald Hoyer 9d87a2
 dracut.spec                                  |    2 +-
Harald Hoyer 9d87a2
 modules.d/90crypt/cryptroot-ask.sh           |    1 +
Harald Hoyer 9d87a2
 modules.d/90dmraid/dmraid.sh                 |    1 +
Harald Hoyer 9d87a2
 modules.d/90dmsquash-live/dmsquash-live-root |    2 ++
Harald Hoyer 9d87a2
 modules.d/90lvm/lvm_scan.sh                  |    2 ++
Harald Hoyer 9d87a2
 modules.d/90mdraid/mdraid-cleanup.sh         |    4 ++--
Harald Hoyer 9d87a2
 modules.d/90multipath/multipathd.sh          |    1 +
Harald Hoyer 9d87a2
 modules.d/95fcoe/fcoe-up                     |    2 ++
Harald Hoyer 9d87a2
 modules.d/95iscsi/iscsiroot                  |    2 ++
Harald Hoyer 9d87a2
 modules.d/95nbd/nbdroot                      |    1 +
Harald Hoyer 9d87a2
 modules.d/95nfs/nfsroot                      |    2 +-
Harald Hoyer 9d87a2
 modules.d/98usrmount/mount-usr.sh            |   10 ++++++++++
Harald Hoyer 9d87a2
 modules.d/99base/dracut-lib.sh               |    4 ++++
Harald Hoyer 9d87a2
 20 files changed, 61 insertions(+), 66 deletions(-)
Harald Hoyer 9d87a2
 delete mode 100644 dracut-backup.service
Harald Hoyer 9d87a2
 delete mode 100644 dracut-initramfs-backup.sh
Harald Hoyer 9d87a2
 create mode 100644 dracut-initramfs-restore.sh
Harald Hoyer 9d87a2
 delete mode 100644 dracut-restore.service
Harald Hoyer 9d87a2
 create mode 100644 dracut-shutdown.service
Harald Hoyer 9d87a2
Harald Hoyer 9d87a2
diff --git a/Makefile b/Makefile
Harald Hoyer 9d87a2
index 09e87c8..99279ac 100644
Harald Hoyer 9d87a2
--- a/Makefile
Harald Hoyer 9d87a2
+++ b/Makefile
Harald Hoyer 9d87a2
@@ -40,7 +40,7 @@ install: doc
Harald Hoyer 9d87a2
 	mkdir -p $(DESTDIR)$(sysconfdir)/dracut.conf.d
Harald Hoyer 9d87a2
 	install -m 0755 dracut-functions $(DESTDIR)$(pkglibdir)/dracut-functions
Harald Hoyer 9d87a2
 	install -m 0755 dracut-logger $(DESTDIR)$(pkglibdir)/dracut-logger
Harald Hoyer 9d87a2
-	install -m 0755 dracut-initramfs-backup.sh $(DESTDIR)$(pkglibdir)/dracut-initramfs-backup
Harald Hoyer 9d87a2
+	install -m 0755 dracut-initramfs-restore.sh $(DESTDIR)$(pkglibdir)/dracut-initramfs-restore
Harald Hoyer 9d87a2
 	cp -arx modules.d $(DESTDIR)$(pkglibdir)
Harald Hoyer 9d87a2
 	install -m 0644 dracut.8 $(DESTDIR)$(mandir)/man8/dracut.8
Harald Hoyer 9d87a2
 	install -m 0644 dracut-catimages.8 $(DESTDIR)$(mandir)/man8/dracut-catimages.8
Harald Hoyer 9d87a2
@@ -50,12 +50,9 @@ install: doc
Harald Hoyer 9d87a2
 	ln -s dracut.cmdline.7 $(DESTDIR)$(mandir)/man7/dracut.kernel.7
Harald Hoyer 9d87a2
 	if [ -n "$(systemdsystemunitdir)" ]; then \
Harald Hoyer 9d87a2
 		mkdir -p $(DESTDIR)$(systemdsystemunitdir); \
Harald Hoyer 9d87a2
-		install -m 0644 dracut-backup.service $(DESTDIR)$(systemdsystemunitdir); \
Harald Hoyer 9d87a2
-		install -m 0644 dracut-restore.service $(DESTDIR)$(systemdsystemunitdir); \
Harald Hoyer 9d87a2
-		mkdir -p $(DESTDIR)$(systemdsystemunitdir)/sysinit.target.wants; \
Harald Hoyer 9d87a2
+		install -m 0644 dracut-shutdown.service $(DESTDIR)$(systemdsystemunitdir); \
Harald Hoyer 9d87a2
 		mkdir -p $(DESTDIR)$(systemdsystemunitdir)/reboot.target.wants; \
Harald Hoyer 9d87a2
-		ln -s ../dracut-backup.service $(DESTDIR)$(systemdsystemunitdir)/sysinit.target.wants/dracut-backup.service; \
Harald Hoyer 9d87a2
-		ln -s ../dracut-restore.service $(DESTDIR)$(systemdsystemunitdir)/reboot.target.wants/dracut-restore.service; \
Harald Hoyer 9d87a2
+		ln -s ../dracut-shutdown.service $(DESTDIR)$(systemdsystemunitdir)/reboot.target.wants/dracut-shutdown.service; \
Harald Hoyer 9d87a2
 	fi
Harald Hoyer 9d87a2
 
Harald Hoyer 9d87a2
 clean:
Harald Hoyer 9d87a2
diff --git a/dracut-backup.service b/dracut-backup.service
Harald Hoyer 9d87a2
deleted file mode 100644
Harald Hoyer 9d87a2
index 69110eb..0000000
Harald Hoyer 9d87a2
--- a/dracut-backup.service
Harald Hoyer 9d87a2
+++ /dev/null
Harald Hoyer 9d87a2
@@ -1,15 +0,0 @@
Harald Hoyer 9d87a2
-#  This file is part of systemd.
Harald Hoyer 9d87a2
-#
Harald Hoyer 9d87a2
-#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 9d87a2
-#  under the terms of the GNU General Public License as published by
Harald Hoyer 9d87a2
-#  the Free Software Foundation; either version 2 of the License, or
Harald Hoyer 9d87a2
-#  (at your option) any later version.
Harald Hoyer 9d87a2
-
Harald Hoyer 9d87a2
-[Unit]
Harald Hoyer 9d87a2
-Description=Save /run/initramfs
Harald Hoyer 9d87a2
-ConditionPathExists=/run/initramfs
Harald Hoyer 9d87a2
-
Harald Hoyer 9d87a2
-[Service]
Harald Hoyer 9d87a2
-ExecStart=/usr/lib/dracut/dracut-initramfs-backup backup
Harald Hoyer 9d87a2
-Type=oneshot
Harald Hoyer 9d87a2
-RemainAfterExit=yes
Harald Hoyer 9d87a2
diff --git a/dracut-initramfs-backup.sh b/dracut-initramfs-backup.sh
Harald Hoyer 9d87a2
deleted file mode 100644
Harald Hoyer 9d87a2
index 7320d40..0000000
Harald Hoyer 9d87a2
--- a/dracut-initramfs-backup.sh
Harald Hoyer 9d87a2
+++ /dev/null
Harald Hoyer 9d87a2
@@ -1,22 +0,0 @@
Harald Hoyer 9d87a2
-#!/bin/sh
Harald Hoyer 9d87a2
-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 9d87a2
-# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 9d87a2
-
Harald Hoyer 9d87a2
-set -e
Harald Hoyer 9d87a2
-cd /run/initramfs
Harald Hoyer 9d87a2
-
Harald Hoyer 9d87a2
-if [ "x$1" = "xbackup" ]; then
Harald Hoyer 9d87a2
-    compress="gzip"
Harald Hoyer 9d87a2
-    command -v pigz > /dev/null 2>&1 && compress="pigz"
Harald Hoyer 9d87a2
-    find . |cpio -H newc -o --quiet \
Harald Hoyer 9d87a2
-        | pigz > /var/lib/initramfs/_run_initramfs-backup.cpio.gz
Harald Hoyer 9d87a2
-    mv -f /var/lib/initramfs/_run_initramfs-backup.cpio.gz \
Harald Hoyer 9d87a2
-        /var/lib/initramfs/run_initramfs-backup.cpio.gz
Harald Hoyer 9d87a2
-    rm -fr etc bin lib lib64 sbin shutdown tmp usr var
Harald Hoyer 9d87a2
-    > .backuped
Harald Hoyer 9d87a2
-elif [ "x$1" = "xrestore" ]; then
Harald Hoyer 9d87a2
-    [ -f .backuped -a -f /var/lib/initramfs/run_initramfs-backup.cpio.gz ] || exit 1
Harald Hoyer 9d87a2
-    zcat /var/lib/initramfs/run_initramfs-backup.cpio.gz  | cpio -id >/dev/null 2>&1
Harald Hoyer 9d87a2
-    rm .backuped
Harald Hoyer 9d87a2
-    rm -f /var/lib/initramfs/run_initramfs-backup.cpio.gz
Harald Hoyer 9d87a2
-fi
Harald Hoyer 9d87a2
diff --git a/dracut-initramfs-restore.sh b/dracut-initramfs-restore.sh
Harald Hoyer 9d87a2
new file mode 100644
Harald Hoyer 9d87a2
index 0000000..26b698b
Harald Hoyer 9d87a2
--- /dev/null
Harald Hoyer 9d87a2
+++ b/dracut-initramfs-restore.sh
Harald Hoyer 9d87a2
@@ -0,0 +1,10 @@
Harald Hoyer 9d87a2
+#!/bin/sh
Harald Hoyer 9d87a2
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 9d87a2
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 9d87a2
+
Harald Hoyer 9d87a2
+set -e
Harald Hoyer 9d87a2
+cd /run/initramfs
Harald Hoyer 9d87a2
+IMG="/boot/initramfs-$(uname -r).img"
Harald Hoyer 9d87a2
+[ -f .need_shutdown -a -f "$IMG" ] || exit 1
Harald Hoyer 9d87a2
+zcat "$IMG"  | cpio -id >/dev/null 2>&1
Harald Hoyer 9d87a2
+rm .need_shutdown
Harald Hoyer 9d87a2
diff --git a/dracut-restore.service b/dracut-restore.service
Harald Hoyer 9d87a2
deleted file mode 100644
Harald Hoyer 9d87a2
index 3a07efe..0000000
Harald Hoyer 9d87a2
--- a/dracut-restore.service
Harald Hoyer 9d87a2
+++ /dev/null
Harald Hoyer 9d87a2
@@ -1,18 +0,0 @@
Harald Hoyer 9d87a2
-#  This file is part of systemd.
Harald Hoyer 9d87a2
-#
Harald Hoyer 9d87a2
-#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 9d87a2
-#  under the terms of the GNU General Public License as published by
Harald Hoyer 9d87a2
-#  the Free Software Foundation; either version 2 of the License, or
Harald Hoyer 9d87a2
-#  (at your option) any later version.
Harald Hoyer 9d87a2
-
Harald Hoyer 9d87a2
-[Unit]
Harald Hoyer 9d87a2
-Description=Restore /run/initramfs
Harald Hoyer 9d87a2
-After=getty@tty1.service prefdm.service
Harald Hoyer 9d87a2
-Before=reboot.service
Harald Hoyer 9d87a2
-DefaultDependencies=no
Harald Hoyer 9d87a2
-ConditionPathExists=/run/initramfs/.backuped
Harald Hoyer 9d87a2
-
Harald Hoyer 9d87a2
-[Service]
Harald Hoyer 9d87a2
-ExecStart=/usr/lib/dracut/dracut-initramfs-backup restore
Harald Hoyer 9d87a2
-Type=oneshot
Harald Hoyer 9d87a2
-RemainAfterExit=yes
Harald Hoyer 9d87a2
\ No newline at end of file
Harald Hoyer 9d87a2
diff --git a/dracut-shutdown.service b/dracut-shutdown.service
Harald Hoyer 9d87a2
new file mode 100644
Harald Hoyer 9d87a2
index 0000000..4f06e35
Harald Hoyer 9d87a2
--- /dev/null
Harald Hoyer 9d87a2
+++ b/dracut-shutdown.service
Harald Hoyer 9d87a2
@@ -0,0 +1,18 @@
Harald Hoyer 9d87a2
+#  This file is part of systemd.
Harald Hoyer 9d87a2
+#
Harald Hoyer 9d87a2
+#  systemd is free software; you can redistribute it and/or modify it
Harald Hoyer 9d87a2
+#  under the terms of the GNU General Public License as published by
Harald Hoyer 9d87a2
+#  the Free Software Foundation; either version 2 of the License, or
Harald Hoyer 9d87a2
+#  (at your option) any later version.
Harald Hoyer 9d87a2
+
Harald Hoyer 9d87a2
+[Unit]
Harald Hoyer 9d87a2
+Description=Restore /run/initramfs
Harald Hoyer 9d87a2
+After=getty@tty1.service prefdm.service
Harald Hoyer 9d87a2
+Before=reboot.service
Harald Hoyer 9d87a2
+DefaultDependencies=no
Harald Hoyer 9d87a2
+ConditionPathExists=/run/initramfs/.need_shutdown
Harald Hoyer 9d87a2
+
Harald Hoyer 9d87a2
+[Service]
Harald Hoyer 9d87a2
+ExecStart=/usr/lib/dracut/dracut-initramfs-restore
Harald Hoyer 9d87a2
+Type=oneshot
Harald Hoyer 9d87a2
+RemainAfterExit=yes
Harald Hoyer 9d87a2
diff --git a/dracut.conf.d/fedora.conf.example b/dracut.conf.d/fedora.conf.example
Harald Hoyer 9d87a2
index 45063c6..adfecc8 100644
Harald Hoyer 9d87a2
--- a/dracut.conf.d/fedora.conf.example
Harald Hoyer 9d87a2
+++ b/dracut.conf.d/fedora.conf.example
Harald Hoyer 9d87a2
@@ -5,6 +5,5 @@ i18n_vars="/etc/sysconfig/keyboard:KEYTABLE-KEYMAP /etc/sysconfig/i18n:SYSFONT-F
Harald Hoyer 9d87a2
 add_dracutmodules+=" rpmversion "
Harald Hoyer 9d87a2
 omit_dracutmodules+=" dash "
Harald Hoyer 9d87a2
 stdloglvl=3
Harald Hoyer 9d87a2
-prefix=/run/initramfs
Harald Hoyer 9d87a2
 realinitpath="/usr/lib/systemd/systemd"
Harald Hoyer 9d87a2
 install_items+=" vi /etc/virc ps grep cat rm openvt "
Harald Hoyer 9d87a2
diff --git a/dracut.spec b/dracut.spec
Harald Hoyer 9d87a2
index 6efd553..304f1f3 100644
Harald Hoyer 9d87a2
--- a/dracut.spec
Harald Hoyer 9d87a2
+++ b/dracut.spec
Harald Hoyer 9d87a2
@@ -223,7 +223,7 @@ rm -rf $RPM_BUILD_ROOT
Harald Hoyer 9d87a2
 %dir %{dracutlibdir}/modules.d
Harald Hoyer 9d87a2
 %{dracutlibdir}/dracut-functions
Harald Hoyer 9d87a2
 %{dracutlibdir}/dracut-logger
Harald Hoyer 9d87a2
-%{dracutlibdir}/dracut-initramfs-backup
Harald Hoyer 9d87a2
+%{dracutlibdir}/dracut-initramfs-restore
Harald Hoyer 9d87a2
 %config(noreplace) /etc/dracut.conf
Harald Hoyer 9d87a2
 %if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} > 6
Harald Hoyer 9d87a2
 %config /etc/dracut.conf.d/01-dist.conf
Harald Hoyer 9d87a2
diff --git a/modules.d/90crypt/cryptroot-ask.sh b/modules.d/90crypt/cryptroot-ask.sh
Harald Hoyer 9d87a2
index 6a95dc2..aba1331 100755
Harald Hoyer 9d87a2
--- a/modules.d/90crypt/cryptroot-ask.sh
Harald Hoyer 9d87a2
+++ b/modules.d/90crypt/cryptroot-ask.sh
Harald Hoyer 9d87a2
@@ -117,6 +117,7 @@ unset device luksname luksfile
Harald Hoyer 9d87a2
 # mark device as asked
Harald Hoyer 9d87a2
 >> /tmp/cryptroot-asked-$2
Harald Hoyer 9d87a2
 
Harald Hoyer 9d87a2
+need_shutdown
Harald Hoyer 9d87a2
 udevsettle
Harald Hoyer 9d87a2
 
Harald Hoyer 9d87a2
 exit 0
Harald Hoyer 9d87a2
diff --git a/modules.d/90dmraid/dmraid.sh b/modules.d/90dmraid/dmraid.sh
Harald Hoyer 9d87a2
index feff516..574dc3b 100755
Harald Hoyer 9d87a2
--- a/modules.d/90dmraid/dmraid.sh
Harald Hoyer 9d87a2
+++ b/modules.d/90dmraid/dmraid.sh
Harald Hoyer 9d87a2
@@ -40,3 +40,4 @@ else
Harald Hoyer 9d87a2
     done
Harald Hoyer 9d87a2
 fi
Harald Hoyer 9d87a2
 
Harald Hoyer 9d87a2
+need_shutdown
Harald Hoyer 9d87a2
diff --git a/modules.d/90dmsquash-live/dmsquash-live-root b/modules.d/90dmsquash-live/dmsquash-live-root
Harald Hoyer 9d87a2
index d9fcc43..e3606cf 100755
Harald Hoyer 9d87a2
--- a/modules.d/90dmsquash-live/dmsquash-live-root
Harald Hoyer 9d87a2
+++ b/modules.d/90dmsquash-live/dmsquash-live-root
Harald Hoyer 9d87a2
@@ -206,4 +206,6 @@ fi
Harald Hoyer 9d87a2
 ln -s /dev/mapper/live-rw /dev/root
Harald Hoyer 9d87a2
 printf '/bin/mount %s /dev/mapper/live-rw %s\n' "$ROOTFLAGS" "$NEWROOT" > $hookdir/mount/01-$$-live.sh
Harald Hoyer 9d87a2
 
Harald Hoyer 9d87a2
+need_shutdown
Harald Hoyer 9d87a2
+
Harald Hoyer 9d87a2
 exit 0
Harald Hoyer 9d87a2
diff --git a/modules.d/90lvm/lvm_scan.sh b/modules.d/90lvm/lvm_scan.sh
Harald Hoyer 9d87a2
index 3c0094e..104565f 100755
Harald Hoyer 9d87a2
--- a/modules.d/90lvm/lvm_scan.sh
Harald Hoyer 9d87a2
+++ b/modules.d/90lvm/lvm_scan.sh
Harald Hoyer 9d87a2
@@ -126,3 +126,5 @@ if [ "$lvmwritten" ]; then
Harald Hoyer 9d87a2
     rm -f /etc/lvm/lvm.conf
Harald Hoyer 9d87a2
 fi
Harald Hoyer 9d87a2
 unset lvmwritten
Harald Hoyer 9d87a2
+
Harald Hoyer 9d87a2
+need_shutdown
Harald Hoyer 9d87a2
diff --git a/modules.d/90mdraid/mdraid-cleanup.sh b/modules.d/90mdraid/mdraid-cleanup.sh
Harald Hoyer 9d87a2
index 3ffa2d3..2e8a389 100755
Harald Hoyer 9d87a2
--- a/modules.d/90mdraid/mdraid-cleanup.sh
Harald Hoyer 9d87a2
+++ b/modules.d/90mdraid/mdraid-cleanup.sh
Harald Hoyer 9d87a2
@@ -13,11 +13,11 @@ for md in /dev/md[0-9_]*; do
Harald Hoyer 9d87a2
         containers="$containers $md"
Harald Hoyer 9d87a2
         continue
Harald Hoyer 9d87a2
     fi
Harald Hoyer 9d87a2
-    mdadm -S "$md" >/dev/null 2>&1
Harald Hoyer 9d87a2
+    mdadm -S "$md" >/dev/null 2>&1 || need_shutdown
Harald Hoyer 9d87a2
 done
Harald Hoyer 9d87a2
 
Harald Hoyer 9d87a2
 for md in $containers; do
Harald Hoyer 9d87a2
-    mdadm -S "$md" >/dev/null 2>&1
Harald Hoyer 9d87a2
+    mdadm -S "$md" >/dev/null 2>&1 || need_shutdown
Harald Hoyer 9d87a2
 done
Harald Hoyer 9d87a2
 
Harald Hoyer 9d87a2
 unset containers udevinfo
Harald Hoyer 9d87a2
diff --git a/modules.d/90multipath/multipathd.sh b/modules.d/90multipath/multipathd.sh
Harald Hoyer 9d87a2
index 4d8935f..6d6eb99 100755
Harald Hoyer 9d87a2
--- a/modules.d/90multipath/multipathd.sh
Harald Hoyer 9d87a2
+++ b/modules.d/90multipath/multipathd.sh
Harald Hoyer 9d87a2
@@ -5,6 +5,7 @@
Harald Hoyer 9d87a2
 if [ -e /etc/multipath.conf ]; then
Harald Hoyer 9d87a2
     modprobe dm-multipath
Harald Hoyer 9d87a2
     multipathd -B || multipathd
Harald Hoyer 9d87a2
+    need_shutdown
Harald Hoyer 9d87a2
 else
Harald Hoyer 9d87a2
     rm /etc/udev/rules.d/??-multipath.rules 2>/dev/null
Harald Hoyer 9d87a2
 fi
Harald Hoyer 9d87a2
diff --git a/modules.d/95fcoe/fcoe-up b/modules.d/95fcoe/fcoe-up
Harald Hoyer 9d87a2
index 5c5bdb5..1e1bcf5 100755
Harald Hoyer 9d87a2
--- a/modules.d/95fcoe/fcoe-up
Harald Hoyer 9d87a2
+++ b/modules.d/95fcoe/fcoe-up
Harald Hoyer 9d87a2
@@ -46,3 +46,5 @@ elif [ "$netdriver" = "bnx2x" ]; then
Harald Hoyer 9d87a2
 else
Harald Hoyer 9d87a2
     echo -n "$netif" > /sys/module/fcoe/parameters/create
Harald Hoyer 9d87a2
 fi
Harald Hoyer 9d87a2
+
Harald Hoyer 9d87a2
+need_shutdown
Harald Hoyer 9d87a2
diff --git a/modules.d/95iscsi/iscsiroot b/modules.d/95iscsi/iscsiroot
Harald Hoyer 9d87a2
index e7bac74..d8f7c8f 100755
Harald Hoyer 9d87a2
--- a/modules.d/95iscsi/iscsiroot
Harald Hoyer 9d87a2
+++ b/modules.d/95iscsi/iscsiroot
Harald Hoyer 9d87a2
@@ -205,6 +205,8 @@ else
Harald Hoyer 9d87a2
     handle_netroot $iroot
Harald Hoyer 9d87a2
 fi
Harald Hoyer 9d87a2
 
Harald Hoyer 9d87a2
+need_shutdown
Harald Hoyer 9d87a2
+
Harald Hoyer 9d87a2
 # now we have a root filesystem somewhere in /dev/sda*
Harald Hoyer 9d87a2
 # let the normal block handler handle root=
Harald Hoyer 9d87a2
 exit 0
Harald Hoyer 9d87a2
diff --git a/modules.d/95nbd/nbdroot b/modules.d/95nbd/nbdroot
Harald Hoyer 9d87a2
index 1fb2140..e20b4e4 100755
Harald Hoyer 9d87a2
--- a/modules.d/95nbd/nbdroot
Harald Hoyer 9d87a2
+++ b/modules.d/95nbd/nbdroot
Harald Hoyer 9d87a2
@@ -107,4 +107,5 @@ fi
Harald Hoyer 9d87a2
 # NBD doesn't emit uevents when it gets connected, so kick it
Harald Hoyer 9d87a2
 echo change > /sys/block/nbd0/uevent
Harald Hoyer 9d87a2
 udevadm settle
Harald Hoyer 9d87a2
+need_shutdown
Harald Hoyer 9d87a2
 exit 0
Harald Hoyer 9d87a2
diff --git a/modules.d/95nfs/nfsroot b/modules.d/95nfs/nfsroot
Harald Hoyer 9d87a2
index 2103e24..764971b 100755
Harald Hoyer 9d87a2
--- a/modules.d/95nfs/nfsroot
Harald Hoyer 9d87a2
+++ b/modules.d/95nfs/nfsroot
Harald Hoyer 9d87a2
@@ -106,4 +106,4 @@ echo 'settle_exit_if_exists="--exit-if-exists=/dev/root"; rm "$job"' > $hookdir/
Harald Hoyer 9d87a2
 # force udevsettle to break
Harald Hoyer 9d87a2
 > $hookdir/initqueue/work
Harald Hoyer 9d87a2
 
Harald Hoyer 9d87a2
-
Harald Hoyer 9d87a2
+need_shutdown
Harald Hoyer 9d87a2
diff --git a/modules.d/98usrmount/mount-usr.sh b/modules.d/98usrmount/mount-usr.sh
Harald Hoyer 9d87a2
index 5139c7a..9998624 100755
Harald Hoyer 9d87a2
--- a/modules.d/98usrmount/mount-usr.sh
Harald Hoyer 9d87a2
+++ b/modules.d/98usrmount/mount-usr.sh
Harald Hoyer 9d87a2
@@ -11,6 +11,16 @@ mount_usr()
Harald Hoyer 9d87a2
     # check, if we have to mount the /usr filesystem
Harald Hoyer 9d87a2
     while read _dev _mp _fs _opts _rest; do
Harald Hoyer 9d87a2
         if [ "$_mp" = "/usr" ]; then
Harald Hoyer 9d87a2
+            case "$_dev" in
Harald Hoyer 9d87a2
+                LABEL=*)
Harald Hoyer 9d87a2
+                    _dev="$(echo $_dev | sed 's,/,\\x2f,g')"
Harald Hoyer 9d87a2
+                    _dev="/dev/disk/by-label/${_dev#LABEL=}"
Harald Hoyer 9d87a2
+		    ;;
Harald Hoyer 9d87a2
+                UUID=*)
Harald Hoyer 9d87a2
+                    _dev="${_dev#block:}"
Harald Hoyer 9d87a2
+                    _dev="/dev/disk/by-uuid/${_dev#UUID=}"
Harald Hoyer 9d87a2
+                    ;;
Harald Hoyer 9d87a2
+            esac
Harald Hoyer 9d87a2
             echo "$_dev ${NEWROOT}${_mp} $_fs ${_opts} $_rest"
Harald Hoyer 9d87a2
             _usr_found="1"
Harald Hoyer 9d87a2
             break
Harald Hoyer 9d87a2
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
Harald Hoyer 9d87a2
index 4897a3d..6b70adf 100755
Harald Hoyer 9d87a2
--- a/modules.d/99base/dracut-lib.sh
Harald Hoyer 9d87a2
+++ b/modules.d/99base/dracut-lib.sh
Harald Hoyer 9d87a2
@@ -738,3 +738,7 @@ killproc() {
Harald Hoyer 9d87a2
         fi
Harald Hoyer 9d87a2
     done
Harald Hoyer 9d87a2
 }
Harald Hoyer 9d87a2
+
Harald Hoyer 9d87a2
+need_shutdown() {
Harald Hoyer 9d87a2
+    >/run/initramfs/.need_shutdown
Harald Hoyer 9d87a2
+}