首先澄清一下术语:
依赖<->反向依赖/依赖
我已经xvt
安装在无头 RPI 上,但我不明白它没有被自动删除的原因。
$ sudo apt autoremove
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
$ apt show xvt Package: xvt Version: 2.1-20.3
Priority: optional
Section: x11
Maintainer: Sam Hocevar (Debian packages) <[email protected]>
Installed-Size: 85.0 kB
Provides: x-terminal-emulator
Depends: libc6 (>= 2.4), libx11-6
Suggests: menu
Conflicts: suidmanager (<< 0.50)
Download-Size: 36.3 kB
APT-Manual-Installed: no
APT-Sources: http://raspbian.raspberrypi.org/raspbian bullseye/main armhf Packages
Description: ...
$ apt-cache rdepends --installed xvt
xvt
Reverse Depends:
这些没有列出xvt
$ dpkg-query -Wf '${Package;-40}${Essential}\n' | grep yes
$ dpkg-query -Wf '${Package;-40}${Priority}\n' | grep -E "important"
$ dpkg-query -Wf '${Package;-40}${Priority}\n' | grep -E "required"
$ apt-config dump | grep '^APT::NeverAutoRemove::'
$ apt-mark showmanual
bullseye-default
equivs
pihole-deps
smbclient
transmission-daemon
wireguard-tools
$ apt-mark showhold
(除了显式依赖之外,我不喜欢 debian 使用列表和字段的方式,我发现它很晦涩。因此我创建了一个 bullseye-default 元包。)
还有什么其他机制可以防止这个包被删除?
回到提出的问题,我如何找到其他秘密冗余的包,就像xvt
这个例子一样?
请求的命令
$ dpkg -l xvt
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=====================================>
ii xvt 2.1-20.3 armhf X terminal-emulator similar to xterm,
答案1
您的apt-cache rdepends
输出表明没有任何东西可以保持您的软件包安装,考虑到您的行为,xvt
这很奇怪。autoremove
一般来说,要弄清楚为什么保留给定的包,最好的工具是aptitude why
:
aptitude why xvt
(您可能需要aptitude
先安装)。
要列出反向依赖项中没有手动安装的包的所有包,请apt autoremove
在模拟模式下运行,忽略推荐和建议的包:
sudo apt autoremove -s -o Apt::AutoRemove::SuggestsImportant=0 -o Apt::AutoRemove::RecommendsImportant=0
请注意,默认情况下,autoremove
是不平衡的:默认安装推荐的软件包,而不是建议的软件包;但建议阻止自动删除。看推荐和建议如何与 apt-get dist-upgrade 和 apt-get autoremove 交互?了解详情。
答案2
还有什么其他机制可以防止这个包被删除?
您可以使用apt-mark hold
它来防止包自动升级或删除。
bullseye-default
例如,如果另一个包与您的包所依赖的包之一发生冲突,这将很有用。标记bullseye-default
为保留将阻止它被自动删除(从而导致它所依赖的软件包成为自动删除的候选者,如果没有其他软件包依赖/推荐/建议它们)。
如果您需要升级bullseye-default
,则必须手动执行此操作,然后记住apt-mark hold bullseye-default
再次运行(因为升级包会清除保留状态)。
顺便说一句,apt-mark
还可以用于更改软件包的自动/手动安装状态 - 例如apt-mark auto packagename
或apt-mark manual packagename
。它还可用于显示自动安装和手动安装的软件包列表:apt-mark showauto
和apt-mark showmanual
。