From 5797ae34b383fcc64fc46b935c0996ae59ab6a70 Mon Sep 17 00:00:00 2001 From: asmeron Date: Fri, 13 Oct 2023 18:51:10 +0600 Subject: [PATCH] Add function ENVIRONMANT --- ublinux/rc.preinit.d/10-system | 68 +++++++++++++++++--- ublinux/rc.preinit.d/58-access-login | 9 ++- ublinux/templates/ublinux-data.ini | 94 +++++++++++++++------------- 3 files changed, 112 insertions(+), 59 deletions(-) diff --git a/ublinux/rc.preinit.d/10-system b/ublinux/rc.preinit.d/10-system index d578153..ad79118 100755 --- a/ublinux/rc.preinit.d/10-system +++ b/ublinux/rc.preinit.d/10-system @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # Initial script for Live operating system # This script are launching before starting init from linux-live script. @@ -9,16 +9,16 @@ ENABLED=yes [[ ${ENABLED} == "yes" ]] || exit 0 DEBUGMODE=no -SELF_NAME="10-system" PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +[[ -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/os-config; [[ -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}/clock; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null exec_linklivedata(){ @@ -85,15 +85,65 @@ exec_statemode(){ #echo "SYSTEMBOOT_STATEMODE=sandbox_hdd_home" >> ${SYSCONF}/config fi } +exec_enviroment(){ +## Установить переменные окружения глобальные и пользовательские +## ENVIROMENT[system:]= +## ENVIROMENT[profile:]= +## ENVIROMENT[:]= +## system:<--># Установить глобальные переменные окружения systemd в /run/environment.d/99-ubconfig.conf +## profile:<-># Установить переменные окружения только для оболочек входа совместимые Bourne shell в /etc/profile.d/99-ubconfig.conf +## :<--># Имя пользователя для которого будет установлена переменная окружения systemd в домашнем каталоге пользователя ~/.config/environment.d/99-ubconfig.conf +## <----># Имя переменной +## <--># Значение переменной + 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 ##### +################ - if [[ ${0##*/} == ${SELF_NAME} && -z $@ ]]; then + # Если файл подключен как ресурс с функциями, то выйти + return 0 2>/dev/null && return 0 + if [[ -z $@ ]]; then while read -r FUNCTION; do $"${FUNCTION##* }" done < <(declare -F | grep "declare -f exec_") - elif [[ ${0##*/} == ${SELF_NAME} ]]; then - for FUNCTION in $@; do - ${FUNCTION} - done else - true + while [[ $# -gt 0 ]]; do + declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" && shift || { FUNCTION+=" ${1}" && shift; } + done + eval ${FUNCTION#*; } fi diff --git a/ublinux/rc.preinit.d/58-access-login b/ublinux/rc.preinit.d/58-access-login index 02b1390..9d7e368 100755 --- a/ublinux/rc.preinit.d/58-access-login +++ b/ublinux/rc.preinit.d/58-access-login @@ -11,7 +11,7 @@ DEBUGMODE=no PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin -unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=. +[[ -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/os-config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 debug_mode "$0" "$@" @@ -47,14 +47,13 @@ exec_access_denied_login(){ ##### 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 -# for FUNCTION in $@; do -# declare -f ${FUNCTION} &>/dev/null && ${FUNCTION} -# done + else while [[ $# -gt 0 ]]; do declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" && shift || { FUNCTION+=" ${1}" && shift; } done diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 3176176..d44975a 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -26,8 +26,8 @@ # -expression # remove all string with expression (see info sed). symbols .* matches all strings in file. # -выражение # удаляет строки соответствующие выражению (см info sed). Если указать .* то будут удалены все строки. -################################################################################ [/etc/ublinux/config] +################################################################################ ## Config verison ## Версия конфигурации VERSION= @@ -191,18 +191,21 @@ DEPMOD=yes ## Алгоритм сжатия, используемый для сохранения измененний в модуль #MKSQFS_FASTALG="-b 512K -comp lz4 -Xhc" -################################################################################ -## Базовые настройка системы [/etc/ublinux/system] +## Базовые настройка системы +################################################################################ ## Установить переменные окружения глобальные и пользовательские ## ENVIROMENT[system:]= ## ENVIROMENT[profile:]= ## ENVIROMENT[:]= -## system: # Установить глобальные переменные окружения systemd в /run/environment.d/99-ubconfig.conf -## profile: # Установить переменные окружения только для оболочек входа совместимые Bourne shell в /etc/profile.d/99-ubconfig.conf -## : # Имя пользователя для которого будет установлена переменная окружения systemd в домашнем каталоге пользователя ~/.config/environment.d/99-ubconfig.conf +## system: # Установить глобальные переменные окружения systemd в /etc/environment.d/ubconfig-etc-10-system.conf +## profile: # Установить переменные окружения только для оболочек входа совместимые Bourne shell в /etc/profile.d/ubconfig-10-system.sh /etc/profile.d/ubconfig-10-system.csh +## : # Имя пользователя для которого будет установлена переменная окружения systemd в домашнем каталоге пользователя ~/.config/environment.d/ubconfig-user-10-system.conf ## # Имя переменной ## # Значение переменной +#ENVIROMENT[system:VAR_SYS]="my value for system" +#ENVIROMENT[profile:VAR_PROFILE]="my value for all users" +#ENVIROMENT[superadmin:VAR_USER]="my value for select user" ## Профиль конфигурации PAM авторизации, authselect. Профили /usr/share/authselect/default ## AUTHPAM[]=|disable|no|off @@ -222,9 +225,9 @@ DEPMOD=yes #AUTHPAM[sssd]=with-faillock,with-time,with-systemd-homed,with-mkhomedir-simple #AUTHPAM=disable -################################################################################ -## Настройка аудита и логгирования [/etc/ublinux/logging] +## Настройка аудита и логгирования +################################################################################ ## Настройка мониторинга и сбора системных событий и записи их в журналы для аудита ## AUDITD=disable|no|none|off # Отключить все созданные правила из конфигурации ## AUDITD[]= @@ -312,9 +315,9 @@ DEPMOD=yes ## maillast # Отсылать последнюю ротированную копию #LOGROTATE[/var/log/samba/samba-smbd.log]="rotate 4,weekly,missingok,nocopytruncate,nocreate,nodelaycompress,nomail,notifempty,noolddir,compress" -################################################################################ -## Настройка загрузчика GRUB [/etc/ublinux/boot] +## Настройка загрузчика GRUB +################################################################################ ## Время отображения меню GRUB для выбора варианта загрузки ## GRUB_TIMEOUT= ## GRUB_TIMEOUT=3 @@ -359,9 +362,9 @@ GRUB_BOOT_SILENT="splash" ## ipv6.disable=1 # Отключить глобально ipv6 ## GRUB_CMDLINE_LINUX="modprobe.blacklist=nouveau" -################################################################################ -## Настройка сервера [/etc/ublinux/server] +## Настройка сервера +################################################################################ ## Задать путь хранилища контейнеров containers/podman/docker ## STORAGE_CONTAINERS_PATH=<путь>|y|yes|enable ## <путь> # Путь до каталога хранилища контейнеров @@ -388,9 +391,9 @@ GRUB_BOOT_SILENT="splash" #SERVER_DOMAIN[type]=samba #SERVER_DOMAIN[admin]=administrator:0J3QvtCy0YvQuV/QlNC10L3RjCEK -################################################################################ -## Настройка сохранений [/etc/ublinux/save] +## Настройка сохранений +################################################################################ ## Сохранять кэши при перезагрузке/выключении, ускоряет загрузку системы ## SAVE_ALL_CACHE=rootcopy @@ -412,10 +415,9 @@ GRUB_BOOT_SILENT="splash" #SAVE_MODULE_INCLUDE="/etc/pacman.d/gnupg,/etc/NetworkManager/system-connections" #SAVE_MODULE_EXCLUDE="/etc/ublinux" - -################################################################################ -## Настройка сети [/etc/ublinux/network] +## Настройка сети +################################################################################ ## Domain configuration ## Подключение к AD серверу #DOMAIN=ublinux.ru @@ -568,9 +570,9 @@ NSSWITCHWINBIND=yes ## Можно назначить конкретный адрес для интерфейса #MACCHANGEROPTIONS='--mac=XX:XX:XX:XX:XX:XX' -################################################################################ -## Настройка безопасности, ограничений [/etc/ublinux/security] +## Настройка безопасности, ограничений +################################################################################ ## Включить поддержку OpenSSL алгоритмов ГОСТ GOST2012-GOST8912-GOST8912 GOST2001-GOST89-GOST89 ## OPENSSL_ENGINE=gost @@ -583,8 +585,8 @@ NSSWITCHWINBIND=yes ## Первыми обрабатываются правила ACCESS_ALLOWED_LOGIN, после правила ACCESS_DENIED_LOGIN ## ACCESS_ALLOWED_LOGIN=rule_1,rule_2,rule_n ## Формат правила: users/groups:origins -## users/groups — список пользователей или групп пользователей или ключевое слово ALL -## origins — список TTY (для локального доступа), имен хостов, доменных имен, IP-адресов, ключевое слово ALL или LOCAL +## users/groups - список пользователей или групп пользователей или ключевое слово ALL +## origins - список TTY (для локального доступа), имен хостов, доменных имен, IP-адресов, ключевое слово ALL или LOCAL ## root:cron crond :0 tty1 tty2 tty3 tty4 tty5 tty6 vc/1 # Пользователю root разрешен доступ через cron, X11 терминал :0, tty1, ..., tty6, vc/1 ## (wheel):console tty1 tty2 tty3 tty4 tty5 tty6 tty7 pts/0 pts/1 pts/2 pts/3 pts/4 pts/5 pts/6 pts/7 pts/8 pts/9 hvc0 hvc1 hvc2 hvc3 hvc4 hvc5 hvc6 hvc7 hvc8 hvc9 ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5 ttyS6 ttyS7 ttyS8 ttyS9 ## root:192.168.1.1 192.168.1.4 192.168.2. 192.168.3.0/24 # Пользователю root разрешен доступ с хостов, которым принадлежат адреса IPv4 @@ -784,9 +786,9 @@ NSSWITCHWINBIND=yes ## POLKIT[ru.ublinux.pkexec.ubl-settings-datetime.exec]=yes:users ## POLKIT[org.manjaro.pamac.]=yes:users -################################################################################ -## Настройка режима киоска [/etc/ublinux/kiosk] +## Настройка режима киоска +################################################################################ ## Режим киоска XFCE4 ## =ALL - разрешить всем | =NONE - запретить | =%whell,%users - разрешить группам | =superadmin,user-1 - разрешить пользователям | =%wheel,user-1 - разрешить пользователю и группе #XFCE4_KIOSK[xfce4-panel:CustomizePanel]=%wheel @@ -851,8 +853,9 @@ NSSWITCHWINBIND=yes #APPDESKTOP_BLACKLIST[user-1]=xarchiver,xfce4-power-manager-settings #APPDESKTOP_WHITELIST[user-1]= -################################################################################ [/etc/ublinux/desktop] +## Настройка сервисов окружения рабочего стола +################################################################################ ## User for X autostarting ## Пользователь для автовхода, AUTOLOGINUSER=, значения: ## =user_name # Включает автовход указанного пользователя @@ -915,8 +918,9 @@ NSSWITCHWINBIND=yes ## Отключить автоматическое создание X11VNC для всех дисплеев ## X11VNC[display]=disable || X11VNC[nodisplay]=1 || X11VNC[disable]=1 -################################################################################ [/etc/ublinux/video] +## Настройка видеоподсистемы +################################################################################ ## Загрузить подходящий видеодрайвер, вначале пытаемся запустить проприетарный, после свободный. ## Модули видеодрайверов с нужной версией должны быть подключены. По умолчанию отключено (no). ## VGADRV_AUTO=yes|*no @@ -966,8 +970,9 @@ NSSWITCHWINBIND=yes ## встроенная (intel), отключите параметр INTEGRATEDVGA чтобы использовать AMD/ATI #INTEGRATEDVGA=no -################################################################################ [/etc/ublinux/theme] +## Настройка тем +################################################################################ # Доступные темы: ublinux(по умолчанию) ublinux-green ublinux-dark #THEME=ublinux @@ -1005,8 +1010,8 @@ NSSWITCHWINBIND=yes ## GRAFFITI=*yes|no #GRAFFITI=no -################################################################################ [/etc/ublinux/steam] +################################################################################ # Настройки для Steam. Для вынесения данных из профиля используйте 2 переменные # Настройки клиента ~/.steam. Места занимает немного, переносить имеет смысл только при работе в чистом режиме # Не назначайте переменную STEAMCONF если стим ещё не установлен! @@ -1014,8 +1019,8 @@ NSSWITCHWINBIND=yes # Место для клиента и библиотеки игр. Т.к. это занимает много места, то лучше перенести из домашней папки. #STEAMAPP=/mnt/livedata/ublinux-data/steam -################################################################################ [/etc/ublinux/clock] +################################################################################ ## Синхронизировать аппаратное время, при выключении и при включении ## HWCLOCK_SYNC=*utc|localtime ## * =utc # Синхронизировать аппаратное время по UTC @@ -1038,14 +1043,14 @@ NSSWITCHWINBIND=yes ## =Asia/Magadan # Time zone for UTC+12 MSK+9 #ZONE=Europe/Moscow -################################################################################ [/etc/ublinux/locale] +################################################################################ #LOCALE="en_US.UTF-8,ru_RU.UTF-8" #LANG="ru_RU.UTF-8" #CONSOLE_FONT="lat0-16" -################################################################################ [/etc/ublinux/keyboard] +################################################################################ ## Режим работы клавиатуры NumLock. По умолчанию включено, если нет тачпада. ## NUMLOCK=*yes|no|on|off #NUMLOCK=off @@ -1060,8 +1065,8 @@ NSSWITCHWINBIND=yes #Переключение раскладки клавиатуры в консоле: grp:lalt_lshift_toggle #CONSOLE_KEYMAP_TOGGLE="grp:lalt_lshift_toggle" -################################################################################ [/etc/ublinux/ubm] +################################################################################ #UBMDIR=/var/lib/ubmodules #EXT=ubm #compression="${MKSQFS_OPTS}" @@ -1069,18 +1074,18 @@ NSSWITCHWINBIND=yes #compression_fast="${MKSQFS_FASTALG}" #compression_fast="-b 512K -comp lz4 -Xhc" -################################################################################ -#Строгая привязка служб NFS сервера к работе через определенные порты (полезно при работе в сети через межсетевой экран) [/etc/ublinux/nfs-server] +#Строгая привязка служб NFS сервера к работе через определенные порты (полезно при работе в сети через межсетевой экран) +################################################################################ #RPCMOUNTD_OPTIONS="--port 4002" -################################################################################ [/etc/ublinux/nfs-common] +################################################################################ #STATD_OPTIONS="--port 4000" -################################################################################ -#Подключение к точке доступа My WIFI с паролем Password [/etc/ublinux/network-scripts/ifcfg-Default_WIFI] +# Подключение к точке доступа My WIFI с паролем Password +################################################################################ #NAME=Default_WIFI #MODE=Managed #TYPE=Wireless @@ -1097,12 +1102,12 @@ NSSWITCHWINBIND=yes # Если точка бесплатная (аэропорт или кафе) - закоментарьте ключ, секция с паролем тогда не нужна #KEY_MGMT=WPA-PSK -################################################################################ [/etc/ublinux/network-scripts/keys-Default_WIFI] +################################################################################ #WPA_PSK='Password' -################################################################################ [/etc/ublinux/network-scripts/ifcfg-eth0] +################################################################################ #DEVICE=eno1 # Автоподнятие сетевого интерфейса #ONBOOT=yes @@ -1119,8 +1124,8 @@ NSSWITCHWINBIND=yes #MII_NOT_SUPPORTED=no #DNS1=192.168.1.1 -################################################################################ [/etc/ublinux/network-scripts/ifcfg-wlan0] +################################################################################ #ONBOOT=yes # Set it empty for autodetection # При указании пустого значения будет выполнен поиск доступных сетей @@ -1145,16 +1150,16 @@ NSSWITCHWINBIND=yes #MII_NOT_SUPPORTED=yes #DNS1=192.168.2.1 -################################################################################ [/etc/polipo/config] +################################################################################ ## В настройках прокси сервера polipo можно перенаправить весь поток на другой сервер ## это может быть и обычный сервер и служба tor #socksParentProxy="localhost:9050" #socksProxyType=socks5 -################################################################################ [/etc/hostapd/hostapd.conf] # Настройки wifi карты в режиме точки доступа +################################################################################ #driver=nl80211 #ssid=ublinux #country_code=RU @@ -1165,16 +1170,15 @@ NSSWITCHWINBIND=yes # переключение в режим открытой wep сети #wpa=0 -################################################################################ -#---- network files ---- [/etc/pdnsd.conf] +################################################################################ # принимать запросы от других компьютеров в сети #server_ip=any; # адрес основного DNS сервера, откуда брать запросы #ip=77.88.8.8; -################################################################################ [/etc/profile.d/ublinux.sh] +################################################################################ # Перенос временных файлов КДЕ4 в отдельную папку. Убирает притормаживание главного меню в КДЕ4 #export KDEVARTMP=/mnt/livedata/ublinux-data/tmp @@ -1185,7 +1189,7 @@ NSSWITCHWINBIND=yes # 2 вариант. Не на каждой видеокарте может сработать #export KWIN_TRIPLE_BUFFER=1 -################################################################################ [/etc/laptop-mode/laptop-mode.conf] +################################################################################ # Отключение парковки жесткого диска на ноутбуках #CONTROL_HD_POWERMGMT=1