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 支持的依赖关系宏例如 providesobsoletes 都可以这么做)
  • 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> 是 targettypetargetarch 中的一种。

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> 是 targettypetargetarch 中的一种

多行脚本需要多行指令。

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

杂项

baselib

config