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.d/10-system

126 lines
6.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# 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 ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; 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_environment(){
## Установить переменные окружения глобальные и пользовательские
## ENVIRONMENT[system:<var>]=<value>
## ENVIRONMENT[profile:<var>]=<value>
## ENVIRONMENT[<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 ${ENVIRONMENT[@]} ]]; then
for SELECT in "${!ENVIRONMENT[@]}"; do
IFS=: read -r TYPE VARIABLE OTHER <<< ${SELECT}
VALUE=${ENVIRONMENT[${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
FUNCTION=
while [[ $# -gt 0 ]]; do
[[ -z ${1} ]] || { declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; }
shift
done
eval ${FUNCTION#*; }
fi