diff --git a/install.sh b/install.sh index 9838e67..dbd4549 100755 --- a/install.sh +++ b/install.sh @@ -1,19 +1,90 @@ #!/bin/sh # --- Настройки --- -GITEA_API="https://git.ownsrv.ru/api/v1/repos/yanistyle/podkop/releases/latest" +REPO_API="https://git.ownsrv.ru/api/v1/repos/yanistyle/podkop/releases" DOWNLOAD_DIR="/tmp/podkop" -TOKEN="YOUR_TOKEN_HERE" # <--- сюда твой Gitea токен COUNT=3 rm -rf "$DOWNLOAD_DIR" mkdir -p "$DOWNLOAD_DIR" -msg() { printf "\033[32;1m%s\033[0m\n" "$1"; } +msg() { + printf "\033[32;1m%s\033[0m\n" "$1" +} +# --- Проверка и установка зависимостей --- +install_dependencies() { + deps="curl jq wget" + for dep in $deps; do + if ! command -v $dep >/dev/null 2>&1; then + msg "$dep не найден. Пытаемся установить..." + opkg update + opkg install $dep || { msg "Не удалось установить $dep"; exit 1; } + fi + done +} + +# --- Проверка системы --- +check_system() { + MODEL=$(cat /tmp/sysinfo/model 2>/dev/null || echo "Unknown") + msg "Router model: $MODEL" + + openwrt_version=$(cat /etc/openwrt_release 2>/dev/null | grep DISTRIB_RELEASE | cut -d"'" -f2 | cut -d'.' -f1) + if [ "$openwrt_version" = "23" ]; then + msg "OpenWrt 23.05 не поддерживается начиная с podkop 0.5.0" + exit 1 + fi + + AVAILABLE_SPACE=$(df /overlay | awk 'NR==2 {print $4}') + REQUIRED_SPACE=15360 + if [ "$AVAILABLE_SPACE" -lt "$REQUIRED_SPACE" ]; then + msg "Error: Insufficient space in flash" + msg "Available: $((AVAILABLE_SPACE/1024))MB, Required: $((REQUIRED_SPACE/1024))MB" + exit 1 + fi + + if ! nslookup google.com >/dev/null 2>&1; then + msg "DNS not working" + exit 1 + fi + + if opkg list-installed | grep -q https-dns-proxy; then + msg "Сonflicting package detected: https-dns-proxy. Remove?" + while true; do + read -r -p '' DNSPROXY + case $DNSPROXY in + yes|y|Y) + opkg remove --force-depends luci-app-https-dns-proxy https-dns-proxy luci-i18n-https-dns-proxy* + break + ;; + *) + msg "Exit" + exit 1 + ;; + esac + done + fi +} + +# --- Проверка и обновление sing-box --- +sing_box() { + if ! opkg list-installed | grep -q "^sing-box"; then + return + fi + sing_box_version=$(sing-box version | head -n 1 | awk '{print $3}') + required_version="1.12.4" + if [ "$(echo -e "$sing_box_version\n$required_version" | sort -V | head -n 1)" != "$required_version" ]; then + msg "sing-box version $sing_box_version is older than required $required_version" + msg "Removing old version..." + opkg remove sing-box + fi +} + +# --- Основная логика --- main() { check_system sing_box + install_dependencies /usr/sbin/ntpd -q -p 194.190.168.1 -p 216.239.35.0 -p 216.239.35.4 -p 162.159.200.1 -p 162.159.200.123 @@ -22,50 +93,48 @@ main() { if [ -f "/etc/init.d/podkop" ]; then msg "Podkop is already installed. Upgraded..." else - msg "Installing podkop..." + msg "Installed podkop..." fi - download_packages - install_packages -} - -download_packages() { + # --- Получаем последний релиз из Gitea --- msg "Fetching latest release info from Gitea..." - RELEASE_JSON=$(wget -qO- --header="Authorization: token $TOKEN" "$GITEA_API") - - # Находим все .ipk ссылки - URLS=$(echo "$RELEASE_JSON" | grep -o 'https://[^"]*\.ipk') - - if [ -z "$URLS" ]; then - msg "No packages found in latest release" + LATEST_TAG=$(curl -s "$REPO_API" | jq -r '.[0].tag_name') + if [ -z "$LATEST_TAG" ] || [ "$LATEST_TAG" = "null" ]; then + msg "Не удалось получить последний релиз" exit 1 fi + msg "Последний релиз: $LATEST_TAG" - for url in $URLS; do - file=$(basename "$url") - filepath="$DOWNLOAD_DIR/$file" + # --- Получаем список всех assets --- + ASSETS=$(curl -s "$REPO_API" | jq -r '.[0].assets[].name') + + download_success=0 + for filename in $ASSETS; do + filepath="$DOWNLOAD_DIR/$filename" attempt=0 - while [ $attempt -lt $COUNT ]; do - msg "Downloading $file (attempt $((attempt+1)))..." - if wget -q -O "$filepath" "$url"; then - if [ -s "$filepath" ]; then - msg "$file successfully downloaded" - break - fi + msg "Download $filename (attempt $((attempt+1)))..." + wget -q -O "$filepath" "https://git.ownsrv.ru/yanistyle/podkop/releases/download/$LATEST_TAG/$filename" + if [ -s "$filepath" ]; then + msg "$filename successfully downloaded" + download_success=1 + break fi - msg "Download error $file. Retry..." + msg "Download error $filename. Retry..." rm -f "$filepath" attempt=$((attempt+1)) done - if [ $attempt -eq $COUNT ]; then - msg "Failed to download $file after $COUNT attempts" + msg "Failed to download $filename after $COUNT attempts" fi done -} -install_packages() { + if [ $download_success -eq 0 ]; then + msg "No packages were downloaded successfully" + exit 1 + fi + + # --- Установка пакетов --- for pkg in podkop luci-app-podkop; do file=$(ls "$DOWNLOAD_DIR" | grep "^$pkg" | head -n 1) if [ -n "$file" ]; then @@ -82,9 +151,9 @@ install_packages() { opkg remove luci-i18n-podkop* opkg install "$DOWNLOAD_DIR/$ru" else - msg "Русский язык интерфейса ставим? y/n (Need a Russian translation?)" + msg "Русский язык интерфейса ставим? y/n" while true; do - read -r RUS + read -r -p '' RUS case $RUS in y) opkg remove luci-i18n-podkop* @@ -102,53 +171,7 @@ install_packages() { fi fi - # Чистим find "$DOWNLOAD_DIR" -type f -name '*podkop*' -exec rm {} \; } -check_system() { - MODEL=$(cat /tmp/sysinfo/model 2>/dev/null || echo "Unknown") - msg "Router model: $MODEL" - - openwrt_version=$(cat /etc/openwrt_release 2>/dev/null | grep DISTRIB_RELEASE | cut -d"'" -f2 | cut -d'.' -f1 || echo "Unknown") - if [ "$openwrt_version" = "23" ]; then - msg "OpenWrt 23.05 не поддерживается начиная с podkop 0.5.0" - exit 1 - fi - - AVAILABLE_SPACE=$(df /overlay 2>/dev/null | awk 'NR==2 {print $4}' || echo 0) - REQUIRED_SPACE=15360 - if [ "$AVAILABLE_SPACE" -lt "$REQUIRED_SPACE" ]; then - msg "Insufficient space. Available: $((AVAILABLE_SPACE/1024))MB, Required: $((REQUIRED_SPACE/1024))MB" - exit 1 - fi - - if ! nslookup google.com >/dev/null 2>&1; then - msg "DNS not working" - exit 1 - fi - - if opkg list-installed | grep -q https-dns-proxy; then - msg "Сonflicting package detected: https-dns-proxy. Remove?" - while true; do - read -r DNSPROXY - case $DNSPROXY in - yes|y|Y) opkg remove --force-depends luci-app-https-dns-proxy https-dns-proxy luci-i18n-https-dns-proxy*; break ;; - *) msg "Exit"; exit 1 ;; - esac - done - fi -} - -sing_box() { - if ! opkg list-installed | grep -q "^sing-box"; then return; fi - sing_box_version=$(sing-box version | head -n 1 | awk '{print $3}') - required_version="1.12.4" - if [ "$(echo -e "$sing_box_version\n$required_version" | sort -V | head -n 1)" != "$required_version" ]; then - msg "sing-box version $sing_box_version is older than required $required_version" - msg "Removing old version..." - opkg remove sing-box - fi -} - main