Nouvellement abonné chez Free, j’ai commandé la dernière Freebox, la Delta. Celle-ci est appelée « serveur » et non « routeur » dans la documentation, et ce, à juste titre puisque Free ont mis le paquet pour permettre l’auto-hébergement. En effet, une des fonctionnalités de l’OS de la Freebox est d’exécuter des machines virtuelles KVM directement sur la box – évitant ainsi d’avoir à faire tourner H24 un PC à la maison. C’est d’ailleurs sur une VM dans ma Freebox que ce blog est hébergé.
Free propose un certain nombre de distributions Linux (Debian, Ubuntu, CentOS notamment) mais j’ai souhaité faire tourner mon serveur personnel sur OpenBSD, parce que c’est cool™. Il y a cependant quelques difficultés à surmonter pour que tout fonctionne convenablement.
Démarrage de l’installateur et installation de l’OS
Le gros de l’installation se fait via l’interface d’administration de la Freebox http://mafreebox.freebox.fr, accessible sur le réseau local. On peut alors explorer le menu « VMs » et commencer la création de la machine virtuelle.
La première difficulté est que la Freebox tourne sur architecture ARM64. Il faut donc se procurer l’installateur OpenBSD adéquat qui, allez savoir pourquoi, n’est pas disponible au format CD-ROM (ISO) mais seulement sous la forme d’image disque. On peut tout à fait contourner ce problème :
- en choisissant une image ISO bidon dans l’interface de la Freebox, puis en la supprimant après coup dans les paramètres de la machine virtuelle ;
- en téléchargeant l’installateur pour clé USB, et créant une clé USB amorçable qu’on pourra ensuite brancher sur un des ports USB de la Freebox (la machine virtuelle pourra démarrer depuis l’USB !).
La configuration finale ressemblera à ça sur la Freebox. Notez l’absence d’image CD-ROM et l’ajout du port USB dans le bloc « système ».
On peut alors créer un disque USB d’installation selon la procédure standard, puis l’insérer dans la Freebox :
$ wget https://cdn.openbsd.org/pub/OpenBSD/7.2/arm64/install72.img
# dd if=install72.img of=/dev/<disque_usb> bs=4M
On démarre la VM, et ça boote…
Contourner le crash au démarrage
…et puis ça plante au bout que quelques secondes. Le démarrage reste bloqué sur un message un peu cryptique.
virtio3: couldn't map interrupt
Une petite recherche sur les Internets montre que le problème semble être lié au générateur de nombres aléatoires de QEMU que OpenBSD ne semble pas bien gérer. Après un peu de bidouille, on se rend également compte qu’il y a des problèmes avec le pilote du memory balloon. La solution : mettre sur liste noire ces deux pilotes. On redémarre donc la machine virtuelle, et au démarrage on tape boot -c
pour entrer dans le BOOT_CONFIG
de OpenBSD. On désactive les pilotes en question :
boot> disable viornd
boot> disable viomb
boot> quit
Et là, miracle, l’installateur démarre et on peut installer le système d’exploitation puis démarrer le nouveau système en ré-effectuant la manipulation à chaque démarrage.
Rendre la bidouille permanente
C’est non seulement pénible de devoir désactiver les pilotes à chaque démarrage, mais également problématique puisqu’en cas de coupure de courant ou de redémarrage inopiné, la machine virtuelle plantera au démarrage et le serveur restera inaccessible.
On va donc rendre cette manipulation permanente en configuration un noyau avec ces pilotes désactivés. C’est là qu’intervient le fichier de configuration /etc/bsd.re-config
qui permet de correctement configurer le noyau à chaque démarrage. On y insère alors les deux commandes disable viornd
et disable viomb
.
On teste ensuite en redémarrant le système non pas une, mais deux fois : en effet, les commandes du fichier /etc/bsd.re-config
étant prises en commande au démarrage du système pour le démarrage suivant, le premier redémarrage est garanti de poser problème.