From b553f9396ec4e32fee4fab138f0f0451527f47b5 Mon Sep 17 00:00:00 2001 From: asmeron Date: Tue, 30 Jan 2024 15:33:12 +0600 Subject: [PATCH] Fix 10-accounts --- ublinux/functions | 1 + ublinux/rc.local.d/43-repository | 139 +++++++++++++++++++++++++++++++ ublinux/rc.preinit/10-accounts | 23 ++++- 3 files changed, 159 insertions(+), 4 deletions(-) create mode 100755 ublinux/rc.local.d/43-repository diff --git a/ublinux/functions b/ublinux/functions index 6cf45a9..695e324 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -74,6 +74,7 @@ return_hash_password(){ # Remove user home directories. Used ubl-settings-usergroup # $1 # Users name a comma separated list +# TODO: Запросить хомяк по умолчанию из /etc/default/useradd HOME= remove_userhome(){ local LIST_USERNAME="$@" [[ ${LIST_USERNAME} != "" ]] || return 1 diff --git a/ublinux/rc.local.d/43-repository b/ublinux/rc.local.d/43-repository new file mode 100755 index 0000000..2d26f1c --- /dev/null +++ b/ublinux/rc.local.d/43-repository @@ -0,0 +1,139 @@ +#!/usr/bin/env bash + +ENABLED=yes +[[ ${ENABLED} == "yes" ]] || exit 0 +DEBUGMODE=no + +SOURCE=/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0 +SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null +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 # Подписи будут проверяться при их наличии, но неподписанные базы данных и пакеты также будут приниматься. Основная +## PackageOptional # Только для пакетов. Дополнительная +## *DatabaseOptional # Только для базы данных. Дополнительная +## *Required # Подписи будут необходимы для всех пакетов и баз данных. Основная +## PackageRequired # Только для пакетов. Дополнительная +## DatabaseRequired # Только для базы данных. Дополнительная +## TrustedOnly # Если подпись проверяется для пакетов и базы, она должна находиться в связке ключей и быть полностью доверенной; маргинальное доверие не применимо +## PackageTrustedOnly # Если подпись проверяется только для пакетов +## DatabaseTrustedOnly # Если подпись проверяется только для базы данных +## 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 +} + +## Опубликовать локальный репозиторий в локальной сети, подключиться к сети распределённых репозиториев. +## При установке пакета пакет ищется в распределённой сети репозиториев и устанавливается самой последней доступной версией. +## REPOPUBLIC_NET=,..., +## # Подключенное имя репозитория, например: core,extra,community,multilib,ublinux,modules +## all # Если name_repo=all, то опубликовать все подключенные репозитории +## REPOPUBLIC_NET=all +## REPOPUBLIC_NET=modules +exec_repopublic_net(){ + true +} + +## Опубликовать локальный репозиторий в виде локального 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 +} + +## Опубликовать ленивое зеркало подключенных репозиториев в виде локального WEB ресурса. +## Получая запрос от пользователя, загружает с удалённого репозитория пакет и сохраняет в кеше передавая его пользователю. +## REPOPUBLIC_CACHE[]=enable|disable::@,...,@ +## # Путь до каталога файлов кеша, если не указан, то по умолчанию: /mnt/livedata/ublinux-data/repopublic_cache +## enable # Включить публикацию +## disable # Выключить публикацию +## # Порт по которому доступен репозиторий. По умолчанию: 8080. Не обязательный +## +## # Произвольное имя репозитория +## # Полный адрес репозитория URL или файл +## # Если не указано @, то по умолчанию системные /etc/pacman.d/mirrorlist +## # Возможно указать несколько, через запятую. +## # Файл списка зеркал, подключается как список зеркал с синтаксисом /etc/pacman.d/mirrorlist +## # Важно: в подключенном списке не должно быть адреса текущего сервера +## http:// # URL префикс для репозитория на HTTP +## 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(){ + true +} + +## Настройка автообновления системы +## AUTOUPDATE=enable | :: +## enable # Включает автообновление с параметрами modsys:boot:core,extra,community,multilib,ublinux,modules +## # Режимы обновления +## *modsys # Вначале обновлять все модули и после систему +## module # Обновлять только модули +## system # Обновлять всё в порядке указанных репозиториев +## # Интервал обновления +## *boot # Каждую загрузку +## 12h # Каждые 12 часов +## 7d # Каждые 7 дней +## 1m # Один раз в месяц +## # Имена репозиториев с которых будет происходить обновление. Если не указано, то по умолчанию: core,extra,community,multilib,ublinux,modules +## AUTOUPDATE=enable +exec_autoupdate(){ + true +} + +################ +##### MAIN ##### +################ + + # Если файл подключен как ресурс с функциями, то выйти + return 0 2>/dev/null && return 0 + if [[ -z $@ ]]; then + while read -ru3 FUNCTION; do + $"${FUNCTION##* }" + done 3< <(declare -F | grep "declare -f exec_") + else + while [[ $# -gt 0 ]]; do + declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" && shift || { FUNCTION+=" '${1}'" && shift; } + done + eval ${FUNCTION#*; } + fi diff --git a/ublinux/rc.preinit/10-accounts b/ublinux/rc.preinit/10-accounts index b805f3f..94c2a25 100755 --- a/ublinux/rc.preinit/10-accounts +++ b/ublinux/rc.preinit/10-accounts @@ -186,6 +186,7 @@ exec_03_neededusers(){ if [[ -n ${PARAM} ]]; then [[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}" fi + # Если по умолчанию нет ни одного пользователя, то создаём администратора #[[ -z ${NEEDEDUSERS} ]] && NEEDEDUSERS="${DEFAULTUSER}:${ADMUID}:${DEFAULTPASSWD}:Administrator" [[ -z $(cmdline_value users) ]] || NEEDEDUSERS=$(cmdline_value users) [[ ${NOSECUREROOTPASSWD} == ${DEFAULTROOTPASSWD} ]] && ADDADM=yes @@ -534,8 +535,9 @@ exec_06_groupadd(){ [[ ${SELECT_OPTIONAL} == "x" ]] && unset SELECT_OPTIONAL [[ ${SELECT_PASSWORD} == @(""|"x") ]] && unset SELECT_PASSWORD [[ ${SELECT_PASSWORD} != @(""|'!*'|'!'|'*') ]] && SELECT_PASSWORD=$(return_hash_password hash ${HASHPASSWD} ${SELECT_PASSWORD}) - # Поиск имени и GID в шаблонах пользователей/групп systemd + # Поиск по имени в шаблонах пользователей/групп systemd [[ $(cat ${ROOTFS}/usr/share/ublinux-sysusers/*.sysusers) =~ ($'\n'|^)+'g'[[:blank:]]+"${SELECT_GROUP}"[[:blank:]]+([[:digit:]]+)[^$'\n']*($'\n'|$)+ ]] && FINDGROUP_ID=${BASH_REMATCH[2]} || unset FINDGROUP_ID + # Поиск по GID в шаблонах пользователей/групп systemd [[ -z ${FINDGROUP_ID} ]] \ && [[ $(cat ${ROOTFS}/usr/share/ublinux-sysusers/*.sysusers) =~ ($'\n'|^)+'g'[[:blank:]]+([^$'\n']+)[[:blank:]]+"${SELECT_GROUP}"[^$'\n']*($'\n'|$)+ ]] && FINDGROUP_NAME=${BASH_REMATCH[2]} || unset FINDGROUP_NAME [[ -n ${FINDGROUP_ID} ]] && SELECT_GID="${FINDGROUP_ID}" @@ -606,9 +608,22 @@ exec_06_groupadd(){ # Если пароли по умолчанию, то firststart exec_99_firststart(){ #echo "exec_99_firststart" - if grep -q "^root:${DEFAULTROOTPASSWD}:" ${ROOTFS}/etc/shadow \ - && grep -q "^$(grep ".*:x:${ADMUID}:" ${ROOTFS}/etc/passwd | cut -d: -f1):${DEFAULTPASSWD}:" ${ROOTFS}/etc/shadow; then - grep -q "^FIRSTSTART$" ${SYSCONF}/config 2>/dev/null || echo "FIRSTSTART=yes" >> ${SYSCONF}/config + [[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift + [[ -n ${COMMAND} ]] || COMMAND= + local PARAM="$@" + if [[ -n ${PARAM} ]]; then + local FIRSTSTART= + [[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}" + fi + if [[ ${COMMAND} == "" ]]; then + if grep -q "^root:${DEFAULTROOTPASSWD}:" ${ROOTFS}/etc/shadow \ + && grep -q "^$(grep ".*:x:${ADMUID}:" ${ROOTFS}/etc/passwd | cut -d: -f1):${DEFAULTPASSWD}:" ${ROOTFS}/etc/shadow; then + grep -q "^FIRSTSTART$" ${SYSCONF}/config 2>/dev/null || echo "FIRSTSTART=yes" >> ${SYSCONF}/config + fi + elif [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ -n ${FIRSTSTART} ]]; then + [[ $(cat ${SYSCONF}/config 2>/dev/null) =~ ($'\n'|^)+'FIRSTSTART=' ]] || echo "FIRSTSTART=yes" >> ${SYSCONF}/config + elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then + sed "/FIRSTSTART=/d" -i ${SYSCONF}/config fi }