无法纠正问题,您拿着破损的包裹


216

从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.

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

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


Answers:


237

该特定的错误消息可能表示您已持有软件包,但也可能表示其他问题。

您可以通过以下方式获得实际持有包裹的清单:

dpkg --get-selections | grep hold

如果没有任何东西,或者看起来没有任何关联,则可能是其他原因。收到错误消息时,请仔细检查您尝试的命令的输出,因为除错误消息外,该命令的完整输出中可能还有其他线索。

解决问题的另一种方法可能是使用aptitude而不是apt-get来尝试安装软件包:

sudo aptitude install <packagename>

Aptitude会轻易放弃,并会尝试寻找可能涉及修改其他软件包的解决方案。它可能会给您更多有关该问题的说明以及解决该问题的选项。

有时,能力太急于删除或降级大量软件包以满足您的要求,在这种情况下,请尝试-f更改其优先级,并帮助其提出涉及删除/降级软件包的解决方案,即使这意味着并非您要求的所有更改也是如此可以继续:

sudo aptitude -f install <packagename>

6
知道如何解压包裹吗?:-)
Eugene van der Merwe 2013年

6
那是一个单独的问题
thomasrutter

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

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

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

33

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


9

我遇到了关于缺少依赖项的类似情况。就我而言,我试图在Ubuntu saucy salamander 13.10上安装curl。

该错误表明该依赖项需要curl3库的早期版本。

通过尝试使用aptitude安装curl,我能够降级到早期版本。

当它指出缺少的依赖项和原因(需要较早版本的库文件)时,它为我提供了几种响应方式的选择... y// n/q

Y会中止安装,N会寻找另一个选项,然后Q简单地退出并且不执行任何操作,留下损坏的软件包。

我选择了N,它为我提供了将库文件降级到较早版本的选项。这就是我所做的,并且curl完成了安装,没有更多错误。

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

9

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

什么修复对我来说是一个简单的

sudo apt-get autoremove

当我尝试重新安装失败的软件包时,它工作正常。好极了!


4

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

tomcat7                                         deinstall
tomcat7-common                                  install

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

然后,我可以安装Tomcat 6(您正在删除Tomcat 7并安装Tomcat 6)。


“暂停”软件包与该消息无关,只是通过按住它们(避免了安装,升级,降级或删除操作)避免了冲突
Braiam 2014年

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

4

这些是修复该you have held broken packages错误的快速简便的方法。

  • 在其中打开您的sources.list文件,/etc/apt/sources.list并检查没有与当前正在使用的Ubuntu版本不同的Ubuntu版本任何软件源。如果在sources.list中发现任何不正确的发布行,请使用打开打开sources.list文件sudoedit /etc/apt/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中,单击以下屏幕快照中由鼠标光标标记的“ 自定义过滤器”按钮。从左上角的列表中选择残破。在中间窗格中将列出仍需要修复的所有损坏的软件包。

    在Synaptic中显示损坏的软件包

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

  • 如果收到此错误消息:

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

    运行以下命令:

    sudo apt update  
    sudo apt upgrade   
    sudo apt-get -f install   
    
  • 手动取出损坏的包装。

    1. 在以下位置找到您的包裹 /var/lib/dpkg/info

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. 将包文件夹移动到另一个位置。

      cd /tmp && sudo mkdir new-package-location  
      sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. 运行以下命令:

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

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

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


0

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

Home Key > Software Updater > Install

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

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.