Installer OpenBSD 7.0 sur GandiCloud VPS

🗣️
Are you more confortable on reading in English? Good news! This post is also available in English!

Depuis la sortie de la nouvelle plateforme cloud de Gandi GandiCloud VPS basée sur Openstack, j'essaye de chauffer le product owner qui gère ce nouveau produit de sortir de nouvelles distributions Linux et de nouveaux systèmes d'exploitation dont OpenBSD.

Pour le moment, pas de OpenBSD prévu dans l'immédiat (sauf si je garantissais l'achat de 10 VPS sous OpenBSD), les gens chez Gandi travaillent sur de nouvelles features qui viendront compléter la plateforme GandiCloud sans pour autant me donner plus de détails.

Tant pis. J'étais prêt à abandonner l'idée de faire tourner du OpenBSD sur la plateforme jusqu'à ce que je vois arriver la console d'urgence et le rescue mode !

November 2021 release note – What’s new in your Gandi interface?
We review the latest improvements, fixes, and new features that improve your user experience.

Me voilà parti pour tenter une installation ! Je commande un nouveau VPS de type V-R1 tournant sur Debian Bullseye, j'attends quelques instants et c'est parti pour se connecter au serveur.

λ kalimdor ~ → ssh debian@openbsd4life-vps
debian@openbsd4life:~$ sudo su

La première étape est de télécharger le ramdisk Kernel de OpenBSD. Pour cela, je me rends dans les dépôts d'OpenBSD 7.0, architecture AMD64 et je récupère le lien du ramdisk pour le télécharger dans mon VPS :

root@openbsd4life:~# cd /
root@openbsd4life:/# curl -O https://ftp.openbsd.org/pub/OpenBSD/7.0/amd64/bsd.rd
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 4109k  100 4109k    0     0   690k      0  0:00:05  0:00:05 --:--:--  864k

Afin que ce soit plus facile, je me rends dans le fichier /boot/grub/grub.cfg et je récupère le menuentry (le tout premier du fichier) qui permet de démarrer la Debian.

J'ouvre le fichier /etc/grub.d/40_custom et j'y ajoute la configuration que je viens de récupérer à la fin du fichier. Je renomme le menuentry, je supprime les lignes qui permettent de démarrer un kernel Linux que je remplace par la ligne kopenbsd /bsd.rd. Le menuentry devrait ressembler à quelque chose comme ceci :

menuentry "openbsd-memboot" {
  load_video
  insmod gzio
  if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
  insmod part_gpt
  insmod ext2
  if [ x$feature_platform_search_hint = xy ]; then
    search --no-floppy --fs-uuid --set=root  9a03b9ab-ac87-455e-bd8d-83318a953647
  else
    search --no-floppy --fs-uuid --set=root 9a03b9ab-ac87-455e-bd8d-83318a953647
  fi
  kopenbsd /bsd.rd
}
fichier : /etc/grub.d/40_custom

Note: Si vous tentez la manipulation de votre côté, pensez à remplacer l'UUID de la partition par celle de votre serveur. Si vous souhaitez obtenir l'UUID de votre partition principale, utilisez la commande lsblk --fs et récupérez l'UUID de la partition xvda1 (sur une autre plateforme, le nom peut différer et être sda1 ou autre chose.)

Ensuite, je viens modifier le fichier /etc/default/grub afin d'ajouter/modifier le paramètre GRUB_DEFAULT afin que celui-ci devienne :

GRUB_DEFAULT="openbsd-memboot"

Je sauvegarde puis je lance la mise à jour de la configuration de GRUB avec la commande update-grub :

root@openbsd4life:/# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.10.0-9-amd64
Found initrd image: /boot/initrd.img-5.10.0-9-amd64
done

Une fois que c'est bon et qu'aucune erreur ne remonte, je redémarre le serveur avec la commande reboot.

