Installation d'OpenBSD 7.3 sous Proxmox (BIOS/UEFI)
On fait une petite pause dans notre série “GPU/PCI Passthrough sur Proxmox”, je dois dire que le quatrième article sur OpenBSD m’a donné du fil à retordre. Alors je me suis dit que c’était l’occasion de faire le point sur les différentes méthodes d’installation d’OpenBSD sur notre hyperviseur favori. On va envisager différent cas de figures en fonction des types de BIOS disponibles sous Proxmox (OVMF, SEABIOS); des différentes images d’installation d’OpenBSD; et, pour finir, nous parlerons de l’épineux sujet de la compatibilité d’OpenBSD avec Cloud-init.
Mise au point sur les différentes images d’installations
OpenBSD propose de nombreuses images, il n’est pas forcément évident de-ci retrouver. L’idée n’est pas tant de faire un descriptif exhaustif de toutes les images d’installation, que de précisé quelques points sur les images les plus adaptées en fonction des cas d’usages pour une installation.
Commençons donc, dans le set d’images proposées par OpenBSD, je retiendrais les suivantes :
-
install73.img L’image d’installation la plus complète, contenant l’essentiel des paquets pour installer le système, compatible BIOS/UEFI.
-
install73.iso Une image plus adaptée au format CD contient également l’essentiel des paquets pour installer le système, cependant cette image n’est pas compatible avec une installation en UEFI.
-
cd73.iso et miniroot73.img Sont les versions allégées des images précitées (par analogie on pourrait les comparer à une image “Netinstall” chez Debian).
L’ensemble de ces images supportes les principales architectures (amd64, arm64, i386), exception faite de l’architecture arm64 pour les images ISO.
Installation (BIOS/UEFI)
Import des images OpenBSD
Je vais utiliser install73.iso pour l’installation en mode BIOS et install73.img pour l’installation en mode UEFI. Vous pouvez tout à fait utiliser install73.img pour les deux types d’installation, mais dans le cadre de cet article je voulais présenter le plus large panel de méthode d’installation (avec leurs subtilités pour certaines).
wget -P /mnt/pve/PVE1/template/iso/ https://ftp.openbsd.org/pub/OpenBSD/7.3/amd64/install73.img https://ftp.openbsd.org/pub/OpenBSD/7.3/amd64/install73.iso
Création des VM
BIOS
qm create 109 \
--name obsd-bios \
--agent 1,type=isa \
--memory 2192 \
--bios seabios \
--sockets 1 --cores 2 \
--cpu kvm64 \
--net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi-single \
--boot order='ide0;scsi0' \
--scsi0 local-lvm:35 \
--ide0 PVE1:iso/install73.iso,media=cdrom
Explications :
- agent 1,type=isa Configuration particulière de l’agent QEMU, via le port série ISA.
- bios seabios (machine i440fx) La configuration par défaut des hôtes QEMU.
- boot order=‘ide0;scsi0’ On définit un odre de boot classique (le support d’installation en premier).
- ide0 PVE1:iso/install73.iso,media=cdrom l’Emplacement du disque d’installation.
UEFI
qm create 110 \
--name obsd-uefi \
--agent 1,type=isa \
--memory 2192 \
--bios ovmf \
--machine q35 \
--sockets 1 --cores 2 \
--cpu kvm64 \
--net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi-single \
--boot order='scsi0;ide0' \
--efidisk0 local-lvm:0 \
--scsi0 local-lvm:35
Explications :
- bios ovmf et machine q35 Le firmware alternatif à Seabios, conviendra mieux notamment si, vous souhaitez utiliser des périphériques en PCIe.
- boot order=‘scsi0;ide0’ Pour l’ordre de boot on place le disque d’installation en seconde position.
- efidisk0 local-lvm:0 la nécessaire partition EFI, pour tout type d’installation en UEFI.
Aussi il nous faudra faire l’import de l’image d’installation au format RAW, que nous placerons en ide0.
qm set 110 --ide0 local-lvm:0,import-from=/mnt/pve/PVE1/template/iso/install73.img
Processus d’installation
Paramètres communs BIOS/UEFI
lancement de l’installateur
Welcome to the OpenBSD/amd64 7.3 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? I
choose your keyboard layout (’?’ or ’L’ for list) [default] fr
System hostname? (short form, e.g. *foo’) openbsd
Configuration réseau
Available network interfaces are: vio0 vlan0.
Network interface to configure? (name, lladdr, ’?’, or ’done’) [vio0]
IPv4 address for vioO? (or ’autoconf’ or ’none’) [autoconf]
IPv6 address for vioO? (Cor ’autoconf’ or ’none’) [none]
Network interface to configure? (name, lladdr, ’?’, or ’done’) [done]
Définition du compte ROOT
Password for root account? (will not echo)
Password for root account? (again)
Activation des services de base (xorg/sshd/xenodm)
Start sshd(8) by default? [yes]
Do you expect to run the X Window System? [yes]
Do you want the X Window System to be started by xenodm(1)? [no]
Change the default console to com0? [no]
Définition d’un utilisateur
Setup a user? (enter a lower-case loginname, or ’no’) [no] openbsd
Full name for user openbsd? [openbsd] openbsd
Password for user openbsd? (will not echo)
Password for user openbsd? (again)
Configuration de sécurité pour SSH
Allow root ssh login? (yes, no, prohibit-password) [no]
Timezone
What timezone are you in? (’?’ for list) [Europe/Paris]
Partitionnement et installation du système de base en mode BIOS
On commence par définir le disque de destination pour l’installation sd0, si vous avez un doute sur quel disque sélection vous pouvez les lister avec '?', ensuite la méthode de partitionnement du disque (MBR). Enfin, on sélectionne la proposition de partionnement automatique [a].
Available disks are: sdO. Encrypt the root disk? (disk, ‘no’ or ’?’ for details) [no]
Which disk is the root disk? (’?’ for details) [sd0]
Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [whole]
Setting OpenBSD MBR partition to whole sdO...done. The auto-allocated layout for sdO is:
# size offset fstype [fsize bsize cpg]
a: 1.0G 512 4.2B5SD 2048 16384 1 # /
b: 2.5G 2097664 Swap
c: 35 .0G O unused
d: 2.1G 7352384 4.2BSD 2048 16384 1 # /tmp
e: 3.2G 11670784 4.2B5D 2048 16384 1 # /var
f: 3.9G 18452736 4.2B5D 2048 16384 1 # /usr
g: 1.0G 26615584 4.2BSD 2048 16384 1 # /usr/X11R6
h: 4.6G 28712736 4.2BSD 2048 16384 1 # /usr/local
i: 2.0G 38446176 4.2BSD 2048 16384 1 # /usr/src
j: 6.0G 42536320 4.2BSD 2048 16384 1 # /usr/obj
k: 6.7G 55058400 4.2BSD 2048 16384 1 # /home
Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a]
Pour installer le système, nous devrons indiquer ou sont stockés les packages de base, dans cd0 en l’occurrence, ce qui correspont à nôtre ide0 PVE1:iso/install73.iso, enfin ont bypass la vérification SHAZ56.sig pour installer l’ensemble.
Let’s install the sets?
Location of sets? (cd0 disk http nfs or ’done’) [cd0]
Pathname to the sets? (Cor ’done’) [7.3/amd64]
Select sets by entering a set name, a file name pattern or ‘all’. De-select
sets by prepending a ’-’, e.g.: *-gamex’. Selected sets are labelled ’[X]’.
[X] bsd [X] base73.tgz [X] game73.tgz [X] xfont73.tgz
[X] bsd.mp [X] comp73.tgz [X] xbase73.tgz [X] xserv73.tgz
[X] bsd.rd [X] man73.tgz [X] xshare73.tgz
Set name(s)? (Cor ’abort’ or ’done’) [done]
Directory does not contain SHAZ56.sig. Continue without verification? [no] yes
Location of sets? (cdO disk http nfs or ’done’) [done]
CONGRATULATIONS! Your OpenBSD install has been successfully completedt
When you login to your new system the first time, please read your mail using the ’mail’ command.
Exit to (S)hell, (H)alt or (R)eboot? [reboot]
Partitionnement et installation du système de base en mode UEFI
On commence par définir le disque de destination pour l’installation sd0, si vous avez un doute sur quel disque sélection vous pouvez les lister avec '?', ensuite ont sélectionne la méthode de partitionnement en (GPT). Pour finir on sélectionne la proposition de partionnement automatique [a].
Available disks are: sdO. Encrypt the root disk? (disk, ‘no’ or ’?’ for details) [no]
Which disk is the root disk? (’?’ for details) [sd0] # ont défini içi le disque de destination pour l'installation
Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [gpt]
Setting OpenBSD MBR partition to whole sdO...done. The auto-allocated layout for sdO is:
# size offset fstype [fsize bsize cpg]
a: 1.0G 512 4.2B5SD 2048 16384 1 # /
b: 2.5G 2097664 Swap
c: 35 .0G O unused
d: 2.1G 7352384 4.2BSD 2048 16384 1 # /tmp
e: 3.2G 11670784 4.2B5D 2048 16384 1 # /var
f: 3.9G 18452736 4.2B5D 2048 16384 1 # /usr
g: 1.0G 26615584 4.2BSD 2048 16384 1 # /usr/X11R6
h: 4.6G 28712736 4.2BSD 2048 16384 1 # /usr/local
i: 2.0G 38446176 4.2BSD 2048 16384 1 # /usr/src
j: 6.0G 42536320 4.2BSD 2048 16384 1 # /usr/obj
k: 6.7G 55058400 4.2BSD 2048 16384 1 # /home
Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a]
Ont défini cette fois disk comme type d’emplacement pour le package-set ensuite dans la liste des disques disponible nous sélectionnerons le seul disque disponible n’étant pas sd0 en l’occurence wd0, ce qui correspont à nôtre ide0 PVE1:iso/install73.img. Et pour finir ont bypass la vérification SHAZ56.sig pour installer l’ensemble.
Let’s install the sets?
Location of sets? (cd0 disk http nfs or ’done’) [http] disk
Is the disk partition already mounted? [yes] no
Available disks are: sd0 sd1.
Which disk contains the install media? (or '‘done') [sd1]
a: 1358848 18624 4.2BSD 2048 16384 16142
i: 960 64 MSDOS
Available sd1 partitions are: a i.
which sd1 partition has the install sets? (or ‘done') [a]
Pathname to the sets? (or 'done') [7.3/amd64]
Select sets by entering a set name, a file name pattern or ‘all’. De-select
sets by prepending a ’-’, e.g.: *-gamex’. Selected sets are labelled ’[X]’.
[X] bsd [X] base73.tgz [X] game73.tgz [X] xfont73.tgz
[X] bsd.mp [X] comp73.tgz [X] xbase73.tgz [X] xserv73.tgz
[X] bsd.rd [X] man73.tgz [X] xshare73.tgz
Set name(s)? (Cor ’abort’ or ’done’) [done]
Directory does not contain SHAZ56.sig. Continue without verification? [no] yes
Location of sets? (cdO disk http nfs or ’done’) [done]
CONGRATULATIONS! Your OpenBSD install has been successfully completedt
When you login to your new system the first time, please read your mail using the ’mail’ command.
Exit to (S)hell, (H)alt or (R)eboot? [reboot]
Post installation
Concernant la VM BIOS vous pouvez directement l’éteindre et déconnecter le disque d’installation :
qm stop 109 && qm set 109 --delete ide0
qm start 109
Pour la VM UEFI je vous de recommande de simplement la redémarer depuis la console, et de ne pas retirer le disque d’installation (openbsd semble en avoir besoin au boot).
Une fois nos VMs re-démarrée, il faudra encore passer quelques configurations pour l’agent QEMU.
# Check de l'adresse IP (me sera utile pour passer le reste de la config via SSH)
ifconfig
# Installation de l'agent QEMU
pkg_add qemu-ga
# Configuration ISA QEMU Guest agent
cat <<'EOF' >> /etc/rc.conf.local
pkg_scripts=qemu_ga
qemu_ga_flags="-t /var/run/qemu-ga -m isa-serial -p /dev/cua00 -f /var/run/qemu-ga/qemu-ga.pid"
EOF
# Activation du service QEMU Guest agent
/etc/rc.d/qemu_ga stop && /etc/rc.d/qemu_ga start
Cloud-init et image “Cloud” d’OpenBSD
Maintenant venons en au douloureux sujet de la compatibilité entre OpenBSD et Cloud-init, officiellement OpenBSD ne propose pas d’image “Cloud” préconfiguré avec Cloud-init ni de package pour ce dernier. Cependant, divers projets proposent des implémentations non-officielle notamment ici https://bsd-cloud-image.org.
Voilà comment j’ai procédé :
je commence par créer mon template
qm create 112 \
--name obsd-ci \
--agent 1,type=isa \
--memory 2192 \
--bios seabios \
--boot order='scsi0' \
--sockets 1 --cores 2 \
--net0 virtio,bridge=vmbr0 \
--ide0 local-lvm:cloudinit \
--sshkey /root/.ssh/id_rsa.pub \
--scsihw virtio-scsi-pci \
--serial0 socket \
--vga serial0
Explications :
- sshkey /root/.ssh/id_rsa.pub : On importe notre clé SSH, ce qui nous assure un accès autre que la sortie SERIAL.
- serial0 socket & vga serial0 : ont défini l’affichage par défaut sur la sortie de la console série (configuration par défaut pour cloud-init).
- boot order=‘scsi0’ : On définit l’ordre de boot sur l’image cloud d’OpenBSD, que nous importerons ensuite dans notre configuration.
- ide0 local-lvm:cloudinit Emplacement du disque Cloud-init.
Je télécharge l’image Cloud d’OpenBSD depuis https://bsd-cloud-image.org, et je lance la commande pour l’importation.
wget -P /mnt/pve/PVE1/template/iso https://object-storage.public.mtl1.vexxhost.net/swift/v1/1dbafeefbd4f4c80864414a441e72dd2/bsd-cloud-image.org/images/openbsd/7.3/2023-04-22/ufs/openbsd-7.3-2023-04-22.qcow2
qm set 112 --scsi0 local-lvm:0,import-from=/mnt/pve/PVE1/template/iso/openbsd-7.3-2023-04-22.qcow2
Je crée mon fichier de configuration pour Cloud-init, comme je l’avais fait dans mon précédent article GPU passtrought sous Proxmox VE - Debian 12 (Part. 02x04) je vais stocker mon fichier de config dans ”/mnt/pve/PVE1/snippets”, rapport à ma configuration particulière (point de montage vers mon NAS). Dans votre cas préféré le chemin natif “/var/lib/vz/snippets”.
- On définit un nouvel utilisateur avec les droits super-utilisateur
- On importe notre clée ssh pour le nouvel utilisateur (n’est pas nécessaire, mais cela nous permet de conserver un accès SSH à notre VM au cas où)
- Enfin ont passe les dernières commandes de post installation dans la section runcmd. Attention cependant, comme la sortie console (pour cloud-init) occupe déja serial0 il nous faudra sélectionner un autre port série pour ISA en l’occurrence /dev/cua01.
cat << EOF >> /mnt/pve/PVE1/snippets/obsd73.yaml
#cloud-config
users:
- name: openbsd
gecos: openbsd
groups: wheel
ssh_authorized_keys:
$(cat /root/.ssh/authorized_keys | grep -E "^ssh" | xargs -iXX echo " - XX")
chpasswd:
expire: false
list:
- openbsd:PASSWORD
runcmd:
- pkg_add qemu-ga
- echo "pkg_scripts=qemu_ga" >> /etc/rc.conf.local
- echo 'qemu_ga_flags="-t /var/run/qemu-ga -m isa-serial -p /dev/cua01 -f /var/run/qemu-ga/qemu-ga.pid"' >> /etc/rc.conf.local
- /etc/rc.d/qemu_ga stop && /etc/rc.d/qemu_ga start
EOF
En plus de passer notre fichier de configuration, nous allons définir en supplément le type d’attribution IP avec les commandes.
qm set 112 --ipconfig0 ip=dhcp
qm set 112 --cicustom "vendor=PVE1:snippets/obsd73.yaml"
Dans votre cas, pour la dernière commande, utilisez plutôt (chemin par défaut pour le dossier “snippets”) :
qm set 112 --cicustom "vendor=local:snippets/obsd73.yaml"
Je fait un petit resize sur l’image QCOW2 puis on démarre la VM, et voilà une notre OpenBSD est prête à l’emploi.
qm resize 112 scsi0 +10G
qm start 112
Nous restons pour le moment sur cette configuration minimale, quant au support du PCI Passthrough et la gestion de templates, ce sera l’objet du prochain article.
Ressources :
- https://pve.proxmox.com/pve-docs/qm.1.html
- https://pve.proxmox.com/wiki/PCI_Passthrough
- https://pve.proxmox.com/wiki/PCI(e)_Passthrough
- https://pve.proxmox.com/pve-docs/chapter-qm.html#qm_bios_and_uefi
- https://docs.openstack.org/image-guide/obtain-images.html
- https://cloudinit.readthedocs.io/en/latest/reference/examples.html
- https://ftp.openbsd.org/pub/OpenBSD/7.3/amd64/INSTALL.amd64
- https://bsd-cloud-image.org
- https://undeadly.org/cgi?action=article;sid=20200514073852