Fix USERADD_SYNC GROUPADD_SYNC

master v2.103
Dmitry Razumov 10 months ago
parent 2b8b5be4b4
commit a82f742f49
Signed by: asmeron
GPG Key ID: 50BC1DB583B79706

@ -824,6 +824,7 @@ user_remove_group(){
# @systems # Только системные, SYS_MIN_UID и SYS_MAX_UID взять из /etc/login.defs
# @all # Все с UID от 0 до 65535
# <digital>-<digital> # Все пользователи диапазона
# <digital> # UID пользователя
# <username> # Имя пользователя
get_conf_useradd_from_system(){
local SOURCE=${SYSCONF}/users; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
@ -942,6 +943,7 @@ get_conf_useradd_from_system(){
# @systems # Только системные, SYS_MIN_UID и SYS_MAX_UID взять из /etc/login.defs
# @all # Все с UID от 0 до 65535
# <digital>-<digital> # Все пользователи диапазона
# <digital> # UID пользователя
# <username> # Имя пользователя
get_conf_usershadow_from_system(){
local FILE_PASSWD="${ROOTFS}/etc/passwd"
@ -963,9 +965,9 @@ get_conf_usershadow_from_system(){
[[ -n ${SELECT_EXPIRE} ]] && SELECT_LASTCHANGED=$(date -d @$((${SELECT_EXPIRE}*24*60*60)) +'%Y-%m-%d')
if [[ -z ${NOT_ONLY_CHANGES} && -z ${SELECT_MINDAY} && -z ${SELECT_MAXDAY} && -z ${SELECT_WARN} && -z ${SELECT_INACTIVE} && -z ${SELECT_EXPIRE} ]]; then
local DATE_STARTUP_SYSTEM=$(date -d "$(cut -f1 -d. /proc/uptime) seconds ago" +'%Y-%m-%d') #"
[[ ${SELECT_LASTCHANGED} == ${DATE_STARTUP_SYSTEM} ]] && return 0
# Дата когда был установлен пакет и впервые добавлены пользователи
local DATE_SYSUSERS=$(stat --printf=%y ${ROOTFS}/usr/share/ublinux-sysusers/README | cut -d' ' -f1)
[[ ${SELECT_LASTCHANGED} == ${DATE_STARTUP_SYSTEM} ]] && return 0
# Сравнить дату впервые созданных пользователей с датой установки пакета ublinux-sysusers
[[ ${SELECT_LASTCHANGED} == ${DATE_SYSUSERS} ]] && return 0
# # Найти файл 'sysusers' где встречается пользователь и сравнить дату создания файла с датой создания пользователя
@ -1019,6 +1021,7 @@ get_conf_usershadow_from_system(){
# @systems # Только системные, SYS_MIN_GID и SYS_MAX_GID взять из /etc/login.defs
# @all # Все c GID от 0 до 65535
# <digital>-<digital> # Все пользователи диапазона
# <digital> # GID группы
# <groupname> # Имя группы
get_conf_groupadd_from_system(){
local FILE_GROUP="${ROOTFS}/etc/group"
@ -1046,44 +1049,63 @@ get_conf_groupadd_from_system(){
$(comm --nocheck-order -12 <(cd /usr/lib/sysusers.d/ && ls -v1 *.conf | sed "s/\.conf//g") <(cd /usr/share/ublinux-sysusers/ && ls -v1 *.sysusers | sed "s/\.sysusers//g") | sed 's|^|/usr/share/ublinux-sysusers/|;s|$|.sysusers|') \
$(comm --nocheck-order -23 <(cd /usr/lib/sysusers.d/ && ls -v1 *.conf | sed "s/\.conf//g") <(cd /usr/share/ublinux-sysusers/ && ls -v1 *.sysusers | sed "s/\.sysusers//g") | sed 's|^|/usr/lib/sysusers.d/|;s|$|.conf|') \
)
local DATA_SYSUSERS_MEMBERS=$(sed -Enr "s/^m (.*) ${SELECT_GROUP}/\1/p" <<< ${DATA_SYSUSERS}) #"
[[ -n ${DATA_SYSUSERS_MEMBERS} ]] && DATA_SYSUSERS_MEMBERS=$(printf "%s\n" ${DATA_SYSUSERS_MEMBERS} | sort -u | xargs | tr " " ",") || unset DATA_SYSUSERS_MEMBERS
[[ ${SELECT_MEMBERS} == ${DATA_SYSUSERS_MEMBERS} ]] && return 0
# Выбираем пользователей которые входят в выбранную группу из systemd sysusers
local DATA_SYSUSERS_MEMBERS=$(sed -Enr "s/^m[[:blank:]]+(.*)[[:blank:]]+${SELECT_GROUP}/\1/p" <<< ${DATA_SYSUSERS}) #"
local RETURN_DATA_SYSUSERS_MEMBERS
if [[ -n ${DATA_SYSUSERS_MEMBERS} ]]; then
DATA_SYSUSERS_MEMBERS=$(printf "%s\n" ${DATA_SYSUSERS_MEMBERS} | sort -u | xargs | tr " " ",")
SELECT_MEMBERS=$(tr "," $'\n' <<< ${SELECT_MEMBERS} | sort -u | xargs | tr " " ",")
fi
[[ ${SELECT_MEMBERS} == ${DATA_SYSUSERS_MEMBERS} ]] && RETURN_DATA_SYSUSERS_MEMBERS=yes || RETURN_DATA_SYSUSERS_MEMBERS=no
# Выбираем GID группы из systemd sysusers. По явному наличию 'g x2godesktopsharing 500'
local DATA_SYSUSERS_GID=$(sed -Enr "s/^g[[:blank:]]+${SELECT_GROUP}[[:blank:]]+([[:digit:]]+).*/\1/p" <<< ${DATA_SYSUSERS}) #"
# Выбираем GID группы из systemd sysusers. Если нет явного, то GID по UID пользователя
[[ -n ${DATA_SYSUSERS_GID} ]] || DATA_SYSUSERS_GID=$(sed -Enr "s/^u[[:blank:]]+${SELECT_GROUP}[[:blank:]]+([[:digit:]]+).*/\1/p" <<< ${DATA_SYSUSERS}) #"
local RETURN_DATA_SYSUSERS_GID
if [[ -n ${DATA_SYSUSERS_GID} ]]; then
[[ ${SELECT_GID} == ${DATA_SYSUSERS_GID} ]] && RETURN_DATA_SYSUSERS_GID=yes || RETURN_DATA_SYSUSERS_GID=no
fi
# Если в systemd sysusers MEMBERS и GID совпадают с системными, то выход
[[ ${RETURN_DATA_SYSUSERS_MEMBERS} == "yes" && ${RETURN_DATA_SYSUSERS_GID} == "yes" ]] && return 0
# Если в systemd sysusers MEMBERS совпадает с системным, а GID не указан (динамический), то выход
# Если не показывать такие группы, то пожно ложно не вывести, если вдруг намеренно пользоваель указал GID у динамической группы
# Из за вохможной ошибки, отключаю
#[[ ${RETURN_DATA_SYSUSERS_MEMBERS} == "yes" && -z ${RETURN_DATA_SYSUSERS_GID} ]] && return 0
fi
echo "GROUPADD[${SELECT_GROUP}]='${SELECT_MEMBERS}:${SELECT_GID}:${SELECT_OPTIONAL}:${SELECT_ADMINISTRATORS}:${SELECT_PASSWORD}'"
}
[[ ${1} == "--not-only-changes" ]] && local NOT_ONLY_CHANGES=yes && shift
local PARAM_ALL="$@"
[[ -n ${PARAM_ALL} ]] || PARAM_ALL="@groups @systems"
while IFS= read -r SELECT_PARAM; do
if [[ ${SELECT_PARAM} == "@groups" ]]; then
while IFS= read -r SELECT_PARAM_ALL; do
if [[ ${SELECT_PARAM_ALL} == "@groups" ]]; then
# Все группы кроме системных
GID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
GID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
while IFS= read -r SELECT_GROUP; do
show_group "${SELECT_GROUP}"
done < <(awk -F':' -v GROUP_MIN=${GID_MIN:=1000} -v GROUP_MAX=${GID_MAX:=60000} '$3 >= GROUP_MIN && $3 <= GROUP_MAX && $1 != "nobody" { print $1}' ${FILE_GROUP})
elif [[ ${SELECT_PARAM} == "@systems" ]]; then
elif [[ ${SELECT_PARAM_ALL} == "@systems" ]]; then
# Группы системные
GID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
GID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
while IFS= read -r SELECT_GROUP; do
show_group "${SELECT_GROUP}"
done < <(awk -F':' -v GROUP_MIN=${GID_MIN:=500} -v GROUP_MAX=${GID_MAX:=999} '$3 >= GROUP_MIN && $3 <= GROUP_MAX && $1 != "nobody" { print $1}' ${FILE_GROUP})
elif [[ ${SELECT_PARAM} == "@all" ]]; then
elif [[ ${SELECT_PARAM_ALL} == "@all" ]]; then
# Все группы
while IFS= read -ru4 SELECT_GROUP; do
show_group "${SELECT_GROUP}"
done 4< <(awk -F':' '$1 != "nobody" { print $1}' ${FILE_GROUP})
elif [[ ${SELECT_PARAM} =~ ^([[:digit:]]+)'-'*([[:digit:]]*)$ ]]; then
elif [[ ${SELECT_PARAM_ALL} =~ ^([[:digit:]]+)'-'*([[:digit:]]*)$ ]]; then
GID_MIN=${BASH_REMATCH[1]}
GID_MAX=${BASH_REMATCH[2]}
[[ -n ${GID_MAX} ]] || GID_MAX=${GID_MIN}
while IFS= read -r SELECT_GROUP; do
show_group "${SELECT_GROUP}"
done < <(awk -F':' -v GROUP_MIN=${GID_MIN:=1000} -v GROUP_MAX=${GID_MAX:=60000} '$3 >= GROUP_MIN && $3 <= GROUP_MAX && $1 != "nobody" { print $1}' ${FILE_GROUP})
elif grep -q ^"${SELECT_PARAM}:" ${FILE_GROUP} &>/dev/null; then
show_group "${SELECT_PARAM}"
elif grep -q ^"${SELECT_PARAM_ALL}:" ${FILE_GROUP} &>/dev/null; then
show_group "${SELECT_PARAM_ALL}"
fi
done <<< "${PARAM_ALL// /$'\n'}"
}
@ -1475,10 +1497,10 @@ ubconfig_exec_system(){
USERADD\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit/10-accounts exec_06_useradd "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
USERSHADOW\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit/10-accounts exec_07_usershadow "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
GROUPADD\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.preinit/10-accounts exec_04_groupadd "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
USERADD_SYNC) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_useradd_sync ;;
USERADD_SYNC\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_useradd_sync ;;
GROUPADD_SYNC) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_groupadd_sync ;;
GROUPADD_SYNC\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_groupadd_sync ;;
USERADD_SYNC) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_useradd_sync "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
USERADD_SYNC\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_useradd_sync "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
GROUPADD_SYNC) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_groupadd_sync "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
GROUPADD_SYNC\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/25-accounts-sync exec_groupadd_sync "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
*) NO_FIND_EXCUTE=1 ;;
esac
;;
@ -1537,8 +1559,9 @@ ubconfig_exec_system(){
;;
"[${SYSCONF}/server]"|"[server]")
case "${NAME_VAR}" in
STORAGE_CONTAINERS_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/80-server-containers-storage ;;
STORAGE_LIBVIRT_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/81-server-libvirt-storage ;;
STORAGE_CONTAINERS_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/80-server-storage exec_storage_containers_path ;;
STORAGE_DOCKER_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/80-server-storage exec_storage_docker_path ;;
STORAGE_LIBVIRT_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/80-server-storage exec_storage_libvirt_pat ;;
UBPILE_DB) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_01_ubpile_db "${COMMAND_MODE_VAR}" ;; # Специально без параметров
UBPILE_DB\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_01_ubpile_db "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
UBPILE) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_02_ubpile "${COMMAND_MODE_VAR}" ;; # Специально без параметров, что-бы читались дефолтные параметры при =admin и =worker

