问题描述
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-server
和 linux-headers-server
。
即使您使用的是中央服务器,这种情况也可能会发生很短的时间(如果更新出现问题,则可能会发生较长的时间)。我的理解是,如果您使用镜像,这种情况可能会持续更长的时间。这并不意味着您不应该使用镜像——中央服务器 ( http://archive.ubuntu.com
) 通常非常慢,而国家、地区或其他镜像要快得多。
package search 显示 Ubuntu 12.04 中存在 linux-image-server
和 linux-server
版本 3.2.0.37.45。所以这可能和你的镜像有关。
以下是一些替代方案:
忽略它
如果您能够将包管理器用于其他目的,例如安装其他包,那么您可以忽略这一点。当您的镜像更新后,您可能会收到该软件包。
没有最新的 linux-server
软件包也不是问题,因为它是不提供任何实际软件的 metapackage。它存在只是为了 list three packages as dependencies ,确保它们保持安装状态:
-
linux-generic-pae(这只是对i386–32位,即–系统的依赖)
您已经拥有最新版本的 linux-headers-server
和 linux-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”,以确保启动菜单准确并且其他软件包已清理。