110 lines
3.5 KiB
Bash
110 lines
3.5 KiB
Bash
#!/bin/bash
|
||
|
||
# =========================================================
|
||
# X-UI 多架构自动安装 - 容错增强版
|
||
# =========================================================
|
||
|
||
# 1. 基础环境自动修复(防止系统啥都没装)
|
||
prepare_environment() {
|
||
echo -e "\033[32m[1/5] 正在安装基础组件 (wget/curl/tar)...\033[0m"
|
||
if command -v apt-get >/dev/null 2>&1; then
|
||
apt-get update -y && apt-get install -y wget curl tar gzip ca-certificates || true
|
||
elif command -v yum >/dev/null 2>&1; then
|
||
yum install -y wget curl tar gzip ca-certificates || true
|
||
fi
|
||
}
|
||
|
||
# 2. 架构智能检测
|
||
detect_arch() {
|
||
echo -e "\033[32m[2/5] 检测系统架构...\033[0m"
|
||
local raw_arch=$(uname -m)
|
||
case "$raw_arch" in
|
||
x86_64) ARCH="amd64" ;;
|
||
aarch64|arm64) ARCH="arm64" ;;
|
||
i386|i486|i586|i686) ARCH="386" ;;
|
||
armv7l) ARCH="armv7" ;;
|
||
s390x) ARCH="s390x" ;;
|
||
*) echo "不支持的架构: $raw_arch"; exit 1 ;;
|
||
esac
|
||
}
|
||
|
||
# 3. 冗余下载方案(如果源1失败,尝试源2)
|
||
download_xui() {
|
||
echo -e "\033[32m[3/5] 正在下载程序包...\033[0m"
|
||
local filename="x-ui-linux-${ARCH}.tar.gz"
|
||
local base_url="https://g1.vps7k7k.xyz/xui"
|
||
local success=false
|
||
|
||
# [cite_start]方案 A: 标准下载 [cite: 36, 38]
|
||
if wget --no-check-certificate -O "$filename" "${base_url}/${filename}" || \
|
||
curl -L -k -o "$filename" "${base_url}/${filename}"; then
|
||
success=true
|
||
fi
|
||
|
||
# [cite_start]方案 B: ARM64 特殊备份名下载 [cite: 12, 44]
|
||
if [ "$success" = false ] && [ "$ARCH" = "arm64" ]; then
|
||
echo "尝试 ARM64 备用链接..."
|
||
wget --no-check-certificate -O "$filename" "${base_url}/x-ui-linux-arm64%20(1).tar.gz" && success=true
|
||
fi
|
||
|
||
if [ "$success" = false ]; then
|
||
echo "错误:所有下载源均失效!"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
# 4. 双引擎解压(防止 tar 版本过旧)
|
||
extract_xui() {
|
||
echo -e "\033[32m[4/5] 正在部署文件...\033[0m"
|
||
local file="x-ui-linux-${ARCH}.tar.gz"
|
||
|
||
mkdir -p /usr/local/x-ui
|
||
# [cite_start]方式 1: 直接解压 [cite: 52]
|
||
if ! tar -zxf "$file" -C /usr/local/; then
|
||
echo "标准解压失败,尝试备用引擎..."
|
||
# [cite_start]方式 2: 管道解压 [cite: 53]
|
||
gunzip -c "$file" | tar x -C /usr/local/
|
||
fi
|
||
|
||
# [cite_start]权限修复 [cite: 56, 61, 62]
|
||
chmod +x /usr/local/x-ui/x-ui /usr/local/x-ui/bin/xray-linux-* 2>/dev/null || true
|
||
[cite_start]ln -sf /usr/local/x-ui/x-ui /usr/bin/x-ui [cite: 68]
|
||
}
|
||
|
||
# [cite_start]5. 服务启动与初始化 [cite: 64, 70, 71]
|
||
finalize_install() {
|
||
echo -e "\033[32m[5/5] 正在初始化面板...\033[0m"
|
||
|
||
# [cite_start]强制写入服务文件,不依赖解压出的文件 [cite: 64]
|
||
cat > /etc/systemd/system/x-ui.service <<EOF
|
||
[Unit]
|
||
Description=x-ui Service
|
||
After=network.target
|
||
[Service]
|
||
Type=simple
|
||
WorkingDirectory=/usr/local/x-ui/
|
||
ExecStart=/usr/local/x-ui/x-ui
|
||
Restart=on-failure
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
|
||
systemctl daemon-reload
|
||
systemctl enable x-ui
|
||
systemctl restart x-ui
|
||
|
||
sleep 2
|
||
# [cite_start]自动配置默认账号密码 (3344/3344) [cite: 70, 71]
|
||
echo -e "9\n8443\ny" | x-ui >/dev/null 2>&1 || true
|
||
echo -e "6\ny\n3344\n3344\ny" | x-ui >/dev/null 2>&1 || true
|
||
|
||
echo -e "\033[36m安装完成!面板端口: 8443,账号密码均为 3344\033[0m"
|
||
}
|
||
|
||
# 执行
|
||
prepare_environment
|
||
detect_arch
|
||
download_xui
|
||
extract_xui
|
||
finalize_install
|