KB0030.Proxmox VE一键更新源并升级

一键升级的脚本

在PVE的shell中,执行如下脚本,即可完成如下三个操作:

1)将源更新为 USTC 的源。

2)执行 apt update 更新当前包更新

3)执行 apt dist-upgrade 执行版本升级

curl -o- http://vdi.doracloud.cn:9000/software/pveupdate.sh |bash

pveupdate.sh 脚本的内容

#!/bin/sh
# Author: DoraCloud Technology Ltd.co
#
# Date: 2022/05/07
#
# DoraCloud for Proxmox
# Phase 1: update source to mirrors.ustc.edu.cn

CODENAME=`cat /etc/os-release |grep PRETTY_NAME |cut -f 2 -d "(" |cut -f 1 -d ")"`

pve_version=$(pveversion|awk -F '/' '{print $2}'|cut -c1)

echo  "Debian codename:$CODENAME  PVE Version $pve_version"


# Modify Debian Source

# source.list
sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list

#DEB822
sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources

# modify PVE source
#if [ -f /etc/apt/sources.list.d/pve-no-subscription.list ]; then
    echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve $CODENAME pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
#fi

if [ -f /etc/apt/sources.list.d/pve-enterprise.list ]; then
    mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak
fi

if [ -f /etc/apt/sources.list.d/pve-enterprise.sources ]; then
    mv /etc/apt/sources.list.d/pve-enterprise.sources /etc/apt/sources.list.d/pve-enterprise.sources.bak
fi

#echo "deb https://mirrors.ustc.edu.cn/proxmox/debian $CODENAME pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list

if [ -f /etc/apt/sources.list.d/pve-no-subscription.sources ]; then
    cat > /etc/apt/sources.list.d/pve-no-subscription.sources <<EOF
Types: deb
URIs: https://mirrors.ustc.edu.cn/proxmox/debian/pve
Suites: $CODENAME
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
fi


# Modify source code to support ceph
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/CLI/pveceph.pm

if [ -f /etc/apt/sources.list.d/ceph.list ]; then
  CEPH_CODENAME=$(ceph -v 2>/dev/null | grep ceph | awk '{print $(NF-1)}' | cut -d'-' -f1)

  # 如果无法获取Ceph版本,根据PVE版本推断
  if [ -z "$CEPH_CODENAME" ]; then
    case $pve_version in
      7) CEPH_CODENAME="pacific" ;;
      8) CEPH_CODENAME="quincy" ;;
      9) CEPH_CODENAME="reef" ;;
      *) CEPH_CODENAME="quincy" ;;
    esac
  fi

  . /etc/os-release

  if [ "$pve_version" = "7" ]; then
    # PVE 7使用不同的格式
    echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-$CEPH_CODENAME $VERSION_CODENAME main" > /etc/apt/sources.list.d/ceph.list
  else
    # PVE 8/9使用no-subscription格式
    echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-$CEPH_CODENAME $VERSION_CODENAME no-subscription" > /etc/apt/sources.list.d/ceph.list
  fi
fi


if [ -f /etc/apt/sources.list.d/ceph.sources ]; then
  CEPH_CODENAME=`ceph -v | grep ceph | awk '{print $(NF-1)}'`
  .  /etc/os-release
  cat > /etc/apt/sources.list.d/ceph.sources <<EOF
Types: deb
URIs: https://mirrors.ustc.edu.cn/proxmox/debian/ceph-$CEPH_CODENAME
Suites: $VERSION_CODENAME
Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
fi


apt update -y
apt dist-upgrade -y