Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1274064
  • 博文数量: 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-03 11:57:57

公司的要求是将内核制作成一个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) |
给主人留下些什么吧!~~