diff options
Diffstat (limited to 'builder/modules.d/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh')
-rwxr-xr-x | builder/modules.d/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/builder/modules.d/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh b/builder/modules.d/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh new file mode 100755 index 00000000..a887d8c9 --- /dev/null +++ b/builder/modules.d/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# -*- coding: utf-8 -*- +# region imports +source '/usr/lib/rebash/core.sh' +core.import exceptions +core.import logging +type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh +# endregion +exceptions.try +{ +logging.set_commands_level debug +logging.set_level debug +[[ "$SLX_LOG_FILE_PATH" == "" ]] && SLX_LOG_FILE_PATH=/var/log/openslx +logging.set_log_file "$SLX_LOG_FILE_PATH" + +# Needed to be able to go back to dracut at system shutdown. +temporary_directory_path="$(mktemp --directory)" +mount --options bind / "$temporary_directory_path" +cp --recursive --no-target-directory "$temporary_directory_path" /run/initramfs +umount "$temporary_directory_path" +rm --dir "$temporary_directory_path" +} +exceptions.catch +{ + logging.warn "Failed to copy initramfs to /run/initramfs, shutdown hooks" \ + "will not work." +} + +exceptions.try +{ +# Dracut may not be installed on the new root. Thus copy all services over. +systemd_system_unit_path="$(dirname "$(find / -name dracut-mount.service \ + -type f -print -quit)")" +new_systemd_system_unit_path="${NEWROOT}/lib/systemd/system" + +mkdir --parents "$new_systemd_system_unit_path/initrd.target.wants" +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 "${systemd_system_unit_path}/${file}" \ + "${new_systemd_system_unit_path}/${file}" + # "ln" returns an error if the link already exists. + source_path="../${file}" + target_path="${new_systemd_system_unit_path}/initrd.target.wants/${file}" + ln --symbolic "$source_path" "$targetPath" &>/dev/null || \ + logging.warn "Failed to link \"$source_path\" to \"$target_path\"." +done +} +exceptions.catch +{ + logging.error "$exceptions_last_traceback" + emergency_shell "error in ${BASH_SOURCE[0]}" +} + +# region vim modline + +# vim: set tabstop=4 shiftwidth=4 expandtab: +# vim: foldmethod=marker foldmarker=region,endregion: + +# endregion |