编译4.11内核,使用BBR

昨天没忍住剁了2b小姐姐,我觉得我又要失踪三个月了……

6-30:更新了内核下载链接。

概要

虽然Linode早已加入了Linux 4.9,即可以使用BBR的最低内核版本,但是诸如ConoHa等并不能直接升级到4.11内核。这篇里面我会通过编译www.kernel.org提供的最新内核(4.11.8)来实现。(当然直接下载别人编译好的包也可以,但是安全性……)其实编译内核还是蛮好玩的来着,试一试也不会有很大损失嘛。

文章主要参考www.debian.org给出的编译方式,对步骤进行一定的合并与简化,并对 make menuconfig  中的选择树进行了一些取舍加快编译进程。三台服务器独立独立编译安装均测试有效。

当然啦,秋水dalao的一键脚本也会有的。要是觉得编译过程过于烦躁或者编译时间长的不像样(在阿里云上编译用了创纪录的一个多小时,不过我同时能五台设备编译五个不同版本所以效率还不算非常低),可以用脚本下载官方的内核进行安装(只到4.10,不过已经够用了)。

1. 为什么自己编译内核

通常来说云服务提供商会针对自己的服务器特性编译内核,但是取决于他们的勤快程度,通常会慢最新内核发行版2-3个小版本(现在还在跑3.16的还有一大堆)。通常内核更新会提供更多的性能或安全性或是新特性支持,比如说BBR拥塞控制协议就是在4.9加入的。

划重点:自己。

因为Linux内核使完全开源的,每个人都可以自由的更改,因此就不能保证网上放出的编译好的内核版本没有被魔改过(举例:番茄花园Android)。自己下载未经修改的源码进行编译是最安全的(也是时间成本最高的……),并且也可以最大程度的删掉不需要的东西,提高系统运行效率和启动速度。

2. 编译内核

2.1 准备编译环境

编译内核需要用到成堆软件包,根据服务器已有的编译环境,需要下载~850M软件包,安装完成后占用~1300M空间。

如果机器在国内的话,建议先看2.2

2.1.1安装编译需要的软件包

我们需要的软件包有fakeroot kernel-package libncurses5-dev

sudo apt-get update; sudo apt-get install fakeroot kernel-package libncurses5-dev

下载安装可能需要一点时间,根据VPS性能而定。

2.2 下载内核源代码

之前说过了内核源代码可以在kernel.org下载到,目前最新的版本是4.11. 登上服务器后执行

wget -c https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.11.8.tar.xz

下载 linux-4.11.8.tar.xz

国内的机器的话,速度一般在30-40k/s,这时候还不如再开一个terminal去安装上面的软件包……可能安装程序反而更快

解压,通过tar xvf linux-4.11.8.tar解压得到文件夹linux-4.11.8。

通过cd linux-4.11.8进入解压目录,执行make menuconfig,进入内核编译的GUI菜单。

2.3 编译选项

用上下方向键移动目录,左右方向选择下方的操作【选择、退出(按两次esc)、帮助(按?)、保存、读取】。按Y是编译、M是编译模块、N是不编译。我们进入倒数第二个选项Networking Support。

这里面是内核的网络部分。可以看到有“爱好者无线电支持( amateur radio support) ”、红外(Infrared)、蓝牙(bluetooth)等等。因为是服务器,所以这三个选项都不需要,全部选N。(我还清除了其他一些模块,但是好像篇幅会被拉到无敌长的吧)之后进入第二项Networking Options,向下拉找到TCP: advanced congestion control(TCP:高级拥塞控制算法)。

你看,BBR就在里面吧。

BBR下面还有一个菜单,选择默认TCP拥塞控制算法。用光标下移动,enter打开,选择BBR。(默认是Hybla而不是BBR,这是我调过的)

接着用左右光标保存设置到.config。一直按Exit退出,之后使用make-kpkg clean清除kernel-package参数。

2.4 编译

linux-4.11下,我们输入

fakeroot make-kpkg --initrd --revision=4.11.custom kernel_image

开始编译。

编译过程中需要保持ssh连接,否则ssh断开后远程终端将会收到hangup而中断当前操作(然而高贵的Lish根本不会这样)。如果需要的话,可以在命令前面加一个nohup 保持进程。

等到漫长的编译完成之后,退回到上级菜单,就能看到一个编译好的deb包。

然后呢?撸起袖子就是干啊。

3. 更换内核

3.1 安装新内核

sudo dpkg -i linux-image-4.11.0_4.11.custom_amd64.deb

3.2 清除旧内核

列出安装的所有内核:

dpkg -l | grep linux-image

然后能看到多个内核版本。

很明显我们保留4.11这个,把剩下的全部purge掉。

sudo apt-get purge 旧内核包名

 3.3 更新grub驱动并重启

一步搞定:

update-grub; sudo shutdown -r now

至此应该就完成了。启动之后使用

uname -r; sysctl net.ipv4.tcp_available_congestion_control

进行确认。如果顺利的话,应该能看到4.11和bbr字样(并且bbr在算法列表中在第一位)。好了至此操作全部完成。

 

内容来源

Mark

广岛大学社会心理学(预备)研究生。忙。AE/PR/FCPX/PS/LR/AI(Adobe Illustrator)。会一点Python。

相关推荐

站点评论系统切换至EchoChamber

今天开始,网站的评论系统会切换到Echo Chamber。 Echo Chamber主要的功能有: spam和广告信息自动过滤,管理员不用费 …

使用CSS美化页面

因为换了宿舍开始蹭外星人壕舍友的路由,所以hostapd的坑大概是填不上了吧。 最近在看Material Design/Motion Graphics …

1 条评论

  1. nick

    实际上直接在vps里直接替换内核依旧不能更换内核,linode内核文件的修改需要用到linode的后台页面,在后台页面的配置中绑定内核。

有什么想法说出来听听?

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据