Oracle Cloud上Ubuntu 22.04执行sudo apt update时出现Failed to Fetch错误的解决咨询
我在Oracle Cloud上使用Canonical Ubuntu 22.04和Ubuntu 22.04 Minimal两个版本,执行sudo apt update时都碰到了相同的404错误,具体报错信息如下:
E: Failed to fetch http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/dists/jammy/main/binary-i386/Packages 404 Not Found [IP: 185.125.190.36 80] E: Failed to fetch http://ports.ubuntu.com/ubuntu-ports/dists/jammy-security/main/binary-i386/Packages 404 Not Found [IP: 185.125.190.36 80] E: Failed to fetch http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/dists/jammy-updates/main/binary-i386/Packages 404 Not Found [IP: 185.125.190.36 80] E: Failed to fetch http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/dists/jammy-backports/main/binary-i386/Packages 404 Not Found [IP: 185.125.190.36 80] E: Some index files failed to download. They have been ignored, or old ones used instead.
当前我的/etc/apt/sources.list内容如下(部分行存在截断):
deb http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/ jammy multiv> # deb-src http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/ jammy > deb http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/ jammy-update> # deb-src http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/ jammy-> ## N.B. software from this repository may not have been tested as ## extensively as that contained in the main release, although it includes ## newer versions of some applications which may provide useful features. ## Also, please note that software in backports WILL NOT receive any review ## or updates from the Ubuntu security team. deb http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/ jammy-backpo> # deb-src http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/ jammy-> deb http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted # deb-src http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted deb http://ports.ubuntu.com/ubuntu-ports jammy-security universe # deb-src http://ports.ubuntu.com/ubuntu-ports jammy-security universe deb http://ports.ubuntu.com/ubuntu-ports jammy-security multiverse # deb-src http://ports.ubuntu.com/ubuntu-ports jammy-security multiverse
问题原因
这些404错误本质是Ubuntu 22.04(Jammy)的ubuntu-ports源已经不再维护i386架构的包索引,而你的系统要么启用了i386的外来架构支持,要么错误地给amd64架构实例使用了ports源(ports源主要针对非amd64架构,比如arm64、ppc64el等)。
解决步骤
步骤1:检查系统架构配置
先确认当前系统的本地架构和启用的外来架构:
# 查看本地架构 dpkg --print-architecture # 查看启用的外来架构 dpkg --print-foreign-architectures
如果输出里有i386,而你的实例是amd64架构(Oracle Cloud的x86实例默认都是amd64),可以移除i386架构支持:
sudo dpkg --remove-architecture i386
步骤2:修正sources.list配置
根据你的实例架构选择对应的配置方式:
情况A:实例是amd64架构(最常见)
amd64实例不需要使用ubuntu-ports源,应该替换成普通的Ubuntu源。先备份原有配置:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
然后编辑sources.list:
sudo nano /etc/apt/sources.list
替换为Oracle Cloud圣何塞节点的amd64源:
deb http://us-sanjose-1-ad-1.clouds.ubuntu.com/ubuntu/ jammy main restricted universe multiverse deb http://us-sanjose-1-ad-1.clouds.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://us-sanjose-1-ad-1.clouds.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse deb http://us-sanjose-1-ad-1.clouds.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
保存退出(nano编辑器中按Ctrl+O回车确认保存,再按Ctrl+X退出)。
情况B:实例是非amd64架构(比如arm64)
如果确实需要使用ubuntu-ports源,需要在每个deb行里指定对应的架构,避免系统尝试拉取i386的包索引:
sudo nano /etc/apt/sources.list
修改为类似如下内容(请根据你的实际架构替换arch=arm64):
deb [arch=arm64] http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe multiverse deb [arch=arm64] http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe multiverse deb [arch=arm64] http://us-sanjose-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted universe multiverse deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted universe multiverse
步骤3:重新执行update验证
完成配置后,再次执行更新命令验证:
sudo apt update
此时应该不会再出现404错误了。
备注:内容来源于stack exchange,提问作者Stellan Coder

