#!/bin/sh # --- Настройки --- REPO_API="https://git.ownsrv.ru/api/v1/repos/yanistyle/podkop/releases" DOWNLOAD_DIR="/tmp/podkop" COUNT=3 rm -rf "$DOWNLOAD_DIR" mkdir -p "$DOWNLOAD_DIR" 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 opkg update || { echo "opkg update failed"; exit 1; } if [ -f "/etc/init.d/podkop" ]; then msg "Podkop is already installed. Upgraded..." else msg "Installed podkop..." fi # --- Получаем последний релиз из Gitea --- msg "Fetching latest release info from Gitea..." 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" # --- Получаем список всех 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 "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 $filename. Retry..." rm -f "$filepath" attempt=$((attempt+1)) done if [ $attempt -eq $COUNT ]; then msg "Failed to download $filename after $COUNT attempts" fi done 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 msg "Installing $file" opkg install "$DOWNLOAD_DIR/$file" sleep 3 fi done ru=$(ls "$DOWNLOAD_DIR" | grep "luci-i18n-podkop-ru" | head -n 1) if [ -n "$ru" ]; then if opkg list-installed | grep -q luci-i18n-podkop-ru; then msg "Upgraded ru translation..." opkg remove luci-i18n-podkop* opkg install "$DOWNLOAD_DIR/$ru" else msg "Русский язык интерфейса ставим? y/n" while true; do read -r -p '' RUS case $RUS in y) opkg remove luci-i18n-podkop* opkg install "$DOWNLOAD_DIR/$ru" break ;; n) break ;; *) echo "Введите y или n" ;; esac done fi fi find "$DOWNLOAD_DIR" -type f -name '*podkop*' -exec rm {} \; } main