升级的目的是想在CentOS6.4上运行docker,官方建议内核版本在3.8.0及以上,于是就自己从Linux内核官方网站上下载源码,自己编译

安装软件

编译安装新内核,依赖于开发环境和开发库

yum grouplist   //查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库;

yum groupinstall "Development Tools"   //一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具

yum install ncurses-devel    //你必须这样才能让 make *config 这个指令正确地执行

yum install qt-devel    //如果你没有 X 环境,这一条可以不用

yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel    //创建 CentOS-6 内核时需要它们

编译内核

获取并解压内核源码,配置编译项

去 http://www.kernel.org 首页,可以看到有stable, longterm等版本,longterm是比stable更稳定的版本,会长时间更新,因此我选择 3.18.19

[root@root ~]# tar -xf linux-3.18.19.tar.xz

[root@root ~]# cd linux-3.18.19

我们在系统原有的内核配置文件的基础上建立新的编译选项,所以复制一份到当前目录下,命名为.config

[root@root llinux-3.18.19]# cp /boot/config-2.6.32-358.el6.x86_64 .config  ( 注意要在解压缩的包的目录里面)

sh -c 'yes "" | make oldconfig'


##########################################################################################

######make oldconfig会读取当前目录下的.config文件,在.config文件里没有找到的选项则提示用户填写。有的文档里介绍使用make memuconfig,它便是根据需要手动选择菜单定制模块,在这里我们不需要。make oldconfig会在生成新的.config之前备份为.config.old,并生成新的.config文件。

######(上面这个命令就自动按之前你装的os的模块来自动编译了sh -c 'yes "" | make oldconfig')

##########################################################################################


开始编译

[root@root linux-3.10.58]# make -j4 bzImage  //生成内核文件

[root@root linux-3.10.58]# make -j4 modules  //编译模块

[root@root linux-3.10.58]# make -j4 modules_install  //编译安装模块

-j后面的数字是线程数,用于加快编译速度,一般的经验是,逻辑CPU,就填写那个数字,例如有8核,则为-j8。

安装

make install


实际运行到这一步时,出现

modinfo: could not find module vmware_balloon,但是不影响内核安装,是由于vsphere需要的模块没有编译,要避免这个问题,需要在make之前时修改.config文件,加入

HYPERVISOR_GUEST=y

CONFIG_VMWARE_BALLOON=m 


修改Grub引导顺序

vim /etc/grub.conf

数一下刚刚新安装的内核在哪个位置,从0开始,然后设置default为那个数字,一般新安装的内核在第一个位置,所以设置default=0


reboot

CentOS 6.4 内核升级(2.6.32 -> 3.18.19)_第1张图片


下面是找到的一篇yum方式升级的可以参考下:

http://ljf.me/archives/use-yum-to-quickly-upgrade-centos-6-5-kernel-3-10-28/