summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--hooks/shutdown7
-rw-r--r--install/shutdown17
-rwxr-xr-xshutdown29
4 files changed, 54 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 3e7966d..e1fe5aa 100644
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,7 @@ install: all
chmod 755 ${DESTDIR}/usr/bin/lsinitcpio ${DESTDIR}/usr/bin/mkinitcpio
install -m644 mkinitcpio.conf ${DESTDIR}/etc/mkinitcpio.conf
- install -m755 -t ${DESTDIR}/lib/initcpio init
+ install -m755 -t ${DESTDIR}/lib/initcpio init shutdown
install -m644 -t ${DESTDIR}/lib/initcpio init_functions functions
install -m644 01-memdisk.rules ${DESTDIR}/lib/initcpio/udev/01-memdisk.rules
diff --git a/hooks/shutdown b/hooks/shutdown
new file mode 100644
index 0000000..7c5d9e8
--- /dev/null
+++ b/hooks/shutdown
@@ -0,0 +1,7 @@
+#!/usr/bin/ash
+
+run_hook() {
+ cp -ax / /run/initramfs
+}
+
+# vim: set ft=sh ts=4 sw=4 et:
diff --git a/install/shutdown b/install/shutdown
new file mode 100644
index 0000000..2c533b6
--- /dev/null
+++ b/install/shutdown
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+build() {
+ BINARIES='cp findmnt'
+ SCRIPT='shutdown'
+
+ add_file "/lib/initcpio/shutdown" "/shutdown"
+}
+
+help() {
+ cat <<HELPEOF
+This hook copies the contents of the initramfs into /run/initramfs for reuse
+on shutdown. This is needed when you have /usr mounted on a separate partition.
+HELPEOF
+}
+
+# vim: set ft=sh ts=4 sw=4 et:
diff --git a/shutdown b/shutdown
new file mode 100755
index 0000000..100f505
--- /dev/null
+++ b/shutdown
@@ -0,0 +1,29 @@
+#!/usr/bin/ash
+
+findmnt -Rruno TARGET /oldroot | awk '
+BEGIN { i = 0 }
+! /^\/(proc|dev|sys)/ {
+ i++
+ mounts[i] = $0
+}
+END {
+ for (j = i; j > 0; j--) {
+ print mounts[j]
+ }
+}
+' | while read -r mount; do
+ umount -l "$mount"
+done
+
+case $1 in
+ reboot)
+ type kexec >/dev/null && kexec -e
+ reboot -f
+ ;;
+ poweroff|shutdown|halt)
+ "$1" -f
+ ;;
+ *)
+ poweroff -f
+ ;;
+esac