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.
ublinux-init/ublinux/rc.preinit/01-inifile

63 lines
2.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
PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin
DEBUGMODE=no
INIGZFILE=$(find /memory -maxdepth 1 -iname "*.ini.gz")
. usr/lib/ublinux/functions
. usr/lib/ublinux/os-config
debug_mode "$0" "$@"
[ -f $INIGZFILE ] || INIGZFILE=$(find /tmp -maxdepth 1 -iname "*.ini.gz")
[ -f $INIGZFILE ] || echo "Config file '*.ini.gz' not found!"
grep -q ^/ <<< "${SYSCONF}" && SYSCONF=.${SYSCONF}
mkdir -p "${SYSCONF}"
# ublinux.ini processing
FNAME="${SYSCONF}/config"
FMOD=
touch ${FNAME}
zcat $INIGZFILE | egrep '^DEFAULTPASSWD|^DEFAULTROOTPASSWD|^NEEDEDUSERS|^USERADD' > /tmp/.credential
while read LINE; do
if grep -q "^\[.*\][[:space:]]*" <<< ${LINE}; then
FNAME=$(echo "${LINE}" | tr '[]' '|' | cut -d'|' -f2 | sed s-^/--)
FMOD=$(echo "${LINE}" | tr '[]' '|' | cut -d'|' -f3 | tr -d ' ')
PATH_FNAME=$(dirname "${FNAME}")
[[ ${PATH_FNAME} == "." ]] && FNAME="${SYSCONF}/${FNAME}"
if [ -n "${FMOD}" ]; then
mkdir -p "${PATH_FNAME}"
[ -e "${FNAME}" ] || touch "${FNAME}"
chmod "${FMOD}" "${FNAME}"
fi
elif grep -q "^-" <<< "${LINE}"; then
LINE_NEW=$(echo "${LINE}" | sed 's/^-//')
sed -i /^"${LINE_NEW}"$/d "${FNAME}"
elif grep -q "^|" <<< "${LINE}"; then
echo "${LINE}" | sed 's/^|//' >> "${FNAME}"
elif grep -q "^+" <<< "${LINE}"; then
LINE_NEW=$(echo "${LINE}" | sed 's/^+//')
grep -q "${LINE_NEW}" "${FNAME}" || echo "${LINE_NEW}" >> "${FNAME}"
else
LINE_NEW=$(cut -d= -f1 <<< "${LINE}")
[ "${LINE_NEW}" = "" ] && continue
if ! grep -q "^[[:space:]]*${LINE_NEW}=" "${FNAME}" 2>/dev/null; then
grep -q "^${LINE}$" "${FNAME}" 2>/dev/null || echo "${LINE}" >> "${FNAME}"
else
sed -i 's|'"^[[:space:]]*${LINE_NEW}=.*$"'|'"${LINE}"'|' "${FNAME}"
fi
fi
done < <(zcat $INIGZFILE | egrep -v '^DEFAULTPASSWD|^DEFAULTROOTPASSWD|^NEEDEDUSERS|^USERADD|^\s*#|^\s*$')
# Mark associative array
for FILE_CONFIG in ${SYSCONF}/*; do
DECLARE_A=$(cat "${FILE_CONFIG}" | egrep "^[A-z0-9_]*\[.*\]=.*" | sed -E "s/\[.*//" | uniq | tr "\n" " ")
[[ -z ${DECLARE_A} ]] || sed -E -i "1i declare -A ${DECLARE_A}" -i "${FILE_CONFIG}"
done