在 vanilla Gentoo 上,为什么 Portage “emerge install & remove” 不删除软件包?

在 vanilla Gentoo 上,为什么 Portage “emerge install & remove” 不删除软件包?

在新安装的 Gentoo 2.13 系统上,我运行以下命令来安装我的第一个软件包:

$ cat /etc/gentoo-release
Gentoo Base System release 2.13
$ sudo emaint -a sync
$ sudo emerge app-editors/emacs
$ emacs                            # It runs successfully

安装成功。作为测试,我立即尝试删除相同的包,但操作失败:

$ sudo emerge -cav app-editors/emacs

Calculating dependencies... done!
  app-editors/emacs-29.1-r1 pulled in by:
    app-emacs/emacs-common-1.9 requires >=app-editors/emacs-23.1:*

>>> No packages selected for removal by depclean

为什么会出现这种情况?我是否发出了错误的删除命令?我认为包管理器最简单的测试是在操作系统的新副本上安装和删除包。

非常感谢您的澄清。

答案1

解释

正如 @Dean Brundage 正确指出的那样,Big C 代表 Clean,无需检查依赖包。小c代表清理依赖包。在你的例子中app-emacs/emacs-common是一个反向依赖app-editors/emacs

恰当的卸载它的方法是:

  1. emerge -cav app-emacs/emacs-common
  2. emerge -cav app-editors/emacs

这正确地删除了依赖关系和请求的包。

答案2

您正在寻找 --unmerge、-C

   --unmerge, -C
          WARNING: This action can remove important packages! Removes  all
          matching  packages  following a counter governed by CLEAN_DELAY.
          This does no checking of dependencies, so it may remove packages
          necessary  for  the  proper operation of your system.  Its argu-
          ments can be atoms or ebuilds. For a dependency aware version of
          --unmerge,  use  --depclean  or  --prune.   For  a  version with
          CLEAN_DELAY=0, use --rage-clean.

-c 是 --depclean ,它删除与显式合并的包不关联的包。

答案3

当您显式安装某个包时,它将添加到全局包文件中。当清理没有依赖于它的包时,Portage 会忽略这些包。

如果要显式删除包,请使用 --unmerge 标志。但是,如果您在不知情的情况下添加依赖于未合并的包的其他包,这可能会导致问题。推荐的解决方案是使用 --deselect 标志从全局文件中删除包,然后进行依赖项清理。

相关内容