Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1274040
  • 博文数量: 389
  • 博客积分: 2874
  • 博客等级: 少校
  • 技术积分: 3577
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 10:34
文章分类

全部博文(389)

文章存档

2020年(2)

2018年(39)

2017年(27)

2016年(3)

2015年(55)

2014年(92)

2013年(54)

2012年(53)

2011年(64)

分类: LINUX

2014-08-01 10:49:04

bin的rpm包里面是没有spec文件的,所以只能通过命令分析:
获取rpm包里的脚本:

点击(此处)折叠或打开

  1. $ rpm --scripts -qp kernel-2.6.32-431.el6.x86_64.rpm |less
  2. postinstall scriptlet (using /bin/sh):

  3. if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&
  4.    [ -f /etc/sysconfig/kernel ]; then
  5.   /bin/sed -r -i -e 's/^DEFAULTKERNEL=(kernel-smp|kernel-xen)$/DEFAULTKERNEL=kernel/' /etc/sysconfig/kernel || exit $?
  6. fi
  7. if grep --silent '^hwcap 0 nosegneg$' /etc/ld.so.conf.d/kernel-*.conf 2> /dev/null; then
  8.   sed -i '/^hwcap 0 nosegneg$/ s/0/1/' /etc/ld.so.conf.d/kernel-*.conf
  9. fi

  10. /sbin/new-kernel-pkg --package kernel --install 2.6.32-431.el6.x86_64 || exit $?
  11. preuninstall scriptlet (using /bin/sh):
  12. /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove 2.6.32-431.el6.x86_64 || exit $?
  13. if [ -x /sbin/weak-modules ]
  14. then
  15.     /sbin/weak-modules --remove-kernel 2.6.32-431.el6.x86_64 || exit $?
  16. fi
  17. posttrans scriptlet (using /bin/sh):

  18. NEWKERNARGS=""
  19. (/sbin/grubby --info=`/sbin/grubby --default-kernel`) 2>/dev/null | grep -q crashkernel
  20. if [ $? -ne 0 ]
  21. then
  22.         NEWKERNARGS="--kernel-args="crashkernel=auto""
  23. fi
  24. /sbin/new-kernel-pkg --package kernel --mkinitrd --dracut --depmod --update 2.6.32-431.el6.x86_64 $NEWKERNARGS || exit $?
  25. /sbin/new-kernel-pkg --package kernel --rpmposttrans 2.6.32-431.el6.x86_64 || exit $?
  26. if [ -x /sbin/weak-modules ]
  27. then
  28.     /sbin/weak-modules --add-kernel 2.6.32-431.el6.x86_64 || exit $?
我是想做一个内核包(不是源码包,是可执行的内核包)
kenel里的 spec 不包含修改 grub.conf 得部分。
但是 kernel里make install 和 rpm 安装官方发布的 kernel 时都会 自动更新grub.conf文件。
所以通过提取centos 发布的kernel包里的 spec的 脚本来分析 rpm 安装时到底都干了什么。

小脚本运行顺序

在 %pre 和 %post 里的小脚本分别在软件包安装前和安装后执行。在 %preun 和 %postun 里的小脚本分别在软件包卸载前和卸载后执行。在 %pretrans 和 %posttrans 里的小脚本分别在进程运行前和运行后执行。升级时,小脚本按照如下顺序执行:

  1. 新包的 %pretrans
  2. 新包的 %pre
  3. 软件包安装
  4. 新包的 %post
  5. 旧包的 %preun
  6. 移除旧包
  7. 旧包的 %postun
  8. 新包的 %posttrans

参考:


阅读(7845) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~