跳到主要内容
  1. 所有文章/

从 Debian 11(bullseye) 无感升级到 Debian 12(bookworm)

·1126 字·约 3 分钟

前言 #

历时 1年 9 个月零 28 天的开发,Debian 的第 12 个稳定版本 (代号 bookworm1) 在 2023 年 6 月 10 日正式发布了,作为我最喜欢的服务器 Linux 发行版,Debian 一贯以其稳定性和可靠性而值得信赖。

本文将记录下我的升级过程,总体还是十分平滑的,花了不到 10 分钟就完成了。

如有必要,请查阅 Debian 12 发行说明,内附详细的升级和错误处理指南。

升级之前 #

  1. 停止所有 Docker 容器
  2. 停止 Nginx、Cloudflare Tunnel 等服务
  3. 备份重要的数据,包括但不限于 Docker 容器数据卷、数据库、配置文件等等
  4. 准备停机和服务中断后的处理

Debian 软件源一般以发行代号如:bullseyebookworm 引用,但是也可能使用状态名如:stableunstabletesting 引用。在 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... Done
cloudflared/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 root 109 Feb  7 09:25 cloudflared.list
-rw-r--r-- 1 root root 115 Jan 13 17:18 docker.list
-rw-r--r-- 1 root root 110 Feb 26 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 配置文件,出现提示时,请选择保留本地配置

sshd
保留本地 SSH 配置

修改过 GRUB 配置文件,也会出现类似的提示,如非必要建议更新该配置

GRUB
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 to do 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... Done
fail2ban/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'

完成。


  1. 好像是「书虫」的意思🤨 ↩︎

  2. 该状态一般由管理员手动执行,让指定的软件包不被删除或升级 ↩︎

  3. 如果您不了解这步,请不要执行 ↩︎

Dejavu Moe
作者
Dejavu Moe
Not for success, just for growing.