我有一个没有监视器的嵌入式设备,运行 Debian Jessie。由于我不需要 UI,因此我考虑清理 X11 软件包。这给出了一个有点出乎意料的结果:
sudo -u nobody apt-get remove '^x11' -s
这会产生以下结果:
以下软件包将被删除: ffmpeg libavdevice57 libavfilter6 ... libx11-dev libxau-dev ...
将被删除的 ffmpeg 是此版本来自 jessie-backports。那是不是故意的。严格来说libx11-dev
不匹配'^x11'
,但我可以解释为自动安装的软件包被自动删除。但是ffmpeg
是手动安装的(由 确认apt-mark showmanual
)。
^x11
导致此问题的package name 和 ffmpeg 之间的链接是什么?
我也尝试过sudo -u nobody apt-get remove '^vnc' -s
,sudo -u nobody apt-get autoremove
都不影响 ffmpeg;它不是一些无论如何都会被自动删除的孤立包。它与 X11 特别相关。
答案1
我还没有跟踪完整的依赖关系树,但链接的包至少具有以下依赖关系链:ffmpeg 依赖于 libsdl2,而 libsdl2 又依赖于 libxss1,而 libxss1 又依赖于 x11-common。
由于x11-common
matches ^x11
,它被删除,打破了 ffmpeg 的依赖关系。因此,必须删除 ffmpeg。假设这是唯一的这样的链,您应该能够通过确保它x11-common
不被删除来保留 ffmpeg。
答案2
您被告知只有几个 ffmpeg 库被删除,因为没有其他包引用它们。
如果你这样做...
apt-get install ffmpeg
然后删除,然后这些库将保留......也许......
在一段时间内,ffmpeg 被(愚蠢地)从存储库中删除。现在庆幸的是它又回来了。
根据您在 Jessie 中使用的具体软件包,将会产生不同的结果。
如果您迁移到最新的 Ubuntu,您将发生一组完全不同的操作,因为 ffmpeg 的伪装代码(我的意见)现在已被删除+ true/real ffmpeg 现在再次提供。
我记得,对于 Jessie,poser 代码被称为 aconv 或类似的东西,所以如果您尝试在某些时候安装 ffmpeg,您要么会收到一条消息,说要安装 aconv,要么 ffmpeg 可能是指向 aconv 的虚拟包。这些废话多年来一直令人困惑。
请记住。 APT 系统知道它在做什么 + 仅当孤儿包不再有引用时才会删除它们。
因此,如果一个包被标记为要删除,那么无论出于什么原因,该包都应该被删除(没有引用)。