公司的要求是将内核制作成一个rpm包,安装系统时将rpm包直接直接安装到系统
内核是3.15.8
1、#make rpm #能够直接制作rpm 安装包
2、将rpm包放到目标系统
#rpm -ivh kernel-3.15.8.rpm 就能安装上去
3、设置为默认启动
默认启动内核还是以前的内核,不是3.15.8,所以要设置为默认启动
grubby --set-default=/boot/vmlinuz-3.15.8
注:
看了好长时间 rpm 如何打包的东东
下面将看得过程中的东西记录下来
1、make rpm包使用的kernel.spec文件是通过 kernel_path/scripts/package/mkspc 这个脚本生成的
rpm 的 打包过程和安装过程还是听模糊
打包命令是rpmbuild ,构建包内容是通过 %build
打包 用到的文件 通过 %files 标识
rpmbuild 默认是通过源码包构建 可执行文件包,所以源码包 会进行 make; make install的过程, make 需要写道 %build 下面
2、%install
这个标签下面的脚本需要实现将打包需要的各种内容 (可执行文件,库,头文件,文档等等)移动$RPM_BUILD_ROOT目录下
个人感觉可能是%files 标签标识的 文件 默认目录就是 $RPM_BUILD_ROOT,最终打包的还是 $RPM_BUILD_ROOT目录下的东西。
这个没有试过。
3、打到包里的内容可以解开rpm 看到
解包:
#rpm2cpio xxx.rpm | cpio -d .
4、安装包
包里没有 initramfs 文件
这个文件是安装包的时候自动生成的。
安装包后会执行命令:
/sbin/installkernel 3.15.8 /boot/vmlinuz-3.15.8-rpm /boot/System.map-3.15.8-rpm
这个命令会安装内核到系统中,使用的命令是 new-kernel-pkg
if [ -n "$cfgLoader" -a -x /sbin/new-kernel-pkg ]; then
if [ -x /sbin/dracut ]; then
/sbin/new-kernel-pkg --mkinitrd --dracut --host-only --depmod --make-default --install $KERNEL_VERSION
else
/sbin/new-kernel-pkg --mkinitrd --depmod --install $KERNEL_VERSION
fi
/sbin/new-kernel-pkg --rpmposttrans $KERNEL_VERSION
fi
grubby 是在 new-kernel-pkg 里执行的
if [ -n "$cfgGrub" ]; then
[ -n "$verbose" ] && echo "adding $version to $grubConfig"
if [ -n "$banner" ]; then
title="$banner ($version)"
elif [ -f /etc/redhat-release ]; then
title="$(sed 's/ release.*$//' < /etc/redhat-release) ($version)"
else
title="Red Hat Linux ($version)"
fi
$grubby --add-kernel=$bootPrefix/$kernelName-$version \
$INITRD --copy-default $makedefault --title "$title" \
${mbkernel:+--add-multiboot="$mbkernel"} ${mbargs:+--mbargs="$mbargs"} \
--args="root=$rootdevice $kernargs" --remove-kernel="TITLE=$title"
else
[ -n "$verbose" ] && echo "$grubConfig does not exist, not running grubby"
fi
阅读(1093) | 评论(0) | 转发(0) |