Linux Rpm 打包流程
RedHat 系列及分支的安装包(.rpm)的打包流程
准备工作
- 因为打 RPM 包需要 rpmbuild 命令,所以需要先安装 rpmbuild 相应工具,安装过程可在网上查找;
- 输入命令 rpmbuild xx.spec 即可自动在当前用户的 $HOME 目录下创建 RPM 相关的文件夹,也可手动创建。
输入命令:
1 |
|
命令运行后,输入:
1 |
|
即可显示:
1 |
|
- BUILD:源码包被解压至此,并在该目录的子目录完成编译,宏为 %_builddir
- BUILDROOT:保存 %install 阶段安装的文件,宏为 %_buildrootdir
- RPMS:生成/保存二进制 RPM 包,宏为 %_rpmdir
- SOURCES:保存源码包(如 .tar 包)和所有 patch 补丁,宏为 %_sourcedir
- SPECS:保存 RPM 包配置(.spec)文件,宏为 %_specdir
- SRPMS:生成/保存源码 RPM 包(SRPM),宏为 %_srcrpmdir
- ~/rpmbuild 的宏为 %_topdir
编辑 SPEC 文件
- 运行以下命令创建 .spec 文件:
1 |
|
- 将 SPEC 文件放在 ~rpmbuild/SPECS/ 下面,然后编辑 SPEC 文件,如下所示:
1 |
|
安装的各个阶段说明
- %prep阶段 - 预处理,主要对源代码包进行解压和打补丁
一般使用 %setup -c 或者 %setup -q 命令来解压源码包,直接会将文件解压到%{_builddir} - %build阶段 - 对源代码包进行编译
编译阶段,非 GNU configure 配置的程序可以不关注这个阶段 - %install阶段 - 将软件安装到虚拟根目录, 同时 Install 阶段也有如下阶段
- %pre阶段 - 安装前
$1 == 1 代表安装
$1 == 2 代表升级 - %post阶段 - 安装后
$1 == 1 代表安装
$1 == 2 代表升级 - %preun阶段 - 卸载前
$1 == 0 代表卸载
$1 == 1 代表升级 - %postun阶段 - 卸载后
$1 == 0 代表卸载
$1 == 1 代表升级
这个阶段主要从 %{_builddir} 复制相关文件到 %{buildroot} (虚拟根目录)目录,如下所示:
rm -rf $RPM_BUILD_ROOT
cp -rf xxx $RPM_BUILD_ROOT
- %pre阶段 - 安装前
- files 阶段-列出被打包的文件和目录
首先要设定默认权限,同时要列出打包的目录和文件,设定默认权限的命令如下:第 4 个参数通常会省略。常规用法为 %defattr(-,root,root,-),其中 “-” 表示默认权限。1
%defattr(<文件权限>, <用户>, <用户组>, <目录权限>)
在列出文件的目录时,尽量使用内建宏来代替目录名。
常用的内建宏
1 |
|
- %clean阶段 - 完成后的一些清理工作
主要是清理 %{_builddir}和%{_buildrootdir}两个目录里的中间文件 - %changelog阶段 – 主要记录每次打包时的修改日志
1
2
3
4
5%changelog
* Fri Aug 7 2020 - Your Name <youremail@xxx.xxx> - Release
- Update log1
* Fri Aug 7 2020 - Your Name <youremail@xxx.xxx> - Release
- Update log2
运行 RPMBUILD 命令完成打包
在 SPEC 目录下执行 rpmbuild -xx xxx.spec 命令完成打包,rpmbuild 命令选项如下所示:
1 |
|
Linux Rpm 打包流程
https://huowenjie.github.io/08/10/2020/linux-rpm-pkg/