即使安装了内核头,Wireguard 仍然无法构建模块?

即使安装了内核头,Wireguard 仍然无法构建模块?

通过 PPA 在 Xubuntu(Ubuntu 18.04.4 LTS)中安装了 wireguard。内核模块失败。

# modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/5.3.0-51-generic

我搜索了很多关于这个问题的信息,但发现大部分帖子要么没有内核头文件,要么不匹配。我检查了一下,我的系统上没有问题。

当我检查时

# dkms status 
wireguard, 1.0.20200506: added

尝试dkms build wireguard/1.0.20200506 产生错误,报告如下日志:

> DKMS make.log for wireguard-1.0.20200506 for kernel 5.3.0-51-generic (x86_64)
Tue May 26 19:11:14 PDT 2020
make: Entering directory '/usr/src/linux-headers-5.3.0-51-generic'
  CC [M]  /var/lib/dkms/wireguard/1.0.20200506/build/main.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200506/build/noise.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200506/build/device.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200506/build/peer.o
In file included from /var/lib/dkms/wireguard/1.0.20200506/build/main.c:9:0:
/var/lib/dkms/wireguard/1.0.20200506/build/queueing.h: In function ‘wg_reset_packet’:
/var/lib/dkms/wireguard/1.0.20200506/build/queueing.h:107:2: error: implicit declaration of function ‘skb_reset_redirect’; did you mean ‘skb_do_redirect’? [-Werror=implicit-function-declaration]
  skb_reset_redirect(skb);
  ^~~~~~~~~~~~~~~~~~
  skb_do_redirect
In file included from /var/lib/dkms/wireguard/1.0.20200506/build/noise.c:10:0:
/var/lib/dkms/wireguard/1.0.20200506/build/queueing.h: In function ‘wg_reset_packet’:
/var/lib/dkms/wireguard/1.0.20200506/build/queueing.h:107:2: error: implicit declaration of function ‘skb_reset_redirect’; did you mean ‘skb_do_redirect’? [-Werror=implicit-function-declaration]
  skb_reset_redirect(skb);
  ^~~~~~~~~~~~~~~~~~
  skb_do_redirect
In file included from /var/lib/dkms/wireguard/1.0.20200506/build/device.c:6:0:
/var/lib/dkms/wireguard/1.0.20200506/build/queueing.h: In function ‘wg_reset_packet’:
In file included from /var/lib/dkms/wireguard/1.0.20200506/build/peer.c:8:0:
/var/lib/dkms/wireguard/1.0.20200506/build/queueing.h: In function ‘wg_reset_packet’:
/var/lib/dkms/wireguard/1.0.20200506/build/queueing.h:107:2: error: implicit declaration of function ‘skb_reset_redirect’; did you mean ‘skb_do_redirect’? [-Werror=implicit-function-declaration]
  skb_reset_redirect(skb);
  ^~~~~~~~~~~~~~~~~~
  skb_do_redirect
/var/lib/dkms/wireguard/1.0.20200506/build/queueing.h:107:2: error: implicit declaration of function ‘skb_reset_redirect’; did you mean ‘skb_do_redirect’? [-Werror=implicit-function-declaration]
  skb_reset_redirect(skb);
  ^~~~~~~~~~~~~~~~~~
  skb_do_redirect
cc1: some warnings being treated as errors
scripts/Makefile.build:288: recipe for target '/var/lib/dkms/wireguard/1.0.20200506/build/main.o' failed
make[1]: *** [/var/lib/dkms/wireguard/1.0.20200506/build/main.o] Error 1
make[1]: *** Waiting for unfinished jobs....
cc1: some warnings being treated as errors
scripts/Makefile.build:288: recipe for target '/var/lib/dkms/wireguard/1.0.20200506/build/peer.o' failed
make[1]: *** [/var/lib/dkms/wireguard/1.0.20200506/build/peer.o] Error 1
cc1: some warnings being treated as errors
scripts/Makefile.build:288: recipe for target '/var/lib/dkms/wireguard/1.0.20200506/build/device.o' failed
make[1]: *** [/var/lib/dkms/wireguard/1.0.20200506/build/device.o] Error 1
cc1: some warnings being treated as errors
scripts/Makefile.build:288: recipe for target '/var/lib/dkms/wireguard/1.0.20200506/build/noise.o' failed
make[1]: *** [/var/lib/dkms/wireguard/1.0.20200506/build/noise.o] Error 1
Makefile:1656: recipe for target '_module_/var/lib/dkms/wireguard/1.0.20200506/build' failed
make: *** [_module_/var/lib/dkms/wireguard/1.0.20200506/build] Error 2
make: Leaving directory '/usr/src/linux-headers-5.3.0-51-generic'

我不知道如何阅读此日志或进一步了解。Wireguard 安装在我的路由器和我们的 iPhone 上,并且在那里正常工作。但我需要在我的装有 Xubuntu 的笔记本电脑上使用它——非常感谢您的帮助!

答案1

昨天,我在运行 Ubuntu Eoan 的 AWS 实例上遇到了这个确切的问题。我认为问题在于系统仍在运行旧内核 (5.3.0-1016-aws),该内核没有匹配的标头。重新启动后,系统正在运行 5.3.0-1019-aws 内核,并且能够构建 Wireguard 模块。

为了诊断目的,我运行了apt list --installed | grep linux查看安装了哪些内核包,这时我意识到我没有运行最新包中的内核。(运行uname -a查看当前正在运行的内核。)

不管怎样,这个系统是一对中的一对,对于这样的实验来说非常方便;显然,当你处理你的笔记本电脑时,这无济于事——我的笔记本电脑也遇到了这个问题!我会检查那台机器上的内核并在这里报告……这不是我的笔记本电脑的解决方案,它运行的是 bionic 又名 Ubuntu 18.04。它运行的是最新安装的内核 5.3.0-7648-generic,但我仍然看到错误/var/lib/dkms/wireguard/1.0.20200520/build/queueing.h:115:2: error: implicit declaration of function ‘skb_reset_redirect’; did you mean ‘skb_do_redirect’? [-Werror=implicit-function-declaration]/var/lib/dkms/wireguard/1.0.20200520/build/make.log我会继续挖掘。

针对 ubfan1 关于不使用 PPA 的评论,我认为对于 Ubuntu ≤ 19.04 来说,它仍然是必要的——请参阅https://www.wireguard.com/install/

最后(?),我通过运行并升级到 Focal(又名 Ubuntu 20.04)解决了笔记本电脑上的问题sudo do-release-upgrade -d。这样安装了 5.4.0-7629-generic 内核,现在 Wireguard 又可以正常工作了。这个解决方案需要一点时间,而且可能对你来说太麻烦了,但看起来还不错。

答案2

问题已经“自行解决”——Xubuntu(Ubuntu 18.04.4 LTS)中的最新内核 5.3.0-59-generic 似乎内置了 WG 支持。清除并重新安装 WG(仍来自 PPA)现在可行。没有构建内核模块,因此内核支持必须是“内置的”。可能是 WG 开发人员这样做的。无论如何,WG 现在可以在此发行版以及有类似问题的 Peppermint_10 上运行。

还有一个小问题。当通过正常的 apt 更新过程引入新内核时,它还安装了另一个内核“5.3xxxxx-gke”。该内核成为 GRUB 默认内核。但是,启动它时,登录屏幕及其他部分中的键盘支持被破坏(至少在我转换为 Linux 的 MacBook 上)。解决方法:在 GRUB 菜单中,选择“高级”,然后选择 5.3.0-59-generic 内核。它将正常启动,具有正常的键盘支持,WG 工作正常。

相关内容