Gentoo的精髓——Portage

虽然其实这是一个标题党式的title…portage来自于BSD上大名鼎鼎的ports

比较全面系统的介绍请参考portage的官方介绍

按照官方的说法,portage是gentoo在软件管理上最值得称道的革新功能。

由于portage相关的内容非常的多,也可以说是gentoo的精髓所在,所以涉及篇幅也会比较长,打算分篇来写。将会包含以下一些部分

  • emerge的介绍
  • make.conf和portage的一些配置文件和其他杂项
  • USE flag详解
  • slotvirtualmeta等包
  • 常用portage工具
  • 使用二进制包
  • 日常维护系统的经验和技巧
  • 有趣的社会化编译gentwoo
  • 打包格式ebuild
  • 使用第三方仓库的工具layman

可能的话还想来介绍分析一下portage的实现分析等等。

认识包管理器emerge

对于大部分情况来说,用户和portage打交道最常用的就是emerge这个命令了,你可以认为它就是gentoo下的包管理器,不过准确来说是portage啦。

对于刚刚安装完gentoo的用户来说,由于stage3只提供了最基本的toolchains和必要的lib外几乎没其他工具和软件,所以第一时间想了解的就是如何安装软件,这一节我们先介绍一下emerge的常用方法。

更加全面完整的信息请认真man emerge

安装软件

emerge pkg_name

不出意外的话你会看到emerge开始拉取源代码包、自动进行configuremake等操作,顺利的话在执行完毕后,软件便已安装上去了。大体上和其他二进制的发行版似乎没多大区别,和ports一样,它会自动获取源代码、配置后安装。

注意,emerge直接安装的包都会进入一个叫做world的集合里,以便批量操作,下面会使用到。

同步软件信息

emerge --sync

gentoo把软件信息叫做portage tree,这条命令会让emerge从配置好的地址去rsync同步最新的信息。

如果是首次同步,或者距离上次同步很久再进行操作,可以使用emerge-websync,它采用下载器直接通过http获取portage tree的压缩包,速度上比rsync更快。

搜索包

emerge --search kernel # 搜索包名含有`kernel`
emerge --searchdesc kernel # 搜索包描述信息含有`kernel`

常用参数,要注意大小写哦XD

[ -1 | --oneshot ]   安装,并不计入`world`集合里
[ -a | --ask ]       在执行emerge操作前询问
[ -c | --depclean ]  自动检查、清理不再被依赖的包
[ -f | --fetchonly ] 仅下载源代码,不进行安装
[ -j | --jobs ]      相当于`make -j`参数,并行编译进程数量;可以覆盖`make.conf`里的配置
[ -p | --pretend ]   模拟安装,显示会安装哪些包,一般用来确认依赖和配置情况
[ -t | --tree ]      让emerge显示依赖的缩进过的树形结构,配合`-e`或者`-Du`使用
[ -u | --update ]    让emerge检查目标的版本是否更新,若无更新则无操作
[ -v | --verbose ]   显示详细的USE flag信息
[ -C | --unmerge ]   不检查依赖,直接删除
[ -D | --deep ]      查询被目标直接依赖以外的包,会获取更多、更准确的信息
[ -N | --newuse ]    让emerge检查目标和依赖的USE flag是否更新,若有更新也一并emerge
[ --with-bdeps=y|n ] 一并emerge本来不严格依赖的编译依赖

根据以上这些选项,我们可以得出一些常用的例子。

# 检查包安装的USE flag详细情况
emerge -pv

# 因为有时候检查会时间比较长,可以用这个组合先检查是否有问题,OK就直接确认
emerge -av

# 一次性升级整个系统的包,包括system集合和world集合
emerge -DNuav --with-bdeps=y @system @world

# 自动清理不再需要的依赖
emerge -ac

portage的主要配置make.conf

从名字上可以看出,portage差不多就可以替代原来人肉编译安装软件的自动化工具make,代为处理软件包的管理工作。

比较新的版本都已经建议把make.conf的位置放到/etc/portage里去;比较早的版本是在/etc/里。

记得在安装与启动里在安装前需要配置这个文件。比较全面的配置说明依然可以在man make.conf里找到。我们看看一些比较关键和有趣的选项吧。

CHOST    # gcc编译时的参数,和主机的架构有关
CFLAGS   # C编译时的优化参数,比如常见的`-march`,`-O`等,可以参考gentoo safe cflags里的条目
CXXFLAGS # C++编译时的优化参数,同理,一般设置的和CFLAGS一致
MAKEOPTS # make的参数,一般可以在这里指定`-j`等
SYNC     # portage tree同步的地址,格式一般是`rsync://example.com/path/to/gentoo-portage`
GENTOO_MIRRORS  # 获取distfiles,也就是源代码和补丁的tarball时下载的地址,可以指定多个哦,用空格分开
FEATURES        # 指定porage一些操作时的默认动作,比如利用distcc、ccache,打包二进制文件、不安装文档等
USE             # 全局的USE flag设置,一些设置还来自于系统profile的设定

# 比较有趣的设置...让portage把一些警告信息关闭掉...嗯,我知道自己在干吗啦,不用你多嘴XDDD
I_KNOW_WHAT_I_AM_DOING=yes

至此,相信大家已经会使用emerge来安装、管理软件包了,安装完系统更多的请阅读手册哦XD

下期将为带来portage最重要的功能之一——USE flag和相关配置文件。

__END__