• yum和编译两种方式升级or降级Centos内核


    http://blog.51cto.com/renzhiyuan/1882599

    今天探讨用yum和编译两种方式升级或者降级内核版本:

    升级:比如玩kvm,docker等虚拟化,centos内核则升级尤为重要(虽然2.6.x内核通过加载模块也可以玩,但是效果不如3.x)

    降级:如果发现内核在危险漏洞列,降级内核则显得尤为重要。当然如果有特殊需求,也可以降级内核。


    1、yum方式升级内核版本

    1.1)查看当前系统内核版本

    1
    2
    3
    4
    5
    [root@node4 ~]# cat /etc/redhat-release 
    CentOS release 6.6 (Final)
    [root@node4 ~]# uname -r
    2.6.32-504.el6.x86_64
    [root@node4 ~]#

    1.2)准备yum源,并安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #http://elrepo.org/linux/kernel/el6/x86_64/RPMS/(网址)
    #导入key如果已经修改了repo的gpgcheck=0也可以不导入key
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    #安装elrepo的yum源
    rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
    #安装kernel-lt(lt=long-term)
    yum --enablerepo=elrepo-kernelinstallkernel-lt -y
    你也可以装kernel-ml(ml=mainline)
    yum --enablerepo=elrepo-kernelinstallkernel-ml -y 
    #ml(mainline)为最新版本的内核,lt为长期支持的内核。
    [root@node4 ~]# yum --enablerepo=elrepo-kernel  install kernel-lt -y

    wKiom1hQqBuyfaAIAACvsjxtN-I731.png-wh_50

    查看boot分区:

    wKiom1hQqJ7jlX9rAADgdJ1dIZk455.png-wh_50

    附加:查看指定的内核版本:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    [root@node4 ~]# yum --enablerepo=elrepo-kernel  list  |grep kernel*
     * elrepo-kernel: hkg.mirror.rackspace.com
    dracut-kernel.noarch                    004-356.el6               @anaconda-CentOS-201410241409.x86_64/6.6
    kernel.x86_64                           2.6.32-504.el6            @anaconda-CentOS-201410241409.x86_64/6.6
    kernel-firmware.noarch                  2.6.32-504.el6            @anaconda-CentOS-201410241409.x86_64/6.6
    kernel-headers.x86_64                   2.6.32-573.18.1.el6       @updates      
    kernel-lt.x86_64                        3.10.104-1.el6.elrepo     @elrepo-kernel
    abrt-addon-kerneloops.x86_64            2.0.8-40.el6.centos       base          
    dracut-kernel.noarch                    004-409.el6_8.2           updates       
    erlang-kernel.x86_64                    R14B-04.3.el6             epel          
    kernel.x86_64                           2.6.32-642.11.1.el6       updates       
    kernel-abi-whitelists.noarch            2.6.32-642.11.1.el6       updates       
    kernel-debug.x86_64                     2.6.32-642.11.1.el6       updates       
    kernel-debug-devel.i686                 2.6.32-642.11.1.el6       updates       
    kernel-debug-devel.x86_64               2.6.32-642.11.1.el6       updates       
    kernel-devel.x86_64                     2.6.32-642.11.1.el6       updates       
    kernel-doc.noarch                       2.6.32-642.11.1.el6       updates       
    kernel-firmware.noarch                  2.6.32-642.11.1.el6       updates       
    kernel-headers.x86_64                   2.6.32-642.11.1.el6       updates       
    kernel-lt-devel.x86_64                  3.10.104-1.el6.elrepo     elrepo-kernel 
    kernel-lt-doc.noarch                    3.10.104-1.el6.elrepo     elrepo-kernel 
    kernel-lt-firmware.noarch               3.10.104-1.el6.elrepo     elrepo-kernel 
    kernel-lt-headers.x86_64                3.10.104-1.el6.elrepo     elrepo-kernel 
    kernel-ml.x86_64                        4.9.0-1.el6.elrepo        elrepo-kernel 
    kernel-ml-devel.x86_64                  4.9.0-1.el6.elrepo        elrepo-kernel 
    kernel-ml-doc.noarch                    4.9.0-1.el6.elrepo        elrepo-kernel 
    kernel-ml-firmware.noarch               4.9.0-1.el6.elrepo        elrepo-kernel 
    kernel-ml-headers.x86_64                4.9.0-1.el6.elrepo        elrepo-kernel 
    libreport-plugin-kerneloops.x86_64      2.0.9-32.el6.centos       base          
    perf.x86_64                             4.9.0-1.el6.elrepo        elrepo-kernel 
    php-symfony-http-kernel.noarch          2.3.42-1.el6              epel          
    [root@node4 ~]#

    1.3)编辑grub.conf文件,修改Grub引导顺序

    1
    [root@node4 ~]# cp /etc/grub.conf /etc/grub.conf.bak

    注意:养成实时备份的习惯,技术修改有问题,也可以进去单用户或者救援模式修复。

    vim/etc/grub.conf

    设置default值(从0开始),一般新安装的内核在第一个位置,所以设置default=0。

    1
    2
    #default=1
    default=0

    1.4)重启使其生效:

    1
    [root@node4 ~]# shutdown -r now

    1.5)查看检测:

    wKioL1hQqXaDfbgAAAAHrHZ2H9Y123.png-wh_50

    1
    2
    3
    4
    5
    [root@node4 ~]# cat /etc/redhat-release 
    CentOS release 6.6 (Final)
    [root@node4 ~]# uname -r
    3.10.104-1.el6.elrepo.x86_64
    [root@node4 ~]#

    评价:yum方式比较简单并且快,但是如果想要自己定义其内核路径,则显得力不从心。

    2、编译升级内核(降级不测试)

    eg:工作碰到需要修改内核配置,编译驱动,调节相关参数等,则需要定制内核。

    官网:https://www.kernel.org/pub/linux/kernel/

    2.1)下载指定版本并安装配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [root@node4 ~]# wget --no-check-certificate   https://www.kernel.org/pub/linux/kernel/linux-3.2.4.tar.gz
    [root@node4 ~]# du -sh linux-3.2.4.tar.gz 
    95M linux-3.2.4.tar.gz
    [root@node4 ~]#
    #yum -y install gcc ncurses-devel(依赖包)
    [root@node4 ~]# tar xf linux-3.2.4.tar.gz 
    [root@node4 ~]# ll
    总用量 96336
    drwxrwxr-x 23 root root     4096 2月   4 2012 linux-3.2.4
    -rw-r--r--  1 root root 98642809 2月   4 2012 linux-3.2.4.tar.gz
    [root@node4 ~]#
    [root@node4 ~]# cd linux-3.2.4
    #[root@node4 linux-3.2.4]# make --help
    # make mrproper  #清除环境变量,即清除配置文件
    # make menuconfig  #在菜单模式下选择需要编译的内核模块
    1
    make menuconfig(出现图形)

    wKioL1hQsHyzozS2AADiS9WEJFY715.png-wh_50

    大致意思:

    箭头键导航菜单。<输入>选择子菜单- - >。高亮显示的字母是热键。按< Y >包括< N >│
    │排除,< M >模块化特性。按退出< Esc > < Esc >,< ?>,< / >搜索。传说:[*]内置[]排除│
    │< M > < >模块能力

    wKioL1hQsV7j_QqFAABKEIchAn8717.png-wh_50

    1
    2
    3
    4
    5
    6
    7
    8
    make clean #确保所有东西均保持最新状态.
    make bzImage #生成内核文件
    make modules #编译模块
    make modules_install #安装模块
    make install #安装
    #make all
    #make modules_install #安装模块
    #make install

    2.2)编辑grub.conf文件,修改Grub引导顺序

    vim/etc/grub.conf

    设置default值(从0开始),一般新安装的内核在第一个位置,所以设置default=0。

    1
    2
    #default=1
    default=0

    2.3)重启使其生效:

    1
    [root@node4 ~]# shutdown -r now

    2.4)查看检测:

    1
    2
    3
    4
    5
    [root@node4 ~]# cat /etc/redhat-release 
    CentOS release 6.6 (Final)
    [root@node4 ~]# uname -r
    3.2.4
    [root@node4 ~]#

    评价:慢!而且需要一定经验,最好配置前查看官方手册。

    3、yum方式降级内核版本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    dracut-kernel.noarch                    004-356.el6               @anaconda-CentOS-201410241409.x86_64/6.6
    kernel.x86_64                           2.6.32-504.el6            @anaconda-CentOS-201410241409.x86_64/6.6
    kernel-firmware.noarch                  2.6.32-504.el6            @anaconda-CentOS-201410241409.x86_64/6.6
    kernel-headers.x86_64                   2.6.32-573.18.1.el6       @updates      
    kernel-lt.x86_64                        3.10.104-1.el6.elrepo     @elrepo-kernel
    abrt-addon-kerneloops.x86_64            2.0.8-40.el6.centos       base          
    dracut-kernel.noarch                    004-409.el6_8.2           updates       
    erlang-kernel.x86_64                    R14B-04.3.el6             epel          
    kernel.x86_64                           2.6.32-642.11.1.el6       updates       
    kernel-abi-whitelists.noarch            2.6.32-642.11.1.el6       updates       
    kernel-debug.x86_64                     2.6.32-642.11.1.el6       updates       
    kernel-debug-devel.i686                 2.6.32-642.11.1.el6       updates       
    kernel-debug-devel.x86_64               2.6.32-642.11.1.el6       updates       
    kernel-devel.x86_64                     2.6.32-642.11.1.el6       updates       
    kernel-doc.noarch                       2.6.32-642.11.1.el6       updates       
    kernel-firmware.noarch                  2.6.32-642.11.1.el6       updates       
    kernel-headers.x86_64                   2.6.32-642.11.1.el6       updates       
    kernel-lt-devel.x86_64                  3.10.104-1.el6.elrepo     elrepo-kernel 
    kernel-lt-doc.noarch                    3.10.104-1.el6.elrepo     elrepo-kernel 
    kernel-lt-firmware.noarch               3.10.104-1.el6.elrepo     elrepo-kernel 
    kernel-lt-headers.x86_64                3.10.104-1.el6.elrepo     elrepo-kernel 
    kernel-ml.x86_64                        4.9.0-1.el6.elrepo        elrepo-kernel 
    kernel-ml-devel.x86_64                  4.9.0-1.el6.elrepo        elrepo-kernel 
    kernel-ml-doc.noarch                    4.9.0-1.el6.elrepo        elrepo-kernel 
    kernel-ml-firmware.noarch               4.9.0-1.el6.elrepo        elrepo-kernel 
    kernel-ml-headers.x86_64                4.9.0-1.el6.elrepo        elrepo-kernel 
    libreport-plugin-kerneloops.x86_64      2.0.9-32.el6.centos       base          
    perf.x86_64                             4.9.0-1.el6.elrepo        elrepo-kernel 
    php-symfony-http-kernel.noarch          2.3.42-1.el6              epel          
    [root@node4 ~]#

    eg:降级到指定版本(需要yum源支持指定版本的内核)

    #yum install kernel-2.6.32-642.11.1.el6

    3.1)查看

    wKiom1hQ3ujBCFAAAAEgZEaeS6s178.png-wh_50

    3.2)截止目前有四个不同版本内核:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    [root@node4 ~]# ll /boot/
    总用量 94418
    -rw-r--r--. 1 root root   106308 10月 15 2014 config-2.6.32-504.el6.x86_64
    -rw-r--r--  1 root root   108108 11月 19 03:30 config-2.6.32-642.11.1.el6.x86_64
    -rw-r--r--  1 root root   142778 10月 21 22:56 config-3.10.104-1.el6.elrepo.x86_64
    drwxr-xr-x. 3 root root     1024 2月  23 2016 efi
    drwxr-xr-x. 2 root root     1024 12月 14 13:55 grub
    -rw-------. 1 root root 16139633 2月  23 2016 initramfs-2.6.32-504.el6.x86_64.img
    -rw-------  1 root root 21406778 12月 14 13:55 initramfs-2.6.32-642.11.1.el6.x86_64.img
    -rw-------  1 root root 17744666 3月  25 2016 initramfs-3.10.104-1.el6.elrepo.x86_64.img
    -rw-------  1 root root  6086742 12月 14 13:05 initramfs-3.2.4.img
    drwx------. 2 root root    12288 2月  23 2016 lost+found
    -rw-r--r--. 1 root root   200191 10月 15 2014 symvers-2.6.32-504.el6.x86_64.gz
    -rw-r--r--  1 root root   215530 11月 19 03:30 symvers-2.6.32-642.11.1.el6.x86_64.gz
    -rw-r--r--  1 root root   258396 10月 21 22:57 symvers-3.10.104-1.el6.elrepo.x86_64.gz
    lrwxrwxrwx  1 root root       22 12月 14 13:04 System.map -> /boot/System.map-3.2.4
    -rw-r--r--. 1 root root  2544748 10月 15 2014 System.map-2.6.32-504.el6.x86_64
    -rw-r--r--  1 root root  2618532 11月 19 03:30 System.map-2.6.32-642.11.1.el6.x86_64
    -rw-------  1 root root  2928610 10月 21 22:56 System.map-3.10.104-1.el6.elrepo.x86_64
    -rw-r--r--  1 root root  2407430 12月 14 13:04 System.map-3.2.4
    -rw-r--r--  1 root root  2407430 12月 14 13:02 System.map-3.2.4.old
    lrwxrwxrwx  1 root root       19 12月 14 13:04 vmlinuz -> /boot/vmlinuz-3.2.4
    -rwxr-xr-x. 1 root root  4152336 10月 15 2014 vmlinuz-2.6.32-504.el6.x86_64
    -rwxr-xr-x  1 root root  4269936 11月 19 03:30 vmlinuz-2.6.32-642.11.1.el6.x86_64
    -rwxr-xr-x  1 root root  4865424 10月 21 22:56 vmlinuz-3.10.104-1.el6.elrepo.x86_64
    -rw-r--r--  1 root root  4023040 12月 14 13:04 vmlinuz-3.2.4
    -rw-r--r--  1 root root  4023040 12月 14 13:02 vmlinuz-3.2.4.old
    [root@node4 ~]#
     
    default=0
    #default行,是指grub启动时默认菜单项。0表示第一项,如果是多系统可以修改此选项改变默认光标停留位置。
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.32-642.11.1.el6.x86_64)
            root (hd0,0)
            kernel /vmlinuz-2.6.32-642.11.1.el6.x86_64 ro root=/dev/mapper/vg_node4-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_node4/lv_swap crashke
    rnel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=vg_node4/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
            initrd /initramfs-2.6.32-642.11.1.el6.x86_64.img
    title CentOS (3.2.4)
            root (hd0,0)
            kernel /vmlinuz-3.2.4 ro root=/dev/mapper/vg_node4-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_node4/lv_swap crashkernel=auto LANG=zh_CN.
    UTF-8 rd_LVM_LV=vg_node4/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
            initrd /initramfs-3.2.4.img
    title CentOS (3.10.104-1.el6.elrepo.x86_64)
            root (hd0,0)
            kernel /vmlinuz-3.10.104-1.el6.elrepo.x86_64 ro root=/dev/mapper/vg_node4-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_node4/lv_swap crash
    kernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=vg_node4/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
            initrd /initramfs-3.10.104-1.el6.elrepo.x86_64.img
    title CentOS 6 (2.6.32-504.el6.x86_64)
            root (hd0,0)

    3.3)重启使其生效:

    1
    [root@node4 ~]# shutdown -r now

    wKioL1hQ35mwjyKKAAAHCWnAw9Q453.png-wh_50

    1
    2
    3
    4
    5
    [root@node4 ~]# cat /etc/redhat-release 
    CentOS release 6.6 (Final)
    [root@node4 ~]# uname -r
    2.6.32-642.11.1.el6.x86_64
    [root@node4 ~]#

    4、总结:

    1、内核的升级和降级要有完整的流程,不可直接操作,注意升级或者降级中文件的备份

    2、yum和编译升级和降级要根据环境具体而定,yum方便,编译定制麻烦。

    3、centos6和centos7是有区别的,比如grub的引导文件,centos7(/boot/grub2)

  • 相关阅读:
    在MFC中使用一个单独的类实现数据在各个类之间的传递
    在MFC中实现对象之间数据的传递。
    extern,头文件和ifndif宏
    在MFC下如何定义全局变量和全局函数
    语言当中一些经常看到 却又迷糊的修饰符
    C++基础之头文件和源文件的关系
    如何使用别人的代码 (特指在MFC里面 或者推广为C++里面)
    DataGird 相关
    在MFC里面使用ADO访问微软的ACCESS数据库 实现增删改查
    Invert Binary Tree
  • 原文地址:https://www.cnblogs.com/linkenpark/p/9178200.html
Copyright © 2020-2023  润新知