#!/usr/bin/env bash # -*- coding: utf-8 -*- source '/usr/lib/rebash/core.sh' core.import exceptions core.import logging type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh # tarcopy tarcopy() { [ -d "$1" -a -d "$2" ] || return 1 cd "$1" local filelist="$(mktemp)" find . \! -type d > "$filelist" tar -c -p -T "$filelist" | tar -xp -C "$2" rm -f -- "$filelist" cd - &>/dev/null } # this module unpacks the config.tgz temporary_extract_directory="$(mktemp -d)" exceptions.try { exceptions.activate if [[ -e "/etc/config.tgz" ]]; then tar --extract --preserve-permissions \ --file="/etc/config.tgz" \ --directory="$temporary_extract_directory" fi } exceptions.catch { logging.error "Failed to extract '/etc/config.tgz' to '$temporary_extract_directory'." logging.error "$exceptions_last_traceback" } # extracted to temporary directory, now check for SLX_LOCAL_CONFIGURATION source "/etc/openslx" if [[ -n "$SLX_LOCAL_CONFIGURATION" ]]; then exceptions.try { exceptions.activate if [[ ! -d "${temporary_extract_directory}/openslx-configs/${SLX_LOCAL_CONFIGURATION}" ]]; then logging.warn "SLX_LOCAL_CONFIGURATION is set but no corresponding folder found in '/etc/config.tgz'. Ignoring..." else tarcopy "${temporary_extract_directory}/openslx-configs/${SLX_LOCAL_CONFIGURATION}" "${temporary_extract_directory}" fi } exceptions.catch { # errors here are not critical, so no emergency shell logging.error "Failed to merge local configuration files for '$SLX_LOCAL_CONFIGURATION'." logging.error "$exceptions_last_traceback" } fi # now just copy everything from the temporary_extract_directory to the future root exceptions.try { exceptions.activate # purge openslx-configs/ rm -rf "${temporary_extract_directory}/openslx-configs" tarcopy "${temporary_extract_directory}" "$NEWROOT" } exceptions.catch { # errors here are not critical, so no emergency shell logging.error "Failed to copy extracted configuration files to '$NEWROOT'." logging.error "$exceptions_last_traceback" }