文章目录[隐藏]
昨天没忍住剁了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在算法列表中在第一位)。好了至此操作全部完成。
实际上直接在vps里直接替换内核依旧不能更换内核,linode内核文件的修改需要用到linode的后台页面,在后台页面的配置中绑定内核。