Partager :
OpenVPN · DKMS
dkms « failed for ovpn-dco » après la mise à jour du noyau 7.0 : ton nouveau noyau va bien
Publié le · HardStacked · 9 min
Tu as mis à jour Ubuntu 24.04 (son noyau HWE est maintenant le 7.0 : le 7.0.0-42 est arrivé dans noble-updates le 2026-10-28) ou Ubuntu 26.04, et apt s'arrête sur dkms autoinstall on 7.0.0-42-generic/aarch64 failed for ovpn-dco(10), puis run-parts: /etc/kernel/header_postinst.d/dkms exited with return code 11. dpkg accuse linux-headers-7.0.0-42-generic, et chaque apt suivant rejoue l'erreur. Une question sur Ask Ubuntu intitulée « something about openvpn is preventing my linux image from updating properly » (question 1570270, octobre 2026, noyau 7.0.0-38-generic, paquet ovpn-dco 0.2.20260526-1+26.1) montre les mêmes erreurs que notre banc, et son journal de compilation montre une chaîne d'outils de 24.04 (gcc-13 13.3.0-6ubuntu2~24.04.1).
Ton nouveau noyau n'est pas cassé. Le fautif est openvpn-dco-dkms, un module que Linux livre dans son propre arbre depuis la 6.16 (le module ovpn). Retirer ce seul paquet répare apt. Ce qui décide ensuite si ton tunnel garde l'accélération du canal de données (DCO), ce n'est plus un module à compiler, c'est la version d'OpenVPN.
L'unique réponse à cette question (score -1, non acceptée) dit de démarrer sur un vieux noyau, de purger le nouveau noyau, openvpn3-client, openvpn, openvpn-dco-dkms et les plugins OpenVPN de NetworkManager, puis de réinstaller le noyau. Ça coûte le noyau et toute la pile VPN pour un seul paquet, et nous avons mesuré qu'un seul paquet suffit.
Mesuré sur des machines virtuelles neuves Ubuntu 24.04.5 LTS et Ubuntu 26.04.1 LTS (arm64, images cloud officielles), le 2026-11-10. Avant la capture 24.04, la machine avait openvpn et openvpn-dco-dkms d'Ubuntu sur le noyau 6.8, probablement ton point de départ.
01. Ce que dit apt, et ce qui a vraiment échoué
État de départ, puis la mise à jour vers le noyau HWE 7.0. Nous coupons les lignes de téléchargement et de dépaquetage, les paquets de firmware et le bruit de debconf, jamais une commande.
la mise à jour qui casse
$ grep PRETTY_NAME /etc/os-release
PRETTY_NAME="Ubuntu 24.04.5 LTS"
$ uname -r
6.8.0-147-generic
$ dpkg-query -W openvpn openvpn-dco-dkms
openvpn 2.6.19-0ubuntu0.24.04.5
openvpn-dco-dkms 0.0+git20231103-1ubuntu1.2
$ dkms status
ovpn-dco/0.0+git20231103, 6.8.0-147-generic, aarch64: installed
$ sudo apt-get install -y linux-generic-hwe-24.04
...
Setting up linux-headers-7.0.0-42-generic (7.0.0-42.42~24.04.1) ...
/etc/kernel/header_postinst.d/dkms:
* dkms: running auto installation service for kernel 7.0.0-42-generic
Building module:
Cleaning build area...(bad exit status: 2)
Error! Bad return status for module build on kernel: 7.0.0-42-generic (aarch64)
dkms autoinstall on 7.0.0-42-generic/aarch64 failed for ovpn-dco(10)
run-parts: /etc/kernel/header_postinst.d/dkms exited with return code 11
dpkg: error processing package linux-headers-7.0.0-42-generic (--configure):
installed linux-headers-7.0.0-42-generic package post-installation script subprocess returned error exit status 11
...
Setting up linux-image-7.0.0-42-generic (7.0.0-42.42~24.04.1) ...
I: /boot/vmlinuz is now a symlink to vmlinuz-7.0.0-42-generic
I: /boot/initrd.img is now a symlink to initrd.img-7.0.0-42-generic
...
run-parts: /etc/kernel/postinst.d/dkms exited with return code 11
dpkg: error processing package linux-image-7.0.0-42-generic (--configure):
installed linux-image-7.0.0-42-generic package post-installation script subprocess returned error exit status 11
Errors were encountered while processing:
linux-headers-7.0.0-42-generic
linux-headers-generic-hwe-24.04
linux-generic-hwe-24.04
linux-image-7.0.0-42-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
Premier voyant qui ment : dpkg nomme les en-têtes et les méta-paquets HWE. L'image du noyau a été dépaquetée et configurée (regarde les lignes /boot/vmlinuz et initrd.img), puis le même hook DKMS est repassé depuis son trigger et a échoué à nouveau. Sur un autre essai l'image s'est configurée : dpkg peut aussi lister l'image du noyau. Dans les deux cas, c'est le hook qui échoue, pas le noyau.
02. Ton nouveau noyau a déjà le module
Demande à dpkg ce qui est bloqué, lis le journal de compilation, puis interroge le nouveau noyau sans le démarrer (modinfo -k).
$ sudo dpkg --audit
The following packages are only half configured, probably due to problems
configuring them the first time. The configuration should be retried using
dpkg --configure <package> or the configure menu option in dselect:
linux-headers-7.0.0-42-generic Linux kernel headers for version 7.0.0
linux-image-7.0.0-42-generic Signed kernel image generic
$ dkms status
ovpn-dco/0.0+git20231103, 6.8.0-147-generic, aarch64: installed
$ grep -m2 'error:' /var/lib/dkms/ovpn-dco/*/build/make.log
drivers/net/ovpn-dco/tcp.c:482:31: error: assignment to ‘int (*)(struct sock *, struct msghdr *, size_t, int)’ {aka ‘int (*)(struct sock *, struct msghdr *, long unsigned int, int)’} from incompatible pointer type ‘int (*)(struct sock *, struct msghdr *, size_t, int, int *)’ {aka ‘int (*)(struct sock *, struct msghdr *, long unsigned int, int, int *)’} [-Werror=incompatible-pointer-types]
drivers/net/ovpn-dco/udp.c:346:51: error: passing argument 2 of ‘setup_udp_tunnel_sock’ from incompatible pointer type [-Werror=incompatible-pointer-types]
$ k=$(ls -v /lib/modules | tail -1); echo "$k"
7.0.0-42-generic
$ modinfo -k "$k" -F intree ovpn
Y
$ modinfo -k "$k" -n ovpn
/lib/modules/7.0.0-42-generic/kernel/drivers/net/ovpn/ovpn.ko.zst
Les deux erreurs de compilation sont les mêmes que dans la question Ask Ubuntu (notre banc est arm64, le leur x86_64, même code source). Le vieux pilote appelle des fonctions du noyau dont la signature a changé. Et intree Y : le noyau 7.0 livre son propre ovpn, dans kernel/drivers/net/ovpn/. Le paquet essaie de compiler une deuxième copie de ce que le noyau a déjà.
03. Répare apt : retire un seul paquet
le correctif
$ sudo apt-get purge -y openvpn-dco-dkms
...
The following package was automatically installed and is no longer required:
dkms
Use 'sudo apt autoremove' to remove it.
The following packages will be REMOVED:
openvpn-dco-dkms*
0 upgraded, 0 newly installed, 1 to remove and 42 not upgraded.
4 not fully installed or removed.
...
Removing openvpn-dco-dkms (0.0+git20231103-1ubuntu1.2) ...
...
Setting up linux-image-7.0.0-42-generic (7.0.0-42.42~24.04.1) ...
Setting up linux-headers-7.0.0-42-generic (7.0.0-42.42~24.04.1) ...
/etc/kernel/header_postinst.d/dkms:
* dkms: running auto installation service for kernel 7.0.0-42-generic
* dkms: autoinstall for kernel 7.0.0-42-generic
...done.
Setting up linux-headers-generic-hwe-24.04 (7.0.0-42.42~24.04.1) ...
Setting up linux-generic-hwe-24.04 (7.0.0-42.42~24.04.1) ...
...
$ sudo dpkg --configure -a
$ sudo dpkg --audit && echo "dpkg: nothing left half-configured"
dpkg: nothing left half-configured
$ dkms status
$ dpkg-query -W openvpn "linux-image-$k" "linux-headers-$k"
linux-headers-7.0.0-42-generic 7.0.0-42.42~24.04.1
linux-image-7.0.0-42-generic 7.0.0-42.42~24.04.1
openvpn 2.6.19-0ubuntu0.24.04.5
La purge termine d'elle-même la configuration du noyau : tu vois Setting up linux-image-…, Setting up linux-headers-… et dkms: autoinstall … done, une fois que le hook en panne n'a plus rien à construire. Donc dpkg --configure -a n'affiche rien, il n'y a plus rien à faire, c'est le but. Garde-le comme filet de sécurité. L'audit est vide, dkms status est vide, et le noyau comme OpenVPN sont toujours installés. La purge supprime aussi le module construit pour l'ancien noyau 6.8. apt propose maintenant de retirer dkms lui-même, à ta discrétion.
04. Après le redémarrage : ton tunnel a-t-il encore le DCO ?
Nous faisons sudo reboot, puis nous chargeons le module du noyau à la main et nous interrogeons OpenVPN 2.6, la version d'Ubuntu 24.04 :
après le redémarrage
$ uname -r
7.0.0-42-generic
$ sudo modprobe ovpn
$ lsmod | grep -w '^ovpn'
ovpn 98304 0
$ openvpn --version | grep -E '^OpenVPN|DCO version'
OpenVPN 2.6.19 aarch64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] [DCO]
DCO version: N/A
Deuxième voyant qui ment. Le module est chargé et OpenVPN 2.6 dit quand même DCO version: N/A. Nous avons monté un vrai tunnel (deux espaces de noms réseau, PKI jetable). Le journal du client dit Note: Kernel support for ovpn-dco missing, disabling data channel offload., alors que modinfo dit que le support est là. OpenVPN 2.6 cherche l'ancien module hors-arbre et ne sait pas parler au nouveau. Le README.dco d'OpenVPN cite ce message exact pour le cas où le module du noyau n'est pas utilisable. Le tunnel monte, sans DCO : ip -d link montre une interface de type tun.
Selon le projet OpenVPN (billet de blogue « openvpn-dco-added-to-linux-kernel-2025 »), le DCO est entré dans le noyau Linux officiel à partir de la 6.16, et leur README.dco dit que le module ovpn du noyau ne fonctionne qu'avec OpenVPN 2.7 et plus. Pour les noyaux plus anciens : le projet ovpn-backports. Versions d'Ubuntu, lues sur Launchpad le 2026-11-10 : 24.04 a openvpn 2.6.19, 26.04 a la 2.7.0.
Sur 24.04, tu as donc deux choix. Vivre sans DCO, le tunnel fonctionne. Ou passer à OpenVPN 2.7 : nous avons mesuré la 2.7.9 du dépôt isv:OpenVPN sur l'Open Build Service d'openSUSE, qui publie OpenVPN 2.7 pour Ubuntu 24.04 (nous n'avons pas vérifié qui le tient, donc nous ne donnons pas les commandes pour l'ajouter). Avec elle, le journal dit DCO version: 7.0.0-42-generic #42~24.04.1-Ubuntu ..., puis DCO device tun0 opened, et l'interface est de type ovpn.
Dernière surprise, celle qui arrête le réflexe « mets juste le DKMS à jour ». Le même dépôt livre un openvpn-dco-dkms récent (0.2.20261109, un instantané daté du 2026-11-09 par son numéro de version), qui compile sur 7.0. Mais OpenVPN 2.7.9 ne le charge jamais : modinfo -n ovpn rend /lib/modules/7.0.0-42-generic/kernel/drivers/net/ovpn/ovpn.ko.zst, le module du noyau, et le DKMS a construit un ovpn-dco-v2.ko.zst qui reste inutilisé.
Le suffixe +26.1 du paquet de la question ressemble à la forme des paquets de ce dépôt sur l'Open Build Service d'openSUSE (isv:OpenVPN). C'est une inférence.
05. Sur Ubuntu 26.04, le paquet échoue dès l'installation
La 26.04 roule déjà sur le noyau 7.0, donc le paquet DKMS échoue dès que tu l'installes :
Ubuntu 26.04
$ grep PRETTY_NAME /etc/os-release
PRETTY_NAME="Ubuntu 26.04.1 LTS"
$ uname -r
7.0.0-38-generic
$ sudo apt-get install -y openvpn openvpn-dco-dkms
...
Setting up openvpn (2.7.0-1ubuntu1.4) ...
...
Setting up openvpn-dco-dkms (0.0+git20251017-1) ...
Building for 7.0.0-38-generic
Error! Bad return status for module build on kernel: 7.0.0-38-generic (aarch64)
dpkg: error processing package openvpn-dco-dkms (--configure):
old openvpn-dco-dkms package postinst maintainer script subprocess failed with exit status 10
...
E: Sub-process /usr/bin/dpkg returned an error code (1)
$ sudo dpkg --audit
The following packages are only half configured, probably due to problems
configuring them the first time. The configuration should be retried using
dpkg --configure <package> or the configure menu option in dselect:
openvpn-dco-dkms DCO (Data-Channel Offload) kernel module for OpenVPN 2.6
$ sudo apt-get purge -y openvpn-dco-dkms
...
Removing openvpn-dco-dkms (0.0+git20251017-1) ...
Deleting module ovpn-dco/0.0+git20251017 completely from the DKMS tree.
...
$ sudo dpkg --audit && echo "dpkg: nothing left half-configured"
dpkg: nothing left half-configured
$ sudo modprobe ovpn
$ openvpn --version | grep -E '^OpenVPN|DCO version'
OpenVPN 2.7.0 aarch64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] [DCO]
DCO version: 7.0.0-38-generic #38-Ubuntu SMP PREEMPT_DYNAMIC Fri Sep 4 09:28:02 UTC 2026
La description dans dpkg --audit dit « for OpenVPN 2.6 », sur une version qui livre OpenVPN 2.7 : le paquet est périmé et Ubuntu le livre quand même. Ici, rien n'est perdu en le retirant : OpenVPN 2.7.0 parle au module du noyau. Dans un vrai tunnel sur une autre machine 26.04 neuve, le journal dit DCO version: 7.0.0-38-generic ... puis DCO device tun0 opened, interface de type ovpn, après la purge et sans aucune option.
06. Ce que nous n'avons pas mesuré
x86_64 : nos machines sont arm64, les erreurs de compilation sont les mêmes que dans la question, nous en déduisons que le même code source échoue de la même façon. Secure Boot et enrôlement MOK, plugin OpenVPN de NetworkManager et openvpn3-linux : non mesurés, et la réponse Ask Ubuntu les purge aussi. Debian 13 : non mesuré. Elle garde un noyau 6.12, donc le paquet DKMS devrait y rester utile (inféré de la version du noyau). Débit et latence avec et sans DCO : nous ne les avons pas mesurés et n'en disons rien.
Même famille, un autre piège OpenVPN : OpenVPN « CA signature digest algorithm too weak » quand ta CA est en SHA-256.
Partager :