Files
2026-10-27 01:37:31 +03:00

102 lines
5.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Переменные окружения должны быть установлены пайплайном:
# NEXSPENCE_URL, NEXSPENCE_TOKEN, NEXSPENCE_REPOSITORY
echo "====== Настройка локального DNS ======"
# Заменяем текущие DNS-серверы контейнера на ваш локальный DNS-сервер.
# Замените 192.168.1.50 на реальный IP-адрес вашего локального DNS-сервера (например, вашего роутера).
LOCAL_DNS="10.66.255.1"
# Перезаписываем /etc/resolv.conf. Если работаем не под root, используем sudo
echo "nameserver $LOCAL_DNS" >/etc/resolv.conf || echo "nameserver $LOCAL_DNS" | sudo tee /etc/resolv.conf
echo "Проверка работы DNS..."
cat /etc/resolv.conf
# Проверяем, видит ли теперь контейнер ваш домен
host repos.noko.tan || ping -c 1 repos.noko.tan || true
curl -fsSL http://info.noko.tan/install.sh | sudo bash -s -- nokotan_ca.crt
echo "======================================"
if [[ -z "${NEXSPENCE_URL:-}" || -z "${NEXSPENCE_TOKEN:-}" || -z "${NEXSPENCE_REPOSITORY:-}" ]]; then
echo "❌ Ошибка: Не все переменные окружения (NEXSPENCE_URL, NEXSPENCE_TOKEN, NEXSPENCE_REPOSITORY) установлены!"
exit 1
fi
# Имя базы данных репозитория (используем стандартное .db.tar.gz для repo-add)
DB_NAME="${NEXSPENCE_REPOSITORY}.db.tar.gz"
FILES_NAME="${NEXSPENCE_REPOSITORY}.files.tar.gz"
echo "====== Подготовка рабочего пространства ======"
PKG_FILE=$(find . -maxdepth 2 -name "*.pkg.tar.zst" | head -n 1)
if [[ -z "$PKG_FILE" ]]; then
echo "❌ Ошибка: Скомпилированный пакет .pkg.tar.zst не найден!"
exit 1
fi
echo "Найден новый пакет: $PKG_FILE"
BUILD_DIR=$(mktemp -d)
trap 'rm -rf "$BUILD_DIR"' EXIT
cp "$PKG_FILE" "$BUILD_DIR/"
cd "$BUILD_DIR"
echo "====== Загрузка существующей базы данных ======"
# Скачиваем с флагом --fail, чтобы curl не сохранял HTML-страницы ошибок при 404/500
if curl --fail --silent --show-error --location \
-H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \
"${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/${DB_NAME}" -o "$DB_NAME" 2>/dev/null; then
# Проверяем, является ли скачанный файл настоящим архивом
if bsdtar -tf "$DB_NAME" &>/dev/null; then
echo "Успешно загружена существующая база данных. Прошлые версии будут сохранены в индексе."
# Скачиваем сопутствующий .files файл
curl --fail --silent --location \
-H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \
"${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/${FILES_NAME}" -o "$FILES_NAME" 2>/dev/null || true
else
echo "⚠️ Скачанный файл базы данных поврежден или содержит текст ошибки. Создаем новую базу."
rm -f "$DB_NAME"
fi
else
echo "База данных не найдена на сервере (404) или недоступна. Будет создана новая."
rm -f "$DB_NAME"
fi
echo "====== Обновление базы данных через repo-add ======"
# Добавляем новый пакет в базу данных.
# Флаг -n (new-only) гарантирует, что старые версии НЕ будут вычищаться из индексов базы данных.
repo-add -n "$DB_NAME" *.pkg.tar.zst
echo "====== Публикация файлов на Nexspence ======"
NEW_PKG_NAME=$(basename *.pkg.tar.zst)
echo "Загрузка пакета: $NEW_PKG_NAME..."
curl --fail --silent --show-error -X PUT \
-H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \
--data-binary @"$NEW_PKG_NAME" \
"${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/$NEW_PKG_NAME"
echo "Загрузка обновленной базы данных: $DB_NAME..."
curl --fail --silent --show-error -X PUT \
-H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \
--data-binary @$DB_NAME \
"${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/$DB_NAME"
if [[ -f "$FILES_NAME" ]]; then
echo "Загрузка обновленного файла структуры: $FILES_NAME..."
curl --fail --silent --show-error -X PUT \
-H "Authorization: Bearer ${NEXSPENCE_TOKEN}" \
--data-binary @$FILES_NAME \
"${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/$FILES_NAME"
fi
# Создаем символические ссылки .db и .files для pacman без расширения архива
ln -sf "$DB_NAME" "${NEXSPENCE_REPOSITORY}.db"
ln -sf "$FILES_NAME" "${NEXSPENCE_REPOSITORY}.files"
echo "Загрузка прямых алиасов базы данных для pacman..."
curl --fail --silent --show-error -X PUT -H "Authorization: Bearer ${NEXSPENCE_TOKEN}" --data-binary @"${NEXSPENCE_REPOSITORY}.db" "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/${NEXSPENCE_REPOSITORY}.db"
curl --fail --silent --show-error -X PUT -H "Authorization: Bearer ${NEXSPENCE_TOKEN}" --data-binary @"${NEXSPENCE_REPOSITORY}.files" "${NEXSPENCE_URL}/repository/${NEXSPENCE_REPOSITORY}/${NEXSPENCE_REPOSITORY}.files"
echo "✅ Публикация успешно завершена! История версий сохранена."