#!/usr/bin/env bash # # Initial script for Live operating system # This script are launching before starting init from linux-live script. # Current dir allways must be set to root (/) # All system path must be relative, except initrd dirs ENABLED=yes [[ ${ENABLED} == "yes" ]] || exit 0 DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 SOURCE=${ROOTFS}/usr/lib/ublinux/os-config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" SYSCONF="${ROOTFS}${SYSCONF}" INIGZFILE=$(find /memory -maxdepth 1 -iname "*.ini.gz") [[ -f ${INIGZFILE} ]] || INIGZFILE=$(find /tmp -maxdepth 1 -iname "*.ini.gz") [[ -f ${INIGZFILE} ]] || echo "Config file '*.ini.gz' not found!" [[ -d ${SYSCONF} ]] || mkdir -p "${SYSCONF}" rm -rf ${SYSCONF}/{..?*,.[!.]*,*} 2>/dev/null ## Парсим файл ublinux.ini.gz и создаём конфигурацию системы в ${SYSCONF} FILE_CONFIG="${SYSCONF}/config" touch ${FILE_CONFIG} zcat ${INIGZFILE} | grep -E '^DEFAULTPASSWD|^DEFAULTROOTPASSWD|^NEEDEDUSERS|^USERADD|^GROUPADD' > /tmp/.ublinux_accounts_credential while read LINE; do if [[ ${LINE} =~ ^\[.*\] ]]; then FILE_CONFIG=$(tr '[]' '|' <<< "${LINE}" | cut -d'|' -f2) FILE_CONFIG_MOD=$(tr '[]' '|' <<< "${LINE}" | cut -d'|' -f3 | tr -d ' ') PATH_FILE_CONFIG=${FILE_CONFIG%/*} # Если указан файл без пути, то добавить путь по умолчанию ${SYSCONF} [[ ${PATH_FILE_CONFIG} =~ "/" ]] && FILE_CONFIG="${ROOTFS}${FILE_CONFIG}" || FILE_CONFIG="${SYSCONF}/${FILE_CONFIG}" if [[ -n ${FILE_CONFIG_MOD} ]]; then mkdir -p "${PATH_FILE_CONFIG}" [[ -e ${FILE_CONFIG} ]] || touch "${FILE_CONFIG}" chmod "${FILE_CONFIG_MOD}" "${FILE_CONFIG}" fi elif [[ ${LINE} =~ ^\- ]]; then LINE_NEW=$(sed 's/^-//' <<< "${LINE}") ESC_LINE_NEW=$(sed 's/[^a-zA-Z0-9,._@%-]/\\&/g' <<< "${LINE_NEW}") sed -E "/^${ESC_LINE_NEW}$/d" -i "${FILE_CONFIG}" elif [[ ${LINE} =~ ^\| ]]; then sed 's/^|//' <<< "${LINE}" >> "${FILE_CONFIG}" elif [[ ${LINE} =~ ^\+ ]]; then LINE_NEW=$(sed 's/^+//' <<< "${LINE}") ESC_LINE_NEW=$(sed 's/[^a-zA-Z0-9,._@%-]/\\&/g' <<< "${LINE_NEW}") grep -Eq "${ESC_LINE_NEW}" "${FILE_CONFIG}" || echo "${LINE_NEW}" >> "${FILE_CONFIG}" else NAME_VAR=$(cut -d= -f1 <<< "${LINE}") [[ -z ${NAME_VAR} ]] && continue ESC_NAME_VAR=$(sed 's/[^a-zA-Z0-9,._@%-]/\\&/g' <<< "${NAME_VAR}") [[ -f ${FILE_CONFIG} ]] \ && grep -Eq "^\s*${ESC_NAME_VAR}=" "${FILE_CONFIG}" 2>/dev/null \ && sed -E "/^\s*${ESC_NAME_VAR}=/d" -i "${FILE_CONFIG}" echo "${LINE}" >> "${FILE_CONFIG}" fi done < <(zcat ${INIGZFILE} | grep -Ev '^DEFAULTPASSWD|^DEFAULTROOTPASSWD|^NEEDEDUSERS|^USERADD|^GROUPADD|^\s*#|^\s*$') ## Декларируем ассоциативный массив, если присутствуют соответствующие переменные while read FILE_CONFIG; do grep -q "^declare -A" "${FILE_CONFIG}" 2>/dev/null && sed "/^declare -A/d" -i "${FILE_CONFIG}" DECLARE_A=$(grep -E "^[A-z0-9_]*\[.*\]=.*" "${FILE_CONFIG}" | sed -E "s/\[.*//" | sort -u | tr "\n" " ") [[ -z ${DECLARE_A} ]] || sed "1i declare -A ${DECLARE_A}" -i "${FILE_CONFIG}" done < <(find ${SYSCONF} -type f -print)