#!/bin/sh # Кладёт sing-box, mihomo и xray в каталог (по умолчанию ./bin). # Нужен только для сборки .srs/.mrs и для проверки .dat настоящим Xray. # # ./tools/fetch-tools.sh [каталог] set -eu BIN="${1:-./bin}" mkdir -p "$BIN" BIN=$(cd "$BIN" && pwd) case "$(uname -m)" in x86_64 | amd64) sb_arch=amd64; mh_arch=amd64; xr_arch=64 ;; aarch64 | arm64) sb_arch=arm64; mh_arch=arm64; xr_arch=arm64-v8a ;; *) echo "неподдерживаемая архитектура: $(uname -m)" >&2; exit 1 ;; esac # Печатает ссылку на ассет последнего релиза, имя которого совпало с regex. asset_url() { curl -fsSL "https://api.github.com/repos/$1/releases/latest" | python3 -c ' import json, re, sys assets = json.load(sys.stdin)["assets"] match = next((a for a in assets if re.search(sys.argv[1], a["name"])), None) if match is None: sys.exit(f"в релизе нет ассета по шаблону {sys.argv[1]}") print(match["browser_download_url"]) ' "$2" } echo "sing-box…" curl -fsSL "$(asset_url SagerNet/sing-box "-linux-$sb_arch\\.tar\\.gz\$")" | tar -xz --strip-components=1 -C "$BIN" --wildcards '*/sing-box' echo "mihomo…" curl -fsSL "$(asset_url MetaCubeX/mihomo "^mihomo-linux-$mh_arch-v[0-9.]+\\.gz\$")" | gunzip > "$BIN/mihomo" echo "xray…" curl -fsSL -o "$BIN/xray.zip" "$(asset_url XTLS/Xray-core "^Xray-linux-$xr_arch\\.zip\$")" unzip -oqj "$BIN/xray.zip" xray -d "$BIN" rm -f "$BIN/xray.zip" chmod +x "$BIN/sing-box" "$BIN/mihomo" "$BIN/xray" echo "готово: $BIN" "$BIN/sing-box" version | head -1 "$BIN/mihomo" -v | head -1 "$BIN/xray" version | head -1