Linux命令-rpmbuild(RPM包构建工具)

发布时间:2026/7/14 10:59:41
Linux命令-rpmbuild(RPM包构建工具) Linux命令-rpmbuildRPM包构建工具简介语法⚙️选项与操作构建操作通用选项目录结构SPEC 文件关键字段常用宏示例示例 1搭建 rpmbuild 环境示例 2构建一个简单的 RPM 包示例 3从 SRPM 重新构建示例 4使用宏和条件构建示例 5调试构建过程⚠️注意总结相关命令rpmbuild 是 RPM 打包体系的核心工具从 SPEC 文件和源码构建 RPM 包。无论是将自研软件打包分发还是定制系统组件rpmbuild 都是不可或缺的。简介rpmbuild 根据 SPEC 文件中定义的构建流程编译源码并生成二进制 RPM 包.rpm和源码 RPM 包.src.rpm。它是 Fedora/RHEL/CentOS 生态中软件打包的标准工具。特性说明所属软件包rpm-build安装命令dnf install rpm-buildRHEL/CentOS/Fedora配置目录~/rpmbuild/SPEC 文件构建脚本定义打包全流程需要权限不要用 root 构建⚠️绝对不要在 root 用户下构建 RPM构建过程中的 %install 阶段如果出错可能覆盖系统文件。始终使用普通用户操作。语法rpmbuild[选项]操作[SPEC文件|SRPM文件...]⚙️选项与操作构建操作操作说明-ba构建二进制包 源码包最常用-bb仅构建二进制包-bs仅构建源码包-bc执行到 %build 阶段编译-bp执行到 %prep 阶段解压源码打补丁-bi执行到 %install 阶段安装到 buildroot-bl检查 %files 列表中的文件是否存在--rebuild从 SRPM 重新构建二进制包通用选项选项说明--target 架构指定目标架构如 x86_64、aarch64--define 宏 值定义宏变量--with 功能启用条件构建功能--without 功能禁用条件构建功能--nodeps不检查构建依赖--noclean不清理 BUILD 目录-v详细输出--clean构建完成后清理 BUILD 目录目录结构~/rpmbuild/ ├── SOURCES/ # 源码包.tar.gz、补丁文件 ├── SPECS/ # SPEC 文件 ├── BUILD/ # 编译工作目录自动创建 ├── BUILDROOT/ # 伪安装根目录自动创建 ├── RPMS/ # 生成的二进制 RPM 包 │ └── x86_64/ │ └── noarch/ └── SRPMS/ # 生成的源码 RPM 包SPEC 文件关键字段字段说明Name包名Version上游版本号Release发行号补丁级别Summary一行摘要License许可证Source0源码包 URL/文件名Patch0补丁文件名Requires运行时依赖BuildRequires构建时依赖%description详细描述%prep准备阶段解压打补丁%build编译阶段./configure make%install安装阶段make install 到 buildroot%check测试阶段make test%files打包文件列表%changelog变更日志常用宏宏展开值%{_topdir}~/rpmbuild%{buildroot}~/rpmbuild/BUILDROOT/...%{_bindir}/usr/bin%{_sbindir}/usr/sbin%{_libdir}/usr/lib6464位系统%{_datadir}/usr/share%{_sysconfdir}/etc%{_mandir}/usr/share/man%{_docdir}/usr/share/doc示例示例 1搭建 rpmbuild 环境安装构建工具并初始化目录结构# 安装 rpm-build 和开发工具sudodnfinstall-yrpm-build rpmdevtools# 使用 rpmdev-setuptree 创建标准目录结构rpmdev-setuptree# 查看创建的目录tree ~/rpmbuild/# 输出示例/home/user/rpmbuild/ ├── BUILD ├── RPMS ├── SOURCES ├── SPECS ├── SRPMS └── BUILDROOT -不存在构建时自动创建生成 SPEC 文件模板# 使用 rpmdev-newspec 生成 SPEC 模板rpmdev-newspec myapp# 输出示例myapp.spec created# 查看模板head-20~/rpmbuild/SPECS/myapp.spec# 输出示例Name: myapp Version: Release:1%{?dist}Summary: License: URL: Source0: BuildRequires: Requires: %description %prep %setup-q%build %installrm-rf$RPM_BUILD_ROOT%files %changelog示例 2构建一个简单的 RPM 包以打包一个 Shell 脚本工具为例完整流程# 1. 准备源码mkdir-p/tmp/hello-1.0cat/tmp/hello-1.0/hello.shEOF #!/bin/bash echo Hello from hello-1.0! echo RPM packaged tool EOFchmodx /tmp/hello-1.0/hello.sh# 2. 打包源码cd/tmptar-czf~/rpmbuild/SOURCES/hello-1.0.tar.gz hello-1.0/# 3. 编写 SPEC 文件cat~/rpmbuild/SPECS/hello.specEOF Name: hello Version: 1.0 Release: 1%{?dist} Summary: A simple hello world tool License: GPLv3 Source0: %{name}-%{version}.tar.gz %description A minimal hello world script packaged as an RPM. %prep %setup -q %build # 无需编译 %install rm -rf %{buildroot} install -d %{buildroot}%{_bindir} install -m 755 hello.sh %{buildroot}%{_bindir}/hello %files %{_bindir}/hello %changelog * Fri Jun 14 2025 User userexample.com - 1.0-1 - Initial package EOF# 4. 构建 RPM 包rpmbuild-bb~/rpmbuild/SPECS/hello.spec# 输出示例Executing(%prep): /bin/sh-e/var/tmp/rpm-tmp.abc123 umask022 cd/home/user/rpmbuild/BUILD cd/home/user/rpmbuild/BUILD rm-rfhello-1.0 /usr/bin/gzip-dc/home/user/rpmbuild/SOURCES/hello-1.0.tar.gz /usr/bin/tar-xvvof- STATUS0[0-ne0]cdhello-1.0 /usr/bin/chmod-RfarX,uw,g-w,o-w.Executing(%build): /bin/sh-e/var/tmp/rpm-tmp.def456 umask022 cd/home/user/rpmbuild/BUILD cdhello-1.0 Executing(%install): /bin/sh-e/var/tmp/rpm-tmp.ghi789 umask022 cd/home/user/rpmbuild/BUILD cd/home/user/rpmbuild/BUILD/hello-1.0 rm-rf/home/user/rpmbuild/BUILDROOT/hello-1.0-1.el9.x86_64 install-d/home/user/rpmbuild/BUILDROOT/hello-1.0-1.el9.x86_64/usr/bin install-m755hello.sh /home/user/rpmbuild/BUILDROOT/hello-1.0-1.el9.x86_64/usr/bin/hello Processing files: hello-1.0-1.el9.x86_64 Provides: hello1.0-1.el9.x86_64 Requires(rpmlib): rpmlib(CompressedFileNames)3.0.4-1 Checkingforunpackaged file(s): /usr/lib/rpm/check-files /home/user/rpmbuild/BUILDROOT/hello-1.0-1.el9.x86_64 Wrote: /home/user/rpmbuild/RPMS/x86_64/hello-1.0-1.el9.x86_64.rpm验证构建结果# 查看生成的 RPM 包ls-lh~/rpmbuild/RPMS/x86_64/# 输出示例-rw-rw-r--.1user user5.2K Jun1410:30 hello-1.0-1.el9.x86_64.rpm# 查看 RPM 包信息rpm-qip~/rpmbuild/RPMS/x86_64/hello-1.0-1.el9.x86_64.rpm# 输出示例Name:hello Version:1.0Release:1.el9 Architecture: x86_64 Install Date:(not installed)Group:Unspecified Size:42License:GPLv3 Signature:(none)Source RPM:hello-1.0-1.el9.src.rpm Summary:A simple hello world tool Description:A minimal hello world script packaged as an RPM.示例 3从 SRPM 重新构建从源码 RPM 包重新编译二进制包# 下载 SRPM 包dnf download--sourcebash# 输出示例bash-5.2.15-2.el9.src.rpm# 从 SRPM 重新构建rpmbuild--rebuildbash-5.2.15-2.el9.src.rpm# 输出示例节选Installing bash-5.2.15-2.el9.src.rpm Executing(%prep): /bin/sh-e/var/tmp/rpm-tmp.xxx cd/home/user/rpmbuild/BUILD cd/home/user/rpmbuild/BUILD rm-rfbash-5.2 /usr/bin/gzip-dc/home/user/rpmbuild/SOURCES/bash-5.2.tar.gz... Wrote: /home/user/rpmbuild/RPMS/x86_64/bash-5.2.15-2.el9.x86_64.rpm Wrote: /home/user/rpmbuild/RPMS/x86_64/bash-debuginfo-5.2.15-2.el9.x86_64.rpm Wrote: /home/user/rpmbuild/RPMS/x86_64/bash-debugsource-5.2.15-2.el9.x86_64.rpm示例 4使用宏和条件构建在 SPEC 文件中使用宏和条件开关# 在 SPEC 文件中定义宏cat~/rpmbuild/SPECS/myapp.specEOF Name: myapp Version: 2.0 Release: 1%{?dist} Summary: My Application License: MIT Source0: %{name}-%{version}.tar.gz # 条件构建--with ssl 启用 SSL 支持 %if %{with ssl} BuildRequires: openssl-devel %endif %description My application with optional features. %prep %setup -q %build %configure \ %{?with_ssl:--enable-ssl} \ %{?with_debug:--enable-debug} make %{?_smp_mflags} %install %make_install %files %{_bindir}/myapp %config(noreplace) %{_sysconfdir}/myapp.conf %doc README.md LICENSE EOF# 不带 SSL 支持rpmbuild-bb~/rpmbuild/SPECS/myapp.spec# 带 SSL 支持构建rpmbuild-bb--withssl ~/rpmbuild/SPECS/myapp.spec# 自定义宏定义rpmbuild-bb--definedebug 1~/rpmbuild/SPECS/myapp.spec示例 5调试构建过程分阶段执行构建方便排查问题# 仅执行 %prep 阶段解压源码打补丁rpmbuild-bp~/rpmbuild/SPECS/myapp.spec# 输出示例Executing(%prep): /bin/sh-e/var/tmp/rpm-tmp.abc umask022 cd/home/user/rpmbuild/BUILD cd/home/user/rpmbuild/BUILD rm-rfmyapp-2.0 /usr/bin/gzip-dc/home/user/rpmbuild/SOURCES/myapp-2.0.tar.gz /usr/bin/tar-xvvof- drwxrwxr-x1000/100002025-06-1410:00 myapp-2.0/ -rw-r--r--1000/10004202025-06-1410:00 myapp-2.0/configure...# 仅执行到 %build 阶段编译rpmbuild-bc~/rpmbuild/SPECS/myapp.spec# 仅执行到 %install 阶段安装到 buildrootrpmbuild-bi~/rpmbuild/SPECS/myapp.spec# 检查 %files 文件列表是否与 buildroot 匹配rpmbuild-bl~/rpmbuild/SPECS/myapp.spec# 输出示例Processing files: myapp-2.0-1.el9.x86_64 error: Installed(but unpackaged)file(s)found: /usr/bin/myapp-util /etc/myapp-defaults.conf# 提示有文件未列入 %files⚠️注意不要用 root 构建 RPM使用普通用户通过rpmdev-setuptree初始化环境BuildRequires必须声明完整否则在其他机器上可能构建失败%files列表必须精确匹配%install阶段安装的文件多了少了都会报错%config(noreplace)保护配置文件不被升级覆盖使用%{?dist}宏确保跨发行版兼容构建依赖缺失时用rpmbuild -bb --nodeps可跳过检查但可能导致构建失败查看宏展开结果rpmbuild --eval %{_bindir}总结rpmbuild 是 RPM 打包的核心工具掌握 SPEC 文件编写是关键。最常用的操作是-ba构建二进制源码包和--rebuild从 SRPM 重建。调试时分步使用-bp、-bc、-bi逐步排查。记住永远不要用 root 构建善用宏提高 SPEC 文件的可维护性。相关命令rpm— RPM 包管理器rpmquery— RPM 包查询rpm2cpio— 提取 RPM 包文件rpmlint— RPM 包质量检查rpmdev-setuptree— 初始化构建目录rpmdev-newspec— 生成 SPEC 模板mock— 在 chroot 环境中构建 RPMspectool— 下载 SPEC 中的 Source 源码

