Linux怎么制作RPM包_Linux如何打包自定义rpm软件包【教程】

阿磊大大_5182

阿磊大大_5182

2026-03-20

623人浏览

原创

用 rpmdev-setuptree 一键创建标准 rpm 构建目录结构并配置 ~/.rpmmacros,安装 rpm-build、rpmdevtools、redhat-rpm-config 工具链,确保 name/version 与源包名严格匹配,显式声明 buildarch: noarch,%files 路径以 %{buildroot} 为根,%install 中必须使用 destdir=%{buildroot},调试加 --vv 参数。

linux怎么制作rpm包_linux如何打包自定义rpm软件包【教程】

怎么搭出干净可用的RPM构建环境

别直接在生产机上搞,也别手动 mkdir 一堆目录应付了事——rpmbuild 对路径结构有强约定,错一个就报 File /root/rpmbuild/SOURCES/xxx.tar.gz: No such file or directory 这类“找不到源”的假错误,实际是环境没建对。

  • 用 rpmdev-setuptree 一键生成标准结构(~/rpmbuild/{SPECS,SOURCES,RPMS,BUILD,SRPMS}),它比手动创建更可靠,还会自动写好 ~/.rpmmacros 配置
  • 必须装全工具链:yum install -y rpm-build rpmdevtools redhat-rpm-config,缺 redhat-rpm-config 会导致 %{?dist} 展开失败、%setup -q 报错
  • 普通用户就能构建,无需 root;但最终安装测试时要用 sudo rpm -ivh,别用 su -c 混淆权限上下文

SPEC 文件里哪些字段不能省、不能乱写

.spec 不是配置文件,是构建脚本——漏掉 %install 或写错 %files,包能编出来但安装后文件全丢在 /tmp 或根本没拷过去。

  • Name 和 Version 必须和源码压缩包名严格匹配,比如源是 mytool-2.1.0.tar.gz,就得写 Name: mytool + Version: 2.1.0,否则 %setup -q 解压失败
  • BuildArch: noarch 要显式声明(尤其脚本类工具),不写默认按主机架构走,x86_64 机器打包的包在 aarch64 上会提示 no package available
  • %files 列的路径必须以 %{buildroot} 为根,例如写 /usr/bin/mytool 是错的,得写 %{_bindir}/mytool 或 %{buildroot}/usr/bin/mytool;漏掉 %defattr(-,root,root) 可能导致安装后文件权限为 000

为什么 rpmbuild -ba 总卡在 %build 或 %install 阶段

不是命令错了,是构建逻辑没对齐源码习惯。rpmbuild 默认不会帮你 cd 进解压目录、也不会自动运行 ./configure,所有编译安装动作都得你白纸黑字写进 %build 和 %install 里。

  • 如果源码带 Makefile,%build 写 make,%install 写 make install DESTDIR=%{buildroot} ——DESTDIR 是关键,漏了就真把文件装到宿主机 /usr 下了
  • 纯 shell 工具?跳过 %build,在 %install 里用 install -m 0755 %{_sourcedir}/mytool.sh %{buildroot}%{_bindir}/mytool
  • 调试时加 -vv 参数:rpmbuild -ba --vv mytool.spec,能看到每一步执行的真实命令和当前工作目录,比猜快得多

安装后发现命令找不到或配置不生效

常见于没处理好路径宏或忽略安装脚本语义。RPM 不是复制粘贴,它要协调系统状态。

  • 检查 %files 是否漏了配置文件,比如 /etc/mytool.conf 没列进去,安装后当然不存在;用 %config(noreplace) 标记配置文件,避免升级时被覆盖
  • 需要开机启动?别只放 service 文件,得在 %post 里写 systemctl daemon-reload && systemctl enable mytool.service,否则 rpm 装完服务不自启
  • 卸载时想清理数据?%preun 和 %postun 不是摆设:%preun 适合停服务,%postun 适合删缓存目录,但别在 %postun 里删 /var/log ——日志该留还得留

最麻烦的永远不是打包本身,而是 %files 漏项、DESTDIR 忘写、%{buildroot} 和 %{_prefix} 混用——这三处出错,包能生成,但装上去就是个空壳。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

6067

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2568

6

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4210

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3553

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2793

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6830

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6482

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3733

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3225

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习