增量升级centos系统rpm包的方法

    如centos7.2系统默认的rsyslog版本为rsyslog-7.4.7-12.el7.x86_64, 但是该版本存在一个bug,如下:

imjournal: fscanf on state file `/var/lib/rsyslog/imjournal.state' failed

当/var/lib/rsyslog/imjournal.state为空时,rsyslog将不再输出日志,即/var/log/messages为空

    如果升级rsyslog,则需要依赖的好多包都需要进行升级,非常繁琐。 这里提供一种只针对该bug进行修复的一种方法。

1. 首先获得rsyslog-7.4.7-12.el7.x86_64版本的源码rpm包。(从centos官网中的centos7.2系统中获取)

  http://vault.centos.org/7.2.1511/os/Source/SPackages/  点击打开链接

2. 放到centos7.2的系统中,进行安装

    rpm -ivh rsyslog-7.4.7-12.el7.src.rpm

    执行上述步骤后,

    (1)会在/root/rpmbuild/SOURCE下生成rsyslog-7.4.7-12相关的基本源码及patch包。


    (2)会在/root/rpmbuid/SPEC下生成rsyslog.spec文件

    

    (3)在/root/rpmbuid/SPEC目录下执行

        rpmbuidl -bb rsyslog.spec 则会生产rsyslog的源码在/root/rpmbuild/BUILD目录下。 将源码导出以备后面的修改使用。

好了,此时将该环境下的东西保存好。

3. 查找高版本的rpm包

如:https://centos.pkgs.org/7/centos-x86_64/rsyslog-8.24.0-12.el7.x86_64.rpm.html

同 1,2 两步将rsyslog-8.24.0-12的源码找到,并找到修复bug对应的patch,用vim打开这个patch查看修改的文件,对应的行号,修改的内容等等。 

4. 拷贝一份rsyslog-7.4.7(2.(3)中已经得到了源码)要修改的文件test.c ,根据3中的规则,对该文件进行修改,生成test_new.c

5. test.c 和test_new.c生成修复bug的patch

    diff -up test.c test_new.c > repair_bug.patch

6. 将repair_bug.patch放到centos7.2系统中的/root/rpmbuild/SOURCE目录下

7. 修改/root/rpmbuid/rsyslog.sec文件(目的是将repar_bug.patch打入源码中, 添加两处内容,如下红色部分)

Patch20: rsyslog-7.4.7-rhbz1101602-imjournal-zero-bytes.patch
Patch21: rsyslog-7.4.7-rhbz1188503-imjournal-default-tag.patch
Patch22: rsyslog-7.4.7-rhbz1184402-imuxsock-hostname.patch
Patch23: rsyslog-7.4.7-bz1254511-ppc64le_bug.patch
Patch24: repair_bug.patch



%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1


8. 然后再/root/rpmbuild/SPEC目录下执行

rpmbuild -ba rsyslog.spec 

则在/root/rpmbuild/RPMS目录下会生成新的带有修复了bug的rsyslog的rpm包。 将该包安装到系统上就可以完成bug的修复了


你可能感兴趣的:(linux,linux运维)