一键安装最新内核并开启 BBR 脚本

技术 秋水逸冰 1372034 次围观 665 次吐槽

最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。
根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。
于是我根据目前三大发行版的最新内核,开发了一键安装最新内核并开启 TCP BBR 脚本。

本脚本适用环境

系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等
内存要求:≥128M
日期  :2018 年 12 月 14 日

关于本脚本

1、本脚本已在 Vultr 上的 VPS 全部测试通过。
2、当脚本检测到 VPS 的虚拟方式为 OpenVZ 时,会提示错误,并自动退出安装。
3、脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。
4、由于是使用最新版系统内核,最好请勿在生产环境安装,以免产生不可预测之后果。

使用方法

使用root用户登录,运行以下命令:

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./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 /

更新日志:

2018 年 12 月 14 日:
1、修正:在 CentOS 6 系统下 kernel-ml 及 kernel-ml-devel 无法安装的问题。原因是 elrepo 官方最近取消了 kernel-ml 及 kernel-ml-devel 的 rpm 资源。脚本已改为下载 rpm 来安装的方式。版本 4.18.20 将会是 CentOS 6 下最新的内核,目测以后也不会再有升级了,请尽快迁移到 CentOS 7 系统。

2018 年 06 月 09 日:
1、修正:在 CentOS 系统下将 elrepo-kernel 默认启用,以解决在安装新内核后执行 yum update 再次安装旧内核的问题。

2018 年 05 月 12 日:
1、修正:在 Ubuntu 或 Debian 系统中某些情况下获取不到某个编译失败的安装包导致退出安装的问题。并且现在可以手动选择安装从 4.14 到最新版本的内核。

2018 年 02 月 24 日:
1、新增:手动安装最新版内核 headers 的教程。

2017 年 10 月 28 日:
1、更新:自动判断内核版本。如果内核版本已经大于或等于 4.9 且没有开启 BBR,脚本会直接设置好 BBR;
2、新增:脚本执行时会在当前目录下创建日志(install_bbr.log),方便查看及排错。

2017 年 02 月 22 日:
1、更新:自动获取最新版 4.10 内核。

2017 年 01 月 20 日:
1、新增:自动获取并下载安装最新版内核的功能。

2017 年 01 月 13 日:
1、更新:内核到 4.9.3。

2017 年 01 月 09 日:
1、更新:内核到 4.9.1。

参考链接:

https://github.com/google/bbr/blob/master/Documentation/bbr-quick-start.md
http://elrepo.org/tiki/tiki-index.php
http://kernel.ubuntu.com/~kernel-ppa/mainline/

