Aller au contenu

Documentation Technique Complète : Gestionnaire de Paquets Érable

Navigation : Hub Érable > Portail de Documentation

Bienvenue dans la documentation d'architecture, de conception et d'utilisation de erable, gestionnaire de paquets universel, multiplateforme (Windows, Linux, macOS), léger et sécurisé, propulsé par Nushell.


Sommaire de la Documentation

  1. Référence des Commandes CLI (commands/)
  2. Concepts Fondamentaux (concepts/)
  3. Guide Spécifique Entreprise (entreprise.md)
  4. Gouvernance et Règles de Contribution (contributing/)
  5. Spécifications Techniques Approfondies (architecture/)
  6. Représentation Globale du Système

1. Référence des Commandes CLI

Le répertoire commands/ documente l'ensemble des commandes et sous-commandes de l'interface en ligne de commande :

👉 Accéder au Guide Complet des Commandes CLI (docs/commands/index.md)

  • erable install : Installation atomique (1 ou N paquets), déduplication et routage trampoline.
  • erable prune : Rétention et purge des anciennes versions (--keep, --exclude-prune).
  • erable uninstall : Désinstallation hermétique et nettoyage des hooks.
  • erable update : Synchronisation des dépôts de buckets locaux.
  • erable update-trampolines : Mise à niveau des binaires trampolines.
  • erable list : Inventaire et audit de sécurité des paquets locaux installés (--security).
  • erable search : Recherche multiplateforme et filtrage par OS.
  • erable apply : Réconciliation déclarative de flottes via fichier TOML.
  • erable version : Affichage de la version du moteur et de la plateforme hôte.
  • --security / security : Vérification de sécurité multi-plateformes en temps réel (OSV.dev, CIRCL Hashlookup, MalwareBazaar, Sigstore Rekor, VirusTotal v3) avec exceptions et seuil CVE.

2. Concepts Fondamentaux

Ces fiches d'introduction expliquent les concepts structurants du système :

Concept Description Document
Buckets Dépôts légers de recettes de paquets, indexation index.nuon, synchronisation et ajout de buckets privés. 📘 docs/concepts/buckets.md
Moteur Central Architecture interne (~/.erable/), cycle de vie d'installation sans état (stateless), installeurs autonomes. ⚙️ docs/concepts/core-engine.md
Cycle de Mise à Jour Auto-mise à jour sans verrouillage Windows (Zero-Lock), atomicité des pointeurs .target et rollback immédiat. 🔄 docs/concepts/update-lifecycle.md
Trampolines Rust Routage binaire natif ultra-rapide (0ms POSIX, ~1ms Win32), fichiers pointeurs .target, zéro wrapper shell. 🚀 docs/concepts/trampolines.md
Manifestes Modulaires Découpage TOML en parts/, support multiplateforme, hachage SHA-256 et scripts hooks $ctx. 📦 docs/concepts/manifests.md
Contribution & Gouvernance Modèle de contribution, automatisation CI/CD et segmentation des dépôts officiels. 🤝 docs/concepts/contribution.md

3. Guide Spécifique Entreprise

Pour les déploiements en environnement professionnel durci, réglementé et soumis à de fortes contraintes de conformité (OIV, banques, défense, industrie) :

👉 Accéder au Guide Entreprise Complet (docs/entreprise.md)

Le guide détaille les architectures de déploiement et solutions opérationnelles prêtes à l'emploi :

🛡️ Re-Signature Authenticode Locale (WDAC & AppLocker)

  • Contexte : Exécution sur postes durcis interdisant tout binaire non signé par une autorité de confiance de domaine.
  • Solution : Pipeline automatique de signature Authenticode post-extraction via signtool.exe ou mode catalogue (.cat), sans nécessiter de droits administrateur pour les développeurs.
  • Conformité : Respect strict des règles Windows Defender Application Control (WDAC) et politiques AppLocker.

