My Problem
Attempting to install and use Wireguard (version 0.0.20190406-1) on Fedora release 29 is unsuccessful with a variety of symptoms. The first being:
ip link add dev wg0 type wireguard
Error: Unknown device type.
Attempting to get some info about the module with modprobe
shows:
$ modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/5.0.4-2004
The dkms
tool shows that the wireguard module is added:
$ dkms status
wireguard, 0.0.20190406: added
However, attempting to build it shows:
$ dkms build wireguard/0.0.20190406
Error! echo
Your kernel headers for kernel 5.0.4-200.fc29.x86_64 cannot be found at /lib/modules/5.0.4-200.fc29.x86_64/build or /lib/modules/5.0.4-200.fc29.x86_64/.
My Solution
Make sure that your running kernel and your kernel headers are the same version, or at least that the running version of the kernel is newer than your kernel headers.
For example, I’m running on a RedHat based system, and checked the following:
$ uname --kernel-release
5.0.4-200.fc29.x86_64
But then the kernel headers were newer:
$ rpm -q kernel-headers
kernel-headers-5.0.9-200.fc29.x86_64
My solution was to yum update
the kernel and reboot. I didn’t have to re-install the headers or the wireguard packages. Another possible solution would have been to manually install 5.0.4 kernel headers, but that would require uninstalling packages that marked 5.0.9 kernel headers as a dependency. I believe the cleaner solution is to simply update the kernel.
The Long Story
First, I checked that I even had kernel headers installed in the first place:
$ rpm -q kernel-headers
kernel-headers-5.0.9-200.fc29.x86_64
Well that’s interesting, because:
$ uname --kernel-release
5.0.4-200.fc29.x86_64
So I’m running kernel 5.0.4, but the kernel-headers package that I’m offered is for 5.0.9. I attempted to install the specific kernel header package by version:
yum install kernel-headers-5.0.4-200.fc29.x86_64
[...]
No match for argument: kernel-headers-5.0.4-200.fc29.x86_64
At this point, I had two viable options.
- I could update the running kernel, since
5.0.10-200.fc29
was released and waiting for me. - I could go into Fedora’s build system, Koji, and pull out the specific kernel headers package that I needed to then install manually.
Choosing #2, however, would require me to uninstall the current 5.0.9 kernel headers, and anything that had it as a dependency. This includes things like binutils
and gcc
, among many others. I decided to update the system. A quick yum update
and reboot
later, and:
$ uname -or
5.0.10-200.fc29.x86_64 GNU/Linux
My only concern was that the headers that are in the official yum repo are 5.0.9; a minor version behind the new kernel:
rpm -q kernel-headers
kernel-headers-5.0.9-200.fc29.x86_64
Nevertheless, my fears were allayed with dkms:
$ dkms status
wireguard, 0.0.20190406, 5.0.10-200.fc29.x86_64, x86_64: installed
Previously, wireguard had only been added, but not successfully installed. I quickly tried to add a wireguard interface:
$ ip link add dev wg0 type wireguard
$ ip link show wg0
3: wg0: <POINTOPOINT,NOARP> mtu 1420 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/none
Success!