分页: 1 / 1

《NetBSD pkgsrc指南》中文版-Chapter 5. 配置pkgsrc

发表于 : 2010-05-19 10:08
leo
Chapter 5. 配置pkgsrc
目录

5.1. 常规配置
5.2. 影响构建过程的变量
5.3. 影响安装过程的变量
5.4. 选择和配置编译器
5.4.1. 选择编译器
5.4.2. 编译时的额外flags(CFLAGS)
5.4.3. 链接时的额外flags(LDFLAGS)
5.5. 开发者/高级的设定
5.6. 选择构建选项
整个的pkgsrc系统通过一个文件进行配置, 通常被称为 mk.conf。pkgsrc在哪个目录找这个文件取决于安装。在NetBSD中, 当你从基本系统使用 make(1) , 它位于目录 /etc/。所有其它的情况默认位置在 ${PREFIX}/etc/, 根据你告诉bootstrap程序将二进制packages安装在哪里。

在bootstrap时, 会产生一个配置example文件。要使用它, 你必须创建目录 ${PREFIX}/etc 并且将这个example文件拷贝到那里。

这个配置文件的格式就像常规的BSD风格的 Makefile文件。通过设定这个文件内的不同变量以完成所有的pkgsrc配置。说明: 你可以定义所有类型的变量, 和不做特定错误检查(例如,拼写错误检查), 这样你必须自己测试它是否可以正常工作。

5.1. 常规配置
本小节, 你会发现有些变量可应用于pkgsrc的所有packages。一个用户可配置的完整变量清单在 mk/defaults/mk.conf, 同时还附带了一些注释以描述每个变量的含义。

LOCALBASE: 指定安装packages的目录。默认值为 /usr/pkg。不要将具有不同 LOCALBASE的二进制packages混在一起!

CROSSBASE: 指定在哪里安装 “cross” 类的packages。默认值为 ${LOCALBASE}/cross.

X11BASE: 指定在系统的什么目录安装X11。 默认值是 /usr/X11R6。

DISTDIR: 指定那个目录存放下载的分发源代码, 这些源代码用于构建pkgsrc的packages。默认值 ${PKGSRCDIR}/distfiles。

PKG_DBDIR: 指定安装的packages数据库的 存放位置。默认是 /var/db/pkg。

MASTER_SITE_OVERRIDE: 如果设定, 这个值会覆盖 packages的 MASTER_SITES 值。

MASTER_SITE_BACKUP: 如果没有在本地找到,或者分别在 ${MASTER_SITES} 或者 ${PATCH_SITES}里, 则分发文件和补丁文件的备份的位置在这里设定。 默认值是 ftp://ftp.NetBSD.org/pub/NetBSD/package ... IST_SUBDIR}/ 和 ftp://ftp.freebsd.org/pub/FreeBSD/distf ... IST_SUBDIR}/。

BINPKG_SITES: 列出了包含二进制pkgs的站点。 rel 和 arch 分别代表OS 版本号 (“2.0”等) 和 构架 (“mipsel等)。

ACCEPTABLE_LICENSES: 可接受的许可名单。 许可名称大小写敏感。当你尝试构建一个package,而它的许可证不在这个名单内 , 你将得到一个错误信息。如果这个许可条件很简单, 这个错误信息将包含一条 (译者注:要想使用该软件)如何修改这个变量的说明。

5.2. 影响构建过程的变量
XXX

PACKAGES: 二进制packages的顶级目录。默认值为 ${PKGSRCDIR}/packages.

WRKOBJDIR: 顶级目录, 如果定义了,将创建单独的工作目录, 而符号链接链接自${WRKDIR} (看下面)。 这对几台不同构架的 机器上同时构建很有用, 然后当 ${WRKOBJDIR} 作为每个构架的local时, ${PKGSRCDIR} 可作为挂载的NFS。 (要注意 PKGSRCDIR 不应该由用户设置,它是一个内部定义,是给pkgsrc树的维护者留用的,它可能会导致出现多个pkgsrc树实例。)