À partir de maintenant, il est nécessaire de se rendre dans l'admin Gandi (ou d'utiliser la CLI Openstack) et de lancer la console d'urgence.

Avec un peu de persévérance, la console d'urgence commencera à afficher des choses. Si tout va bien, on aperçoit le Kernel OpenBSD démarrer et à partir d'un certain moment, on aperçoit le message « Welcome to the OpenBSD/amd64 7.0 installation program. ». Première victoire ! 🎉

C'est désormais l'heure de l'installation d'OpenBSD. Pour aller au plus simple, j'ai suivi l'assistant d'installation en mode autopilote à l'exception de la configuration de l'utilisateur et des tarballs de binaires à installer.

Lors de la configuration de l'utilisateur, je spécifie un mot de passe pour l'utilisateur root, je lui dis que sshd soit démarrer comme un grand, que je ne souhaite pas faire tourner XOrg et que j'autorise la connexion par mot de passe pour l'utilisateur root (à passer en prohibit-password une fois une clé SSH provisionnée !).

Pour les partitions, je laisse tout par défaut. Pour les tarballs de binaires à installer, je conserve tout sauf ce qui concerne les jeux et XOrg avec la valeur -game* -x*.

Une fois que l'installation d'OpenBSD est terminée, il est l'heure de redémarrer la machine virtuelle. Une fois connecté en SSH, magie ! OpenBSD tourne sur un GandiCloud VPS ! 🎉

OpenBSD 7.0 (GENERIC) #224: Thu Sep 30 14:13:34 MDT 2021

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
 
openbsd4life# uname -a
OpenBSD openbsd4life.openstacklocal 7.0 GENERIC#224 amd64

Configurer IPv6

Lors de l'installation, j'ai volontairement omis la configuration de la connectivité IPv6. La raison est que l'utilisation de l'autoconf ne suffit pas pour obtenir une connectivité IPv6 fonctionnelle et il est nécessaire de désactiver deux options : les IPs temporaires (RFC 8981) et le SOII (RFC 7217).

Pour ce faire, il est nécessaire de faire une petite modification dans le fichier de configuration de l'interface, dans mon cas /etc/hostname.xnf0 afin d'y ajouter -temporary -soii à la ligne inet6 autoconf. Le fichier devrait ressembler à ceci :

autoconf
inet6 autoconf -temporary -soii

Histoire que les IPs soient au propre, je redémarre la machine virtuelle à l'aide de la commande reboot. Une fois de retour en SSH sur la machine virtuelle, je devrais retrouver la même adresse IPv6 visible depuis la CLI Openstack ou depuis l'admin Gandi avec la commande ifconfig xnf0. Un petit ping6 themimitoof.fr permet de valider une connectivité IPv6 fonctionnelle !

openbsd4life# ping6 -c2 themimitoof.fr 
ping6: Warning: themimitoof.fr has multiple addresses; using 2606:4700:3032::6815:30a
PING themimitoof.fr (2606:4700:3032::6815:30a): 56 data bytes
64 bytes from 2606:4700:3032::6815:30a: icmp_seq=0 hlim=59 time=2.184 ms
64 bytes from 2606:4700:3032::6815:30a: icmp_seq=1 hlim=59 time=2.230 ms

--- themimitoof.fr ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 2.184/2.207/2.230/0.023 ms
openbsd4life# 

Conclusion

Bien que l'installation d'OpenBSD ne soit pas disponible officiellement, il est tout de même possible de le faire soit-même sans trop de difficultés.

Si vous êtes un aficionado d'OpenBSD ou si vous souhaitez essayer OpenBSD, n'hésitez pas à le reproduire de votre côté tout en ayant à côté de vous, le très bon OpenBSD Handbook 😉.

Toutefois, n'oubliez pas qu'installer une distribution ou un autre système d'exploitation non supporté par n'importe quel cloud provider ne doit faire l'objet de ticket support. Quand on voyage en terrain inconnu, on se débrouille comme un grand 😉.

Quelques liens