Skip to content

升级 Ubuntu Server 22.04 LTS 至 24.04 LTS

Ubuntu 24.04 LTS(代号“Noble Numbat”)已于 2024 年 4 月 25 日正式发布,带来了许多新特性以及软件包版本的升级,例如使用了 Linux 6.8 内核。此版本的生命周期为 5 年,至 2029 年 6 月。

新主机可以直接下载安装新系统。但运行上个版本 LTS 的主机只能在新 LTS 的第一个小版本(即 24.04.1)发布后才能升级。该版本原计划于 8 月 15 日发布,但由于遇到了一些问题,推迟到了 8 月 29 日。

本文现将 Ubuntu Server 22.04.4 LTS 升级至 24.04.1 LTS 的流程和遇到的问题记录如下。

参考

升级前的准备

由于系统升级完成后需要重启,先手动停止可能受影响的程序和服务。

在终端执行 sudo apt update 检查软件包更新,再执行 sudo apt dist-upgrade 安装更新。如有需要,执行 sudo reboot 重启系统。

因系统升级有可能会更新主机 sshd,当通过 SSH 升级系统时,需要在主机防火墙设置里暂时放行 1022 端口,以供升级期间临时使用。对于 UFW,命令为 sudo ufw allow 1022

注意

如果准备升级的主机有重要用途,或无法承担升级过程中或之后出现意外的后果,请及时备份现有系统以便快速恢复。

准备完成后,即可执行 sudo do-release-upgrade 检查是否有可用的系统升级,弹出升级提示后按 y 继续。

第一次失败:软件源更新错误

由于主机上使用了 Docker CE,此前在 /etc/apt/sources.list.d/docker.list 中添加了其官方软件源。但目前主机无法访问 download.docker.com,系统在检查软件包更新时会报错,导致升级终止。

因此,考虑更换清华大学镜像源。在阅读其 帮助文档 的说明后,发现仅需执行以下命令即可。

注意

以下命令依然需要从 Docker 官方网站获取 GPG 公钥。

因此要么从可以访问 download.docker.com 的设备传输一份 GPG 公钥文件,要么直接使用清华大学镜像源中的 GPG 公钥并自行承担可能的安全风险

提示

自 2024 年 9 月 9 日左右开始,主机可以正常访问 download.docker.com

sh
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/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://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sh
sudo install -m 0755 -d /etc/apt/keyrings
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg ./gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sh
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/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://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更换软件源后,主机可以正常获取 Docker CE 的更新。

第二次失败:'ubuntu-minimal' could not be located

再一次的升级过程中,顺利获取了软件源列表,但系统提示如下信息并终止升级:

console
...
After updating your package information, the essential package 
'ubuntu-minimal' could not be located. This may be because you have 
no official mirrors listed in your software sources, or because of 
excessive load on the mirror you are using. See /etc/apt/sources.list 
for the current list of configured software sources. 
In the case of an overloaded mirror, you may want to try the upgrade 
again later. 
...

经调查,发现原因是使用了 Ubuntu 软件仓库的镜像源。

解决方法有两个:

  • 换用 sudo do-release-upgrade --allow-third-party 命令,允许升级过程中使用镜像源。
  • /etc/apt/sources.list 中镜像源 URL 换回官方源 http://archive.ubuntu.com/ubuntu。经测试,官方源速度尚可。

顺利升级

解决了以上问题后,升级顺利进行,获取了约 1000 个软件包并成功安装。

提示

在安装某些软件包的过程中,系统会暂停并询问使用新配置文件还是现有的配置文件。

此时可以选择保留当前配置文件。升级完成后,可在原有配置文件所在目录找到以 .dpkg-dist.ucf-dist 等为结尾的文件,即为新版本默认配置文件。

重启后,检查系统是否升级成功。

最后关闭临时端口 1022。对于 UFW,先执行 sudo ufw status numbered 查看规则列表,再执行 sudo ufw delete [端口 1022 对应的规则编号]。通常有两条规则(IPv4 和 IPv6),建议先删除后一条,以防规则列表编号变动。

升级后的一些变更

软件源配置

查看 Ubuntu 软件源配置文件 /etc/apt/sources.list 会获得以下信息,提示配置文件移动到了新位置。

text
# Ubuntu sources have moved to /etc/apt/sources.list.d/ubuntu.sources

而新配置文件 /etc/apt/sources.list.d/ubuntu.sources 的格式也与以往不同,采用了 DEB822 格式。

text
Types: deb
URIs: http://archive.ubuntu.com/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
URIs: http://security.ubuntu.com/ubuntu
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

简单来说,若需配置镜像源,仅需修改其中第二行 URIs 的内容即可。

此外,系统升级后默认禁用了原先配置的第三方软件源,我们可以将 /etc/apt/sources.list.d/ 中以 .list.distUpgrade 结尾的旧配置文件修改成新格式。

以前文配置的 Docker CE 镜像源为例,在 /etc/apt/sources.list.d/ 中创建 docker.sources 文件,内容如下所示。

text
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu
Suites: noble
Components: stable
Signed-By: /etc/apt/keyrings/docker.gpg

旧格式与新格式之间可以简单对应,其中 Suites 一项为发行版名称,Signed-By 一项为签名密钥。更新完配置文件后执行 sudo apt update 检查是否正常获取了第三方软件源列表。

参考

最后修改于: