参考
概叙
使用 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 显示表明的关系。
解决办法:
- 修改 package 的 spec 文件,用 "BuildRequires: sendmail" 代替 "BuildRequires: /usr/sbin/sendmail"
- 修改 prjconf 使用 Substitute 定义,添加 "Substitute: /usr/sbin/sendmail sendmail",这表明,出现 "/usr/sbin/sendmail" 依 赖需求,用 "sendmail" 代替。
- 修改 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
