install.sh: поддержка uclient-fetch (роутеры без curl/wget, напр. filogic-билды)

This commit is contained in:
Niko Marmeladkov 2026-08-26 15:22:25 +03:00
parent 6520dee876
commit 9dfe8a770c
Signed by: Niko
GPG key ID: E3B955F9442D44E3

View file

@ -18,8 +18,9 @@
# Требования:
# - креды "login:password" (без кавычек): файл /root/creds
# на роутере или переменная окружения NIKOVPN_CREDS
# - доступ в интернет (скрипт тянет всё только с f.n1ko.dev и vpnd.n1ko.dev;
# если рядом с install.sh есть каталог bin/ — бинарники берутся из него)
# - даунлоадер: curl, wget или uclient-fetch
# - доступ в интернет (бинарники — из релизов git.n1ko.dev,
# резервом f.n1ko.dev; если рядом с install.sh есть bin/ — из него)
#
# Скрипт сам определяет архитектуру (openwrt_release/apk/opkg/uname),
# выбирает лучший протокол и сервер (Hysteria2 > TUIC > Naive > VLESS > SS)
@ -53,8 +54,8 @@ need_root() { [ "$(id -u)" = "0" ] || die "нужны права root"; }
# --- downloader ---
DL=""
for t in curl wget; do have "$t" && DL="$t" && break; done
[ -n "$DL" ] || die "нужен curl или wget"
for t in curl wget uclient-fetch; do have "$t" && DL="$t" && break; done
[ -n "$DL" ] || die "нужен curl, wget или uclient-fetch"
dl() { # $1=url $2=out ; резерв на http:// для f.n1ko.dev
local url="$1" out="$2" ok=""
@ -62,10 +63,14 @@ dl() { # $1=url $2=out ; резерв на http:// для f.n1ko.dev
curl -fsSL --max-time 120 -o "$out" "$url" && ok=1
[ -z "$ok" ] && case "$url" in https://f.n1ko.dev/*)
curl -fsSL --max-time 120 -o "$out" "http://${url#https://}" && ok=1 ;; esac
else
elif [ "$DL" = wget ]; then
wget -q -T 120 -O "$out" "$url" && ok=1
[ -z "$ok" ] && case "$url" in https://f.n1ko.dev/*)
wget -q -T 120 -O "$out" "http://${url#https://}" && ok=1 ;; esac
else
uclient-fetch -q --timeout=120 -O "$out" "$url" && ok=1
[ -z "$ok" ] && case "$url" in https://f.n1ko.dev/*)
uclient-fetch -q --timeout=120 -O "$out" "http://${url#https://}" && ok=1 ;; esac
fi
[ -n "$ok" ]
}
@ -74,8 +79,10 @@ pipe_dl() { # $1=url -> поток в stdout (для больших файло
# /tmp на OpenWRT — это RAM, крупный бинарник туда класть нельзя)
if [ "$DL" = curl ]; then
curl -fsSL --max-time 600 "$1"
else
elif [ "$DL" = wget ]; then
wget -q -T 600 -O - "$1"
else
uclient-fetch -q --timeout=600 -O - "$1"
fi
}