我有一个几乎全新的 16.04 安装(几周前才安装的)。今天,当我尝试
$ sudo apt update
$ sudo apt install openssh-server
我受到了
The following NEW packages will be installed
ncurses-term openssh-server openssh-sftp-server ssh-import-id
0 to upgrade, 4 to newly install, 0 to remove and 2 not to upgrade.
Need to get 373 kB/633 kB of archives.
After this operation, 5,136 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Err:1 http://gb.archive.ubuntu.com/ubuntu xenial-updates/main amd64 openssh-sftp-server amd64 1:7.2p2-4ubuntu2.5
404 Not Found [IP: 91.189.88.152 80]
Err:2 http://gb.archive.ubuntu.com/ubuntu xenial-updates/main amd64 openssh-server amd64 1:7.2p2-4ubuntu2.5
404 Not Found [IP: 91.189.88.152 80]
E: Failed to fetch http://gb.archive.ubuntu.com/ubuntu/pool/main/o/openssh/openssh-sftp-server_7.2p2-4ubuntu2.5_amd64.deb 404 Not Found [IP: 91.189.88.152 80]
E: Failed to fetch http://gb.archive.ubuntu.com/ubuntu/pool/main/o/openssh/openssh-server_7.2p2-4ubuntu2.5_amd64.deb 404 Not Found [IP: 91.189.88.152 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
显然,我尝试了sudo apt update --fix-missing
,但什么也没改变。
显然,要么是我的系统在寻找不再存在的软件包版本,要么是某个服务器管理员删除了他们不应该删除的内容。我猜是前者。
有人知道我该如何调试或修复这个问题吗?我想解决根本原因,而不是只为 openssh 寻找解决方法。
我的系统上一个相关的差异(可能会产生影响)是,我安装了 NVIDIA SDK,除其他外,它还会将arm64
架构添加到 apt,以便它可以下载一些用于交叉编译的软件包。我使用的是amd64
(不是arm64
)系统。这意味着当我 时apt update
,我会收到一堆与不携带 arm64 软件包的存储库相关的错误,如下所示:
E: Failed to fetch http://gb.archive.ubuntu.com/ubuntu/dists/xenial/main/binary-arm64/Packages 404 Not Found [IP: 91.189.88.162 80]
这不是一个问题(我相信这是使用此 SDK 的必要之恶)。我之所以提到它,只是因为它可能与我当前的问题有关。
编辑:
问题的根源在于与此相关,但问题本身却不同。
答案1
感谢@muru 的评论和这个答案。
根本问题:
如果 apt 更新其源列表时出错,它将忽略任何源,即使该错误来自不同的(和外部的)体系结构。因此,添加外部体系结构没有然后限制所有现有 apt 存储库源的体系结构将阻止它们更新。
供将来参考的解决方案,至少对于这种情况:
运行
sudo apt update
并记下哪些源失败了。你正在寻找类似这样的行Err:19 http://security.ubuntu.com/ubuntu xenial-security/main arm64 Packages 404 Not Found [IP: 91.189.88.161 80]
/etc/apt/sources.list
在您最喜欢的文本编辑器中打开进行编辑,例如sudo nano /etc/apt/sources.list
。对于满足以下条件的每一行:1) 未注释(不以 开头
#
)且 2) 与您之前记下的错误行之一匹配,请在和 URL[arch=amd64,i386]
之间添加。因此,对于上一个示例,deb
deb [arch=amd64,i386] http://security.ubuntu.com/ubuntu xenial-security main restricted
重复这些步骤,直到sudo apt update
运行不再抱怨缺少arm64
存储库。