4.6. 使用Poudriere编译套件

Poudriere是一个使用BSD授权条款用来建立与测试FreeBSD套件的工具。它使用FreeBSD Jail来建置独立的编译环境,这些Jail可以用来编译与目前所在系统不同FreeBSD版本的套件,也同样可以在主机为amd64的系统上编译供i386使用的套件。套件编译完成后的目录配置会与官方镜像站完全相同。这些套件可由pkg(8)及其他套件管理工具使用。

Poudriere可使用ports-mgmt/poudriere套件或Port安装。安装完成后会有一个示例的配置文件/usr/local/etc/poudriere.conf.sample。复制此档案到/usr/local/etc/poudriere.conf,编辑复制的档案来配合本地的设定。

虽然在系统上执行poudriere并不一定要使用ZFS,但使用了是有帮助的。当使用了ZFS,则必须在/usr/local/etc/poudriere.conf指定ZPOOL以及FREEBSD_HOST应设定到一个最近的镜像站。定义CCACHE_DIR可开启使用devel/ccache缓存的功能来缓存编译结果并减少那些需时常编译的代码的编译次数。将 poudriere数据集放到一个独立的目录并挂载到/poudriere可能会比较方便,其他设定项目采用预设值便足够。

侦测到的处理器数量可用来定义要同时执行多少个编译。并给予足够的虚拟內存,不论是RAM或交换空间,若虚拟內存不足,编译Jail的动作将会停止并被清除,会造成奇怪的错误讯息。

4.6.1. 初始化Jail与Port树

在设定之后,初始化poudriere来安装Jail及其所需的FreeBSD树与Port树。使用-j来指定Jail的名称以及-v来指定FreeBSD的版本。在执行FreeBSD/amd64的系统上可使用-a来设定要使用的构架为i386amd64,预设会采用使用uname所显示的构架。

# poudriere jail -c -j 10amd64 -v 10.0-RELEASE
====>> Creating 10amd64 fs... done
====>> Fetching base.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/base.txz      100% of   59 MB 1470 kBps 00m42s
====>> Extracting base.txz... done
====>> Fetching src.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/src.txz       100% of  107 MB 1476 kBps 01m14s
====>> Extracting src.txz... done
====>> Fetching games.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/games.txz     100% of  865 kB  734 kBps 00m01s
====>> Extracting games.txz... done
====>> Fetching lib32.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/lib32.txz     100% of   14 MB 1316 kBps 00m12s
====>> Extracting lib32.txz... done
====>> Cleaning up... done
====>> Jail 10amd64 10.0-RELEASE amd64 is ready to be used
# poudriere ports -c -p local
====>> Creating local fs... done
====>> Extracting portstree "local"...
Looking up portsnap.FreeBSD.org mirrors... 7 mirrors found.
Fetching public key from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Tue Feb 11 01:07:15 CET 2014:
94a3431f0ce567f6452ffde4fd3d7d3c6e1da143efec76100% of   69 MB 1246 kBps 00m57s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Tue Feb 11 01:07:15 CET 2014 to Tue Feb 11 16:05:20 CET 2014.
Fetching 4 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 48 patches.
(48/48) 100.00%  done.
done.
Applying patches...
done.
Fetching 1 new ports or files... done.
/poudriere/ports/tester/CHANGES
/poudriere/ports/tester/COPYRIGHT

[...]

Building new INDEX files... done.

在一台电脑,poudriere可使用多组设定在多个Jail编译来自不同Port树的Port。用来定义这些组合的自定义设定称作sets,可在安装ports-mgmt/poudriereports-mgmt/poudriere-devel后参考poudriere(8)中的CUSTOMIZATION章节来取得详细的信息。

在此处示范的基本设定放了单一个jail-,port-以及set-特定的make.conf/usr/local/etc/poudriere.d。在此示例使用的档案名称由Jail名称、Port名称以及set名称所组成:10amd64-local-workstation-make.conf。系统make.conf与这个新的档案在编译时期会被合并为编译Jail要使用的make.conf

要编译的套件会输入到10amd64-local-workstation-pkglist

editors/emacs
devel/git
ports-mgmt/pkg
...

可使用以下方式设定选项及相依:

# poudriere options -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglist

最后,编译套件并建立套件档案库:

# poudriere bulk -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglist

在执行时,按下Ctrl+t可以显示目前编译的状态,Poudriere也会编译在/poudriere/logs/bulk/jailname中的档案,可用在网页服务器来显示编译信息。

完成之后,新套件现在可以从poudriere档案库来安装。

要取得更多使用poudriere的信息,请参考poudriere(8)及主网站https://github.com/freebsd/ poudriere/wiki

4.6.2. 设定pkg客户端使用Poudriere档案库

虽然可以同时使用自定义的档案库与官方档案库,但有时关闭官方档案库会有帮助。这可以透过建立一个配置文件覆盖并关闭官方的配置文件来完成。建立/usr/local/etc/pkg/repos/FreeBSD.conf包含以下内容:

FreeBSD: {
	enabled: no
}

通常最简单要提供poudriere档案库给客户端的方式是透过HTTP。安装一个网页服务器来提供套件目录,通常会像:/usr/local/poudriere/data/packages/10amd64,其中10amd64是编译的名称。

若要连往套件档案库的URL是:http://pkg.example.com/10amd64,则在/usr/local/etc/pkg/repos/custom.conf的档案库配置文件为:

custom: {
	url: "http://pkg.example.com/10amd64",
	enabled: yes,
}

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.