![以下包裹已被扣留](https://linux22.com/image/1415233/%E4%BB%A5%E4%B8%8B%E5%8C%85%E8%A3%B9%E5%B7%B2%E8%A2%AB%E6%89%A3%E7%95%99.png)
我正在运行 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
[更新]
我尝试过的:
apt-get dist-upgrade
- 结果相同(包裹被保留下来)。- 使用过
aptitude
,但它建议删除 gnome 和其他一些 gnome 相关的包并安装大量 i386 包(看起来仅限于库)。 apt-get install libsmbclient
给出libsmbclient : Depends: samba-libs (= 2:4.1.9+dfsg-1~bpo70+1) but it is not going to be installed
apt-get install libtevent0
给出libtevent0 : Depends: libtalloc2 (>= 2.1.0) but 2.0.7+git20120207-1 is to be installed
。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 autoremove
and/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
并替换包裹名字使用您想要删除的包,它将列出需要您要删除的包的包,先删除这些包,然后尝试删除实际的包。