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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM