现在的位置: 首页 > 综合 > 正文

【rpmbuild】修改rpm源码包

2018年02月10日 ⁄ 综合 ⁄ 共 1891字 ⁄ 字号 评论关闭

【任务描述】
目标:fdisk -l只输出物理磁盘的分区信息,过滤掉逻辑卷(如果有的话)的信息。

步骤:
1、查看源码包
# rpm -qf `which fdisk`  #查看fdisk命令属于哪个安装包。
util-linux-ng-2.17.2-12.4.el6.x86_64
2、下载源码包
去上文提供的站点下载util-linux-ng的源码包
3、安装源码包
# rpm -ivh util-linux-ng-2.17.2-12.4.el6.src.rpm
4、分析
此源码包内包含许多补丁,执行rpmbuild -ba util-linux-ng.spec时,第一步会将这些补丁打上。我以前修改源码包,直接将源代码减压出来,编辑完源代码后打包,最后rpmbuild -ba *.spec搞定的,但是这个源码包不允许这么做,原因就是“打补丁”的过程。不熟悉diff和patch指令及原理的话,请网上搜索一下,或者移步:http://blog.sina.com.cn/s/blog_6ccfa4f30100t6r1.html。
打补丁过程,必须让补丁能识别待升级的文件。如果将待升级文件内容改变,打补丁肯定失败。必须遵守此源码包的规则,通过打补丁的方式需改源代码。
5、打上源代码中的补丁
# rpmbuild -bp util-linux-ng.spec   # 打上所有以存在的补丁
打好补丁的源代码都在rpmbuild/BUILD/util-linux-ng-2.17.2中。我只需要fdisk的代码。
6、复制fdisk文件夹
# cd /root
# mkdir a b
# cp -r rpmbuild/BUILD/util-linux-ng-2.17.2/fdisk /root/a
# cp -r rpmbuild/BUILD/util-linux-ng-2.17.2/fdisk /root/b
7、编辑源代码
进入b/fdisk目录,修改其中的fdisk.c,内容略。
8、生成补丁
# diff a b >util-linux-ng-2.17.2-fdisk-show.patch
将此补丁包移到rpmbuild/SOURCES/目录,与其他补丁包放在一起。
9、修改util-linux-ng.spec
贴出spec文件的patch吧:

点击(此处)折叠或打开

  1. # diff -Nura util-linux-ng.spec.orig
    util-linux-ng.spec.last
  2. --- util-linux-ng.spec.orig
    2011-09-16 02:13:34.000000000 -0400
  3. +++ util-linux-ng.spec.last
    2012-09-04 11:46:20.903129742 -0400
  4. @@ -219,+219,8
    @@
  5.  Patch59: util-linux-ng-2.17-mount-mtab.patch
  6.  # CVE-2011-1677 - umount may fail to remove /etc/mtab~ lock
    file [#738789]
  7.  Patch60: util-linux-ng-2.17-umount-mtab.patch
  8. +# Custom - don't
    show the logical volume's name when execute 'fdisk -l'
  9. +Patch61: util-linux-ng-2.17-fdisk-show.patch
  10.  
  11.  
  12.  %description
  13. @@ -369,+371,7
    @@
  14.  %patch58 -p1
  15.  %patch59 -p1
  16.  %patch60 -p1
  17. +%patch61 -p1
  18.  
  19.  %build
  20.  unset LINGUAS || :


10、生成rpm包
rpmbuild -ba util-linux-ng.spec
完成后去rpmbuild/SRPMS路径获取新的源码包,去rpmbuild/RPMS路径获取二进制包。

【补充】
util-linux-ng-2.17.2-fdisk-show.patch补丁的首三行:

点击(此处)折叠或打开

  1. diff -Nura a/fdisk/fdisk.c
    b/fdisk/fdisk.c
  2. --- a/fdisk/fdisk.c
    2012-09-04 10:30:49.979129304 -0400
  3. +++ b/fdisk/fdisk.c
    2012-09-04 10:34:15.974133102 -0400

由于spec文件对补丁包提供“-p1”的参数,打补丁的时候忽略第一层路径,即a/路径被忽略,补丁直接查找本目录下fdisk目录中的fdisk.c文件,找到后打上补丁。

抱歉!评论已关闭.