From 6520dee87632a4420e8090b44f220f9f554d0841 Mon Sep 17 00:00:00 2001 From: Niko Marmeladkov Date: Wed, 26 Aug 2026 12:30:59 +0300 Subject: [PATCH] =?UTF-8?q?install.sh:=20=D1=81=D1=82=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D0=B8=D0=BD=D0=B3=20=D0=B1=D0=B8=D0=BD=D0=B0=D1=80=D0=BD=D0=B8?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D1=81=D1=80=D0=B0=D0=B7=D1=83=20=D0=B2=20?= =?UTF-8?q?dest=20=D0=B1=D0=B5=D0=B7=20staging=20=D0=B2=20/tmp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /tmp на OpenWRT — tmpfs (RAM): 14МБ sing-box.gz на низкобюджетных роутерах вымывали userspace (включая dropbear). Теперь gzip-поток идёт прямо в /usr/bin, как в nikovpn.py --- install.sh | 51 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 18 deletions(-) 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 }