Debian 系统升级时,如果从已经被修改或移除的软件源中下载软件包,就会出现”404 Not Found”的报错,这种情况通常发生在使用较旧的 Debian 发行版到达其生命周期后,因为它们的软件源已经被移动至归档服务器。
由于 Debian 保持严格的发行周期,旧版本最终会由活动服务器移动至专用的归档存储中。当这种情况发生时,我们 Debian 系统保存的软件源配置就会不再适用,包管理器的操作就会出错。
出现”404 Not Found”的原因
当们试图使用”apt-get update”或者”apt-get upgrade”命令来更新系统时,系统会读取软件源文件”/etc/apt/sources.list”中的条目来获得软件包的 URL,如果这些 URL 指向的地址被移动或者已经被移除,那么就会出现 404 错误。
其解决方案也很简单,就是将软件源的条目修改为正确的地址即可。但是不同的 Debian 版本对应着不同的软件源 URL,所以我们首先要搞清楚自己使用的 Debian 版本,然后才能将软件源地址修改为正确值。
查看 Debian 版本
查看 Debian 版本,可以使用如下命令:
# lsb_release -a
图.1 使用 lsb_release 命令查看 Debian 版本
命令会显示发行版的版本号和 Codename,而这个 Codename 在更新软件源时就十分有用了。
常见 Debian 版本的 Codename 如下:
- Trixie → Debian 13
- Bookworm → Debian 12
- Bullseye → Debian 11
- Buster → Debian 10
更新软件源
之前已经提到过,Debian 更新的软件源信息保存在文件中,更新软件源也就是修改这个上文件中的软件源地址信息。这显然属于系统级操作,所以建议在修改之前进行文件备份:
# cp /etc/apt/sources.list /etc/apt/sources.list.backup
有了这个备份文件,一旦在升级过程中出现任何错误,就可以用备份文件还原成之前的配置。
现在,就可以放心的更新软件源文件了。
# vi /etc/apt/sources.list
对于生命周期已经结束的 Debian 版本(例如 Jessie、Stretch 或更早的版本)需要将文件中的如下内容进行修改:
deb http://deb.debian.org/debian/ CODENAME main contrib non-free deb http://deb.debian.org/debian-security/ CODENAME/updates main contrib non-free
将”deb”修改为”archive”,用实际的 Codename 修改替换示例中的”CODENAME”,例如 stretch → Debian 9 就应该修改为:
deb http://archive.debian.org/debian/ stretch main contrib non-free deb http://archive.debian.org/debian-security/ stretch/updates main contrib non-free
对于仍然在用的版本,如果在更新时出现 404 错误,则可能由于配置的软件源镜像不可用了,可以将软件源配置成 Debian 的主软件源:
deb http://deb.debian.org/debian/ CODENAME main contrib non-free deb http://deb.debian.org/debian/ CODENAME-updates main contrib non-free deb http://security.debian.org/debian-security CODENAME-security main contrib non-free
同样的,需要用实际的 Codename 替换示例中的 CODENAME。
归档软件源验证
由于已经停止维护的 Debian 版本的归档仓库不再接收安全更新,这意味着它们的发布文件不再使用有效的密钥签名。为了防止 apt 命令因签名过期而失败,我们需要禁用这些仓库的验证检查。
创建或打开如下配置文件:
# vi /etc/apt/apt.conf.d/99allow-unauthenticated
在文件中加入如下内容:
Acquire::Check-Valid-Until "false";
这项配置可以通知 apt 工具忽略软件包的时期验证,这对于已经还再有更新的归档软件源来说十分重要。
更新软件包信息
在将软件源配置修改为正确值之后,就可以使用如下命令更新软件包了:
# apt-get update # apt-get upgrade
升级 Debian 版本
虽然修复 404 错误可以让当前系统继续运行,但运行已停止支持的 Debian 版本意味着我们将无法再收到安全更新,这在生产环境或面向互联网的环境中会带来重大风险。
我们就应该考虑将系统升级到当前受支持的 Debian 版本。
# apt-get dist-upgrade
然而,在 Debian 的主要版本之间进行升级需要周密的计划,切勿草率行事,因为这可能会破坏现有的配置或已安装的软件。在尝试进行主要版本升级之前,请务必查阅目标版本的 Debian 官方发行说明。
apt-get upgrade 过程中出现的 404 错误源于源配置中过时的软件仓库 URL。通过确定 Debian 版本,更新源列表以指向正确的软件仓库,并调整验证设置,即可恢复软件包管理功能。
由于运行不受支持的版本存在安全隐患,因此长期解决方案是升级到最新的 Debian 版本。
