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


18

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

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

Answers:


20

您跑步了sudo apt-get update,问题仍然存在。因此,您可能只拥有较新的版本,linux-image-serverlinux-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

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

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

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

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

(我linux-meta在Ubuntu源包的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手动指定要安装的软件包,这会导致即使已安装,也将其标记为手动安装。)

来源:将 一个deb软件包标记为已使用,因此不建议将其自动删除
(尤其是Lekensteyn的答案。)


3
感谢您的详细回复。更换镜子根本没有改变情况。但是手动安装较新版本的linux-server(linux-server_3.2.0.37.45)确实解决了该问题。
Leopd

2
就我而言,我什么都不能使用apt-get。我总是收到linux-server的unmet依赖性错误。受到您的建议的启发,我尝试了以下有效且更简单的方法:sudo apt-get remove linux-server && sudo apt-get install linux-server
Andrew Ensley 2015年

4

如果您具有完整的/ boot,并且自动安全升级安装失败了,那么您可能和我一样。

我无法做任何事情,因此传统的完整/ 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'以确保启动菜单正确并且清理了其他软件包。


我在这里写了更多有关此过程的内容:askubuntu.com/a/430944/47461作为承包商,我经常遇到这个问题。
flickerfly 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.