Files
podkop/install.sh
2025-09-22 13:33:23 +03:00

178 lines
5.6 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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