提取原rpm包里的SPEC文件及重新打包

一、概要

    目的是要修改原rsyslog rpm包的systemd rsyslog.service文件,添加一行“ExecStartPre=/bin/bash -c "/usr/bin/rm -f /var/lib/rsyslog/*"用于每次重启rsyslog都不会重读rsyslog上次挂了以后的断点日志,而是每次都要rsyslog重启后的重传日志。

现在需要通过rsyslog的官方rpm包解压文件并用rpm包里的spec文件重新打一份属于自己的包,也可以在spec文件里加一些自己的东西。

 

二、环境准备

机器环境: centos7一台

打包环境安装:

1. yum install epel-release centos-release -y

2.yum install rpm-build rpmrebuild rpm cpio

打包目录构建:

提取原rpm包里的SPEC文件及重新打包_第1张图片

 

三、获取源rsyslog rpm包的文件及.spec

添加rsyslog yum源:

编辑/etc/yum.repos.d/rsyslog.conf:

[bsc-rsyslog]
name=Adiscon CentOS-$releasever - local packages for $basearch
baseurl=http://rpms.adiscon.com/v8-stable/epel-$releasever/$basearch
enabled=1
gpgcheck=0
protect=1

清除yum缓存: yum clean all

查看你可以下载rsyslog安装包:

命令: yum provides rsyslog

提取原rpm包里的SPEC文件及重新打包_第2张图片

下载rsyslog rpm包:

命令: yumdownloader rsyslog-8.39.0-4.el7.x86_64

提取原rpm包里的SPEC文件及重新打包_第3张图片

获取rpm包中的.spec文件:

rpmrebuild -e -p --notest-install rsyslog-8.39.0-4.el7.x86_64.rpm

这时会打开到该rpm包的spec文件为一个临时文件,用vim打开的,使用vim的另存为功能(shift键+":",输入w 文件名):

提取原rpm包里的SPEC文件及重新打包_第4张图片

就会在当前目录保存一个rsyslog.spec的文件,这个就是rpm包的spec文件

获取rpm中的源文件

在当前目录创建一个目录用来装源文件:mkdir rsyslog

把rpm移至刚创建的目录: mv rsyslog-8.39.0-4.el7.x86_64.rpm rsyslog/

提取源文件: rpm2cpio rsyslog-8.39.0-4.el7.x86_64.rpm | cpio -div

提取原rpm包里的SPEC文件及重新打包_第5张图片

图中列表就是源文件,已生成在当前目录。

四、打包流程

修改你想要修改的文件:

我这里修改了源文件中的./etc/rsyslog.conf以及./usr/lib/systemd/system/rsyslog.service

更改.SPEC文件进行打包:

提取原rpm包里的SPEC文件及重新打包_第6张图片

这里我修改了名称、版本号。

然后把SPEC文件移至打包环境中的SPECS目录: mv rsyslog.spec SPECS/

通过SPEC文件打包:

开始打包:rpmbuild -bb SPECS/rsyslog.spec

提取原rpm包里的SPEC文件及重新打包_第7张图片

发现报错知道咱们还没有把源文件移至BUILDROOT目录下做源文件来打包。

移动咱们刚才的源文件至BUILDROOT目录: mv rsyslog/ BUILDROOT/bsc-rsyslog-1.1.0-1.el7.x86_64/

再使用SPEC进行打包: rpmbuild -bb SPECS/rsyslog.spec

提取原rpm包里的SPEC文件及重新打包_第8张图片现在流程跑完了,查看RPMS目录是否有咱们的新rpm文件: 

发现已经生成了该文件,打包成功!

 

本文章关于通过源rpm修改其中的文件并通过原.spec文件重新打包成新rpm文件的分享结束!

 

 

 

本文章属于原创作品,如果有引用,请注明出处,谢谢!

你可能感兴趣的:(rpm打包,linux运维,rpm打包,SPEC文件,运维)