当前位置: 首页>>技术教程>>正文


APT 因内核版本不匹配而陷入困境

, ,

问题描述

Apt 似乎无法为我做任何有用的事情,反复给出以下形式的消息:

dpkg: dependency problems prevent configuration of linux-server:
 linux-server depends on linux-image-server (= 3.2.0.37.44); however:
  Version of linux-image-server on system is 3.2.0.37.45.
 linux-server depends on linux-headers-server (= 3.2.0.37.44); however:
  Version of linux-headers-server on system is 3.2.0.37.45.
dpkg: error processing linux-server (--configure):
 dependency problems - leaving unconfigured

这与已关闭的 I cannot install any package (linux-image-server, linux-server dependencies errors) 基本上是相同的问题,复制到对于这种情况完全无用的答案。 that very generic answer about dependencies 中的建议都没有帮助。

明确地:

sudo apt-get clean
sudo apt-get autoclean
sudo apt-get update

都没有效果。尽管

sudo apt-get -f install
sudo dpkg --configure -a
sudo apt-get -u dist-upgrade
sudo apt-get -o Debug::pkgProblemResolver=yes dist-upgrade

都给出了上述错误消息的某种形式。

最佳回答

您运行了 sudo apt-get update ,但问题仍然发生。因此,您可能只拥有比您配置的软件源中提供的任何 linux-server 软件包更新版本的 linux-image-serverlinux-headers-server

即使您使用的是中央服务器,这种情况也可能会发生很短的时间(如果更新出现问题,则可能会发生较长的时间)。我的理解是,如果您使用镜像,这种情况可能会持续更长的时间。这并不意味着您不应该使用镜像——中央服务器 ( http://archive.ubuntu.com ) 通常非常慢,而国家、地区或其他镜像要快得多。

package search 显示 Ubuntu 12.04 中存在 linux-image-serverlinux-server 版本 3.2.0.37.45。所以这可能和你的镜像有关。

以下是一些替代方案:

忽略它

如果您能够将包管理器用于其他目的,例如安装其他包,那么您可以忽略这一点。当您的镜像更新后,您可能会收到该软件包。

没有最新的 linux-server 软件包也不是问题,因为它是不提供任何实际软件的 metapackage。它存在只是为了 list three packages as dependencies ,确保它们保持安装状态:

您已经拥有最新版本的 linux-headers-serverlinux-image-server 。我的猜测是这是一个 64 位系统,这就是为什么没有显示有关 linux-generic-pae 的消息。似乎一切都很好。

然而:

  • 如果问题是阻止更新和安装其他软件包工作(而不是每次执行这些操作时都显示这些消息而不干扰它),那么您应该应用其他解决方案。

  • 如果您只是不喜欢一直看到这些消息并且想要删除它们,您也可能希望这样做。

  • 有点奇怪的是,即使您使用的镜像稍微落后于主下载服务器,您也没有获得这个包,因为这个包也是由 http://security.ubuntu.com 提供的。该服务器应始终在 /etc/apt/sources.list 中启用。因此我建议检查以确保该功能已启用。您可能需要在编辑之前备份 sources.list ( sudo cp /etc/apt/sources.list /etc/apt/sources.list.old )。该问题也可能是缓存 Web 代理(如果您使用代理)包含陈旧数据的结果。 (下面的解决方案也可以解决这个问题。)

更改为不同的下载服务器

我猜您正在运行 Ubuntu Server 系统,并且可能没有安装 GUI。所以,请参阅:

更换镜像后,运行:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

如果您愿意,可以在 linux-server 更新后将服务器更改回来。

手动下载并安装.deb包文件

您可以在 Ubuntu 12.04 中手动下载并安装最新版本的 linux-server 元包的 .deb 文件。

cd 到您想要下载包的任何位置。

如果这是 64 位系统,请运行:

wget https://launchpad.net/ubuntu/+archive/primary/+files/linux-server_3.2.0.23.25_amd64.deb

如果这是 32 位系统,请运行以下命令:

wget https://launchpad.net/ubuntu/+archive/primary/+files/linux-server_3.2.0.23.25_i386.deb

(我在 Ubuntu 中的 linux-meta 源代码包的 Launchpad 页面上获得了这两个链接。)

现在(对于 64 位和 32 位),运行以下命令来安装软件包:

sudo dpkg -i linux-server_3.2.0.23.25_*.deb

(或者只是开始输入包的名称并使用 Tab 来完成它。)

移除包装

由于它是提供您已有软件的元包,因此您可以删除该包。然后你就不会再收到错误了。如果您愿意,可以稍后再次安装(您可以定期运行 apt-get update && apt-cache policy linux-server 以查看新版本是否可用)。

如果你想删除它,有两个步骤。首先是卸载 linux-server 。第二个是确保软件包稍后不会被自动删除。

依赖项不会立即删除。因此,您先执行哪一个步骤并不重要。

1.卸载linux-server

要卸载 linux-server ,只需运行:

sudo apt-get remove linux-server

2. 将其依赖项标记为手动安装

要告诉 APT(包管理器)您打算安装的包,即使没有任何东西声明它们是依赖项,请将它们标记为手动安装。

为此,如果这是 64 位系统,请运行以下命令:

sudo apt-mark manual linux-image-server linux-headers-server

如果是 32 位系统,请运行以下命令:

sudo apt-mark manual linux-image-server linux-headers-server linux-generic-pae

(您应该有 apt-mark,但如果没有并且无法安装软件,则可以使用 apt-get install 而不是 apt-mark manual——手动指定安装包会导致它被标记为手动安装,即使已经安装了。)

来源:Mark a deb package as used, so it’s not suggested for autoremoval \n(特别是 Lekensteyn’s answer 。)

次佳回答

如果您有完整的 /boot 并且自动安全升级安装损坏了 apt,您可能会和我一样。

我无法让 apt-get 执行任何操作,因此传统的完整 /boot 建议不起作用。我手动删除了旧的内核数据。不要删除当前正在运行的内核,请检查 ‘uname -a’。我用 ‘sudo rm /boot/-3.2.0-{23,24,25,26}- 删除了。

然后我必须运行“sudo apt-get remove linux-server”和“sudo apt-get install linux-server”来纠正 1/2 安装的内核问题造成的混乱。毕竟,我终于可以“sudo apt-get升级”并让事情再次进展。

为了更好地衡量,我添加了 ‘sudo update-grub’ 和“sudo apt-get autoremove”,以确保启动菜单准确并且其他软件包已清理。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14179.html,未经允许,请勿转载。