Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2490753
  • 博文数量: 609
  • 博客积分: 10061
  • 博客等级: 上将
  • 技术积分: 5920
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-25 08:30
文章分类

全部博文(609)

文章存档

2010年(13)

2009年(39)

2008年(558)

我的朋友

分类: LINUX

2008-08-25 13:16:24

C. 使用Portage

1. 文件和目录

1.a. Portage文件

Portage附带了一个默认的配置文件/etc/make.globals。当你打开它时,你就会发现所有的Portage配置选项都是通过变量来控制的。Portage读取的是什么变量,这些变量分别又是什么意思,下面将详细解释。

因为许多配置命令在不同的架构下是不同的,Portage也有相应的各组默认配置文件,它们是你的profile的一部分。你的profile是/etc/make.profile这个链接文件指向的目录;Portage的配置选项是在你的profile以及所有被继承的profile中的make.defaults文件中设定的。我们稍后将详细解释profile及/etc/make.profile目录。

如果打算改变配置变量,不要变更/etc/make.globals或是make.defaults。而应该修改/etc/make.conf,它比前面的几个文件有更高的优先级。你也会发现有一个/etc/make.conf.example。顾名思义,它是一个范例文件而已——Portage并不读取这个文件。

你也可以将一个Portage的配置变量定义为环境变量,但我们并不推荐这样做。

我们已经见到过/etc/make.profile目录了。不过,这并不是一个真正的目录,而是一个指向profile的符号链接,默认情况下是一个位于/usr/portage/profiles里的目录,虽然你也可以在其他地方创建自己的profile并指向他们。这个符号链接指向的profile就是你的系统所使用的。

一个profile包含了Portage需要的与架构相关的信息,比如该profile对应的system包含的软件包的列表,以及对这个profile来说不能运行的(或者被屏蔽掉)的软件列表,等等。

当你需要变更Portage安装软件的行为时,你需要做的就是编辑/etc/portage 中的文件。我们强烈建议你使用/etc/portage中的文件而不是通过修改环境变量来变更这些行为!

/etc/portage目录中,你可以创建下列文档:

  • package.mask它列出了你永远不希望Portage安装的软件包。
  • package.unmask它列出了本来Gentoo的开发者不建议安装的,但是你希望能安装的软件包。
  • package.keywords它列出了还未被确认适合你的系统或架构,但是你希望能安装的软件包。
  • package.use它列出了你希望某些特定软件包使用的而不是整个系统使用的USE标记。

这些并不需要一定是文件;它们也可以是有包含单个软件包信息文件的目录。更多关于/etc/portage目录的信息及你能创建的文件的完整列表可以在Portage的手册页中找到:

代码 1.1: 阅读Portage的手册页

$ man portage

先前提到的配置文件不能保存在其他地方——Portage总是会在这些特定的位置搜索配置文件。不过Portage还用了许多其他的位置来满足不同的目的:编译、保存源代码、保存portage树。

所有的这些目的都有众所周知的默认位置,不过你可以根据你自己的喜好通过/etc/make.conf来改变它们。本章中的其他部分将解释Portage使用哪些特定的位置存放它们以及怎样改变它们在你的文件系统中的存放地点。

这篇文档并不是一份全面的参考。如果你需要100%范围的说明,请参看Portage和make.conf的手册页:

代码 1.2: 阅读Portage和make.conf的手册页

$ man portage
$ man make.conf

1.b. 储存文件

Portage树的默认位置是/usr/portage。这是PORTDIR变量定义的。当你把Portage树保存在其他位置(通过改变这个变量),不要忘了相应地改变符号链接/etc/make.profile指向的位置。

如果你改变了PORTDIR变量,你可能也需要改变下面几个变量,因为它们不会知道PORTDIR变量的改变。这是Portage处理这些变量的方式导致的:PKGDIR、DISTDIR、RPMDIR。

虽然Portage并不默认使用预编译的二进制包,但却对其有多方面的支持。当你要求Portage使用预编译的二进制包时,它就会在/usr/portage/packages中寻找它们。这个位置是通过PKGDIR变量定义的。

程序的源代码默认保存于/usr/portage/distfiles。这个位置是通过DISTDIR变量定义的。

Portage将你系统的状态(装了哪些软件包,什么文件属于哪个软件包……)保存在/var/db/pkg不要手动改变这些文件!它可能破坏Portage对你系统的了解。

Portage缓存(包括修改时间、虚拟包、依赖关系树信息……)储存在/var/cache/edb。这个位置就是一个缓存:如果你没有正在运行portage相关的程序,你就可以清空它。

1.c. 编译软件

Portage的临时文件默认保存在/var/tmp。这是通过PORTAGE_TMPDIR变量定义的。

如果你改变了PORTAGE_TMPDIR变量,你也需要改变下列的变量,因为它们不会知道PORTAGE_TMPDIR变量的改变。这是由于PORTAGE处理这些变量的方式导致的:BUILD_PREFIX。

Portage为每一个它所安装的软件包在/var/tmp/portage里创建特定的编译目录。这一位置是通过BUILD_PREFIX变量定义的。

默认情况下,Portage将所有的文件安装到当前文件系统(/)里。但是你可以通过改变环境变量ROOT来改变它。这在你想要创建一个新的编译镜像时是很有用的。

1.d. 日志特性

Portage能为每一个ebuild建立日志文件,但只有当PORT_LOGDIR变量设定的位置是portage可写的才行。默认情况下,这个变量没 有设定。如果你没有设定PORT_LOGDIR,你就不会收到当前日志系统报告的任何编译日志,然而你可能收到一些来自新的elog机制的日志。如果你定义了PORT_LOGDIR并且你也使用elog,你就将收到编译日志以及elog保存的任何日志,就像下文解释的一样。

Portage通过elog对日志记录提供精确的控制:

  • PORTAGE_ELOG_CLASSES:这是你设置什么信息被记入日志的地方。你可以使用任何用空格分隔的infowarnerrorlogqa的组合。
    • info: 记录下ebuild打印的“einfo”信息
    • warn: 记录下ebuild打印的“ewarn”信息
    • error: 记录下ebuild打印的“eerror”信息
    • log: 记录下一些ebuild中的“elog”信息
    • qa: 记录下ebuild打印的“QA Notice”信息
  • PORTAGE_ELOG_SYSTEM:这是用来选择处理日志信息的模块的。如果留空,则日志记录就被取消。你可以使用任何用空格分隔开的savecustomsyslogmailsave_summarymail_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不兼容。

阅读(983) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~