相关新闻

软件测试与质量保障实战——单元测试:从理论到代码的缺陷狩猎

软件测试与质量保障实战——单元测试:从理论到代码的缺陷狩猎

1. 单元测试的本质与价值单元测试就像代码世界的"显微镜",它能精准定位到程序中最小的功能单元。想象你正在组装一辆自行车,单元测试就是检查每个螺丝、齿轮是否正常工作的过程。在软件开发中,这个"螺丝"可能是一个计算日…

发布时间:2026/7/14 10:59:41
深圳好的网站建设公司排名:避坑指南与真实案例分享

深圳好的网站建设公司排名:避坑指南与真实案例分享

别再看那些千篇一律的榜单了。今天我就掏心窝子跟你聊聊,怎么在深圳找到真正靠谱的网站搭建团队。看完这篇,你至少能省下好几万的冤枉钱,还能避开90%的隐形坑。先说个真事。我有个做跨境电商的朋友,去年急着上线,找了家报价极低的“网红”公司。结果呢?代码乱得像团麻,打…

发布时间:2026/7/14 10:59:31
Noisy ViT与UniDDT:多模态模型从功能拼装走向本质统一

Noisy ViT与UniDDT:多模态模型从功能拼装走向本质统一

你有没有想过,为什么现在的AI模型要么擅长“看懂”图片(比如识别内容、回答问题),要么擅长“画出”图片(比如根据文字生成图像),但很难同时把这两件事都做好?这背后其实隐藏着一个根…

