系统信息
操作系统信息:
我这里使用的操作系统是 银河麒麟V10,CPU为飞腾 ARM64
根据wireguard 的编译指南:https://www.wireguard.com/compilation/
安装
编译安装内核
注意:5.6 以上内核不需要编译安装,已经集成在内核中。
安装依赖
sudo yum install elfutils-libelf-devel kernel-devel pkgconfig "@Development Tools"
下载源代码
git clone https://git.zx2c4.com/wireguard-linux-compat
git clone https://git.zx2c4.com/wireguard-tools
运行编译命令
make -C wireguard-linux-compat/src -j$(nproc)
编译大概率会出下这样的报错
compat.h:93:42: 错误:‘const struct ipv6_stub’ has no member named ‘ipv6_dst_lookup’;
当前操作系统内核信息为:4.19.90-25.5.v2101.ky10.aarch64
wireguard内部为了兼容不同的操作系统内核,使用了条件编译,似乎 麒麟的这个内核版本不在它的条件编译中,这里需要手动修复编译命令。
错误发生在 wireguard-linux-compat/src/compat/compat.h:93 我们vim打开编译把条件语句关闭。
vim wireguard-linux-compat/src/compat/compat.h
将错误的推断语句注释,如下:
注释后再次编译
make -C wireguard-linux-compat/src -j$(nproc)
编译成功
方式1 手动安装 加载
将编译好的源代码安装至内核目录:
make -C wireguard-linux-compat/src install
虽然这里出现了 SSL error但是并不影响功能。
手动加载模块
modprobe wireguard
lsmod|grep wireguard
方式2 DKMS 安装
通过编译后我们使用 dkms 来安装模块,首先安装 dkms工具
yum install dkms -y
进入源代码的src
cd wireguard-linux-compat/src
执行
make dkms-install
dkms 将会把源码复制/usr/src/wireguard
下
进入/usr/src
添加 wireguard
cd /usr/src
dkms add wireguard
成功后将会创建一个link,如下 请注意版本号 后续将会使用到
接下来编译源码,名称为 wireguard/
+ 版本号
dkms build wireguard/1.0.20220627
若编译无误,接下来就可以安装内核模块了,同样需要指定版本
dkms install wireguard/1.0.20220627
安装后,查看是否安装成功
lsmod |grep wireguard
若列表中没有,那么可以手动加载
modprobe wireguard
编译工具
make -C wireguard-tools/src -j$(nproc)
make -C wireguard-tools/src install
完成后可以使用 验证
wg --version
卸载
卸载内核模块
modprobe -r wireguard ip6_udp_tunnel udp_tunnel
卸载内核
dkms uninstall wireguard/1.0.20220627
删除文件
dkms remove wireguard/1.0.20220627 --all
参考文献
[1]. reddit . Up to date Ubuntu 18.04.4: cannot compile wireguard 20200520 installed from PPA against 4.15.0-106-generic (x86_64) . 2020 . https://www.reddit.com/r/WireGuard/comments/h0tkzt/up_to_date_ubuntu_18044_cannot_compile_wireguard/
[2]. csdn . (一)手动编译安装wireguard . laobeng . 2022.05 . https://blog.csdn.net/laobeng/article/details/124747160