бинарники из релизов репозитория вместо f.n1ko.dev
- релиз bins: sing-box/ipt2socks для всех архитектур + versions + install.sh (https://git.n1ko.dev/Niko/nikovpn_openwrt/releases/download/bins/<file>) - install.sh/nikovpn.py/wrappers: источники по порядку — релиз -> f.n1ko.dev (резерв) -> локальный bin/ - статус: traffic_total это всего потрачено, а не лимит (traffic_limit=0 значит безлимит)
This commit is contained in:
parent
c887b77784
commit
aeb8fd6077
6 changed files with 59 additions and 32 deletions
|
|
@ -27,8 +27,10 @@ cd nikovpn_openwrt
|
||||||
echo 'login:password' > /root/creds
|
echo 'login:password' > /root/creds
|
||||||
```
|
```
|
||||||
|
|
||||||
Бинарники при установке качаются с f.n1ko.dev (каталог `bin/` ~150 MB
|
Бинарники при установке качаются из [релизов репозитория]
|
||||||
в репозиторий не входит; если он есть рядом с install.sh — берётся из него).
|
(https://git.n1ko.dev/Niko/nikovpn_openwrt/releases/tag/bins) — каталог
|
||||||
|
`bin/` в клон не входит; если он есть рядом с install.sh — берётся из него.
|
||||||
|
f.n1ko.dev остаётся резервным источником.
|
||||||
|
|
||||||
## Команды
|
## Команды
|
||||||
|
|
||||||
|
|
|
||||||
17
install.sh
17
install.sh
|
|
@ -27,6 +27,7 @@
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
||||||
BASE_URL="https://f.n1ko.dev/nikovpn_openwrt"
|
BASE_URL="https://f.n1ko.dev/nikovpn_openwrt"
|
||||||
|
REL_URL="https://git.n1ko.dev/Niko/nikovpn_openwrt/releases/download/bins"
|
||||||
API_URL="https://vpnd.n1ko.dev/api/v1"
|
API_URL="https://vpnd.n1ko.dev/api/v1"
|
||||||
WORK_DIR="/etc/nikovpn"
|
WORK_DIR="/etc/nikovpn"
|
||||||
CREDS_FILE="/root/creds"
|
CREDS_FILE="/root/creds"
|
||||||
|
|
@ -459,7 +460,8 @@ install_bins() {
|
||||||
|
|
||||||
if [ "$skip_sb" != 1 ]; then
|
if [ "$skip_sb" != 1 ]; then
|
||||||
log "Получаю sing-box ($SB_ARCH) ..."
|
log "Получаю sing-box ($SB_ARCH) ..."
|
||||||
dl "$BASE_URL/bin/sing-box-$SB_ARCH.gz" "$TMP/sing-box.gz" || \
|
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
|
cp "$REPO_DIR/bin/sing-box-$SB_ARCH.gz" "$TMP/sing-box.gz" 2>/dev/null
|
||||||
[ -s "$TMP/sing-box.gz" ] || die "не удалось скачать sing-box"
|
[ -s "$TMP/sing-box.gz" ] || die "не удалось скачать sing-box"
|
||||||
gzip -dc "$TMP/sing-box.gz" > "$TMP/sing-box" 2>/dev/null || die "повреждённый архив sing-box"
|
gzip -dc "$TMP/sing-box.gz" > "$TMP/sing-box" 2>/dev/null || die "повреждённый архив sing-box"
|
||||||
|
|
@ -471,7 +473,8 @@ install_bins() {
|
||||||
|
|
||||||
if [ "$TUNNEL" = "ipt2socks" ] && [ "$skip_ipt" != 1 ]; then
|
if [ "$TUNNEL" = "ipt2socks" ] && [ "$skip_ipt" != 1 ]; then
|
||||||
log "Получаю ipt2socks ($IPT_ARCH) ..."
|
log "Получаю ipt2socks ($IPT_ARCH) ..."
|
||||||
dl "$BASE_URL/bin/ipt2socks-$IPT_ARCH.gz" "$TMP/ipt2socks.gz" || \
|
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
|
cp "$REPO_DIR/bin/ipt2socks-$IPT_ARCH.gz" "$TMP/ipt2socks.gz" 2>/dev/null
|
||||||
[ -s "$TMP/ipt2socks.gz" ] || die "не удалось скачать ipt2socks"
|
[ -s "$TMP/ipt2socks.gz" ] || die "не удалось скачать ipt2socks"
|
||||||
gzip -dc "$TMP/ipt2socks.gz" > "$TMP/ipt2socks" 2>/dev/null || die "повреждённый архив ipt2socks"
|
gzip -dc "$TMP/ipt2socks.gz" > "$TMP/ipt2socks" 2>/dev/null || die "повреждённый архив ipt2socks"
|
||||||
|
|
@ -754,7 +757,7 @@ status() {
|
||||||
tu=$(sed -n 's/.*"traffic_used": *\([0-9]*\).*/\1/p' "$TMP/me")
|
tu=$(sed -n 's/.*"traffic_used": *\([0-9]*\).*/\1/p' "$TMP/me")
|
||||||
tt=$(sed -n 's/.*"traffic_total": *\([0-9]*\).*/\1/p' "$TMP/me")
|
tt=$(sed -n 's/.*"traffic_total": *\([0-9]*\).*/\1/p' "$TMP/me")
|
||||||
td=$(sed -n 's/.*"traffic_day": *\([0-9]*\).*/\1/p' "$TMP/me")
|
td=$(sed -n 's/.*"traffic_day": *\([0-9]*\).*/\1/p' "$TMP/me")
|
||||||
echo "Трафик: использовано $tu, за сутки $td, лимит $tt байт"
|
echo "Трафик: использовано $tu байт, за сутки $td, всего $tt"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -798,9 +801,11 @@ install() {
|
||||||
|
|
||||||
mkdir -p "$WORK_DIR" "$TMP"
|
mkdir -p "$WORK_DIR" "$TMP"
|
||||||
|
|
||||||
log "Проверяю обновления с f.n1ko.dev ..."
|
log "Проверяю обновления ..."
|
||||||
dl "$BASE_URL/versions" "$TMP/versions" || cp "$REPO_DIR/versions" "$TMP/versions" 2>/dev/null
|
dl "$REL_URL/versions" "$TMP/versions" || \
|
||||||
[ -s "$TMP/versions" ] || die "не могу скачать $BASE_URL/versions (нет интернета?)"
|
dl "$BASE_URL/versions" "$TMP/versions" || \
|
||||||
|
cp "$REPO_DIR/versions" "$TMP/versions" 2>/dev/null
|
||||||
|
[ -s "$TMP/versions" ] || die "не могу скачать versions (нет интернета?)"
|
||||||
SB_VER=""; IPT_VER=""
|
SB_VER=""; IPT_VER=""
|
||||||
while IFS='=' read -r k v; do
|
while IFS='=' read -r k v; do
|
||||||
case "$k" in sing-box) SB_VER="$v" ;; ipt2socks) IPT_VER="$v" ;; esac
|
case "$k" in sing-box) SB_VER="$v" ;; ipt2socks) IPT_VER="$v" ;; esac
|
||||||
|
|
|
||||||
17
nikovpn.py
17
nikovpn.py
|
|
@ -35,6 +35,7 @@ from pathlib import Path
|
||||||
from urllib.parse import parse_qs, unquote, urlsplit
|
from urllib.parse import parse_qs, unquote, urlsplit
|
||||||
|
|
||||||
BASE_URL = "https://f.n1ko.dev/nikovpn_openwrt"
|
BASE_URL = "https://f.n1ko.dev/nikovpn_openwrt"
|
||||||
|
REL_URL = "https://git.n1ko.dev/Niko/nikovpn_openwrt/releases/download/bins"
|
||||||
API_URL = "https://vpnd.n1ko.dev/api/v1"
|
API_URL = "https://vpnd.n1ko.dev/api/v1"
|
||||||
WORK_DIR = "/etc/nikovpn"
|
WORK_DIR = "/etc/nikovpn"
|
||||||
CREDS_FILE = "/root/creds"
|
CREDS_FILE = "/root/creds"
|
||||||
|
|
@ -635,9 +636,10 @@ def install_bins(rt: Router, sb_arch: str, ipt_arch: str, tunnel: str,
|
||||||
if local.exists():
|
if local.exists():
|
||||||
push_gz(rt, local, SB_PATH, "{b} version", "sing-box")
|
push_gz(rt, local, SB_PATH, "{b} version", "sing-box")
|
||||||
else:
|
else:
|
||||||
log(f"скачиваю sing-box ({sb_arch}) на роутере с f.n1ko.dev ...")
|
log(f"скачиваю sing-box ({sb_arch}) на роутере ...")
|
||||||
gz = f"/tmp/nikovpn.{os.getpid()}.sb.gz"
|
gz = f"/tmp/nikovpn.{os.getpid()}.sb.gz"
|
||||||
if not router_download(rt, f"{BASE_URL}/bin/sing-box-{sb_arch}.gz", gz):
|
if not (router_download(rt, f"{REL_URL}/sing-box-{sb_arch}.gz", gz) or
|
||||||
|
router_download(rt, f"{BASE_URL}/bin/sing-box-{sb_arch}.gz", gz)):
|
||||||
die("не удалось скачать sing-box")
|
die("не удалось скачать sing-box")
|
||||||
rt.run(f"gzip -dc {gz} > {SB_PATH} && chmod +x {SB_PATH}", check=True)
|
rt.run(f"gzip -dc {gz} > {SB_PATH} && chmod +x {SB_PATH}", check=True)
|
||||||
if rt.run(f"{SB_PATH} version")[0] != 0:
|
if rt.run(f"{SB_PATH} version")[0] != 0:
|
||||||
|
|
@ -649,9 +651,10 @@ def install_bins(rt: Router, sb_arch: str, ipt_arch: str, tunnel: str,
|
||||||
if local.exists():
|
if local.exists():
|
||||||
push_gz(rt, local, IPT_PATH, "{b} -V", "ipt2socks")
|
push_gz(rt, local, IPT_PATH, "{b} -V", "ipt2socks")
|
||||||
else:
|
else:
|
||||||
log(f"скачиваю ipt2socks ({ipt_arch}) на роутере с f.n1ko.dev ...")
|
log(f"скачиваю ipt2socks ({ipt_arch}) на роутере ...")
|
||||||
gz = f"/tmp/nikovpn.{os.getpid()}.ipt.gz"
|
gz = f"/tmp/nikovpn.{os.getpid()}.ipt.gz"
|
||||||
if not router_download(rt, f"{BASE_URL}/bin/ipt2socks-{ipt_arch}.gz", gz):
|
if not (router_download(rt, f"{REL_URL}/ipt2socks-{ipt_arch}.gz", gz) or
|
||||||
|
router_download(rt, f"{BASE_URL}/bin/ipt2socks-{ipt_arch}.gz", gz)):
|
||||||
die("не удалось скачать ipt2socks")
|
die("не удалось скачать ipt2socks")
|
||||||
rt.run(f"gzip -dc {gz} > {IPT_PATH} && chmod +x {IPT_PATH}", check=True)
|
rt.run(f"gzip -dc {gz} > {IPT_PATH} && chmod +x {IPT_PATH}", check=True)
|
||||||
if rt.run(f"{IPT_PATH} -V")[0] != 0:
|
if rt.run(f"{IPT_PATH} -V")[0] != 0:
|
||||||
|
|
@ -818,7 +821,9 @@ def do_install(rt: Router, args, update=False):
|
||||||
IPT_VER = v
|
IPT_VER = v
|
||||||
if not SB_VER:
|
if not SB_VER:
|
||||||
rc, out, _ = rt.run(
|
rc, out, _ = rt.run(
|
||||||
f"(curl -fsSL {BASE_URL}/versions 2>/dev/null || "
|
f"(curl -fsSL {REL_URL}/versions 2>/dev/null || "
|
||||||
|
f"wget -q -O - {REL_URL}/versions 2>/dev/null || "
|
||||||
|
f"curl -fsSL {BASE_URL}/versions 2>/dev/null || "
|
||||||
f"wget -q -O - {BASE_URL}/versions 2>/dev/null)")
|
f"wget -q -O - {BASE_URL}/versions 2>/dev/null)")
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
for line in out.decode(errors="replace").splitlines():
|
for line in out.decode(errors="replace").splitlines():
|
||||||
|
|
@ -947,7 +952,7 @@ def do_status(rt: Router, args):
|
||||||
me = json.loads(body)
|
me = json.loads(body)
|
||||||
print(f"Трафик: использовано {human(me.get('traffic_used'))}, "
|
print(f"Трафик: использовано {human(me.get('traffic_used'))}, "
|
||||||
f"за сутки {human(me.get('traffic_day'))}, "
|
f"за сутки {human(me.get('traffic_day'))}, "
|
||||||
f"лимит {human(me.get('traffic_total'))}")
|
f"всего {human(me.get('traffic_total'))}")
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
||||||
17
status.sh
17
status.sh
|
|
@ -2,12 +2,17 @@
|
||||||
# NikoVPN: статус VPN
|
# NikoVPN: статус VPN
|
||||||
[ -f /etc/nikovpn/install.sh ] && exec /etc/nikovpn/install.sh status
|
[ -f /etc/nikovpn/install.sh ] && exec /etc/nikovpn/install.sh status
|
||||||
TMP=/tmp/nikovpn-status.sh
|
TMP=/tmp/nikovpn-status.sh
|
||||||
URL="https://f.n1ko.dev/nikovpn_openwrt/install.sh"
|
for URL in \
|
||||||
if command -v curl >/dev/null 2>&1; then
|
"https://git.n1ko.dev/Niko/nikovpn_openwrt/releases/download/bins/install.sh" \
|
||||||
curl -fsSL "$URL" -o "$TMP" 2>/dev/null
|
"https://f.n1ko.dev/nikovpn_openwrt/install.sh"; do
|
||||||
elif command -v wget >/dev/null 2>&1; then
|
if command -v curl >/dev/null 2>&1; then
|
||||||
wget -q "$URL" -O "$TMP" 2>/dev/null
|
curl -fsSL "$URL" -o "$TMP" 2>/dev/null
|
||||||
fi
|
elif command -v wget >/dev/null 2>&1; then
|
||||||
|
wget -q "$URL" -O "$TMP" 2>/dev/null
|
||||||
|
fi
|
||||||
|
[ -s "$TMP" ] && break
|
||||||
|
rm -f "$TMP"
|
||||||
|
done
|
||||||
if [ -s "$TMP" ]; then
|
if [ -s "$TMP" ]; then
|
||||||
chmod +x "$TMP"
|
chmod +x "$TMP"
|
||||||
exec "$TMP" status
|
exec "$TMP" status
|
||||||
|
|
|
||||||
17
uninstall.sh
17
uninstall.sh
|
|
@ -2,12 +2,17 @@
|
||||||
# NikoVPN: удаление VPN (останавливает сервисы и чистит firewall)
|
# NikoVPN: удаление VPN (останавливает сервисы и чистит firewall)
|
||||||
[ -f /etc/nikovpn/install.sh ] && exec /etc/nikovpn/install.sh uninstall
|
[ -f /etc/nikovpn/install.sh ] && exec /etc/nikovpn/install.sh uninstall
|
||||||
TMP=/tmp/nikovpn-uninstall.sh
|
TMP=/tmp/nikovpn-uninstall.sh
|
||||||
URL="https://f.n1ko.dev/nikovpn_openwrt/install.sh"
|
for URL in \
|
||||||
if command -v curl >/dev/null 2>&1; then
|
"https://git.n1ko.dev/Niko/nikovpn_openwrt/releases/download/bins/install.sh" \
|
||||||
curl -fsSL "$URL" -o "$TMP" 2>/dev/null
|
"https://f.n1ko.dev/nikovpn_openwrt/install.sh"; do
|
||||||
elif command -v wget >/dev/null 2>&1; then
|
if command -v curl >/dev/null 2>&1; then
|
||||||
wget -q "$URL" -O "$TMP" 2>/dev/null
|
curl -fsSL "$URL" -o "$TMP" 2>/dev/null
|
||||||
fi
|
elif command -v wget >/dev/null 2>&1; then
|
||||||
|
wget -q "$URL" -O "$TMP" 2>/dev/null
|
||||||
|
fi
|
||||||
|
[ -s "$TMP" ] && break
|
||||||
|
rm -f "$TMP"
|
||||||
|
done
|
||||||
if [ -s "$TMP" ]; then
|
if [ -s "$TMP" ]; then
|
||||||
chmod +x "$TMP"
|
chmod +x "$TMP"
|
||||||
exec "$TMP" uninstall
|
exec "$TMP" uninstall
|
||||||
|
|
|
||||||
17
update.sh
17
update.sh
|
|
@ -2,12 +2,17 @@
|
||||||
# NikoVPN: обновление (переустановка) — скачивает свежий install.sh с f.n1ko.dev
|
# NikoVPN: обновление (переустановка) — скачивает свежий install.sh с f.n1ko.dev
|
||||||
[ -f /etc/nikovpn/install.sh ] && exec /etc/nikovpn/install.sh update
|
[ -f /etc/nikovpn/install.sh ] && exec /etc/nikovpn/install.sh update
|
||||||
TMP=/tmp/nikovpn-update.sh
|
TMP=/tmp/nikovpn-update.sh
|
||||||
URL="https://f.n1ko.dev/nikovpn_openwrt/install.sh"
|
for URL in \
|
||||||
if command -v curl >/dev/null 2>&1; then
|
"https://git.n1ko.dev/Niko/nikovpn_openwrt/releases/download/bins/install.sh" \
|
||||||
curl -fsSL "$URL" -o "$TMP" 2>/dev/null
|
"https://f.n1ko.dev/nikovpn_openwrt/install.sh"; do
|
||||||
elif command -v wget >/dev/null 2>&1; then
|
if command -v curl >/dev/null 2>&1; then
|
||||||
wget -q "$URL" -O "$TMP" 2>/dev/null
|
curl -fsSL "$URL" -o "$TMP" 2>/dev/null
|
||||||
fi
|
elif command -v wget >/dev/null 2>&1; then
|
||||||
|
wget -q "$URL" -O "$TMP" 2>/dev/null
|
||||||
|
fi
|
||||||
|
[ -s "$TMP" ] && break
|
||||||
|
rm -f "$TMP"
|
||||||
|
done
|
||||||
if [ -s "$TMP" ]; then
|
if [ -s "$TMP" ]; then
|
||||||
chmod +x "$TMP"
|
chmod +x "$TMP"
|
||||||
exec "$TMP" update
|
exec "$TMP" update
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue