rpm打包

rpm源码包

src.rpm包含spec

方案一

先安装,然后在rpmbuild目录直接可以查看文件

准备

mkdir /root/rpmbuild
cat<<EOF> /root/.rpmmacros 
%_topdir /root/rpmbuild
EOF

安装

方案二

不用安装 ,使用rpm2cpio

提取rpm包spec文件到当前目录

rpm2cpio rpm包名.src.rpm | cpio -civ '*.spec'

rpm包

没有源码包,只能从rpm包提取,使用rpmrebuild

注意:基于rpm包获取的信息生成,实际运行可能会有问题

① 安装所需工具

yum install epel-release centos-release -y
yum install -y rpmrebuild rpmdevtools rpm-build rpm cpio

② 创建目录并进入

rpmdev-setuptree
cd rpmbuild/

③ 下载rpm包到当前目录

yumdownloader rpm包名

包查找:
https://pkgs.org/
https://mirrors.tuna.tsinghua.edu.cn/centos-vault/

④ 获取rpm包中的.spec文件

rpmrebuild -e -p --notest-install rpm包名.rpm

这时会打开到该rpm包的spec文件为一个临时文件,用vim打开的,使用vim的另存为(shift+:),(w 文件名)保存到当前目录

⑥ 提取rpm包所有文件到当前目录

rpm2cpio rpm包名.rpm | cpio -div

⑦ 修改spec文件,去除rpmrebuild头部

vim rpm包名.spec

⑧ 将spec文件移至SPECS目录

mv rpm包名.spec SPECS/

⑨ 通过SPEC文件打包

rpmbuild -bb SPECS/rpm包名.spec

⑩ 根据报错创建目录

mkdir BUILDROOT/rpm新包名/

⑪ 源文件移至BUILDROOT目录

mv usr BUILDROOT/rpm新包名/

⑫ 通过spec文件打包

rpmbuild -bb SPECS/rpm包名.spec

⑬ 查看RPMS下的新rpm文件

tree RPMS/

查看包依赖

使用yum

yum deplist rpm包名

使用rpm

rpm -qpR rpm包名.rpm

spce文件参数:

不自动查找软件所需的共享库与其提供的共享库

Autoreqprov:   no

Autoreq : 此域用于指示RPM是否自动查找软件所需的共享库。仅当域值为no或0时,RPM不执行find-requires程序,否则均执行该程序。
Autoprov : 此域用于指示RPM是否自动查找软件提供的共享库。仅当域值为no或0时,RPM不执行find-provides程序,否则均执行该程序。
Autoreqprov : 此域用于指示RPM是否自动查找软件所需的共享库与其提供的共享库。仅当域值为no或0时,RPM不执行find-requires与find-provides两个程序。此域相当于同时设定Autoreq与Autoprov域值为指定之值。
注: 上述三个域在描述文件中,它们之间因为顺序的不同而结果会有所不同,一般以最后一个为准。

refe

https://stackoverflow.com/questions/5613954/extract-the-spec-file-from-rpm-package
https://blog.packagecloud.io/eng/2015/10/13/inspect-extract-contents-rpm-packages/
https://blog.csdn.net/u012373815/article/details/73257754
https://blog.csdn.net/jk775800/article/details/88643440
https://blog.csdn.net/wf1982/article/details/6636157

posted @ 2021-03-13 17:22  原因与结果  阅读(302)  评论(0编辑  收藏  举报