开发者
openEuler OBS在线构建RPM包实操指南
openEuler OBS在线构建RPM包实操指南
原创
发表于03/08
2780

对于刚入门开源领域、想要参与鲲鹏生态及openEuler社区贡献的开发者来说,RPM包构建往往是第一道“拦路虎”。作为Linux系统(尤其是openEuler这类面向服务器、云计算等场景的操作系统)的核心软件交付载体,RPM包能够实现软件的一键安装、版本管理、依赖检查及卸载清理,其重要性不言而喻。但传统的本地构建方式,不仅需要开发者搭建完整的Linux本地环境,还要配置rpmbuild目录、安装依赖工具,甚至需要熟悉复杂的命令行操作,对新手的技术储备和设备资源都提出了不低的要求。

为了打破这一入门壁垒,降低开源贡献的门槛,openEuler社区依托开源构建服务(OBS,Open Build Service),为鲲鹏生态开发者推出了便捷高效的RPM包在线构建能力。不同于本地构建需要手动配置所有环境,OBS由社区提供专属的OBS Worker构建机器,开发者无需在本地安装Linux系统、配置rpmbuild目录,也无需记忆繁杂的编译命令,仅通过浏览器登录OBS平台,就能完成从代码适配、配置修改到RPM包编译的全流程操作,真正实现“零本地环境,一键式构建”。

先补基础:新手必懂的RPM与OBS核心知识点

在实操前,先给新手补充2个核心知识点,帮大家快速理清逻辑,避免踩坑:

1. RPM包核心优势与本地构建痛点

RPM(Red Hat Package Manager)是基于二进制包的软件分发体系,核心解决软件安装、版本管理、信任验证三大问题,其优势十分突出:

  • 免编译部署:内含已编译程序,无需开发者手动编译源码,一键即可完成安装;
  • 版本可控:提供清晰的软件版本信息、用途说明,便于查询、升级和卸载;
  • 依赖可查:通过数据库记录软件相关参数,可提前检查系统依赖,避免安装失败;
  • 安全可验:支持签名与校验机制,可防止软件被篡改,建立可靠的软件信任链。

而本地构建RPM包,需要手动完成一系列复杂操作,仅rpmbuild的目录结构就需要手动创建,其标准结构如下:

# 本地rpmbuild标准目录结构(需手动创建)
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
# 各目录功能说明
# BUILD:编译前解压源码、编译过程的临时存放目录
# BUILDROOT:编译后软件安装的临时根目录
# RPMS:最终生成的二进制RPM包存放目录(按架构分类,如aarch64、x86_64)
# SOURCES:软件源码包(如tar.gz格式)、补丁文件(patch)存放目录
# SPECS:spec描述文件存放目录(核心配置文件,控制构建流程)
# SRPMS:源码RPM包存放目录

除此之外,本地构建还需要手动安装gcc、rpm-build等依赖工具,配置yum源,一旦环境配置有误(如依赖版本不匹配、目录权限不足),就会导致构建失败,对新手极其不友好。

2. OBS在线构建核心优势:轻量化+一致性

OBS(Open Build Service)原本是openSUSE发行版专用的RPM打包平台,后续扩展为面向多发行版、多架构、多格式的打包发布平台,其功能涵盖源码管理、包构建、版本控制等,相当于同时实现了git和koji的部分核心功能(koji仅支持RPM包管理,而OBS可生成RPM、deb等多种格式包,还支持源码分支管理)。

openEuler社区整合OBS能力后,推出的在线构建模式,核心价值体现在“轻量化”和“一致性”两大方面,完美解决本地构建的痛点:

  • 轻量化:对个人开发者而言,无需投入硬件资源搭建本地环境,无需手动安装依赖、配置目录,仅需一台能上网的电脑和浏览器,就能完成全流程操作;甚至无需熟悉命令行,通过前端可视化界面即可完成所有配置。
  • 一致性:对鲲鹏社区和openEuler社区而言,所有开发者使用统一的在线构建环境(社区统一维护,确保依赖版本、系统配置一致),规避了本地环境差异(如系统版本、依赖版本、目录配置不同)导致的构建失败问题,保障了所有开发者编译结果的一致性,大幅提升了开源协作的效率和可靠性,也降低了社区的代码审核和维护成本。

实操演示:openEuler OBS在线构建zip包(新手零踩坑)

下面以openEuler:Mainline工程中的zip包构建为例,带大家一步步实操在线构建流程,所有操作均通过浏览器完成,无需输入复杂命令,新手可直接跟着做!

前提准备

1. 注册openEuler社区账号:访问https://build.openeuler.org/,点击右上角“Sign Up”完成注册(需绑定邮箱,用于验证账号);

2. 签署CLA协议:注册完成后,需签署开源贡献协议(CLA),否则无法参与包构建和贡献,签署地址:https://openeuler.org/en/cla.html(协议无需手动修改,确认信息后提交即可);

3. 了解目标工程:本次实操的目标工程为openEuler:Mainline(openEuler主线工程,包含社区核心软件包),zip包是常用的压缩工具包,适合新手入门实操。

步骤1:登录OBS平台,定位目标软件包

1. 打开浏览器,访问openEuler OBS官方地址:https://build.openeuler.org/,使用注册好的账号登录;

2. 登录后,在页面顶部的搜索框中输入“openEuler:Mainline”,点击搜索,进入主线工程页面;

