centos内核升级

centos内核升级

方法一

如果机器不能联网,可以下载现有内核包到本地机器,直接在本地更新
1.从http://ftp.scientificlinux.org/linux/scientific/7.0/x86_64/updates/security/下载需要的颁布rpm
 
2. [root@localhost os2]# scp root@192.168.1.64:/home/worker/kernel-3.10.0-123.1.2.el7.x86_64.rpm
root@192.168.1.64’s password:
kernel-3.10.0-123.1.2.el7.x86_64.rpm                                         100%   29MB  28.9MB/s   00:00
 
3.[root@localhost os2]# yum install kernel-3.10.0-123.1.2.el7.x86_64.rpm
 
Loaded plugins: fastestmirror, langpacks
Examining kernel-3.10.0-123.1.2.el7.x86_64.rpm: kernel-3.10.0-123.1.2.el7.x86_64
Marking kernel-3.10.0-123.1.2.el7.x86_64.rpm to be installed
Resolving Dependencies
–> Running transaction check
—> Package kernel.x86_64 0:3.10.0-123.1.2.el7 will be installed
–> Finished Dependency Resolution
epel/x86_64/metalink                                                                    | 5.2 kB  00:00:00
epel/x86_64                                                                           | 4.3 kB  00:00:01
epel/x86_64/updateinfo                                                                  | 517 kB  00:00:01
epel/x86_64/primary_db                                                                  | 4.0 MB  00:02:36
….
 

方法二

如果机器已经联网,直接利用包管理工具更新,需要注意的是现在3.0以上的内核引入了签名机制,需要导入签名的key,参考步骤如下:
 
1、导入key
rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
当然,如果已经修改了repo的gpgcheck=0也可以不导入key
 
2、安装elrepo的yum源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
==================================================
注意后面的rpm需要根据您本地的系统版本范围选择:
elrepo-release-6-6.el6.elrepo.noarch.rpm这是针对centos6.0+版本的,网上的很多的文章都是错误的-6-5
1、安装 ELRepo for RHEL-6, SL-6 or CentOS-6:
 
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
2、安装 ELRepo for RHEL-7, SL-7 or CentOS-7:
 
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm (external link)
3、安装 ELRepo for RHEL-5, SL-5 or CentOS-5:
 
rpm -Uvh http://www.elrepo.org/elrepo-release-5-5.el5.elrepo.noarch.rpm (external link)
执行安装!
 
详情:
安装ELRepo到CentOS
先要进入后面的网址,http://elrepo.org/tiki/tiki-index.php 选择要安装的ELRepo 
 
# rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
==================================================
3、安装内核
在yum的ELRepo源中,有mainline颁布的,可以这样安装:
 yum –enablerepo=elrepo-kernel install  kernel-ml-devel kernel-ml -y
当然也可以安装long term的:
yum –enablerepo=elrepo-kernel  install  kernel-lt -y
 
 
其它:
http://elrepo.org/linux/kernel/el6/x86_64/RPMS/
 
