Vagrant : Pourquoi Windows exige BOX_VERSION et BOX_ARCH ?
Par Nicolas DELAHAYE | v.1974 | Architecte Solution
ERROR: AMBIGUOUS_BOX_METADATA_FOUND
Voici un scénario que j'ai vécu (et vous aussi probablement) : je pousse mon code sur Git. Mon Vagrantfile est propre. Je fais un vagrant up sur mon Mac M3 : tout fonctionne.
Mon collègue sous Windows clone le repo, lance la même commande et... CRASH.
> No matching provider found. Please specify box_version and box_arch.
Pourquoi cette différence de traitement ? Pourquoi Windows est-il l'élève difficile de la classe ? La réponse se trouve dans les entrailles de l'OS.
1. Le fossé POSIX vs Windows
Pour comprendre, il faut revenir à la base. Linux et macOS sont des cousins : ils sont POSIX-compliant. Ils parlent la même langue (chemins de fichiers /, permissions, gestion des processus via fork/exec).
Windows est une bête différente (NTFS, chemins C:\, API Win32). Quand Vagrant essaie d'analyser le système pour "deviner" quoi faire, il se heurte à un mur de complexité sur Windows que Linux n'a pas.
2. L'art de la déduction (ou son absence)
Quand vous ne précisez rien dans le Vagrantfile, Vagrant doit faire un travail d'enquête (Inférence) :
Vagrant demande au noyau : "T'es qui ?".
Le noyau répond : "Je suis un Darwin arm64".
Vagrant regarde la Box : "J'ai une version compatible, je la prends."
👉 Succès automatique.
Vagrant fait face à plusieurs Hyperviseurs possibles (Hyper-V, VirtualBox, VMWare, WSL2). Les métadonnées système sont plus floues pour un outil né dans le monde Ruby/Linux.
Vagrant hésite : "Quelle architecture ? Quel Provider ? Quelle version exacte ?".
👉 Échec par prudence. Il vous demande de préciser.
3. Les coupables techniques
- Les Chemins de fichiers : Les métadonnées des Boxes sont stockées dans
C:\Users\VotreNom\.vagrant.d\.... Les espaces ou caractères spéciaux dans les chemins Windows cassent souvent la lecture automatique des fichiers JSON de configuration. - L'Architecture : Windows ne rapporte pas son architecture (amd64 vs arm64) de la même manière standardisée que
uname -msous Unix. Vagrant ne peut pas garantir que la Box téléchargée tournera sur votre CPU. - Les Providers : Sur Windows, la cohabitation Hyper-V et VirtualBox est notoirement complexe. Vagrant a besoin de savoir explicitement quelle version de Box correspond à quel moteur de virtualisation.
4. La Solution : Soyez Explicites (Best Practice)
Plutôt que de voir cela comme une contrainte Windows, voyez-le comme une discipline de reproductibilité.
En définissant ces variables, vous verrouillez votre environnement. Plus de "mise à jour magique" qui casse tout le lundi matin.
# Dans votre Vagrantfile config.vm.box = "ubuntu/jammy64" # Obligatoire pour Windows, recommandé pour tous : config.vm.box_version = "202401.01.0" config.vm.box_arch = "amd64"
// RÉFÉRENCES OFFICIELLES :