No description
  • Shell 89.7%
  • Python 10.2%
  • PHP 0.1%
Find a file
cpetrault ab8236c2c2
🐛 Fix VM OPNsense ne démarrant pas au boot : onboot=1 dès la création
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'.
2026-05-20 18:38:43 +02:00
tests OPNsense passthrough router : install persistant + config auto via expect 2026-05-20 17:49:05 +02:00
tools apply_extras.py : exposer panel OPNsense sur WAN port 2227 2026-05-20 17:58:08 +02:00
.gitignore Add OPNsense passthrough router (menu option 6) + hot debug options 7/8 2026-05-19 11:40:37 +02:00
manual-install-via-vm.txt 🚀 First commit 2026-04-10 20:12:07 +02:00
README.md Mode rescue : déchiffrer + chroot dans un système installé (menu option 7) 2026-05-20 17:48:41 +02:00
setup.sh 🐛 Fix VM OPNsense ne démarrant pas au boot : onboot=1 dès la création 2026-05-20 18:38:43 +02:00

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 :

  1. Formatage des disques — Partitionnement + création des RAID + LUKS + LVM
  2. Installation de Debian 13debootstrap + paquets essentiels
  3. Configuration du système — Réseau, SSH (port 2222), Dropbear (port 2223), GRUB, initramfs
  4. 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 pool local_thin). À lancer après reboot sur le système installé. Deux phases (kernel swap + reboot, puis install proxmox-ve).
  5. Environnement utilisateur (root) — Paquets utilitaires + zsh + oh-my-zsh + starship.
  6. Démontage — Fermeture propre des volumes (umount, swapoff, luksClose)
  7. 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 un chroot interactif. À la sortie : démontage et fermeture LUKS automatiques (trap).
  8. 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.
  9. [debug] Restaurer l'hôte sur vmbr0 — À chaud, stoppe la VM OPNsense, rebind le driver natif sur la NIC publique, restaure /etc/network/interfaces en mode vmbr0. Opération temporaire : au prochain reboot, le système rebascule en mode OPNsense passthrough.
  10. [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 vmbr110.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 route cô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 :

  1. qm stop 100 ; qm destroy 100 --destroy-unreferenced-disks 1
  2. rm /etc/modprobe.d/vfio.conf /etc/modprobe.d/blacklist-*.conf
  3. Retirer intel_iommu=on iommu=pt (ou amd_iommu=on iommu=pt) de /etc/default/grub.
  4. Restaurer /etc/network/interfaces depuis un backup .bak.*.
  5. update-grub && update-initramfs -u && reboot.