如何通过OpenSUSE Open Build Service(OBS)构建软件包

1.首先根据OBS注册与OSC配置来完成配置
2.登录openEuler obs网站,从各种工程中,找到你想要构建的包,比如这个工程 openEuler:Ruby, 其中 openEuler:Ruby 是工程名,菜单栏展示了该工程的各种信息。

  • Overview 工程简介
  • Repositories 包列表
  • Monitor 包的构建状况
  • Requests 用户请求,比如有人想把自己的修改合并到原始仓库,有人想维护某个包等。
  • Users 工程的所有用户
  • Subprojects 子工程
  • Project Config 配置文件
  • Attributes 不明所以,正在研究中
  • Meta 一些参数信息
  • Status 不明所以,正在研究中
    重点看一下Project Config 菜单
  • Prefer 构建的包依赖于这些包

    openEuler:Ruby工程底下有多个包(package),搜索&&点击rubygem-Ascii85,点击选择“Branch package"(派生)。


    我们就派生了rubygem-Ascii85 包,这个包下发到自己名下了,将来可以做改动,比如增加功能,通过Submit package 提交给原始仓库,仓库维护者审核通过后,你做的贡献就可以造福万家了。
    确认一下,是否派生成功
    点击用户名,可以看到自己归属或拥有的工程

    点击刚才派生的工程,点击rubygem-Ascii85 包,点击箭头1 Trigger services ,系统就开始构建了,右边框,表示构建状态,building表示正在构建;blocked表示等待构建(可能有很多人在使用,需要排队);succeeded表示构建成功;failed表示失败,光标悬浮到问号处,可以看一下错误提示,想继续看log和错误详情的话,请点进去。

    这个包里有四个文件,重点看一下_service ,里面描述了三个文件。
<services>
    <service name="tar_scm">
        <param name="scm">git</param>
        <param name="url">git@gitee.com:src-openeuler/rubygem-Ascii85.git</param>
        <param name="exclude">*</param>
        <param name="extract">*</param>
        <param name="revision">master</param>
    </service>

可以尝试本地编译
回到自己的终端(命令行),查看自己拥有的包(如果曾经创建过),以下是我的输出:

osc ll | grep wcy

image

查看自己派生的包:

osc list home:wcy:branches:openEuler:Ruby

image

rubygem-Ascii85 下载到本地,然后从仓库下载编译用到的文件:

osc co home:wcy:branches:openEuler:Ruby/rubygem-Ascii85
cd home:wcy:branches:openEuler:Ruby/rubygem-Ascii85
osc up -S #下载文件

image

osc repos #查看仓库信息,

image

开始本地编译:

  1. 通过osc命令在本地打包deb文件,首先删除**_service**,否则osc会去obs服务器下载源码,重命名由**_service**下载的文件,使其能被本地 osc build 正确识别,然后开始编译:
rm -f _service;for file in `ls | grep -v .osc`;do new_file=${file##*:};mv $file $new_file;done
osc build --local-package standard_x86_64   x86_64

等了一段时间,1858s,终于编译完成了

查看一下可执行文件

file /var/tmp/build-root/standard_x86_64-x86_64/home/abuild/rpmbuild/RPMS/noarch/rubygem-Ascii85-doc-1.1.0-1.oe1.noarch.rpm

最后可以通过rpm -ivh **来测试安装软件包

多谢分享,我尝试在本地编译zlib,在osc build --local-package standard_riscv64 riscv64时发生:

1/1 (openEuler:selfbuild:function) libtool-2.4.6-34.oe1.riscv64.rpm
openEuler:selfbuild:function/libtool: attempting download from api, since not found
Verifying integrity of cached packages
BuildService API error: can't verify packages due to lack of GPG keys

oe的官方文档没能找到相关信息,能否指个路?

你好,首先需要确认下oe上是否提供了riscv架构,如果没有提供的话就找不到。
如果有的话,在安装依赖的时候加上 --nogpgcheck或者把reop里的gpg删掉。

确认了 https://build.openeuler.openatom.cn/package/show/openEuler:Mainline:RISC-V/zlib

通过rpmbuild -ba zlib.spec我还是能成功编译的,但使用osc build就出现上面的问题。

查了一下osc和osc build没有–nogpgcheck参数。抱歉不太明白

,只知道 dnf localinstall 有这个参数

你好,我看下了这个spec文件,里面架构是noarch,这样的话,用任何架构都可以rpmbuild -ba 成功。
需要麻烦你用uname -a确认下架构是否是rescv64。


你好,我刚刚还原了一下场景

这边有一个参数no_verify = 1看下有没有配置

成功了!

之前我是通过官方文档 配置了OSC,就缺了这个。

多谢啦

嗯嗯,官方没这个配置的 :handshake:

请问本地osc 编译,需要本地机器也装套OBS吗?这样的话,感觉都本地搭建好obs了,就不需要官网这个obs了

不用搭建obs服务器,本地只需要安装osc客户端即可

解决了,需要到(/repositories/openSUSE:/Tools/openEuler_22.03/noarch - openSUSE Download)安装相应的yum install obs-build-20230425-421.1.noarch.rpm 包,直接安装osc是没有osc build命令的,感谢分享。