《NetBSD pkgsrc指南》中文版-Chapter 5. 配置pkgsrc
发表于 : 2010-05-19 10:08
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 进行测试
校验DESTDIR full support, 不需要root权限
以非root身份创建一个package
下面的目录, 你必须 su(1)到root才行。
然后, 以普通用户
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= (也就是没有 +) 可能会在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而言, 如果你不希望修改这些设定, 则使用 += 操作符:
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, 例如:
下列变量可以在 mk.conf 里进行定义,以便选择一个package开启哪个选项: PKG_DEFAULT_OPTIONS, 哪些可被用于所有支持它们的packags的启用或禁用选项, 而 PKG_OPTIONS.pkgbase, 表示指定pkgbase可以启用或禁用哪些选项。选中的选项列在这些变量里, 选项前面带有 - 表示它是禁用的选项。 一些例子:
重要的提醒:如果你不希望包含那些package维护者特别建议的选项,你应该明确地删除它们。如果你不确定,你可以用 make show-options查看当前的声明。
下列设定按考虑的顺序给出, 最后一项用来启用或禁用一个选项:
对几组相互排斥的选项, 最后启用的选项将被使用, 所有其它的将自动被禁用(译者注:这里应该是指先前的冲突设定)。如果原来一个启用的选项在一个组内被明确地禁用,可能导致这个package的构建失败。
在选项框架引入之前, 构建选项通过在mk.conf里为每个选项设定一个变量来启用 (一般命名为 USE_FOO) 它。 为了是用户轻松地过渡到选项框架, 这些原来遗留的变量被自动转换为适当的选项设定(PKG_OPTIONS.pkgbase)。 一条警告信息会提示用户升级 mk.conf 以便直接使用选项框架。 对这些以前遗留变量的支持最终会结束。
目录
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
下列设定按考虑的顺序给出, 最后一项用来启用或禁用一个选项:
代码: 全选
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 以便直接使用选项框架。 对这些以前遗留变量的支持最终会结束。