Files
system_update/docs/design/tache2/60-profils-os-machine.md
T
gilles 0fbca06d3d docs: roadmap tâches 1.9-8 (briefs, gates de validation, designs tâche 2) + plans d'implémentation
Cartographie complète (liste_taches/coherence_taches), briefs tacheN + gates
validation_tacheN, design tâche 2 (docs/design/tache2/), specs/plans jalon 1-2
et tâche 1.9/2 (Phase 1, Phase 2, SJ-0→3). Validations consignées (1.9 , 2-8 🟡).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 19:50:25 +02:00

7.5 KiB

60 — Profils OS, type machine, overrides et proxy APT

Axe A + livrables §4.5/§4.6. Tranche §3.2 (structure profils OS) et §3.3 (profils machine). Couvre la grille §7 (« Profils OS et type de machine »).


1. Deux dimensions distinctes

  • os_family : debian | ubuntu | proxmox | raspbian | unknown (quelle distro / quel jeu de dépôts et de commandes).
  • machine_kind : physical | vm | proxmox_host | lxc | raspberry_pi | workstation | unknown (quel matériel / quels scripts pertinents : firmware, drivers, guest tools…).

Les deux sont orthogonaux : une Debian peut être physique, VM ou LXC ; un Raspberry Pi OS implique presque toujours raspberry_pi. Choisis manuellement à l'ajout, corrigeables par machine_probe. Stockés dans machines.os_family / machine_kind / virtualization / hardware_profile (tache1.9.md §5).


2. Arborescence des templates et héritage (décision §3.2)

Convention de dossier + fallback base. Le moteur de rendu choisit le template le plus spécifique disponible, sinon retombe sur le profil générique.

templates/
├── apt/                       # profil "base" (Debian/Ubuntu générique — jalon 1)
│   ├── update-analyze.sh.tpl
│   ├── upgrade.sh.tpl
│   ├── full-upgrade.sh.tpl
│   ├── autoremove.sh.tpl
│   ├── clean.sh.tpl
│   ├── reboot-check.sh.tpl
│   └── reboot.sh.tpl
├── proxmox/                   # overrides Proxmox (dépôts PVE, kernel, Ceph)
│   ├── update-analyze.sh.tpl
│   └── full-upgrade.sh.tpl
├── raspbian/                  # overrides Raspberry Pi OS (firmware, espace disque)
│   ├── update-analyze.sh.tpl
│   └── full-upgrade.sh.tpl
├── docker/
│   └── *.sh.tpl
└── custom/
    └── *.sh.tpl

Résolution (pseudo-code backend) :

resolveTemplate(action, osFamily):
  candidate = templates/<osFamily>/<action>.sh.tpl
  if exists(candidate): return candidate
  return templates/apt/<action>.sh.tpl          # fallback base

Pourquoi pas un héritage par fragments/includes Mustache ? Plus simple à auditer en Git (un fichier = un script complet, lisible et testable). Inconvénient : duplication partielle entre profils — accepté au MVP (peu de profils). Alternative notée en §3.2 de 90-questions-investigation.md.

Non-régression jalon 1 : Debian/Ubuntu n'ont pas de dossier dédié ⇒ ils tombent sur templates/apt/* (comportement actuel inchangé). Le mécanisme de résolution est additif.


3. Overrides par machine

Au-delà du profil OS, chaque machine peut surcharger :

  • aptProxyMode / aptProxyUrl (déjà présent au jalon 1) ;
  • des variables de contexte (composeRoots, inactivityTimeout, etc.) ;
  • l'activation de templates (templates activables côté formulaire) ;
  • des presets de variables custom (script_variables_presets scope machine).

Priorité de résolution des variables : override machine > défaut profil OS > défaut global. Aucun override ne peut introduire un secret dans un template (les secrets restent côté machine_credentials, injectés uniquement via runScriptSudo stdin).


4. Spécificités par profil OS

Debian

