bin的rpm包里面是没有spec文件的,所以只能通过命令分析:
获取rpm包里的脚本:
-
$ rpm --scripts -qp kernel-2.6.32-431.el6.x86_64.rpm |less
-
postinstall scriptlet (using /bin/sh):
-
-
if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&
-
[ -f /etc/sysconfig/kernel ]; then
-
/bin/sed -r -i -e 's/^DEFAULTKERNEL=(kernel-smp|kernel-xen)$/DEFAULTKERNEL=kernel/' /etc/sysconfig/kernel || exit $?
-
fi
-
if grep --silent '^hwcap 0 nosegneg$' /etc/ld.so.conf.d/kernel-*.conf 2> /dev/null; then
-
sed -i '/^hwcap 0 nosegneg$/ s/0/1/' /etc/ld.so.conf.d/kernel-*.conf
-
fi
-
-
/sbin/new-kernel-pkg --package kernel --install 2.6.32-431.el6.x86_64 || exit $?
-
preuninstall scriptlet (using /bin/sh):
-
/sbin/new-kernel-pkg --rminitrd --rmmoddep --remove 2.6.32-431.el6.x86_64 || exit $?
-
if [ -x /sbin/weak-modules ]
-
then
-
/sbin/weak-modules --remove-kernel 2.6.32-431.el6.x86_64 || exit $?
-
fi
-
posttrans scriptlet (using /bin/sh):
-
-
NEWKERNARGS=""
-
(/sbin/grubby --info=`/sbin/grubby --default-kernel`) 2>/dev/null | grep -q crashkernel
-
if [ $? -ne 0 ]
-
then
-
NEWKERNARGS="--kernel-args="crashkernel=auto""
-
fi
-
/sbin/new-kernel-pkg --package kernel --mkinitrd --dracut --depmod --update 2.6.32-431.el6.x86_64 $NEWKERNARGS || exit $?
-
/sbin/new-kernel-pkg --package kernel --rpmposttrans 2.6.32-431.el6.x86_64 || exit $?
-
if [ -x /sbin/weak-modules ]
-
then
-
/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
里的小脚本分别在进程运行前和运行后执行。升级时,小脚本按照如下顺序执行:
-
新包的 %pretrans
-
新包的 %pre
-
软件包安装
-
新包的 %post
-
旧包的 %preun
-
移除旧包
-
旧包的 %postun
-
新包的 %posttrans
参考:
阅读(7845) | 评论(0) | 转发(0) |