121 lines
4.3 KiB
Bash
121 lines
4.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
download_xray() {
|
|
# Download Xray core and install to outdir/xray
|
|
local outdir="$1" ver="${XRAY_VER:-}" url tmp zipname="xray.zip"
|
|
mkdir -p "$outdir"
|
|
if [[ -n "${XRAY_VER:-}" ]]; then ver="${XRAY_VER}"; fi
|
|
if [[ -z "$ver" ]]; then
|
|
echo "Downloading latest xray"
|
|
ver="$(curl -fsSL https://api.github.com/repos/XTLS/Xray-core/releases/latest |
|
|
grep -Eo '"tag_name":\s*"v[^"]+"' | sed -E 's/.*"v([^"]+)".*/\1/' | head -n1)" || true
|
|
fi
|
|
if [[ -z "$ver" ]]; then
|
|
echo "[xray] Failed to get version"
|
|
return 1
|
|
fi
|
|
if [[ "$RID_DIR" == "linux-arm64" ]]; then
|
|
url="https://github.com/XTLS/Xray-core/releases/download/v${ver}/Xray-linux-arm64-v8a.zip"
|
|
else
|
|
url="https://github.com/XTLS/Xray-core/releases/download/v${ver}/Xray-linux-64.zip"
|
|
fi
|
|
echo "[+] Download xray: $url"
|
|
tmp="$(mktemp -d)"
|
|
trap '[[ -n "${tmp:-}" ]] && rm -rf "$tmp"' RETURN
|
|
curl -fL "$url" -o "$tmp/$zipname"
|
|
unzip -q "$tmp/$zipname" -d "$tmp"
|
|
install -Dm755 "$tmp/xray" "$outdir/xray"
|
|
}
|
|
|
|
download_singbox() {
|
|
# Download sing-box core and install to outdir/sing-box
|
|
local outdir="$1" ver="${SING_VER:-}" url tmp tarname="singbox.tar.gz" bin
|
|
mkdir -p "$outdir"
|
|
if [[ -n "${SING_VER:-}" ]]; then ver="${SING_VER}"; fi
|
|
if [[ -z "$ver" ]]; then
|
|
echo "Downloading latest sing-box"
|
|
ver="$(curl -fsSL https://api.github.com/repos/SagerNet/sing-box/releases/latest |
|
|
grep -Eo '"tag_name":\s*"v[^"]+"' | sed -E 's/.*"v([^"]+)".*/\1/' | head -n1)" || true
|
|
fi
|
|
if [[ -z "$ver" ]]; then
|
|
echo "[sing-box] Failed to get version"
|
|
return 1
|
|
fi
|
|
if [[ "$RID_DIR" == "linux-arm64" ]]; then
|
|
url="https://github.com/SagerNet/sing-box/releases/download/v${ver}/sing-box-${ver}-linux-arm64.tar.gz"
|
|
else
|
|
url="https://github.com/SagerNet/sing-box/releases/download/v${ver}/sing-box-${ver}-linux-amd64.tar.gz"
|
|
fi
|
|
echo "[+] Download sing-box: $url"
|
|
tmp="$(mktemp -d)"
|
|
trap '[[ -n "${tmp:-}" ]] && rm -rf "$tmp"' RETURN
|
|
curl -fL "$url" -o "$tmp/$tarname"
|
|
tar -C "$tmp" -xzf "$tmp/$tarname"
|
|
bin="$(find "$tmp" -type f -name 'sing-box' | head -n1 || true)"
|
|
[[ -n "$bin" ]] || {
|
|
echo "[!] sing-box unpack failed"
|
|
return 1
|
|
}
|
|
install -Dm755 "$bin" "$outdir/sing-box"
|
|
}
|
|
|
|
# Move geo files to a unified path: outroot/bin
|
|
unify_geo_layout() {
|
|
local outroot="$1"
|
|
mkdir -p "$outroot/bin"
|
|
local names=(
|
|
"geosite.dat"
|
|
"geoip.dat"
|
|
"geoip-only-cn-private.dat"
|
|
"Country.mmdb"
|
|
"geoip.metadb"
|
|
)
|
|
for n in "${names[@]}"; do
|
|
# If file exists under bin/xray/, move it up to bin/
|
|
if [[ -f "$outroot/bin/xray/$n" ]]; then
|
|
mv -f "$outroot/bin/xray/$n" "$outroot/bin/$n"
|
|
fi
|
|
# If file already in bin/, leave it as-is
|
|
if [[ -f "$outroot/bin/$n" ]]; then
|
|
:
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Download geo/rule assets; then unify to bin/
|
|
download_geo_assets() {
|
|
local outroot="$1"
|
|
local bin_dir="$outroot/bin"
|
|
local srss_dir="$bin_dir/srss"
|
|
mkdir -p "$bin_dir" "$srss_dir"
|
|
echo "[+] Download Xray Geo to ${bin_dir}"
|
|
curl -fsSL -o "$bin_dir/geosite.dat" \
|
|
"https://github.com/Loyalsoldier/V2ray-rules-dat/releases/latest/download/geosite.dat"
|
|
curl -fsSL -o "$bin_dir/geoip.dat" \
|
|
"https://github.com/Loyalsoldier/V2ray-rules-dat/releases/latest/download/geoip.dat"
|
|
curl -fsSL -o "$bin_dir/geoip-only-cn-private.dat" \
|
|
"https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat"
|
|
curl -fsSL -o "$bin_dir/Country.mmdb" \
|
|
"https://raw.githubusercontent.com/Loyalsoldier/geoip/release/Country.mmdb"
|
|
|
|
echo "[+] Download sing-box rule DB & rule-sets"
|
|
curl -fsSL -o "$bin_dir/geoip.metadb" \
|
|
"https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/geoip.metadb" || true
|
|
|
|
for f in \
|
|
geoip-private.srs geoip-cn.srs geoip-facebook.srs geoip-fastly.srs \
|
|
geoip-google.srs geoip-netflix.srs geoip-telegram.srs geoip-twitter.srs; do
|
|
curl -fsSL -o "$srss_dir/$f" \
|
|
"https://raw.githubusercontent.com/2dust/sing-box-rules/rule-set-geoip/$f" || true
|
|
done
|
|
for f in \
|
|
geosite-cn.srs geosite-gfw.srs geosite-greatfire.srs \
|
|
geosite-geolocation-cn.srs geosite-category-ads-all.srs geosite-private.srs; do
|
|
curl -fsSL -o "$srss_dir/$f" \
|
|
"https://raw.githubusercontent.com/2dust/sing-box-rules/rule-set-geosite/$f" || true
|
|
done
|
|
|
|
# Unify to bin/
|
|
unify_geo_layout "$outroot"
|
|
}
|