From bad225c6b13cd37763e9e65a762bd6200c975051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=28=D0=A5?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D1=8B=D1=87=D0=AA=29=20=D0=A5=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=BE=D0=B2?= Date: Wed, 27 Aug 2025 00:36:58 +0300 Subject: [PATCH] =?UTF-8?q?-=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BC=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B5=20=D0=BE=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B0=D1=80=D1=85?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BA=D1=82=D1=83=D1=80=D1=8B=20=D1=81=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=B5=D0=BC=D1=8B=20-=20=D0=98=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20API=20?= =?UTF-8?q?Gitea=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D1=81=D0=B8=D0=BD=D0=B3=D0=B0=20HTML=20-=20=D0=94=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20fallback=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=20HTML=20=D0=B5?= =?UTF-8?q?=D1=81=D0=BB=D0=B8=20API=20=D0=BD=D0=B5=D0=B4=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=83=D0=BF=D0=B5=D0=BD=20-=20=D0=A3=D0=BB=D1=83=D1=87=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B5?= =?UTF-8?q?=20-=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20=D1=86?= =?UTF-8?q?=D0=B5=D0=BB=D0=BE=D1=81=D1=82=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B6=D0=B5=D0=BD=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=20-=20=D0=98?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20trap=20=D0=B4=D0=BB=D1=8F=20=D0=B3=D0=B0=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BE=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20-=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B0=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D0=BD=D1=8B=D1=85=20=D0=B0=D1=80=D1=85=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D1=83=D1=80=20-=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=D0=B0=20=D0=B7=D0=B0=D0=B3?= =?UTF-8?q?=D1=80=D1=83=D0=B6=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BA=D0=B5=D1=82=D0=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/install.sh | 83 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 16 deletions(-) diff --git a/scripts/install.sh b/scripts/install.sh index 2528408..dc54478 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -52,6 +52,17 @@ if ! command -v curl &>/dev/null; then error "Этот скрипт требует команду curl. Пожалуйста, установите её и запустите снова." fi +# Определение архитектуры системы +arch=$(uname -m) +case $arch in + x86_64) debArch="amd64"; rpmArch="x86_64" ;; + aarch64) debArch="arm64"; rpmArch="aarch64" ;; + armv7l) debArch="armhf"; rpmArch="armv7hl" ;; + *) error "Неподдерживаемая архитектура: $arch" ;; +esac + +info "Обнаружена архитектура: $arch" + pkgFormat="" pkgMgr="" if command -v pacman &>/dev/null; then @@ -88,25 +99,51 @@ else fi if [ -z "$noPkgMgr" ]; then - info "Получение списка файлов с https://gitea.plemya-x.ru/Plemya-x/ALR/releases" + info "Получение списка релизов через API Gitea" - # Изменено URL и регулярное выражение для списка файлов - pageContent=$(curl -s https://gitea.plemya-x.ru/Plemya-x/ALR/releases) + # Используем API для получения последнего релиза + releases=$(curl -s "https://gitea.plemya-x.ru/api/v1/repos/Plemya-x/ALR/releases") - # Извлечение списка файлов из HTML - fileList=$(echo "$pageContent" | grep -oP '(?<=href=").*?(?=")' | grep -E 'alr-bin.*\.(pkg.tar.zst|rpm|deb)') + if [ -z "$releases" ] || [ "$releases" = "null" ]; then + error "Не удалось получить список релизов. Проверьте соединение с интернетом." + fi - echo "Полученный список файлов:" - echo "$fileList" + # Получаем URL последнего релиза + latestReleaseUrl=$(echo "$releases" | grep -o '"browser_download_url":"[^"]*"' | head -1 | cut -d'"' -f4) + + if [ -z "$latestReleaseUrl" ]; then + # Fallback на парсинг HTML если API не работает + warn "API не доступен, пробуем получить список через HTML" + pageContent=$(curl -s https://gitea.plemya-x.ru/Plemya-x/ALR/releases) + fileList=$(echo "$pageContent" | grep -oP '(?<=href=")[^"]*alr-bin[^"]*\.(pkg\.tar\.zst|rpm|deb)' | sed 's|^|https://gitea.plemya-x.ru|') + else + # Получаем список файлов из API + latestReleaseId=$(echo "$releases" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) + assets=$(curl -s "https://gitea.plemya-x.ru/api/v1/repos/Plemya-x/ALR/releases/$latestReleaseId/assets") + # Фильтруем только пакеты, исключая tar.gz архивы + fileList=$(echo "$assets" | grep -o '"browser_download_url":"[^"]*"' | cut -d'"' -f4 | grep -v '\.tar\.gz$') + fi + + if [ -z "$fileList" ]; then + warn "Не найдены готовые пакеты в последнем релизе" + warn "Возможно, для вашего дистрибутива нужно собрать пакет из исходников" + warn "Инструкции по сборке: https://gitea.plemya-x.ru/Plemya-x/ALR" + error "Не удалось получить список пакетов для загрузки" + fi + + info "Получен список файлов релиза" if [ "$pkgMgr" == "pacman" ]; then - latestFile=$(echo "$fileList" | grep -E 'alr-bin-.*\.pkg\.tar\.zst' | sort -V | tail -n 1) + latestFile=$(echo "$fileList" | grep -E "alr-bin-.*\.pkg\.tar\.zst" | sort -V | tail -n 1) elif [ "$pkgMgr" == "apt" ]; then - latestFile=$(echo "$fileList" | grep -E 'alr-bin-.*\.amd64\.deb' | sort -V | tail -n 1) + latestFile=$(echo "$fileList" | grep -E "alr-bin-.*\.${debArch}\.deb" | sort -V | tail -n 1) elif [[ "$pkgMgr" == "dnf" || "$pkgMgr" == "yum" || "$pkgMgr" == "zypper" ]]; then - latestFile=$(printf "%s\n" "${fileList[@]}" | grep -E 'alr-bin-.*\.x86_64\.rpm' | grep -v 'alt[0-9]*' | sort -V | tail -n 1) + latestFile=$(echo "$fileList" | grep -E "alr-bin-.*\.${rpmArch}\.rpm" | grep -v 'alt[0-9]*' | sort -V | tail -n 1) elif [ "$pkgMgr" == "apt-get" ]; then - latestFile=$(echo "$fileList" | grep -E 'alr-bin-.*-alt[0-9]+\.x86_64\.rpm' | sort -V | tail -n 1) + # ALT Linux использует RPM с особой маркировкой + latestFile=$(echo "$fileList" | grep -E "alr-bin-.*-alt[0-9]+\.${rpmArch}\.rpm" | sort -V | tail -n 1) + elif [ "$pkgMgr" == "apk" ]; then + latestFile=$(echo "$fileList" | grep -E "alr-bin-.*\.apk" | sort -V | tail -n 1) else error "Не поддерживаемый менеджер пакетов для автоматической установки" fi @@ -119,18 +156,32 @@ if [ -z "$noPkgMgr" ]; then fname="$(mktemp -u -p /tmp "alr.XXXXXXXXXX").${pkgFormat}" - info "Загрузка пакета ALR" - curl -o $fname -L "$latestFile" + # Настраиваем trap для очистки временного файла + trap "rm -f $fname" EXIT - if [ ! -f "$fname" ]; then - error "Ошибка загрузки пакета ALR" + info "Загрузка пакета ALR" + info "URL: $latestFile" + + # Загружаем с проверкой кода возврата + if ! curl -f -L -o "$fname" "$latestFile"; then + error "Ошибка загрузки пакета ALR. Проверьте подключение к интернету." fi + # Проверяем что файл не пустой + if [ ! -s "$fname" ]; then + error "Загруженный файл пустой или поврежден" + fi + + # Показываем размер загруженного файла + fileSize=$(du -h "$fname" | cut -f1) + info "Загружен пакет размером $fileSize" + info "Установка пакета ALR" installPkg "$pkgMgr" "$fname" info "Очистка" - rm "$fname" + rm -f "$fname" + trap - EXIT info "Готово!" else