From 47f04f4cb92da41bbc02c6c2b96aa51c8f71e5b4 Mon Sep 17 00:00:00 2001 From: WanWanYun Date: Mon, 10 Nov 2025 23:25:44 +0800 Subject: [PATCH] =?UTF-8?q?v1.1.0:=20=E6=96=B0=E5=A2=9E=E5=A4=9A=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=94=AF=E6=8C=81=E5=92=8C=E7=BB=9F=E4=B8=80=E5=8C=85?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主要更新: - 新增支持 Rocky Linux、AlmaLinux、Fedora、openSUSE - 实现统一包管理器检测机制 (APT/YUM/DNF/Zypper) - 优化系统识别逻辑,增加自动检测后备方案 - 完善阿里云镜像源配置,支持更多Linux发行版 - 重构所有系统相关代码,使用PKG_MANAGER变量统一管理 - 添加 install_nodejs_dnf/zypper 和 install_nginx_dnf/zypper 函数 - 更新 deploy_certbot 函数支持所有包管理器 技术改进: - detect_os(): 增强系统检测,自动识别包管理器类型 - configure_aliyun_mirror(): 支持8种主流Linux发行版镜像配置 - install_dependencies(): 统一使用PKG_MANAGER进行依赖安装 - 消除所有OS特定case语句,提高代码可维护性 支持的系统: - Ubuntu/Debian (APT) - CentOS 7/8, RHEL 7/8/9 (YUM/DNF) - Rocky Linux 8/9 (DNF) - AlmaLinux 8/9 (DNF) - Fedora 35+ (DNF) - openSUSE Leap (Zypper) --- install.sh | 238 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 224 insertions(+), 14 deletions(-) diff --git a/install.sh b/install.sh index 2870bb8..aff2384 100644 --- a/install.sh +++ b/install.sh @@ -3,7 +3,7 @@ ################################################################################ # 玩玩云 (WanWanYun) - 一键部署脚本 # 项目地址: https://gitee.com/yu-yon/vue-driven-cloud-storage -# 版本: v1.0.1 +# 版本: v1.1.0 ################################################################################ set -e @@ -73,10 +73,71 @@ detect_os() { . /etc/os-release OS=$ID OS_VERSION=$VERSION_ID + OS_NAME=$NAME else print_error "无法检测操作系统" exit 1 fi + + # 统一操作系统标识和包管理器检测 + case $OS in + ubuntu) + PKG_MANAGER="apt" + ;; + debian) + PKG_MANAGER="apt" + ;; + centos) + if [[ "${OS_VERSION%%.*}" -ge 8 ]]; then + PKG_MANAGER="dnf" + else + PKG_MANAGER="yum" + fi + ;; + rhel|redhat) + OS="rhel" + if [[ "${OS_VERSION%%.*}" -ge 8 ]]; then + PKG_MANAGER="dnf" + else + PKG_MANAGER="yum" + fi + ;; + rocky|rockylinux) + OS="rocky" + PKG_MANAGER="dnf" + ;; + almalinux|alma) + OS="almalinux" + PKG_MANAGER="dnf" + ;; + fedora) + PKG_MANAGER="dnf" + ;; + opensuse|opensuse-leap|opensuse-tumbleweed) + OS="opensuse" + PKG_MANAGER="zypper" + ;; + *) + # 自动检测包管理器作为后备方案 + print_warning "未识别的操作系统: $OS,尝试自动检测包管理器" + if command -v apt-get &> /dev/null; then + PKG_MANAGER="apt" + print_info "检测到APT包管理器" + elif command -v dnf &> /dev/null; then + PKG_MANAGER="dnf" + print_info "检测到DNF包管理器" + elif command -v yum &> /dev/null; then + PKG_MANAGER="yum" + print_info "检测到YUM包管理器" + elif command -v zypper &> /dev/null; then + PKG_MANAGER="zypper" + print_info "检测到Zypper包管理器" + else + print_error "无法检测到支持的包管理器" + exit 1 + fi + ;; + esac } # 检测系统架构 @@ -219,16 +280,91 @@ deb http://mirrors.aliyun.com/debian-security $(lsb_release -cs)-security main c EOF print_success "阿里云源配置完成" ;; - centos|rhel) - # CentOS配置 - if [[ ! -f /etc/yum.repos.d/CentOS-Base.repo.bak ]]; then - cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak + centos) + # 备份并配置CentOS阿里云源 + if [[ -f /etc/yum.repos.d/CentOS-Base.repo ]]; then + if [[ ! -f /etc/yum.repos.d/CentOS-Base.repo.bak ]]; then + cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak + fi fi - curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo + + CENTOS_VERSION="${OS_VERSION%%.*}" + if [[ "$CENTOS_VERSION" == "7" ]]; then + curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo + elif [[ "$CENTOS_VERSION" == "8" ]]; then + curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo + sed -i 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo + fi + yum clean all yum makecache print_success "阿里云源配置完成" ;; + rhel) + # RHEL使用EPEL和阿里云镜像 + print_info "配置RHEL阿里云镜像源..." + yum install -y epel-release + print_success "阿里云源配置完成" + ;; + rocky) + # 备份并配置Rocky Linux阿里云源 + if [[ -d /etc/yum.repos.d ]]; then + mkdir -p /etc/yum.repos.d/backup + cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2>/dev/null || true + fi + + sed -e 's|^mirrorlist=|#mirrorlist=|g' \ + -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \ + -i.bak /etc/yum.repos.d/rocky*.repo + + dnf clean all + dnf makecache + print_success "阿里云源配置完成" + ;; + almalinux) + # 备份并配置AlmaLinux阿里云源 + if [[ -d /etc/yum.repos.d ]]; then + mkdir -p /etc/yum.repos.d/backup + cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2>/dev/null || true + fi + + sed -e 's|^mirrorlist=|#mirrorlist=|g' \ + -e 's|^# baseurl=https://repo.almalinux.org|baseurl=https://mirrors.aliyun.com|g' \ + -i.bak /etc/yum.repos.d/almalinux*.repo + + dnf clean all + dnf makecache + print_success "阿里云源配置完成" + ;; + fedora) + # 备份并配置Fedora阿里云源 + if [[ -d /etc/yum.repos.d ]]; then + mkdir -p /etc/yum.repos.d/backup + cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2>/dev/null || true + fi + + sed -e 's|^metalink=|#metalink=|g' \ + -e 's|^#baseurl=http://download.example/pub/fedora/linux|baseurl=https://mirrors.aliyun.com/fedora|g' \ + -i.bak /etc/yum.repos.d/fedora*.repo /etc/yum.repos.d/fedora-updates*.repo + + dnf clean all + dnf makecache + print_success "阿里云源配置完成" + ;; + opensuse) + # 配置openSUSE阿里云源 + print_info "配置openSUSE阿里云镜像源..." + zypper mr -da + zypper ar -fcg https://mirrors.aliyun.com/opensuse/distribution/leap/\$releasever/repo/oss/ aliyun-oss + zypper ar -fcg https://mirrors.aliyun.com/opensuse/distribution/leap/\$releasever/repo/non-oss/ aliyun-non-oss + zypper ar -fcg https://mirrors.aliyun.com/opensuse/update/leap/\$releasever/oss/ aliyun-update-oss + zypper ar -fcg https://mirrors.aliyun.com/opensuse/update/leap/\$releasever/non-oss/ aliyun-update-non-oss + zypper ref + print_success "阿里云源配置完成" + ;; + *) + print_warning "当前系统($OS)暂不支持阿里云镜像源自动配置,使用官方源" + ;; esac } ################################################################################ @@ -238,18 +374,32 @@ EOF install_dependencies() { print_step "正在安装依赖环境..." - case $OS in - ubuntu|debian) + case $PKG_MANAGER in + apt) apt-get update - apt-get install -y curl wget git unzip + apt-get install -y curl wget git unzip lsb-release install_nodejs_apt install_nginx_apt ;; - centos|rhel) - yum install -y curl wget git unzip + yum) + yum install -y curl wget git unzip redhat-lsb-core install_nodejs_yum install_nginx_yum ;; + dnf) + dnf install -y curl wget git unzip redhat-lsb-core + install_nodejs_dnf + install_nginx_dnf + ;; + zypper) + zypper install -y curl wget git unzip lsb-release + install_nodejs_zypper + install_nginx_zypper + ;; + *) + print_error "不支持的包管理器: $PKG_MANAGER" + exit 1 + ;; esac install_pm2 @@ -311,6 +461,60 @@ install_nginx_yum() { print_success "Nginx 安装完成" } +install_nodejs_dnf() { + if command -v node &> /dev/null; then + NODE_VER=$(node -v | cut -d'v' -f2 | cut -d'.' -f1) + if [[ $NODE_VER -ge 18 ]]; then + print_success "Node.js 已安装: $(node -v)" + return + fi + fi + + print_info "正在安装 Node.js ${NODE_VERSION}.x..." + curl -fsSL https://rpm.nodesource.com/setup_${NODE_VERSION}.x | bash - + dnf install -y nodejs + print_success "Node.js 安装完成: $(node -v)" +} + +install_nginx_dnf() { + if command -v nginx &> /dev/null; then + print_success "Nginx 已安装: $(nginx -v 2>&1 | cut -d'/' -f2)" + return + fi + + print_info "正在安装 Nginx..." + dnf install -y nginx + systemctl enable nginx + print_success "Nginx 安装完成" +} + +install_nodejs_zypper() { + if command -v node &> /dev/null; then + NODE_VER=$(node -v | cut -d'v' -f2 | cut -d'.' -f1) + if [[ $NODE_VER -ge 18 ]]; then + print_success "Node.js 已安装: $(node -v)" + return + fi + fi + + print_info "正在安装 Node.js ${NODE_VERSION}.x..." + # openSUSE使用官方仓库的Node.js + zypper install -y nodejs${NODE_VERSION} + print_success "Node.js 安装完成: $(node -v)" +} + +install_nginx_zypper() { + if command -v nginx &> /dev/null; then + print_success "Nginx 已安装: $(nginx -v 2>&1 | cut -d'/' -f2)" + return + fi + + print_info "正在安装 Nginx..." + zypper install -y nginx + systemctl enable nginx + print_success "Nginx 安装完成" +} + install_pm2() { if command -v pm2 &> /dev/null; then print_success "PM2 已安装: $(pm2 -v)" @@ -510,13 +714,19 @@ deploy_certbot() { print_step "使用 Certbot 部署SSL证书..." # 安装certbot - case $OS in - ubuntu|debian) + case $PKG_MANAGER in + apt) apt-get install -y certbot python3-certbot-nginx ;; - centos|rhel) + yum) yum install -y certbot python3-certbot-nginx ;; + dnf) + dnf install -y certbot python3-certbot-nginx + ;; + zypper) + zypper install -y certbot python3-certbot-nginx + ;; esac # 申请证书