【51CTO.com快译】Apt和DNF等Linux软件包管理器功能异常强大、界面异常直观,但这并不意味着就不会出岔子。有时软件包安装会出问题,您得收拾残局。软件包管理器能够修复损坏的软件包并跳过损坏的更新,使系统重新运行并避免将来遇到麻烦。本文介绍如何在Linux中修复损坏的软件包。

这些提示和技巧可在大多数情况下帮助您解决问题。它们都相当普遍,但是每种情况都不尽相同,因此试着自行解决问题时牢记这一点。

修复Ubuntu中损坏的软件包

Apt有几个标志(flag),可用于修复安装过程中因某个原因而损坏的缺失的依赖项或软件包。一个常见的情况是安装第三方.deb,发现它有您不了解的依赖项。这些依赖项可能不会自行获取,dpkg会抱怨缺少软件包。不管怎样,您可以尝试下列步骤。

图1

首先,运行更新以确保没有所需软件包的较新版本。

sudo apt update --fix-missing

下一步,您可以试着强制Apt查找并更正所有缺失的依赖项或损坏的软件包。实际上,这将安装所有缺失的软件包,并修复现有的安装。

sudo apt install –f

软件包安装中可能出错误的另一个地方是配置过程。在后台负责这部分的是dpkg,而不是Apt,因此有理由认为:软件包在配置期间失灵时,dpkg是用来修复它的工具。

图2

先尝试强制dpkg重新配置所有损坏的或部分配置的软件包。

sudo dpkg --configure -a

如果这解决不了问题,可以采取更强制的方法。先列出dpkg标记为要重新安装的所有软件包。

sudo dpkg -l | grep ^..r

您应该在这里看到有问题的软件包。只要没有似乎不属于这里的任何软件包,您都可以强行删除损坏的软件包。

sudo dpkg --remove --force-remove --reinstreq

dpkg完成后,试着用Apt清理一下。

sudo apt clean sudo apt update

运气好的话,它们会让您回到开始的地方。它不会给您试图安装的损坏软件包,但至少Apt可以再次发挥作用。

永久DPKG锁

有一个不太常见的问题:可笑的dpkg锁阻止您执行任何操作。每当您试着使用Apt或dpkg,都会出现错误,提示另一个应用程序已经在使用Apt或dpkg,实际上并非如此。

实际上,很容易删除阻止您使用Apt、回去执行要执行的操作的锁定文件。有时,安装出现错误后,这些锁定文件仍会在那里,阻止文件被自动删除。这种情况下,您需要自行操作。

sudo rm /var/lib/apt/lists/lock

另外,删除缓存中的锁。

sudo rm /var/cache/apt/archives/lock

修复Fedora/CentOS/RHEL中损坏的软件包

修复Fedora/CentOS/RHEL中损坏的软件包不大常见,因为yum和dnf在确保软件包正确安装方面做得非常好。然而有时软件包使用还是会出问题。在基于rpm的系统上执行此操作的命令是:

sudo rpm –Va

图3

-V选项用于验证,这意味着它将检查安装文件方面的信息,并与rpm数据库中存储的信息进行比较。这一点帮助不大,因为它通常会给出一长串文件,但如果您遇到某个应用程序的问题,至少有地方可以入手。您可以对该列表中看到的任何可能带来麻烦的软件包运行dnf重新安装。

sudo dnf --refresh reinstall PACKAGE_NAME

这将所有元数据设为到期,以便它可搜索您启用的每个存储库,查找该软件包的新版本。如果您发现该软件包有坏的依赖项,DNF可能会告诉您使用--skip-broken标志。这还可能意味着您没有启用特定的存储库来提取依赖项,因此您可能得搜寻一番。

结束语

但愿这些修复方法管用,那样您可以正常使用Linux系统了。请记住,要处理完全失控的情况,最佳方法是试着恢复到以前的状态。除非您知道自己到底在干什么,否则不要忙中添乱。

原文标题:How to Fix Broken Packages in Linux,作者:John Perkins

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】