如何解压rpm包并重新打包

2020/06/0311:57:01如何解压rpm包并重新打包已关闭评论

1、安装rpmrebuild和rpmbuild工具

# 安装rpmbuild工具套件
yum install rpm-build

rpmrebuild工具可在以下链接中下载,一般下载最新版本

点击下载rpmrebuild源码包

2、配置rpm重编译目录

编辑 ~/.rpmmacros文件,在其中加入以下内容:

%_topdir /root/rpmbuild

3、创建编译目录

mkdir -p /root/rpmbuild/{BUILDROOT,SPECS}
# 解压rpmrebuild源码包,我这里下载的是2.15版本
cd /root/rpmbuild
tar -zxvf rpmrebuild-2.15.tar.gz

4、安装需要重打包的rpm包

这里以net-tools-xx.xx.rpm包为例,安装包是从ISO中取出来的

rpm -ivh net-tools-xx.xx.rpm

5、生成rpm所需要的编译脚本net-tools.spec

# 第4步中已经安装了net-tools安装包,我们可以通过以下命令查看安装的软件包
rpm -qa | grep net-tools
# 获取到的是不带版本和发行版的包名为net-tools来重新生成
cd /root/rpmbuild
./rpmrebuild.sh -s SPEC/net-tools.spec net-tools

查看net-tools.spec文件内容如下,这里我只展示关键部分:

# rpmrebuild autogenerated specfile

%define defaultbuildroot /
AutoProv: no
%undefine __find_provides
AutoReq: no
%undefine __find_requires
# Do not try autogenerate prereq/conflicts/obsoletes and check files
%undefine __check_files
%undefine __find_prereq
%undefine __find_conflicts
%undefine __find_obsoletes
# Be sure buildpolicy set to do nothing
%define __spec_install_post %{nil}
# Something that need for rpm-4.1
%define _missing_doc_files_terminate_build 0
#dummy
#dummy
#BUILDHOST:    x86-01.bsys.centos.org
#BUILDTIME:    2018年10月30日 星期二 12时40分50秒
#SOURCERPM:    net-tools-2.0-0.24.20131004git.el7.src.rpm

#RPMVERSION:   4.11.3

#INSTALLTIME:  2019年05月27日 星期一 05时03分03秒

#OS:           linux
#SIZE:           939930
#ARCHIVESIZE:           947436
#ARCH:         x86_64
BuildArch:     x86_64
Name:          net-tools
Version:       2.0
Release:       0.24.20131004git.el7
License:       GPLv2+ 
Group:         System Environment/Base
Summary:       Basic networking tools

URL:           http://sourceforge.net/projects/net-tools/
Vendor:        CentOS
Packager:      CentOS BuildSystem <http://bugs.centos.org>

