openSUSE:Build Service baselibs.conf
目录
快速入门
为了支持所谓的 "双架构" 发行版,需要创建一些函数库的软件包。在 32 位环境中,需要创建 *-32bit 软件包来在 64 位环境中使用,也可能出现相反的情况。通过在软件包源文件中包含一个叫做 baselibs.conf 的文件,可以指示构建服务创建这样的软件包。该文件的最基本格式是列出必要的软件包,每行一个。例如,libxml 的 baselibs.conf 文件如下:
libxml2 libxml2-devel
通用函数库文件夹的库文件将被自动纳入。也可以包含额外文件,比如插件,或者需求的软件包的变动。
例如 tcl 是这么做的:
tcl +/usr/lib(64)?/tcl/.* requires -tcl-<targettype>
软件包名称(或子软件包名称)必须位于行首。接下来的行可以以空格开头并组成该软件包的额外选项,例如:
- + 正则表达式:添加所有匹配正则表达式的文件到 XXbit 软件包中。
- requires 字符串:为 XXbit 软件包添加额外的依赖。要删除依赖,可以在依赖前面加上 - 号。(所有 RPM 支持的依赖关系宏例如 provides 或 obsoletes 都可以这么做)
- targetarch x86_64 block!:不在 x86_64 编译环境下编译 32bit 软件包
- targettype x86 package foo: 只创建 foo-x86 (而不是 foo-32bit) 软件包(类似地: targettype x86 requires foo, provides, ....)
支持的宏:
- <extension>
- <name>
- <version>
- <targettype>
- <prefix> ("" 或 "/emul/ia32-linux" 根据目标架构而定)
另一个例子:
readline-devel requires -readline-<targettype> requires "libreadline5-<targettype> = <version>"
如果您只针对一个单一架构需要 XXbit 软件包,可以使用 numactl 的例子:
arch ppc package libnuma-devel requires -numactl-<targettype> requires "numactl1-<targettype> = <version>"
总体来讲,双架构处理过的软件包剔除了所有的脚本(例如 preinst,postinst)和配置文件。如果需要这些,必须使用适当的命令来提供它们。
指令
arch
arch 指令指定了如何处理此架构类型的软件包。
arch 指令采用如下格式:
arch <arch> targets <target_arch>[:<target_type>] [<target_arch>[:<target_type>]...]
<arch> 是要编译的架构;如 i586
<target_arch> 是软件包要构建的架构; 如 armv5el。它也可以设定了 <targetarch> 宏
<target_type> 设定了 <targettype> 宏,典型用途是用作 baselibs 创建的软件包的后缀
因此
arch i586 targets armv5el:x86lib armv7el:x86lib
意味着接下来的打包指令将用于打包使用 <targettype>=x86lib 后缀的 armv5el 架构和使用 <targettype=x86lib> 后缀的 armv7el 架构
每个软件包声明都会针对每次不同的 <targettype> 和 <targetarch> 组合处理多次。
targettype
在一个软件包声明中,targettype 指令允许过滤应用的操作。
例如:
bash targettype x86lib requires "libreadline6-x86lib" targettype cross_armv7 requires "libncurses5-armlib"
第一个指令为 x86lib 过程添加了一个 requires,第二个为 cross_armv7 过程添加了一个不同的 requires。
targetarch
在一个软件包声明中,targetarch 指令和 targettype 一样允许过滤应用的操作
它用来指定与目标输出架构通用的软件包指令。
例如:
bash targetarch armv5el requires "libncurses5-armlib" targetarch armv7el requires "libncurses5a-armlib"
prefix
Prefix 可以为所有文件添加自定义前缀。通常没有前缀。一个 "/foo" 前缀将会把所有文件从,例如,/bin 移动到 /foo/bin。
legacyversion
extension
configdir
targetname
软件包关系
被 baselibs.conf 修改的软件包的依赖关系会被重置为空; 任何依赖关系都必须在 baselibs.conf 文件中重设。
下面的指令都遵守相同的基本模型:
[<filter> <criteria>] <directive> <value>
<filter> 是 targettype 或 targetarch 中的一种。
requires
rpm: requires
deb: Depends:
prereq
rpm: prerequires
deb: Pre-Depends:
provides
rpm: provides
deb: Provides:
conflicts
rpm: conflicts
deb: Conflicts:
recommends
rpm: reccomends
deb: Reccomends:
suggests
rpm: n/a
deb: Suggests:
supplements
rpm: supplements
deb: Enhances:
obsoletes
rpm: Obsoletes
deb: Replaces:
autoreqprov
该指令,在设置为“关”时,会将 provides 和 requires 限制为仅在 baselibs.conf 中指定的软件包。.deb 用户注意了,"AutoReqProv:" 是一个只适用于 spec/rpm 的指令。
脚本
被 baselibs.conf 修改的软件包会被移除它们的 pre-/post- 脚本; 任何需要执行的脚本都必须在 baselibs.conf 中重设。
如下指令都遵守相同的基本模型:
[<filter> <criteria>] <directive> <value>
<filter> 是 targettype 或 targetarch 中的一种
多行脚本需要多行指令。
pre(in)
rpm: prein
deb: DEBIAN/preinst
post(in)
rpm: postin
deb: DEBIAN/postinst
preun
rpm: preun
deb: DEBIAN/prerm
postun
rpm: postun
deb: DEBIAN/postrm