一鍵安裝最新內核並開啓 BBR 腳本

本文轉載自:https://teddysun.com/489.html
一鍵腳本如下

wget -N --no-check-certificate "https://raw.githubusercontent.com/WhosYourFathe/UsefulScripts/master/bbr/bbr.sh";chmod +x bbr.sh;sudo bash ./bbr.sh

最近,Google 開源了其 TCP BBR 擁塞控制算法,並提交到了 Linux 內核,從 4.9 開始,Linux 內核已經用上了該算法。根據以往的傳統,Google 總是先在自家的生產環境上線運用後,纔會將代碼開源,此次也不例外。
根據實地測試,在部署了最新版內核並開啓了 TCP BBR 的機器上,網速甚至可以提升好幾個數量級。
於是我根據目前三大發行版的最新內核,開發了一鍵安裝最新內核並開啓 TCP BBR 腳本。

本腳本適用環境
系統支持:CentOS 6+,Debian 7+,Ubuntu 12+
虛擬技術:OpenVZ 以外的,比如 KVM、Xen、VMware 等
內存要求:≥128M

關於本腳本
1、本腳本已在 Vultr 上的 VPS 全部測試通過。
2、當腳本檢測到 VPS 的虛擬方式爲 OpenVZ 時,會提示錯誤,並自動退出安裝。
3、腳本運行完重啓發現開不了機的,打開 VPS 後臺控制面板的 VNC, 開機卡在 grub 引導, 手動選擇內核即可。
4、由於是使用最新版系統內核,最好請勿在生產環境安裝,以免產生不可預測之後果。

使用方法
使用root用戶登錄,運行以下命令:

wget -N --no-check-certificate "https://raw.githubusercontent.com/WhosYourFathe/UsefulScripts/master/bbr/bbr.sh";chmod +x bbr.sh;sudo bash ./bbr.sh

安裝完成後,腳本會提示需要重啓 VPS,輸入 y 並回車後重啓。
重啓完成後,進入 VPS,驗證一下是否成功安裝最新內核並開啓 TCP BBR,輸入以下命令:

uname -r
查看內核版本,顯示爲最新版就表示 OK 了

sysctl net.ipv4.tcp_available_congestion_control

返回值一般爲:

net.ipv4.tcp_available_congestion_control = bbr cubic reno

或者爲:

net.ipv4.tcp_available_congestion_control = reno cubic bbr
sysctl net.ipv4.tcp_congestion_control

返回值一般爲:

net.ipv4.tcp_congestion_control = bbr
sysctl net.core.default_qdisc

返回值一般爲:

net.core.default_qdisc = fq
lsmod | grep bbr

返回值有 tcp_bbr 模塊即說明 bbr 已啓動。注意:並不是所有的 VPS 都會有此返回值,若沒有也屬正常。

CentOS 下最新版內核 headers 安裝方法
本來打算在腳本里直接安裝 kernel-ml-headers,但會出現和原版內核 headers 衝突的問題。因此在這裏添加一個腳本執行完後,手動安裝最新版內核 headers 之教程。
執行以下命令

yum --enablerepo=elrepo-kernel -y install kernel-ml-headers

根據 CentOS 版本的不同,此時一般會出現類似於以下的錯誤提示:

Error: kernel-ml-headers conflicts with kernel-headers-2.6.32-696.20.1.el6.x86_64
Error: kernel-ml-headers conflicts with kernel-headers-3.10.0-693.17.1.el7.x86_64

因此需要先卸載原版內核 headers ,然後再安裝最新版內核 headers。執行命令:

yum remove kernel-headers

確認無誤後,輸入 y,回車開始卸載。注意,有時候這麼操作還會卸載一些對內核 headers 依賴的安裝包,比如 gcc、gcc-c++ 之類的。不過不要緊,我們可以在安裝完最新版內核 headers 後再重新安裝回來即可。
卸載完成後,再次執行上面給出的安裝命令。

yum --enablerepo=elrepo-kernel -y install kernel-ml-headers

成功安裝後,再把那些之前對內核 headers 依賴的安裝包,比如 gcc、gcc-c++ 之類的再安裝一次即可。

爲什麼要安裝最新版內核 headers 呢?
這是因爲 shadowsocks-libev 版有個 tcp fast open 功能,如果不安裝的話,這個功能是無法開啓的。

內核升級方法
如果是 CentOS 系統,執行如下命令即可升級內核:

yum -y install kernel-ml kernel-ml-devel

如果你還手動安裝了新版內核 headers ,那麼還需要以下命令來升級 headers :

yum -y install kernel-ml-headers

CentOS 6 的話,執行命令:

sed -i 's/^default=.*/default=0/g' /boot/grub/grub.conf

CentOS 7 的話,執行命令:

grub2-set-default 0

如果是 Debian/Ubuntu 系統,則需要手動下載最新版內核來安裝升級。
去這裏下載最新版的內核 deb 安裝包。
如果系統是 64 位,則下載 amd64 的 linux-image 中含有 generic 這個 deb 包;
如果系統是 32 位,則下載 i386 的 linux-image 中含有 generic 這個 deb 包;
安裝的命令如下(以最新版的 64 位 4.12.4 舉例而已,請替換爲下載好的 deb 包):

dpkg -i linux-image-4.12.4-041204-generic_4.12.4-041204.201707271932_amd64.deb

安裝完成後,再執行命令:

/usr/sbin/update-grub

最後,重啓 VPS 即可。

特別說明
如果你使用的是 Google Cloud Platform (GCP)更換內核,有時會遇到重啓後,整個磁盤變爲只讀的情況。只需執行以下命令即可恢復:

mount -o remount rw /
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章