Add REPOSITORY[]= REPOPUBLIC_NET= REPOPUBLIC_WEB[]=

master v2.79
Dmitry Razumov 2 years ago
parent 04f50bfa58
commit a1ac34e9eb
Signed by: asmeron
GPG Key ID: 50BC1DB583B79706

@ -1426,6 +1426,17 @@ ubconfig_exec_system(){
*) NO_FIND_EXCUTE=1 ;;
esac
;;
"[${SYSCONF}/update]"|"[update]")
case "${NAME_VAR}" in
REPOSITORY) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_01_repository "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
REPOSITORY\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_01_repository "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
REPOPUBLIC_NET) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_02_repopublic_net "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
REPOPUBLIC_WEB\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_03_repopublic_web "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
REPOPUBLIC_CACHE\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_04_repopublic_cache "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
AUTOUPDATE) ${ROOTFS}/usr/lib/ublinux/rc.local.d/43-repository exec_autoupdate "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;;
*) NO_FIND_EXCUTE=1 ;;
esac
;;
"[${SYSCONF}/boot]"|"[boot]")
case "${NAME_VAR}" in
GRUB_TIMEOUT) ${ROOTFS}/usr/lib/ublinux/rc.halt.pre/20-grub exec_grub_timeout ;;

@ -12,9 +12,26 @@ SOURCE=${SYSCONF}/update; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
debug_mode "$0" "$@"
## Настройка подключения репозиториев
## REPOSITORY[<name_repo>]=disable | <siglevel>:<usage>:<server_path_1>,<server_path_2>,...,<server_path_n>
## REPOSITORY=disable|enable
## *disable # Отключить управление списком репозиториев, по умолчанию
## # Используются репозитории из пакета pacman, по умолчанию: core,extra,community,multilib,modules
## enable # Включить управление списком репозиториев
## # Используются системные репозитории core,extra,community,multilib,modules и указанные в параметре REPOSITORY[*]
## only # Включить управление списком репозиториев
## # Используются только репозитории указанные в параметре REPOSITORY[*]
## Порядок указания репозиториев важен
## По умолчанию включены системные репозитории, имена: core,extra,community,multilib,modules
## REPOSITORY[<name_repo>]=<server_path_1>,<server_path_2>,...,<server_path_n>;<siglevel>;<usage>;disable
## <name_repo> # Произвольное имя репозитория. Обязательный
## disable # Отключить отдин из репозиториев по умолчанию: core,extra,community,multilib,ublinux,modules
## # Имена системных репозиториев: core,extra,community,multilib,modules
## <server_path_n> # Полный URL-адрес места, где можно найти базу данных, пакеты и подписи (если доступны) для этого репозитория. Обязательный
## # Возможно указать несколько, через запятую (,)
## # Символ $ обязательно экранировать \$
## <file> # Если указан доступный файл, то подключить как дополнительный файл расширения конфигурации (Include = <file>)
## file:// # URL префикс для репозитория в каталоге
## ftp:// # URL префикс для репозитория FTP
## http:// # URL префикс для репозитория HTTP
## https:// # URL префикс для репозитория HTTPS
## <siglevel> # Уровень проверки подписи репозитория, можно выбрать одну из основных и вторую из дополнительных, разделитель запятая. Не обязательный
## # Последовательность имеет значение, т.к. накладываются правила каскадно. По умолчанию: Required,DatabaseOptional
## Never # Проверка подписи выполняться не будет. Основная
@ -33,54 +50,249 @@ debug_mode "$0" "$@"
## PackageTrustAll # Если подпись проверена только для пакетов
## DatabaseTrustAll # Если подпись проверена только для базы данных
## <usage> # Уровень использования этого репозитория. Не обязательный
## *All # Включать все перечисленные функции для репозитория. Это значение по умолчанию
## *All # Включать все перечисленные функции для репозитория, по умолчанию
## Sync # Включать обновления для этого репозитория
## Search # Включать поиск этого репозитория
## Install # Включать установку пакетов из этого репозитория во время операции --sync
## Upgrade # Позволить этому репозиторию быть действительным источником пакетов при выполнении --sysupgrade
## <server_path_n> # Полный URL-адрес места, где можно найти базу данных, пакеты и подписи (если доступны) для этого репозитория. Обязательный
## # Возможно указать несколько, через запятую.
## <file> # Если указан доступный файл, то подключить как дополнительный файл расширения конфигурации
## file:// # URL префикс для репозитория в каталоге
## ftp:// # URL префикс для репозитория FTP
## http:// # URL префикс для репозитория HTTP
## https:// # URL префикс для репозитория HTTPS
## REPOSITORY[modules]=::http://192.168.0.1:8080/repo/2204
## REPOSITORY[webmyrepo]=never::http://myweb.org/myrepo
## REPOSITORY[localmyrepo]=never::file:///home/myrepo
exec_repository(){
true
## disable # Временно отключить управление репозиторием, либо после = указать - пример: REPOSITORY[modules]=-/etc/pacman.d/mirrorlist
## REPOSITORY[core]=/etc/pacman.d/mirrorlist;;;disable
## REPOSITORY[modules]="https://repo.ublinux.ru/2405/\$repo/\$arch"
## REPOSITORY[modules]='https://repo.ublinux.ru/2405/$repo/$arch'
## REPOSITORY[mymodules]=http://192.168.0.1:8080/repo/2204;;;disable
## REPOSITORY[webmyrepo]=http://myweb.org/myrepo;never
## REPOSITORY[localmyrepo]=file:///home/myrepo;never;All
## REPOSITORY[myrepo]=/home/myrepo/mirrorlist
exec_01_repository(){
repository_enable_only(){
local FILE_SOURCE_DEFAULT="/usr/lib/ublinux/default"
local FILE_SOURCE_UPDATE="${SYSCONF}/update"
local FILE_PACMAN_CONF="${ROOTFS}/etc/pacman.conf"
local REPOSITORY_LIST=
local PACMAN_CONF_DATA=
# Удалим все действующие репозитории
awk -i inplace -v b=2 '/^\[.*\]$/{f=1; c++} !(f && c>=b); /^\s*$/{f=0}' ${FILE_PACMAN_CONF}
# Удалить в конце файла все пустые строки
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' -i ${FILE_PACMAN_CONF}
[[ ${REPOSITORY[0]} == "enable" ]] && REPOSITORY_LIST+=$(grep -oE "^[[:blank:]]*REPOSITORY\[.*]=" ${FILE_SOURCE_DEFAULT} 2>/dev/null)$'\n'
REPOSITORY_LIST+=$(grep -oE "^[[:blank:]]*REPOSITORY\[.*]=" ${FILE_SOURCE_UPDATE} 2>/dev/null)
local REPOSITORY_NAME= REPOSITORY_VAR=
while IFS='=' read -u3 REPOSITORY_NAME REPOSITORY_VAR; do
[[ ${REPOSITORY_NAME} =~ ^.*'['(.*)']' ]] && REPOSITORY_NAME=${BASH_REMATCH[1]} || continue
[[ -n ${REPOSITORY[${REPOSITORY_NAME}]} ]] \
&& while IFS=';' read -u4 REPOSITORY_SERVER_PATHS REPOSITORY_SIGLEVEL REPOSITORY_USAGE REPOSITORY_DISABLE NULL; do
[[ ${REPOSITORY_SERVER_PATHS} =~ ^("disable"|"-") ]] && continue
[[ ${REPOSITORY_DISABLE} = @("disable"|"off"|"no") ]] && continue
PACMAN_CONF_DATA+=$'\n'
PACMAN_CONF_DATA+="[${REPOSITORY_NAME}]"$'\n'
[[ -n ${REPOSITORY_SIGLEVEL} ]] && PACMAN_CONF_DATA+="SigLevel = ${REPOSITORY_SIGLEVEL}"$'\n'
[[ -n ${REPOSITORY_USAGE} ]] && PACMAN_CONF_DATA+="Usage = ${REPOSITORY_USAGE}"$'\n'
[[ -n ${REPOSITORY_SERVER_PATHS} ]] \
&& while IFS= read -u5 REPOSITORY_SERVER_PATH; do
if [[ ${REPOSITORY_SERVER_PATH} =~ ^"/" ]]; then
PACMAN_CONF_DATA+="Include = ${REPOSITORY_SERVER_PATH}"$'\n'
elif [[ ${REPOSITORY_SERVER_PATH} =~ ^("file:"|"ftp:"|"http:"|"https:") ]]; then
PACMAN_CONF_DATA+="Server = ${REPOSITORY_SERVER_PATH}"$'\n'
fi
done 5<<< "${REPOSITORY_SERVER_PATHS//,/$'\n'}"
#echo "${REPOSITORY_NAME} == ${REPOSITORY_SERVER_PATHS} :: ${REPOSITORY_SIGLEVEL} :: ${REPOSITORY_USAGE} :: ${REPOSITORY_DISABLE} :: ${NULL}"
done 4<<< "${REPOSITORY[${REPOSITORY_NAME}]}"
done 3< <(awk -v RS="[\n]+" '!n[$0]++' <<< "${REPOSITORY_LIST}")
echo "${PACMAN_CONF_DATA}" >> ${FILE_PACMAN_CONF}
}
repository_disable(){
# Отключить управление репозиториями, восстановить из пакета pacman.conf
find /memory/bundles -maxdepth 3 -path "*/etc/*" -type f -name "pacman.conf" -exec cp -af {} "/etc/" \; -quit
}
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || COMMAND="set="
local PARAM="$@"
if [[ -n ${PARAM} ]]; then
REPOSITORY_NAME=${PARAM%%=*}
REPOSITORY_VAR=${PARAM#*=}
fi
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#REPOSITORY[@]} != 0 ]]; then
if [[ ${REPOSITORY[0]} == @("enable"|"only") ]]; then
repository_enable_only
elif [[ ${REPOSITORY[0]} == "disable" ]]; then
repository_disable
ubconfig --noexecute remove [update] REPOSITORY
fi
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
if [[ ${REPOSITORY[0]} == @("enable"|"only") ]]; then
repository_enable_only
elif [[ ${REPOSITORY_NAME} == "REPOSITORY" ]]; then
# Удаление параметра REPOSITORY= . Отключить управление репозиториями
repository_disable
fi
fi
}
## Опубликовать локальный репозиторий в локальной сети, подключиться к сети распределённых репозиториев.
## При установке пакета пакет ищется в распределённой сети репозиториев и устанавливается самой последней доступной версией.
## REPOPUBLIC_NET=<name_repos_1>,...,<name_repos_n>
## <name_repo> # Подключенное имя репозитория, например: core,extra,community,multilib,ublinux,modules
## all # Если name_repo=all, то опубликовать все подключенные репозитории
## REPOPUBLIC_NET=all
## REPOPUBLIC_NET=modules
exec_repopublic_net(){
true
## pacredir (https://github.com/eworm-de/pacredir)
## Опубликовать локальный репозиторий в локальной сети и подключиться к сети распределённых репозиториев
## При установке пакета пакет ищется в распределённой сети репозиториев и устанавливается самой последней доступной версией
## REPOPUBLIC_NET=disable|no|none|enable|yes,db,<name_repos_1>,...,<name_repos_n>
## disable|no|none # Отключить все репозитории от сети распределённых репозиториев
## enable|yes # Подключить все репозитории к сети распределённых репозиториев
## db # Получать БД пакетов pacman от сети распределённых репозиториев
## <name_repo> # Подключенное имя репозитория, например: core,extra,community,multilib,modules
## REPOPUBLIC_NET=enable,db
## REPOPUBLIC_NET=db,community,modules
exec_02_repopublic_net(){
disable_pacredir(){
systemctl disable pacserve.service pacredir.service
systemctl stop pacserve.service pacredir.service
sed -E "/Include = \/etc\/pacman.d\/pacredir/d" -i ${FILE_PACMAN_CONF}
}
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || COMMAND="set="
local FILE_PACMAN_CONF="${ROOTFS}/etc/pacman.conf"
local FILE_PACREDIR_CONF="${ROOTFS}/etc/pacman.d/pacredir"
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#REPOPUBLIC_NET[@]} != 0 ]]; then
local DB_CACHE=
local REPOPUBLIC_NET_DISABLE=
local DATA_PACMAN_CONF=$(cat ${FILE_PACMAN_CONF})
#sed -E "/Include = \/etc\/pacman.d\/pacredir/d" <<< ${DATA_PACMAN_CONF}
local DATA_PACMAN_CONF=${DATA_PACMAN_CONF//$'\n'Include = \/etc\/pacman.d\/pacredir/}
while IFS= read -u3 REPOPUBLIC_NET_REPOSITORY; do
if [[ ${REPOPUBLIC_NET_REPOSITORY,,} == @("disable"|"no"|"none") ]]; then
# Отключить управление
REPOPUBLIC_NET_DISABLE=yes
break
elif [[ ${REPOPUBLIC_NET_REPOSITORY,,} == "db" ]]; then
# Включить запрос БД pacman из кеш сервера
DB_CACHE=yes
elif [[ ${REPOPUBLIC_NET_REPOSITORY,,} == @("enable"|"yes") ]]; then
# Добавить ко всем репозиториям в pacman.conf: Include = /etc/pacman.d/pacredir
DATA_PACMAN_CONF=$(sed -E "0,/^\[.*\]$/! s/(^\[.*\]$)/\1\nInclude = \/etc\/pacman.d\/pacredir/" <<< ${DATA_PACMAN_CONF}) #"
else
# Добавить к указанному репозиторию, работать через кеш сервер
DATA_PACMAN_CONF=$(sed -E "/\[${REPOPUBLIC_NET_REPOSITORY}\]/a Include = \/etc\/pacman.d\/pacredir" <<< ${DATA_PACMAN_CONF})
fi
done 3<<< "${REPOPUBLIC_NET//,/$'\n'}"
if [[ -n ${REPOPUBLIC_NET_DISABLE} ]]; then
disable_pacredir
else
[[ -n ${DB_CACHE} ]] && sed -E "s/^#(Server = )/\1/" -i ${FILE_PACREDIR_CONF} || sed -E "s/^(Server = )/#\1/" -i ${FILE_PACREDIR_CONF}
echo "${DATA_PACMAN_CONF}" > ${FILE_PACMAN_CONF}
systemctl restart pacserve.service pacredir.service
fi
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
disable_pacredir
fi
}
## Опубликовать локальный репозиторий в виде локального WEB ресурса
## REPOPUBLIC_WEB[<path>]=enable|disable,listing:<port>:<auth_name>:<auth_pass>:<auth_hash>
## <path> # Путь до каталога репозитория, который будет опубликован
## enable # Включить публикацию
## disable # Выключить публикацию
## darkhttpd or miniserve
## Опубликовать хранилище или репозиторий в виде локального WEB ресурса
## Если необходимо опубликовать выборочные репозитории, то создать новый каталог хранилища в который переместить симлинки выбранных репозиториев. Опубликовать новый каталог хранилища.
## REPOPUBLIC_WEB[<path>[:<repo1,repo2,...>]]=enable|yes|disable|no|none:listing:<port>:<auth_name>:<auth_pass>:<auth_hash>
## <path> # Путь до каталога хранилища, который будет опубликован
## <path>:repo1,repo2 # Путь до каталога хранилища и выбранные репозитории из хранилища которые будут опубликованы
## enable|yes # Включить публикацию
## disable|no|none # Выключить публикацию
## listing # Включить WEB обозреватель файлов. Не обязятельный
## <port> # Порт по которому доступен репозиторий. По умолчанию: 8080. Не обязательный
## <auth_name> # Параметры авторизации, имя пользователя. Не обязательный
## <auth_pass> # Параметры авторизации, открытый пароль или тип хеша. Не обязательный
## password # Не зашифрованный пароль
## sha256 # Использовать зашифрованный пароль SHA256
## sha512 # Использовать зашифрованный пароль SHA512
## <auth_hash> # Параметры авторизации, зашифроваггый пароль SHA256 или SHA512. Не обязательный
## REPOPUBLIC_WEB[/home/myrepo]=enable
exec_repopublic_web(){
true
## <password> # Не зашифрованный пароль
## sha256 # Использовать зашифрованный пароль SHA256, применять только совместно с <auth_hash>
## sha512 # Использовать зашифрованный пароль SHA512, применять только совместно с <auth_hash>
## <auth_hash> # Параметры авторизации, не зашифрованный или зашифрованный пароль SHA256 или SHA512. Не обязательный
## # Получить SHA шифр из пароля: echo -n "PASSWORD" | sha512sum | cut -f 1 -d ' '
## REPOPUBLIC_WEB[/home/storage]=enable:listing
## REPOPUBLIC_WEB[/home/storage:repo-1,repo-2]=enable:listing::ublinux:123
## REPOPUBLIC_WEB[/home/storage:repo-1,repo-2]=enable:listing::ublinux:sha512:123
## REPOPUBLIC_WEB[/home/storage:repo-1,repo-2]=enable:listing::ublinux:sha256:a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
exec_03_repopublic_web(){
kill_web_service(){
local REPOPUBLIC_WEB_PATH=$1
if [[ -n ${REPOPUBLIC_WEB_PATH} ]]; then
# Убить процесс с указанным каталогом
pkill -f "darkhttpd ${REPOPUBLIC_WEB_PATH}"
pkill -f "miniserve .* ${REPOPUBLIC_WEB_PATH}"
else
# Убить все процессы
pkill -f "darkhttpd .* ${PATH_LOG_REPOPUBLIC_WEB}"
pkill -f "miniserve .* --title UBLinux Repository:"
fi
}
mount_bind_storage(){
umount "${PATH_NEW_REPOPUBLIC_WEB_PATH}"/* 2>/dev/null
install -dm755 "${PATH_NEW_REPOPUBLIC_WEB_PATH}/pool"
mount --bind -o ro "${SRC_REPOPUBLIC_WEB_PATH_POOL}" "${PATH_NEW_REPOPUBLIC_WEB_PATH}/pool"
while IFS= read -u4 SELECT_SRC_REPOPUBLIC_WEB_PATH_REPO; do
if [[ -d ${SRC_REPOPUBLIC_WEB_PATH_POOL%/*}/${SELECT_SRC_REPOPUBLIC_WEB_PATH_REPO} ]]; then
install -dm755 "${PATH_NEW_REPOPUBLIC_WEB_PATH}/${SELECT_SRC_REPOPUBLIC_WEB_PATH_REPO}"
mount --bind -o ro "${SRC_REPOPUBLIC_WEB_PATH_POOL%/*}/${SELECT_SRC_REPOPUBLIC_WEB_PATH_REPO}" "${PATH_NEW_REPOPUBLIC_WEB_PATH}/${SELECT_SRC_REPOPUBLIC_WEB_PATH_REPO}"
else
echo "WARNING: repository '${SRC_REPOPUBLIC_WEB_PATH_POOL%/*}/${SELECT_SRC_REPOPUBLIC_WEB_PATH_REPO}' not found!"
fi
done 4<<< ${SRC_REPOPUBLIC_WEB_PATH_REPOLIST//,/$'\n'}
}
[[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift
[[ -n ${COMMAND} ]] || COMMAND="set="
local PATH_NEW_REPOPUBLIC_WEB_PATH="${ROOTFS}/srv/http/repopublic_web"
local PATH_LOG_REPOPUBLIC_WEB="${ROOTFS}/var/log/repopublic_web"
if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#REPOPUBLIC_WEB[@]} != 0 ]]; then
local ARGS_DRAKHTTPD=" --daemon --chroot --no-server-id --uid http --gid http --mimetypes /etc/conf.d/mimetypes --log ${PATH_LOG_REPOPUBLIC_WEB}/darkhttpd.log"
local ARGS_MINISERV=" --color-scheme archlinux --color-scheme-dark archlinux --hide-theme-selector --hide-version-footer --dirs-first --title 'UBLinux Repository: '"
[[ -d ${PATH_LOG_REPOPUBLIC_WEB} ]] || install -dm755 "${PATH_LOG_REPOPUBLIC_WEB}"
while IFS= read -u3 REPOPUBLIC_WEB_PATHS; do
local CREATE_BIND_STORAGE=
if [[ ${REPOPUBLIC_WEB_PATHS} =~ ":" ]]; then
# Указано хранилище и репозитории для публикации
SRC_REPOPUBLIC_WEB_PATH_POOL="${REPOPUBLIC_WEB_PATHS%:*}/pool"
SRC_REPOPUBLIC_WEB_PATH_REPOLIST=${REPOPUBLIC_WEB_PATHS#*:}
if [[ -d ${SRC_REPOPUBLIC_WEB_PATH_POOL} ]]; then
REPOPUBLIC_WEB_PATH=${PATH_NEW_REPOPUBLIC_WEB_PATH}
CREATE_BIND_STORAGE=yes
else
# Публикуемый каталог не содержит pool всех пакетов, публикуем каталог храниища
REPOPUBLIC_WEB_PATH=${REPOPUBLIC_WEB_PATHS}
fi
else
# Указано только хранилище
REPOPUBLIC_WEB_PATH=${REPOPUBLIC_WEB_PATHS}
fi
IFS=: read -r SELECT_STATUS SELECT_LISTING SELECT_PORT SELECT_AUTH_NAME SELECT_AUTH_PASS SELECT_AUTH_HASH NULL <<< "${REPOPUBLIC_WEB[${REPOPUBLIC_WEB_PATHS}]}"
if [[ ${SELECT_STATUS} == @("enable"|"yes") ]]; then
[[ -n ${CREATE_BIND_STORAGE} ]] && mount_bind_storage
[[ ${SELECT_LISTING} == "listing" ]] || { ARGS_DRAKHTTPD+=" --no-listing"; ARGS_MINISERV+=" --disable-indexing"; }
[[ -n ${SELECT_PORT} ]] && ARGS_DRAKHTTPD+=" --port ${SELECT_PORT}" && ARGS_MINISERV+=" --port ${SELECT_PORT}" || { ARGS_DRAKHTTPD+=" --port 80"; ARGS_MINISERV+=" --port 80"; }
if [[ -n ${SELECT_AUTH_NAME} && -n ${SELECT_AUTH_PASS} ]]; then
if [[ -z ${SELECT_AUTH_HASH} ]]; then
ARGS_DRAKHTTPD+=" --auth ${SELECT_AUTH_NAME}:${SELECT_AUTH_PASS}"; ARGS_MINISERV+=" --auth ${SELECT_AUTH_NAME}:${SELECT_AUTH_PASS}"
else
ARGS_DRAKHTTPD=
[[ ${SELECT_AUTH_PASS,,} == "sha256" && ${#SELECT_AUTH_HASH} -ne 64 ]] && SELECT_AUTH_HASH=$(echo -n "${SELECT_AUTH_HASH}" | sha256sum | cut -f 1 -d ' ')
[[ ${SELECT_AUTH_PASS,,} == "sha512" && ${#SELECT_AUTH_HASH} -ne 128 ]] && SELECT_AUTH_HASH=$(echo -n "${SELECT_AUTH_HASH}" | sha512sum | cut -f 1 -d ' ')
ARGS_MINISERV+=" --auth ${SELECT_AUTH_NAME}:${SELECT_AUTH_PASS}:${SELECT_AUTH_HASH}"
fi
fi
if [[ -n ${ARGS_DRAKHTTPD} ]]; then
# Без шифрованного пароля, используем darkhttpd
kill_web_service "${REPOPUBLIC_WEB_PATH}"
darkhttpd "${REPOPUBLIC_WEB_PATH}" ${ARGS_DRAKHTTPD}
else
# C шифрованным паролем, используем miniserve
kill_web_service "${REPOPUBLIC_WEB_PATH}"
eval setsid miniserve ${ARGS_MINISERV} -- "${REPOPUBLIC_WEB_PATH}" 1>"${PATH_LOG_REPOPUBLIC_WEB}"/miniserve.log 2>&1 &
fi
elif [[ ${SELECT_STATUS} == @("disable"|"no"|"none") ]]; then
kill_web_service "${REPOPUBLIC_WEB_PATH}"
umount "${PATH_NEW_REPOPUBLIC_WEB_PATH}"/* 2>/dev/null
rm -rdf "${PATH_NEW_REPOPUBLIC_WEB_PATH}"
fi
done 3< <(printf "%s\n" "${!REPOPUBLIC_WEB[@]}")
elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then
kill_web_service
umount "${PATH_NEW_REPOPUBLIC_WEB_PATH}"/* 2>/dev/null
rm -rdf "${PATH_NEW_REPOPUBLIC_WEB_PATH}"
fi
}
## pacoloco (https://github.com/anatol/pacoloco)
## Опубликовать ленивое зеркало подключенных репозиториев в виде локального WEB ресурса.
## Получая запрос от пользователя, загружает с удалённого репозитория пакет и сохраняет в кеше передавая его пользователю.
## REPOPUBLIC_CACHE[<path>]=enable|disable:<port>:<server_name_1>@<server_url_1>,...,<server_name_n>@<server_url_n>
@ -99,7 +311,7 @@ exec_repopublic_web(){
## https:// # URL префикс для репозитория на HTTPS
## REPOPUBLIC_CACHE[/mnt/livedata/ublinux-data/repopublic_cache]=enable
## REPOPUBLIC_CACHE[/mnt/livedata/ublinux-data/repopublic_cache]=enable:80:myrepo@http://192.168.0.1:8080/repo/2204
exec_repopublic_cache(){
exec_04_repopublic_cache(){
true
}

@ -20,12 +20,12 @@ SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
PATH_LIB_UBBOOT="${ROOTFS}/usr/lib/ubboot"
#Profile updating
OS_RELEASE_PRETTY_NAME="UBLinux 0000 Unknown (x)"
PATH_VERSION=$(ls /memory/layer-base/0/VERSION* 2>/dev/null | head -1)
[[ -n "${PATH_VERSION}" ]] || PATH_VERSION="$(ls /VERSION* 2>/dev/null | head -1)"
[[ -n "${PATH_VERSION}" ]] && OS_RELEASE_PRETTY_NAME=$(head -1 "${PATH_VERSION}" 2>/dev/null )
#Profile updating
OS_RELEASE_PRETTY_NAME="UBLinux 0000 Unknown (x)"
PATH_VERSION=$(find /memory/layer-base/ -maxdepth 2 -type f -name "VERSION*" 2>/dev/null | tail -1)
[[ -n ${PATH_VERSION} ]] || PATH_VERSION="$(find ${ROOTFS}/ -maxdepth 1 -type f -name "VERSION*" 2>/dev/null | tail -1)"
[[ -n ${PATH_VERSION} ]] && OS_RELEASE_PRETTY_NAME=$(head -1 "${PATH_VERSION}" 2>/dev/null)
echo "${OS_RELEASE_PRETTY_NAME}" > ${ROOTFS}/etc/ublinux-release
${PATH_LIB_UBBOOT}/ubdistconv -l ${OS_RELEASE_PRETTY_NAME} > ${ROOTFS}/etc/lsb-release
${PATH_LIB_UBBOOT}/ubdistconv -o ${OS_RELEASE_PRETTY_NAME} > ${ROOTFS}/usr/lib/os-release
echo "${OS_RELEASE_PRETTY_NAME}" > ${ROOTFS}/etc/ublinux-release
${PATH_LIB_UBBOOT}/ubdistconv -l ${OS_RELEASE_PRETTY_NAME} > ${ROOTFS}/etc/lsb-release
${PATH_LIB_UBBOOT}/ubdistconv -o ${OS_RELEASE_PRETTY_NAME} > ${ROOTFS}/usr/lib/os-release

@ -55,7 +55,7 @@ exec_auditd(){
AUDITD_VAR=${AUDITD[${AUDITD_NAME}]}
fi
[[ ${AUDITD_VAR} =~ ^\"(.*)\"$ ]] && AUDITD_VAR=${BASH_REMATCH[1]}
ESC_AUDITD_VAR=$(sed 's/[^a-zA-Z0-9,_@%-]/\\&/g' <<< "${AUDITD_VAR}")
ESC_AUDITD_VAR=$(sed 's/[^a-zA-Z0-9=",_@#%&<> -]/\\&/g' <<< "${AUDITD_VAR}")
sed "/^${ESC_AUDITD_VAR}$/d" -i "${FILE_PATTERN_AUDITD_CONF}"
fi
}
@ -225,11 +225,11 @@ exec_logrotate(){
[[ ${FILES_LOG} == ${RULES_LOG} ]] && unset RULES_LOG
FILES_LOG="${FILES_LOG//,/ }"
# Вставить в список файлов последним
[[ -n ${FILES_LOG} ]] && ESC_FILES_LOG=$(sed 's/[^a-zA-Z0-9,_@%-]/\\&/g' <<< "${FILES_LOG}")
[[ -n ${FILES_LOG} ]] && ESC_FILES_LOG=$(sed 's/[^a-zA-Z0-9=",_@#%&<> -]/\\&/g' <<< "${FILES_LOG}")
[[ -n ${FILES_LOG} ]] && [[ ! $(cat "${FILE_PATTERN_LOGROTATE_CONF}${NAME_FILE}") =~ ${FILES_LOG} ]] \
&& sed -E "0,/ \{/s/ \{/ ${ESC_FILES_LOG} \{/" -i "${FILE_PATTERN_LOGROTATE_CONF}${NAME_FILE}"
# Вставить в список правил последним
[[ -n ${RULES_LOG} ]] && ESC_RULES_LOG=$(sed 's/[^a-zA-Z0-9,_@%-]/\\&/g' <<< "${RULES_LOG}")
[[ -n ${RULES_LOG} ]] && ESC_RULES_LOG=$(sed 's/[^a-zA-Z0-9=",_@#%&<> -]/\\&/g' <<< "${RULES_LOG}")
[[ -n ${RULES_LOG} ]] && [[ ! $(cat "${FILE_PATTERN_LOGROTATE_CONF}${NAME_FILE}") =~ ${RULES_LOG} ]] \
&& sed -E "/^\}$/i\\\t${ESC_RULES_LOG}" -i "${FILE_PATTERN_LOGROTATE_CONF}${NAME_FILE}"
done 3< <(printf "%s\n" "${!LOGROTATE[@]}")
@ -240,10 +240,10 @@ exec_logrotate(){
[[ ${FILES_LOG} == ${RULES_LOG} ]] && unset RULES_LOG
FILES_LOG="${FILES_LOG//,/ }"
# Если удаляемая часть относится к файлу, то просто вырезать, если к тексту, то удалить строку
[[ -n ${FILES_LOG} ]] && ESC_FILES_LOG=$(sed 's/[^a-zA-Z0-9,_@%-]/\\&/g' <<< "${FILES_LOG}")
[[ -n ${FILES_LOG} ]] && ESC_FILES_LOG=$(sed 's/[^a-zA-Z0-9=",_@#%&<> -]/\\&/g' <<< "${FILES_LOG}")
[[ -n ${FILES_LOG} ]] && [[ $(cat "${FILE_PATTERN_LOGROTATE_CONF}${NAME_FILE}") =~ ${FILES_LOG} ]] \
&& sed -E "0,/ \{/s/${ESC_FILES_LOG}//" -i "${FILE_PATTERN_LOGROTATE_CONF}${NAME_FILE}"
[[ -n ${RULES_LOG} ]] && ESC_RULES_LOG=$(sed 's/[^a-zA-Z0-9,_@%-]/\\&/g' <<< "${RULES_LOG}")
[[ -n ${RULES_LOG} ]] && ESC_RULES_LOG=$(sed 's/[^a-zA-Z0-9=",_@#%&<> -]/\\&/g' <<< "${RULES_LOG}")
[[ -n ${RULES_LOG} ]] && [[ $(cat "${FILE_PATTERN_LOGROTATE_CONF}${NAME_FILE}") =~ ${RULES_LOG} ]] \
&& sed "/${ESC_RULES_LOG}/d" -i "${FILE_PATTERN_LOGROTATE_CONF}${NAME_FILE}"
done 3< <(printf "%s\n" "${!LOGROTATE[@]}")

@ -48,7 +48,7 @@ shopt -s extglob
# if [[ -x ${ROOTFS}/usr/bin/chpasswd ]]; then
# echo "${USER_NAME}:${USER_PASS}" | ${CMD_CHROOT} /usr/bin/chpasswd --encrypted
# else
# ESC_USER_PASS=$(sed 's/[^a-zA-Z0-9,_@%-]/\\&/g' <<< "${USER_PASS}")
# ESC_USER_PASS=$(sed 's/[^a-zA-Z0-9=",_@#%&<> -]/\\&/g' <<< "${USER_PASS}")
# EPOCH_DAY=$(( $(${CMD_CHROOT} date +%s)/(60*60*24) )) # (60*60*24)=18400 second on day
# USER_FROM_SHADOW=$(grep "^${USER_NAME}:" "${FILE_SHADOW}")
# if [[ -z ${USER_FROM_SHADOW} ]]; then
@ -73,7 +73,7 @@ shopt -s extglob
# if [[ -x ${ROOTFS}/usr/bin/chgpasswd ]]; then
# echo "${GROUP_NAME}:${GROUP_PASS}" | ${CMD_CHROOT} /usr/bin/chgpasswd --encrypted
# else
# ESC_GROUP_PASS=$(sed 's/[^a-zA-Z0-9,_@%-]/\\&/g' <<< "${GROUP_PASS}")
# ESC_GROUP_PASS=$(sed 's/[^a-zA-Z0-9=",_@#%&<> -]/\\&/g' <<< "${GROUP_PASS}")
# GROUP_FROM_SHADOW=$(grep "^${GROUP_NAME}:" "${FILE_GSHADOW}")
# if [[ -z ${GROUP_FROM_SHADOW} ]]; then
# echo "${GROUP_NAME}:${GROUP_PASS}::" >> "${FILE_GSHADOW}"

@ -314,14 +314,19 @@ SERVICES_ENABLE=dbus-broker,NetworkManager,sshd,swapspace,systemd-timesyncd,cups
## Настройка подключения репозиториев
## REPOSITORY=disable|enable
## *disable # Отключить управление списком репозиториев, по умолчанию
## # Когда управление списиком отключено, то используются репозитории из пакета по умолчанию: core,extra,community,multilib,ublinux,modules
## # Используются репозитории из пакета pacman, по умолчанию: core,extra,community,multilib,modules
## enable # Включить управление списком репозиториев
## # Когда управление списком включено, то используются репозитории только параметра REPOSITORY.
## # Используются системные репозитории core,extra,community,multilib,modules и указанные в параметре REPOSITORY[*]
## only # Включить управление списком репозиториев
## # Используются только репозитории указанные в параметре REPOSITORY[*]
## Порядок указания репозиториев важен
## По умолчанию включены системные репозитории, имена: core,extra,community,multilib,modules
## REPOSITORY[<name_repo>]=<server_path_1>,<server_path_2>,...,<server_path_n>;<siglevel>;<usage>;disable
## <name_repo> # Произвольное имя репозитория. Обязательный
## # По умолчанию включены системные репозитории, имена: core,extra,community,multilib,ublinux,modules
## # Имена системных репозиториев: core,extra,community,multilib,modules
## <server_path_n> # Полный URL-адрес места, где можно найти базу данных, пакеты и подписи (если доступны) для этого репозитория. Обязательный
## # Возможно указать несколько, через запятую (,)
## # Символ $ обязательно экранировать \$
## <file> # Если указан доступный файл, то подключить как дополнительный файл расширения конфигурации (Include = <file>)
## file:// # URL префикс для репозитория в каталоге
## ftp:// # URL префикс для репозитория FTP
@ -350,38 +355,47 @@ SERVICES_ENABLE=dbus-broker,NetworkManager,sshd,swapspace,systemd-timesyncd,cups
## Search # Включать поиск этого репозитория
## Install # Включать установку пакетов из этого репозитория во время операции --sync
## Upgrade # Позволить этому репозиторию быть действительным источником пакетов при выполнении --sysupgrade
## disable # Временно отключить управление репозиторием
## REPOSITORY[core]=/etc/pacman.d/mirrorlist
## REPOSITORY[extra]=/etc/pacman.d/mirrorlist;;;disable
## disable # Временно отключить управление репозиторием, либо после = указать - пример: REPOSITORY[modules]=-/etc/pacman.d/mirrorlist
## REPOSITORY[core]=/etc/pacman.d/mirrorlist;;;disable
## REPOSITORY[modules]="https://repo.ublinux.ru/2405/\$repo/\$arch"
## REPOSITORY[modules]='https://repo.ublinux.ru/2405/$repo/$arch'
## REPOSITORY[mymodules]=http://192.168.0.1:8080/repo/2204;;;disable
## REPOSITORY[webmyrepo]=http://myweb.org/myrepo;never
## REPOSITORY[localmyrepo]=file:///home/myrepo;never;All
## REPOSITORY[myrepo]=/home/myrepo/mirrorlist
## Опубликовать локальный репозиторий в локальной сети, подключиться к сети распределённых репозиториев.
## При установке пакета пакет ищется в распределённой сети репозиториев и устанавливается самой последней доступной версией.
## REPOPUBLIC_NET=<name_repos_1>,...,<name_repos_n>
## <name_repo> # Подключенное имя репозитория, например: core,extra,community,multilib,ublinux,modules
## all # Если name_repo=all, то опубликовать все подключенные репозитории
## REPOPUBLIC_NET=all
## REPOPUBLIC_NET=modules
## Опубликовать локальный репозиторий в виде локального WEB ресурса
## REPOPUBLIC_WEB[<path>]=enable|disable,listing:<port>:<auth_name>:<auth_pass>:<auth_hash>
## <path> # Путь до каталога репозитория, который будет опубликован
## enable # Включить публикацию
## disable # Выключить публикацию
## Опубликовать локальный репозиторий в локальной сети и подключиться к сети распределённых репозиториев
## При установке пакета пакет ищется в распределённой сети репозиториев и устанавливается самой последней доступной версией
## REPOPUBLIC_NET=disable|no|none|enable|yes,db,<name_repos_1>,...,<name_repos_n>
## disable|no|none # Отключить все репозитории от сети распределённых репозиториев
## enable|yes # Подключить все репозитории к сети распределённых репозиториев
## db # Получать БД пакетов pacman от сети распределённых репозиториев
## <name_repo> # Подключенное имя репозитория, например: core,extra,community,multilib,modules
## REPOPUBLIC_NET=enable,db
## REPOPUBLIC_NET=db,community,modules
## Опубликовать хранилище или репозиторий в виде локального WEB ресурса
## Если необходимо опубликовать выборочные репозитории, то создать новый каталог хранилища в который переместить симлинки выбранных репозиториев. Опубликовать новый каталог хранилища.
## REPOPUBLIC_WEB[<path>[:<repo1,repo2,...>]]=enable|yes|disable|no|none:listing:<port>:<auth_name>:<auth_pass>:<auth_hash>
## <path> # Путь до каталога хранилища, который будет опубликован
## <path>:repo1,repo2 # Путь до каталога хранилища и выбранные репозитории из хранилища которые будут опубликованы
## enable|yes # Включить публикацию
## disable|no|none # Выключить публикацию
## listing # Включить WEB обозреватель файлов. Не обязятельный
## <port> # Порт по которому доступен репозиторий. По умолчанию: 8080. Не обязательный
## <auth_name> # Параметры авторизации, имя пользователя. Не обязательный
## <auth_pass> # Параметры авторизации, открытый пароль или тип хеша. Не обязательный
## password # Не зашифрованный пароль
## sha256 # Использовать зашифрованный пароль SHA256
## sha512 # Использовать зашифрованный пароль SHA512
## <auth_hash> # Параметры авторизации, зашифрованный пароль SHA256 или SHA512. Не обязательный
## REPOPUBLIC_WEB[/home/myrepo]=enable
## Опубликовать ленивое зеркало подключенных репозиториев в виде локального WEB ресурса.
## <password> # Не зашифрованный пароль
## sha256 # Использовать зашифрованный пароль SHA256, применять только совместно с <auth_hash>
## sha512 # Использовать зашифрованный пароль SHA512, применять только совместно с <auth_hash>
## <auth_hash> # Параметры авторизации, не зашифрованный или зашифрованный пароль SHA256 или SHA512. Не обязательный
## # Получить SHA шифр из пароля: echo -n "PASSWORD" | sha512sum | cut -f 1 -d ' '
## REPOPUBLIC_WEB[/home/storage]=enable:listing
## REPOPUBLIC_WEB[/home/storage:repo-1,repo-2]=enable:listing::ublinux:123
## REPOPUBLIC_WEB[/home/storage:repo-1,repo-2]=enable:listing::ublinux:sha512:123
## REPOPUBLIC_WEB[/home/storage:repo-1,repo-2]=enable:listing::ublinux:sha256:a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
## Опубликовать ленивое зеркало подключенных репозиториев в виде локального WEB ресурса
## Получая запрос от пользователя, загружает с удалённого репозитория пакет и сохраняет в кеше передавая его пользователю.
## REPOPUBLIC_CACHE[<path>]=enable|disable:<port>:<server_name_1>@<server_url_1>,...,<server_name_n>@<server_url_n>
## <path> # Путь до каталога файлов кеша, если не указан, то по умолчанию: /mnt/livedata/ublinux-data/repopublic_cache
@ -402,7 +416,7 @@ SERVICES_ENABLE=dbus-broker,NetworkManager,sshd,swapspace,systemd-timesyncd,cups
## Настройка автообновления системы
## AUTOUPDATE=enable | <mode>:<interval>:<repository>
## enable # Включает автообновление с параметрами modsys:boot:core,extra,community,multilib,ublinux,modules
## enable # Включает автообновление с параметрами modsys:boot:core,extra,community,multilib,modules
## <mode> # Режимы обновления
## *modsys # Вначале обновлять все модули и после систему
## module # Обновлять только модули
@ -412,8 +426,14 @@ SERVICES_ENABLE=dbus-broker,NetworkManager,sshd,swapspace,systemd-timesyncd,cups
## 12h # Каждые 12 часов
## 7d # Каждые 7 дней
## 1m # Один раз в месяц
## <repository> # Имена репозиториев с которых будет происходить обновление. Если не указано, то по умолчанию: core,extra,community,multilib,ublinux,modules
## <repository> # Имена репозиториев с которых будет происходить обновление. Репозитории из списка по умолчанию или параметра REPOSITORY
## # Если не указано, то по умолчанию: core,extra,community,multilib,modules
## AUTOUPDATE=enable
##
## Врямя проведения последнего обновления
## AUTOUPDATE_TIMESTAMP=<datetime>
## <datetime> # Дата и время, в формате: DD/MM/YYYY HH:MM
## AUTOUPDATE_TIMESTAMP="31/12/2023 12:00"
[/etc/ublinux/mount]
## Настройка подключения сетевых ресурсов
@ -583,6 +603,7 @@ SERVICES_ENABLE=dbus-broker,NetworkManager,sshd,swapspace,systemd-timesyncd,cups
## # Пример записи сценария: sharedscripts,postrotate,/usr/bin/chronyc cyclelogs > /dev/null 2>&1 || true,echo Ok,endscript
#LOGROTATE[samba]="/var/log/samba/log.smbd,/var/log/samba/log.nmbd,/var/log/samba/*.log:notifempty,missingok,copytruncate"
#LOGROTATE[clamav]="/var/log/clamav/clamd.log,/var/log/clamav/freshclam.log,/var/log/clamav/clamav-milter.log:create 644 clamav clamav,sharedscripts,missingok,notifempty,postrotate,/bin/kill -HUP \`cat /run/clamav/clamd.pid 2>/dev/null\` 2> /dev/null || true,/bin/kill -HUP \`cat /run/clamav/freshclam.pid 2>/dev/null\` 2> /dev/null || true,/bin/kill -HUP \`cat /run/clamav/clamav-milter.pid 2>/dev/null\` 2> /dev/null || true,endscript"
#LOGROTATE[clamav]='/var/log/clamav/clamd.log,/var/log/clamav/freshclam.log,/var/log/clamav/clamav-milter.log:create 644 clamav clamav,sharedscripts,missingok,notifempty,postrotate,/bin/kill -HUP `cat /run/clamav/clamd.pid 2>/dev/null` 2> /dev/null || true,/bin/kill -HUP `cat /run/clamav/freshclam.pid 2>/dev/null` 2> /dev/null || true,/bin/kill -HUP `cat /run/clamav/clamav-milter.pid 2>/dev/null` 2> /dev/null || true,endscript'
#LOGROTATE[chrony]="/var/log/chrony/*.log:missingok,nocreate,sharedscripts,postrotate,/usr/bin/chronyc cyclelogs > /dev/null 2>&1 || true,endscript"
[/etc/ublinux/boot]
@ -632,6 +653,7 @@ GRUB_BOOT_SILENT="splash loglevel=3"
## usbcore.autosuspend=-1 # Отключить автозасыпание USB устройств в режиме suspend
## ipv6.disable=1 # Отключить глобально ipv6
## GRUB_CMDLINE_LINUX="modprobe.blacklist=nouveau"
GRUB_CMDLINE_LINUX="modprobe.blacklist=nouveau"
## Выбор загрузки версии ядра
## Если параметр не задан, то загружаемся с самой последней установленной версией
@ -733,7 +755,6 @@ GRUB_BOOT_SILENT="splash loglevel=3"
## Адрес сети по умолчанию
#NETWORKIP=192.168.1.
[/etc/ublinux/save]
## Настройка сохранений
################################################################################
@ -758,6 +779,15 @@ GRUB_BOOT_SILENT="splash loglevel=3"
#SAVE_MODULE_INCLUDE="/etc/pacman.d/gnupg,/etc/NetworkManager/system-connections"
#SAVE_MODULE_EXCLUDE="/etc/ublinux"
## TODO
## Удалить указанные изменения, после успешной очистки параметр удаляется
## SAVE_CLEAN=all|changes,rootcopy,home
## all # Удалить все изменения из /changes/ /rootcopy/ /home/
## changes # Удалить только системные изменения /changes/
## rootcopy # Удалить только изменения /rootcopy/
## home # Удалить только изменения /home/
## SAVE_CLEAN=changes,rootcopy
[/etc/ublinux/network]
## Настройка сети
################################################################################
@ -1037,10 +1067,10 @@ NSSWITCHWINBIND=yes
## ACCESS_ALLOWED_SGID[/home]=-
## Ограничить запуск исполняемых файлов и интерпретаторов языков программирования в интерактивном режиме
## ACCESS_DENIED_EXEC[<find_path_1> <find_path_n> <options>]=<file_1>,<file_2>,<file_n>
## ACCESS_DENIED_EXEC[<find_path_1>,<find_path_n>,<options>]=<file_1>,<file_2>,<file_n>
## Find path: # Пути поиска указанных файлов, можно использовать разделитель: пробел, запятая, точка с запятой
## <empty> # Если пусто и не задан [], то будут выбраны пути поиска ="/usr/bin /usr/local/bin /usr/local/sbin /home"
## <find_path_n> # Путь до каталога поиска /path/subpath,/path/*/subpath. Если в имени пути используется пробел, то необходимо путь обрамить \"
## <find_path_n> # Путь до каталога поиска /path/subpath,/path/*/subpath
## Options: # Опции применяются ко все указанным каталогам и должны быть самые последние в списке
## -maxdepth 1 # Путь до каталога поиска с уровнем вложения 1
## Files: # Имена файлов, можно использовать разделитель: пробел, запятая, двоеточие
@ -1049,7 +1079,7 @@ NSSWITCHWINBIND=yes
## ACCESS_DENIED_EXEC=interpreter
## ACCESS_DENIED_EXEC[/usr/bin,/usr/bin/local]=gbr3,python,python2,python3,perl,perl6,php,ruby,node,awk,gawk
## ACCESS_DENIED_EXEC[/home/*/local/bin]=myfile
## ACCESS_DENIED_EXEC[\"/home/superadmin/soft my\"]=myfile
## ACCESS_DENIED_EXEC[/home/superadmin/soft my]=myfile
## Отключить пользовательские nosuid nodev noexec на смонтированные цели
## MOUNT_ATTR[<source_1>,<source_n>]=<attribut_1>,<attribut_n>

Loading…
Cancel
Save