Skip to content

[P1] Images de VM prêtes à l'emploi : démarrer sans installer l'environnement à la main #91

Description

@stephrobert

Contexte

La proposition ne vient pas de nous : un contributeur a déjà produit deux images et ouvert deux issues sur le catalogue Linux, en attente de réponse depuis le 27 juillet 2026.

Sa motivation, citée : « en suivant les labs l1, l'installation manuelle (Python, uv, dsoxlab, pytest...) peut être un frein pour un vrai débutant ». Il propose d'ouvrir une PR et demande où héberger les artefacts, sur son fork ou ici.

Sa question est restée sans réponse, et c'est le vrai coût aujourd'hui : quelqu'un a fait le travail et attend qu'on lui dise sous quelle forme le reprendre.

Pourquoi l'issue est ici et pas dans le catalogue

L'image embarque le moteur et ses prérequis (Python, uv, dsoxlab, l'hyperviseur, Terraform, ansible-runner), pas des labs. Elle est donc agnostique du domaine, au même titre que les templates Terraform et cloud-init déjà packagés ici.

Corollaire à tenir : l'image ne doit embarquer aucun catalogue. Y figer linux-dsoxlab-training en ferait une image Linux, et rejouerait l'anti-pattern « embarquer des templates de labs ». Le catalogue se choisit au premier démarrage, ce qui en fait le premier consommateur naturel de #78 (dsoxlab init).

Ce qui justifie vraiment l'image, et ce qui ne la justifie pas

À trancher explicitement, parce que le périmètre en dépend entièrement.

Pour un utilisateur Linux, l'image n'est pas la bonne réponse : uv tool install dsoxlab l'est (#70), et #72 lui donne un premier lab sans rien cloner. Fabriquer une image pour lui, c'est distribuer plusieurs gigaoctets pour éviter une commande.

Pour un utilisateur Windows ou macOS, l'image est la seule voie : pyproject.toml classe le projet en Operating System :: POSIX :: Linux, et ni KVM ni Incus n'existent sur ces systèmes. C'est là que se trouve la valeur, et probablement la majorité des apprenants d'une formation Linux, qui par définition n'ont pas encore de poste Linux.

Le périmètre proposé découle de ce constat : l'image cible d'abord Windows et macOS, et son README doit dire à un utilisateur Linux d'installer le paquet plutôt que de télécharger 5 Go.

Le point dur : la virtualisation imbriquée

C'est la question à instruire avant de produire quoi que ce soit, parce qu'elle décide de ce que l'image sait faire.

Les labs vm du catalogue Linux montent de vraies VMs via KVM ou Incus. Les faire tourner dans une VM VirtualBox ou VMware exige la virtualisation imbriquée, qui n'est ni universelle ni active par défaut :

  • VirtualBox : nested VT-x/AMD-V, dépend du CPU, et indisponible sur un Windows où Hyper-V ou WSL2 tient déjà l'hyperviseur.
  • VMware Workstation / Fusion : case « Virtualize Intel VT-x/EPT » à cocher, machine éteinte.
  • macOS Apple Silicon : ni VirtualBox ni KVM. Voie distincte (UTM/QEMU aarch64), et les images cloud x86 du catalogue n'y tournent pas nativement.

Deux issues de terrain rappellent que la marge est déjà mince même sans imbrication : linux-dsoxlab-training#36 rapporte un provisionnement qui expire sur un hôte à 2 vCPU / 4 Go, avec un hôte prêt à 181 secondes pour un délai de 180. Sous une couche de virtualisation supplémentaire, cette marge disparaît.

Il faut donc décider, et l'écrire dans le README de l'image :

  1. soit l'image ne sert que les labs shell, ce qui est honnête, immédiatement livrable, et couvre déjà les 87 labs de terraform-training et les 20 labs shell du catalogue Linux ;
  2. soit elle sert aussi les labs vm, et alors elle doit documenter l'activation de l'imbrication par hyperviseur, annoncer des prérequis matériels mesurés (pas estimés), et dsoxlab doctor doit détecter l'absence d'imbrication et le dire clairement au lieu de laisser un provision expirer.

Le point 2 impose au minimum un contrôle nouveau dans doctor : « virtualisation imbriquée indisponible, les labs vm ne peuvent pas tourner ici ».

Formats à produire

Par ordre de couverture décroissante, pas tous d'un coup :

Format Cible Remarque
OVA (OVF) VirtualBox et VMware Un seul artefact pour les deux écosystèmes : c'est le point de départ
qcow2 KVM/libvirt, Proxmox Utile aux formateurs qui hébergent des postes
VHDX Hyper-V Le cas Windows où VirtualBox est justement inutilisable
UTM / QEMU aarch64 macOS Apple Silicon Voie séparée, à évaluer avant de promettre
Vagrant box postes scriptés Optionnel

Construction et distribution

Construction reproductible, versionnée dans ce dépôt. Une image fabriquée à la main n'est régénérable par personne d'autre et pourrit à la première mise à jour. Une définition Packer en HCL, construite en CI, est la forme attendue.

Ne pas régresser sur la chaîne d'approvisionnement. Ce projet publie avec Trusted Publishing, attestations et provenance : distribuer plusieurs gigaoctets de binaire opaque sans preuve serait le maillon faible de tout l'édifice. Il faut donc SHA256SUMS, une attestation de build GitHub, et la publication sur les Releases du dépôt plutôt que sur un fork personnel.

Taille. Une OVA complète pèse facilement 2 à 6 Go, or une release GitHub plafonne à 2 Go par fichier. À trancher : compression, découpage, ou hébergement externe avec empreintes publiées ici.

Obsolescence. Une image figée sur une version de dsoxlab est périmée à la release suivante. Proposition : l'image embarque l'outillage, et met dsoxlab à jour au premier démarrage ; elle n'est republiée que lorsque sa base change (OS, hyperviseur, Terraform), pas à chaque version du moteur.

Critères d'acceptation

  • Une décision écrite sur le périmètre : labs shell seulement, ou labs vm inclus avec imbrication documentée.
  • Une définition de build reproductible versionnée dans ce dépôt, jouable par un tiers.
  • La construction tourne en CI et publie sur les Releases GitHub, pas sur un fork personnel.
  • Au moins le format OVA, importable dans VirtualBox et dans VMware, vérifié dans les deux.
  • SHA256SUMS publié et attestation de build attachée à la release.
  • L'image n'embarque aucun catalogue : le choix se fait au premier démarrage.
  • Un README d'image qui indique aux utilisateurs Linux d'installer le paquet plutôt que de télécharger l'image.
  • Des prérequis matériels mesurés (vCPU, RAM, disque), pas estimés, et vérifiés jusqu'à un dsoxlab check vert.
  • Si le périmètre inclut les labs vm : doctor détecte l'absence de virtualisation imbriquée et le nomme explicitement.
  • Une réponse apportée au contributeur sur les deux issues d'origine, quelle que soit la décision.

Lot

P1, lot 0.2.x. À instruire après #70 (installation en une commande), #72 (dsoxlab demo) et #78 (dsoxlab init) : ces trois-là réduisent le besoin sans le supprimer, et l'image doit s'appuyer sur init pour rester agnostique.

Dépend de : #70, #72, #78. Touche : #66 (parcours produit).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions