This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
手册:PPC64/使用/Portage功能特性
PPC64 Handbook |
---|
安装 |
关于安装 |
选择安装媒介 |
配置网络 |
准备磁盘 |
安装stage3 |
安装基本系统 |
配置Linux内核 |
配置系统 |
安装系统工具 |
配置系统引导程序Bootloader |
收尾安装工作 |
使用Gentoo |
Portage介绍 |
USE标记 |
Portage功能特性 |
初始化脚本(Initscript)系统 |
环境变量 |
使用Portage |
文件和目录 |
变量 |
混合使用不同的软件分支 |
额外的工具 |
定制Portage树 |
高级特性 |
网络配置 |
入门 |
高级配置 |
模块化网络 |
无线 |
添加功能 |
动态管理 |
Portage特性
Portage有几个附加的特性,它们能够令您的Gentoo之旅更加愉快。这些特性中的大多数依赖于某些能够提高性能、可靠性、安全性等的软件工具。
为了打开或者关闭某一Portage特性您需要编辑 /etc/portage/make.conf中的 FEATURES变量,这个变量包含不同的特性关键字,用空格分开。在一些情况下您可能还需要额外的安装被这个特性所依赖的工具。
并不是所有Portage所支持的特性都在这里列出。完整的概述,请查阅make.conf手册页:make.conf
user $
man make.conf
查看 FEATURES 的默认设置,运行emerge --info并且查找FEATURES变量或者用grep 显示它:
user $
emerge --info | grep ^FEATURES=
分布式编译
使用distcc
distcc 是一个分布式编译程序,可以把编译任务分配给同一网络中的不同机器,这些机器的配置不必完全相同。distcc客户端发送所有必须的信息给所有可利用的distcc服务器(运行distccd的机器)。这样它们每一个都能为客户端编译一部分源码。所获得的效果就是更短的编译时间。
您可以在Gentoo Distcc文档里找到更多的关于Distcc的信息(包括如何让它在Gentoo上工作)。
安装 distcc
Distcc使用一个图形化监视器来监视您的机器发送出去的编译工作。请把 USE=gnome
或 USE=gtk
放进您的USE设置中。
root #
emerge --ask sys-devel/distcc
激活Portage的distcc支持
将 distcc
添加到/etc/portage/make.conf.中的 FEATURES </ var>变量中。 接下来,编辑MAKEOPTS变量,并增加系统允许的并行构建的数量。 一个已知的方法是填写 -jN
其中N
是运行distccd(包括当前主机)的CPU数量+1(或者核心数+1),但这只是一个建议。
现在运行 distcc-config并输入已有的DistCC服务器。作为一个简单例子,我们假设已有的DistCC服务器是192.168.1.102(当前主机)、192.168.1.103和192.168.1.104(两个远端服务器):
root #
distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"
当然,也不要忘了运行distccd系统服务:
root #
rc-update add distccd default
root #
/etc/init.d/distccd start
缓冲编译结果
关于ccache
ccache是一个快速编译器缓存。 无论何时编译应用程序,它都将缓存中间结果,以便每当重新编译相同的程序时,编译时间大大减少。 第一次运行ccache时,它会比正常编译慢得多。 但是后续的重新编译应该更快。 ccache只有在相同的应用程序将被重新编译多次(或相同应用程序的升级频繁发生)时才有用; 因此它通常只对软件开发人员有用。
如果您对ccache的工作机制有兴趣,请访问homepage主页.
已知ccache会导致大量的编译失败。 有时ccache会保留旧代码对象或损坏的文件,这可能导致无法破损的源码。 如果发生这种情况(例如"File not recognized: File truncated"出现在构建日志中),请尝试重新编译ccache导致错误的应用程序 (
FEATURES="-ccache"
到/etc/portage/make.conf) 安装 ccache
要安装ccache,只需要:
root #
emerge --ask dev-util/ccache
激活Portage ccache 支持
打开 /etc/portage/make.conf并添加ccache
到FEATURES变量。然后添加一个新的变量ccache
并设置它为ccache
:
FEATURES="ccache" CCACHE_SIZE="2G"
要检查ccache是否运行,只需让它提供给您它的统计数据。因为Portage使用一个不同的ccache主目录,您需要设定CCACHE_DIR变量:
root #
CCACHE_DIR="/var/tmp/ccache" ccache -s
/var/tmp/ccache/是Portage的默认ccache主目录;为了修改这个设置,您可以设定/etc/portage/make.conf中的CCACHE_DIR参数。
不过,如果您运行 ccache ,它使用的默认目录是${HOME}/.ccache/。这就是为什么当您查询(Portage)ccache统计数据的时候您需要设定 CCACHE_DIR参数的原因。
非Portage编译中使用ccache
如果您需要在非Portage编译中使用ccache,添加 /usr/lib/ccache/bin/到您 PATH参数里靠前的位置(在/usr/bin之前)。这一点可以通过编辑在您用户主目录中的~/.bash_profile文件来实现。使用~/.bash_profile是定义 PATH参数的一个方式
PATH="/usr/lib/ccache/bin:${PATH}"
二进制包支持
创建预编译包
Portage支持用预编译包安装。尽管Gentoo本身并不提供预编译包,Portage依然能够处理预编译包。
如果某个包已经被安装在您的系统上,您可以用quickpkg来创建一个预编译包。也可以用带有 --buildpkg
或--buildpkgonly
选项的emerge命令。
如果您希望Portage为您所安装的每一个单独的包创建预编译包,在 FEATURES 中添加buildpkg
参数.
预编译包的更多扩展支持可以用catalyst得到。关于catalyst的更多信息请参阅Catalyst FAQ。
安装预编译包
尽管Gentoo并不提供,但是您可以自己建立一个“中心仓库”来存放预编译包。如果您希望使用这个仓库,您需要设定PORTAGE_BINHOST参数使Portage能够知道它。例如,如果预编译包在 ftp://buildhost/gentoo 上:
PORTAGE_BINHOST="ftp://buildhost/gentoo"
当您需要安装预编译包的时候,在emerge命令后的 --getbinpkg
选项旁加入 --usepkg
选项。前者让emerge命令从预定的服务器上下载预编译包,后者让emerge首先试图安装预编译包,如果预编译包不存在,那么才下载并编译源码。
例如:用预编译包安装gnumeric
root #
emerge --usepkg --getbinpkg gnumeric
关于emerge的预编译包的更多信息请参阅emerge手册页:
user $
man emerge
将预构建的软件包分发给他人
如果预构建的软件要分发给其他人,请确保这样做是被允许的。 检查上游软件包的分发要求。 例如,对于在GNU GPL协议下发布的软件,源代码必须与二进制文件一起提供。
如果构建的二进制程序不可分发,则Ebuild可以在其RESTRICT 变量中定义 bindist
限制。 有时,此限制取决于一个或多个USE标志。
默认情况下,Portage将不会屏蔽任何包,因为有限制。 这可以通过在/etc/portage/make.conf中设置ACCEPT_RESTRICT变量来全局更改。 例如,要掩盖具有bindist
限制的软件包,请将以下行添加到make.conf:
ACCEPT_RESTRICT="* -bindist"
还可以通过将ACCEPT_RESTRICT选项用于emerge命令,来覆盖--accept-restrict
变量。 例如, --accept-restrict=-bindist
将临时屏蔽带有bindist
限制的包。
还可以考虑在分发包时设置ACCEPT_LICENSE变量。 请参阅 授权许可。
每个 用户完全有责任遵守软件许可条款和每个用户国家的法律。 ebuilds(RESTRICT或LICENSE)定义的元数据变量可以为禁止预编译文件分发提供指导。但是Portage的输出或Gentoo开发人员的回答 不是 法律声明,不应该依赖他们。 谨慎遵守您的当地的法律。
下载文件
并行下载
Portage is normally run as the root user. Setting FEATURES="userfetch"
will allow Portage to drop root privileges while fetching package sources and run with user/group permissions of portage:portage. This is a small security improvement.
If userfetch
is set in FEATURES be sure to change the owner of all the files beneath /usr/portage using the chown command with root privileges:
root #
chown --recursive --verbose portage:portage /usr/portage
验证的Gentoo数据库照
管理员可以选择使用由Gentoo基础结构发布的加密验证的快照更新本地Gentoo ebuild 软件仓库。 这确保没有流氓的rsync镜像将不必要的代码或包添加到系统下载的软件仓库。
以下是更新的设置和使用方法 emerge-webrsync或者使用sync repos.conf。
Gentoo发布的OpenPGP密钥现在可作为二进制密钥环使用。 这些可以通过 app-crypt/gentoo-keys 包安装:
root #
emerge --ask app-crypt/gentoo-keys
将把keyring 安装到/var/lib/gentoo/gkeys/keyrings/gentoo/release 。
FEATURES="webrsync-gpg" PORTAGE_GPG_DIR="/var/lib/gentoo/gkeys/keyrings/gentoo/release"
[DEFAULT] main-repo = gentoo [gentoo] # Disable synchronization by clearing the values or setting auto-sync = no # Do not set value of the variables in this configuration file using quotes ('' or "")! # For portage-2.2.18 use 'websync' # For portage-2.2.19 and greater use 'webrsync' (websync was renamed to webrsync) sync-type = webrsync sync-uri = auto-sync = yes
确保安装了 app-crypt/gnupg:
root #
emerge --ask app-crypt/gnupg
使用 gpg 验证密钥环中的密钥是否是正确的密钥
root #
gpg --homedir /var/lib/gentoo/gkeys/keyrings/gentoo/release --with-fingerprint --list-keys
验证钥匙的指纹 those listed on the official Gentoo release engineering project page.
如果任何在 app-crypt/gentoo-keys 中已安装的key 到期了, 运行 app-crypt/gkeys 中的 gkeys 从key 服务器刷新key :
root #
emerge --ask app-crypt/gkeys
root #
gkeys refresh-key -C gentoo
对每个要信任的密钥重复以下命令。 (将密钥ID替换为您想要信任的所需密钥的“0x ...”。)
root #
gpg --homedir /var/lib/gentoo/gkeys/keyrings/gentoo/release --edit-key 0xDB6B8C1F96D8BF6D trust
如果出现GPG命令行菜单,请完全信任该键并通过输入以下命令退出程序:
gpg>
4
gpg>
quit
系统现在设置为仅使用OpenPGP/gpg 验证的快照进行同步。
有几个命令选项可用于执行同步。
只需以下命令之一即可同步。 点击Portage's sync wiki article 查看更多信息.
root #
emerge --sync
root #
emaint sync -a
root #
emaint sync --repo gentoo
root #
emerge-webrsync
Verify distfiles
To re-verify the integrity and (potentially) re-download previously removed/corrupted distfiles for all currently installed packages, run:
root #
emerge --ask --fetchonly --emptytree @world