From 3a2988c06812605fda074f240a284ee6c7202c8d Mon Sep 17 00:00:00 2001 From: Michael S2pac Date: Sun, 23 Nov 2025 16:43:17 +0300 Subject: [PATCH] DRY: unified sh script for geodata update --- x-ui.sh | 42 +++++++++--------- xray-tools.sh | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 20 deletions(-) create mode 100644 xray-tools.sh diff --git a/x-ui.sh b/x-ui.sh index e1648e51..d9112b50 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -6,6 +6,8 @@ blue='\033[0;34m' yellow='\033[0;33m' plain='\033[0m' +source xray-tools.sh + #Add some basic function here function LOGD() { echo -e "${yellow}[DEG] $* ${plain}" @@ -863,26 +865,26 @@ delete_ports() { fi } -update_all_geofiles() { - update_main_geofiles - update_ir_geofiles - update_ru_geofiles -} - -update_main_geofiles() { - wget -O geoip.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat - wget -O geosite.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat -} - -update_ir_geofiles() { - wget -O geoip_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geoip.dat - wget -O geosite_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geosite.dat -} - -update_ru_geofiles() { - wget -O geoip_RU.dat https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geoip.dat - wget -O geosite_RU.dat https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geosite.dat -} +#update_all_geofiles() { +# update_main_geofiles +# update_ir_geofiles +# update_ru_geofiles +#} +# +#update_main_geofiles() { +# wget -O geoip.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat +# wget -O geosite.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat +#} +# +#update_ir_geofiles() { +# wget -O geoip_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geoip.dat +# wget -O geosite_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geosite.dat +#} +# +#update_ru_geofiles() { +# wget -O geoip_RU.dat https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geoip.dat +# wget -O geosite_RU.dat https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geosite.dat +#} update_geo() { echo -e "${green}\t1.${plain} Loyalsoldier (geoip.dat, geosite.dat)" diff --git a/xray-tools.sh b/xray-tools.sh new file mode 100644 index 00000000..c28c8537 --- /dev/null +++ b/xray-tools.sh @@ -0,0 +1,117 @@ +#!/bin/sh + +update_all_geofiles() { + update_main_geofiles + update_ir_geofiles + update_ru_geofiles +} + +update_main_geofiles() { + wget -O geoip.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat + wget -O geosite.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat +} + +update_ir_geofiles() { + wget -O geoip_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geoip.dat + wget -O geosite_IR.dat https://github.com/chocolate4u/Iran-v2ray-rules/releases/latest/download/geosite.dat +} + +update_ru_geofiles() { + wget -O geoip_RU.dat https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geoip.dat + wget -O geosite_RU.dat https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/geosite.dat +} + +update_geodata_in_docker() { + WORKDIR="$1" + OLD_DIR=$(pwd) + trap 'cd "$OLD_DIR"' EXIT + + echo "[$(date)] Running update_geodata" + + if [ ! -d "$WORKDIR" ]; then + mkdir -p "$WORKDIR" + fi + cd "$WORKDIR" + + update_all_geofiles + echo "[$(date)] All geo files have been updated successfully!" +} + + +update_xray_core() { + TARGETARCH="$1" + WORKDIR="$2" + XRAY_VERSION="$3" + + OLD_DIR=$(pwd) + trap 'cd "$OLD_DIR"' EXIT + + echo "[$(date)] Running update_xray_core" + + case $1 in + amd64) + ARCH="64" + FNAME="amd64" + ;; + i386) + ARCH="32" + FNAME="i386" + ;; + armv8 | arm64 | aarch64) + ARCH="arm64-v8a" + FNAME="arm64" + ;; + armv7 | arm | arm32) + ARCH="arm32-v7a" + FNAME="arm32" + ;; + armv6) + ARCH="arm32-v6" + FNAME="armv6" + ;; + *) + ARCH="64" + FNAME="amd64" + ;; + esac + + if [ ! -d "$WORKDIR" ]; then + mkdir -p "$WORKDIR" + fi + cd "$WORKDIR" + + wget -q "https://github.com/XTLS/Xray-core/releases/download/${XRAY_VERSION}/Xray-linux-${ARCH}.zip" + unzip "Xray-linux-${ARCH}.zip" -d ./xray-unzip + cp ./xray-unzip/xray ./"xray-linux-${FNAME}" + rm -r xray-unzip + rm "Xray-linux-${ARCH}.zip" + } + +# --- dispatcher: вызываем функции по имени ТОЛЬКО если скрипт запущен как файл --- +# Предполагаем, что файл называется xray-updates.sh +if [ "${0##*/}" = "xray-tools.sh" ]; then + cmd="$1" + shift || true + + case "$cmd" in + update_xray_core) + # args: TARGETARCH WORKDIR XRAY_VERSION + update_xray_core "$@" + ;; + update_geodata_in_docker) + # args: WORKDIR + update_geodata_in_docker "$@" + ;; + ""|help|-h|--help) + echo "Usage:" + echo " $0 update_xray_core TARGETARCH WORKDIR XRAY_VERSION" + echo " $0 update_geodata_in_docker WORKDIR" + exit 1 + ;; + *) + echo "Unknown command: $cmd" >&2 + echo "Try: $0 help" >&2 + exit 1 + ;; + esac +fi \ No newline at end of file