从 Debian 11(bullseye) 无感升级到 Debian 12(bookworm)
本文目录
前言#
历时 1年 9 个月零 28 天的开发,Debian 的第 12 个稳定版本 (代号 bookworm1) 在 2023 年 6 月 10 日正式发布了,作为我最喜欢的服务器 Linux 发行版,Debian 一贯以其稳定性和可靠性而值得信赖。
本文将记录下我的升级过程,总体还是十分平滑的,花了不到 10 分钟就完成了。
升级之前#
- 停止所有 Docker 容器
- 停止 Nginx、Cloudflare Tunnel 等服务
- 备份重要的数据,包括但不限于 Docker 容器数据卷、数据库、配置文件等等
- 准备停机和服务中断后的处理
Debian 软件源一般以发行代号如:bullseye
、bookworm
引用,但是也可能使用状态名如:stable
、unstable
、testing
引用。在 Debian 12 稳定版正式发布后,stable
就会从bullseye
指向bookworm
了
检查软件源,确保下面的输出为空,否则请手动更改软件源为bullseye
cat /etc/apt/sources.list| grep stable
不能跨多个大版本升级,确保现在运行的操作系统是 Debian 11.x,更新当前的软件包
sudo apt update\&& sudo apt upgrade -y
列出非 Debian 默认源软件包
apt list'?narrow(?installed, ?not(?origin(Debian)))'Listing... Donecloudflared/unknown,now 2023.5.1 arm64[installed]containerd.io/bullseye,now 1.6.21-1 arm64[installed]docker-buildx-plugin/bullseye,now 0.10.5-1~debian.11~bullseye arm64[installed,automatic]docker-ce-cli/bullseye,now 5:24.0.2-1~debian.11~bullseye arm64[installed]docker-ce-rootless-extras/bullseye,now 5:24.0.2-1~debian.11~bullseye arm64[installed,automatic]docker-ce/bullseye,now 5:24.0.2-1~debian.11~bullseye arm64[installed]docker-compose-plugin/bullseye,now 2.18.1-1~debian.11~bullseye arm64[installed]nginx/stable,now 1.24.0-1~bullseye arm64[installed]
可以看到,我的服务器上主要是 Nginx、Docker 和 Cloudflare Tunnel 这些
ls -lh /etc/apt/sources.list.d/total 12K-rw-r--r--1 root root109 Feb7 09:25 cloudflared.list-rw-r--r--1 root root115 Jan13 17:18 docker.list-rw-r--r--1 root root110 Feb26 11:45 nginx.list
它们的 APT 源都有了bookworm
的支持,直接替换就行
sudo sed -i's/bullseye/bookworm/g' /etc/apt/sources.list.d/*.list
确保软件包gpgv
已经安装
sudo apt install -y gpgv
验证所有软件包都是可升级状态,正常情况应该输出为空
sudo dpkg --audit
确保没有软件包是hold
状态2,否则请遵循 Debian 12 发行说明手动处理
sudo apt-mark showhold
更改 Debian 软件源为bookworm
sudo sed -i's/bullseye/bookworm/g' /etc/apt/sources.list
开始升级#
更新软件源
sudo apt update
先进行最小系统升级
sudo apt upgrade --without-new-pkgs
没问题的话开始进行全面升级,会下载好几百 MB 文件,下载速度取决于服务器网络带宽
sudo apt full-upgrade
如果修改过 SSH 配置文件,出现提示时,请选择保留本地配置
修改过 GRUB 配置文件,也会出现类似的提示,如非必要建议更新该配置
提示系统日志记录组件配置文件被修改过,这里我选择了直接覆盖本地的修改
Configuration file'/etc/systemd/journald.conf'==> Modified(by you or by a script) since installation.==> Package distributor has shipped an updated version. What would you like todo about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions Z : start a shell to examine the situation The default action is to keep your current version.*** journald.conf(Y/I/N/O/D/Z)[default=N] ? Y
全面升级结束后,重新启动
sudo reboot
升级之后#
列出已删除的软件包
apt list'~c'Listing... Donefail2ban/stable 1.0.2-2 all[residual-config]fonts-droid-fallback/stable,now 1:6.0.1r16-1.1 all[residual-config]fonts-noto-mono/stable,now 20201225-1 all[residual-config]golang-go/stable 2:1.19~1 arm64[residual-config]gsfonts/stable 2:20200910-7 all[residual-config]imagemagick-6-common/stable 8:6.9.11.60+dfsg-1.6 all[residual-config]linux-image-5.10.0-20-arm64/now 5.10.158-2 arm64[residual-config]linux-image-5.10.0-21-arm64/now 5.10.162-1 arm64[residual-config]poppler-data/stable 0.4.12-1 all[residual-config]
清理已删除的软件包
sudo apt purge'~c'
同理,清理已过时软件包3
apt list'~o'\&& sudo apt purge'~o'
完成。