|
|
#!/usr/bin/env bash
|
|
|
#
|
|
|
# Initial script for UBLinux
|
|
|
# This script are launching before starting init from initrd 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
|
|
|
|
|
|
[[ -d /usr/lib/ublinux ]] && { unset ROOTFS; unset CMD_CHROOT; } || { ROOTFS="/sysroot"; CMD_CHROOT="chroot ${ROOTFS}"; }
|
|
|
SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
|
|
|
SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
|
|
|
debug_mode "$0" "$@"
|
|
|
|
|
|
SYSCONF="${ROOTFS}/${SYSCONF}"
|
|
|
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
SOURCE=${SYSCONF}/system; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
SOURCE=${SYSCONF}/hardware; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
SOURCE=${SYSCONF}/clock; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
|
|
|
exec_linklivedata(){
|
|
|
#PATHLIVEDATA=$(find /memory/layer-base/*/* -maxdepth 0 -type f -iname "ublinux-data*.sgn" -exec dirname {} \;)
|
|
|
PATHLIVEDATA=$(find /memory/data/from/*/* -maxdepth 0 -type d -iname "ublinux-data" -exec dirname {} \;)
|
|
|
[[ -d ${PATHLIVEDATA} ]] && [[ ! -e ${ROOTFS}/mnt/livedata ]] && ln -sf ${PATHLIVEDATA} ${ROOTFS}/mnt/livedata
|
|
|
}
|
|
|
exec_ntfsmount(){
|
|
|
ps | grep ntfsmount | awk '{ print $1 }' >> ${ROOTFS}/var/run/sendsigs.omit
|
|
|
}
|
|
|
exec_timezone(){
|
|
|
#Setting up local time zone
|
|
|
[[ -f ${ROOTFS}/usr/share/zoneinfo/${ZONE} ]] && ln -sf "/usr/share/zoneinfo/${ZONE}" ${ROOTFS}/etc/localtime
|
|
|
}
|
|
|
exec_machineid(){
|
|
|
#Setting machine-id
|
|
|
[[ -z ${MACHINEID} && ! -f ${ROOTFS}/etc/machine-id ]] && MACHINEID=hardware
|
|
|
if [[ ${MACHINEID,,} == @(random|rnd) ]]; then
|
|
|
MACHINEID=$(dd if=/dev/urandom count=1 bs=512 2>/dev/null | cat - /sys/class/net/*/address 2>/dev/null | md5sum | cut -d' ' -f1)
|
|
|
elif [[ ${MACHINEID,,} == @(hardware|hw) ]]; then
|
|
|
MACHINEID=$(lspci -nmm 2>/dev/null | grep ^00 | cat - /sys/class/net/*/address 2>/dev/null | md5sum | cut -d' ' -f1)
|
|
|
fi
|
|
|
[[ -z "${MACHINEID}" ]] || echo "${MACHINEID}" > ${ROOTFS}/etc/machine-id
|
|
|
}
|
|
|
exec_udevrules(){
|
|
|
#Setting UDEV
|
|
|
FILE_UDEV_99="/usr/lib/ublinux/udev/99-hide-partition-ubconfig.rules"
|
|
|
FILE_UDEV_70="/usr/lib/ublinux/udev/70-setup-prn-ubconfig.rules"
|
|
|
mkdir -p ${ROOTFS}/etc/udev/rules.d
|
|
|
ln -sf ${FILE_UDEV_99} ${ROOTFS}/etc/udev/rules.d/
|
|
|
if [[ ${PRINTERADD} = "auto" ]] ;then
|
|
|
ln -sf ${FILE_UDEV_70} ${ROOTFS}/etc/udev/rules.d/
|
|
|
else
|
|
|
rm -f "${ROOTFS}/etc/udev/rules.d/${FILE_UDEV_70##*/}"
|
|
|
fi
|
|
|
}
|
|
|
exec_statemode(){
|
|
|
## Setting state mode
|
|
|
STATE_MODE=$(cmdline_value ub.mode)
|
|
|
STATE_HOME=$(cmdline_value ub.home)
|
|
|
## Полное сохранение ub.mode=changes
|
|
|
if [[ ${STATE_MODE} =~ ^"changes"$ ]]; then
|
|
|
sed -e '$a\SYSTEMBOOT_STATEMODE=changes' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
|
|
|
#sed "s/SYSTEMBOOT_STATEMODE=.*/SYSTEMBOOT_STATEMODE=changes/" -i ${SYSCONF}/config
|
|
|
## Сохранение в модуль ub.mode=toxzm ub.mode=machines
|
|
|
elif [[ ${STATE_MODE} =~ ^("toxzm"|"machines")$ ]]; then
|
|
|
sed -e '$a\SYSTEMBOOT_STATEMODE=module' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
|
|
|
#echo "SYSTEMBOOT_STATEMODE=module" >> ${SYSCONF}/config
|
|
|
## Полная песочница RAM ub.mode= ; ub.home=
|
|
|
elif [[ ${STATE_MODE} == "" && ${STATE_HOME} == "" ]]; then
|
|
|
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
|
|
|
#echo "SYSTEMBOOT_STATEMODE=sandbox" >> ${SYSCONF}/config
|
|
|
## Песочница с сохранением профиля пользователя ub.mode= ; ub.home=/ublinux-data/homes
|
|
|
elif [[ ${STATE_MODE} == "" && ${STATE_HOME} =~ ^"/" ]]; then
|
|
|
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_ram_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
|
|
|
#echo "SYSTEMBOOT_STATEMODE=sandbox_ram_home" >> ${SYSCONF}/config
|
|
|
## Полная песочница HDD ub.mode=clear ; ub.home=
|
|
|
elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} == "" ]]; then
|
|
|
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
|
|
|
#echo "SYSTEMBOOT_STATEMODE=sandbox_hdd" >> ${SYSCONF}/config
|
|
|
## Полная песочница HDD с сохранением профиля пользователя ub.mode=clear ; ub.home=
|
|
|
elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} =~ ^"/" ]]; then
|
|
|
sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
|
|
|
#echo "SYSTEMBOOT_STATEMODE=sandbox_hdd_home" >> ${SYSCONF}/config
|
|
|
fi
|
|
|
}
|
|
|
exec_enviroment(){
|
|
|
## Установить переменные окружения глобальные и пользовательские
|
|
|
## ENVIROMENT[system:<var>]=<value>
|
|
|
## ENVIROMENT[profile:<var>]=<value>
|
|
|
## ENVIROMENT[<user>:<var>]=<value>
|
|
|
## system:<--># Установить глобальные переменные окружения systemd в /run/environment.d/99-ubconfig.conf
|
|
|
## profile:<-># Установить переменные окружения только для оболочек входа совместимые Bourne shell в /etc/profile.d/99-ubconfig.conf
|
|
|
## <user>:<--># Имя пользователя для которого будет установлена переменная окружения systemd в домашнем каталоге пользователя ~/.config/environment.d/99-ubconfig.conf
|
|
|
## <var><----># Имя переменной
|
|
|
## <value><--># Значение переменной <var>
|
|
|
FILE_SYSTEMD_ENV="/etc/environment.d/ubconfig-etc-10-system.conf"
|
|
|
FILE_PROFILE_SH_ENV="/etc/profile.d/ubconfig-10-system.sh"
|
|
|
FILE_PROFILE_CSH_ENV="/etc/profile.d/ubconfig-10-system.csh"
|
|
|
FILE_SYSTEMD_USER_ENV=".config/environment.d/ubconfig-user-10-system.conf"
|
|
|
[[ -f ${ROOTFS}/${FILE_SYSTEM_ENV} ]] && rm -f ${ROOTFS}/${FILE_SYSTEM_ENV} 2>/dev/null
|
|
|
[[ -f ${ROOTFS}/${FILE_PROFILE_SH_ENV} ]] && rm -f ${ROOTFS}/${FILE_PROFILE_SH_ENV} 2>/dev/null
|
|
|
[[ -f ${ROOTFS}/${FILE_PROFILE_CSH_ENV} ]] && rm -f ${ROOTFS}/${FILE_PROFILE_CSH_ENV} 2>/dev/null
|
|
|
rm -f ${ROOTFS}/home/*/${FILE_SYSTEMD_USER_ENV} 2>/dev/null
|
|
|
if [[ -n ${ENVIROMENT[@]} ]]; then
|
|
|
for SELECT in "${!ENVIROMENT[@]}"; do
|
|
|
IFS=: read -r TYPE VARIABLE OTHER <<< ${SELECT}
|
|
|
VALUE=${ENVIROMENT[${SELECT}]}
|
|
|
if [[ ${TYPE} == "system" ]]; then
|
|
|
[[ -f ${ROOTFS}/${FILE_SYSTEMD_ENV} ]] || { [[ -d ${ROOTFS}/${FILE_SYSTEMD_ENV%/*} ]] || install -dm0755 ${ROOTFS}/${FILE_SYSTEMD_ENV%/*}; }
|
|
|
echo "${VARIABLE}=\"${VALUE}\"" >> ${ROOTFS}/${FILE_SYSTEMD_ENV}
|
|
|
elif [[ ${TYPE} == "profile" ]]; then
|
|
|
[[ -f ${ROOTFS}/${FILE_PROFILE_SH_ENV} ]] || { [[ -d ${ROOTFS}/${FILE_PROFILE_SH_ENV%/*} ]] || install -dm0755 ${ROOTFS}/${FILE_PROFILE_SH_ENV%/*}; }
|
|
|
[[ -f ${ROOTFS}/${FILE_PROFILE_CSH_ENV} ]] || { [[ -d ${ROOTFS}/${FILE_PROFILE_CSH_ENV%/*} ]] || install -dm0755 ${ROOTFS}/${FILE_PROFILE_CSH_ENV%/*}; }
|
|
|
echo "export ${VARIABLE}=\"${VALUE}\"" >> ${ROOTFS}/${FILE_PROFILE_SH_ENV}
|
|
|
echo "setenv ${VARIABLE} \"${VALUE}\"" >> ${ROOTFS}/${FILE_PROFILE_CSH_ENV}
|
|
|
else
|
|
|
if [[ -d ${ROOTFS}/home/${TYPE} ]]; then
|
|
|
if [[ ! -f ${ROOTFS}/home/${TYPE}/${FILE_SYSTEMD_USER_ENV} ]]; then
|
|
|
local -a GET_STATS_USER=($(stat -c '%u %g' ${ROOTFS}/home/${TYPE} 2>/dev/null))
|
|
|
[[ ! -d ${ROOTFS}/home/${TYPE}/${FILE_SYSTEMD_USER_ENV%/*} ]] && [[ -n ${GET_STATS_USER[@]} ]] && install -dm700 -o ${GET_STATS_USER[0]} -g ${GET_STATS_USER[1]} ${ROOTFS}/home/${TYPE}/${FILE_SYSTEMD_USER_ENV%/*}
|
|
|
touch ${ROOTFS}/home/${TYPE}/${FILE_SYSTEMD_USER_ENV}
|
|
|
chmod 600 ${ROOTFS}/home/${TYPE}/${FILE_SYSTEMD_USER_ENV}
|
|
|
chown ${GET_STATS_USER[0]}:${GET_STATS_USER[1]} ${ROOTFS}/home/${TYPE}/${FILE_SYSTEMD_USER_ENV}
|
|
|
fi
|
|
|
echo "${VARIABLE}=\"${VALUE}\"" >> ${ROOTFS}/home/${TYPE}/${FILE_SYSTEMD_USER_ENV}
|
|
|
fi
|
|
|
fi
|
|
|
done
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
################
|
|
|
##### MAIN #####
|
|
|
################
|
|
|
|
|
|
# Если файл подключен как ресурс с функциями, то выйти
|
|
|
return 0 2>/dev/null && return 0
|
|
|
if [[ -z $@ ]]; then
|
|
|
while read -r FUNCTION; do
|
|
|
$"${FUNCTION##* }"
|
|
|
done < <(declare -F | grep "declare -f exec_")
|
|
|
else
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" && shift || { FUNCTION+=" ${1}" && shift; }
|
|
|
done
|
|
|
eval ${FUNCTION#*; }
|
|
|
fi
|