PVE8直接升9脚本

本脚本不提供任何形式的保证。使用本脚本所造成的一切风险由您自行承担。

本脚本可以PVE8直升PVE9,复制粘贴本页面代码推荐用nano pve9.sh粘贴保存,在通过chmod +x pve9.sh赋予权限

代码部分:

#!/bin/bash

BLUE='\033[0;34m'
NC='\033[0m' # No Color

logo() {
    clear
    echo -e "${BLUE}  ____                                  _                                        ____   _                       _ ${NC}"
    echo -e "${BLUE} / ___|  __      __   ___    _ __    __| |  ___   _ __ ___     __ _   _ __      / ___| | |   ___    _   _    __| |${NC}"
    echo -e "${BLUE} \\___ \\  \\ \\ /\\ / /  / _ \\  | '__|  / _\` | / __| | '_ \` _ \\   / _\` | | '_ \\    | |     | |  / _ \\  | | | |  / _\` |${NC}"
    echo -e "${BLUE}  ___) |  \\ V  V /  | (_) | | |    | (_| | \\__ \\ | | | | | | | (_| | | | | |   | |___  | | | (_) | | |_| | | (_| |${NC}"
    echo -e "${BLUE} |____/    \\_/\\_/    \\___/  |_|     \\__,_| |___/ |_| |_| |_|  \\__,_| |_| |_|    \\____| |_|  \\___/   \\__,_|  \\__,_|${NC}"
    echo -e "${BLUE}                                                                                                                  ${NC}"
    echo -e "\n"
}

show_ad() {
    website_title="【剑客云】BGP多线、高性能联机服务器: http://awacode.top"
    echo -e "========================================================================================================================"
    echo -e "  $website_title"
    echo -e "========================================================================================================================"
    echo ""
}

optimize_pve8() {
    echo "--- 步骤 1: 优化 PVE8 环境 ---"
    echo "此步骤将删除旧的软件源配置并替换为基于 Debian Bookworm 的国内镜像源。"
    read -p "确定要继续吗? (y/n): " confirm
    if [ "$confirm" != "y" ]; then
        echo "操作已取消。"
        return
    fi

    dir="/etc/apt/sources.list.d/"
    file="/etc/apt/sources.list"

    if [ -d "$dir" ]; then
      echo "正在删除目录 $dir..."
      rm -rf "$dir"
      echo "目录已删除。"
    else
      echo "目录 $dir 不存在,跳过删除。"
    fi

    echo "正在替换 $file 的内容..."

    cat > "$file" <<EOF
deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian-security bookworm-security main
deb https://mirrors.ustc.edu.cn/proxmox/debian bookworm pve-no-subscription
EOF

    echo "文件内容已替换。"

    echo "正在更新软件源..."
    apt update

    echo "正在更新软件包 (apt dist-upgrade)..."
    echo "请注意:此过程可能需要一些时间。"
    apt dist-upgrade -y

    echo "--- PVE8 环境优化完成! ---"
    read -p "按任意键返回主菜单..."
}

