从10.04升级到12.04后,我正在尝试安装其他软件包。
例如ia32-libs和skype(4.0)。

尝试安装这些文件时,出现“无法纠正问题,您持有损坏的软件包”错误消息。

命令输出:

sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


运行此命令后:

sudo dpkg --configure -a
foo@foo:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


评论

如果您向我们展示了您实际尝试的命令(例如sudo apt-get install ia32-libs)以及该命令的输出,可能会有所帮助。另外,sudo apt-get dist-upgrade是否显示任何可用的更新?

我不知道您的问题出了什么问题,我看不到任何实际错误,也看不到您在标题中描述的错误。

相关:E:无法纠正问题,您拿着破损的包裹

可能在您的终端错误行中列出了一些阻止软件包管理器正常运行的软件包(在某些情况下:git-man是git的依赖项)。 sudo apt-get删除git-man接下来sudo apt-get清除git-man然后sudo apt-get install git。它再次安装了git-man,一切似乎都正常。

#1 楼

该特定错误消息可能表明您已保存软件包,但也可能表明存在其他问题。

您可以通过以下方式获取实际保留的软件包的列表:

dpkg --get-selections | grep hold


如果没有任何内容,或与外观无关,则可能是其他原因。收到错误消息时,请仔细检查您尝试的命令的输出,因为该命令的完整输出中可能还有其他线索(错误消息除外)。

另一种故障排除方法可能是是使用aptitude而不是apt-get来尝试安装您的软件包:

sudo aptitude install <packagename>


Aptitude不会轻易放弃,并且会尝试寻找可能涉及修改的解决方案其他套餐。它可能会为您提供更多有关该问题的说明以及解决此问题的选项。

有时,由于过于适应性而急于删除或降级大量软件包以满足您的要求,在这种情况下,请尝试重试-f更改其内容。优先级并帮助其提出涉及减少/降级软件包的解决方案,即使这意味着并非您要求的所有更改都可以继续进行:

sudo aptitude -f install <packagename>


评论


知道如何解压包裹吗? :-)

– Eugene van der Merwe
13年4月17日在14:24

那是一个单独的问题。

–胸骨
13年4月20日在13:58

聪明才智对我来说比apt-get更有用,谢谢。

– szx
13-10-27在15:20

需要注意的一件事是,智能可以使对系统造成更大破坏的工作变得更加容易。例如,如果apt-get由于依赖关系冲突而无法安装某些东西,它将放弃。但是,可以使用aptitude继续进行,但是为了满足这些冲突,请卸载一大堆其他软件包-甚至降级软件包。您只需要了解它的建议并仅在一个好主意的情况下进行。

–胸骨
2014年3月12日下午3:23

“保留”软件包与该消息无关,只是通过按住它们(而不是安装,升级,降级或删除)避免了冲突。

–脑袋
2014年8月23日在2:50



#2 楼

这也发生在我身上。我只做了sudo apt-get update,就解决了我的问题。祝你好运。

评论


在运行此命令之前,必须至少有一个过程来调查原因。在apt-get install命令中添加标志-o Debug :: pkgProblemResolver = true -o Debug :: Acquire :: http = true可获取更多信息。

– Sushilinux
20/12/08在14:40

#3 楼

我在全新安装的14.04中也有类似的情况,dpkg --get-selections | grep hold中没有列出文件,sudo apt-get update之后也没有任何乐趣。

为我解决的问题是一个简单的

sudo apt-get autoremove


当我尝试重新安装失败的软件包时,它运行良好。好极了!

#4 楼

这些是解决you have held broken packages错误的快速简便的方法。


/etc/apt/sources.list中打开sources.list文件,并检查是否有与Ubuntu版本不同的软件源。您当前正在使用的Ubuntu版本。如果在sources.list中发现任何不正确的发布行,请使用sudoedit /etc/apt/sources.list打开sources.list文件,在它们之前添加一个#字符以注释掉sources.list中的错误行,保存sources.list文件,然后运行sudo apt update进行更新可用软件包列表。

在Synaptic软件包管理器中选择“修复损坏的软件包”选项。运行以下命令以安装Synaptic。

sudo apt update  
sudo apt upgrade   
sudo apt install synaptic  


打开Synaptic,然后在Synaptic中选择Edit-> Fix Broken Packages,然后再次重复Edit-> Fix Broken Packages。

在左窗格的Synaptic中,单击“自定义过滤器”按钮,该按钮在下面的屏幕截图中由鼠标光标标记。从左上角的列表中选择“损坏”。在中心窗格中将列出仍需要修复的所有损坏的软件包。



