This repository has been archived on 2026-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
Set-OPS/docs/procedure-template-debian13-proxmox.md

818 lines
18 KiB
Markdown
Raw Permalink Normal View History

# Procédure manuelle — VM Debian 13 vanille pour Proxmox
2026-06-19 23:31:49 -04:00
## Objet du document
Ce document décrit le travail manuel à effectuer pour créer une VM Debian 13 vanille dans Proxmox, jusquau moment où elle peut être prise en charge par Set-OPS.
2026-06-19 23:31:49 -04:00
Le résultat attendu est une VM minimale, sobre, joignable en SSH, capable d'installer des paquets depuis les dépôts Debian, compatible avec cloud-init et prête à recevoir le playbook de préparation du golden template.
2026-06-19 23:31:49 -04:00
Ce document sarrête au point de bascule vers le `Makefile`.
Les ajouts appliqués ensuite par Ansible, leur validation et leur justification sont documentés dans :
```text
docs/modeles_vm/debian13-proxmox.md
```
2026-06-19 23:31:49 -04:00
---
## 1. Objectif du modèle
Le modèle Debian 13 doit servir de base commune pour les futurs serveurs de l_instance
2026-06-19 23:31:49 -04:00
Objectifs :
- système Debian 13 minimal ;
- aucun environnement graphique ;
- SSH actif ;
- `qemu-guest-agent` installé ;
- `cloud-init` installé ;
- disque CloudInit Proxmox attaché ;
- compte technique `ansible` injecté par cloud-init ;
- clé publique SSH injectée par cloud-init ;
- `ansible` autorisé à utiliser sudo ;
2026-06-19 23:31:49 -04:00
- partitionnement simple et agrandissable ;
- aucune partition swap bloquant la croissance du disque ;
- aucune donnée propre à une VM finale ;
- aucune clé privée ;
- aucun secret ;
- prêt à être converti en template Proxmox.
---
## 2. Création de la VM dans Proxmox
### Paramètres généraux
Créer une nouvelle VM dans Proxmox avec des paramètres sobres.
Exemple :
```text
Nom de la VM : debian13-template
VMID : 9000 ou autre ID réservé aux modèles
OS : Debian 13
BIOS : OVMF / UEFI
Machine : q35
```
### Disque EFI Proxmox
Avec OVMF/UEFI, Proxmox crée un petit disque EFI, par exemple :
```text
efidisk0 : 4 Mo
```
Ce disque ne remplace pas la partition EFI de Debian.
Il sert à conserver les variables du firmware UEFI virtuel :
- ordre de démarrage ;
- entrées de boot ;
- variables UEFI ;
- paramètres liés à Secure Boot, si utilisé.
Il faut le garder.
---
## 3. Disque virtuel principal
### Type de disque
Pour une VM Linux moderne :
```text
Bus/Device : SCSI
SCSI Controller : VirtIO SCSI single
IO thread : activé si disponible
Cache : Default / No cache
Discard : selon stockage, seulement si pertinent
SSD emulation : oui si le stockage est réellement SSD/NVMe
```
Même si le stockage réel est sur un stockage réseau iSCSI, le disque présenté à la VM doit rester :
2026-06-19 23:31:49 -04:00
```text
SCSI via VirtIO SCSI single
```
Le choix SCSI ici concerne le bus virtuel vu par la VM, pas le protocole réel entre Proxmox et le stockage.
2026-06-19 23:31:49 -04:00
### Taille du disque
Pour le modèle de base :
```text
Disque : 16 Go
```
Cest suffisant pour une base Debian minimale.
Des clones pourront ensuite être agrandis avant le premier démarrage cloud-init.
---
## 4. Processeur
Pour un modèle portable entre plusieurs hôtes Proxmox :
```text
CPU Type : x86-64-v2-AES
Sockets : 1
Cores : 2
```
Éviter `host` pour un modèle générique, sauf si tous les nœuds Proxmox sont strictement homogènes et que la portabilité nest pas une priorité.
---
## 5. Mémoire
Pour le modèle Debian 13 minimal :
```text
Mémoire : 2048 MiB
```
Le ballooning peut être activé, mais si la VM na pas de swap, éviter de descendre trop bas.
Réglage prudent :
```text
RAM max : 2048 MiB
RAM minimum : 1536 MiB ou 2048 MiB
```
Pour un modèle simple, il est acceptable de laisser 2048 MiB fixe.
---
## 6. Carte graphique virtuelle
Pour un serveur Debian minimal :
```text
Display : Default / Standard VGA
```
Ne pas installer denvironnement graphique.
SPICE et VirtIO-GPU ne sont pas nécessaires pour un modèle serveur administré par SSH et Ansible.
---
## 7. Installation Debian 13
Démarrer la VM sur lISO Debian 13.
Loption `Graphical install` est acceptable : elle ne signifie pas quun environnement graphique sera installé. Elle ne concerne que linterface de linstallateur.
---
## 8. Partitionnement
### Objectif
Le disque doit rester facile à agrandir après clonage.
Ne pas créer de partition swap à la fin du disque, car cela bloquerait lagrandissement direct de la partition racine avec `growpart`.
### Partitionnement recommandé
Utiliser un partitionnement manuel :
```text
/dev/sda1 EFI System Partition 512 Mo FAT32 /boot/efi
/dev/sda2 Linux root reste ext4 /
```
Ne pas créer :
```text
partition swap
LVM
/home séparé
/var séparé
```
### Pourquoi éviter LVM dans le modèle
Le stockage réel contient déjà plusieurs couches :
```text
stockage ZFS
2026-06-19 23:31:49 -04:00
→ zvol iSCSI
→ Proxmox
→ disque virtuel
→ Debian
```
Ajouter LVM dans la VM complique le modèle sans bénéfice clair pour une base minimale.
### Pourquoi éviter la partition swap
Un exemple à éviter :
```text
/dev/sda1 EFI
/dev/sda2 /
/dev/sda3 swap
```
Si le disque est agrandi plus tard, lespace libre sera après la swap. La partition `/` ne sera donc plus la dernière partition, ce qui complique ou empêche lusage direct de :
```bash
growpart /dev/sda 2
resize2fs /dev/sda2
```
### Swap
Pour le modèle :
```text
Swap : aucun
```
Lavertissement de Debian au sujet de labsence de swap peut être ignoré.
Si un clone a besoin de swap plus tard, utiliser plutôt :
- un swapfile ;
- ou un deuxième disque virtuel dédié au swap.
Exemple de swapfile futur :
```bash
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
```
---
## 9. Choix du noyau Debian
Si linstallateur demande quel noyau installer, choisir :
```text
linux-image-amd64
```
Ne pas choisir une version fixe du noyau sauf besoin très particulier.
Le méta-paquet `linux-image-amd64` suivra les mises à jour normales de Debian.
---
## 10. Image initrd
Si linstallateur demande le type dimage initrd, choisir :
```text
image générique : comporte tous les pilotes disponibles
```
Cest le meilleur choix pour un modèle Proxmox, car la VM doit rester portable même si certains paramètres virtuels changent plus tard.
---
## 11. Sélection des logiciels Debian
Dans lécran de sélection des logiciels, cocher seulement :
```text
[x] serveur SSH
[x] utilitaires usuels du système
```
Laisser décoché :
```text
[ ] environnement de bureau Debian
[ ] GNOME
[ ] KDE Plasma
[ ] XFCE
[ ] LXDE
[ ] LXQt
[ ] MATE
[ ] serveur web
[ ] serveur dimpression
```
Le serveur web, les rôles applicatifs et les services métier seront installés plus tard par Ansible.
---
## 12. Premier démarrage après installation
Après linstallation, démarrer la VM et se connecter en console ou par SSH.
Passer root si le compte root est disponible :
2026-06-19 23:31:49 -04:00
```bash
su -
```
ou, si sudo est déjà disponible :
```bash
sudo -i
```
Toutes les commandes de bootstrap suivantes sont exécutées dans la VM.
---
## 13. Réparer APT après installation DVD
Si Debian a été installé depuis l'ISO/DVD complet, APT peut garder une source `cdrom:`. Dans ce cas, `apt update` ou `apt install` échoue parce que le système cherche les paquets sur le média d'installation plutôt que sur les miroirs Debian.
Vérifier les sources :
```bash
grep -R "^[[:space:]]*deb cdrom:" /etc/apt/sources.list /etc/apt/sources.list.d 2>/dev/null || true
```
Si une ligne `deb cdrom:` est présente, la commenter ou la retirer.
Configuration simple attendue pour Debian 13 :
```bash
cat > /etc/apt/sources.list <<'EOF'
deb http://deb.debian.org/debian trixie main contrib non-free-firmware
deb http://security.debian.org/debian-security trixie-security main contrib non-free-firmware
deb http://deb.debian.org/debian trixie-updates main contrib non-free-firmware
EOF
```
Si l'installation a créé des fichiers `.sources` sous `/etc/apt/sources.list.d/`, vérifier qu'ils ne contredisent pas cette configuration et qu'ils ne pointent pas vers `cdrom:`.
Vérifier le réseau avant de continuer :
```bash
ip route
cat /etc/resolv.conf
ping -c 3 1.1.1.1
ping -c 3 deb.debian.org
```
Résultat attendu :
```text
une route par défaut existe
un serveur DNS est configuré
le ping IP fonctionne
la résolution DNS fonctionne
```
2026-06-19 23:31:49 -04:00
---
## 14. Mise à jour du système
2026-06-19 23:31:49 -04:00
Exécuter :
```bash
apt update
apt full-upgrade -y
```
---
## 15. Paquets de bootstrap
2026-06-19 23:31:49 -04:00
Installer seulement les paquets nécessaires pour que Set-OPS puisse prendre le relais :
2026-06-19 23:31:49 -04:00
```bash
apt install -y \
sudo \
openssh-server \
2026-06-19 23:31:49 -04:00
qemu-guest-agent \
cloud-init \
cloud-guest-utils \
ca-certificates \
curl \
2026-06-19 23:31:49 -04:00
vim \
nano
2026-06-19 23:31:49 -04:00
```
Rôle des paquets principaux :
```text
sudo : délégation administrative
openssh-server : accès distant initial
2026-06-19 23:31:49 -04:00
qemu-guest-agent : communication Proxmox ↔ VM
cloud-init : personnalisation au premier boot du clone
cloud-guest-utils : fournit notamment growpart
```
Les autres paquets communs, outils de diagnostic, chrony et composants de durcissement sont installés ensuite par `make preparer-modele`.
2026-06-19 23:31:49 -04:00
---
## 16. Activation du QEMU Guest Agent
2026-06-19 23:31:49 -04:00
Activer le service :
```bash
systemctl enable --now qemu-guest-agent
```
Vérifier :
```bash
systemctl status qemu-guest-agent --no-pager
```
Dans Proxmox, activer aussi :
```text
VM → Options → QEMU Guest Agent → Enabled
```
---
## 17. Identité initiale par Cloud-Init
2026-06-19 23:31:49 -04:00
À partir d'ici, ne pas créer manuellement le compte `ansible` ni son fichier `authorized_keys`, sauf dépannage.
2026-06-19 23:31:49 -04:00
L'identité initiale doit venir de Proxmox + Cloud-Init :
2026-06-19 23:31:49 -04:00
```text
Proxmox : ciuser, clé SSH, réseau, DNS
Debian : cloud-init applique ces paramètres au démarrage
Ansible : configure ensuite le vrai socle du serveur
2026-06-19 23:31:49 -04:00
```
Cette séparation évite de maintenir deux méthodes concurrentes pour créer le même accès.
2026-06-19 23:31:49 -04:00
### Ajouter le CloudInit Drive
2026-06-19 23:31:49 -04:00
Éteindre la VM :
2026-06-19 23:31:49 -04:00
```bash
shutdown -h now
2026-06-19 23:31:49 -04:00
```
Dans Proxmox :
2026-06-19 23:31:49 -04:00
```text
VM → Hardware → Add → CloudInit Drive
2026-06-19 23:31:49 -04:00
```
Ou en ligne de commande Proxmox :
2026-06-19 23:31:49 -04:00
```bash
qm set VMID --ide2 STORAGE:cloudinit
2026-06-19 23:31:49 -04:00
```
Exemple :
2026-06-19 23:31:49 -04:00
```bash
qm set 9000 --ide2 local-lvm:cloudinit
2026-06-19 23:31:49 -04:00
```
Le nom exact du stockage dépend de la configuration Proxmox.
2026-06-19 23:31:49 -04:00
### Définir les paramètres Cloud-Init du modèle
2026-06-19 23:31:49 -04:00
Pour la VM qui deviendra le modèle, utiliser une identité technique minimale, pas une identité de serveur final.
2026-06-19 23:31:49 -04:00
Exemple DHCP :
2026-06-19 23:31:49 -04:00
```bash
qm set 9000 --ciuser ansible
qm set 9000 --sshkeys ~/.ssh/id_ed25519.pub
qm set 9000 --ipconfig0 ip=dhcp
2026-06-19 23:31:49 -04:00
```
Exemple IP statique temporaire pour joindre la VM de modèle :
2026-06-19 23:31:49 -04:00
```bash
qm set 9000 --ciuser ansible
qm set 9000 --sshkeys ~/.ssh/id_ed25519.pub
qm set 9000 --ipconfig0 ip=10.0.99.99/24,gw=10.0.99.1
qm set 9000 --nameserver 10.0.99.1
2026-06-19 23:31:49 -04:00
```
Pour les clones, ces valeurs seront remplacées par l'identité réelle du serveur.
2026-06-19 23:31:49 -04:00
### Réinitialiser l'état Cloud-Init avant le test
2026-06-19 23:31:49 -04:00
Comme `cloud-init` vient d'être installé après le premier démarrage Debian, nettoyer son état avant de tester l'injection Proxmox :
2026-06-19 23:31:49 -04:00
```bash
cloud-init clean --logs
reboot
2026-06-19 23:31:49 -04:00
```
Au redémarrage, cloud-init doit appliquer le `ciuser`, la clé SSH et les paramètres réseau.
2026-06-19 23:31:49 -04:00
---
## 18. SSH et sudo après Cloud-Init
2026-06-19 23:31:49 -04:00
### Tester la connexion par clé
2026-06-19 23:31:49 -04:00
Depuis le poste d'administration :
2026-06-19 23:31:49 -04:00
```bash
ssh -o PreferredAuthentications=publickey ansible@IP_DE_LA_VM
2026-06-19 23:31:49 -04:00
```
Résultat attendu : la connexion fonctionne sans saisir le mot de passe du compte `ansible`.
2026-06-19 23:31:49 -04:00
### Vérifier sudo
2026-06-19 23:31:49 -04:00
Tester :
2026-06-19 23:31:49 -04:00
```bash
sudo -v
2026-06-19 23:31:49 -04:00
```
```bash
sudo -n true && echo OK
2026-06-19 23:31:49 -04:00
```
Le résultat attendu est `OK`. Le flux `make` ne demande pas de mot de passe interactif.
2026-06-19 23:31:49 -04:00
### Correction minimale si sudo manque
2026-06-19 23:31:49 -04:00
Si cloud-init a créé `ansible` sans privilège sudo, corriger seulement ce point depuis la console Proxmox ou un compte administrateur existant :
2026-06-19 23:31:49 -04:00
```bash
usermod -aG sudo ansible
2026-06-19 23:31:49 -04:00
```
Puis retester `sudo -v` avec le compte `ansible`.
2026-06-19 23:31:49 -04:00
Ne pas créer manuellement `/home/ansible/.ssh/authorized_keys` dans le flux normal. Si la clé ne fonctionne pas, corriger les paramètres Cloud-Init dans Proxmox, puis relancer :
2026-06-19 23:31:49 -04:00
```bash
cloud-init clean --logs
reboot
2026-06-19 23:31:49 -04:00
```
---
## 19. SSH durci attendu
2026-06-19 23:31:49 -04:00
Le modèle suppose que Cloud-Init injecte le `ciuser` et sa clé publique avant la prise en charge par Ansible.
2026-06-19 23:31:49 -04:00
L'exigence immédiate est que l'accès par clé fonctionne pour `ansible`.
2026-06-19 23:31:49 -04:00
L'état final sera appliqué et validé par Set-OPS :
2026-06-19 23:31:49 -04:00
```text
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey
2026-06-19 23:31:49 -04:00
```
Ne pas lancer le playbook de préparation tant que l'accès SSH par clé ne fonctionne pas.
2026-06-19 23:31:49 -04:00
---
## 20. Vérifications avant passage à Set-OPS
2026-06-19 23:31:49 -04:00
Redémarrer la VM une dernière fois si nécessaire, puis vérifier :
```bash
lsblk
df -h
swapon --show
ip a
hostnamectl
timedatectl
systemctl status ssh --no-pager
systemctl status qemu-guest-agent --no-pager
cloud-init --version
```
État attendu :
```text
/boot/efi présent
/ sur ext4
aucun swap actif
qemu-guest-agent actif
ssh actif
cloud-init installé
compte ansible fonctionnel
connexion SSH par clé fonctionnelle
sudo fonctionnel pour ansible
CloudInit Drive présent côté Proxmox
2026-06-19 23:31:49 -04:00
```
---
## 21. Point de bascule vers Set-OPS
2026-06-19 23:31:49 -04:00
À partir de ce point, ne pas continuer manuellement la configuration du socle. Utiliser le `Makefile` depuis le dépôt Set-OPS.
2026-06-19 23:31:49 -04:00
Depuis le poste Ansible :
2026-06-19 23:31:49 -04:00
```bash
make preparer-modele
make verifier-modele
2026-06-19 23:31:49 -04:00
```
Le cleanup final est séparé et protégé :
2026-06-19 23:31:49 -04:00
```bash
make nettoyer-modele CONFIRMER=true
2026-06-19 23:31:49 -04:00
```
Ne pas lancer le cleanup final tant que `make verifier-modele` n'a pas réussi.
2026-06-19 23:31:49 -04:00
---
2026-06-19 23:31:49 -04:00
## 22. Dépannage du bootstrap initial
| Symptôme | Cause probable | Correction |
| --- | --- | --- |
| `apt install` demande le DVD | Source APT `cdrom:` encore active. | Refaire la section 13 et relancer `apt update`. |
| `Temporary failure resolving deb.debian.org` | DNS absent ou incorrect. | Vérifier `/etc/resolv.conf`, Proxmox cloud-init DNS, passerelle et réseau. |
| `Network is unreachable` | Pas de route par défaut. | Vérifier l'IP, la passerelle et `ip route`. |
| SSH refuse la clé | Clé Cloud-Init absente, mauvais `ciuser`, ou cloud-init déjà initialisé avant l'ajout des paramètres. | Corriger les paramètres Proxmox, puis `cloud-init clean --logs` et redémarrer. |
| `sudo: a password is required` | Sudo NOPASSWD pas encore posé. | Corriger sudo NOPASSWD pour `ansible`, puis relancer `make preparer-modele`. |
| `ansible is not in the sudoers file` | Le compte a été créé par Cloud-Init sans privilège sudo. | Ajouter seulement `ansible` au groupe `sudo`, puis laisser Set-OPS gérer NOPASSWD. |
| Cloud-init sans effet | `cloud-init` absent au premier boot concerné, disque CloudInit absent, ou VM déjà initialisée. | Installer `cloud-init`, ajouter le CloudInit Drive, corriger les paramètres Proxmox, puis `cloud-init clean --logs` et redémarrer. |
---
## 23. Nettoyage avant conversion en template
Le nettoyage est fait par Set-OPS, pas à la main, sauf diagnostic exceptionnel.
Commande attendue :
2026-06-19 23:31:49 -04:00
```bash
make nettoyer-modele CONFIRMER=true
2026-06-19 23:31:49 -04:00
```
Ce nettoyage peut inclure :
2026-06-19 23:31:49 -04:00
```text
cloud-init clean --logs
nettoyage du cache APT
rotation ou purge contrôlée des journaux
remise à zéro de /etc/machine-id
suppression des historiques shell
2026-06-19 23:31:49 -04:00
```
---
## 24. Point darrêt : VM prête à convertir
2026-06-19 23:31:49 -04:00
À ce stade, la VM doit être arrêtée.
Elle est prête à être convertie en template Proxmox.
État attendu côté Proxmox :
```text
VM arrêtée
BIOS OVMF / UEFI
Machine q35
EFI Disk présent
Disque principal SCSI / VirtIO SCSI single
CloudInit Drive présent
QEMU Guest Agent activé dans les options
CPU x86-64-v2-AES
RAM 2048 MiB
Aucun environnement graphique
```
État attendu côté Debian :
```text
Debian 13 minimal
SSH installé
qemu-guest-agent installé
cloud-init installé
cloud-guest-utils installé
sudo installé
compte ansible injecté par cloud-init
clé publique SSH injectée par cloud-init
sudo NOPASSWD pour ansible après préparation Set-OPS
2026-06-19 23:31:49 -04:00
partition EFI 512 Mo
partition / ext4
aucune partition swap
aucun LVM
machine-id nettoyé
cloud-init nettoyé
apt cache nettoyé
VM éteinte
```
---
## 25. Conversion en template Proxmox
2026-06-19 23:31:49 -04:00
Cette commande nest exécutée quaprès validation finale :
```bash
qm template VMID
```
Exemple :
```bash
qm template 9000
```
À partir de là, le modèle peut être cloné.
---
## 26. Flux normal après conversion
Après conversion du modèle, le flux normal passe par `make` et l'API Proxmox.
2026-06-19 23:31:49 -04:00
Les paramètres communs Proxmox sont dans :
2026-06-19 23:31:49 -04:00
```text
instance/inventories/lab/group_vars/proxmox.yml
```
Les secrets d'API doivent être dans un fichier Vault non versionné :
```text
instance/inventories/lab/group_vars/proxmox.vault.yml
```
Créer le clone et l'ajouter à l'inventaire :
```text
1. Cloner le template via l'API Proxmox.
2. Agrandir le disque si demandé.
3. Définir l'identité Cloud-Init.
2026-06-19 23:31:49 -04:00
4. Démarrer la VM.
5. Ajouter l'hôte à l'inventaire Set-OPS.
2026-06-19 23:31:49 -04:00
```
Exemple :
```bash
make creer-vm HOTE=web-frontal-01
2026-06-19 23:31:49 -04:00
```
Les paramètres par VM (VMID, IP, VLAN, passerelle) ne sont plus saisis à la main : `creer-vm` les lit dans l'inventaire généré depuis le plan. L'hôte doit donc être déclaré dans `instance/plan/serveurs.yml` et l'inventaire régénéré (`make instancier-appliquer`) au préalable.
Après le premier démarrage, tester l'accès :
2026-06-19 23:31:49 -04:00
```bash
ssh ansible@10.0.15.31
2026-06-19 23:31:49 -04:00
```
Ensuite appliquer la conformité Ansible :
2026-06-19 23:31:49 -04:00
```bash
make deployer HOTE=web-frontal-01
2026-06-19 23:31:49 -04:00
```
---
## 27. Résumé court
2026-06-19 23:31:49 -04:00
La VM vanille idéale est simple :
2026-06-19 23:31:49 -04:00
```text
Debian 13 minimal
UEFI / OVMF
q35
SCSI / VirtIO SCSI single
16 Go
2 Go RAM
2 cores
partition EFI 512 Mo
partition / ext4
pas de LVM
pas de swap
SSH
sudo
qemu-guest-agent
cloud-init
cloud-guest-utils
CloudInit Drive Proxmox
ciuser ansible défini dans Proxmox
clé publique SSH définie dans Proxmox
sudo fonctionnel pour ansible
APT réseau fonctionnel
2026-06-19 23:31:49 -04:00
```
La philosophie :
```text
Proxmox crée la VM.
Cloud-init donne son identité au clone.
Ansible configure le vrai serveur.
Set-OPS documente et automatise lensemble.
```