- Добавлено автоматическое определение архитектуры системы
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Pre-commit / pre-commit (push) Failing after 4m59s
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Pre-commit / pre-commit (push) Failing after 4m59s
				
			- Использование API Gitea вместо парсинга HTML - Добавлен fallback на парсинг HTML если API недоступен - Улучшена обработка ошибок при загрузке - Добавлена проверка целостности загруженного файла - Использование trap для гарантированной очистки временных файлов - Исправлена логика выбора файлов для разных архитектур - Добавлен вывод размера загруженного пакета"
This commit is contained in:
		| @@ -52,6 +52,17 @@ if ! command -v curl &>/dev/null; then | |||||||
|   error "Этот скрипт требует команду curl. Пожалуйста, установите её и запустите снова." |   error "Этот скрипт требует команду curl. Пожалуйста, установите её и запустите снова." | ||||||
| fi | 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="" | pkgFormat="" | ||||||
| pkgMgr="" | pkgMgr="" | ||||||
| if command -v pacman &>/dev/null; then | if command -v pacman &>/dev/null; then | ||||||
| @@ -88,25 +99,51 @@ else | |||||||
| fi | fi | ||||||
|  |  | ||||||
| if [ -z "$noPkgMgr" ]; then | if [ -z "$noPkgMgr" ]; then | ||||||
|   info "Получение списка файлов с https://gitea.plemya-x.ru/Plemya-x/ALR/releases" |   info "Получение списка релизов через API Gitea" | ||||||
|  |  | ||||||
|   # Изменено URL и регулярное выражение для списка файлов |   # Используем API для получения последнего релиза | ||||||
|  |   releases=$(curl -s "https://gitea.plemya-x.ru/api/v1/repos/Plemya-x/ALR/releases") | ||||||
|  |  | ||||||
|  |   if [ -z "$releases" ] || [ "$releases" = "null" ]; then | ||||||
|  |     error "Не удалось получить список релизов. Проверьте соединение с интернетом." | ||||||
|  |   fi | ||||||
|  |  | ||||||
|  |   # Получаем 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) |     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 | ||||||
|  |  | ||||||
|   # Извлечение списка файлов из HTML |   if [ -z "$fileList" ]; then | ||||||
|   fileList=$(echo "$pageContent" | grep -oP '(?<=href=").*?(?=")' | grep -E 'alr-bin.*\.(pkg.tar.zst|rpm|deb)') |     warn "Не найдены готовые пакеты в последнем релизе" | ||||||
|  |     warn "Возможно, для вашего дистрибутива нужно собрать пакет из исходников" | ||||||
|  |     warn "Инструкции по сборке: https://gitea.plemya-x.ru/Plemya-x/ALR" | ||||||
|  |     error "Не удалось получить список пакетов для загрузки" | ||||||
|  |   fi | ||||||
|  |  | ||||||
|   echo "Полученный список файлов:" |   info "Получен список файлов релиза" | ||||||
|   echo "$fileList" |  | ||||||
|  |  | ||||||
|   if [ "$pkgMgr" == "pacman" ]; then |   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 |   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 |   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 |   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 |   else | ||||||
|       error "Не поддерживаемый менеджер пакетов для автоматической установки" |       error "Не поддерживаемый менеджер пакетов для автоматической установки" | ||||||
|   fi |   fi | ||||||
| @@ -119,18 +156,32 @@ if [ -z "$noPkgMgr" ]; then | |||||||
|  |  | ||||||
|   fname="$(mktemp -u -p /tmp "alr.XXXXXXXXXX").${pkgFormat}" |   fname="$(mktemp -u -p /tmp "alr.XXXXXXXXXX").${pkgFormat}" | ||||||
|  |  | ||||||
|   info "Загрузка пакета ALR" |   # Настраиваем trap для очистки временного файла | ||||||
|   curl -o $fname -L "$latestFile" |   trap "rm -f $fname" EXIT | ||||||
|  |  | ||||||
|   if [ ! -f "$fname" ]; then |   info "Загрузка пакета ALR" | ||||||
|       error "Ошибка загрузки пакета ALR" |   info "URL: $latestFile" | ||||||
|  |  | ||||||
|  |   # Загружаем с проверкой кода возврата | ||||||
|  |   if ! curl -f -L -o "$fname" "$latestFile"; then | ||||||
|  |       error "Ошибка загрузки пакета ALR. Проверьте подключение к интернету." | ||||||
|   fi |   fi | ||||||
|  |  | ||||||
|  |   # Проверяем что файл не пустой | ||||||
|  |   if [ ! -s "$fname" ]; then | ||||||
|  |       error "Загруженный файл пустой или поврежден" | ||||||
|  |   fi | ||||||
|  |  | ||||||
|  |   # Показываем размер загруженного файла | ||||||
|  |   fileSize=$(du -h "$fname" | cut -f1) | ||||||
|  |   info "Загружен пакет размером $fileSize" | ||||||
|  |  | ||||||
|   info "Установка пакета ALR" |   info "Установка пакета ALR" | ||||||
|   installPkg "$pkgMgr" "$fname" |   installPkg "$pkgMgr" "$fname" | ||||||
|  |  | ||||||
|   info "Очистка" |   info "Очистка" | ||||||
|   rm "$fname" |   rm -f "$fname" | ||||||
|  |   trap - EXIT | ||||||
|  |  | ||||||
|   info "Готово!" |   info "Готово!" | ||||||
| else | else | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user