[arch-releng] [DRAFT] [archiso] Add archiso_shutdown hook.
Gerardo Exequiel Pozzi
vmlinuz386 at yahoo.com.ar
Wed Aug 24 19:23:46 EDT 2011
STATUS:
Works for standard boot and with cow_device :)
TODO:
Testing needed for archiso_loop_mnt and archiso_pxe_nbd
Also for copytoram=y, and mix of options/hooks.
NEEDS:
This commit [#2] in initscripts to work (no release at this time).
Also this other [#3] for mkinitcpio (fix /run that is mounted as noexec)
This hook is based on work from Tom Gundersen[#1], but adapted for archiso things.
Motivation for this is for unmount property all filesystem, mostly for dm-snapshot persistent.
[#1] http://mailman.archlinux.org/pipermail/arch-projects/2011-July/001549.html
[#2] http://projects.archlinux.org/initscripts.git/commit/?id=1fa7b4b453e96533ae1db3630031285e5fc302b3
[#3] http://mailman.archlinux.org/pipermail/arch-projects/2011-August/001749.html
Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386 at yahoo.com.ar>
---
archiso/Makefile | 6 ++++++
archiso/archiso_shutdown | 22 ++++++++++++++++++++++
archiso/hooks/archiso_shutdown | 22 ++++++++++++++++++++++
archiso/install/archiso_shutdown | 12 ++++++++++++
4 files changed, 62 insertions(+), 0 deletions(-)
create mode 100644 archiso/archiso_shutdown
create mode 100644 archiso/hooks/archiso_shutdown
create mode 100644 archiso/install/archiso_shutdown
diff --git a/archiso/Makefile b/archiso/Makefile
index a751acd..5eac16f 100644
--- a/archiso/Makefile
+++ b/archiso/Makefile
@@ -12,6 +12,9 @@ install-hooks:
# hooks/install are needed by mkinitcpio
install -D -m 644 hooks/archiso $(DESTDIR)/lib/initcpio/hooks/archiso
install -D -m 644 install/archiso $(DESTDIR)/lib/initcpio/install/archiso
+ install -D -m 755 archiso_shutdown $(DESTDIR)/lib/initcpio/archiso_shutdown
+ install -D -m 644 hooks/archiso_shutdown $(DESTDIR)/lib/initcpio/hooks/archiso_shutdown
+ install -D -m 644 install/archiso_shutdown $(DESTDIR)/lib/initcpio/install/archiso_shutdown
install -D -m 644 hooks/archiso_pxe_nbd $(DESTDIR)/lib/initcpio/hooks/archiso_pxe_nbd
install -D -m 644 install/archiso_pxe_nbd $(DESTDIR)/lib/initcpio/install/archiso_pxe_nbd
install -D -m 644 hooks/archiso_loop_mnt $(DESTDIR)/lib/initcpio/hooks/archiso_loop_mnt
@@ -31,6 +34,9 @@ uninstall:
rm -f $(DESTDIR)/usr/bin/testiso
rm -f $(DESTDIR)/lib/initcpio/hooks/archiso
rm -f $(DESTDIR)/lib/initcpio/install/archiso
+ rm -f $(DESTDIR)/lib/initcpio/archiso_shutdown
+ rm -f $(DESTDIR)/lib/initcpio/hooks/archiso_shutdown
+ rm -f $(DESTDIR)/lib/initcpio/install/archiso_shutdown
rm -f $(DESTDIR)/lib/initcpio/hooks/archiso_pxe_nbd
rm -f $(DESTDIR)/lib/initcpio/install/archiso_pxe_nbd
rm -f $(DESTDIR)/lib/initcpio/hooks/archiso_loop_mnt
diff --git a/archiso/archiso_shutdown b/archiso/archiso_shutdown
new file mode 100644
index 0000000..ffbb416
--- /dev/null
+++ b/archiso/archiso_shutdown
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Lazy unmount /oldroot and all things inside.
+umount -l /oldroot
+
+# Remove all dm-snapshot devices.
+dmsetup remove_all
+
+# Detach each loop device in reverse order (archiso start from 100 to N).
+for _lup in $(ls -r /dev/loop???); do
+ losetup -d ${_lup}
+done
+
+# Only in DRAFT!
+/bin/sh
+
+# reboot / poweroff / halt, depending on the argument passed by init
+# if something invalid is passed, we halt
+case "$1" in
+ reboot|poweroff|halt) "$1" -f ;;
+ *) halt -f;;
+esac
diff --git a/archiso/hooks/archiso_shutdown b/archiso/hooks/archiso_shutdown
new file mode 100644
index 0000000..c3940fc
--- /dev/null
+++ b/archiso/hooks/archiso_shutdown
@@ -0,0 +1,22 @@
+run_hook ()
+{
+ msg -n ":: Creating shutdown ramfs..."
+
+ mkdir -p /run/initramfs/usr/bin
+ mkdir /run/initramfs/usr/sbin
+ mkdir /run/initramfs/bin
+ mkdir /run/initramfs/sbin
+ mkdir /run/initramfs/lib
+ mkdir -p /run/initramfs/goodbye
+
+ cp /bin/busybox /run/initramfs/bin/
+ cp /lib/ld-* /run/initramfs/lib/
+ cp /lib/lib* /run/initramfs/lib/
+ cp /sbin/lvm /run/initramfs/sbin/
+ cp /sbin/dmsetup /run/initramfs/sbin/
+
+ chroot /run/initramfs /bin/busybox --install
+ cp /shutdown /run/initramfs/
+
+ msg "done."
+}
diff --git a/archiso/install/archiso_shutdown b/archiso/install/archiso_shutdown
new file mode 100644
index 0000000..d31cf56
--- /dev/null
+++ b/archiso/install/archiso_shutdown
@@ -0,0 +1,12 @@
+build() {
+ SCRIPT="archiso_shutdown"
+ add_binary /lib/initcpio/archiso_shutdown /shutdown
+}
+
+help () {
+ cat <<HELPEOF
+This hook will create a shutdown initrd in /run/mkinitramfs
+that we can pivot to on shutdown in order to unmount /
+(and any submounts such as /usr) cleanly.
+HELPEOF
+}
--
1.7.6
More information about the arch-releng
mailing list