以下包裹已被扣留

以下包裹已被扣留

我正在运行 64 位 Debian Wheezy。最近我运行它时apt-get upgrade出现了以下错误:

The following packages have been kept back:
  libsmbclient libtevent0 samba-libs

它让我抓狂。我本来想删除 Samba,因为我根本不用它,但有些天才让 Gnome 依赖于它:

# apt-get remove libsmbclient
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  gnome gnome-core gvfs-backends libgnomevfs2-extra libsmbclient mencoder mplayer

我如何安全地升级这些软件包?

没有安装太多自定义的东西:

deb http://ftp.pl.debian.org/debian/ wheezy main 
deb-src http://ftp.pl.debian.org/debian/ wheezy main 

deb http://security.debian.org/ wheezy/updates main 
deb-src http://security.debian.org/ wheezy/updates main 

# wheezy-updates, previously known as 'volatile'
deb http://ftp.pl.debian.org/debian/ wheezy-updates main 
deb-src http://ftp.pl.debian.org/debian/ wheezy-updates main 

# wheezy-backports
deb http://ftp.pl.debian.org/debian/ wheezy-backports main contrib non-free

# virtualbox
deb http://download.virtualbox.org/virtualbox/debian/ wheezy contrib

[更新]

我尝试过的:

  1. apt-get dist-upgrade- 结果相同(包裹被保留下来)。
  2. 使用过aptitude,但它建议删除 gnome 和其他一些 gnome 相关的包并安装大量 i386 包(看起来仅限于库)。
  3. apt-get install libsmbclient给出libsmbclient : Depends: samba-libs (= 2:4.1.9+dfsg-1~bpo70+1) but it is not going to be installed
  4. apt-get install libtevent0给出libtevent0 : Depends: libtalloc2 (>= 2.1.0) but 2.0.7+git20120207-1 is to be installed
  5. apt-get install samba-libs给出samba-libs : Depends: samba-dsdb-modules (= 2:4.1.9+dfsg-1~bpo70+1) but it is not going to be installed

[更新 2]

这个问题的根源似乎在 backports 存储库的某个地方。我曾经尝试过 bumblebee 和一些 DVD 翻录程序,我记得我必须从 backports 安装一些东西。我不再需要它了。Bumblebee 无论如何都无法运行在我的硬件上,最终 DVD 在 Windows 上被翻录了 :(

现在我这样做了aptitude search '~S ~i ~Abackports',并得到了这个:

i   initramfs-tools                   - generic modular initramfs generator
i A libavutil53                       - Libav utility library
i   libldb1                           - LDAP-like embedded database - shared library
i A libnettle4                        - low level cryptographic library (symmetric and one-way cryptos)
i A libntdb1                          - New Trivial Database - shared library
i A libopus0                          - Opus codec runtime library
i   libswscale2                       - Libav video scaling library
i A libtdb1                           - Trivial Database - shared library
i A libwbclient0                      - Samba winbind client library
i A python-talloc                     - hierarchical pool based memory allocator - Python bindings
i   samba-common                      - common files used by both the Samba server and client

我认为我应该降级这些软件包,这样一切都会好起来。我说得对吗?我该怎么做?

[更新 3]

我尝试从 backports repo 中删除或降级这些软件包,但只成功了一部分。

当我想降级时,libntdb1我意识到它不存在于稳定的存储库中。当我尝试删除它时 - 再次,apt 也想删除 gnome。当我这样做时,apt-cache rdepends libntdb1结果发现只有反向依赖项是samba-libs。稳定的存储库中也没有samba-libs,而且我也无法删除它,因为它再次尝试删除 gnome 和一大堆东西。这到底是怎么回事?请注意,samba-libs当我这样做时没有列出aptitude search '~S ~i ~Abackports'。如何摆脱这个东西?

另外,当我尝试降级时libldb1,却libwbclient0无法降级,因为apt在两种情况下我都想删除 gnome。为什么?

因此现在我最终从 backports repo 中列出了三个软件包aptitude search '~S ~i ~Abackports'

i   libldb1              - LDAP-like embedded database - shared library
i A libntdb1             - New Trivial Database - shared library
i A libwbclient0         - Samba winbind client library

并且samba-libs这显然也来自反向移植,但没有列出aptitude search '~S ~i ~Abackports'

答案1

可以使用以下命令将 deb 包降级到特定的 repo apt

# apt-get install libsmbclient/wheezy libtevent0/wheezy samba/wheezy
  • “[package]/wheezy”结构表示用户想要来自 wheezy repo 的包仅有的並且不是最新的。
  • 需要明确全部我一次性导入所需的包,这样apt就可以正确解决依赖关系并提取其他 wheezy 包。

如果apt没有提示删除您想要保留的重要包,那么就可以了。应该会有一些关于依赖性问题的警告,但只要它们不是致命的,您可以安全地忽略这些警告。

降级成功后,libtevent0、libldb1 等库就不再需要了。您可以使用apt-get --purge autoremoveand/or deborphan(如果已安装)来查找和清除系统上无用的孤立包。

(我之前的回答将失效,很快就会删除,反正它是不正确的——可以使用 降级apt

答案2

我使用 aptitude 的交互式包求解器:

运行sudo aptitude。然后输入U(大写 u)表示您想要全部升级。它会告诉您存在冲突,并会提出解决方案。使用e进入交互式求解器,然后使用.(点)和,(逗号)迭代它将找到的不同解决方案,然后!接受其中一个解决方案。

您还可以尝试帮助它找到一个更好的解决方案(对您而言),通过移动到解决方案的某个部分(例如,它建议删除 gnome)并告诉它您想要接受(使用A)或拒绝(使用R)它这样做。

答案3

最快捷、最简单的解决方案:

您必须单独安装每个包。

看到这个超级用户解决方案: apt 包被封解决办法

警告: 别跑 sudo apt-get dist-upgrade直到您完全安装了需要安装的软件包之后。在此之后,并且只有在此之后,您才能运行sudo apt-get update&sudo apt-get dist-upgrade

答案4

打开终端并输入:

apt-cache rdepends packagename

并替换包裹名字使用您想要删除的包,它将列出需要您要删除的包的包,先删除这些包,然后尝试删除实际的包。

相关内容