Домены и сети Discord в geosite.dat и geoip.dat для Xray/3x-ui, плюс sing-box, Clash/mihomo, AdGuard, текст и готовый фрагмент routing. Рукописная база живёт в data/discord-base.txt и data/ip/discord-base.txt, остальное tools/sync.py тянет из пяти публичных апстримов: JSON-исходники парсятся напрямую, скомпилированные .srs распаковываются через sing-box. Каждый источник кладётся в свою категорию, недоступный источник не обнуляет данные, файлы без шапки GENERATED скрипт не трогает. Ограничения по протоколу и портам (директивы !network / !port) доезжают до sing-box rule-set и до xray/routing.json. Такие категории намеренно не входят в сводную discord: там сети вроде 172.64.0.0/13, и без привязки к UDP-портам правило утащило бы в туннель чужой трафик. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
49 lines
1.7 KiB
Bash
49 lines
1.7 KiB
Bash
#!/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
|