🏢 Buckets Privés d'Entreprise

  • Hébergement interne : Déploiement de buckets personnalisés sur des forges privées (GitLab Enterprise, GitHub Enterprise, Bitbucket Server ou Artifactory).
  • Gouvernance & Sécurité : Gestion fine des accès via tokens d'accès personnels (PAT), clés SSH d'entreprise ou certificats mTLS.
  • Index signé : Possibilité de signer l'index index.nuon avec la propre clé cryptographique Ed25519 de l'organisation.

🌐 Réseaux Isolés (Air-Gapped) & Proxies avec Déchiffrement TLS

  • Miroirs internes : Réécriture dynamique d'URLs via $env.erable_MIRROR_REWRITE pour rediriger les téléchargements vers des miroirs Nexus ou Artifactory locaux.
  • Inspection TLS : Prise en charge native des autorités de certification (PKI) d'entreprise et certificats racine privés ($env.SSL_CERT_FILE / $env.REQUESTS_CA_BUNDLE).
  • Mode 100% hors-ligne : Déploiement déconnecté à partir de dépôts locaux pré-téléchargés.

4. Gouvernance et Règles de Contribution

Les règles d'acceptation et chartes applicables à chaque sous-dépôt :


5. Spécifications Techniques Approfondies

Les analyses formelles d'ingénierie et de sécurité pour les architectes et mainteneurs :

  1. 01. Vision et Spécifications Comparatives
    Objectifs, positionnement par rapport à Scoop, Chocolatey, Nix et Homebrew, et fondements académiques (Dolstra, Larsson, Gamblin).

  2. 02. Spécification du Routage des Binaires : Trampolines Universels
    Routage par Trampolines Rust (25-30 Ko), fichiers .target, zéro lien symbolique, préservation de %~dp0 pour npm/pip, anti-DLL Hijacking.

  3. 03. Spécification de la Gestion de l'État : Découplage Total (Stateless Delivery)
    Immutabilité stricte des stores de paquets, survie aux écritures atomiques, et respect des standards XDG Base Directory et %APPDATA%.

  4. 04. Spécification des Dépôts et Distribution Légère (Buckets)
    Distribution sans clones Git lourds, index centralisé index.nuon (~500 Ko) avec cache TTL 24h, téléchargement à la demande, immunité 403.

  5. 05. Spécification des Manifestes Modulaires
    Structure découpée en fichiers TOML dédiés (parts/), intégration libc, formats d'archives, provenance SLSA et pragma min_nu_version.

  6. 06. Spécification des Scripts Normalisés et Confinement Sécurisé
    Normalisation des 4 hooks de cycle de vie (pre/post_install.nu et pre/post_uninstall.nu), commandes sanitaires obligatoires dans parts/verification.toml, schéma du contexte typé $ctx, et défense en profondeur à 3 niveaux (Zero Egress* via scripts/ci/audit_package_scripts.py).*

  7. 07. Architecture Interne du Moteur sur le Poste Utilisateur
    Organisation du code client (~/.erable/core/), système commun (lib/) vs drivers OS (platform/), rétention N-1, déduplication CoW & Reflinks.

  8. 08. Répertoire des Solutions d'Ingénierie Système Validées
    Solutions opérationnelles : verrous inter-processus, déduplication CoW/Reflinks, raccourcis OS, MotW, MAX_PATH, résilience réseau et gestion multi-utilisateurs.

  9. 09. Environnements Durcis : Politiques WDAC, AppLocker et Re-Signature de Code
    Architecture du pipeline de signature Authenticode locale post-extraction via signtool.exe, mode Catalog (.cat) et compatibilité AppLocker.

  10. 10. Synthèse des Avantages Compétitifs et Différenciateurs de erable
    Fiche synthétique des 6 grands piliers de supériorité de erable face aux gestionnaires existants.

  11. 🛡️ Analyse Comparative des Vulnérabilités (CVEs) et Mitigations
    Étude exhaustive des failles historiques (Zip Slip, Symlink Traversal, SUID, TOCTOU, DLL Hijacking, shims Batch/PS1, Zero Egress, Scoop, Chocolatey, WinGet, Nix, Cargo, npm, PyPI).

  12. 📦 Analyse des Paquets Scoop et Adéquation dans l'Architecture Érable
    Cartographie complète des buckets Scoop (main, extras, games, nerd-fonts, java, nonportable...), matrice d'attribution et gestion des cas limites.

  13. 🖥️ Architecture Hybride de Test Multiplateforme & Exécution Déportée
    Validation automatisée multi-OS : orchestration GitLab CI et exécuteurs multiplateformes distribués (Windows Server, Linux x86_64, macOS Apple Silicon/Intel) pilotés via OpenID Connect (OIDC Zero-Trust).

  14. 🛠️ Guide Opérationnel des Workflows CI/CD & Qualification Intégrale
    Guide détaillé avec schémas Mermaid des flux d'ajout de paquet, d'autoupdate et d'évolution du trampoline, ainsi que le protocole de qualification complète en 6 pipelines séquentiels.


