Advising in packages to load new module or reboot

Egbert Verhage egbert at eggiecode.org
Wed Aug 9 13:16:45 CEST 2017


Hey Jason,

Ow, that it is a common problem.
I think your patch is a nice updated.

So I got some time left and build a patch (pull request) on github
here: https://github.com/EggieCode/wireguard-ppa/pull/24

Let me known what you think.

Greetz,
Egbert

On Wed, 2017-08-09 at 01:16 +0200, Jason A. Donenfeld wrote:
> Hey guys,
> 
> I've noticed that around 60% of emails and IRC messages I get about
> WireGuard issues are due to:
> 
> 1) forgetting to `rmmod wireguard && modprobe wireguard` after
> updating
> 2) installing new kernel headers, removing old kernel headers,
> updating
>    wireguard, and then having the module built for the newer kernel
> and
>    forgetting to reboot
> 3) not having any headers installed
> 
> I don't really know the best generic solution for (3), since
> different
> distros and distro-derivatives (armbian,raspian,archlinuxarm,etc)
> seem
> to express these dependencies in different ways, or not at all. But I
> do
> have an idea to pretty easily address (1) and (2). I've just added
> the
> below to the Gentoo ebuild:
> 
> + if [[ $(uname -r) != "${KV_FULL}" ]]; then
> +         ewarn
> +         ewarn "You have just built WireGuard for kernel ${KV_FULL},
> yet the currently running"
> +         ewarn "kernel is $(uname -r). If you intend to use this
> WireGuard module on the currently"
> +         ewarn "running machine, you will first need to reboot it
> into the kernel ${KV_FULL}, for"
> +         ewarn "which this module was built."
> +         ewarn
> + elif [[ -f /sys/module/wireguard/version ]] && \
> +      old="$(< /sys/module/wireguard/version)" && \
> +      new="$(modinfo -F version
> "${ROOT}/lib/modules/${KV_FULL}/net/wireguard.ko" 2>/dev/null)" && \
> +      [[ $old != "$new" ]]; then
> +         ewarn
> +         ewarn "You appear to have just upgraded WireGuard from
> version v$old to v$new."
> +         ewarn "However, the old version is still running on your
> system. In order to use the"
> +         ewarn "new version, you will need to remove the old module
> and load the new one. As"
> +         ewarn "root, you can accomplish this with the following
> commands:"
> +         ewarn
> +         ewarn "    # rmmod wireguard"
> +         ewarn "    # modprobe wireguard"
> +         ewarn
> +         ewarn "Do note that doing this will remove current
> WireGuard interfaces, so you may want"
> +         ewarn "to gracefully remove them yourself prior."
> +         ewarn
> + fi
> 
> There's a bit of Gentoo-specific stuff in there, but the general idea
> is
> that I first check to see if the module is being built for the
> current
> kernel or a different one, and then I check whether an older module
> is
> loaded than the one just built. It might be slightly trickier to
> accomplish this with DKMS, but I think still it's possible.
> 
> Any thoughts on this pattern?
> 
> Jason


More information about the WireGuard mailing list