pre_upgrade_prep() {
    echo "--- 步骤 2: 升级前准备 (微码 & sysctl) ---"

    echo "正在检测 CPU 类型..."
    cpu_vendor=$(grep -m 1 "vendor_id" /proc/cpuinfo | awk '{print $3}')
    microcode_pkg=""

    if [ "$cpu_vendor" == "GenuineIntel" ]; then
        echo "检测到 Intel CPU。"
        microcode_pkg="intel-microcode"
    elif [ "$cpu_vendor" == "AuthenticAMD" ]; then
        echo "检测到 AMD CPU。"
        microcode_pkg="amd64-microcode"
    else
        echo "未能自动识别 CPU 厂商 ($cpu_vendor)。跳过微码安装步骤。"
    fi

    if [ -n "$microcode_pkg" ]; then
        read -p "(可选但推荐)是否要安装 CPU 微码包 ($microcode_pkg)? (y/n): " confirm
        if [ "$confirm" == "y" ]; then
            echo "正在安装 $microcode_pkg..."
            apt install "$microcode_pkg" -y
            echo "$microcode_pkg 安装完成。"
        else
            echo "跳过安装 CPU 微码。"
        fi
    fi

    echo ""
    sysctl_conf="/etc/sysctl.conf"
    echo "正在检查 sysctl 配置..."
    if [ -s "$sysctl_conf" ] && grep -q -v -E "^\s*#|^\s*$" "$sysctl_conf"; then
        echo "----------------------------------------------------------------"
        echo "重要提醒:检测到您的 /etc/sysctl.conf 文件中包含有效配置。"
        echo "在 Debian 12 (Trixie) 中,推荐将自定义 sysctl 配置放入 /etc/sysctl.d/ 目录下的 .conf 文件中。"
        echo "建议您手动将 /etc/sysctl.conf 中的配置迁移到一个新文件中,例如:/etc/sysctl.d/99-custom.conf"
        echo "迁移后,请确保原 /etc/sysctl.conf 文件为空或只包含注释。"
        echo "----------------------------------------------------------------"
    else
        echo "未在 /etc/sysctl.conf 中检测到有效的自定义配置,无需操作。"
    fi

    echo ""
    echo "--- 升级前准备完成! ---"
    read -p "按任意键返回主菜单..."
}

check_environment() {
    echo "--- 步骤 3: 检查升级环境 ---"
    echo "将运行 'pve8to9' 工具来检查系统是否准备好升级到 Proxmox VE 9。"
    echo "请仔细阅读检查结果,确保所有项目都通过或警告可以被安全忽略。"
    read -p "确定要继续吗? (y/n): " confirm
    if [ "$confirm" != "y" ]; then
        echo "操作已取消。"
        return
    fi

    pve8to9 --full

    echo "--- 环境检查完成! ---"
    read -p "按任意键返回主菜单..."
}

upgrade_to_pve9() {
    echo "--- 步骤 4: 升级到 PVE9 ---"
    echo "警告:这是最后一步!此操作会将您的系统升级到 Proxmox VE 9。"
    echo "请确保您已经完成了备份,并且步骤3的环境检查没有严重问题。"
    read -p "您确定要开始升级吗? 这是一个不可逆的操作! (y/n): " confirm
    if [ "$confirm" != "y" ]; then
        echo "升级已取消。"
        return
    fi

    echo "正在将软件源更新到 Debian Trixie (PVE9)..."
    file="/etc/apt/sources.list"

    cat > "$file" <<EOF
deb https://mirrors.ustc.edu.cn/debian/ trixie main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ trixie-updates main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ trixie-backports main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian-security trixie-security main
deb https://mirrors.ustc.edu.cn/proxmox/debian trixie pve-no-subscription
EOF

    echo "软件源已更新。"

    echo "正在刷新软件源列表 (apt update)..."
    apt update

    echo "正在开始完整的分发版升级 (apt dist-upgrade)..."
    echo "这个过程将会非常耗时,请耐心等待,不要中断!"
    apt dist-upgrade -y

    echo "--- Proxmox VE 9 升级完成! ---"
    echo "强烈建议您现在重启系统以应用所有更新。"
    read -p "按任意键返回主菜单..."
}

main_menu() {
    while true; do
        logo
        show_ad
        echo "  Proxmox VE 8 -> 9 升级助手"
        echo "  请按顺序执行以下步骤:"
        echo ""
        echo "  1. 优化 PVE8 环境 (更新源和软件包)"
        echo "  2. 升级前准备 (可选安装CPU微码, 检查sysctl)"
        echo "  3. 检查升级环境 (运行 pve8to9)"
        echo "  4. 执行升级到 PVE9"
        echo "  0. 退出脚本"
        echo ""
        read -p "请输入您的选择 [1-4, 0]: " choice

        case $choice in
            1)
                optimize_pve8
                ;;
            2)
                pre_upgrade_prep
                ;;
            3)
                check_environment
                ;;
            4)
                upgrade_to_pve9
                ;;
            0)
                echo "感谢使用,再见!"
                exit 0
                ;;
            *)
                echo "无效输入,请重新选择。"
                sleep 2
                ;;
        esac
    done
}

main_menu