目前仅用到从SRPM中编译所需要架构的RPM包,仅记录此方案。
在工作中对新架构进行适配时,发现缺少相关的RPM包,需要手动编译,相对快捷的办法是从SRPM包重新编译。
RPM 文件有两类:源 RPM(SRPM)和二进制 RPM。
SRPM 中的有效负载是 SPEC 文件(描述如何构建二进制 RPM)。
SPEC 文件是 rpmbuild 程序用于实际构建 RPM 的方法。
安装相关软件
yum install rpmbuild rpmdevtools -y
初始化目录
rpmdev-setuptree
目录结构
目录 | 作用 |
---|---|
BUILD | 构建 RPM 包的时,会在此目录下产生各种%buildroot 目录。如果构建失败,可以据此查看目录日志,进行问题诊断 |
RPMS | 构建成功二进制 RPM 的存放目录。存放在 architecture 的子目录中。例如:noarch 和 x86_64 |
SOURCES | 存放源代码和补丁的目录。构建 RPM 包时,rpmbuild 命令将会从这个目录查找源代码 |
SPECS | SPEC文件存放目录 |
SRPMS | 存放 SRPM 的目录 |
查询RPM包
在以下网站可以查到绝大部分的包,能够溯源到其相关的源码包。
https://koji.fedoraproject.org/koji/search
http://rpmfind.net/linux/RPM/
http://ftp.redhat.com/pub/redhat/linux/enterprise/7Server/en/RHCEPH/SRPMS/
http://ftp.jaist.ac.jp/pub/Linux/Fedora/development/rawhide/Everything/source/tree/Packages/g/
下载SRPM包到架构的机子上,安装
rpm -ivh ***.src.rpm
执行完成后,会在 SPEC 目录中生成这个包的 SPEC 文件。
构建二进制RPM包
在构建二进制 RPM 包时,习惯采用从源码构建 SRPM,然后再构建二进制 RPM 的方法。
rpmbuild -ba xxx.spec
根据报错提示,安装所需求的软件或者处理其他发生的问题,完成编包。
参考:
- https://developer.ibm.com/zh/technologies/linux/articles/l-lo-rpm-build-package/