雖然很多人都認爲Linux是一個完整的操作系統,但是確切的來講,Linux僅僅指的是內核本身。另一方面,不同的發行版本是在內核基礎上提供不同應用軟件及庫文件的完整功能系統。
在操作系統的全部操作中,內核主要負責以下兩項重要任務:
- 充當系統應用軟件和硬件的接口
- 儘可能有效的管理系統資源
爲此,內核可以通過現有驅動程序或特定模塊來同主機硬件進行通信。例如,主機的某一個應用需要使用無線網絡,那麼這個應用會發送請求給內核,而內核則會使用正確的驅動程序來控制硬件連接網絡。
隨着新的設備和技術週期性地出現,如果我們想充分利用我們的內核,那麼保持內核的更新是很重要的。此外,更新內核將幫助我們利用新的內核函數,並保護我們自己不受以前版本中發現的漏洞的攻擊。
最新版的Linux 4.14內核已經發布,CentOS以及類似的RHEL用戶都準備好更新了麼?好,馬上開始。
1、查看現有系統內核版本
我們安裝的不同Linux發行版中,都對應於一種內核,使用如下命令可以查看現有系統的內核版本
# uname -sr
如果我們訪問linux的內核網站kernel.org就會發現,目前最新的內核版本爲4.14,該版本爲長期支持版本,相較於其它內核,這個版本將有長達6年的支持期,比原來的2年大爲延長,可見開發者對於此版本內核的信心。對於將Linux主機部署爲代理的用戶,更新內核並開啓BBR功能就成爲一項基本操作。
2、CentOS系統更新內核
目前大多數Linux發行版都提供了官方軟件庫包管理工具來更新內核的功能,但對於內核的更新,官方軟件庫的策略就比較保守。Red Hat發行版一般採用與其軟件配合最好,工作最爲穩定的內核,這就造成yum管理工具不能第一時間更新內核。
與Red Hat相對應的是,CentOS允許使用第三方軟件庫的軟件來隨時保持內核版本爲最新,最爲出名的第三方軟件庫當然就是elrepo.org。其實這個軟件庫的所有軟件包對於Red Hat同樣適用,只是官方不推薦使用罷了。使用elrepo軟件庫,要安裝一個軟件庫的key,並且將該軟件庫添加至yum軟件源。CentOS 7系統下使用以下命令:
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
對於CentOS 6則爲:
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
一旦elrepo的軟件源安裝成功了,就可以使用以下命令來查看所有elrepo的可用軟件源:
# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
可以看到,軟件源中已經包含了4.14的ml版本(就是主線版本),CentOS 6和7都可以使用如下命令安裝內核:
# yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel -y
命令執行完後,4.14內核就已經安裝成功了。
3、更改啓動菜單以最新版內核啓動
內核安裝成功並不代表內核更換了,因爲如果不修改啓動菜單,那麼系統將會使用原來的內核啓動。現在就要修改啓動菜單,來達到以新版內核啓動的目的。這裏CentOS 7和CentOS 6的做法有些區別,將分別講解。
首先來講CentOS 7,修改這個啓動項的方法很多,這裏只介紹一種比較直觀的。首先用如下命令查看一下啓動菜單項的內容:
# cat /boot/grub2/grub.cfg | grep menu
命令會顯示目前主機的所有的可用啓動項,如下圖所示:
可以看到,’CentOS Linux (4.14.0-1.el7.elrepo.x86_64) 7 (Core)’是一個menuentry,現在使用如下命令將其設置爲默認啓動項即可:
# grub2-set-default 'CentOS Linux (4.14.0-1.el7.elrepo.x86_64) 7 (Core)'
設置完成後,可以reboot主機,然後用uname -sr命令查看是否以新版內核啓動。
對於CentOS 6,則需要直接編輯啓動菜單文件/boot/grub/menu.lst,以達到更改啓動項的目的:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/vda1 console=ttyS0 console=tty0 printk.time=1 panic=5
# initrd /boot/initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=3 serial console
title CentOS (4.14.0-1.el6.elrepo.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-4.14.0-1.el6.elrepo.x86_64 ro root=/dev/vda1 console=ttyS0 console=tty0 printk.time=1 panic=5 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=C rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_NO_LVM crashkernel=auto rd_NO_DM
initrd /boot/initramfs-4.14.0-1.el6.elrepo.x86_64.img
title CentOS (2.6.32-696.13.2.el6.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-2.6.32-696.13.2.el6.x86_64 ro root=/dev/vda1 console=ttyS0 console=tty0 printk.time=1 panic=5 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=C rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_NO_LVM crashkernel=auto rd_NO_DM
initrd /boot/initramfs-2.6.32-696.13.2.el6.x86_64.img
可以看到,每個內核啓動項對應於一個title,第一個爲0,以後依次加1,然後根據此數值修改“default=”的值。若啓動CentOS (4.14.0-1.el6.elrepo.x86_64)則設置爲0,設置爲1則啓動CentOS (2.6.32-696.13.2.el6.x86_64)。修改完成保存後,重新啓動主機,就會發現內核已經變成自己想要的內核了。
參考鏈接:
http://elrepo.org/tiki/tiki-index.php
https://blog.csdn.net/weixin_33698823/article/details/91399418