From 9cb9a7d670db5a16484af0ebe3189b556c872228 Mon Sep 17 00:00:00 2001 From: Meow <197331664+Meo597@users.noreply.github.com> Date: Fri, 24 Apr 2026 21:46:32 +0800 Subject: [PATCH] Geodata: Support runtime updates by Xray service --- alpinelinux/install-release.sh | 6 +++--- install-release.sh | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/alpinelinux/install-release.sh b/alpinelinux/install-release.sh index 8a7cd02..7a723fe 100644 --- a/alpinelinux/install-release.sh +++ b/alpinelinux/install-release.sh @@ -159,9 +159,9 @@ is_it_running() { install_xray() { install -m 755 "${TMP_DIRECTORY}xray" "/usr/local/bin/xray" - install -d /usr/local/share/xray/ - install -m 644 "${TMP_DIRECTORY}geoip.dat" "/usr/local/share/xray/geoip.dat" - install -m 644 "${TMP_DIRECTORY}geosite.dat" "/usr/local/share/xray/geosite.dat" + install -d -m 755 -o nobody -g nobody /usr/local/share/xray/ + install -m 644 -o nobody -g nobody "${TMP_DIRECTORY}geoip.dat" "/usr/local/share/xray/geoip.dat" + install -m 644 -o nobody -g nobody "${TMP_DIRECTORY}geosite.dat" "/usr/local/share/xray/geosite.dat" } install_confdir() { diff --git a/install-release.sh b/install-release.sh index e78442b..b2111b3 100755 --- a/install-release.sh +++ b/install-release.sh @@ -475,16 +475,20 @@ install_file() { if [[ "$NAME" == 'xray' ]]; then install -m 755 "${TMP_DIRECTORY}/$NAME" "/usr/local/bin/$NAME" elif [[ "$NAME" == 'geoip.dat' ]] || [[ "$NAME" == 'geosite.dat' ]]; then - install -m 644 "${TMP_DIRECTORY}/$NAME" "${DAT_PATH}/$NAME" + install -m 644 -o "$INSTALL_USER_UID" -g "$INSTALL_USER_GID" "${TMP_DIRECTORY}/$NAME" "${DAT_PATH}/$NAME" fi } +install_geodata_dir() { + install -d -m 755 -o "$INSTALL_USER_UID" -g "$INSTALL_USER_GID" "$DAT_PATH" +} + install_xray() { # Install Xray binary to /usr/local/bin/ and $DAT_PATH install_file xray # If the file exists, geoip.dat and geosite.dat will not be installed or updated if [[ "$NO_GEODATA" -eq '0' ]] && [[ ! -f "${DAT_PATH}/.undat" ]]; then - install -d "$DAT_PATH" + install_geodata_dir install_file geoip.dat install_file geosite.dat GEODATA='1' @@ -718,9 +722,9 @@ install_geodata() { fi done cd - >/dev/null || exit 1 - install -d "$DAT_PATH" - install -m 644 "${dir_tmp}"/${file_dlc} "${DAT_PATH}"/${file_site} - install -m 644 "${dir_tmp}"/${file_ip} "${DAT_PATH}"/${file_ip} + install_geodata_dir + install -m 644 -o "$INSTALL_USER_UID" -g "$INSTALL_USER_GID" "${dir_tmp}"/${file_dlc} "${DAT_PATH}"/${file_site} + install -m 644 -o "$INSTALL_USER_UID" -g "$INSTALL_USER_GID" "${dir_tmp}"/${file_ip} "${DAT_PATH}"/${file_ip} rm -r "${dir_tmp}" exit 0 } @@ -840,7 +844,10 @@ main() { [[ "$HELP" -eq '1' ]] && show_help [[ "$CHECK" -eq '1' ]] && check_update [[ "$REMOVE" -eq '1' ]] && remove_xray - [[ "$INSTALL_GEODATA" -eq '1' ]] && install_geodata + [[ "$INSTALL_GEODATA" -eq '1' ]] && { + check_install_user + install_geodata + } # Check if the user is effective check_install_user