一次选择一个损坏的软件包。选择一个损坏的软件包,然后打开终端并运行apt policy <package-name>。该命令的结果将告诉您是从默认的Ubuntu存储库还是从其他来源安装了损坏的软件包。如果损坏的软件包是从其他来源安装的,则可以将该软件包及其软件源一起删除,并替换为默认Ubuntu存储库中同一软件包的其他版本。通常,这意味着通过将软件包降级到较旧的版本来修复损坏的软件包。


如果出现以下错误消息:

Try 'apt-get -f install' with no packages (or specify a solution)  


运行以下命令:

sudo apt update  
sudo apt upgrade   
sudo apt-get -f install   



手动取出损坏的包装。



/var/lib/dpkg/info中查找包装

ls -l /var/lib/dpkg/info | grep <package>



将包文件夹移动到另一个位置。

cd /tmp && sudo mkdir new-package-location  
sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    



运行以下命令:

sudo dpkg --remove --force-remove-reinstreq <package>  





如果所有这些方法均不起作用,则可能是由于软件包深深嵌入操作系统中而导致损坏的软件包而导致这些软件包都不起作用方法对此有任何影响。寻找此深层嵌入式“内容”的第一个明显地方是/etc/apt/sources.list中的软件来源。检查sources.list文件以查看其是否包含任何非标准行,这些行可能会导致软件包损坏。标准的Ubuntu的sources.list文件看起来像这个答案中的sources.list文件。

从sources.list删除可疑行的正确方法是在其前面加上一个#字符以将其注释掉。然后运行sudo apt update刷新可用软件列表。

#5 楼

我遇到了关于缺少依赖项的类似情况。就我而言,我试图在ubuntu saucy salamander 13.10上安装curl。错误提示该依赖项需要curl3库的早期版本。

我当时通过尝试使用aptitude安装curl可以将其降级到较早版本。

当它指出缺少的依赖项及其原因(需要较早版本的库文件)时,它为我提供了一些选择如何响应... y // n / q

Y将中止安装,N将寻找另一种选择,而Q将仅退出并不执行任何操作,留下损坏的包装。 br />
我选择了N,它使我可以选择将库文件降级到较早的版本。这就是我所做的,curl顺利完成安装,没有更多错误。


安装后,我可能会考虑再次升级库文件,但是,到目前为止,一切都很好。 />

#6 楼

遇到相同的问题,我从另一个答案(dpkg --get-selections | grep hold)中运行了该软件包检查命令,并看到了

tomcat7                                         deinstall
tomcat7-common                                  install


,所以我使用了“ apt-get remove tomcat7-common

然后我可以安装Tomcat 6(我正在删除Tomcat 7并按照自己的方式安装Tomcat 6)。

评论


“保留”软件包与消息无关,只是通过按住它们(而不是安装,升级,降级或删除)避免了冲突。

–脑袋
2014年8月23日下午2:51

添加标记清除:apt-get remove --purge数据包

–塞尔吉奥·阿布鲁(Sergio Abreu)
17年1月5日,11:22

#7 楼

我已经尝试过此页面上提到的所有方法。
这对我不起作用。
这就是我的解决方法:
跟踪损坏的软件包并重新安装。
这里是一个示例:
我正在尝试安装aptitude

sudo apt安装aptitude


无法安装libcwidget3v5

sudo apt install libcwidget3v5


尝试安装libncursesw5

sudo apt安装libncursesw5


尝试安装libtinfo5

sudo apt安装libtinfo5


宾果,这是罪魁祸首libtinfo5,它已经在那儿,请删除并重新安装。
删除或清除libtinfo5
apt purge libtinof5会更好,因为它可以配置文件。

sudo apt删除libtinfo5


重新安装libtinfo5

sudo apt安装libtinfo5


现在尝试安装aptitude

sudo apt install aptitude



#8 楼

对我来说,以上所有方法均无效,因为我的系统未更新。我做了

Home Key > Software Updater > Install

并更新了我的系统;之后,我可以使用apt正常安装我的软件包。

#9 楼

我刚遇到与Ubuntu Mate相同的问题,我发现了这个线程。我的问题是尝试像这样将更新命令链接在一起...

sudo apt update && sudo apt upgrade -y && sudo apt autoremove


应该起作用的。它并没有给我任何错误,但是它运行很快,并给了我一个尚不准备发布的软件包列表。结果是我无法安装我的其他驱动程序。

我通过分别运行update / upgrade / autoremove命令来修复它...

sudo apt update
sudo apt upgrade -y
sudo apt autoremove


这花费了正常的长时间-特别是升级-现在我的安装程序可以正常工作了。我仍然不知道为什么将这些命令链接到一个命令中不起作用。

#head-scratcher

这是我的驱动程序安装最终运行。


祝你好运!

