diff --git a/ublinux/functions b/ublinux/functions index 3693b67..895faa3 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -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 ;; diff --git a/ublinux/rc.local.d/43-repository b/ublinux/rc.local.d/43-repository index 92baebd..ccb989e 100755 --- a/ublinux/rc.local.d/43-repository +++ b/ublinux/rc.local.d/43-repository @@ -12,75 +12,287 @@ SOURCE=${SYSCONF}/update; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null debug_mode "$0" "$@" ## Настройка подключения репозиториев -## REPOSITORY[]=disable | ::,,..., -## # Произвольное имя репозитория. Обязательный -## disable # Отключить отдин из репозиториев по умолчанию: core,extra,community,multilib,ublinux,modules -## # Уровень проверки подписи репозитория, можно выбрать одну из основных и вторую из дополнительных, разделитель запятая. Не обязательный -## # Последовательность имеет значение, т.к. накладываются правила каскадно. По умолчанию: Required,DatabaseOptional -## Never # Проверка подписи выполняться не будет. Основная -## PackageNever # Только для пакетов. Дополнительная -## DatabaseNever # Только для базы данных. Дополнительная -## Optional # Подписи будут проверяться при их наличии, но неподписанные базы данных и пакеты также будут приниматься. Основная +## 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[]=,,...,;;;disable +## # Произвольное имя репозитория. Обязательный +## # Имена системных репозиториев: core,extra,community,multilib,modules +## # Полный URL-адрес места, где можно найти базу данных, пакеты и подписи (если доступны) для этого репозитория. Обязательный +## # Возможно указать несколько, через запятую (,) +## # Символ $ обязательно экранировать \$ +## # Если указан доступный файл, то подключить как дополнительный файл расширения конфигурации (Include = ) +## file:// # URL префикс для репозитория в каталоге +## ftp:// # URL префикс для репозитория FTP +## http:// # URL префикс для репозитория HTTP +## https:// # URL префикс для репозитория HTTPS +## # Уровень проверки подписи репозитория, можно выбрать одну из основных и вторую из дополнительных, разделитель запятая. Не обязательный +## # Последовательность имеет значение, т.к. накладываются правила каскадно. По умолчанию: Required,DatabaseOptional +## Never # Проверка подписи выполняться не будет. Основная +## PackageNever # Только для пакетов. Дополнительная +## DatabaseNever # Только для базы данных. Дополнительная +## Optional # Подписи будут проверяться при их наличии, но неподписанные базы данных и пакеты также будут приниматься. Основная ## PackageOptional # Только для пакетов. Дополнительная ## *DatabaseOptional # Только для базы данных. Дополнительная -## *Required # Подписи будут необходимы для всех пакетов и баз данных. Основная +## *Required # Подписи будут необходимы для всех пакетов и баз данных. Основная ## PackageRequired # Только для пакетов. Дополнительная ## DatabaseRequired # Только для базы данных. Дополнительная -## TrustedOnly # Если подпись проверяется для пакетов и базы, она должна находиться в связке ключей и быть полностью доверенной; маргинальное доверие не применимо +## TrustedOnly # Если подпись проверяется для пакетов и базы, она должна находиться в связке ключей и быть полностью доверенной; маргинальное доверие не применимо ## PackageTrustedOnly # Если подпись проверяется только для пакетов ## DatabaseTrustedOnly # Если подпись проверяется только для базы данных -## TrustAll # Если подпись проверена, она должна находиться в связке ключей, но ей не требуется назначать уровень доверия (например, неизвестное или предельное доверие) +## TrustAll # Если подпись проверена, она должна находиться в связке ключей, но ей не требуется назначать уровень доверия (например, неизвестное или предельное доверие) ## PackageTrustAll # Если подпись проверена только для пакетов ## DatabaseTrustAll # Если подпись проверена только для базы данных -## # Уровень использования этого репозитория. Не обязательный -## *All # Включать все перечисленные функции для репозитория. Это значение по умолчанию -## Sync # Включать обновления для этого репозитория -## Search # Включать поиск этого репозитория -## Install # Включать установку пакетов из этого репозитория во время операции --sync -## Upgrade # Позволить этому репозиторию быть действительным источником пакетов при выполнении --sysupgrade -## # Полный URL-адрес места, где можно найти базу данных, пакеты и подписи (если доступны) для этого репозитория. Обязательный -## # Возможно указать несколько, через запятую. -## # Если указан доступный файл, то подключить как дополнительный файл расширения конфигурации -## 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 +## # Уровень использования этого репозитория. Не обязательный +## *All # Включать все перечисленные функции для репозитория, по умолчанию +## Sync # Включать обновления для этого репозитория +## Search # Включать поиск этого репозитория +## Install # Включать установку пакетов из этого репозитория во время операции --sync +## Upgrade # Позволить этому репозиторию быть действительным источником пакетов при выполнении --sysupgrade +## 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=,..., -## # Подключенное имя репозитория, например: 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,,..., +## disable|no|none # Отключить все репозитории от сети распределённых репозиториев +## enable|yes # Подключить все репозитории к сети распределённых репозиториев +## db # Получать БД пакетов pacman от сети распределённых репозиториев +## # Подключенное имя репозитория, например: 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[]=enable|disable,listing:::: -## # Путь до каталога репозитория, который будет опубликован -## enable # Включить публикацию -## disable # Выключить публикацию -## listing # Включить WEB обозреватель файлов. Не обязятельный -## # Порт по которому доступен репозиторий. По умолчанию: 8080. Не обязательный -## # Параметры авторизации, имя пользователя. Не обязательный -## # Параметры авторизации, открытый пароль или тип хеша. Не обязательный -## password # Не зашифрованный пароль -## sha256 # Использовать зашифрованный пароль SHA256 -## sha512 # Использовать зашифрованный пароль SHA512 -## # Параметры авторизации, зашифроваггый пароль SHA256 или SHA512. Не обязательный -## REPOPUBLIC_WEB[/home/myrepo]=enable -exec_repopublic_web(){ - true +## darkhttpd or miniserve +## Опубликовать хранилище или репозиторий в виде локального WEB ресурса +## Если необходимо опубликовать выборочные репозитории, то создать новый каталог хранилища в который переместить симлинки выбранных репозиториев. Опубликовать новый каталог хранилища. +## REPOPUBLIC_WEB[[:]]=enable|yes|disable|no|none:listing:::: +## # Путь до каталога хранилища, который будет опубликован +## :repo1,repo2 # Путь до каталога хранилища и выбранные репозитории из хранилища которые будут опубликованы +## enable|yes # Включить публикацию +## disable|no|none # Выключить публикацию +## listing # Включить WEB обозреватель файлов. Не обязятельный +## # Порт по которому доступен репозиторий. По умолчанию: 8080. Не обязательный +## # Параметры авторизации, имя пользователя. Не обязательный +## # Параметры авторизации, открытый пароль или тип хеша. Не обязательный +## # Не зашифрованный пароль +## sha256 # Использовать зашифрованный пароль SHA256, применять только совместно с +## sha512 # Использовать зашифрованный пароль SHA512, применять только совместно с +## # Параметры авторизации, не зашифрованный или зашифрованный пароль 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[]=enable|disable::@,...,@ @@ -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 } diff --git a/ublinux/rc.preinit.d/13-release b/ublinux/rc.preinit.d/13-release index 9f58396..5fa3e16 100755 --- a/ublinux/rc.preinit.d/13-release +++ b/ublinux/rc.preinit.d/13-release @@ -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 diff --git a/ublinux/rc.preinit.d/24-logging b/ublinux/rc.preinit.d/24-logging index a6005aa..386e8f6 100755 --- a/ublinux/rc.preinit.d/24-logging +++ b/ublinux/rc.preinit.d/24-logging @@ -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[@]}") diff --git a/ublinux/rc.preinit/10-accounts b/ublinux/rc.preinit/10-accounts index 1a096e6..03b0623 100755 --- a/ublinux/rc.preinit/10-accounts +++ b/ublinux/rc.preinit/10-accounts @@ -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}" diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 1b003a8..d04c511 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -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[]=,,...,;;;disable ## # Произвольное имя репозитория. Обязательный -## # По умолчанию включены системные репозитории, имена: core,extra,community,multilib,ublinux,modules +## # Имена системных репозиториев: core,extra,community,multilib,modules ## # Полный URL-адрес места, где можно найти базу данных, пакеты и подписи (если доступны) для этого репозитория. Обязательный ## # Возможно указать несколько, через запятую (,) +## # Символ $ обязательно экранировать \$ ## # Если указан доступный файл, то подключить как дополнительный файл расширения конфигурации (Include = ) ## 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=,..., -## # Подключенное имя репозитория, например: core,extra,community,multilib,ublinux,modules -## all # Если name_repo=all, то опубликовать все подключенные репозитории -## REPOPUBLIC_NET=all -## REPOPUBLIC_NET=modules - -## Опубликовать локальный репозиторий в виде локального WEB ресурса -## REPOPUBLIC_WEB[]=enable|disable,listing:::: -## # Путь до каталога репозитория, который будет опубликован -## enable # Включить публикацию -## disable # Выключить публикацию -## listing # Включить WEB обозреватель файлов. Не обязятельный -## # Порт по которому доступен репозиторий. По умолчанию: 8080. Не обязательный -## # Параметры авторизации, имя пользователя. Не обязательный -## # Параметры авторизации, открытый пароль или тип хеша. Не обязательный -## password # Не зашифрованный пароль -## sha256 # Использовать зашифрованный пароль SHA256 -## sha512 # Использовать зашифрованный пароль SHA512 -## # Параметры авторизации, зашифрованный пароль SHA256 или SHA512. Не обязательный -## REPOPUBLIC_WEB[/home/myrepo]=enable - -## Опубликовать ленивое зеркало подключенных репозиториев в виде локального WEB ресурса. +## Опубликовать локальный репозиторий в локальной сети и подключиться к сети распределённых репозиториев +## При установке пакета пакет ищется в распределённой сети репозиториев и устанавливается самой последней доступной версией +## REPOPUBLIC_NET=disable|no|none|enable|yes,db,,..., +## disable|no|none # Отключить все репозитории от сети распределённых репозиториев +## enable|yes # Подключить все репозитории к сети распределённых репозиториев +## db # Получать БД пакетов pacman от сети распределённых репозиториев +## # Подключенное имя репозитория, например: core,extra,community,multilib,modules +## REPOPUBLIC_NET=enable,db +## REPOPUBLIC_NET=db,community,modules + +## Опубликовать хранилище или репозиторий в виде локального WEB ресурса +## Если необходимо опубликовать выборочные репозитории, то создать новый каталог хранилища в который переместить симлинки выбранных репозиториев. Опубликовать новый каталог хранилища. +## REPOPUBLIC_WEB[[:]]=enable|yes|disable|no|none:listing:::: +## # Путь до каталога хранилища, который будет опубликован +## :repo1,repo2 # Путь до каталога хранилища и выбранные репозитории из хранилища которые будут опубликованы +## enable|yes # Включить публикацию +## disable|no|none # Выключить публикацию +## listing # Включить WEB обозреватель файлов. Не обязятельный +## # Порт по которому доступен репозиторий. По умолчанию: 8080. Не обязательный +## # Параметры авторизации, имя пользователя. Не обязательный +## # Параметры авторизации, открытый пароль или тип хеша. Не обязательный +## # Не зашифрованный пароль +## sha256 # Использовать зашифрованный пароль SHA256, применять только совместно с +## sha512 # Использовать зашифрованный пароль SHA512, применять только совместно с +## # Параметры авторизации, не зашифрованный или зашифрованный пароль 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[]=enable|disable::@,...,@ ## # Путь до каталога файлов кеша, если не указан, то по умолчанию: /mnt/livedata/ublinux-data/repopublic_cache @@ -402,7 +416,7 @@ SERVICES_ENABLE=dbus-broker,NetworkManager,sshd,swapspace,systemd-timesyncd,cups ## Настройка автообновления системы ## AUTOUPDATE=enable | :: -## enable # Включает автообновление с параметрами modsys:boot:core,extra,community,multilib,ublinux,modules +## enable # Включает автообновление с параметрами modsys:boot:core,extra,community,multilib,modules ## # Режимы обновления ## *modsys # Вначале обновлять все модули и после систему ## module # Обновлять только модули @@ -412,8 +426,14 @@ SERVICES_ENABLE=dbus-broker,NetworkManager,sshd,swapspace,systemd-timesyncd,cups ## 12h # Каждые 12 часов ## 7d # Каждые 7 дней ## 1m # Один раз в месяц -## # Имена репозиториев с которых будет происходить обновление. Если не указано, то по умолчанию: core,extra,community,multilib,ublinux,modules +## # Имена репозиториев с которых будет происходить обновление. Репозитории из списка по умолчанию или параметра REPOSITORY +## # Если не указано, то по умолчанию: core,extra,community,multilib,modules ## AUTOUPDATE=enable +## +## Врямя проведения последнего обновления +## AUTOUPDATE_TIMESTAMP= +## # Дата и время, в формате: 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[ ]=,, +## ACCESS_DENIED_EXEC[,,]=,, ## Find path: # Пути поиска указанных файлов, можно использовать разделитель: пробел, запятая, точка с запятой ## # Если пусто и не задан [], то будут выбраны пути поиска ="/usr/bin /usr/local/bin /usr/local/sbin /home" -## # Путь до каталога поиска /path/subpath,/path/*/subpath. Если в имени пути используется пробел, то необходимо путь обрамить \" +## # Путь до каталога поиска /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[,]=,