rpmbuild是一个命令行工具,用于构建RPM(Red Hat Package Manager)软件包。RPM是一种用于在Linux系统上安装和管理软件的标准格式。rpmbuild可以将源代码或二进制文件打包成RPM软件包,并为之配置元数据、依赖项、文件列表等。rpmbuild可以在各种Linux发行版中使用,例如Red Hat、CentOS、Fedora、SUSE、Mageia等。它是RPM构建过程的核心工具之一,常被系统管理员和开发人员使用。以下就制作rpm包过程予以介绍:
一、rpm 包制作过程
1、安装工具
# 编译工具
yum install -y gcc make
# rpm 包工作目录生成工具
yum install -y rpmdevtools
# rpm 包构建工具
yum install -y rpm-build
2、创建工作目录
2.1、手动创建
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
2.2、rpmdevtools 构建创建
此命令会生成一个 rpmbuild 的目录,这个目录就是制作 rpm 包的环境,需要注意的是:此命令只有在/root下执行生效,且已有rpmbuild目录时不重新创建。
cd /root/
rpmdev-setuptree
cd rpmbuild && ls
BUILD RPMS SOURCES SPECS SRPMS
各个目录的一般用途如下简介:
BUILD 编译rpm包的临时目录
BUILDROOT 编译后生成的软件临时安装目录
RPMS 最终生成的可安装rpm包的所在目录
SOURCES 所有源代码和补丁文件的存放目录
SPECS 存放SPEC文件的目录(重要)
SRPMS 软件最终的rpm源码格式存放路径
3、制作rpm包前准备
3.1、拷贝源码包或源码至SOURCES目录并编译源码二进制文件
当仓库存在MakeFile是通过make编译产生二进制文件,不存在时进行编写,需要将源码打成 .tag或者 .tag.gz 形式
3.2、书写编译脚本
spec 脚本书写请参考:https://blog.csdn.net/yuelai_217/article/details/130722081
并将spec 脚本拷贝至SPECS目录下
4、制作包
rpmbuild -ba SPECS/xxx.spec
5、安装验证
rpm -ivh xxx.rpm
二、rpmbuild 常见命令
2.1、rpmbuild 基本格式
rpmbuild [options] [spec文档|tarball包|源码包]
rpmbuild -ba nginx.spec
2.2、使用spec 文件构建选项
选项 | 含义 |
---|---|
-bp | 文件中安装执行前的地方 |
-bc | 执行spec的%pre和%build 段(准备并编译) |
-bi | 执行spec中%pre,%build与%install(准备,编译并安装) |
-bl | 检查spec中的%file段(查看文件是否齐全) |
-ba | 建立源码与二进制包(常用) |
-bb | 只建立二进制包(常用) |
-bs | 只建立源码包 |
2.3、tarball包建立,与spec类似
使用源码tar包进行构建
rpmbuild -tb xxx.zip
选项 | 含义 |
---|---|
-tp | -bp |
-tp | 对应-bp |
-tc | 对应-bc |
-ti | 对应-bi |
-tb | 对应-bb |
-ts | 对应-bs |
2.4、从源码包建立
选项 | 含义 |
---|---|
–rebuild | 建立二进制包,通-bb |
–buildroot=DIRECTORY | 确定以root目录建立包 |
–clean | 完成打包后清除BUILD下的文件目录 |
–nobuild | 不进行%build的阶段 |
–nodeps | 不检查建立包时的关联文件 |
–rmsource | 完成打包后清除SOURCES |
–rmspec | 完成打包后清除SPEC |
–target=CPU-VENDOR-OS | 确定包的最终使用平台 |
参考文档
1、https://www.shuzhiduo.com/A/D854Dy825E/
2、https://blog.51cto.com/pencild/1532569
3、https://www.cnblogs.com/Tzyyviki/p/14710479.html