一. 根据软件包的名字在src.rpm包地址https://pkgs.org/上搜索到相应的src.rpm包,下载到本地,并解压:
rpm2cpio *.src.rpm|cpio -iv
二. 解压之后,使用指令来安装编译包所需的依赖,如果该指令生效,则跳过第3步;
dnf builddep *.spec
三. 使用指令:rpmbuild -ba *.spec 进行编译,查看是否可以编译成功;
-
假如仍然缺少某些依赖包,尝试 yum install * 进行安装;
-
如果安装不成功
(1)首先去Gitee的openEuler开源社区寻找开源的源码软件包,如果有对应的或者其他名字的包,修改spec中对应的requires依赖包名字;
(2)如果找不到,去pkgs.org官网(Fedora34或者CentOS)搜索相应的包,去编译和安装,步骤同一,然后去RPMS里找到构建编译好的 *.rpm软件包,使用安装指令:rpm -ivh *.rpm
(3)在编译spaec文件时候,遇到退出时状态不好的问题,定位到具体的报错位置,在openEuler中,不支持(很少支持)%cmake_build以及%cmake_install,分别改成make和%make_install。
(4)编译成功后,去RPMS文件夹,可以找到编译后的rpm包。
-
安装成功后,再次使用指令进行编译,编译成功后,再上传到Gitee。
四. Gitee上传
-
首先在gitee上新建一个仓库,注意:::仓库的名字和要提交的软件包的名字一致,并且要开源;
-
进入新建好的软件仓库,复制HTTP链接[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
-
在本地,将已经编译好的软件包上传
(1)git clone http://
(2)git add . #注意编译好的软件包文件要和克隆下来的仓库包文件在同一级目录下
(3)git commit -m “init” #init只是说明概述,可替换
(4)git push
四. 上传到obs
-
在所属的大工程下,新建一个package,该名字要与gitee上创建的软件包名字一致,如图所示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
-
创建好之后,点击add file,上传_service文件,上传之前,修改该文件中的url地址为gitee软件包地址;
-
等待文件上传完成,即可在obs平台上进行编译;
(1)假如报错,缺少某个依赖,可以在spec文件中的buildrequires字段处添加缺失的模块,再重新进行编译。
五. 提交到开源社区
-
以openEuler为例,首先将openEuler的community仓库fork到自己账户的仓库中,如果src-openEuler仓库未存在软件包项目,想贡献新的软件包。可以向openEuler/community 提交pr申请建仓。
(1)修改文件community/repository/src-openeuler.yaml
(2)确定要提交的软件包有什么功能,在sig中属于什么哪个项目,修改文件sig/*/sig-info.yaml
(3)修改相应项目的模块,修改文件sig/sigs.yaml
(4)在本地clone下community,进入community,使用指令将提交到gitee的次数修改为1,
git rebase -i HEAD~2 #2代表提交次数
enter之后,从下到上,将pick改成s,保留一个pick,并:wq 保存
然后会出现git commit的记录,删除,保留一次记录,并:wq保存
(5)git push -f #将修改记录强行提交到gitee
(6) 审核通过后,会自动创建该软件包仓库。修改后提交pr,等待ci构建,默认会自动构建。
-
假如community中存在该软件仓,则省去建仓步骤,只需要在obs通过编译,通过自己账户的gitee将改动内容合并到开源社区现有的仓库中。