#!/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. dracut_mount_unit_path="$(systemctl show -p FragmentPath dracut-mount.service \ | cut -c 14-)" systemd_system_unit_path="${dracut_mount_unit_path%/*}" 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