diff options
| author | jandob | 2016-02-05 21:02:48 +0100 |
|---|---|---|
| committer | jandob | 2016-02-05 21:02:48 +0100 |
| commit | 5aa3f9c307aa243e75bb617d4fc81cae459cdae4 (patch) | |
| tree | e6aa357f6e2eda445c6c52438fddd5307c1b162b /builder/dnbd3-rootfs | |
| parent | add shutdown break (diff) | |
| download | systemd-init-5aa3f9c307aa243e75bb617d4fc81cae459cdae4.tar.gz systemd-init-5aa3f9c307aa243e75bb617d4fc81cae459cdae4.tar.xz systemd-init-5aa3f9c307aa243e75bb617d4fc81cae459cdae4.zip | |
support systemd shutdown pivot root back to initramfs
Diffstat (limited to 'builder/dnbd3-rootfs')
| -rw-r--r-- | builder/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh | 24 | ||||
| -rwxr-xr-x | builder/dnbd3-rootfs/module-setup.sh | 15 |
2 files changed, 36 insertions, 3 deletions
diff --git a/builder/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh b/builder/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh new file mode 100644 index 00000000..1e9366e2 --- /dev/null +++ b/builder/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh @@ -0,0 +1,24 @@ +#!/bin/env bash +# Dracut may not be installed on the new root. Thus copy all services over. +systemdsystemunitdir="$( + dirname "$(find / -name dracut-mount.service -type f -print -quit)")" +mkdir --parents "${NEWROOT}/${systemdsystemunitdir}" +for file in \ + dracut-cmdline.service \ + dracut-initqueue.service \ + dracut-mount.service \ + dracut-pre-mount.service \ + dracut-pre-pivot.service \ + dracut-pre-trigger.service \ + dracut-pre-udev.service; do + cp "${systemdsystemunitdir}/$file" \ + "${NEWROOT}/${systemdsystemunitdir}/$file" + ln -s ../"$file" \ + "${NEWROOT}/${systemdsystemunitdir}/initrd.target.wants/$file" +done + +# Needed to be able to go back to dracut at system shutdown. +mkdir /temp_mnt +mount --bind / /temp_mnt/ +cp -rT /temp_mnt /run/initramfs +umount /temp_mnt && rmdir /temp_mnt diff --git a/builder/dnbd3-rootfs/module-setup.sh b/builder/dnbd3-rootfs/module-setup.sh index 9b931c44..a1514f91 100755 --- a/builder/dnbd3-rootfs/module-setup.sh +++ b/builder/dnbd3-rootfs/module-setup.sh @@ -6,6 +6,12 @@ core.import logging core.import utils # TODO set log level via dracut logging options +# (use $dracut_args +#((len=${#dracut_args[@]})) +#for ((i=0; i < len; i++)); do + #[[ ${dracut_args[$i]} == "--regenerate-all" ]] && \ + #unset dracut_args[$i] +#done logging.set_log_level debug logging.set_commands_log_level debug @@ -78,7 +84,7 @@ check() { depends() { # DEBUG: echo base network bash kernel-modules systemd-initrd dracut-systemd fs-lib rootfs-block - echo base network bash kernel-modules + echo base network bash kernel-modules shutdown # NOTE: btrfs module should be used if it would work. } @@ -145,11 +151,14 @@ install() { /usr/bin/dnbd3root inst_simple "${moddir}/services/dnbd3root.service" \ "${systemdsystemunitdir}/dnbd3root.service" - # don't kill at switch_root + + # copy systemd services to new root (so they don't get killed after + # switch_root) mkdir -p "${initdir}/${systemdsystemunitdir}/initrd-root-fs.target.wants" ln_r "${systemdsystemunitdir}/dnbd3root.service" \ "${systemdsystemunitdir}/initrd-root-fs.target.wants/dnbd3root.service" - inst_hook pre-pivot 95 "$moddir/hooks/copy-dnbd3-generator-into-newroot.sh" + inst_hook pre-pivot 00 "$moddir/hooks/copy-dnbd3-generator-into-newroot.sh" + inst_hook pre-pivot 00 "$moddir/hooks/copy-dracut-systemd-files-into-newroot.sh" else inst_hook pre-mount 10 "$moddir/hooks/prepare-root-partition.sh" fi |
