- Shell 89.7%
- Python 10.2%
- PHP 0.1%
Précédemment 'qm set --onboot 1' était fait uniquement en phase 3 finalize (et en self-heal phase 4). Si l'orchestration n'atteignait pas ces phases (interruption, install manuel sans relancer setup.sh), la VM restait avec onboot=0 et ne démarrait pas après reboot de l'hôte. Fix : ajouter --onboot 1 directement dans 'qm create' en phase 2. Comme ça l'autostart est garanti dès la naissance de la VM, indépendamment du reste du pipeline. Pour appliquer sur une VM existante : 'qm set 100 --onboot 1'. |
||
|---|---|---|
| tests | ||
| tools | ||
| .gitignore | ||
| manual-install-via-vm.txt | ||
| README.md | ||
| setup.sh | ||
Installation Debian + Proxmox — RAID 10 chiffré sur 4 NVMe
Scripts d'installation d'un système Debian 13 (Trixie) bare-metal, optionnellement converti en hyperviseur Proxmox VE 9, avec :
- RAID 10 sur 4 disques NVMe
- Chiffrement LUKS2 sur les partitions root et data
- LVM sur les volumes chiffrés
- Déverrouillage SSH distant via Dropbear (initramfs)
- Support UEFI avec ESP en RAID 1 (optionnel)
Schéma de partitionnement
| Partition | RAID | Filesystem | Point de montage | Taille |
|---|---|---|---|---|
| nvme*n1p1 | md100 R1 | FAT32 | /boot/efi | 512 Mo |
| nvme*n1p2 | md0 | ext4 | /boot | 2 Go |
| nvme*n1p3 | md1+LUKS2 | LVM → ext4 | / | 30 Go |
| nvme*n1p4 | md2+LUKS2 | LVM → ext4 | /data | reste |
LVM sur md1 (root chiffré) :
vg_root/lv_swap— swap (4 Go)vg_root/lv_root— racine (reste)
Contenu
- setup.sh — Script principal d'installation (menu interactif)
- manual-install-via-vm.txt — Instructions pour démarrer une VM QEMU afin d'installer Debian depuis un ISO via VNC
Prérequis
Le script doit être exécuté en root depuis un environnement live (ex. live USB Debian).
Paquets requis :
mdadm gdisk sgdisk wipefs dosfstools e2fsprogs cryptsetup lvm2 debootstrap
Utilisation
bash setup.sh
Le script présente un menu en 10 étapes :
- Formatage des disques — Partitionnement + création des RAID + LUKS + LVM
- Installation de Debian 13 —
debootstrap+ paquets essentiels - Configuration du système — Réseau, SSH (port 2222), Dropbear (port 2223), GRUB, initramfs
- Installation Proxmox VE 9 — Dépôt no-subscription, noyau pve, bridges (vmbr0 + vmbr1 isolé en
10.0.0.200/24), stockage LVM (lv_data + thin poollocal_thin). À lancer après reboot sur le système installé. Deux phases (kernel swap + reboot, puis install proxmox-ve). - Environnement utilisateur (root) — Paquets utilitaires + zsh + oh-my-zsh + starship.
- Démontage — Fermeture propre des volumes (umount, swapoff, luksClose)
- Mode rescue — déchiffrer et chroot — Depuis un live USB, ré-assemble les RAID, déverrouille les volumes LUKS, active LVM, détecte automatiquement le LV racine (Debian ou Proxmox), monte
/,/boot,/boot/efi+ pseudo-FS, puis lance unchrootinteractif. À la sortie : démontage et fermeture LUKS automatiques (trap). - Installation OPNsense (router gateway) — Passe la NIC publique en passthrough PCI à une VM OPNsense, bascule l'hôte sur vmbr1. Quatre phases auto-détectées : (1) IOMMU + vfio + reboot, (2) création VM OPNsense + injection config.xml + démarrage, (3) bascule réseau de l'hôte (point de non-retour), (4) récapitulatif et self-healing si la VM est déjà en place. Saisies interactives du plan LAN (subnet, IPs, plage DHCP, mot de passe root OPNsense). WAN OPNsense en DHCP. Accès console hors-bande obligatoire : en cas de panne d'OPNsense, l'hôte est inaccessible à distance.
- [debug] Restaurer l'hôte sur vmbr0 — À chaud, stoppe la VM OPNsense, rebind le driver natif sur la NIC publique, restaure
/etc/network/interfacesen mode vmbr0. Opération temporaire : au prochain reboot, le système rebascule en mode OPNsense passthrough. - [debug] Rebasculer l'hôte sur vmbr1 — Inverse de l'option 9. À chaud, unbind le driver natif, rebind vfio-pci, démarre la VM OPNsense et bascule l'hôte sur vmbr1.
Attention : L'étape 1 efface définitivement toutes les données sur les 4 disques NVMe.
Installation via VM (optionnel)
Si la machine cible ne dispose pas d'un environnement live, il est possible de démarrer une VM QEMU sur l'hôte avec accès direct aux disques NVMe, en se connectant via VNC sur 127.0.0.1:0.
Voir manual-install-via-vm.txt pour la commande complète.
Configuration par défaut
| Paramètre | Valeur |
|---|---|
| Hostname | debian-raid |
| Locale | fr_FR.UTF-8 |
| Timezone | Europe/Paris |
| Port SSH | 2222 |
| Port Dropbear | 2223 |
| Swap | 4 Go |
| Dépôt Proxmox | pve-no-subscription |
| Bridge interne | vmbr1 — 10.0.0.200/24 |
| Stockage VM | local-thin (LVM-Thin) + local-data (Directory) |
| Release Debian | trixie |
| VM OPNsense | VMID 100 / nom opnsense / WAN DHCP / LAN saisi à l'exécution |
Tests option 8 (OPNsense)
Pré-vol
- BIOS : confirmer que VT-d / AMD-Vi est activé avant de lancer l'option 8.
- Accès console hors-bande (IPMI / IDRAC / iLO / KVM IP) disponible.
Phase 1 (après reboot)
dmesg | grep -i -e DMAR -e IOMMU
lspci -nnk -s <pci_id> # doit afficher: Kernel driver in use: vfio-pci
cat /proc/cmdline # doit contenir intel_iommu=on (ou amd_iommu=on) + iommu=pt
Phase 2
- Console VNC de la VM OPNsense (interface Proxmox) : au boot, OPNsense doit afficher les IPs WAN/LAN.
- Depuis l'hôte :
ping <lan_gw_opnsense>doit répondre. curl -sk https://<lan_gw_opnsense>/doit renvoyer un code 200/302.
Phase 3
- Depuis un poste sur le LAN OPNsense :
ssh -p 2222 root@<host_ip_vmbr1>. ip routecôté hôte : default via<lan_gw_opnsense>dev vmbr1.
Options 9 / 10 (réversibilité)
Enchaîner 10 → 9 → 10 → 9 pour valider que la NIC peut être rebind dans les deux sens sans reboot.
Tests unitaires des helpers
bash tests/run.sh
Désinstallation complète
Non automatisée. Procédure manuelle :
qm stop 100 ; qm destroy 100 --destroy-unreferenced-disks 1rm /etc/modprobe.d/vfio.conf /etc/modprobe.d/blacklist-*.conf- Retirer
intel_iommu=on iommu=pt(ouamd_iommu=on iommu=pt) de/etc/default/grub. - Restaurer
/etc/network/interfacesdepuis un backup.bak.*. update-grub && update-initramfs -u && reboot.