为Debian编译内核的deb安装包

手里面有一台北美的VPS,网络状况不太稳定,早就听说了Google的全新TCP拥塞算法BBR,所以打算尝试一下。该拥塞算法实际已经合入主线内核,但是为了获得最好的效果,这里我将编译谷歌专为开发BBR而创建的内核——net-next。替换内核的同时需要替换内核模块,因此将内核编译为deb安装包将更加便于管理。

依赖环境

这里的所有操作在Debian9下进行。

1
2
3
4
5
6
sudo apt update
# following packages are used to build kernel, you may need more
sudo apt install build-essential libncurses5-dev git flex bison wget bzip2

# following packages are used to build kernel package
sudo apt install kernel-package fakeroot

获取内核源码

这里我以Google用来开发BBR的内核net-next为例。

1
git clone git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git linux-kernel

配置与编译

配置内核需要config文件,你可以使用内核中的x86默认配置,也可以将本机的配置文件复制到源码目录。

1
2
3
4
5
6
7
8
9
10
cd linux-kernel
make clean && make mrproper

# if you want to use default config
make x86_64_defconfig
# or use local machine config
cp /boot/config-`uname -r` ./.config

# configure anything you want
make menuconfig

这里并不直接使用make编译,而是使用make-kpkg,搭配fakeroot来编译内核安装包。

1
2
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

最后,在上级目录中就可以找到编译好的linux-image和linux-headers。

安装内核

要安装新内核,需要首先卸载旧的内核,安装好之后,还要更新grub,否则机器将无法启动。

1
2
3
4
5
6
7
8
# WARNING, following command will remove your kernel!
dpkg -l | grep linux-image | awk '{print $2}' | xargs -I {} sudo apt purge {} -y

# install new kernel
sudo dpkg -i linux-image*

# update grub
sudo update-grub