diff --git a/configs/releng/airootfs/usr/share/anaconda/interactive-defaults.ks b/configs/releng/airootfs/usr/share/anaconda/interactive-defaults.ks index 191ad0a..8050934 100644 --- a/configs/releng/airootfs/usr/share/anaconda/interactive-defaults.ks +++ b/configs/releng/airootfs/usr/share/anaconda/interactive-defaults.ks @@ -194,7 +194,47 @@ else echo "[FWS] AVERTISSEMENT : grub-install a échoué — bootloader à refaire à la main" fi -# --- 4) Bureau choisi : pacman -S du DE (non bloquant si pas de réseau) ------- +# --- 4) Drivers matériels : détection + activation/installation AUTO ---------- +# Toute la DÉTECTION vit dans /usr/local/bin/fws-hw-detect : livré par +# l'airootfs → recopié dans la cible par le payload liveimg → présent dans ce +# chroot. C'est la MÊME source de vérité que l'écran « Récapitulatif avant +# installation » du live (.xinitrc, mode --text) : ce qui a été ANNONCÉ à +# l'utilisateur = ce qu'on APPLIQUE ici. La détection marche en chroot car +# Anaconda bind-monte le /sys et le /proc du LIVE (le code plus haut s'appuie +# déjà dessus : /sys/firmware/efi, findmnt) → on voit le VRAI matériel. +# Variables produites par --env : +# FWS_VIRT hyperviseur (vmware/oracle/kvm/qemu/none…) +# FWS_VIRT_SVC services invité à activer (paquets DÉJÀ dans l'image → OK +# hors ligne ; c'était le chaînon manquant, rien n'activait +# vmtoolsd & co sur le système installé) +# FWS_VIRT_RM guest tools des AUTRES hyperviseurs, à purger +# FWS_DRV_PKGS paquets GPU à installer, dédoublonnés. NVIDIA embarque +# « linux » dans la même transaction : le module des dépôts +# est bâti pour le noyau des dépôts, pas celui du live ; les +# chemins /boot/* étant stables, le grub.cfg de l'étape 3 +# reste valable (le hook pacman de nvidia relance mkinitcpio). +# NB : microcode CPU (amd-ucode/intel-ucode) et linux-firmware sont DÉJÀ dans +# l'image → recopiés, et grub-mkconfig (étape 3) a généré les initrd qui vont +# bien. Rien à faire pour eux. +if [ -x /usr/local/bin/fws-hw-detect ]; then + eval "$(/usr/local/bin/fws-hw-detect --env)" + # (a) Hyperviseur : activer le bon service invité, purger les autres. + [ -n "$FWS_VIRT_SVC" ] && { systemctl enable $FWS_VIRT_SVC || true; } + [ -n "$FWS_VIRT_RM" ] && { pacman -Rns --noconfirm $FWS_VIRT_RM || true; } + # (b) GPU : install réseau, NON bloquante (même philosophie que le + # bureau). --needed : ne réinstalle pas ce que l'image a déjà (mesa…). + if [ -n "$FWS_DRV_PKGS" ]; then + pacman-key --init &>/dev/null || true + pacman-key --populate archlinux &>/dev/null || true + if ! pacman -Sy --noconfirm --needed $FWS_DRV_PKGS; then + echo "[FWS] Drivers non installés ($FWS_DRV_PKGS) — réseau ? À refaire au 1er boot." + fi + fi +else + echo "[FWS] fws-hw-detect introuvable — drivers/guest tools NON configurés." +fi + +# --- 5) Bureau choisi : pacman -S du DE (non bloquant si pas de réseau) ------- DESK="cli" [ -f /tmp/fws-desktop ] && DESK="$(tr -d '[:space:]' < /tmp/fws-desktop)" DM="" @@ -216,14 +256,14 @@ if [ -n "$PKGS" ]; then fi fi -# --- 5) Sécurité : verrouiller root s'il est resté SANS mot de passe ---------- +# --- 6) Sécurité : verrouiller root s'il est resté SANS mot de passe ---------- # L'airootfs live a souvent un root sans mot de passe ; si l'utilisateur n'en a # pas défini dans le GUI, on verrouille plutôt que de laisser le compte ouvert. if passwd -S root 2>/dev/null | grep -qE '\bNP\b'; then passwd -l root || true fi -# --- 6) Le resolv.conf du live ne doit pas rester figé ----------------------- +# --- 7) Le resolv.conf du live ne doit pas rester figé ----------------------- # NetworkManager (activé sur le système installé) régénère /etc/resolv.conf. rm -f /tmp/fws-desktop /etc/resolv.conf 2>/dev/null || true %end