139 lines
3.9 KiB
Plaintext
139 lines
3.9 KiB
Plaintext
# ==========================================
|
||
# 这一段是放在服务器上的“加载器”脚本
|
||
# ==========================================
|
||
|
||
# 1. 把真正的安装脚本写入到本地文件
|
||
cat > /root/docker-install-zip.sh <<'EOF'
|
||
#!/bin/bash
|
||
|
||
# ================= 配置区 =================
|
||
ZIP_NAME="dockde12.zip"
|
||
WORKDIR="/root/docker-offline"
|
||
# 主下载地址
|
||
URL1="https://freeyx.vps3344.dpdns.org/xui/dockde12.zip"
|
||
# 备用下载地址
|
||
URL2="https://pub-b69a7194f4ea42fba6aa990c49bded91.r2.dev/xui/dockde12.zip"
|
||
|
||
# ================= 颜色与日志 =================
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m'
|
||
|
||
log_info() { echo -e "${GREEN}[INFO] $1${NC}"; }
|
||
log_warn() { echo -e "${YELLOW}[WARN] $1${NC}"; }
|
||
log_err() { echo -e "${RED}[ERROR] $1${NC}"; }
|
||
|
||
# ================= 脚本开始 =================
|
||
echo -e "${GREEN}===== Docker ZIP 版 智能安装脚本 =====${NC}"
|
||
date
|
||
|
||
# 0. 权限检查
|
||
if [ "$(id -u)" != "0" ]; then
|
||
log_err "必须使用 root 权限运行此脚本!"
|
||
exit 1
|
||
fi
|
||
|
||
# 1. 关键:检查并安装 unzip (解决之前的跳过问题)
|
||
log_info "[1/7] 环境自检: unzip 工具"
|
||
if ! command -v unzip >/dev/null 2>&1; then
|
||
log_warn "未找到 unzip 命令,正在尝试自动安装..."
|
||
apt-get update -y >/dev/null 2>&1
|
||
apt-get install -y unzip >/dev/null 2>&1
|
||
|
||
# 再次检查
|
||
if ! command -v unzip >/dev/null 2>&1; then
|
||
log_err "无法安装 unzip!"
|
||
log_err "可能原因:系统断网或源有问题。"
|
||
log_err "解决方案:请先手动执行 'apt install unzip' 或更换为 tar.gz 包。"
|
||
exit 1
|
||
fi
|
||
log_info "unzip 安装成功!"
|
||
else
|
||
log_info "unzip 已存在,准备就绪。"
|
||
fi
|
||
|
||
# 2. 目录检查与创建
|
||
log_info "[2/7] 初始化工作目录..."
|
||
if [ -d "$WORKDIR" ]; then
|
||
log_warn "目录已存在: $WORKDIR"
|
||
log_warn "清理旧文件以防冲突..."
|
||
rm -f "$WORKDIR/$ZIP_NAME"
|
||
rm -rf "$WORKDIR/debs"
|
||
else
|
||
log_info "创建新目录: $WORKDIR"
|
||
mkdir -p "$WORKDIR"
|
||
fi
|
||
|
||
cd "$WORKDIR" || exit 1
|
||
|
||
# 3. 下载文件 (智能切换 curl/wget)
|
||
log_info "[3/7] 下载离线包..."
|
||
|
||
download_file() {
|
||
if command -v curl >/dev/null 2>&1; then
|
||
curl -L --fail --connect-timeout 15 --retry 2 "$1" -o "$2"
|
||
elif command -v wget >/dev/null 2>&1; then
|
||
wget --timeout=15 --tries=2 -O "$2" "$1"
|
||
else
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
if download_file "$URL1" "$ZIP_NAME"; then
|
||
log_info "主线路下载成功!"
|
||
else
|
||
log_warn "主线路失败,切换备用线路..."
|
||
if download_file "$URL2" "$ZIP_NAME"; then
|
||
log_info "备用线路下载成功!"
|
||
else
|
||
log_err "下载失败!请检查网络连通性。"
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
# 4. 解压
|
||
log_info "[4/7] 解压文件..."
|
||
mkdir -p debs
|
||
unzip -o "$ZIP_NAME" -d debs >/dev/null 2>&1 || {
|
||
log_err "解压失败!文件可能损坏。"
|
||
exit 1
|
||
}
|
||
|
||
cd debs || exit 1
|
||
|
||
# 5. 安装 DEB
|
||
log_info "[5/7] 开始安装 Docker DEB 包..."
|
||
dpkg -i *.deb
|
||
# 不立即退出,给 apt 修复的机会
|
||
|
||
# 6. 依赖修复与服务启动
|
||
log_info "[6/7] 检查依赖并启动服务..."
|
||
# 尝试修复可能的依赖缺失
|
||
apt-get -f install -y >/dev/null 2>&1
|
||
|
||
systemctl daemon-reload
|
||
systemctl enable docker >/dev/null 2>&1
|
||
systemctl start docker >/dev/null 2>&1
|
||
|
||
# 7. 结果验证
|
||
log_info "[7/7] 最终验证..."
|
||
if command -v docker >/dev/null 2>&1; then
|
||
echo -e "----------------------------------------------------"
|
||
echo -e "${GREEN}Docker 安装成功!${NC}"
|
||
echo -e "版本: $(docker --version)"
|
||
echo -e "状态: $(systemctl is-active docker)"
|
||
echo -e "----------------------------------------------------"
|
||
else
|
||
log_err "Docker 未能成功启动,请检查上方报错信息。"
|
||
exit 1
|
||
fi
|
||
EOF
|
||
|
||
# 2. 赋予执行权限
|
||
chmod +x /root/docker-install-zip.sh
|
||
|
||
# 3. 【关键修改】立即执行这个脚本!
|
||
# 如果不加这行,它只会生成文件然后静默退出
|
||
bash /root/docker-install-zip.sh
|