summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Bächler <thomas@archlinux.org>2013-11-19 23:10:28 +0100
committerDave Reisner <dreisner@archlinux.org>2013-11-24 02:57:13 +0100
commit2fa0eb25d47c920c18e7d2498c647a801d836596 (patch)
tree13b6adfc9d791e25fb9d6b1b5cae1dc7150de011
parent88129397a4f4c714195d2a100b851ecf7d0b0e85 (diff)
downloadmkinitcpio-2fa0eb25d47c920c18e7d2498c647a801d836596.tar.gz
mkinitcpio-2fa0eb25d47c920c18e7d2498c647a801d836596.tar.xz
Add mkinitcpio-generate-shutdown-ramfs.service
When enabled, this service generates an "initramfs" that systemd pivots to on shutdown to ensure clean umounting and shutdown of loop and dm devices. The actual work is done by systemd-shutdown.
-rw-r--r--Makefile4
-rw-r--r--install/sd-shutdown14
-rw-r--r--mkinitcpio-generate-shutdown-ramfs.service15
3 files changed, 32 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 1b933c9..38a7111 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,8 @@ DIRS = \
/usr/share/man/man8 \
/usr/share/man/man5 \
/usr/share/man/man1 \
- /usr/share/mkinitcpio
+ /usr/share/mkinitcpio \
+ /usr/lib/systemd/system
all: doc
@@ -48,6 +49,7 @@ install: all
cp -at $(DESTDIR)/usr/lib/initcpio hooks install
install -m644 -t $(DESTDIR)/usr/share/mkinitcpio mkinitcpio.d/*
+ install -m644 mkinitcpio-generate-shutdown-ramfs.service $(DESTDIR)/usr/lib/systemd/system/mkinitcpio-generate-shutdown-ramfs.service
install -m755 50-mkinitcpio.install $(DESTDIR)/usr/lib/kernel/install.d/50-mkinitcpio.install
diff --git a/install/sd-shutdown b/install/sd-shutdown
new file mode 100644
index 0000000..7e86dad
--- /dev/null
+++ b/install/sd-shutdown
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+build() {
+ add_binary /usr/lib/systemd/systemd-shutdown /shutdown
+}
+
+help() {
+ cat <<HELPEOF
+This hook adds systemd-shutdown to the initramfs. This is only
+if the image is extracted to /run/initramfs before shutdown.
+HELPEOF
+}
+
+# vim: set ft=sh ts=4 sw=4 et:
diff --git a/mkinitcpio-generate-shutdown-ramfs.service b/mkinitcpio-generate-shutdown-ramfs.service
new file mode 100644
index 0000000..36c2508
--- /dev/null
+++ b/mkinitcpio-generate-shutdown-ramfs.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Generate shutdown-ramfs
+DefaultDependencies=no
+Before=shutdown.target
+ConditionFileIsExecutable=!/run/initramfs/shutdown
+
+[Service]
+Type=oneshot
+# /tmp could be umounted at this point
+# use /run as temporary directory
+Environment=TMPDIR=/run
+ExecStart=/usr/bin/mkinitcpio -A sd-shutdown -c /dev/null -d /run/initramfs
+
+[Install]
+WantedBy=shutdown.target