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. --- Makefile | 4 +++- install/sd-shutdown | 14 ++++++++++++++ mkinitcpio-generate-shutdown-ramfs.service | 15 +++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 install/sd-shutdown create mode 100644 mkinitcpio-generate-shutdown-ramfs.service 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 -- 1.8.4.2