6. Représentation Globale du Système

flowchart TD
    subgraph Distribution ["1. Distribution Distante (Buckets)"]
        IDX["Index centralisé signé : index.nuon.sig (~500 Ko)"]
        REPO["Arborescence shardée : packages/r/ripgrep/parts/*.toml"]
        CI["CI/CD : Linter AST anti-exfiltration, SLSA 3 & validation TOML"]
        CI --> REPO
        CI --> IDX
    end

    subgraph ClientCore ["2. Poste Client (~/.erable/core)"]
        CLI["CLI erable (Nushell)"]
        LOCK["Verrou global inter-processus (~/.erable/.lock)"]
        LIB["Système Commun Universel (lib/)<br>• Résolution TOML modulaire<br>• Protection anti-Zip Slip & anti-TOCTOU<br>• Support Proxies & CA PKI privées<br>• Arbitrage des collisions d'alias<br>• Gestionnaire de variables permanentes<br>• Extraction multi-formats sécurisée"]
        DRV["Couche d'Abstraction (platform/driver.nu)"]
    end

    subgraph PlatformDrivers ["3. Drivers OS Spécifiques"]
        WIN["windows.nu<br>• Trampolines Rust (anti-DLL Hijack, confinement .target)<br>• Rename-to-Trash (File Locking)<br>• Re-signature WDAC (signtool Authenticode)<br>• Chemins NT étendus \\?\ (MAX_PATH)<br>• Déblocage MotW (Zone.Identifier)<br>• Raccourcis .lnk"]
        LNX["linux.nu<br>• Trampolines POSIX exec (0ms overhead)<br>• unshare --net (Isolation réseau hook)<br>• SUID stripping & chmod +x<br>• Contrôle libc musl/glibc<br>• Raccourcis .desktop"]
        MAC["macos.nu<br>• Trampolines POSIX exec (0ms overhead)<br>• sandbox-exec deny network<br>• ~/Applications Bundles"]
    end

    subgraph Execution ["4. Système Hôte"]
        BIN["~/.erable/bin (dans le PATH, Trampolines & .target)"]
        STORE["Store immuable : packages/ripgrep/14.1.0/"]
        ENV_SYS["Variables permanentes (JAVA_HOME)"]
        STATE["État applicatif natif : ~/.config ou %APPDATA%"]
    end

    IDX -->|Mise à jour CDN ultra-rapide| CLI
    CLI --> LOCK
    LOCK --> LIB
    REPO -->|Téléchargement à la demande| LIB
    LIB --> STORE
    LIB --> ENV_SYS
    LIB --> DRV
    DRV --> WIN
    DRV --> LNX
    DRV --> MAC
    WIN --> BIN
    LNX --> BIN
    MAC --> BIN
    STORE -.->|Découplage strict| STATE