发布时间:2026/7/14 10:59:04
Nintendo Switch破解终极指南:TegraRcmGUI图形化注入工具完全解析

Nintendo Switch破解终极指南:TegraRcmGUI图形化注入工具完全解析

Nintendo Switch破解终极指南:TegraRcmGUI图形化注入工具完全解析 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI 还在为复杂的Nintendo Switch破…

发布时间:2026/7/14 12:17:25
但是网站相关内容和程序并没有建设完_其次网站公司给我公司的方案到底咋回事

但是网站相关内容和程序并没有建设完_其次网站公司给我公司的方案到底咋回事

说实话,最近这几天我真是被搞得心态有点崩。本来以为找个外包公司做个网站,就是花钱买省事。结果呢?钱交了,合同签了,然后就是无尽的等待。每次去问进度,对方都说在赶工,在优化。可当我登录后台看一眼的时候,心里凉半截。但是网站相关内容和程序并没有建设完_其次网站公…

发布时间:2026/7/14 12:17:17
别瞎搞!公司网站建设行为规定这几点不做,流量全跑光

别瞎搞!公司网站建设行为规定这几点不做,流量全跑光

别瞎搞!公司网站建设行为规定这几点不做,流量全跑光这篇指南直接告诉你怎么建网站才不亏钱,三步避开坑,照着做就行。很多老板觉得找个外包随便弄个页面就行,结果上线后没人看,钱打水漂。其实,一套靠谱的公司网站建设行为规定能帮你省下大笔冤枉钱。别信那些“三天上线”…