@ -3,6 +3,8 @@
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# Extended pattern matching: https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching
shopt -s extglob
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
@ -37,23 +39,42 @@ exec_useradd_sync(){
set_ubconfig(){
local PARAM=$1
local GET_USERADD=$(get_conf_useradd_from_system ${PARAM})
if [[ -n ${GET_USERADD} ]]; then
eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] ${GET_USERADD}
eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_USERADD}
fi
local GET_USERSHADOW=$(get_conf_usershadow_from_system ${PARAM})
${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] ${GET_USERADD}
${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] ${GET_USERSHADOW}
[[ -n ${GET_USERADD} ]] && eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_USERADD}
[[ -n ${GET_USERSHADOW} ]] && eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_USERSHADOW}
if [[ -n ${GET_USERSHADOW} ]]; then
eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] ${GET_USERSHADOW}
eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_USERSHADOW}
fi
}
if [[ ${USERADD_SYNC} =~ 'shutdown@all' ]]; then
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || COMMAND="set="
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
unset USERADD_SYNC
declare -A USERADD_SYNC
[[ ${PARAM%%=*} =~ [!\$%\&()*+,./:\;\<\=\>?\@\^\{|\}~-] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
fi
# Если синхронизируем пользователей по шаблону, то удалим всех пользователей из глобальной конфигурации
if [[ ${USERADD_SYNC} =~ 'shutdown' ]]; then
${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] USERADD[*]
${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] USERSHADOW[*]
fi
while IFS= read -u3 SELECT_USERADD_SYNC; do
if [[ ${SELECT_USERADD_SYNC} == 'shutdown@all' ]]; then
set_ubconfig "@all"
elif [[ ${USERADD_SYNC} =~ 'shutdown@users' ]]; then
elif [[ ${SELECT_USERADD_SYNC} == 'shutdown@users' ]]; then
set_ubconfig "@users"
elif [[ ${USERADD_SYNC} =~ 'shutdown@systems' ]]; then
elif [[ ${SELECT_USERADD_SYNC} == 'shutdown@systems' ]]; then
set_ubconfig "@systems"
elif [[ ${USERADD_SYNC} =~ ^'shutdown@'(([[:digit:]]+)'-'*([[:digit:]]*))$ ]]; then
elif [[ ${SELECT_USERADD_SYNC} =~ ^'shutdown@'(([[:digit:]]+)'-'*([[:digit:]]*))$ ]]; then
set_ubconfig "${BASH_REMATCH[1]}"
elif [[ ${USERADD_SYNC} =~ 'shutdown' ]]; then
elif [[ ${SELECT_USERADD_SYNC} == 'shutdown' ]]; then
set_ubconfig
fi
done 3<<< "${USERADD_SYNC//@(,|;)/$'\n'}"
if [[ "$(declare -p USERADD_SYNC 2>/dev/null)" == "declare -A"* ]]; then
while IFS= read -u3 SELECT_USER; do
# В массиве 0 запись игнорируем, т.к. это параметр не ассоциативного массива
@ -68,7 +89,7 @@ exec_useradd_sync(){
## GROUPADD_SYNC='shutdown,shutdown@all,shutdown@users,shutdown@systems,shutdown@<min>-<max>,shutdown@<gid>'
## shutdown # Аналогичен shutdown@users + shutdown@systems
## shutdown@all # При завершении работы системы синхронизировать все группы в системе с глобальной конфигурацией
## shutdown@users # При завершении работы системы синхронизировать группы 1000<=GID<=6000 в системе с глобальной конфигурацией
## shutdown@groups # При завершении работы системы синхронизировать группы 1000<=GID<=6000 в системе с глобальной конфигурацией
## shutdown@systems # При завершении работы системы синхронизировать системные группы 500<=GID<=999 в системе с глобальной конфигурацией
## shutdown@<min>-<max> # При завершении работы системы синхронизировать диапазон GID групп в системе с глобальной конфигурацией
## shutdown@<gid> # При завершении работы системы синхронизировать GID группы в системе с глобальной конфигурацией
@ -82,20 +103,36 @@ exec_groupadd_sync(){
set_ubconfig(){
local PARAM=$1
local GET_GROUPADD=$(get_conf_groupadd_from_system ${PARAM})
${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] GROUPADD[*]
[[ -n ${GET_GROUPADD} ]] && eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_GROUPADD}
if [[ -n ${GET_GROUPADD} ]]; then
eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] ${GET_GROUPADD}
eval ${ROOTFS}/usr/bin/ubconfig --quiet --target global set [users] ${GET_GROUPADD}
fi
}
if [[ ${GROUPADD_SYNC} =~ 'shutdown@all' ]]; then
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || COMMAND="set="
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
unset GROUPADD_SYNC
declare -A GROUPADD_SYNC
[[ ${PARAM%%=*} =~ [!\$%\&()*+,./:\;\<\=\>?\@\^\{|\}~-] ]] || eval "${PARAM%%=*}=\${PARAM#*=}"
fi
# Если синхронизируем группы по шаблону, то удалим все группы из глобальной конфигурации
if [[ ${USERADD_SYNC} =~ 'shutdown' ]]; then
${ROOTFS}/usr/bin/ubconfig --quiet --target global remove [users] GROUPADD[*]
fi
while IFS= read -u3 SELECT_GROUPADD_SYNC; do
if [[ ${SELECT_GROUPADD_SYNC} == 'shutdown@all' ]]; then
set_ubconfig "@all"
elif [[ ${GROUPADD_SYNC} =~ 'shutdown@users' ]]; then
set_ubconfig "@users"
elif [[ ${GROUPADD_SYNC} =~ 'shutdown@systems' ]]; then
elif [[ ${SELECT_GROUPADD_SYNC} == 'shutdown@groups' ]]; then
set_ubconfig "@groups"
elif [[ ${SELECT_GROUPADD_SYNC} == 'shutdown@systems' ]]; then
set_ubconfig "@systems"
elif [[ ${GROUPADD_SYNC} =~ ^'shutdown@'(([[:digit:]]+)'-'*([[:digit:]]*))$ ]]; then
elif [[ ${SELECT_GROUPADD_SYNC} =~ ^'shutdown@'(([[:digit:]]+)'-'*([[:digit:]]*))$ ]]; then
set_ubconfig "${BASH_REMATCH[1]}"
elif [[ ${GROUPADD_SYNC} =~ 'shutdown' ]]; then
elif [[ ${SELECT_GROUPADD_SYNC} == 'shutdown' ]]; then
set_ubconfig
fi
done 3<<< "${GROUPADD_SYNC//@(,|;)/$'\n'}"
if [[ "$(declare -p GROUPADD_SYNC 2>/dev/null)" == "declare -A"* ]]; then
while IFS= read -u3 SELECT_GROUP; do
# В массиве 0 запись игнорируем, т.к. это параметр не ассоциативного массива

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
#
# Software: Continent AP
#
@ -6,13 +6,11 @@
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no
#. /usr/lib/ublinux/functions
debug_mode "$0" "$@"
if [ -d /etc/cts ] ;then
if ! systemctl is-active cts 2>/dev/null; then
ldconfig /usr/lib/cts && systemctl restart cts
ISSYSTEMD=$(readlink -fq ${ROOTFS}/usr/bin/init | grep "lib/systemd/systemd$")
if [[ -d /etc/cts ]]; then
if [[ -n ${ISSYSTEMD} ]] && ! systemctl --quiet is-active cts.service; then
ldconfig /usr/lib/cts && systemctl --quiet restart cts.service
fi
fi
fi
exit 0

@ -27,14 +27,14 @@ SOURCE=${SYSCONF}/server; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
exec_storage_containers_path(){
STORAGE_CONTAINERS_NAME="storage.containers"
STORAGE_CONTAINERS_PATH_DEFAULT="/memory/layer-base/1/${STORAGE_CONTAINERS_NAME}"
STORAGE_CONTAINERS_PATH_SYSTEM="/var/lib/containers/storage"
#STORAGE_CONTAINERS_PATH_SYSTEM="/var/lib/containers/storage"
FILE_STORAGE_CONTAINERS_CONF="/etc/containers/storage.conf"
if [[ -n ${STORAGE_CONTAINERS_PATH} ]]; then
if [[ ${STORAGE_CONTAINERS_PATH,,} == @(y|yes|enable) ]]; then
[[ -d ${STORAGE_CONTAINERS_PATH_DEFAULT} ]] || install -dm0755 ${STORAGE_CONTAINERS_PATH_DEFAULT}
STORAGE_CONTAINERS_PATH=${STORAGE_CONTAINERS_PATH_DEFAULT}
elif [[ ${STORAGE_CONTAINERS_PATH} =~ ^/memory/|^/mnt/(livemedia|livedata)/ ]]; then
elif [[ ${STORAGE_CONTAINERS_PATH} =~ ^/memory/|^/mnt/(livemedia|livedata)/|^/media/|^/run/media/ ]]; then
[[ -d ${STORAGE_CONTAINERS_PATH} ]] || install -dm0755 ${STORAGE_CONTAINERS_PATH}
fi
if ! grep -qi "^\s*graphroot = \"${STORAGE_CONTAINERS_PATH}\"" ${ROOTFS}/${FILE_STORAGE_CONTAINERS_CONF}; then
@ -49,8 +49,101 @@ exec_storage_containers_path(){
fi
}
exec_storage_docker_path(){
STORAGE_DOCKER_NAME="storage.docker"
STORAGE_DOCKER_PATH_DEFAULT="/memory/layer-base/1/${STORAGE_CONTAINERS_NAME}"
#STORAGE_DOCKER_PATH_SYSTEM="/var/lib/docker"
FILE_DOCKER_CONF="/etc/docker/daemon.json"
FILE_DOCKER_MODPROBE="/etc/modprobe.d/ubconfig-docker.conf"
if [[ -n ${STORAGE_DOCKER_PATH} ]]; then
if [[ ${STORAGE_DOCKER_PATH,,} == @(y|yes|enable) ]]; then
[[ -d ${STORAGE_DOCKER_PATH_DEFAULT} ]] || install -dm0755 ${STORAGE_DOCKER_PATH_DEFAULT}
STORAGE_DOCKER_PATH=${STORAGE_DOCKER_PATH_DEFAULT}
elif [[ ${STORAGE_DOCKER_PATH} =~ ^/memory/|^/mnt/(livemedia|livedata)/|^/media/|^/run/media/ ]]; then
[[ -d ${STORAGE_DOCKER_PATH} ]] || install -dm0755 ${STORAGE_DOCKER_PATH}
fi
[[ -d ${FILE_DOCKER_CONF%/*} ]] || install -dm0755 ${FILE_DOCKER_CONF%/*}
if [[ -f ${FILE_DOCKER_CONF} ]]; then
# Переделать, содержимое в переменную и манипуляции в переменной, в конце зпись переменной в файл
if ! grep -qi "^\s+\"data-root\": \"${STORAGE_DOCKER_PATH}\"" ${ROOTFS}/${FILE_DOCKER_CONF}; then
if grep -qi "^\s+\"data-root\":" ${ROOTFS}/${FILE_DOCKER_CONF}; then
sed -r "s|^\s+(\"data-root\":)|\1 \"${STORAGE_DOCKER_PATH}\"|" -i ${ROOTFS}/${FILE_DOCKER_CONF}
elif grep -qi "^\s*#\s*\"data-root\":" ${ROOTFS}/${FILE_DOCKER_CONF}; then
sed "/^\s*#\s*\"data-root\":/a \"data-root\": \"${STORAGE_DOCKER_PATH}\"" -i ${ROOTFS}/${FILE_DOCKER_CONF}
else
sed "/^\s*{\s*/a \"data-root\": \"${STORAGE_DOCKER_PATH}\"," -i ${ROOTFS}/${FILE_DOCKER_CONF}
fi
fi
else
cat << EOF > ${FILE_DOCKER_CONF}
{
"data-root": "${STORAGE_DOCKER_PATH}"
}
EOF
fi
cat << EOF > ${FILE_DOCKER_MODPROBE}
# For Docker overlay2
options overlay
# Disable overlay redirect dir and metacopy
# options overlay metacopy=off redirect_dir=off
EOF
else
[[ -f ${FILE_DOCKER_MODPROBE} ]] && rm -f ${FILE_DOCKER_MODPROBE} &>/dev/null
fi
}
exec_storage_libvirt_path(){
STORAGE_LIBVIRT_POOL_NAME="storage.libvirt"
STORAGE_LIBVIRT_PATH_DEFAULT="/memory/layer-base/1/${STORAGE_LIBVIRT_POOL_NAME}"
if [[ -n ${STORAGE_LIBVIRT_PATH} ]]; then
if [[ ${STORAGE_LIBVIRT_PATH,,} == @(y|yes|enable) ]]; then
STORAGE_LIBVIRT_PATH=${STORAGE_LIBVIRT_PATH_DEFAULT}
[[ -d ${STORAGE_LIBVIRT_PATH} ]] || install -dm0755 ${STORAGE_LIBVIRT_PATH}
elif [[ ${STORAGE_LIBVIRT_PATH} =~ ^/memory/|^/mnt/(livemedia|livedata)/ ]]; then
[[ -d ${STORAGE_LIBVIRT_PATH} ]] || install -dm0755 ${STORAGE_LIBVIRT_PATH}
fi
cat <<EOF > "${ROOTFS}/etc/libvirt/storage/${STORAGE_LIBVIRT_POOL_NAME}.xml"
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh pool-edit ${STORAGE_LIBVIRT_POOL_NAME}
or other application using the libvirt API.
-->
<pool type='dir'>
<name>${STORAGE_LIBVIRT_POOL_NAME}</name>
<uuid>22e1f043-1fcb-4017-8afd-d44ebea9c8e4</uuid>
<capacity unit='bytes'>0</capacity>
<allocation unit='bytes'>0</allocation>
<available unit='bytes'>0</available>
<source>
</source>
<target>
<path>${STORAGE_LIBVIRT_PATH}</path>
</target>
</pool>
EOF
fi
[[ -d ${ROOTFS}/etc/libvirt/storage/autostart ]] || install -dm0755 ${ROOTFS}/etc/libvirt/storage/autostart
ln -sf /etc/libvirt/storage/${STORAGE_LIBVIRT_POOL_NAME}.xml ${ROOTFS}/etc/libvirt/storage/autostart/${STORAGE_LIBVIRT_POOL_NAME}.xml
}
################
##### MAIN #####
################
exec_storage_containers_path $@
# Если файл подключен как ресурс с функциями, то выйти
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

@ -1,67 +0,0 @@
#!/usr/bin/env bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# Initial script for Linux 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}/server; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
exec_storage_libvirt_path(){
STORAGE_LIBVIRT_POOL_NAME="storage.libvirt"
STORAGE_LIBVIRT_PATH_DEFAULT="/memory/layer-base/1/${STORAGE_LIBVIRT_POOL_NAME}"
if [[ -n ${STORAGE_LIBVIRT_PATH} ]]; then
if [[ ${STORAGE_LIBVIRT_PATH,,} == @(y|yes|enable) ]]; then
STORAGE_LIBVIRT_PATH=${STORAGE_LIBVIRT_PATH_DEFAULT}
[[ -d ${STORAGE_LIBVIRT_PATH} ]] || install -dm0755 ${STORAGE_LIBVIRT_PATH}
elif [[ ${STORAGE_LIBVIRT_PATH} =~ ^/memory/|^/mnt/(livemedia|livedata)/ ]]; then
[[ -d ${STORAGE_LIBVIRT_PATH} ]] || install -dm0755 ${STORAGE_LIBVIRT_PATH}
fi
cat <<EOF > "${ROOTFS}/etc/libvirt/storage/${STORAGE_LIBVIRT_POOL_NAME}.xml"
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh pool-edit ${STORAGE_LIBVIRT_POOL_NAME}
or other application using the libvirt API.
-->
<pool type='dir'>
<name>${STORAGE_LIBVIRT_POOL_NAME}</name>
<uuid>22e1f043-1fcb-4017-8afd-d44ebea9c8e4</uuid>
<capacity unit='bytes'>0</capacity>
<allocation unit='bytes'>0</allocation>
<available unit='bytes'>0</available>
<source>
</source>
<target>
<path>${STORAGE_LIBVIRT_PATH}</path>
</target>
</pool>
EOF
fi
[[ -d ${ROOTFS}/etc/libvirt/storage/autostart ]] || install -dm0755 ${ROOTFS}/etc/libvirt/storage/autostart
ln -sf /etc/libvirt/storage/${STORAGE_LIBVIRT_POOL_NAME}.xml ${ROOTFS}/etc/libvirt/storage/autostart/${STORAGE_LIBVIRT_POOL_NAME}.xml
}
################
##### MAIN #####
################
exec_storage_libvirt_path $@

@ -109,10 +109,23 @@ VERSION=
## <user>: # Имя пользователя для которого будет установлена переменная окружения systemd в домашнем каталоге пользователя ~/.config/environment.d/ubconfig-user-10-system.conf
## <var> # Имя переменной
## <value> # Значение переменной <var>
##
## Перенос временных файлов КДЕ4 в отдельную папку. Убирает притормаживание главного меню в КДЕ4
## Создать каталог: mkdir -p /mnt/livedata/ublinux-data/tmp
## ENVIROMENT[profile:KDEVARTMP]="/mnt/livedata/ublinux-data/tmp"
##
## Если на видеокарте nvidia наблюдается эффект разрыва окон, то есть 2 варианта борьбы с этим
## Выберите один из вариантов, не включайте сразу 2 переменные сразу
## 1 вариант. Может снизить производительность в играх
## ENVIROMENT[profile:__GL_YIELD]="USLEEP"
## 2 вариант. Не на каждой видеокарте может сработать
## ENVIROMENT[profile:KWIN_TRIPLE_BUFFER]=1
##
#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[<profile>]=<feature>|disable|no|off
## <profile> # Профиль
@ -767,13 +780,22 @@ VERSION=
[/etc/ublinux/server]
## Настройка сервера
################################################################################
## Задать путь хранилища контейнеров containers/podman/docker
## Задать путь хранилища контейнеров containers/podman
## Не включив параметр функционировать не будет containers/podman
## STORAGE_CONTAINERS_PATH=<путь>|y|yes|enable
## <путь> # Путь до каталога хранилища контейнеров
## y|yes|enable # Установит путь /memory/layer-base/1/storage.containers
#STORAGE_CONTAINERS_PATH=yes
## Задать путь хранилища контейнеров docker
## Не включив параметр функционировать не будет docker
## DOCKER_STORAGE_CONTAINERS_PATH=<путь>|y|yes|enable
## <путь> # Путь до каталога хранилища контейнеров
## y|yes|enable # Установит путь /memory/layer-base/1/storage.docker
#STORAGE_DOCKER_PATH=yes
## Создать хранилище образов для libvirt как движок контроллера виртуализации openvz,kvm,qemu,virtualbox,xen и другие
## Не включив параметр функционировать не будет libvirt
## STORAGE_LIBVIRT_PATH=<путь>|y|yes|enable
## <путь> # Путь до каталога хранилища пула образов
## y|yes|enable # Установит путь /memory/layer-base/1/storage.libvirt
@ -1923,18 +1945,6 @@ VERSION=
# адрес основного DNS сервера, откуда брать запросы
#ip=77.88.8.8;
[/etc/profile.d/ublinux.sh]
################################################################################
# Перенос временных файлов КДЕ4 в отдельную папку. Убирает притормаживание главного меню в КДЕ4
#export KDEVARTMP=/mnt/livedata/ublinux-data/tmp
# Если на видеокарте nvidia наблюдается эффект разрыва окон, то есть 2 варианта борьбы с этим
# Выберите один из вариантов, не включайте сразу 2 переменные сразу
# 1 вариант. Может снизить производительность в играх
#export __GL_YIELD=USLEEP
# 2 вариант. Не на каждой видеокарте может сработать
#export KWIN_TRIPLE_BUFFER=1
[/etc/laptop-mode/laptop-mode.conf]
################################################################################
# Отключение парковки жесткого диска на ноутбуках

Loading…
Cancel
Save