openSUSE:Packaging Service for Source Processing

跳转至: 导航, 搜索
源代码处理服务开放式构建服务网页客户端的一项子服务。主要被用于自动化处理服务器上的文件,目前的功能有重新压档,自动更新编译,下载spec文件中指定的源代码,从cpan资源库创建spec文件,解压档案包,校验文件,从网络抓取源代码,增加spec文件版本号,变更文件压档方式,下载并解压源代码RPM等等。通过这些功能的组合,可以实现诸如如何避免本地上传一个超大的源代码包这样的操作。

在线下载(Download a file)

参数有主机(host)、路径(path)、文件名(filename)、端口(port)和协议(protocol)

其中后三者没什么好说的,协议支持 HTTP/HTTPS/FTP 协议,默认为 HTTP。

需要注意的是输入主机时不能带 http:// 前缀,因为那是归协议管的; 而 path 最前面一定要有一个 “/” 表示站点根目录。

例如:http://www.longene.org/download/WineQQ2012-20120719-Longene.deb

要下载这个文件,在 OBS 的文件窗口,添加源代码处理服务(Add service for source processing)- 下载文件(Download a file),然后编辑参数(Edit Parameters),主机(host)填 www.longene.org,路径(path)填 /download/WineQQ2012-20120719-Longene.deb

Service download a file.png

注意:下载的文件名称为:_service.download_url.mysql-5.5.27.tar.gz 这样,你在「文件名」参数中改不掉 _service.download_url. 这个前缀,而在 spec 文件中要正常使用%{name}-%{version}.tar.gz,简单说就是当前缀不存在,你加前缀反而会找不到文件。

从 SCM 源(GIT/SVN/Mercurial/Bazaar)拉取源代码进行打包(Packaging from SCM repository)

使用 obs-service-tar-scm 完成从 SCM 源的打包构建。接下来假设您已经有了基础的打包知识,在本地进行试打包。

首先在本地 obs 目录通过:

osc mkpac xx 或者 osc copypac xx xx 

创建一个包(其他创建操作详见 man osc

通过给 osc 传递 SCM 源地址,直接创建一个 _service 文件模板:

osc add https://the.git.url.here

(从前项目链接里可以知道目前您应该使用 obs_scm 而不是 tar_scm 这里默认也是使用的 obs_scm)

然后你会得到类似如下的模板 _service 文件:

<services>
 <service name="obs_scm">
   <param name="url">https://the.git.url.here</param>
   <param name="scm">git</param>
 </service>
 <service mode="buildtime" name="tar" />
 <service mode="buildtime" name="recompress">
   <param name="file">*.tar</param>
   <param name="compression">xz</param>
 </service>
 <service mode="buildtime" name="set_version" />
</services>

可以看到模板创建了 4 个服务:从 SVM 获取源代码(生成 .obscpio 文件);编译时的将前述文件压缩为 tar 文件;将 tar 文件重打包为以 xz 方式压缩的文件(这一步你可以进行文件筛选,见上的匹配操作,具体详见后文提供的参数链接);处理 spec 文件版本的服务(因为你可能想让其自动以某种方式为你将版本号修改,如直接改为最新的提交日期等)。

针对上述 _service 文件的 obs_scm 部分的具体参数参见 tar_scm.service.in ,您可以对照进行自由修改。

比如你可以仅仅通过添加修改如下内容:(摘自此 OBS unclutter-xfixes 项目 _service 文件)

 <service name="obs_scm">
   ...
   <param name="revision">master</param>
   <param name="match-tag">v1.5</param>
   <param name="versionformat">@PARENT_TAG@.@TAG_OFFSET@~git.%cd</param>
   <param name="versionrewrite-pattern">v(.*)</param>
   <param name="changesgenerate">enable</param>
   ...
 </service>
  1. 将从 master 分支抓取的源代码生成如:service:obs_scm:the_project_name-1.5.11~git.20190707.obscpio 的 obscpio 文件。
  2. 上述内容的 1.5.11~git.20190707 为 versionformat 的内容匹配,和 versionrewrite-pattern 对版本号 v1.5 的 v 的正则匹配去除得到
  3. OBS 会在编译时(上文模板 set_version 的 mode 决定)将你的 spec 文件 Version 部分替换为 1.5.11~git.20190707 写入临时编译 spec 文件(对,你的 spec 文件并不会变)。
  4. 同时由于 changesgenerate 参数的启用,服务会自动将最近的一些提交日志写入临时的 changes 变更,打包进 RPM 文件(同样的,你的 changs 变更文件也不会变,你会注意到有自动生成的保留的变更文件生成)。
  5. 具体的参数内容详见前链接。

其他服务的具体参数可参见 英文维基 下具体对应服务的项目地址。

编写好 _service 后大致从源码拉取部分就结束了,总的来讲通过这个服务文件,obs 会自动帮你在线得到源代码文件,产生其他有用的文件等,通过合适的服务文件,之后更新包也许只需要 trigger 一下就能完成。

之后编写 .spec 文件注意 Source 部分对源代码包的指定请使用 %{name}%{version}指定源代码文件,以匹配服务自动生成的源代码文件,如:

 Source:   %{name}-%{version}.tar.xz

本地编译测试:

 osc build

安装测试通过后添加项目文件,写变更,提交:

 osc add _service xx.spec xx.changes
 osc vc
 osc ci

OBS 官方给出的一个 参考项目

上述本节内容参考 new_git_in_27obs-service-tar_scm Github 项目页