发布时间:2026/7/14 12:17:08
别被忽悠了!影视类网站建设到底要花多少钱?过来人掏心窝子的大实话

别被忽悠了!影视类网站建设到底要花多少钱?过来人掏心窝子的大实话

标题:别被忽悠了!影视类网站建设到底要花多少钱?过来人掏心窝子的大实话 关键词:影视类网站建设 内容: 做影视这行,大家都觉得光鲜亮丽。其实背地里全是坑。 我前年想搞个个人作品集网站,专门展示我拍的短片。 一开始也是头铁,觉得找个模板套套就行。 结果呢?加载慢得像蜗…

发布时间:2026/7/14 12:14:53
别再盲目跟风了,揭秘彩票理财网站建设的底层逻辑与避坑指南

别再盲目跟风了,揭秘彩票理财网站建设的底层逻辑与避坑指南

说实话,现在市面上那些打着“高回报、稳赚不赔”旗号的彩票理财平台,99%都是坑。但如果你是想正经做一款合规的、有技术含量的彩票资讯或辅助工具类网站,那这水可深着呢。今天咱们不聊怎么暴富,就聊聊怎么把“彩票理财网站建设”这件事儿做扎实,做长久。很多新手一上来就问…

发布时间:2026/7/14 12:14:00
别被忽悠了!商务网站开发与建设里的坑,我替你踩遍了

别被忽悠了!商务网站开发与建设里的坑,我替你踩遍了

本文关键词:商务网站开发与建设上周三半夜两点,我盯着电脑屏幕,眼睛酸得想流泪。隔壁工位的老张刚跑过来,递给我一根烟,说:“兄弟,这破网站怎么又打不开了?”我点着烟,深吸一口,心里那股火蹭蹭往上冒。这已经是这个月第三次了。客户那边催得紧,说是要搞个大动作,结…

发布时间:2026/7/14 12:13:58
别被忽悠了!襄阳网络公司 网站建设 避坑指南:500块和5000块的真相

别被忽悠了!襄阳网络公司 网站建设 避坑指南:500块和5000块的真相

