昨天我将 11.10 的机器升级到了 12.04。今天早上我尝试运行 apt-get upgrade 并遇到了以下问题:
sudo apt-get upgrade
[sudo] password for brian:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
linux-generic linux-headers-generic linux-image-generic
The following packages will be upgraded:
apport apport-gtk firefox firefox-globalmenu firefox-gnome-support firefox-locale-en linux-libc-dev python-apport python-problem-report unity-scope-musicstores
10 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 20.1 MB of archives.
After this operation, 594 kB of additional disk space will be used.
Do you want to continue [Y/n]?
WARNING: The following packages cannot be authenticated!
python-problem-report python-apport apport apport-gtk linux-libc-dev unity-scope-musicstores
非常感谢您的帮助。谢谢!
答案1
在上面的评论中提到的 gertvdijk 中,运行:
sudo apt-get update
跑步前
sudo apt-get upgrade
如果您最近没有运行“更新”,将会修复此问题。
因此,我的下一个问题是:“‘apt-get update’ 命令有什么作用?为什么在升级之前运行它很重要?”毕竟,系统似乎知道有可用的更新,那么到底是怎么回事呢?
我注意到更新下载的前几个内容是“Release.gpg”文件,在谷歌上搜索该文件名后,我发现了以下内容: http://wiki.debian.org/SecureApt
其中指出了关于“警告:无法验证以下软件包!”的错误,“这意味着档案已开始由您的系统不知道的新密钥进行签名。”
此外,apt-get 手册页指出:
update 用于重新同步包索引文件 从其来源获取可用包的索引 来自 /etc/apt/sources.list 中指定的位置。例如 例如,当使用 Debian 档案时,此命令会检索 并扫描 Packages.gz 文件,以便获取有关新 并且有更新的软件包可用。更新应该始终 在升级或 dist-grade 之前执行。
注意最后那句话。我完全忘记了那件事。
因此,这个警告似乎只是表明包索引文件已过期,因为更新信息包括安全信息可以帮助您了解您正在下载的升级实际上确实是升级,而不是可怕的特洛伊木马,后者会将您的系统变成垃圾邮件僵尸网络僵尸。
您可以阅读 SecureApt 页面以了解有关如何安全签名软件包以及信任链的详细信息。
这一切都是有道理的,但现在的问题是,“当 apt-get upgrade 尝试使用过时的软件包列表进行升级时,它会看到什么?如果软件包列表不是最新的,它如何知道有更新的版本?”
...(现在研究已经没有力气了!)
答案2
答案3
如果您在运行更新时遇到 DNS 问题或其他潜在网络问题,可能会阻塞流量,则可能会发生这种情况。在运行 apt-get update 时,请求可能看似成功,但只有当 apt-get upgrade 出现问题时才会出现。
我发现我的透明 HTTP 代理阻止了某些请求,因此必须修改该代理以允许流量。详细信息请参见错误 574886。
修复我的网络问题后,只需运行 apt-get update 即可清理,并且 apt-get upgrade 可以按预期运行。