linux系统RPM包的制作

1、宏定义文件

1.1、内置宏

/etc/rpm/macros
/etc/rpm/macros.d/

其它可能位置

/usr/lib/rpm/macros
/usr/lib/rpm/redhat/macros

1.2、用户的宏

~/.rpmmacros

1.3、spec文件中定义的宏
1.4、执行rpmbuild时通过--define传入的宏

以上宏的覆盖顺序反过来,即1.4 > 1.3 > 1.2 > 1.1

2、宏语法

https://rpm-software-management.github.io/rpm/manual/macros.html

查看宏:

rpmbuild --showrc | grep macrofile

3、spec文件编写常用指令

文档编写官方文档
https://rpm-software-management.github.io/rpm/manual/spec.html

3.1 %prep --bp

%setup (解压、设定环境、cd切换目录)

3.2 %build --bc

./configure
make %{?_smp_mflags}

3.3 %install --bi

%{__make} install DESTDIR="%{buildroot}"
make install
%{__install}

3.4 其它在RPM包安装卸载时的指令(宏脚本)

在宏脚本中,$1变量的使用

含义
-初次安装
--ugrade包升级
--erase卸载
--reinstall重新安装
--verify验证
指令功能
%pre安装前执行的命令,如创建用户
%post安装后执行的命令,如更改文件权限
%preun卸载前执行的命令,如停止程序
%postun卸载后执行的命令,如删除用户

3.4 %check

make check
常为空或不写

3.5 %files

%{buildroot}下的文件 -> RPM包

除了/usr/src下的文件可以不用包含,其余必须全部包含,不能多不能少

可用宏指令说明示例
%defattr(<mode>, <user>, <group>, <dirmode>)该指令设置归属和权限的默认值
若后面列举的文件没有声明,则用该值
%defattr(0644, root, root, 0755)
%defattr(-,root,root,-)
%defattr(-,root,root)
%attr(<mode>, <user>, <group>) <file|directory>指定目录的权限和归属%attr(500,root,root) /usr/tkgup/start.sh
%ghost已删除文件
不复制,但在安装rpm时会删除该文件
%docdir /usr/tkgup/old_start.sh
%config(option)指定该文件为配置文件
在做升级时,可以考虑是否覆盖
若为noreplace,则升级不覆盖该文件
option: noreplace | missingok
%config(noreplace) %attr(0644, root, root) /usr/tkgup/config
%dir创建该文件夹
不复制其下内容
%dir /usr/tkgup/app
%exclude文件不放入rpm包%exclude /usr/tkgup/tests
%license版权声明文件%license LICENSE
%doc默认路径为:
/usr/share/doc/<package_name>/
%doc readme.md
%docdir更改%doc文件的安装路径%docdir /usr/tkgup/doc
%verify(option)验证文件的状态
option: all | md5 | size | timestamp等
%verify(all) /etc/myapp/config.conf

3.6 %clean

%{__rm} -rf %{buildroot}

3.7 %changelog

注意格式要求
参考:

%changelog
* Wed Jul 17 2024 tangkuigang <tkgup@qq.com> - 14:4.99.4-5
- Type:bugfix
- CVE:NA
- SUG:NA
- DESC:resolve user information residue after RPM package uninstallation, add user checks

* Tue May 07 2024 xinghe <xinghe2@h-partners.com> - 14:4.99.4-4
- Type:bugfix
- CVE:NA
- SUG:NA
- DESC:fix a not defined macro error

4、源RPM包的使用

rpmbuild --rebuild ${rpm_name}.src.rpm
yum-builddep ${rpm_name}.src.rpm

5、构建RPM包的常用调试阶段参数

参数结果
-bl检查buildroot的file包含情况
-bp%prep结束
-bc%build结束
-bi%install结束
-bb仅二进制格式RPM包
-bs仅源码格式RPM包
-ba二进制和源码RPM包

6、rpm包下载网站

欧拉首页

https://www.openeuler.org/

欧拉资源

https://repo.openeuler.org/
其它镜像
https://www.openeuler.org/zh/mirror/list/

其它常用网址

https://pkgs.org/
https://rpmfind.net/linux/RPM/index.html
https://koji.fedoraproject.org/koji/index
http://rpm.pbone.net/ (该网站似乎已不可用)

7、SPEC文件编写的其它说明

标签 Name/Version 中不能使用短横线 -
软件包信息必须:Name、Version、Release、Group、Summary、%description
组织信息,必须:License,建议加上:Vendor、URL
Packager: LastName FistName

Requires: a, b>=2.0,perl({模块名})>3.2
Requires(pre): a, b>=2.0,perl({模块名})>3.2

注释中使用%要用两个,即%%
定义宏,不要与关键字、标签重名

%define macro_name macro_value

使用宏

%{macro_name}
%macro_name

如使用buildroot,变量引用:

${RPM_BUILD_ROOT}
$RPM_BUILD_ROOT
%{buildroot}
%buildroot

在使用shell命令时可以引用宏变量

rpmbuild --showrc: 显示宏相关定义
一个下划线: 私有宏 / 内部宏,用于 RPM 系统的内部处理,用户不应覆盖或定义,如 _buildroot
两个下划线:高级内部宏 / 低级宏,用于内部处理某些系统特性,通常与操作系统或架构相关,如 __arch

rpmbuild --showrc | grep macrofiles   #关注~/.rpmmacros文件
_topdir: 定义顶级目录
	%_topdir   /home/tkg/rpmbuild    #修改宏的值

8、一个spec打包多个rpm包

增加

%package other_package

Summary:  your describe summary
Requires: AAA
Requires: BBB = 5.2.0

%description other_package
your describe

%files  other_package
[your files in this pacage]
.....

9、完整spec文档编写参考

https://gitee.com/tkgup/tcpdump/blob/master/tcpdump.spec

10、其它

10.1、install命令

创建目录:-d 全为路径,并创建 -D 最后一个为目标文件

10.2、查看文件变更情况

#查看文件是否被改过
rpm -qV {RPM}

10.3 制作补丁文件

#可以为路径
diff -Naur original_file new_file > patch_file 

10.4 执行命令构建rpm包

rpmbuild --nodeps  --target aarch64  --define '__your_shell_macro exit 0' '--define=yourmacro /usr/tkgup' tkg_app.spec -ba
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tkgup

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值