#!/usr/bin/env bash # -*- coding: utf-8 -*- 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 } unpack_config_tgz() { local config_tgz="/etc/config.tgz" [ -e "$config_tgz" ] || return 1 # create list of overwritten files for debugging purposes mkdir -p "${NEWROOT}/opt/openslx" tar \ --list \ --verbose \ --file="$config_tgz" \ > "${NEWROOT}/opt/openslx/config.tgz.list" 2>&1 local extract_dir="$(mktemp -d)" tar \ --extract \ --preserve-permissions \ --file="$config_tgz" \ --directory="$extract_dir" if [ "$?" -ne 0 ]; then warn "Failed to extract '$config_tgz' to '$extract_dir'." return 1 fi # check SLX_LOCAL_CONFIGURATION source "/etc/openslx" if [ -n "$SLX_LOCAL_CONFIGURATION" ]; then if [ ! -d "${extract_dir}/openslx-configs/${SLX_LOCAL_CONFIGURATION}" ]; then warn "Ignoring missing SLX_LOCAL_CONFIGURATION in '$config_tgz'." else tarcopy \ "${extract_dir}/openslx-configs/${SLX_LOCAL_CONFIGURATION}" \ "${extract_dir}" fi fi # always purge openslx-configs/ rm -rf "${extract_dir}/openslx-configs" # finally copy the rest into stage4 if ! tarcopy "${extract_dir}" "$NEWROOT"; then warn "'tarcopy' from '$extract_dir' to '$NEWROOT' failed." fi } unpack_config_tgz :