Build de la template OpenWrt¶
Audience : administrateur Proxmox — opération à réaliser une seule fois avant le premier déploiement.
La commande labomatics template openwrt télécharge la dernière image OpenWrt officielle,
l'enrichit hors-ligne (mot de passe, SSH, NAT, HTTPS, cloud-init NoCloud)
et l'enregistre comme template Proxmox. Toutes les VMs déployées par labomatics en sont
des clones complets.
Stockage partagé — prérequis impératif¶
La template doit impérativement résider sur un stockage partagé entre tous les nœuds du cluster (Ceph RBD, NFS, ZFS over iSCSI…).
labomatics sélectionne dynamiquement le nœud de déploiement (celui avec le plus de mémoire libre). Si le stockage est local, le clone sera effectué sur le nœud source — ce qui concentre les déploiements sur un seul nœud.
Après la création de la template, vérifier qu'elle est visible depuis tous les nœuds via le stockage partagé.
Exécution¶
# En root sur un nœud Proxmox (vmid et storage lus depuis infra.yaml)
labomatics template openwrt
# Paramètres explicites
labomatics template openwrt --version 24.10.0 --vmid 90200 --storage zfs-store --password openwrt
Paramètres¶
| Option | Défaut | Description |
|---|---|---|
--version |
Dernière stable (auto-détecté) | Version OpenWrt à télécharger depuis downloads.openwrt.org |
--vmid |
infra.yaml → template_vmid |
VMID Proxmox (doit correspondre à template_vmid dans infra.yaml) |
--storage |
infra.yaml → storage |
Stockage partagé cible |
--password |
openwrt |
Mot de passe root injecté dans l'image |
Si la VM
vmidexiste déjà, la commande demande confirmation avant de la détruire.
La commande ajoute automatiquement la template au pool template (créé si absent).
Ce que la commande fait¶
1. Téléchargement de l'image¶
Dernière version stable détectée automatiquement depuis downloads.openwrt.org/releases/.
Image x86-64-generic-ext4-combined téléchargée via wget.
Le format ext4-combined contient deux partitions : boot (p1) et root (p2).
Seule p2 est montée via loop device — l'image n'est jamais démarrée.
2. Mot de passe root¶
Hash généré avec openssl passwd -1 (MD5-crypt) et injecté dans /etc/shadow
(fallback /etc/passwd). Tout se fait hors-ligne par montage de partition.
3. SSH (Dropbear)¶
Dropbear configuré sur le port 22 avec activation automatique au boot :
/etc/dropbear/dropbear.conf ← DROPBEAR_EXTRA_ARGS="-p 22"
/etc/rc.d/S50dropbear ← symlink vers /etc/init.d/dropbear
4. Certificat HTTPS auto-signé¶
Certificat RSA 2048 bits, valable 10 ans, généré et stocké dans l'image :
Utilisé par uhttpd (LuCI) pour servir HTTPS dès le premier boot.
5. Script uci-defaults 99-proxmox-init¶
Injecté dans /etc/uci-defaults/ — s'exécute automatiquement au premier boot
puis se supprime. Copie permanente conservée dans /etc/proxmox-init.sh.
Il effectue au premier boot :
- Lecture du drive cloud-init NoCloud (
/dev/sr0, injecté par Proxmox viaide2) user-data→ hostnamenetwork-config→ interfaces réseau (format Proxmox v1)-
Interface avec gateway →
network.wan/ sans gateway →network.lan -
Configuration uhttpd : écoute sur
0.0.0.0:80et0.0.0.0:443, utilise le certificat de l'étape 4, redirige HTTP → HTTPS. -
NAT (masquerade) : activé sur la zone WAN — les VMs du réseau LAN/VXLAN peuvent accéder à Internet via le routeur OpenWrt.
-
Règles firewall :
- HTTP/HTTPS (80, 443) autorisés depuis la zone WAN
-
SSH (22) autorisé depuis la zone WAN
-
SSH depuis WAN : Dropbear configuré pour écouter sur toutes les interfaces (y compris WAN) — accès SSH direct depuis le réseau du lab.
6. Création du template Proxmox¶
qm create <vmid> --memory 256 --cores 1 --net0 virtio,bridge=vmbr0 \
--serial0 socket --vga serial0 --ostype l26
qm importdisk <vmid> openwrt.img <storage>
# Le disk ID réel est lu depuis qm config (compatible tous types de stockage)
qm set <vmid> --virtio0 <disk_id>,discard=on,iothread=1 --boot order=virtio0
qm template <vmid>
# Ajout automatique au pool template
pvesh set /pools/template -vms <vmid>