1、安装rpmrebuild和rpmbuild工具
# 安装rpmbuild工具套件
yum install rpm-build
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!
- 微信扫码赞助
- 支付宝赞助