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

368 lines
27 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=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> # Произвольное имя репозитория. Обязательный
## # Имена системных репозиториев: 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 # Проверка подписи выполняться не будет. Основная
## PackageNever # Только для пакетов. Дополнительная
## DatabaseNever # Только для базы данных. Дополнительная
## Optional # Подписи будут проверяться при их наличии, но неподписанные базы данных и пакеты также будут приниматься. Основная
## PackageOptional # Только для пакетов. Дополнительная
## *DatabaseOptional # Только для базы данных. Дополнительная
## *Required # Подписи будут необходимы для всех пакетов и баз данных. Основная
## PackageRequired # Только для пакетов. Дополнительная
## DatabaseRequired # Только для базы данных. Дополнительная
## TrustedOnly # Если подпись проверяется для пакетов и базы, она должна находиться в связке ключей и быть полностью доверенной; маргинальное доверие не применимо
## PackageTrustedOnly # Если подпись проверяется только для пакетов
## DatabaseTrustedOnly # Если подпись проверяется только для базы данных
## TrustAll # Если подпись проверена, она должна находиться в связке ключей, но ей не требуется назначать уровень доверия (например, неизвестное или предельное доверие)
## PackageTrustAll # Если подпись проверена только для пакетов
## DatabaseTrustAll # Если подпись проверена только для базы данных
## <usage> # Уровень использования этого репозитория. Не обязательный
## *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
}
## 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
}
## 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, применять только совместно с <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>
## <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_04_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