内核版本不匹配导致 APT 受阻

内核版本不匹配导致 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

这基本上是同一个问题我无法安装任何软件包(linux-image-server、linux-server 依赖项错误)已关闭 重复回答,但对于这种情况完全没用。关于依赖关系的非常笼统的答案有帮助。

明确地:

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

均会给出上述错误消息的某种形式。

答案1

你运行了sudo apt-get update,问题仍然存在。所以你可能只是有一个比任何可用软件包更新的linux-image-server和版本linux-headers-serverlinux-server来自您配置的软件源

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

A包搜索显示两者的版本均为 3.2.0.37.45linux-image-serverlinux-serverUbuntu 12.04 中存在此问题。因此它可能与您的镜像有关。

以下是一些替代方案:

忽略它

如果您可以将包管理器用于其他目的,例如安装其他包,那么您可以忽略这一点。当您的镜像更新时,您可能只会获得该包。

没有最新的linux-server软件包不是问题,因为它是元包它不提供任何实际的软件。它的存在只是为了列出三个包作为依赖项,确保它们保持安装状态:

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

然而:

  • 如果问题是 预防更新和安装其他软件包(而不是仅仅显示这些消息无论何时你这样做但不干扰它),那么你应该应用其他解决方案。
  • 如果您不喜欢总是看到这些消息并且想要摆脱它们,您可能也希望这样做。
  • 即使您使用的镜像比主下载服务器稍慢,您也无法获得此软件包,这有点奇怪,因为此软件包也是由 提供的http://security.ubuntu.com。该服务器应始终在 中启用。因此,我建议检查以确保 已启用。您可能希望在编辑它之前/etc/apt/sources.list进行备份( )。该问题也可能是由于缓存 Web 代理(如果您使用)带有陈旧数据而导致的。(以下解决方案也可以解决该问题。)sources.listsudo cp /etc/apt/sources.list /etc/apt/sources.list.old

更改为不同的下载服务器

我猜你正在运行 Ubuntu Server 系统,可能没有安装 GUI。因此,请参阅:

更改镜像后,运行:

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

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

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

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

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

(我在 Launchpad 页面上获得了这两个链接,linux-metaUbuntu 中的源码包

现在(对于 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--手动指定一个包进行安装会导致它被标记为手动安装,即使它已经安装。)

来源: 将 deb 包标记为已使用,因此不建议自动删除
(尤其,Lekensteyn 的回答

答案2

如果您有完整的 /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 upgrade”并让一切恢复正常。

为了确保万无一失,我加入了“sudo update-grub”和“sudo apt-get autoremove”以确保启动菜单准确并且其他软件包已被清理。

答案3

在 Ubuntu 12.04 的情况下,必须手动安装 linux-headers-server 和 linux-server(如上所述 - 我会在那里评论但还没有那个权限),然后 apt-get remove linux-headers-virtual,它似乎不再作为 12.04 的 64 位包存在。

命令 wgethttps://launchpad.net/ubuntu/+archive/primary/+files/linux-headers-server_3.2.0.64.76_amd64.deb

相关内容