升级的目的是想在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
[[email protected] ~]# tar -xf linux-3.18.19.tar.xz
[[email protected] ~]# cd linux-3.18.19
我们在系统原有的内核配置文件的基础上建立新的编译选项,所以复制一份到当前目录下,命名为.config
[[email protected] 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‘)
##########################################################################################
开始编译
[[email protected] linux-3.10.58]# make -j4 bzImage //生成内核文件
[[email protected] linux-3.10.58]# make -j4 modules //编译模块
[[email protected] 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
下面是找到的一篇yum方式升级的可以参考下:
http://ljf.me/archives/use-yum-to-quickly-upgrade-centos-6-5-kernel-3-10-28/