mirror of
https://github.com/2dust/v2rayN.git
synced 2026-04-16 04:25:45 +00:00
Compare commits
8 commits
e971c77d41
...
16a79500c4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16a79500c4 | ||
|
|
780d25f3e5 | ||
|
|
be28b24362 | ||
|
|
d1df702e8a | ||
|
|
267e282af4 | ||
|
|
c1055d317b | ||
|
|
0ca3282d89 | ||
|
|
2f5e6559d7 |
2 changed files with 33 additions and 34 deletions
|
|
@ -232,14 +232,14 @@ VERSION="${VERSION#v}"
|
||||||
echo "[*] GUI version resolved as: ${VERSION}"
|
echo "[*] GUI version resolved as: ${VERSION}"
|
||||||
|
|
||||||
download_xray() {
|
download_xray() {
|
||||||
local outdir="$1" ver="${XRAY_VER:-}" url tmp zipname="xray.zip"
|
local outdir="$1" rid="$2" ver="${XRAY_VER:-}" url tmp zipname="xray.zip"
|
||||||
mkdir -p "$outdir"
|
mkdir -p "$outdir"
|
||||||
if [[ -z "$ver" ]]; then
|
if [[ -z "$ver" ]]; then
|
||||||
ver="$(curl -fsSL https://api.github.com/repos/XTLS/Xray-core/releases/latest \
|
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
|
| grep -Eo '"tag_name":\s*"v[^"]+"' | sed -E 's/.*"v([^"]+)".*/\1/' | head -n1)" || true
|
||||||
fi
|
fi
|
||||||
[[ -n "$ver" ]] || { echo "[xray] Failed to get version"; return 1; }
|
[[ -n "$ver" ]] || { echo "[xray] Failed to get version"; return 1; }
|
||||||
if [[ "$RID_DIR" == "linux-arm64" ]]; then
|
if [[ "$rid" == "linux-arm64" ]]; then
|
||||||
url="https://github.com/XTLS/Xray-core/releases/download/v${ver}/Xray-linux-arm64-v8a.zip"
|
url="https://github.com/XTLS/Xray-core/releases/download/v${ver}/Xray-linux-arm64-v8a.zip"
|
||||||
else
|
else
|
||||||
url="https://github.com/XTLS/Xray-core/releases/download/v${ver}/Xray-linux-64.zip"
|
url="https://github.com/XTLS/Xray-core/releases/download/v${ver}/Xray-linux-64.zip"
|
||||||
|
|
@ -253,14 +253,14 @@ download_xray() {
|
||||||
}
|
}
|
||||||
|
|
||||||
download_singbox() {
|
download_singbox() {
|
||||||
local outdir="$1" ver="${SING_VER:-}" url tmp tarname="singbox.tar.gz" bin
|
local outdir="$1" rid="$2" ver="${SING_VER:-}" url tmp tarname="singbox.tar.gz" bin
|
||||||
mkdir -p "$outdir"
|
mkdir -p "$outdir"
|
||||||
if [[ -z "$ver" ]]; then
|
if [[ -z "$ver" ]]; then
|
||||||
ver="$(curl -fsSL https://api.github.com/repos/SagerNet/sing-box/releases/latest \
|
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
|
| grep -Eo '"tag_name":\s*"v[^"]+"' | sed -E 's/.*"v([^"]+)".*/\1/' | head -n1)" || true
|
||||||
fi
|
fi
|
||||||
[[ -n "$ver" ]] || { echo "[sing-box] Failed to get version"; return 1; }
|
[[ -n "$ver" ]] || { echo "[sing-box] Failed to get version"; return 1; }
|
||||||
if [[ "$RID_DIR" == "linux-arm64" ]]; then
|
if [[ "$rid" == "linux-arm64" ]]; then
|
||||||
url="https://github.com/SagerNet/sing-box/releases/download/v${ver}/sing-box-${ver}-linux-arm64.tar.gz"
|
url="https://github.com/SagerNet/sing-box/releases/download/v${ver}/sing-box-${ver}-linux-arm64.tar.gz"
|
||||||
else
|
else
|
||||||
url="https://github.com/SagerNet/sing-box/releases/download/v${ver}/sing-box-${ver}-linux-amd64.tar.gz"
|
url="https://github.com/SagerNet/sing-box/releases/download/v${ver}/sing-box-${ver}-linux-amd64.tar.gz"
|
||||||
|
|
@ -330,9 +330,9 @@ download_geo_assets() {
|
||||||
}
|
}
|
||||||
|
|
||||||
download_v2rayn_bundle() {
|
download_v2rayn_bundle() {
|
||||||
local outroot="$1"
|
local outroot="$1" rid="$2"
|
||||||
local url=""
|
local url=""
|
||||||
if [[ "$RID_DIR" == "linux-arm64" ]]; then
|
if [[ "$rid" == "linux-arm64" ]]; then
|
||||||
url="https://raw.githubusercontent.com/2dust/v2rayN-core-bin/refs/heads/master/v2rayN-linux-arm64.zip"
|
url="https://raw.githubusercontent.com/2dust/v2rayN-core-bin/refs/heads/master/v2rayN-linux-arm64.zip"
|
||||||
else
|
else
|
||||||
url="https://raw.githubusercontent.com/2dust/v2rayN-core-bin/refs/heads/master/v2rayN-linux-64.zip"
|
url="https://raw.githubusercontent.com/2dust/v2rayN-core-bin/refs/heads/master/v2rayN-linux-64.zip"
|
||||||
|
|
@ -396,7 +396,6 @@ build_for_arch() {
|
||||||
local PUBDIR
|
local PUBDIR
|
||||||
PUBDIR="$(dirname "$PROJECT")/bin/Release/net8.0/${RID_DIR}/publish"
|
PUBDIR="$(dirname "$PROJECT")/bin/Release/net8.0/${RID_DIR}/publish"
|
||||||
[[ -d "$PUBDIR" ]] || { echo "Publish directory not found: $PUBDIR"; return 1; }
|
[[ -d "$PUBDIR" ]] || { echo "Publish directory not found: $PUBDIR"; return 1; }
|
||||||
export RID_DIR
|
|
||||||
|
|
||||||
local WORKDIR PKGROOT STAGE DEBIAN_DIR
|
local WORKDIR PKGROOT STAGE DEBIAN_DIR
|
||||||
WORKDIR="$(mktemp -d)"
|
WORKDIR="$(mktemp -d)"
|
||||||
|
|
@ -414,7 +413,8 @@ build_for_arch() {
|
||||||
cp -a "$PUBDIR/." "$STAGE/opt/v2rayN/"
|
cp -a "$PUBDIR/." "$STAGE/opt/v2rayN/"
|
||||||
|
|
||||||
local ICON_CANDIDATE
|
local ICON_CANDIDATE
|
||||||
ICON_CANDIDATE="$(dirname "$PROJECT")/../v2rayN.Desktop/v2rayN.png"
|
PROJECT_DIR="$(cd "$(dirname "$PROJECT")" && pwd)"
|
||||||
|
ICON_CANDIDATE="$PROJECT_DIR/v2rayN.png"
|
||||||
[[ -f "$ICON_CANDIDATE" ]] && cp "$ICON_CANDIDATE" "$STAGE/usr/share/icons/hicolor/256x256/apps/v2rayn.png" || true
|
[[ -f "$ICON_CANDIDATE" ]] && cp "$ICON_CANDIDATE" "$STAGE/usr/share/icons/hicolor/256x256/apps/v2rayn.png" || true
|
||||||
|
|
||||||
mkdir -p "$STAGE/opt/v2rayN/bin/xray" "$STAGE/opt/v2rayN/bin/sing_box"
|
mkdir -p "$STAGE/opt/v2rayN/bin/xray" "$STAGE/opt/v2rayN/bin/sing_box"
|
||||||
|
|
@ -423,16 +423,16 @@ build_for_arch() {
|
||||||
local outroot="$1"
|
local outroot="$1"
|
||||||
|
|
||||||
if [[ "$WITH_CORE" == "xray" || "$WITH_CORE" == "both" ]]; then
|
if [[ "$WITH_CORE" == "xray" || "$WITH_CORE" == "both" ]]; then
|
||||||
download_xray "$outroot/bin/xray" || echo "[!] xray download failed (skipped)"
|
download_xray "$outroot/bin/xray" "$RID_DIR" || echo "[!] xray download failed (skipped)"
|
||||||
fi
|
fi
|
||||||
if [[ "$WITH_CORE" == "sing-box" || "$WITH_CORE" == "both" ]]; then
|
if [[ "$WITH_CORE" == "sing-box" || "$WITH_CORE" == "both" ]]; then
|
||||||
download_singbox "$outroot/bin/sing_box" || echo "[!] sing-box download failed (skipped)"
|
download_singbox "$outroot/bin/sing_box" "$RID_DIR" || echo "[!] sing-box download failed (skipped)"
|
||||||
fi
|
fi
|
||||||
download_geo_assets "$outroot" || echo "[!] Geo rules download failed (skipped)"
|
download_geo_assets "$outroot" || echo "[!] Geo rules download failed (skipped)"
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ "$FORCE_NETCORE" -eq 0 ]]; then
|
if [[ "$FORCE_NETCORE" -eq 0 ]]; then
|
||||||
if download_v2rayn_bundle "$STAGE/opt/v2rayN"; then
|
if download_v2rayn_bundle "$STAGE/opt/v2rayN" "$RID_DIR"; then
|
||||||
echo "[*] Using v2rayN bundle bin assets."
|
echo "[*] Using v2rayN bundle bin assets."
|
||||||
else
|
else
|
||||||
echo "[*] Bundle failed, fallback to separate core + rules."
|
echo "[*] Bundle failed, fallback to separate core + rules."
|
||||||
|
|
|
||||||
|
|
@ -210,46 +210,48 @@ echo "[*] GUI version resolved as: ${VERSION}"
|
||||||
# Helpers for core
|
# Helpers for core
|
||||||
download_xray() {
|
download_xray() {
|
||||||
# Download Xray core
|
# Download Xray core
|
||||||
local outdir="$1" ver="${XRAY_VER:-}" url tmp zipname="xray.zip"
|
local outdir="$1" rid="$2" ver="${XRAY_VER:-}" url tmp zipname="xray.zip"
|
||||||
mkdir -p "$outdir"
|
mkdir -p "$outdir"
|
||||||
if [[ -z "$ver" ]]; then
|
if [[ -z "$ver" ]]; then
|
||||||
ver="$(curl -fsSL https://api.github.com/repos/XTLS/Xray-core/releases/latest \
|
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
|
| grep -Eo '"tag_name":\s*"v[^"]+"' | sed -E 's/.*"v([^"]+)".*/\1/' | head -n1)" || true
|
||||||
fi
|
fi
|
||||||
[[ -n "$ver" ]] || { echo "[xray] Failed to get version"; return 1; }
|
[[ -n "$ver" ]] || { echo "[xray] Failed to get version"; return 1; }
|
||||||
if [[ "$RID_DIR" == "linux-arm64" ]]; then
|
if [[ "$rid" == "linux-arm64" ]]; then
|
||||||
url="https://github.com/XTLS/Xray-core/releases/download/v${ver}/Xray-linux-arm64-v8a.zip"
|
url="https://github.com/XTLS/Xray-core/releases/download/v${ver}/Xray-linux-arm64-v8a.zip"
|
||||||
else
|
else
|
||||||
url="https://github.com/XTLS/Xray-core/releases/download/v${ver}/Xray-linux-64.zip"
|
url="https://github.com/XTLS/Xray-core/releases/download/v${ver}/Xray-linux-64.zip"
|
||||||
fi
|
fi
|
||||||
echo "[+] Download xray: $url"
|
echo "[+] Download xray: $url"
|
||||||
tmp="$(mktemp -d)"; trap '[[ -n "${tmp:-}" ]] && rm -rf "$tmp"' RETURN
|
tmp="$(mktemp -d)"
|
||||||
curl -fL "$url" -o "$tmp/$zipname"
|
curl -fL "$url" -o "$tmp/$zipname"
|
||||||
unzip -q "$tmp/$zipname" -d "$tmp"
|
unzip -q "$tmp/$zipname" -d "$tmp"
|
||||||
install -m 755 "$tmp/xray" "$outdir/xray"
|
install -m 755 "$tmp/xray" "$outdir/xray"
|
||||||
|
rm -rf "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
download_singbox() {
|
download_singbox() {
|
||||||
# Download sing-box
|
# Download sing-box
|
||||||
local outdir="$1" ver="${SING_VER:-}" url tmp tarname="singbox.tar.gz" bin
|
local outdir="$1" rid="$2" ver="${SING_VER:-}" url tmp tarname="singbox.tar.gz" bin
|
||||||
mkdir -p "$outdir"
|
mkdir -p "$outdir"
|
||||||
if [[ -z "$ver" ]]; then
|
if [[ -z "$ver" ]]; then
|
||||||
ver="$(curl -fsSL https://api.github.com/repos/SagerNet/sing-box/releases/latest \
|
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
|
| grep -Eo '"tag_name":\s*"v[^"]+"' | sed -E 's/.*"v([^"]+)".*/\1/' | head -n1)" || true
|
||||||
fi
|
fi
|
||||||
[[ -n "$ver" ]] || { echo "[sing-box] Failed to get version"; return 1; }
|
[[ -n "$ver" ]] || { echo "[sing-box] Failed to get version"; return 1; }
|
||||||
if [[ "$RID_DIR" == "linux-arm64" ]]; then
|
if [[ "$rid" == "linux-arm64" ]]; then
|
||||||
url="https://github.com/SagerNet/sing-box/releases/download/v${ver}/sing-box-${ver}-linux-arm64.tar.gz"
|
url="https://github.com/SagerNet/sing-box/releases/download/v${ver}/sing-box-${ver}-linux-arm64.tar.gz"
|
||||||
else
|
else
|
||||||
url="https://github.com/SagerNet/sing-box/releases/download/v${ver}/sing-box-${ver}-linux-amd64.tar.gz"
|
url="https://github.com/SagerNet/sing-box/releases/download/v${ver}/sing-box-${ver}-linux-amd64.tar.gz"
|
||||||
fi
|
fi
|
||||||
echo "[+] Download sing-box: $url"
|
echo "[+] Download sing-box: $url"
|
||||||
tmp="$(mktemp -d)"; trap '[[ -n "${tmp:-}" ]] && rm -rf "$tmp"' RETURN
|
tmp="$(mktemp -d)"
|
||||||
curl -fL "$url" -o "$tmp/$tarname"
|
curl -fL "$url" -o "$tmp/$tarname"
|
||||||
tar -C "$tmp" -xzf "$tmp/$tarname"
|
tar -C "$tmp" -xzf "$tmp/$tarname"
|
||||||
bin="$(find "$tmp" -type f -name 'sing-box' | head -n1 || true)"
|
bin="$(find "$tmp" -type f -name 'sing-box' | head -n1 || true)"
|
||||||
[[ -n "$bin" ]] || { echo "[!] sing-box unpack failed"; return 1; }
|
[[ -n "$bin" ]] || { echo "[!] sing-box unpack failed"; rm -rf "$tmp"; return 1; }
|
||||||
install -m 755 "$bin" "$outdir/sing-box"
|
install -m 755 "$bin" "$outdir/sing-box"
|
||||||
|
rm -rf "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Move geo files to outroot/bin
|
# Move geo files to outroot/bin
|
||||||
|
|
@ -310,9 +312,9 @@ download_geo_assets() {
|
||||||
|
|
||||||
# Prefer the prebuilt v2rayN core bundle; then unify geo layout
|
# Prefer the prebuilt v2rayN core bundle; then unify geo layout
|
||||||
download_v2rayn_bundle() {
|
download_v2rayn_bundle() {
|
||||||
local outroot="$1"
|
local outroot="$1" rid="$2"
|
||||||
local url=""
|
local url=""
|
||||||
if [[ "$RID_DIR" == "linux-arm64" ]]; then
|
if [[ "$rid" == "linux-arm64" ]]; then
|
||||||
url="https://raw.githubusercontent.com/2dust/v2rayN-core-bin/refs/heads/master/v2rayN-linux-arm64.zip"
|
url="https://raw.githubusercontent.com/2dust/v2rayN-core-bin/refs/heads/master/v2rayN-linux-arm64.zip"
|
||||||
else
|
else
|
||||||
url="https://raw.githubusercontent.com/2dust/v2rayN-core-bin/refs/heads/master/v2rayN-linux-64.zip"
|
url="https://raw.githubusercontent.com/2dust/v2rayN-core-bin/refs/heads/master/v2rayN-linux-64.zip"
|
||||||
|
|
@ -378,10 +380,7 @@ build_for_arch() {
|
||||||
local RID_DIR="$rid"
|
local RID_DIR="$rid"
|
||||||
local PUBDIR
|
local PUBDIR
|
||||||
PUBDIR="$(dirname "$PROJECT")/bin/Release/net8.0/${RID_DIR}/publish"
|
PUBDIR="$(dirname "$PROJECT")/bin/Release/net8.0/${RID_DIR}/publish"
|
||||||
[[ -d "$PUBDIR" ]]
|
[[ -d "$PUBDIR" ]] || { echo "Publish directory not found: $PUBDIR"; return 1; }
|
||||||
|
|
||||||
# Make RID_DIR visible to download helpers (they read this var)
|
|
||||||
export RID_DIR
|
|
||||||
|
|
||||||
# Per-arch working area
|
# Per-arch working area
|
||||||
local PKGROOT="v2rayN-publish"
|
local PKGROOT="v2rayN-publish"
|
||||||
|
|
@ -400,10 +399,12 @@ build_for_arch() {
|
||||||
mkdir -p "$WORKDIR/$PKGROOT"
|
mkdir -p "$WORKDIR/$PKGROOT"
|
||||||
cp -a "$PUBDIR/." "$WORKDIR/$PKGROOT/"
|
cp -a "$PUBDIR/." "$WORKDIR/$PKGROOT/"
|
||||||
|
|
||||||
# Optional icon
|
# Required icon
|
||||||
local ICON_CANDIDATE
|
local ICON_CANDIDATE
|
||||||
ICON_CANDIDATE="$(dirname "$PROJECT")/../v2rayN.Desktop/v2rayN.png"
|
PROJECT_DIR="$(cd "$(dirname "$PROJECT")" && pwd)"
|
||||||
[[ -f "$ICON_CANDIDATE" ]] && cp "$ICON_CANDIDATE" "$WORKDIR/$PKGROOT/v2rayn.png" || true
|
ICON_CANDIDATE="$PROJECT_DIR/v2rayN.png"
|
||||||
|
[[ -f "$ICON_CANDIDATE" ]] || { echo "Required icon not found: $ICON_CANDIDATE"; return 1; }
|
||||||
|
cp "$ICON_CANDIDATE" "$WORKDIR/$PKGROOT/v2rayn.png"
|
||||||
|
|
||||||
# Prepare bin structure
|
# Prepare bin structure
|
||||||
mkdir -p "$WORKDIR/$PKGROOT/bin/xray" "$WORKDIR/$PKGROOT/bin/sing_box"
|
mkdir -p "$WORKDIR/$PKGROOT/bin/xray" "$WORKDIR/$PKGROOT/bin/sing_box"
|
||||||
|
|
@ -413,16 +414,16 @@ build_for_arch() {
|
||||||
local outroot="$1"
|
local outroot="$1"
|
||||||
|
|
||||||
if [[ "$WITH_CORE" == "xray" || "$WITH_CORE" == "both" ]]; then
|
if [[ "$WITH_CORE" == "xray" || "$WITH_CORE" == "both" ]]; then
|
||||||
download_xray "$outroot/bin/xray" || echo "[!] xray download failed (skipped)"
|
download_xray "$outroot/bin/xray" "$RID_DIR" || echo "[!] xray download failed (skipped)"
|
||||||
fi
|
fi
|
||||||
if [[ "$WITH_CORE" == "sing-box" || "$WITH_CORE" == "both" ]]; then
|
if [[ "$WITH_CORE" == "sing-box" || "$WITH_CORE" == "both" ]]; then
|
||||||
download_singbox "$outroot/bin/sing_box" || echo "[!] sing-box download failed (skipped)"
|
download_singbox "$outroot/bin/sing_box" "$RID_DIR" || echo "[!] sing-box download failed (skipped)"
|
||||||
fi
|
fi
|
||||||
download_geo_assets "$outroot" || echo "[!] Geo rules download failed (skipped)"
|
download_geo_assets "$outroot" || echo "[!] Geo rules download failed (skipped)"
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ "$FORCE_NETCORE" -eq 0 ]]; then
|
if [[ "$FORCE_NETCORE" -eq 0 ]]; then
|
||||||
if download_v2rayn_bundle "$WORKDIR/$PKGROOT"; then
|
if download_v2rayn_bundle "$WORKDIR/$PKGROOT" "$RID_DIR"; then
|
||||||
echo "[*] Using v2rayN bundle archive."
|
echo "[*] Using v2rayN bundle archive."
|
||||||
else
|
else
|
||||||
echo "[*] Bundle failed, fallback to separate core + rules."
|
echo "[*] Bundle failed, fallback to separate core + rules."
|
||||||
|
|
@ -523,10 +524,8 @@ Categories=Network;
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Icon
|
# Icon
|
||||||
if [ -f "%{_builddir}/__PKGROOT__/v2rayn.png" ]; then
|
install -dm0755 %{buildroot}%{_datadir}/icons/hicolor/256x256/apps
|
||||||
install -dm0755 %{buildroot}%{_datadir}/icons/hicolor/256x256/apps
|
install -m0644 %{_builddir}/__PKGROOT__/v2rayn.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/v2rayn.png
|
||||||
install -m0644 %{_builddir}/__PKGROOT__/v2rayn.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/v2rayn.png
|
|
||||||
fi
|
|
||||||
|
|
||||||
%post
|
%post
|
||||||
/usr/bin/update-desktop-database %{_datadir}/applications >/dev/null 2>&1 || true
|
/usr/bin/update-desktop-database %{_datadir}/applications >/dev/null 2>&1 || true
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue