Concept : Moteur Central (core-engine)
Navigation : Documentation > Moteur Central
Spécification technique détaillée : 07. Architecture Interne du Moteur
Sommaire
- Rôle et Philosophie du Moteur
- Arborescence Physique sur le Poste Client (
~/.erable/) - Le Principe de Livraison Sans État (Stateless Delivery)
- Cycle d'Installation Pas-à-Pas
- Commandes de Gestion du Moteur
- Les Installeurs Autonomes Directs
- Liens et Références Associées
1. Rôle et Philosophie du Moteur
Le composant core d'Érable est le moteur d'exécution universel déployé sur le poste client. Écrit en Nushell (engine/erable.nu), il a été conçu pour éliminer la lourdeur des gestionnaires traditionnels :
- Flux de données typés natifs : Manipulation d'objets structurés (tables, dictionnaires) sans dépendre de parseurs JSON ou regex complexes.
- Zéro dépendance d'exécution : Les installeurs téléchargent un binaire Nushell autonome dans l'environnement local de l'utilisateur. Aucune installation système globale (comme Node.js, Python ou Ruby) n'est requise.
- Exécution réactive : Démarrage quasi-instantané, sans surcharge d'interpréteurs lourds.
2. Arborescence Physique sur le Poste Client (~/.erable/)
L'intégralité du fonctionnement d'Érable est isolée dans l'espace utilisateur ($HOME/.erable sous Linux/macOS ou $USERPROFILE\.erable sous Windows) :
~/.erable/
├── bin/ # Répertoire exposé dans le PATH système
│ ├── erable (.exe) # Trampoline vers le moteur Érable
│ ├── erable (.exe.target)# Pointeur vers engine/erable.nu
│ ├── rg (.exe) # Trampoline d'application (ex: ripgrep)
│ └── rg (.exe.target) # Pointeur vers packages/ripgrep/current/rg.exe
├── core/ # Fichiers du moteur
│ └── engine/ # Moteur modulaire L0-L4 en Nushell
│ ├── erable.nu # L0 : Point d'entrée CLI et bootstrap
│ ├── pipelines.nu # L1 : Pipelines d'exécution et formatage terminal
│ ├── interfaces.nu # L2 : Sas étanche de validation des manifestes
│ ├── orchestrators.nu# L3 : Orchestration métier et DAG anti-cycle
│ ├── tasks.nu # L4 : Tâches atomiques pures (7z, MSI, CoW, hooks)
│ └── errors.nu # Contrats d'erreurs structurées et typées
├── tools/ # Binaires et dépendances internes
│ ├── trampoline (.exe) # Binaire Trampoline Rust de référence unique
│ ├── trampoline.hash # Empreinte SHA-256 du code source du trampoline
│ └── nu/ # Binaire autonome de Nushell (nu / nu.exe)
├── cache/ # Archives et binaires bruts téléchargés
├── buckets/ # Dépôts de manifestes (main, gui, community...)
└── packages/ # Logiciels installés et partitionnés par version
└── ripgrep/
├── 14.1.0/ # Store immuable de la version 14.1.0
│ └── rg.exe
└── current/ # Copie active pointée par le trampoline
└── rg.exe
3. Le Principe de Livraison Sans État (Stateless Delivery)
Érable applique le principe fondamental de découplage strict entre les binaires applicatifs et l'état utilisateur :
- Immutabilité des versions : Chaque version est extraite dans un sous-dossier figé
packages/<logiciel>/<version>/. - Atomicité des mises à jour : Le passage à une nouvelle version met à jour le répertoire
current/de manière atomique, sans casser les sessions en cours. - Persistance standardisée : Les configurations et données applicatives continuent de respecter les standards de l'OS (
~/.configou~/.local/sharesous Linux/macOS,%APPDATA%sous Windows), empêchant toute perte de données en cas de réinstallation d'un paquet.
4. Cycle d'Installation Pas-à-Pas
Lors de la commande erable install <paquet>, le moteur exécute les 8 étapes suivantes :
sequenceDiagram
participant User as Utilisateur
participant Engine as Moteur (erable.nu)
participant Bucket as Bucket Local
participant CDN as CDN Distant
participant Disk as Disque Local
User->>Engine: erable install ripgrep
Engine->>Bucket: Résolution dans parts/*.toml
Engine->>Engine: Contrôle compatibilité OS / architecture
Engine->>CDN: Téléchargement archive dans cache/
Engine->>Engine: Contrôle cryptographique SHA-256
Engine->>Disk: Extraction dans packages/ripgrep/<version>/
Engine->>Disk: Synchronisation vers packages/ripgrep/current/
Engine->>Disk: Duplication du Trampoline Rust dans bin/
Engine->>Disk: Écriture atomique du fichier pointeur .target
Engine-->>User: Logiciel opérationnel !
- Recherche dans les buckets actifs : Découverte du paquet et chargement des manifestes
parts/package.tomletparts/targets.toml. - Validation de plateforme : Vérification que l'OS hôte (
$nu.os-info) correspond à l'une des architectures cibles supportées. - Mise en cache : Téléchargement du binaire ou de l'archive dans
~/.erable/cache/. - Vérification d'intégrité : Calcul du hash SHA-256 et comparaison stricte avec l'empreinte déclarée dans le manifeste.
- Extraction sécurisée : Décompression propre dans
packages/<nom>/<version>/. - Mise à jour de
current: Déploiement de la version active. - Routage par Trampoline : Copie du trampoline de référence Rust dans
bin/<alias>et génération du pointeur<alias>.target. - Disponibilité immédiate : La commande est accessible dans le shell courant sans redémarrage de session.
5. Commandes de Gestion du Moteur
Pour la référence exhaustive de la CLI, consultez le Guide Complet des Commandes CLI (
docs/commands/index.md).
| Commande | Action |
|---|---|
erable install <pkg> |
Installe un paquet depuis les buckets actifs. (détails) |
erable uninstall <pkg> |
Désinstalle un paquet et supprime ses trampolines dans bin/. (détails) |
erable prune [pkg] |
Purge les anciennes versions installées avec rétention --keep. (détails) |
erable list |
Liste l'ensemble des paquets installés sur le poste. (détails) |
erable search [motif] |
Recherche un paquet dans les index des buckets locaux. (détails) |
erable update |
Synchronise tous les buckets Git déclarés. (détails) |
erable update-trampolines |
Met à jour tous les trampolines existants vers la dernière version compilée. (détails) |
erable apply <config.toml> |
Réconcilie déclarativement les paquets du système. (détails) |
erable version |
Affiche la version d'Érable et la plateforme détectée. (détails) |
6. Les Installeurs Autonomes Directs
L'installation initiale du moteur s'effectue en une commande via deux scripts autonomes légers et autosuffisants hébergés à la racine du dépôt officiel Érable :
6.1 Installeur Windows (PowerShell)
Le script install.ps1 configure l'environnement utilisateur sous Windows sans nécessiter de privilèges administrateur :
Actions exécutées automatiquement :
- Détection de l'architecture : Identification du processeur hôte (
x86_64ouaarch64). - Bootstrap de Nushell (
nu.exe) : Téléchargement et extraction locale de la version certifiée de Nushell dans~/.erable/nu/. - Mise en place du Trampoline Rust : Rapatriement du binaire trampoline natif (
trampoline-x86_64-windows.exeoutrampoline-aarch64-windows.exe). - Configuration du PATH utilisateur : Injection persistante du répertoire
~/.erable/bindans la variable d'environnementPATHdu profil utilisateur (zéro altération du registre système machine). - Initialisation de la configuration : Création de
~/.erable/config.tomlavec les buckets officiels actifs.
6.2 Installeur Linux & macOS (Bash / Zsh)
Le script install.sh prend en charge l'ensemble des distributions Linux et les systèmes macOS :
Actions exécutées automatiquement :
- Détection de la plateforme et de l'architecture :
- Linux :
x86_64ouaarch64(ARM64). - macOS : Apple Silicon (
arm64) ou Intel (x86_64). - Installation locale du moteur Nushell : Mise en place autonome dans
~/.erable/nu/conforme aux standards XDG Base Directory. - Permission d'exécution & Trampoline natif : Configuration des droits d'exécution
chmod +xsur les trampolines Musl / Mach-O. - Intégration Shell transparente : Détection du shell actif (
bashouzsh) et enregistrement non intrusif de~/.erable/bindans~/.bashrcou~/.zshrc. - Validation immédiate : Vérification de la disponibilité de la commande
erabledans le terminal sans redémarrage de session.