参考
概叙
使用 openSUSE 的 conf
定制
Substitute
Prefer
Release
Macro

参考

概叙

使用 openSUSE 的 conf

可以先从 openSUSE 的服务器取得某个项目的 conf 文件研究:

# osc meta prjconf Fedora:11 > "Fedora:11.conf"
# osc meta prjconf "CentOS:CentOS-5" > "CentOS:CentOS-5.conf"
# osc meta prjconf "RedHat:RHEL-5" > "RedHat:RHEL-5.conf"

这样我们得到几个文件。

定制

Substitute

如果我们得到类似 "expansion errors: nothing provides /usr/sbin/sendmail" 的错误,在 bs_sched 的日志中可以看到类似下面的信息:

      - mutt (spec)
        expansion errors:
            nothing provides /usr/sbin/sendmail

此种错误显示没有找到任何软件包 provides "/usr/sbin/sendmail",主要原因 是 obs 默认不计算 某个 package 是否提供什么文件,它只计算在 spec 中使用 Provides 显示表明的关系。

解决办法:

  1. 修改 package 的 spec 文件,用 "BuildRequires: sendmail" 代替 "BuildRequires: /usr/sbin/sendmail"
  2. 修改 prjconf 使用 Substitute 定义,添加 "Substitute: /usr/sbin/sendmail sendmail",这表明,出现 "/usr/sbin/sendmail" 依 赖需求,用 "sendmail" 代替。
  3. 修改 obs 内部机制 ;-)

Prefer

Release

默认 OBS 的 Release 使用 CI_CNT 和 B_CNT (提交次数和编译次数):

Release: <CI_CNT>.<B_CNT>

可以在 prjconf 中定义:

Release: %%{?release_prefix}.<CI_CNT>.<B_CNT>

其中 %{release_prefix} 需在 rpm 的 spec 文件中有定义。

GTES 的 prjconf 中,我不想用 <CI_CNT>.<B_CNT> ,只想用 spec 自己的 Release,可以编译 prjconf文件(osc meta prjconf -e 项目名称),添加如下 内容:

# Turbolinux release
Release: %%{Release}

在 build log 中可以看到:

now finalizing build dir...
-----------------------------------------------------------------
I have the following modifications for gettext.spec:
4c4
< Release: 4
---
> Release: %{Release}
16c16

Macro