Ubuntu

  • Idem Debian + ubuntu-drivers devices (lecture) pour proposer des drivers (NVIDIA/GPU), surtout sur machine_kind physique/workstation/gpu. Jamais installé par défaut.

Proxmox (profil dédié, jamais Debian générique)

  • Contrôler les dépôts PVE : pve-no-subscription vs enterprise (sinon apt update échoue sur le dépôt entreprise sans abonnement).
  • Meta-package proxmox-ve, kernel PVE, Ceph éventuel.
  • apt-get update puis apt-get dist-upgrade.
  • Source : https://pve.proxmox.com/wiki/System_Software_Updates

Raspberry Pi OS (profil dédié)


5. Influence du type machine sur les scripts proposés

machine_kind Scripts pertinents À éviter
physical détection hardware, firmware (fwupd), SMART/disques, sensors, drivers GPU, benchmark guest tools
vm guest tools (qemu-guest-agent ou open-vm-tools) drivers GPU/firmware (sauf passthrough)
proxmox_host profil Proxmox dédié (dépôts PVE, kernel, Ceph) traitement Debian générique
lxc minimal (pas de kernel/firmware propre au conteneur) firmware, drivers, reboot kernel
raspberry_pi profil RPi (firmware/kernel prudent, espace disque) drivers GPU desktop
workstation / GPU server drivers GPU (ubuntu-drivers/nvidia), benchmark

Les scripts hardware/drivers/benchmark ne sont jamais installés par défaut et exigent validation explicite (couverture §7).


6. Détection / correction : machine_probe (décision §3.3)

Action non destructive (lecture seule), proposée à l'ajout et relançable. Sources lues :

#!/bin/sh
export LC_ALL=C
echo "===SU:PROBE_OS==="
cat /etc/os-release 2>/dev/null
echo "===SU:PROBE_ARCH==="
uname -m
dpkg --print-architecture 2>/dev/null
echo "===SU:PROBE_VIRT==="
systemd-detect-virt 2>/dev/null || echo "none"
echo "===SU:PROBE_PROXMOX==="
[ -d /etc/pve ] && echo "PROXMOX=1" || echo "PROXMOX=0"
echo "===SU:PROBE_RPI==="
grep -qi raspberry /proc/cpuinfo 2>/dev/null && echo "RPI=1" || echo "RPI=0"
echo "===SU:PROBE_GPU==="
command -v lspci >/dev/null 2>&1 && lspci 2>/dev/null | grep -Ei 'vga|3d|display' || echo "no-lspci"
echo "===SU:PROBE_NET==="
ip -o -4 addr show 2>/dev/null | awk '{print $2, $4}'
echo "===SU:EXIT=0==="

Le backend propose une correction de os_family/machine_kind/virtualization/interface primaire, jamais appliquée automatiquement sans validation utilisateur (règle de correction : l'opérateur garde le dernier mot). Résultats persistés dans machine_hardware + colonnes machines.

MVP retenu : choix manuel à l'ajout (Debian/Ubuntu/Proxmox VE/Raspberry Pi OS/autre Linux ; VM/physique/Proxmox/LXC/RPi/GPU-workstation) + machine_probe pour proposer des corrections. Alternative (détection 100 % automatique) jugée trop fragile (cas limites : conteneurs imbriqués, distros dérivées) — voir 90-questions-investigation.md Q3.


7. Proxy APT (apt-cacher-ng) — trois modes

AptProxyMode = "direct" | "runtime" | "persistent" (le persistent est l'ajout tâche 2).

Mode Mécanisme Quand
direct aucun proxy défaut
runtime export http_proxy/https_proxy dans le script (sections Mustache {{#aptProxy}}) — comportement jalon 1, conservé proxy temporaire pour une exécution
persistent écrire Acquire::http::Proxy "<url>"; dans /etc/apt/apt.conf.d/01proxy (action dédiée, idempotente, sauvegarde de l'existant) proxy permanent de la machine

Le mode persistent est une action explicite (écriture sur disque) avec preview ; il n'est pas appliqué silencieusement. runtime reste injecté au rendu comme aujourd'hui.