转载请注明:秋水逸冰 » 一键安装最新内核并开启 BBR 脚本

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (665)

  1. 想问下如何卸载,貌似只有安装方案
    怎么卸载?1年前 (2018-05-23)回复
    • 内核的安装与卸载可以这么理解,你安装了新内核,老内核还在系统里,只是没有被引导启动而已。 CentOS 系列的可以通过 yum remove 【旧版内核完整的名称】 这种方式来卸载旧内核。Debian 系列的本人没有卸载过内核,无法提供有效经验。
      秋水逸冰1年前 (2018-05-23)回复
  2. 求助, Vultr Ubuntu 16.04 x64 升级xshell连不上了,直接连接失败怎么办?
    试试你的火力1年前 (2018-05-20)回复
    • 你好,请在 Vultr 后台里查看系统启动过程,看看是否正确启动了。
      秋水逸冰1年前 (2018-05-23)回复
  3. 最近开始无法使用了?在vu家2.5刀机器上,总提示内核卸载异常,请检查。用的是Debian系统
    三不1年前 (2018-05-19)回复
    • Debian 系统可以自选内核版本来安装的。请具体描述一下现象,你这样说是无法判断原因的。
      秋水逸冰1年前 (2018-05-23)回复
  4. 怎么评论到这里了啊
    zmoe1年前 (2018-05-17)回复
  5. centos6.9 32位 失败 还好旧内核在 yum一个新内核然后删改了一下你的脚本 成功了 非常感谢!
    马花藤1年前 (2018-05-15)回复
  6. 升级centos7.5,用最新脚本安装4.16.8-1以后。 sysctl net.ipv4.tcp_available_congestion_control 返回 net.ipv4.tcp_available_congestion_control = reno cubic bbr 网卡算法的顺序变了,这样子bbr算法不是最优先使用了?
    Me21年前 (2018-05-13)回复
    • 看了下,bbr应该启用了,没错,sysctl net.ipv4.tcp_congestion_control指定了bbr,lsmod | grep bbr也正常。 centos7.5 使用脚本貌似没内核版本的选择,debian有。
      Me21年前 (2018-05-17)回复
    • 这是属于正常的。主要是看 sysctl net.ipv4.tcp_congestion_control 返回值为 bbr 就好了
      秋水逸冰1年前 (2018-05-19)回复
  7. ---------- System Information ---------- OS : Debian GNU/Linux 8 Arch : x86_64 (64 Bit) Kernel : 3.16.0-5-amd64 ---------------------------------------- Auto install latest kernel for TCP BBR URL: https://teddysun.com/489.html ---------------------------------------- Press any key to start...or Press Ctrl+C to cancel Error: Get latest kernel version failed. 大便8系统安装出错,获取最新内核版本失败。vultr的5美刀机器,新加坡,启用ipv6,之前只安装了ss-python
    jhgongfu1年前 (2018-05-11)回复
  8. This installation script is no longer working on Ubuntu 14.04. There are some errors that happen when trying to install the latest kernel. The solution is to install kernel 4.13 manually before running the script. You can find an detailed instructions in this tutorial: https://www.tipsforchina.com/how-to-setup-a-fast-shadowsocks-server-on-vultr-vps-the-easy-way.html The commands to enter before running the script: wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13.5/linux-image-4.13.5-041305-generic_4.13.5-041305.201710050600_amd64.deb dpkg -i linux-image-4.*.deb update-grub reboot
    James1年前 (2018-05-08)回复
  9. 老大,紧急求助!升级完机器挂了,搬瓦工--Ubuntu 16.04 x86_64,Xshell也登入不了,提示Could not connect to '95.163.199.82' (port 26677): Connection failed. Status: Running Due to high CPU usage, server's CPU clock is currently being limited. Once load is reduced to levels described in our Terms of Service, this limitation will be automatically removed within 60-120 minutes. If your application requires more CPU time, we suggest upgrading to a better plan. Please contact helpdesk for instructions on how to upgrade your server. Upgrades are performed seamlessly without data loss and without downtime.
    msm11411年前 (2018-05-07)回复
    • 搬瓦工自带含有 bbr 的 CentOS 系统。 而 Ubuntu 老版本估计已经不能再安装最新版的内核了。
      秋水逸冰1年前 (2018-05-09)回复
    • 搬瓦工ubuntu16使用脚本更新内核之后,ssh直接连接不上。最后使用apt-get更新成支持bbr的内核版本,才能顺利开启bbr。
      zmoe1年前 (2018-05-17)回复
  10. 现在用Ubuntu16.04,装了BBR后,机器就挂掉了
    1年前 (2018-05-05)回复
  11. 临时救急方案:把脚本下载下来之后先不要执行 vim编辑下,把 latest_version= 后面的内容改成你想装的内核版本,比如"4.9.98"
    alomoi1年前 (2018-05-03)回复
  12. bbr一键脚本安装重启之后,机器好像就挂掉了。vultr Debian8x64
    大白1年前 (2018-05-02)回复
    • Debian或Ubuntu的系统,现在的最新版内核貌似不稳定,不推荐安装。 目前Ubuntu18.04已经自带4.15内核,无需升级内核也能开启bbr,建议试试看
      秋水逸冰1年前 (2018-05-03)回复
      • 好的 ,回去试试。现在脚本是直接更新到最新版本吗,能不能更新到指定版本。
        大白1年前 (2018-05-03)回复
  13. 失效了 ,之前可以的
    woo1年前 (2018-04-29)回复
  14. 4.16.4以后的内核有问题?装完就无法重启了
    月下飞尘1年前 (2018-04-29)回复
  15. 怪我手贱,,alibaba ECS实例,刷完后挂掉了......
    kim1年前 (2018-04-28)回复