前言:2023 年 6 月 10 日,Debian 正式升级到 12 bookworm 版本。代号:书虫。不得不承认,Debian 是最为重要的 Linux 发行版之一,许多知名的 Linux 发行版也是基于 Debian,如 Ubuntu、TrueNAS SCALE 等。

注意,Debian 12 的升级过程相对比较简单,而且该版本经过了为期一年的测试,稳定程度已经相当可观,因此除非有特殊需求(或者太懒),建议升级。

1. 升级到 Debian 11 最新版·

最近的 debian 11 apt 上游貌似进行了更新,因此可以将 /etc/apt/sources.list 修改为以下最新版:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free

# deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

deb https://security.debian.org/debian-security bullseye-security main contrib non-free
# deb-src https://security.debian.org/debian-security bullseye-security main contrib non-free

随后升级系统:

1
2
3
sudo apt-get update
sudo apt-get full-upgrade
sudo apt autoremove

注意,在这里我们使用到了一个很不常见的 apt 命令:apt-get full-upgrade,一般在非大版本更新的情况下不会用到该命令。根据 apt 的官方手册:

full-upgrade performs the function of upgrade but will remove currently installed packages if this is needed to upgrade the system as a whole.

翻译过来就是 full-upgrade 会执行系统升级操作,如果在升级过程中发现需要移除现有的某些包,那它会毫不犹豫地这么做。所以日常最好不要用这个命令,因为有可能破坏你当前的包环境。但是我们已经选择大版本升级,因此破旧立新是可以接受的。

2. 升级到 Debian 12·

注意,如果你系统的某些服务与默认配置不同,那么最好先对配置文件进行备份,如

  • iSCSI
  • sshd
  • sudoer

2.1 升级 apt 仓库与被 apt 管理的软件·

因为 Linux 内核与发行版是逻辑上解耦的,所以只需要将系统 apt 上游链接改成 Debian 12,随后通过一次全系统更新即可实现升级。

首先将 /etc/apt/sources.list 改为如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware

# deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware

deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware

注意:security 源没有更改为国内镜像,因为安全相关的更新要有最好的实时性

2.2 进行全系统更新·

执行以下命令。

1
2
sudo apt update --fix-missing
sudo apt full-upgrade

升级完,重启系统即可升级到 Debian 12.

2.3 重启后查看版本·

执行命令:cat /etc/os-release

1
2
3
4
5
6
7
8
9
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

3. 恢复配置·

在上述的 full-upgrade 过程中,可能会遇到一些交互式选项。比如,openssh 提供了新的配置文件,该文件与系统既有的配置冲突,因此升级过程中系统会问你是保留原有的配置还是覆盖(I)。笔者一般是直接覆盖,然后重新配置,毕竟如果有新的 option 没有加进来,有些新特性会无法启用。

接下来将根据第 2 步的备份,恢复系统配置。如更改 SSH 登录的端口号和认证方式等。

3.1 修改 sshd 服务配置文件·

执行命令:sudo vim /etc/ssh/sshd_config 修改相应行

1
2
3
4
5
Port 22110
...
PubkeyAuthentication yes
...
PasswordAuthentication no

3.2 修改 visudo 配置文件·

1
newton  ALL=(ALL:ALL)   NOPASSWD:       ALL

3.3 cockpit 不再允许 root 用户登录·

执行下列命令将 root 条目从相关文件中移除,即可恢复 root 用户登录 cockpit 的能力。

1
sudo nvim /etc/cockpit/disallowed-users

4. 可选的升级·

由于某些系统库与 Debian 发行版本绑定,因此需要更新与升级。

4.1 Node.JS·

1
2
3
curl -sL https://deb.nodesource.com/setup_18.x -o /tmp/nodesource_setup.sh
sudo bash /tmp/nodesource_setup.sh
cat /etc/apt/sources.list.d/nodesource.list

4.2 docker-ce·

1
2
3
4
5
6
7
8
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. NeoVim 安装·

经过 apt search,笔者发现 Debian 12 上游的 neovim 依旧是 0.7 版本,而最新已经到了 0.9 版本(Jun. 2023). 因此有必要讲一下如何安装 NeoVim 最新版。

5.1 获取最新的 NeoVim·

执行下列命令:

1
2
3
4
cd ~
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim.appimage
chmod u+x ~/nvim.appimage
sudo mv ~/nvim.appimage /usr/local/bin/nvim.appimage

5.2 配置系统级别名·

1
2
3
4
5
6
7
8
CUSTOM_NVIM_PATH=/usr/local/bin/nvim.appimage

sudo update-alternatives --install /usr/bin/ex ex "${CUSTOM_NVIM_PATH}" 110
sudo update-alternatives --install /usr/bin/vi vi "${CUSTOM_NVIM_PATH}" 110
sudo update-alternatives --install /usr/bin/view view "${CUSTOM_NVIM_PATH}" 110
sudo update-alternatives --install /usr/bin/vim vim "${CUSTOM_NVIM_PATH}" 110
sudo update-alternatives --install /usr/bin/nvim nvim "${CUSTOM_NVIM_PATH}" 110
sudo update-alternatives --install /usr/bin/vimdiff vimdiff "${CUSTOM_NVIM_PATH}" 110

随后即可使用 NeoVim.

6. 已知问题·

  • Cockpit 允许 root 登录之后,切换被控 host 时会有权限提升的 notification 一闪而过。

总结·

总体来看,Debian 12 的内核升级到了 6.1,而且很多组件都有了更新:

  • Cockpit 的终端支持快捷键,Ctrl L 清屏等快捷操作与 Windows 浏览器自带的快捷键不再冲突
  • 通过 Windows 远程执行 zsh 非交互式模式时,可以在 Windows Terminal 里输出颜色

经过短暂测试,尚未发现问题。