diff --git a/install.sh b/install.sh index c05e7b2..ddf866f 100755 --- a/install.sh +++ b/install.sh @@ -70,6 +70,33 @@ dl() { # $1=url $2=out ; резерв на http:// для f.n1ko.dev [ -n "$ok" ] } +pipe_dl() { # $1=url -> поток в stdout (для больших файлов: без staging в tmpfs, + # /tmp на OpenWRT — это RAM, крупный бинарник туда класть нельзя) + if [ "$DL" = curl ]; then + curl -fsSL --max-time 600 "$1" + else + wget -q -T 600 -O - "$1" + fi +} + +fetch_gz() { # $1=имя-файла $2=dest ; источники: локальный bin/ -> релиз -> f.n1ko.dev + local f="$1" out="$2" ok=0 + if [ -f "$REPO_DIR/bin/$f" ]; then + gzip -dc "$REPO_DIR/bin/$f" > "$out" 2>/dev/null && [ -s "$out" ] && ok=1 + fi + if [ $ok != 1 ]; then + log "Качаю $f из релизов git.n1ko.dev ..." + pipe_dl "$REL_URL/$f" | gzip -dc > "$out" 2>/dev/null + [ -s "$out" ] && ok=1 + fi + if [ $ok != 1 ]; then + log "Качаю $f с f.n1ko.dev ..." + pipe_dl "$BASE_URL/bin/$f" | gzip -dc > "$out" 2>/dev/null + [ -s "$out" ] && ok=1 + fi + [ $ok = 1 ] +} + # --- API (HTTP Basic auth) --- API_AUTH=""; API_AUTH_V="" api_init_auth() { @@ -462,28 +489,16 @@ install_bins() { if [ "$skip_sb" != 1 ]; then log "Получаю sing-box ($SB_ARCH) ..." - dl "$REL_URL/sing-box-$SB_ARCH.gz" "$TMP/sing-box.gz" || \ - dl "$BASE_URL/bin/sing-box-$SB_ARCH.gz" "$TMP/sing-box.gz" || \ - cp "$REPO_DIR/bin/sing-box-$SB_ARCH.gz" "$TMP/sing-box.gz" 2>/dev/null - [ -s "$TMP/sing-box.gz" ] || die "не удалось скачать sing-box" - gzip -dc "$TMP/sing-box.gz" > "$TMP/sing-box" 2>/dev/null || die "повреждённый архив sing-box" - chmod +x "$TMP/sing-box" - "$TMP/sing-box" version >/dev/null 2>&1 || die "sing-box не запускается на этой системе (архитектура?)" - mv "$TMP/sing-box" "$SB_PATH" - rm -f "$TMP/sing-box.gz" + fetch_gz "sing-box-$SB_ARCH.gz" "$SB_PATH" || die "не удалось скачать sing-box" + chmod +x "$SB_PATH" + "$SB_PATH" version >/dev/null 2>&1 || die "sing-box не запускается на этой системе (архитектура?)" fi if [ "$TUNNEL" = "ipt2socks" ] && [ "$skip_ipt" != 1 ]; then log "Получаю ipt2socks ($IPT_ARCH) ..." - dl "$REL_URL/ipt2socks-$IPT_ARCH.gz" "$TMP/ipt2socks.gz" || \ - dl "$BASE_URL/bin/ipt2socks-$IPT_ARCH.gz" "$TMP/ipt2socks.gz" || \ - cp "$REPO_DIR/bin/ipt2socks-$IPT_ARCH.gz" "$TMP/ipt2socks.gz" 2>/dev/null - [ -s "$TMP/ipt2socks.gz" ] || die "не удалось скачать ipt2socks" - gzip -dc "$TMP/ipt2socks.gz" > "$TMP/ipt2socks" 2>/dev/null || die "повреждённый архив ipt2socks" - chmod +x "$TMP/ipt2socks" - "$TMP/ipt2socks" -V >/dev/null 2>&1 || die "ipt2socks не запускается на этой системе (архитектура?)" - mv "$TMP/ipt2socks" "$IPT_PATH" - rm -f "$TMP/ipt2socks.gz" + fetch_gz "ipt2socks-$IPT_ARCH.gz" "$IPT_PATH" || die "не удалось скачать ipt2socks" + chmod +x "$IPT_PATH" + "$IPT_PATH" -V >/dev/null 2>&1 || die "ipt2socks не запускается на этой системе (архитектура?)" fi }