很多人在使用 rpmbuild 打包时都会遇到一个问题:
网上一堆 “加速参数”,复制过去要么报错,要么速度几乎没变化,甚至越弄越慢。
这篇文章只讲真实有效、实测可用的优化技巧,区分 “源码编译加速” 和 “纯文件复制打包加速” 两种场景,避免你再踩坑。
一、先分清你的打包场景
优化是否有效,90% 取决于场景:
- 源码编译打包(C/C++/Go 等需要 make 编译) 可以用:并行编译、ccache、关闭调试信息
- 纯文件复制打包(绿色软件、游戏、脚本、解压即运行) 并行、make 完全无效!只会报错。 有效加速只有:关闭源码包、低压缩、不清理临时目录
二、通用真实有效优化(所有场景都能用)
1. 只打二进制包,跳过源码包(最有效)
rpmbuild -bb package.spec
-ba= 二进制 + 源码包-bb= 只生成 rpm 速度提升 30%~60%
2. 关闭调试包,跳过 debuginfo
在 ~/.rpmmacros 中添加:
%_debug_package %{nil}
省去大量符号处理与文件打包,非常明显。
3. 降低压缩级别,最快打包
%_binary_payload w1.gzdio
%_source_payload w1.gzdio
w1 代表 gzip 级别 1,速度最快,适合大文件打包。
4. 不清理构建目录(重复打包神器)
rpmbuild -bb --noclean package.spec
第二次、第三次打包几乎秒完成,速度提升 80%+
三、源码编译专属加速(仅编译型软件有效)
1. 并行编译(多核满负载)
%_smp_mflags -j%(nproc)
spec 中必须使用:
%build
make %{?_smp_mflags}
没有 Makefile 的包千万不要加,否则直接报错!
2. 跳过 strip 减小处理耗时
%__strip /bin/true
3. 使用 ccache 缓存编译(多次打包极快)
安装并配置 ccache,重复编译可秒级完成。
四、最容易踩坑的 “无效 / 错误优化”
这些网上流传很广,但对你的场景完全无效:
make -j用于绿色软件 / 游戏打包 → 直接报错(绿色软件没有Makefile配置文件)_compress_level并非 rpm 合法宏 → 不生效- 普通用户下强行读写系统
/var/lib/rpm数据库 → 权限报错 - 过度优化导致包结构损坏
五、最终推荐 .rpmmacros 配置
cat ~/.rpmmacros
%_topdir %(echo $HOME)/rpmbuild
%_dbpath %{_topdir}/rpmdb
# 并行(满核)
%_smp_mflags -j%(nproc)
%_smp_build_ncpus %(nproc)
# 关闭 debug 包、关闭 strip
%_debug_package %{nil}
%__strip /bin/true
# 压缩拉到最快(gzip level 1)
%_binary_payload w1.gzdio
%_source_payload w1.gzdio
# 编译优化(O2)
%__optflags -O2 -pipe -fPIC
六、最快打包命令
rpmbuild -bb --noclean package.spec
编译型包:并行 + ccache + 关闭调试
- 绿色文件包:-bb + 低压缩 + –noclean
- 不要盲目复制参数,场景不对一切白搭
按照这套真实有效优化,rpmbuild 打包速度可以轻松提升 1~5 倍。