很多老板在找襄阳网络公司 网站建设 的时候,第一句话总是问:“做官网多少钱?”这时候如果你直接报个价,十有八九要挨骂。要么觉得你贵,要么觉得你便宜没好货。我在襄阳这行混了快十年,见过太多因为贪便宜最后网站打不开、数据泄露、甚至被扣尾款的案例。今天我不讲虚的,…

发布时间:2026/7/14 0:00:06
揭秘2024最大网站建设公司排名,小白避坑指南

揭秘2024最大网站建设公司排名,小白避坑指南

别再看那些所谓的“全球十大”榜单了。全是花钱买的广告位。你信了,你就输了。很多老板找公司建站,最后钱花了,网站还打不开。这不仅仅是技术问题,更是信息不对称的陷阱。今天我不讲虚的,直接告诉你怎么挑。毕竟,在“最大网站建设公司排名”里,最大的往往不是最好的。而…

发布时间:2026/7/14 0:00:44
别被那些吹上天的教程骗了,phpstudy建设网站视频教程里没人告诉你的三个血泪坑

别被那些吹上天的教程骗了,phpstudy建设网站视频教程里没人告诉你的三个血泪坑

本文关键词:phpstudy建设网站视频教程说实话,现在网上搜“phpstudy建设网站视频教程”,出来的东西真是一言难尽。要么就是几年前的老版本录屏,要么就是那种为了骗点击量,标题起得惊天动地,内容全是废话的营销号。我自己在本地搭环境的时候,也踩过不少坑,今天就不整那些…

发布时间:2026/7/14 0:02:45
别装了,你的学院网站建设推进会就是场大型尴尬现场

别装了,你的学院网站建设推进会就是场大型尴尬现场

看着后台那点可怜的访问量,你急不急?方案改了八版,还是没人看。今天这文,只说怎么把会开成,把事做成。上周去隔壁职院蹭会,那场面,真叫一个窒息。会议室里坐满了人,领导在台上讲PPT,底下的人不是在玩手机,就是在发呆。投影仪闪了两下,灭了。没人去修,接着讲。这种会…

发布时间:2026/7/14 8:24:42
七彩建设集团官方网站怎么找?避坑指南与真实体验分享

七彩建设集团官方网站怎么找?避坑指南与真实体验分享

找官网找得头大?这篇直接告诉你怎么辨别真伪,别被假网站坑了钱。昨天半夜两点,我还在电脑前盯着屏幕,心里那个急啊。家里装修刚进场,工长突然说需要确认一份材料清单,说是七彩建设那边要求的。我手忙脚乱地打开浏览器,搜了一堆“七彩建设”,结果出来一堆广告,什么“七…

发布时间:2026/7/14 2:42:40
找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

做企业,网站就是脸面。 在龙岗,想找个靠谱的网站公司,真不容易。 市面上广告满天飞。 承诺得天花乱坠。 最后交付的东西,却让人想砸电脑。 今天不聊虚的。 只聊怎么避坑。 怎么找到真正可信赖的龙岗网站建设团队。先说个大实话。 别信什么“三天上线”。 那是骗小白的。 正…

发布时间:2026/7/13 8:40:50
建站7年才悟出的网站建设思路,别再花冤枉钱了

建站7年才悟出的网站建设思路,别再花冤枉钱了

做建站这行整整7年了。 见过太多老板花几万块, 最后做出来的网站像个垃圾场。 今天不整那些虚头巴脑的术语。 就聊聊我踩过的坑, 和真正能落地的网站建设思路。很多老板一上来就问: “多少钱能做个高大上的?” 我通常直接劝退。 因为方向错了, 你给再多钱也是打水漂。 真正…

发布时间:2026/7/11 8:50:55
合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

做企业官网最怕什么?不是技术难,是交钱后没人管,或者上线一个月连个访客都没有。这篇东西不扯虚的,直接告诉你怎么在合肥找个靠谱的团队,或者自己怎么避坑。先说个大实话,我在合肥混这行五年多,见过太多老板因为贪便宜吃大亏。你去百度搜“合肥的网站建设”,出来一堆报…

发布时间:2026/7/10 18:05:06
别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

做这行久了,心里就憋着一股火。每次看到客户拿着网上抄来的模板,问我能不能做成“苹果官网”那种效果。我就想笑。真的,太想笑了。今天咱不整那些虚头巴脑的专业术语。就聊聊德州网站建设里,那些让人头秃的真实事儿。我有个客户,老张。他是做德州本地建材的,实在人。当初…

发布时间:2026/7/13 2:08:03