intro
最近在做ovs的實驗,爲了保持實驗環境的一致性,我這邊用了openvswitch-2.3.1這個版本,由於ovs與對應的內核版本有要求:
Open vSwitch | Linux kernel |
---|---|
1.4.x | 2.6.18 to 3.2 |
1.5.x | 2.6.18 to 3.2 |
1.6.x | 2.6.18 to 3.2 |
1.7.x | 2.6.18 to 3.3 |
1.8.x | 2.6.18 to 3.4 |
1.9.x | 2.6.18 to 3.8 |
1.10.x | 2.6.18 to 3.8 |
1.11.x | 2.6.18 to 3.8 |
2.0.x | 2.6.32 to 3.10 |
2.1.x | 2.6.32 to 3.11 |
2.3.x | 2.6.32 to 3.14 |
2.4.x | 2.6.32 to 4.0 |
2.5.x | 2.6.32 to 4.3 |
2.6.x | 3.10 to 4.7 |
這裏爲了安裝ovs2.3.1,我需要讓內核版本滿足2.6.32到3.14的條件,當前ubuntu系統的內核版本是3.19.0-25-generic
,目標內核版本是3.13.0-24-generic
安裝3.13.0-24-generic內核
1.顯示所有可以獲取的內核版本
1 |
apt-cache search linux |
2.安裝指定版本version內核
version一般爲x.x.x-x
的形式。
1 2 3 |
sudo apt-get install -y linux-headers-version-generic \ linux-image-version-generic \ linux-image-extra-version-generic |
比如這裏我要安裝version爲3.13.0-24的內核,這裏就執行
1 2 3 |
sudo apt-get install -y linux-headers-3.13.0-24-generic \ linux-image-3.13.0-24-generic \ linux-image-extra-3.13.0-24-generic |
[可選]修改GRUB,保證ubunu啓動的時候使用的使新內核
修改默認grub啓動菜單
這裏是一個可選的配置,如果不配置,每次在啓動系統的時候,都需按下ESC
鍵,進入GRUB
菜單,選中新內核。這一重複的操作,我們可以在GRUB中進行配置。需要修改的文件是/etc/default/grub
1 2 3 4 5 6 7 8 |
// /etc/default/grub GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" |
這裏講下GRUB_DEFAULT的配置,GRUB_DEFAULT表示了開機的時候的默認選項(包括二級菜單選項)。這邊先盜個圖說下內核順序:
下面是一張GRUB的啓動菜單
在配合一段grub的配置說明,如下:
意思就是一級菜單比如Ubuntu,with Linux 3.2.0-24-generic-pae
、Ubunut,with Linux 3.2.0-24-generic-pae(recovery mode)
、Previous Linux versions
、Memory test(memtest86+)
等等,一級菜單按照從0開始編號,如Ubuntu,with Linux 3.2.0-24-generic-pae
對應0,Ubunut,with Linux 3.2.0-24-generic-pae(recovery mode)
對應1,Previous Linux versions
對應2,以此類推。對於二級菜單也是一樣的道理,每個菜單項下的子菜單都是從0開始編號。
那麼這裏如果我要配置Previous Linux versions
下的Ubuntu, with Linux 3.2.0-18-generic-pae
,我們的內核順序就應該是2>0
,這裏注意在填寫GRUB_DEFAULT的時候一定要加上有引號,如:
1 |
GRUB_DEFAULT="2>0" |
除了填寫數字形式的內核順序,還可以有其他的寫法
1 2 3 |
GRUB_DEFAULT="Previous Linux versions>Ubuntu, with Linux 3.2.0-18-generic-pae" GRUB_DEFAULT="Previous Linux versions>0" GRUB_DEFAULT="2>Ubuntu, with Linux 3.2.0-18-generic-pae" |
ps:我這裏並沒有重新看一遍grub的啓動內容,而是查看了/boot/grub/grub.cfg
,如下:
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-5723676a-712c-4518-a288-feea52c251b0' { recordfail load_video gfxmode $linux_gfx_mode insmod gzio insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 5723676a-712c-4518-a288-feea52c251b0 else search --no-floppy --fs-uuid --set=root 5723676a-712c-4518-a288-feea52c251b0 fi linux /boot/vmlinuz-3.19.0-25-generic root=UUID=5723676a-712c-4518-a288-feea52c251b0 ro quiet splash $vt_handoff initrd /boot/initrd.img-3.19.0-25-generic } submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-5723676a-712c-4518-a288-feea52c251b0' { menuentry 'Ubuntu, with Linux 3.19.0-25-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-25-generic-advanced-5723676a-712c-4518-a288-feea52c251b0' { recordfail load_video gfxmode $linux_gfx_mode insmod gzio insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 5723676a-712c-4518-a288-feea52c251b0 else search --no-floppy --fs-uuid --set=root 5723676a-712c-4518-a288-feea52c251b0 fi echo 'Loading Linux 3.19.0-25-generic ...' linux /boot/vmlinuz-3.19.0-25-generic root=UUID=5723676a-712c-4518-a288-feea52c251b0 ro quiet splash $vt_handoff echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-3.19.0-25-generic } menuentry 'Ubuntu, with Linux 3.19.0-25-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-25-generic-recovery-5723676a-712c-4518-a288-feea52c251b0' { recordfail load_video insmod gzio insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 5723676a-712c-4518-a288-feea52c251b0 else search --no-floppy --fs-uuid --set=root 5723676a-712c-4518-a288-feea52c251b0 fi echo 'Loading Linux 3.19.0-25-generic ...' linux /boot/vmlinuz-3.19.0-25-generic root=UUID=5723676a-712c-4518-a288-feea52c251b0 ro recovery nomodeset echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-3.19.0-25-generic } menuentry 'Ubuntu, with Linux 3.13.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-24-generic-advanced-5723676a-712c-4518-a288-feea52c251b0' { recordfail load_video gfxmode $linux_gfx_mode insmod gzio insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 5723676a-712c-4518-a288-feea52c251b0 else search --no-floppy --fs-uuid --set=root 5723676a-712c-4518-a288-feea52c251b0 fi echo 'Loading Linux 3.13.0-24-generic ...' linux /boot/vmlinuz-3.13.0-24-generic root=UUID=5723676a-712c-4518-a288-feea52c251b0 ro quiet splash $vt_handoff echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-3.13.0-24-generic } menuentry 'Ubuntu, with Linux 3.13.0-24-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-24-generic-recovery-5723676a-712c-4518-a288-feea52c251b0' { recordfail load_video insmod gzio insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 5723676a-712c-4518-a288-feea52c251b0 else search --no-floppy --fs-uuid --set=root 5723676a-712c-4518-a288-feea52c251b0 fi echo 'Loading Linux 3.13.0-24-generic ...' linux /boot/vmlinuz-3.13.0-24-generic root=UUID=5723676a-712c-4518-a288-feea52c251b0 ro recovery nomodeset echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-3.13.0-24-generic } } |
根據我這段從grub.cfg中摘取出來的菜單項,那麼我的對應的菜單項爲
1 2 3 4 5 6 |
|-----Ubuntu |-----Advanced options for Ubuntu |-----Ubuntu, with Linux 3.19.0-25-generic |-----Ubuntu, with Linux 3.19.0-25-generic (recovery mode) |-----Ubuntu, with Linux 3.13.0-24-generic |-----Ubuntu, with Linux 3.13.0-24-generic (recovery mode) |
爲了使用3.13.0-24
版本的內核,修改GRUB_DEFAULT爲"1>2"
如下:
使上面的配置生效
修改完/etc/default/grub
之後,要使配置生效,還需要執行sudo update-grub
,使得配置項可以更新到/boot/grub/grub.cfg
文件中
驗證
reboot,在終端中執行uname -r
看看內核有沒有改過來。