You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ublinux-init/ublinux/rc.local.d/43-repository

156 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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 -rdf $(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