内核版本不匹配导致 APT

Leo*_*opd 18 package-management apt 12.04

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
Run Code Online (Sandbox Code Playgroud)

这基本上是相同的问题,因为我无法安装任何已关闭的包(linux-image-server、linux-server 依赖项错误)复制到对这种情况完全无用的答案。关于依赖项的非常通用的答案中的任何建议都没有帮助。

明确:

sudo apt-get clean
sudo apt-get autoclean
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

都没有效果。尽管

sudo apt-get -f install
sudo dpkg --configure -a
sudo apt-get -u dist-upgrade
sudo apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
Run Code Online (Sandbox Code Playgroud)

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

Eli*_*gan 20

你跑了sudo apt-get update,问题依旧。所以,你可能只是有一个新版本linux-image-server,并linux-headers-server比任何linux-server可用的包从配置的软件的来源

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

一个软件包搜索发现,两者的3.2.0.37.45版本linux-image-server,并linux-server为Ubuntu 12.04存在。所以它可能与你的镜子有关。

以下是一些替代方案:

忽略它

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

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

你已经有最新版本的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
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您可以在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
Run Code Online (Sandbox Code Playgroud)

如果这是 32 位系统,请改为运行:

wget https://launchpad.net/ubuntu/+archive/primary/+files/linux-server_3.2.0.23.25_i386.deb
Run Code Online (Sandbox Code Playgroud)

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

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

sudo dpkg -i linux-server_3.2.0.23.25_*.deb
Run Code Online (Sandbox Code Playgroud)

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

移除包裹

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

如果要删除它,有两个步骤。首先是卸载linux-server。第二个是确保以后不会自动删除这些包。

依赖将不会被删除,立即。因此,您先执行这些步骤中的哪一个并不重要。

1.卸载linux-server

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

sudo apt-get remove linux-server
Run Code Online (Sandbox Code Playgroud)

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

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

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

sudo apt-mark manual linux-image-server linux-headers-server
Run Code Online (Sandbox Code Playgroud)

如果是 32 位系统,请改为运行:

sudo apt-mark manual linux-image-server linux-headers-server linux-generic-pae
Run Code Online (Sandbox Code Playgroud)

(你应该有,apt-mark但如果你没有并且你不能安装软件,你可以使用apt-get install而不是apt-mark manual--specifying 一个包手动安装,即使已经安装,它也会被标记为手动安装。)

来源: 将 deb 包标记为已使用,因此不建议自动删除
(特别是Lekensteyn 的回答。)

  • 感谢您的详细回复。换镜子根本没有改变情况。但是手动安装较新版本的 linux-server (`linux-server_3.2.0.37.45`) 确实解决了这个问题。 (3认同)
  • 就我而言,我不能将 apt-get 用于任何事情。我总是收到未满足的 linux-server 依赖错误。受您建议的启发,我尝试了以下方法,该方法有效且简单得多:`sudo apt-get remove linux-server && sudo apt-get install linux-server` (2认同)