Provides:      net-tools = 2.0-0.24.20131004git.el7
Provides:      net-tools(x86-64) = 2.0-0.24.20131004git.el7
Requires(post): /bin/sh  
Requires:      libc.so.6()(64bit)  
Requires:      libc.so.6(GLIBC_2.14)(64bit)  
Requires:      libc.so.6(GLIBC_2.2.5)(64bit)  
Requires:      libc.so.6(GLIBC_2.3)(64bit)  
Requires:      libc.so.6(GLIBC_2.3.4)(64bit)  
Requires:      libc.so.6(GLIBC_2.4)(64bit)  
Requires:      libselinux.so.1()(64bit)  
#Requires:      rpmlib(CompressedFileNames) <= 3.0.4-1
#Requires:      rpmlib(FileDigests) <= 4.6.0-1
#Requires:      rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires:      rtld(GNU_HASH)  
Requires(post): systemd-units  
#Requires:      rpmlib(PayloadIsXz) <= 5.2-1
#suggest
#enhance
%description
The net-tools package contains basic networking tools,
including ifconfig, netstat, route, and others.
Most of them are obsolete. For replacement check iproute package.
%files
%attr(0755, root, root) "/bin/netstat"
%attr(0755, root, root) "/sbin/arp"
%attr(0755, root, root) "/sbin/ether-wake"
%attr(0755, root, root) "/sbin/ifconfig"
%attr(0755, root, root) "/sbin/ipmaddr"
%attr(0755, root, root) "/sbin/iptunnel"
%attr(0755, root, root) "/sbin/mii-diag"
%attr(0755, root, root) "/sbin/mii-tool"
%attr(0755, root, root) "/sbin/nameif"
%attr(0755, root, root) "/sbin/plipconfig"
%attr(0755, root, root) "/sbin/route"
%attr(0755, root, root) "/sbin/slattach"
%attr(0644, root, root) "/usr/lib/systemd/system/arp-ethers.service"
%dir %attr(0755, root, root) "/usr/share/doc/net-tools-2.0"
%doc %attr(0644, root, root) "/usr/share/doc/net-tools-2.0/COPYING"
%lang(cs) %attr(0644, root, root) "/usr/share/locale/cs/LC_MESSAGES/net-tools.mo"
%lang(de) %attr(0644, root, root) "/usr/share/locale/de/LC_MESSAGES/net-tools.mo"
%lang(et) %attr(0644, root, root) "/usr/share/locale/et_EE/LC_MESSAGES/net-tools.mo"
%lang(fr) %attr(0644, root, root) "/usr/share/locale/fr/LC_MESSAGES/net-tools.mo"
%lang(pt) %attr(0644, root, root) "/usr/share/locale/pt_BR/LC_MESSAGES/net-tools.mo"
%lang(de) %doc %attr(0644, root, root) "/usr/share/man/de/man5/ethers.5.gz"
%lang(de) %doc %attr(0644, root, root) "/usr/share/man/de/man8/arp.8.gz"
%lang(de) %doc %attr(0644, root, root) "/usr/share/man/de/man8/ifconfig.8.gz"
%lang(de) %doc %attr(0644, root, root) "/usr/share/man/de/man8/netstat.8.gz"
%lang(de) %doc %attr(0644, root, root) "/usr/share/man/de/man8/plipconfig.8.gz"
%lang(de) %doc %attr(0644, root, root) "/usr/share/man/de/man8/route.8.gz"
%lang(de) %doc %attr(0644, root, root) "/usr/share/man/de/man8/slattach.8.gz"
%lang(fr) %doc %attr(0644, root, root) "/usr/share/man/fr/man5/ethers.5.gz"
%lang(fr) %doc %attr(0644, root, root) "/usr/share/man/fr/man8/arp.8.gz"
%lang(fr) %doc %attr(0644, root, root) "/usr/share/man/fr/man8/ifconfig.8.gz"
%lang(fr) %doc %attr(0644, root, root) "/usr/share/man/fr/man8/netstat.8.gz"
%lang(fr) %doc %attr(0644, root, root) "/usr/share/man/fr/man8/plipconfig.8.gz"
%lang(fr) %doc %attr(0644, root, root) "/usr/share/man/fr/man8/route.8.gz"
%lang(fr) %doc %attr(0644, root, root) "/usr/share/man/fr/man8/slattach.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man5/ethers.5.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/arp.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/ether-wake.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/ifconfig.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/ipmaddr.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/iptunnel.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/mii-diag.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/mii-tool.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/nameif.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/netstat.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/plipconfig.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/route.8.gz"
%doc %attr(0644, root, root) "/usr/share/man/man8/slattach.8.gz"
%lang(pt) %doc %attr(0644, root, root) "/usr/share/man/pt/man8/arp.8.gz"
%lang(pt) %doc %attr(0644, root, root) "/usr/share/man/pt/man8/ifconfig.8.gz"
%lang(pt) %doc %attr(0644, root, root) "/usr/share/man/pt/man8/netstat.8.gz"
%lang(pt) %doc %attr(0644, root, root) "/usr/share/man/pt/man8/route.8.gz"
%post -p /bin/sh

if [ $1 -eq 1 ] ; then 
        # Initial installation 
        systemctl preset arp-ethers.service >/dev/null 2>&1 || : 
fi
%changelog%changelog

6、解压原始rpm包

嘘~别说话,看操作

cd /root/rpmbuild/BUILDROOT
# 这里需要根据net-tools.spec文件中的provides字段建一个对应的目录,这里是:

mkdir net-tools-2.0-0.24.20131004git.el7.x86_64
cd net-tools-2.0-0.24.20131004git.el7.x86_64
cp /opt/net-tools-xx.xx.rpm . -f
rpm2cpio net-tools-xx.xx.rpm |cpio -idv
# 关键部分来了,如果这里需要添加自己的文件,那可以按全路径和目录的方式放好,假设我们要放一个/usr/lib/111.txt文件进去,则在net-tools.spec文件中添加如下行:

%attr(0644, root, root) "/usr/lib/111.txt"

7、重新打包rpm包

rpmbuild -ba /root/rpmbuild/SPECS/net-tools.spec

GAME OVER!

  • 微信扫码赞助
  • weinxin
  • 支付宝赞助
  • weinxin