|
|
#!/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[<name_repo>]=disable | <siglevel>:<usage>:<server_path_1>,<server_path_2>,...,<server_path_n>
|
|
|
## <name_repo> # Произвольное имя репозитория. Обязательный
|
|
|
## disable # Отключить отдин из репозиториев по умолчанию: core,extra,community,multilib,ublinux,modules
|
|
|
## <siglevel> # Уровень проверки подписи репозитория, можно выбрать одну из основных и вторую из дополнительных, разделитель запятая. Не обязательный
|
|
|
## # Последовательность имеет значение, т.к. накладываются правила каскадно. По умолчанию: Required,DatabaseOptional
|
|
|
## Never # Проверка подписи выполняться не будет. Основная
|
|
|
## PackageNever # Только для пакетов. Дополнительная
|
|
|
## DatabaseNever # Только для базы данных. Дополнительная
|
|
|
## Optional # Подписи будут проверяться при их наличии, но неподписанные базы данных и пакеты также будут приниматься. Основная
|
|
|
## PackageOptional # Только для пакетов. Дополнительная
|
|
|
## *DatabaseOptional # Только для базы данных. Дополнительная
|
|
|
## *Required # Подписи будут необходимы для всех пакетов и баз данных. Основная
|
|
|
## PackageRequired # Только для пакетов. Дополнительная
|
|
|
## DatabaseRequired # Только для базы данных. Дополнительная
|
|
|
## TrustedOnly # Если подпись проверяется для пакетов и базы, она должна находиться в связке ключей и быть полностью доверенной; маргинальное доверие не применимо
|
|
|
## PackageTrustedOnly # Если подпись проверяется только для пакетов
|
|
|
## DatabaseTrustedOnly # Если подпись проверяется только для базы данных
|
|
|
## TrustAll # Если подпись проверена, она должна находиться в связке ключей, но ей не требуется назначать уровень доверия (например, неизвестное или предельное доверие)
|
|
|
## PackageTrustAll # Если подпись проверена только для пакетов
|
|
|
## DatabaseTrustAll # Если подпись проверена только для базы данных
|
|
|
## <usage> # Уровень использования этого репозитория. Не обязательный
|
|
|
## *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
|
|
|
}
|
|
|
|
|
|
## Опубликовать локальный репозиторий в локальной сети, подключиться к сети распределённых репозиториев.
|
|
|
## При установке пакета пакет ищется в распределённой сети репозиториев и устанавливается самой последней доступной версией.
|
|
|
## 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
|
|
|
}
|
|
|
|
|
|
## Опубликовать локальный репозиторий в виде локального WEB ресурса
|
|
|
## REPOPUBLIC_WEB[<path>]=enable|disable,listing:<port>:<auth_name>:<auth_pass>:<auth_hash>
|
|
|
## <path> # Путь до каталога репозитория, который будет опубликован
|
|
|
## enable # Включить публикацию
|
|
|
## disable # Выключить публикацию
|
|
|
## 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
|
|
|
}
|
|
|
|
|
|
## Опубликовать ленивое зеркало подключенных репозиториев в виде локального 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
|
|
|
## enable # Включить публикацию
|
|
|
## disable # Выключить публикацию
|
|
|
## <port> # Порт по которому доступен репозиторий. По умолчанию: 8080. Не обязательный
|
|
|
##
|
|
|
## <server_name> # Произвольное имя репозитория
|
|
|
## <server_url> # Полный адрес репозитория URL или файл
|
|
|
## # Если не указано <server_name>@<server_url>, то по умолчанию системные /etc/pacman.d/mirrorlist
|
|
|
## # Возможно указать несколько, через запятую.
|
|
|
## <file> # Файл списка зеркал, подключается как список зеркал с синтаксисом /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 | <mode>:<interval>:<repository>
|
|
|
## enable # Включает автообновление с параметрами modsys:boot:core,extra,community,multilib,ublinux,modules
|
|
|
## <mode> # Режимы обновления
|
|
|
## *modsys # Вначале обновлять все модули и после систему
|
|
|
## module # Обновлять только модули
|
|
|
## system # Обновлять всё в порядке указанных репозиториев
|
|
|
## <interval> # Интервал обновления
|
|
|
## *boot # Каждую загрузку
|
|
|
## 12h # Каждые 12 часов
|
|
|
## 7d # Каждые 7 дней
|
|
|
## 1m # Один раз в месяц
|
|
|
## <repository> # Имена репозиториев с которых будет происходить обновление. Если не указано, то по умолчанию: core,extra,community,multilib,ublinux,modules
|
|
|
## AUTOUPDATE=enable
|
|
|
exec_autoupdate(){
|
|
|
true
|
|
|
}
|
|
|
|
|
|
## Удалить старые версии дубликато пакетов в базе pacman
|
|
|
exec_remove_duplicated_pacman(){
|
|
|
PATH_PACMAN_DB="/var/lib/pacman/local/"
|
|
|
# Из всех дубликатов приложений в базе pacman удалить старые версии
|
|
|
cd ${PATH_PACMAN_DB}; rm -rdfv $(ls -1vr ${PATH_PACMAN_DB} | sed -En 's/((.*)-([^-]+)-([^-]+))/\2|\1/p' | awk -F '|' 'prefixes[$1]++ {print $2}') #'
|
|
|
|
|
|
# Ситуация для которой нет обработки
|
|
|
# Если в полном сохранении пользователь обновиляет систему и в очередное обновление обновил только модули, то изменения останутся старыми, т.к. /changes/ имеет верхний слой
|
|
|
# т.е. по факту прилложения останутся старыми. Новые файлы из модуля будут видны, и далее могут не дать обновить на новые пакеты. Поэтому старые пакеты из базы pacman удаляем
|
|
|
# т.е. в базе pacman будут новые пакеты, а по факту файлы/бинарники старые
|
|
|
# Одно из решений - после установки модулей проверять какие пакеты в базе дублируются и эти файлы этих приложений из модуля переписать в корень
|
|
|
#sudo rsync -hrlptgoDHAXEU --existing --update --exclude ".wh.*" --progress /memory/bundles/010-core-2204-2-x86_64.ubm/ /
|
|
|
}
|
|
|
|
|
|
################
|
|
|
##### 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
|
|
|
FUNCTION=
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
[[ -z ${1} ]] || { declare -f ${1} &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1}'"; }
|
|
|
shift
|
|
|
done
|
|
|
eval ${FUNCTION#*; }
|
|
|
fi
|