LOCALPATCHES: 设置本地的patch目录,这些补丁并非pkgsrc的一部分。参 Section 11.3, “patches/*” 以获取多更信息。

PKGMAKECONF: mk.conf 文件的所在位置,由一个package的BSD风格的Makefile使用。 如果这里没有设置, MAKECONF 被设置为 /dev/null 以避免构建过程使用 /usr/src。

DEPENDS_TARGET: 默认情况下仅安装依赖包, 并不为它们生成 二进制packages. 你可以将它设定为 package 以便安装完依赖包后 自动为它们生成二进制packages。

5.3. 影响安装过程的变量
越来越多的packages开始支持安装进一个WRKDIR的子目录。这允许在实际的文件系统被接触前完成一个package的构建。DESTDIR支持存在于两个变量中:

Basic DESTDIR support 表示这个package的安装和打包必须由root操作。

Full DESTDIR support 可以运行全部构建过程, 安装和打包全可由普通用户操作。 Root权限仅用于 add packages。

要想使用DESTDIR支持, 将设置 USE_DESTDIR=yes 以获取全面的支持,否则仅为基本支持。

DESTDIR支持会轻微改变各种目标的行为。要在构建后安装一个package, 使用 package-install。 而package 和 install 已经不再使用了。 package-install 可被用做 DEPENDS_TARGET。 bin-install 将询问root密码以便安装,如果失败则 package-install 将再次询问。(译者注:这里对fail的理解可能有误,没有实操,纯属猜测。)

设置为 basic DESTDIR support 时, make clean 需要以root身份运行。

就 foo/bar package来说, 可以用下列命令对DESTDIR full support 进行测试

代码: 全选

$ id
uid=1000(myusername) gid=100(users) groups=100(users),0(wheel)
$ mkdir $HOME/packages
$ cd $PKGSRCDIR/foo/bar

校验DESTDIR full support, 不需要root权限

代码: 全选

$ make USE_DESTDIR=yes install

以非root身份创建一个package

代码: 全选

$ make USE_DESTDIR=yes PACKAGES=$HOME/packages package

下面的目录, 你必须 su(1)到root才行。

代码: 全选

$ make USE_DESTDIR=yes PACKAGES=$HOME/packages package-install

然后, 以普通用户

代码: 全选

$ make clean


5.4. 选择和配置编译器
5.4.1. 选择编译器
默认情况下, pkgsrc将使用GCC来构建packages。 这可以在 /etc/mk.conf 里面修改为下列值:

PKGSRC_COMPILER:
这里有一个有效的编译器清单:

distcc: distributed C/C++ (chainable)

ccache: compiler cache (chainable)

gcc: GNU C/C++ Compiler

mipspro: Silicon Graphics, Inc. MIPSpro (n32/n64)

mipspro: Silicon Graphics, Inc. MIPSpro (o32)

sunpro: Sun Microsystems, Inc. WorkShip/Forte/Sun ONE Studio

默认值为“gcc”。 你可以使用 ccache 和/或 distcc 用一个合适的 PKGSRC_COMPILER 来设定, 例如 “ccache gcc”。 这个变量后面的值应该总是一个真实的编译器。 说明这里只能设置为一个真实的编译器(例如 “sunpro gcc” 不被允许)。

(啥意思?lionux解释一下?)
GCC_REQD:
这里指定构建时使用的最小的GCC版本号。如果系统目前的GCC不满足此要求, 那么pkgsrc将自己安装并构建一个高版本的GCC package以替代原有的。

5.4.2. 编译时的额外flags(CFLAGS)(CFLAGS)
如果你想设定 CFLAGS 变量, 请确认使用 += 操作符代替 = operator:

代码: 全选

CFLAGS+= -your -flags

使用 CFLAGS= (也就是没有 “+”) 可能会在packags需要添加自己的flags时出现问题。如果想对当前的CPU做优化处理,你可能想看看 devel/cpuflags package。在mk.conf将 USE_CPUFLAGS 设置为yes 将使pkgsrc自动使用cpuflags。

5.4.3. 链接时的额外flags(LDFLAGS) (LDFLAGS)
如果你想在配置步骤和构建步骤中将flags传递给linker, 你可以通过两种方式完成。设置 LDFLAGS 或者 LIBS。这两者的区别是 LIBS 将追加到命令行上, 而 LDFLAGS 则出现的更早。 LDFLAGS 是通过ELF机器的rpath设定预加载的,要根据 USE_IMAKE 的设定,或者包括 mk/x11.buildlink3.mk。对CFLAGS而言, 如果你不希望修改这些设定, 则使用 += 操作符:

代码: 全选

LDFLAGS+= -your -linkerflags

5.5. 开发者/高级的设定
XXX

PKG_DEVELOPER: 运行一些开发者希望的合理性测试:

确认应用了所有补丁

运行check-shlibs以确认所有的二进制文件可以找到其共享库


PKG_DEBUG_LEVEL: 在make和安装package时做调试级别的输出. 默认值为0, 也就是当命令运行时不显示它们(正常的, 默认, 安静的操作); 将此值设定为1则 所有的shell命令被执行前先显示出来, 而如果设定为2,将不仅在运行前显示它们,而且可以 通过设置set -x显示其实际运行进度。


5.6. 选择构建选项
一些packages具有build time选项, 通常根据不同的依赖包进行选取, 启用选项支持大型的依赖包或启用试验性特性。

要看一个package是否支持哪个选项, 相互排斥(冲突), 运行make show-options, 例如:

代码: 全选

The following options are supported by this package:
ssl Enable SSL support.
Exactly one of the following gecko options is required:
firefox Use firefox as gecko rendering engine.
mozilla Use mozilla as gecko rendering engine.
At most one of the following database options may be selected:
mysql Enable support for MySQL database.
pgsql Enable support for PostgreSQL database.
 
These options are enabled by default: firefox
These options are currently enabled: mozilla ssl

下列变量可以在 mk.conf 里进行定义,以便选择一个package开启哪个选项: PKG_DEFAULT_OPTIONS, 哪些可被用于所有支持它们的packags的启用或禁用选项, 而 PKG_OPTIONS.pkgbase, 表示指定pkgbase可以启用或禁用哪些选项。选中的选项列在这些变量里, 选项前面带有 “-” 表示它是禁用的选项。 一些例子:

代码: 全选

$ grep "PKG.*OPTION" mk.conf
PKG_DEFAULT_OPTIONS= -arts -dvdread -esound
PKG_OPTIONS.kdebase= debug -sasl
PKG_OPTIONS.apache= suexec
重要的提醒:如果你不希望包含那些package维护者特别建议的选项,你应该明确地删除它们。如果你不确定,你可以用 make show-options查看当前的声明。

下列设定按考虑的顺序给出, 最后一项用来启用或禁用一个选项:

代码: 全选

the default options as suggested by the package maintainer
 
the options implied by the settings of legacy variables (see below)
 
PKG_DEFAULT_OPTIONS
 
PKG_OPTIONS.pkgbase

对几组相互排斥的选项, 最后启用的选项将被使用, 所有其它的将自动被禁用(译者注:这里应该是指先前的冲突设定)。如果原来一个启用的选项在一个组内被明确地禁用,可能导致这个package的构建失败。

在选项框架引入之前, 构建选项通过在mk.conf里为每个选项设定一个变量来启用 (一般命名为 USE_FOO) 它。 为了是用户轻松地过渡到选项框架, 这些原来遗留的变量被自动转换为适当的选项设定(PKG_OPTIONS.pkgbase)。 一条警告信息会提示用户升级 mk.conf 以便直接使用选项框架。 对这些以前遗留变量的支持最终会结束。