运行并重启后,我意识到的第一件事apt autoremove
是 DockX 不再启动。我一眼就/var/log/apt/term.log
发现,尽管这些软件包在发生时正在使用,但它们确实被消灭了:
Removing dockbarx (0.93+git20190103-1~ppa3) ...
Removing dockbarx-applet-appindicator (0.93+git20190103-1~ppa3) ...
Removing dockbarx-applet-clock (0.93+git20190103-1~ppa3) ...
Removing dockbarx-applet-hello-world (0.93+git20190103-1~ppa3) ...
Removing dockbarx-applet-volume-control (0.93+git20190103-1~ppa3) ...
Removing dockbarx-dockx (0.93+git20190103-1~ppa3) ...
我的问题是:为什么apt
决定删除这些软件包以及如何防止将来出现这种行为?
更新
有人认为这些软件包被删除是因为它们是其他一些已删除软件包的依赖项。事实并非如此。无论如何,我回滚了虚拟机,现在我可以查看事件发生前的状态,例如dockbarx
:
~$ apt-rdepends -r dockbarx
Reading package lists... Done
Building dependency tree
Reading state information... Done
dockbarx
~$
就是这样。没有依赖于 的软件包dockbarx
。
我怀疑这种情况与我从不再连接的 PPA 安装这些软件包有关。这其中可能存在联系吗?
更新 2
手动检查日志发现该dockbarx
软件包是作为的依赖项安装的xfce4-dockbarx-plugin
,而我的系统不再知道该软件包 - 很可能是因为 PPA 断开连接:
~$ apt show xfce4-dockbarx-plugin
N: Unable to locate package xfce4-dockbarx-plugin
N: Unable to locate package xfce4-dockbarx-plugin
E: No packages found
这就是为什么apt-rdepends
给出错误输出的原因dockbarx
。总的来说,下面的答案是正确的,我接受它。
这真是一个侦探故事。
答案1
一切都与 apt-marking 有关
任何不是自动安装的依赖项(apt 标记为“auto”)的指定软件包(apt 标记为“manual”)的依赖项的软件包都可以自动删除。
例子:
sudo apt install foo bar
- 指定的包(foo、bar)将被标记手动的
- 所有未指定的依赖项(libfoo1、baz)将被 apt 标记汽车
显然,您删除了所有需要那些“自动”依赖项的“手动”包。
- Apt 不知道或不关心特定软件是否正在使用。它并不是特别智能,而且绝对不神奇。
为了防止自动删除包,只需确保包装上有“手册”的适当标记。
apt-mark showauto // List the packages apt-marked 'auto'
// Listing does not require sudo
// It's a long list
sudo apt-mark manual <package_name> // Change a package from 'auto' to 'manual'