[root@server-mysql yum.repos.d]# yum –enablerepo=elrepo-kernel list |grep kernel* Unable to read consumer identity * elrepo-kernel: mirrors.tuna.tsinghua.edu.cn abrt-addon-kerneloops.x86_64 2.0.8-6.el6 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3 dracut-kernel.noarch 004-283.el6 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3 kernel.x86_64 2.6.32-279.el6 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3 kernel-devel.x86_64 2.6.32-279.el6 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3 kernel-firmware.noarch 2.6.32-279.el6 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3 kernel-headers.x86_64 2.6.32-279.el6 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3 libreport-plugin-kerneloops.x86_64 2.0.9-5.el6 @anaconda-RedHatEnterpriseLinux-201206132210.x86_64/6.3 abrt-addon-kerneloops.x86_64 2.0.8-40.el6.centos base dracut-kernel.noarch 004-409.el6_8.2 updates kernel.x86_64 2.6.32-642.3.1.el6 updates kernel-abi-whitelists.noarch 2.6.32-642.3.1.el6 updates kernel-debug.x86_64 2.6.32-642.3.1.el6 updates kernel-debug-devel.i686 2.6.32-642.3.1.el6 updates kernel-debug-devel.x86_64 2.6.32-642.3.1.el6 updates kernel-devel.x86_64 2.6.32-642.3.1.el6 updates kernel-doc.noarch 2.6.32-642.3.1.el6 updates kernel-firmware.noarch 2.6.32-642.3.1.el6 updates kernel-headers.x86_64 2.6.32-642.3.1.el6 updates
kernel-lt.x86_64 3.10.102-1.el6.elrepo elrepo-kernel kernel-lt-devel.x86_64 3.10.102-1.el6.elrepo elrepo-kernel kernel-lt-doc.noarch 3.10.102-1.el6.elrepo elrepo-kernel kernel-lt-firmware.noarch 3.10.102-1.el6.elrepo elrepo-kernel kernel-lt-headers.x86_64 3.10.102-1.el6.elrepo elrepo-kernel
kernel-ml.x86_64 4.6.4-1.el6.elrepo elrepo-kernel kernel-ml-devel.x86_64 4.6.4-1.el6.elrepo elrepo-kernel kernel-ml-doc.noarch 4.6.4-1.el6.elrepo elrepo-kernel kernel-ml-firmware.noarch 4.6.4-1.el6.elrepo elrepo-kernel kernel-ml-headers.x86_64 4.6.4-1.el6.elrepo elrepo-kernel libreport-plugin-kerneloops.x86_64 2.0.9-32.el6.centos base perf.x86_64 4.6.4-1.el6.elrepo elrepo-kernel
 
修改grub.conf文件
内核升级完毕后,需要我们修改内核的启动顺序,默认启动的顺序应该为1,升级以后内核是往前面插入为0,如下:
vim /etc/grub.conf
default=0
 

方法三

实际工作当中经常碰到需要修改内核配置,编译驱动,调节相关参数等,这就需要定制内核,为此需要手动生成新的内核。还是以3.10.0-123.el7为例子,一般步骤如下:
 
 
1.先下载内核:
wget http://vault.centos.org//7.0.1406/os/Source/SPackages/kernel-3.10.0-123.el7.src.rpm
接着解压相关代码:
rpm2cpio kernel-3.10.0-123.el7.src.rpm |cpio -div
默认在/usr/src放有一份kernel的头文件,这样在不需要下载整个内核源代码的情况下就可以编译自己编写的内核模块,如果有patch需要打的话,用patch -p1 *.patch命令给内核打上相应的patch。
 
 
2.更新配置文件.config
可以获取系统当前的config文件,也可以用默认的配置文件,比如x86_64_defconfig:
cp /boot/config-3.10.0-123.el7.x86_64  .config  和make oldconfig生产的config一致
然后用make menuconfig来配置。
 
 
3.编译和安装
默认的情况下, 内核和initrd会安装到/boot下面,而驱动模块会安装到/lib/modules/`uname -r`下,如果可以都安装都默认的位置,直接运行下面的命令即可:
make -j8;make modules; make modules_install;make install;
如果需要安装到指定的路径,请设置下面的环境变量:
export INSTALL_PATH=….
export INSTALL_MOD_PATH=
 
 
4.创建initrd.img
initrd.img即为初始化的ramdisk文件,它是一个内存镜像文件。它是把一些最基本的驱动程序和命令工具打包而成,作用就是在系统还没有挂载根分区前,保证系统能够执行基础的初始化和加载一些基本的驱动,比如挂载scsi驱动等。制作initrd传统的方法是用mkinitramfs这一个系统工具,现在mkinitrd会调用dracut完成实际的工作。比如下面的命令进行:
 
 
mkinitrd3.0.4 -o /boot/initrd.img-3.0.4
然后把生成的initrd映像拷贝到/boot下面即可。
 
 
5.更新grub
为了让boot loader能够找到刚生成的内核和initrd映像,需要修改grub。注意如果使用的是grub2,不宜直接修改/boot/grub2/grub.cfg文件,而应该修改grub2的配置文件。grub2默认的配置文件在/etc/grub2.cfg。更新完这个文件之后,需要运行下面的文件:
grub2-mkconfig
至于启动那个linux镜像,由/etc/default/grub的GRUB_DEFAULT=saved来决定;
其意思是上一次使用的value;
修改内核默认启动项
grub2-set-default 0
 
 
这种方法需要注意kernel和模块签名的问题,如果模块签名没有通过内核检查,将不会加载,这可能导致生成系统启动失败。

发表评论