3. 在工程页面的搜索框中输入“zip”,定位到待构建的zip软件包(可看到包的当前版本、构建状态、支持的架构等信息,鲲鹏生态重点支持aarch64架构)。

步骤2:创建分支工程,保障原始工程安全

为了避免直接修改原始工程(openEuler:Mainline)中的zip包配置,导致原始工程不稳定,我们需要创建分支工程,在分支中进行构建操作(这是开源协作的规范操作,新手务必遵守):

1. 点击zip包页面中的“branch package”按钮(中文可理解为“分支包”);

2. 在弹出的窗口中,默认分支名称即可(无需修改),点击“OK”确认;

3. 分支创建完成后,系统会自动跳转到分支工程页面,此时我们拥有了独立的开发和构建空间,所有修改仅作用于分支,不影响原始工程。

步骤3:修改_service配置文件,触发在线编译

_service文件是OBS构建的核心配置文件,用于指定源码来源、构建方式、依赖关系等,openEuler OBS提供了可视化编辑界面,无需手动编写完整代码,新手可根据需求简单修改:

1. 在分支工程页面中,找到“Files”选项卡,点击进入文件列表,找到“_service”文件(若没有,可点击“Add file”创建,选择“_service”模板);

2. 点击“_service”文件右侧的“Edit”按钮,进入可视化编辑界面;

3. 新手可参考以下基础配置代码(直接复制替换原有内容即可,适配zip包构建),核心配置已添加注释,便于理解:

<services>
  <service name="tar_scm"&gt;  <!-- 指定源码获取方式为tar_scm(适配openEuler外网OBS) -->
    <param name="url" value="https://gitee.com/src-openeuler/zip"/&gt;  <!-- 源码仓库地址(openEuler源码仓库) -->
    &lt;param name="scm" value="git"/&gt;  <!-- 版本控制工具为git -->
    &lt;param name="revision" value="master"/&gt;  <!-- 源码分支为master(主线) -->
    <param name="exclude" value=".git"/> <!-- 排除.git目录,避免冗余 -->
    <param name="filename" value="zip"/&gt;  <!-- 源码文件名 -->
  </service>
  &lt;service name="recompress"&gt;  <!-- 压缩方式配置 -->
    <param name="file" value="*.tar"/&gt;  <!-- 对tar格式文件进行压缩 -->
    &lt;param name="compression" value="gz"/&gt;  <!-- 压缩格式为gz -->
  &lt;/service&gt;
  &lt;service name="set_version"&gt;  <!-- 自动设置版本号 -->
    &lt;param name="basename" value="zip"/&gt;  <!-- 版本号前缀为zip -->
  </service>
</services>

4. 修改完成后,点击页面底部的“Save changes”按钮保存配置;

5. 保存成功后,系统会自动触发在线编译流程,页面会跳转到“Build Results”选项卡,可查看构建进度(构建过程可能需要1-5分钟,耐心等待即可)。

步骤4:查看构建结果,获取RPM包

1. 当构建状态显示为“succeeded”(绿色对勾)时,说明构建成功;若显示“failed”(红色叉号),可点击状态查看失败原因(新手常见失败原因多为配置文件错误,可重新检查_service文件);

2. 构建成功后,点击“Build Results”页面中的对应架构(鲲鹏生态优先选择aarch64),即可看到生成的RPM包(.rpm格式)和源码RPM包(.src.rpm格式);

3. 点击RPM包名称,即可下载到本地,用于后续的安装和测试,测试命令如下(若本地有openEuler系统,可直接执行):

# 安装下载的zip RPM包(替换为实际包名)
sudo rpm -ivh zip-3.0-28.oe2203.aarch64.rpm
# 验证安装是否成功
zip --version
# 卸载zip包(如需)
sudo rpm -e zip

拓展补充:新手常见问题与解决方案

1. 构建失败提示“依赖缺失”:无需手动安装依赖,OBS会自动解析依赖并安装,若仍提示缺失,可检查_service文件中源码地址是否正确,或联系社区管理员确认依赖配置;

2. 无法创建分支包:确认已签署CLA协议,且账号已完成邮箱验证,若仍有问题,可清空浏览器缓存后重新登录;

3. 下载的RPM包无法安装:确认RPM包架构与本地系统架构匹配(鲲鹏服务器为aarch64,x86电脑为x86_64),且系统版本与openEuler工程版本一致。

总结:OBS在线构建,助力新手快速融入鲲鹏生态

依托OBS的在线构建能力,openEuler社区和鲲鹏社区为新入门开发者扫清了RPM包构建的技术障碍,无需搭建本地环境、无需记忆复杂命令、无需担心环境差异,仅通过浏览器和简单的配置,就能完成RPM包的构建与贡献。

这种轻量化、一致性的构建模式,不仅降低了开源贡献的参与成本,也让更多开发者能够快速参与到鲲鹏生态和openEuler社区的软件包构建与维护中,丰富社区软件生态,提升开源协作的普惠性。

对于新手而言,从zip包这种简单的软件包入手,熟悉OBS在线构建流程,逐步掌握spec文件、_service文件的配置技巧,就能慢慢积累开源贡献经验,为后续参与更复杂的鲲鹏生态项目打下坚实基础。快来动手实操,开启你的开源贡献之旅吧!

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