笔者在升级Oracle数据库时,当前老的Linux内核无法满足新版本的Oracle需要,需要对Linux内核进行升级。其实,在安装一些新的硬件驱动时,也需要新版本的内核支持。提起对Linux内核的编译,一些用户(尤其是初学者)往往感觉比较高深。其实,从编译原理和具体过程来说,Linux的内核编译并不复杂,只要遵循一定的步骤,是比较容易实现的。对于新的内核,可能存在着一些潜在的问题,从系统稳定性考虑,不要轻易将程序或者应用运行在新的内核中。
在Linux下执行“uname-a”命令,可以查看其内核版本信息。例如将版本从2.x升级到3.x,需要下载Linux-3.x.x的内核源码包,并保证系统已经安装 了 make,gcc,gcc-c++,ncurses-devel等工具。
执 行“rpm -qa |grep ncurses”命令,查看ncurses工具是否安装。如果该包不安装的话,就无法显示Linux内核配置界面。执行“yum install ncurses ncursesdevel”命令,可以安装该工具。将内核源码包解压到指定位置,对内核编译参数进行配置,执行编译操作。之后安装编译好的模块和内核,并修改GRUB启动菜单,添加使用新内核的启动项目,重启系统后,对新编译的内核进行测试,检测其是否可以正常运行。
具体方法是执行“tar xvfj linux-3.x.x.tar.bz2 -C /usr/src”命令,将内核源码包解压到指定的路径中。执行“du -sh /usr/src/”命令,查看其解压后的容量。进入“linux-3.x.x”目 录 中,执 行“make menuconfig”命令,执行编译操作。也可以执行“make xconfig”或者“make gconfig”命令,来执行编译操作。当然,这需要预先安装qt,qt-devel,gtk+,gtk+-devel包。
在Linux内核配置界面中显示大量的配置项目,您可以根据需要进行选择。选择“File systems”-“DOS/FAT/NT Filesystems” 项,在其中选中“NTFS file system support”项,在其下选中“NTFS write support”项,表示支持NFTS文件系统,并可以对其进行写操作。当执行了保存操作后,选择的配置信息会保存在当前目录下的“.config”文件中。如果对繁多的配置参数不熟悉的话,可以直接进行保存,表示采用默认的配置。
执行“vi .config”命令,在配置文件中显示大量的配置项目,对于值为“y”的项目,表示将其编译到内核中。对于值为“m”的项目,表示将其编译为内核模块。对于前面的例子,“CONFIG_NTFS_FS=m”项表示将NTFS整体编译为内核模块,“CONFIG_NTFS_RW=y”表示该配置项是前者的功能之一,将其编译到内核中。
实际上,因为内核模块的配置参数多达五千多项,手工逐个进行判断选择是很困难的事情,因为对于一般用户,不大可能深入了解所有配置参数的具体功能。为了提高编译的效率,可以将当前内核的配置文件复制过来加以利用。执行“cp/boot/config-2.6.x.xxxx.el6.i686 .config”命令,将其复制到当前目录下并更名为“.config”,其中的“x”表示具体的版本信息。这样,就可以以其为蓝本,对配置参数进行相应的调整,这无疑可以大大提高操作效率。
之 后 执 行“make gconfig”命令,打开Linux内核配置界面,在其中根据需要进行调整。打开“File systems”节点,在其中的“XFS filesystem support”栏中选择所有的项目,表示启用XFS文件系统。当保存之后,执行“make bzImage”命令,编译一个大的压缩镜像。当出现“Kernel:arch/x86/boot/bzImage is ready”提示信息,说明操作完成。
打开源码路径下的“arch/x86/boot/”目录,会找到生成的“bzImage”文件。执行“echo $?”命令,显示该命令的退出状态值为0,表示不存在问题。也可以直接执行“make”命令,执行编译操作,编译过程从十几分钟到数小时不等,这取决于主机的运行速度。如果是四核的CPU,可以在Make命令后面添加“-j4”参数,让编译程序同时使用四核编译,来提高编译速度。
在编译过程中,可能会出现各种问题,这就需要根据提示信息调整配置参数。执行“vi .config”命令,在配置文件中查找目标参数,根据情况调整其状态值或者将其删除。当重新调整了该配置文件,想彻底重新进行编译的话,可以执行“make mrproper”命令,清理编译现场,即清除所有的和编译相关的临时文件,恢复到升级包刚解压完毕时的原始状态,便于之后再次编译。
当编译顺利通过后,执行“make modules”命令,来编译内核模块。执行“make modules_install”命令,来安装内核模块。如果在编译过程中,想修改某些配置文件,例如执行“vi Makefile”命令,为新内核版本信息添加后缀等。可以在编译过程中点击“Ctrl+C”键中断编译,执行“make clean”命令,删除在编译过程中生成的临时文件,之后重新编译即可。
注意,这和上述“make mrproper”是不同的,清理的没有后者彻底。后者可以将源代码目录中所有无关文件清除,只保留原始的源代码文件,让之后的再次编译得到最纯净的环境。
执行“ls /lib/modules/”命令,可以看到为新版本内核创建的同版本名称的目录,在里面存储所有编译的库文件。执行“make install”命令,可以自动修改GRUB启动菜单,添加使用新内核的启动项目。将“bzImage”文件复制到“/boot”目录中,并将其更名为以“vmlinuz-3.x”开头的内科模块文件,同时自动使用“mkinitrd”或 者“dracut”命令,在该目录中生成诸如“initramfs-3.x”开头的镜像文件。
执行“cat /etc/grub.conf”命令,可以查看GRUB启动菜单内容,在其中会查看到该新版本的内核启动项目,也会显示之前的老版本内核启动项目。因为在安装了新版本内核后,并不会将老版本内核删除,我们可以根据需要选择所需的内核版本。
执行“init 6”命令重启系统,在Grub启动菜单中显示出了新内核启动项目,选择该菜单项,使用新内核启动系统,使用Root账户登录,执行“uname -a”命令,显示新的内核版本。