升级 Debian 12 到 13
Debian 13 终于发布,如何将 Debian 12 (Bookworm) 升级到 Debian 13 (Trixie)。在看完官方繁琐的升级文档后,我对升级过程做个记录和分享。
对于 pve 不适用,请查看 pve 官方升级文档。
简短教程 #
对于想快速升级的人,这里放一个简短教程:
apt update && apt upgrade
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
apt update && apt full-upgrade
apt autopurge && apt clean
升级过程 #
-
备份重要数据。虽说升级过程一般没有什么问题,但数据无价,最好备份重要数据。
-
本教程假设你已更新至
bookworm的最新版本。如果没有请先执行:
apt update && apt upgrade
- 移除第三方的包。debian 的稳定性是以使用官方包为前提,第三方包在升级过程中可能出现各种依赖问题,所以升级前最好移除第三方的软件包以及第三方源。如果一定要用第三方包,请确保该源的
trixie发行版已经可用。
## 列出非 Debian 软件包
apt list '?narrow(?installed, ?not(?origin(Debian)))'
## 备份数据
## 卸载
apt purge <pack>
apt autopurge
## 修改 /etc/apt/sources.list
- 建议在升级之前停止主要的服务/软件,以免出现意外情况。例如:
systemctl stop xx
pm2 stop all
- 删除过时的软件包。它们不再由上游维护,或者不再有 Debian 开发人员对维护这些软件包感兴趣,或者它们提供的功能已被其他软件(或新版本)取代,使用以下命令列出和删除:
apt list '~o'
apt purge '~o'
- 检查
APT pinning。这个作用是控制软件包优先从哪个源安装,检查以下文件/文件夹:
/etc/apt/preferences
/etc/apt/preferences.d/
- 修改
APT源配置,确保指向trixie
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
## 也检查 /etc/apt/sources.list.d/
## 检查源配置是否正常
apt update
- 准备升级的安全环境。如果你使用 ssh 远程连接到 debian,建议新开一个
screen会话并记录所有输出,这样即使 ssh 断开连接,升级过程也会继续进行。
screen -L -Logfile upgrade.log -S upgrade
- 首先进行最小升级。这样做的效果是升级那些可以升级的软件包,而无需删除或安装任何其他软件包。
apt upgrade
- 检查内核元包。独立的内核包本身是指定版本号的无法升级,但安装了
linux-image-amd64之类的元包后可以自动升级内核版本。
## 检查元包
dpkg -l 'linux-image*' | grep ^ii | grep -i meta
## 如果没有任何输出,查找系统可用元包,然后安装
apt-cache search linux-image- | grep -i meta
- 完整升级,没问题后重启
apt full-upgrade
reboot
升级之后 #
- 首先查看系统和主要服务是否正常,没有问题后删除哪些残留的不在需要的包:
apt autopurge && apt clean
- 升级
APT源格式,APT现在使用新版格式的源,可以使用以下配置迁移到新格式:
apt modernize-sources
一些可能的坑 #
网络接口名称可能变更。
trixie系统分配的网络接口名称可能与bookworm不同,这可能导致升级重启后失联。
如果你使用 systemd-networkd 配置网络,建议用MACAddress匹配接口:
[Match]
MACAddress=bc:24:11:85:97:0b
[Network]
Address=10.0.0.20/24
Gateway=10.0.0.1
如果你使用/etc/network/interfaces,建议用 systemd.link 固定网口名称,而不是什么动态的可预测名称。例如根据MACAddress将名称固定为nic0:
## /etc/systemd/network/10-nic0.link
[Match]
MACAddress=bc:24:11:ad:e8:de
[Link]
Name=nic0
## 测试接口是否会更改到新名称
udevadm test-builtin net_setup_link /sys/class/net/enp0s18 2>/dev/null
## 注意查看 ID_NET_NAME 字段
ID_NET_DRIVER=virtio_net
ID_NET_LINK_FILE=/etc/systemd/network/10-nic0.link
ID_NET_NAME=nic0
没问题后记得修改/etc/network/interfaces为新名称。
以上操作都需要在升级前完成。
sysctl.conf 失效
升级trixie后,/etc/sysctl.conf可能被静默重命名为/etc/sysctl.conf.dpkg-bak,这导致重启之后里面的内容就都不生效了。建议内核参数都放/etc/sysctl.d/*.conf文件里面。