This commit is contained in:
starry
2025-07-16 12:35:21 +00:00
commit 1f7b4314c3
49 changed files with 18341 additions and 0 deletions

182
proxy/xray.sh Normal file
View File

@@ -0,0 +1,182 @@
#!/usr/bin/env bash
# Xray 安装脚本(极简版)
# 固定版本 v1.8.4
# 支持通过 -p 参数设置 GitHub 加速前缀(如 https://gh-proxy.com/
# 仅适用于 Linux 系统,需 root 权限
XRAY_VERSION="v1.8.4"
XRAY_BIN_URL="github.com/XTLS/Xray-core/releases/download/${XRAY_VERSION}/Xray-linux-64.zip"
INSTALL_PATH="/usr/local/bin/xray"
SERVICE_PATH="/etc/systemd/system/xray.service"
CONFIG_PATH="/usr/local/etc/xray/config.json"
# github文件加速前缀
GH_PROXY="https://gh-proxy.com"
show_help() {
echo "用法: $0 [-p <gh-proxy前缀>] [-u|--uninstall]"
echo " -p 可选GitHub 文件加速前缀,如 https://gh-proxy.com"
echo " -u, --uninstall 卸载 Xray 及所有相关文件和服务"
echo "此脚本会自动下载安装 Xray ${XRAY_VERSION},并注册 systemd 服务。"
exit 0
}
# 检查 root 权限
if [[ "$(id -u)" -ne 0 ]]; then
echo "请以 root 用户运行此脚本。"
exit 1
fi
# 解析参数
while [[ $# -gt 0 ]]; do
case "$1" in
-p)
shift
GH_PROXY="$1"
;;
-u|--uninstall)
echo "正在卸载 Xray ..."
systemctl stop xray 2>/dev/null
systemctl disable xray 2>/dev/null
rm -f /usr/local/bin/xray
rm -rf /usr/local/etc/xray
rm -f /etc/systemd/system/xray.service
rm -rf /var/log/xray
systemctl daemon-reload
echo "Xray 及相关文件已卸载。"
exit 0
;;
-h|--help)
show_help
;;
*)
show_help
;;
esac
shift
done
# 自动安装依赖curl 和 unzip
install_pkg() {
PKG_NAME="$1"
if command -v apt >/dev/null 2>&1; then
apt update && apt install -y "$PKG_NAME"
elif command -v dnf >/dev/null 2>&1; then
dnf install -y "$PKG_NAME"
elif command -v yum >/dev/null 2>&1; then
yum install -y "$PKG_NAME"
elif command -v zypper >/dev/null 2>&1; then
zypper install -y "$PKG_NAME"
elif command -v pacman >/dev/null 2>&1; then
pacman -Sy --noconfirm "$PKG_NAME"
elif command -v emerge >/dev/null 2>&1; then
emerge -qv "$PKG_NAME"
else
echo "未检测到支持的包管理器,请手动安装 $PKG_NAME 后重试。"
exit 1
fi
}
for cmd in curl unzip; do
if ! command -v $cmd >/dev/null 2>&1; then
echo "缺少依赖: $cmd,正在尝试自动安装..."
install_pkg "$cmd"
if ! command -v $cmd >/dev/null 2>&1; then
echo "$cmd 安装失败,请手动安装后重试。"
exit 1
fi
fi
done
TMP_DIR="$(mktemp -d)"
ZIP_FILE="$TMP_DIR/xray.zip"
# 拼接加速前缀
if [[ -n "$GH_PROXY" ]]; then
DOWNLOAD_URL="${GH_PROXY%/}/$XRAY_BIN_URL"
else
DOWNLOAD_URL="https://$XRAY_BIN_URL"
fi
echo "下载 Xray: $DOWNLOAD_URL"
curl -L -o "$ZIP_FILE" "$DOWNLOAD_URL"
if [[ $? -ne 0 ]]; then
echo "下载失败,请检查网络或加速前缀。"
rm -rf "$TMP_DIR"
exit 1
fi
unzip -q "$ZIP_FILE" -d "$TMP_DIR"
if [[ $? -ne 0 ]]; then
echo "解压失败。"
rm -rf "$TMP_DIR"
exit 1
fi
install -m 755 "$TMP_DIR/xray" "$INSTALL_PATH"
# 生成 systemd 服务文件(与原脚本一致,自动适配 User 和权限)
INSTALL_USER="root"
if [[ -f '/usr/local/bin/xray' ]]; then
# 若已存在旧服务文件,尝试读取 User 字段
OLD_USER=$(grep '^[ \t]*User[ \t]*=' /etc/systemd/system/xray.service 2>/dev/null | tail -n 1 | awk -F = '{print $2}' | awk '{print $1}')
if [[ -n "$OLD_USER" ]]; then
INSTALL_USER="$OLD_USER"
fi
fi
if ! id "$INSTALL_USER" >/dev/null 2>&1; then
INSTALL_USER="root"
fi
INSTALL_USER_UID=$(id -u "$INSTALL_USER")
# 权限相关字段
temp_CapabilityBoundingSet="CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE"
temp_AmbientCapabilities="AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE"
temp_NoNewPrivileges="NoNewPrivileges=true"
if [[ "$INSTALL_USER_UID" -eq 0 ]]; then
temp_CapabilityBoundingSet="#${temp_CapabilityBoundingSet}"
temp_AmbientCapabilities="#${temp_AmbientCapabilities}"
temp_NoNewPrivileges="#${temp_NoNewPrivileges}"
fi
cat > "$SERVICE_PATH" <<EOF
[Unit]
Description=Xray Service
Documentation=https://github.com/xtls
After=network.target nss-lookup.target
[Service]
User=$INSTALL_USER
${temp_CapabilityBoundingSet}
${temp_AmbientCapabilities}
${temp_NoNewPrivileges}
ExecStart=$INSTALL_PATH run -config $CONFIG_PATH
Restart=on-failure
RestartPreventExitStatus=23
LimitNPROC=10000
LimitNOFILE=1000000
[Install]
WantedBy=multi-user.target
EOF
chmod 644 "$SERVICE_PATH"
systemctl daemon-reload
# 生成最简配置文件
mkdir -p "$(dirname $CONFIG_PATH)"
echo '{}' > "$CONFIG_PATH"
# 启动并设置开机自启
systemctl enable xray
systemctl restart xray
sleep 1
if systemctl is-active --quiet xray; then
echo "Xray ${XRAY_VERSION} 安装并启动成功。"
else
echo "Xray 启动失败,请检查日志。"
fi
# 清理临时文件
rm -rf "$TMP_DIR"