You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
3.5 KiB
71 lines
3.5 KiB
#!/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)
|