关于 Gentoo 的 sets, world, word_sets

sets

sets 表示一个拥有若干软件包的集合,相当于软件组。系统预定义了一些 sets,可使用 --list-sets 查看所有 sets (包括自定义)

1 $ emerge --list-sets
2 devel
3 downgrade
4 installed
5 selected
6 system
7 world
8 ...

可以自己定义 sets

将其定义在 /etc/portage/sets 下就行了,比如定义一个 mediasets

1 $ cat /etc/portage/sets/media
2 app-i18n/fcitx
3 app-i18n/fcitx-configtool
4 app-i18n/fcitx-sunpinyin
5 app-misc/screenfetch
6 media-gfx/gimp
7 media-gfx/scrot
8 ...

安装一个 sets 就像普通包一样,不同的是需要使用 @sets 告诉 portage 这是一个 sets。比如要安装上面 media 这个 sets 中的所有包,就要使用 emerge -av @media。系统预定义的 sets 可以省略 @,

world

world 是一个预定义的 sets

Packages installed:    546
Packages in world:     55
Packages in system:    44
Required packages:     546
  • Packages installed: 就是系统实际安装的包

  • Packages in world: 预定义的 world 的包

  • Packages in system: 预定义的 system 的包

  • Required packages: 就是 world 里面的包与其中的包的依赖包的集合

Required 包代表当前需要的包,而 Installed 代表实际安装的包,一般情况下两者时相同的,但有时会不相同。

  • 当 Installed 的包比 Required 包少的时候,使用 emerge -uD world 可以自动补全缺失的包

  • 当 Installed 的包比 Required 包多的时候,使用 emerge --depclean 可以自动卸载多余的包

当安装一个包的时候,portage 会将它记录在 world 文件里。比如安装 awesome: emerge -av awesome`时,由于 `awesome 依赖 lua imagemagick 等包,因此这些包会被安装,但是只有 awesome 这一个包会被记录在 world 文件里。

只想安装一个包而不想被记录在 world 文件里,可以使用 -1 / --oneshot 参数。

安全地删除一个包使用 emerge --depclean [pkg_name]

删除了之后,会从 world 文件里删除这个包,因此也可以先手动修改 world 文件,删除这个包,然后再直接 emerge --depclean 就行了

world_sets

world_sets 作用跟 world 一样,区别是 world_sets 里面记录的是 sets

1 $ cat /var/lib/portage/world_sets
2 @devel
3 @media
4 @utils
5 @xfce4

因此上面说的 Package in World 实际上是 world 中的包 + world_sets 里面的 sets 中定义的包的集合 而 Required Packages 就是 Package in World 与其依赖包组成的。

emerge -av @media 的时候,portage 会把 @media 记录在 world_sets 里。

本文作者: zhustec

本文标题: 关于 Gentoo 的 sets, world, word_sets

本文链接: https://blog.zhustec.me/posts/something-about-sets-world-and-word-sets-in-gentool

发布时间: 2014-09-27T14:45:00+00:00

版权声明: 本文由 zhustec 原创 采用 CC BY-NC-ND 4.0 许可协议 转载请保留以上声明信息!