手册:AMD64/使用Portage/文件和目录
Portage文件
配置指南
Portage附带了一个默认的配置文件/usr/share/portage/config/make.globals。当你打开它时,你就会发现所有的Portage配置选项都是通过变量来控制的。Portage读取的是什么变量,这些变量分别又是什么意思,下面将详细解释。
因为许多配置命令在不同的架构下是不同的,Portage 也有相应的各组默认配置文件,它们是你的profile的一部分。你的 profile 是/etc/portage/make.profile 这个链接文件指向的目录;Portage 的配置选项是在你的make.defaults以及所有被继承的profile中的make.defaults 文件中设定的。我们稍后将详细解释profile及/etc/portage/make.profile目录。
如果打算改变配置变量,不要变更/usr/share/portage/config/make.globals 或者make.defaults。而应该修改/etc/portage/make.conf,它比前面的几个文件有更高的优先级。你会发现还有一个/usr/share/portage/config/make.conf.example文件。顾名思义,它仅仅是一个例子而已——Portage并不读取这个文件。
你也可以将一个Portage的配置变量定义为环境变量,但我们并不推荐这样做。
Profile特定的信息
我们已经见到过 /etc/portage/make.profile 目录了。不过,这并不是一个真正的目录,而是一个指向 /var/db/repos/gentoo/profiles/ 的符号链接,默认情况下是一个位于/usr/portage/profiles里的目录,虽然你也可以在其他地方创建自己的profile并指向他们。这个符号链接指向的profile就是你的系统所使用的。
一个profile包含了Portage需要的与架构相关的信息,比如该profile对应的system包含的软件包的列表,以及对这个profile来说不能运行的(或者被屏蔽掉)的软件列表,等等。
用户特定的配置
当你需要变更Portage安装软件的行为时,你需要做的就是编辑 /etc/portage/ 中的文件。我们强烈建议你使用/etc/portage/ 中的文件而不是通过修改环境变量来变更这些行为!
在 /etc/portage/目录中,你可以创建下列文档:
- package.mask它列出了你永远不希望Portage安装的软件包。
- package.unmask 它列出了本来Gentoo的开发者不建议安装的,但是你希望能安装的软件包。
- package.accept_keywords 它列出了还未被确认适合你的系统或架构,但是你希望能安装的软件包。
- package.use它列出了你希望某些特定软件包使用的而不是整个系统使用的USE标记。
这些并不需要一定是文件;它们也可以是有包含单个软件包信息文件的目录。更多关于 /etc/portage/目录的信息及你能创建的文件的完整列表可以在Portage的手册页中找到:
user $
man portage
改变Portage文件和目录的位置
先前提到的配置文件不能保存在其他地方——Portage总是会在这些特定的位置搜索配置文件。不过Portage还用了许多其他的位置来满足不同的目的:编译、保存源代码、保存portage数据库。
所有的这些目的都有众所周知的默认位置,不过你可以根据你自己的喜好通过/etc/portage/make.conf来改变它们。本章中的其他部分将解释Portage使用哪些特定的位置存放它们以及怎样改变它们在你的文件系统中的存放地点。
这篇文档并不是一份全面的参考。如果你需要100%范围的说明,请参看Portage和make.conf的手册页:
user $
man portage
user $
man make.conf
储存文件
Gentoo ebuild 软件仓库
Gentoo ebuild repository 的默认位置是/var/db/repos/gentoo。这由缺省的 repos.conf 文件定义,位于 /usr/share/portage/config/repos.conf。 要修改默认值,请将此文件复制到 /etc/portage/repos.conf/gentoo.conf 并更改 location 设置。 当将Gentoo ebuild 存储库存储在别处(通过更改此变量)时,不要忘记相应地更改/etc/portage/make.profile 符号链接。
如果你改变了/etc/portage/repos.conf/gentoo.conf里面的location变量,你可能也需要改变下面几个变量,因为它们不会知道location变量的改变。这是Portage处理这些变量的方式导致的:PKGDIR, DISTDIR, and RPMDIR。
预编译二进制包
虽然Portage并不默认使用预编译的二进制包,但却对其有多方面的支持。当你要求Portage使用预编译的二进制包时,它就会在 /var/cache/binpkgs。中寻找它们。这个位置是通过 PKGDIR 变量定义的。
源代码
程序的源代码默认保存于 /var/cache/distfiles。这个位置是通过DISTDIR 变量定义的。
Portage 数据库
Portage将你系统的状态(装了哪些软件包,什么文件属于哪个软件包……)保存在/var/db/pkg。
请勿手动更改系统状态文件!它可能会破坏 Portage 对系统的认知。
Portage缓存
Portage缓存(包括修改时间、虚拟包、依赖关系树信息……)储存在/var/cache/edb。这个位置就是一个缓存:如果你没有正在运行portage相关的程序,你就可以清空它。
编译软件
Portage的临时文件
Portage的临时文件默认保存在/var/tmp/。这是通过 PORTAGE_TMPDIR变量定义的。
编译目录
Portage为每一个它所安装的软件包在/var/tmp/portage/里创建特定的编译目录。这一位置是在 portage/ 中已添加的 PORTAGE_TMPDIR 变量定义。
Live文件系统位置
默认情况下,Portage将所有的文件安装到当前文件系统(/)里。但是你可以通过改变环境变量ROOT来改变它。这在你想要创建一个新的编译镜像时是很有用的。
日志特性
Ebuild日志
Portage能为每一个ebuild建立日志文件,但只有当 PORT_LOGDIR变量设定的位置是portage可写的才行。默认情况下,这个变量没有设定。如果你没有设定 PORT_LOGDIR,你就不会收到当前日志系统报告的任何编译日志,然而你可能收到一些来自新的elog机制的日志。
如果你定义了PORT_LOGDIR并且你也使用 elog,你就将收到编译日志以及elog保存的任何日志,就像下文解释的一样。
Portage通过elog对日志记录提供精确的控制:
- PORTAGE_ELOG_CLASSES: 这是你设置什么信息被记入日志的地方。你可以使用任何用空格分隔的info、warn、error、log和qa的组合。
- info: 记录下ebuild打印的 "einfo" 信息
- warn: 记录下ebuild打印的"ewarn" 信息
- error: 记录下ebuild打印的 "eerror"信息
- log: 记录下ebuild打印的 "elog"信息
- qa: 记录下ebuild打印的 "QA Notice"信息
- PORTAGE_ELOG_SYSTEM: PORTAGE_ELOG_SYSTEM:这是用来选择处理日志信息的模块的。如果留空,则日志记录就被取消。你可以使用任何用空格分隔开的save、custom、syslog、mail、save_summary和mail_summary的组合。你必须至少选择一个模块以使用elog。
- save: 表示将每一个软件包的日志保存在$PORT_LOGDIR/elog中,或者是在$PORT_LOGDIR/没有配置的情况下保存在/var/log/portage/elog 目录下面。
- custom: 将所有的信息传递给用户在$PORTAGE_ELOG_COMMAND中定义的命令,这将在随后讨论。
- syslog: 把所有的信息发送给已安装的系统日志软件。
- mail:把所有的信息传递给用户在$PORTAGE_ELOG_MAILURI中定义的邮件服务器;这将在随后讨论。这一elog的邮件特性需要>=portage-2.1.1。
- save_summary: 和save类似,不过它把所有的信息保存在$PORT_LOGDIR/elog/summary.log里,或者/var/log/portage/elog/summary.log里,如果$PORT_LOGDIR没有定义的话。
- mail_summary: 和mail类似,不过它会在emerge结束时把所有的信息在一个邮件里发送出去。.
- PORTAGE_ELOG_COMMAND: 这个仅仅在custom模块被激活时使用。在这里你指定一个命令来处理日志信息。注意,你可以利用两个变量:${PACKAGE}是软件包的名字和版本,而${LOGFILE}是日志文件的绝对路径。这里是一个可能的用法:
PORTAGE_ELOG_COMMAND="/path/to/logger -p '\${PACKAGE}' -f '\${LOGFILE}'"
- PORTAGE_ELOG_MAILURI:这包含了mail模块的设定,如地址、用户、密码、邮件服务器、端口。默认配置是 “root@localhost localhost” 这里是一个使用smtp服务器的例子,基于用户名和密码认证并使用特定端口(默认端口是25):
PORTAGE_ELOG_MAILURI="user@some.domain username:password@smtp.some.domain:995"
- PORTAGE_ELOG_MAILFROM: 允许你配置日志邮件的"from" 地址;如果没有配置的话,默认是"Portage" 。
- PORTAGE_ELOG_MAILSUBJECT: 允许你为日志邮件生成一个主题行。注意你可以使用两个变量:${PACKAGE}将会显示软件包的名子和版本,而${HOST}则是运行Portage的主机的FQDN。
PORTAGE_ELOG_MAILSUBJECT="package \${PACKAGE} was merged on \${HOST} with some messages"
如果你使用Portage-2.0.*中的enotice,你必须完全移除enotice,因为它和elog不兼容。