我大概几个月前编译过一个旧版本的,最近又更新了,不过还是预览版,没有正式发布。
上次那个版本的kernel已经飙到5.2了,这次的更是直接到5.4了,要是正式版放出来我估摸着怎么着也得上5.0。。
上次是随便撸了个脚本没把编译步骤写出来,这次想到如果大家都在自己的机器上编译的话,就可以用自己机器旧内核的配置,这样炸的概率会小很多,当然编译kernel对机器硬件配置要求较高,一般的VPS就别费劲了,浪费时间。。
另外这次的版本编译起来有几个坑。。第一次编译几分钟报了个错,解决了再来跑一遍竟然后面又报个缺少rsync。。我寻思你要rsync干啥??
以下步骤在Debian10上测试通过。
apt -y install build-essential libncurses-dev libssl-dev libelf-dev bison bc flex rsync git screen
编译要花很长时间,建议开个screen守护一下:
screen -S kernel
下载源码:
git clone -b v2alpha https://github.com/google/bbr.git cd bbr
使用当前机器的旧内核配置,并自动帮你把新内核上的新功能选项以默认值进行配置:
make olddefconfig
打开图形化菜单:
make menuconfig
选择Networking support:
选择Networking options:
选择TCP: advanced…:
然后在里面你可以看到BBR2的新选项,这里有两种编译方式,M是构建为模块,*是直接构建到内核:
如果这里选为*的话,你可以在下面的Default TCP…内把默认的拥塞控制协议直接设置为BBR2:
这样安装好这个内核后就不需要去动sysctl.conf了,默认就开启BBR2。
当然你用模块也可以,就是需要自己加载模块罢了。设置好了后SAVE一下退出这个界面即可。
下面是我踩过的坑,解决办法,手动编辑.config:
nano .config
把里面的这一行注释掉或者留空里面的值:
CONFIG_SYSTEM_TRUSTED_KEYS=“debian/certs/debian-uefi-certs.pem”
为节省编译时间,关闭DEBUG:
CONFIG_DEBUG_INFO=n
做好上面这些后,现在就可以开始编译了:
make deb-pkg LOCALVERSION=-imlala -j$(nproc)
编译时间视你的机器性能而定,看看片锻炼下身体,回来应该就编译好了,在上级目录有可用的deb包,使用dpkg安装然后重启:
cd .. dpkg -i linux-image-5.4.0-rc6-imlala_5.4.0-rc6-imlala-1_amd64.deb
dpkg -i linux-headers-5.4.0-rc6-imlala_5.4.0-rc6-imlala-1_amd64.deb
reboot
直接编译到内核的使用下面的方法查看BBR2算法是否已经生效:
sysctl net.ipv4.tcp_congestion_control
正常的话会回显:
net.ipv4.tcp_congestion_control = bbr2
编译为模块的需要自己手动加载模块再配置sysctl.conf使其生效:
modprobe tcp_bbr2
echo “tcp_bbr2” >> /etc/modules
echo “net.ipv4.tcp_congestion_control = bbr2” >> /etc/sysctl.conf
sysctl -p