背景

我的服务器系统是OpenCloudOS 9.2,内核为6.6.34-9.oc9.x86_64。

image-20241231093722024

我想在服务器上使用Wireguard,按理说5.6之后的Linux内核应该是内建该模块的,但是该系统中并没有。

image-20241231094103286

于是通过重新编译内核的方式来启用Wireguard的支持。

编译安装内核

内核源码位置

可以使用原本的内核源码:/usr/src/kernels

下载新内核源码:https://www.kernel.org/

如6.12.7的源码包:https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.12.7.tar.gz

安装相应工具包

1
2
3
4
dnf groupinstall -y "Development Tools"
dnf install -y gcc make ncurses-devel bison flex elfutils-libelf-devel openssl-devel bc perl
dnf install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)
dnf install -y pkgconfig libmnl-devel

配置内核模块

  1. 进入内核源码所在的文件夹,首先复制原内核的配置项
1
cp /boot/config-$(uname -r) .config
  1. 允许Wireguard内核
1
make menuconfig

输入命令后会进入一个配置菜单,Wireguard配置项在Device Drivers --> Network device support --> WireGuard secure network tunnel,输入M(module)或Y(built-in),也可以开启其后的Debugging checks and verbose messages(输入Y)。

其他模块同理,把自己想要的配置都配置完成后通过光标先SaveExit即可。

通过grep命令查看模块是否被正确修改

1
grep WIREGUARD .config

编译安装内核

1
2
3
4
5
6
7
8
# 若之前编译过,先清理一下
make clean
make mrproper

# -j表示使用多个CPU核心进行编译,提高速度
make -j$(nproc)
make modules_install
make install

这步会比较慢,耐心等待即可。

更新引导程序

1
2
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

重启后可以检查内核是否被成功安装

1
uname -r

检测WireGuard模块

检测wireguard模块是否被包含在内核中

1
ls /lib/modules/$(uname -r)/kernel/drivers/net/wireguard/

加载该模块

1
modprobe wireguard

检测模块是否被加载

1
lsmod | grep wireguard

image-20241231141523880

完成!