STATUS: unfinished archiso_shutdown script, this only execute a shell to play on it. (I sucessfully unmounted manually all filesystems for configs/baseline) This hook is based on work from Tom Gundersen[#1], but adapted for archiso things. Needs this commit [#2] in initscripts to work (no release at this time). 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=1fa7b4b453e96533ae1... Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar> --- archiso/Makefile | 6 ++++++ archiso/archiso_shutdown | 15 +++++++++++++++ archiso/hooks/archiso_shutdown | 22 ++++++++++++++++++++++ archiso/install/archiso_shutdown | 12 ++++++++++++ 4 files changed, 55 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..8f46b26 --- /dev/null +++ b/archiso/archiso_shutdown @@ -0,0 +1,15 @@ +#!/bin/sh + +#mount --move /run/archiso/run /goodbye +#dmsetup remove_all +#umount $(mount | awk '{ print $3 }' | grep "^/oldroot" | sort -r) + + +/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