更新:经过一番思考后,我认为我收到的警告是有关尚未准备好安装的软件包的信息,这些警告被视为错误,并且破坏了&&链,使之无法继续。我可能只是将命令与链接在一起了;它会工作的。

sudo apt update ; sudo apt upgrade -y ; sudo apt autoremove


#10 楼

xsane安装失败后,重新安装ppa时遇到了相同的问题。就像yochannah(现在称为“ StackExchange What the Heck”)一样,“ dpkg --get-selections | grep hold中没有列出文件,sudo apt-get update之后也没有喜悦”。
apt-get给我的提示是
xsane : Depends: libsane (>= 1.0.24) but it is not going to be installed
因为yochannah的回答,我觉得我必须删除一些以前安装的软件包。确实如此,我不得不手动删除所有与sane相关的软件包,其中包括xsane-commonlibsane,这些软件包仍作为ppa版本安装。
因此,请注意以前安装的内容并整理一下! />

#11 楼

14.04 LTS升级到16.04 LTS时,我遇到了同样的问题。您需要跟踪损坏的软件包,然后递归尝试重新安装或升级它。
首先删除所有依赖的库(autoremove),然后使用sudo apt-get -f install安装所有丢失的库(-f表示--fix-missing
 sudo apt-get autoremove
sudo apt-get -f install
sudo apt-get update
sudo apt-get upgrade 
 

从PPA安装ubuntu toolchain
 sudo add-apt-repository ppa:ubuntu-toolchain-r/test
 

然后安装aptitude
 sudo apt install aptitude
 

aptitude软件包管理器比apt-get方便得多。它还建议解决冲突的依赖关系和损坏的程序包。以下是我系统中的冲突。它们可能与您的有所不同,但解决它们的高级方法将是相同的。潜在的解决方案。例如升级或降级其他库来解决冲突。就我而言,没有解决方案。因此,我需要进一步查找依赖性。
由于$ sudo aptitude -f install build-essential The following NEW packages will be installed: build-essential cpp{a} cpp-5{a} g++{a} g++-5{a} gcc{a} gcc-5{a} libasan2{a} libcc1-0{ab} libcilkrts5{a} libgcc-5-dev{a} liblsan0{ab} libmpx0{a} libstdc++-5-dev{a} The following packages will be upgraded: gcc-5-base libstdc++6{b} 2 packages upgraded, 14 newly installed, 0 to remove and 5 not upgraded. Need to get 29.6 MB of archives. After unpacking 100 MB will be used. The following packages have unmet dependencies: liblsan0 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed. libcc1-0 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed. libstdc++6 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed. 需要build-essential
 gcc-5 

但是$ sudo apt-get -f install gcc-5 The following packages have unmet dependencies: gcc-5 : Depends: cpp-5 (= 5.5.0-12ubuntu1~16.04) but it is not going to be installed Depends: gcc-5-base (= 5.5.0-12ubuntu1~16.04) but 5.4.0-6ubuntu1~16.04.12 is to be installed Depends: libcc1-0 (>= 5.5.0-12ubuntu1~16.04) but it is not going to be installed Depends: libgcc-5-dev (= 5.5.0-12ubuntu1~16.04) but it is not going to be installed E: Unable to correct problems, you have held broken packages. 取决于在gcc-5
 cpp-5 

$ sudo apt-get -f install cpp-5 The following packages have unmet dependencies: cpp-5 : Depends: gcc-5-base (= 5.5.0-12ubuntu1~16.04) but 5.4.0-6ubuntu1~16.04.12 is to be installed 取决于cpp-5。在这里您可以看到存在特定冲突。 Aptitide提供多种选择来解决冲突。就我而言,升级gcc-5-base可以解决问题。
 libstdc++6 

最后,现在解决了冲突,请尝试再次安装$sudo aptitude -f install gcc-5-base The following packages will be REMOVED: gcc-5-base{u} 0 packages upgraded, 0 newly installed, 1 to remove and 6 not upgraded. Need to get 0 B of archives. After unpacking 67.6 kB will be freed. The following packages have unmet dependencies: libstdc++6 : Depends: gcc-5-base (= 5.4.0-6ubuntu1~16.04.12) but it is not going to be installed. open: 115; closed: 488; defer: 35; conflict: 58 .The following actions will resolve these dependencies: Keep the following packages at their current version: 1) gcc-5-base [5.4.0-6ubuntu1~16.04.12 (now, xenial-security, xenial-updates)] Accept this solution? [Y/n/q/?] n The following actions will resolve these dependencies: Upgrade the following packages: 1) libstdc++6 [5.4.0-6ubuntu1~16.04.12 (now, xenial-security, xenial-updates) -> 9.3.0-10ubuntu2~16.0 。 />
 build-essentials