Concept : Les Buckets dans Érable
Navigation : Documentation > Buckets
Spécification technique détaillée : 04. Dépôts et Distribution Légère
Sommaire
- Qu'est-ce qu'un Bucket ?
- Structure Interne d'un Bucket
- L'Index Compilé (
index.nuon) - Cycle de Vie & Commandes Usuelles
- Mise à jour des dépôts (
erable update) - Recherche de paquets (
erable search) - Installation à la demande
- Les Buckets Officiels Érable
- 5.1 Templates d'Issues & Planification Horaire
- Ajouter un Bucket Personnalisé
- Liens et Références Associées
1. Qu'est-ce qu'un Bucket ?
Dans l'écosystème Érable, un Bucket est un dépôt structuré (généralement un dépôt Git) qui héberge les manifestes décrivant comment télécharger, vérifier et déployer des logiciels.
À la différence de gestionnaires traditionnels comme Scoop ou Homebrew :
- Découplage binaire/manifeste : Le bucket ne stocke aucun binaire volumineux. Il ne contient que la recette déclarative (fichiers TOML et scripts Nushell légers).
- Zéro clonage d'historique massif sur le poste client : Le client Érable interagit avec un index compilé ultra-compact et télécharge les manifestes à la demande (sparse delivery).
- Multiplateforme natif : Un seul manifeste de paquet dans un bucket gère simultanément Windows (
x86_64,arm64), Linux (x86_64,aarch64) et macOS (x86_64,aarch64/ Apple Silicon).
2. Structure Interne d'un Bucket
Pour garantir des performances optimales sur les systèmes de fichiers (évitant les répertoires contenant des milliers d'entrées), l'arborescence des paquets est partitionnée par sharding alphabétique :
mon-bucket/
├── index.nuon # Index compilé de tous les paquets du bucket
├── index.nuon.sig # Signature cryptographique Ed25519 de l'index
├── README.md # Description et gouvernance du bucket
└── packages/
├── a/
│ └── aria2/
│ └── parts/
│ ├── package.toml # Métadonnées (nom, version, licence)
│ └── targets.toml # URLs de téléchargement, SHA-256 et binaires
├── r/
│ └── ripgrep/
│ ├── parts/
│ │ ├── package.toml
│ │ ├── targets.toml
│ │ ├── verification.toml # Sanity checks obligatoires
│ │ └── autoupdate.toml # Définition de mise à jour amont
│ ├── pre_install.nu # (Optionnel) Hook de pré-installation
│ ├── post_install.nu # (Optionnel) Hook de post-installation
│ ├── pre_uninstall.nu # (Optionnel) Hook de pré-désinstallation
│ └── post_uninstall.nu # (Optionnel) Hook de post-désinstallation
└── z/
└── zoxide/
└── parts/
├── package.toml
└── targets.toml
3. L'Index Compilé (index.nuon)
Chaque bucket génère par intégration continue un fichier index.nuon (~500 Ko pour 5 000 paquets) :
- Format Nuon : Format de données natif de Nushell, désérialisable instantanément en mémoire sans parseur externe lourd.
- Recherche en RAM instantanée : La commande
erable searchfiltre les paquets compatibles avec l'OS courant en moins de 10 millisecondes. - Sécurité et intégrité : L'index est signé cryptographiquement (
.sig) et inclut un identifiant de séquence anti-rejeu (anti-rollback/anti-freeze) conforme aux principes TUF.
4. Cycle de Vie & Commandes Usuelles
flowchart LR
A["Dépôt Git Distant<br>(Bucket)"] -->|"erable update<br>(git pull)"| B["~/.erable/buckets/<nom>/"]
B -->|"erable search<br>(lecture index.nuon)"| C["Résultats filtrés par OS"]
B -->|"erable install <pkg><br>(lecture parts/*.toml)"| D["Téléchargement binaire<br>& déploiement"]
4.1 Mise à jour des dépôts (erable update)
Met à jour l'ensemble des buckets enregistrés dans ~/.erable/buckets/ :
4.2 Recherche de paquets (erable search)
Recherche dans tous les buckets actifs, avec filtrage automatique sur la compatibilité de votre OS actuel :
# Recherche ciblée sur l'OS courant
erable search kubectl
# Recherche globale toutes plateformes confondues
erable search --all
4.3 Installation à la demande
Le moteur résout le paquet dans le premier bucket actif qui le fournit, vérifie les sommes de contrôle SHA-256 et déploie le trampoline :
5. Les Buckets Officiels Érable
Le projet Érable segmente ses manifestes en 4 sous-dépôts officiels hébergés sur GitLab :
| Bucket | Vocation | Niveau d'Audit | Charte |
|---|---|---|---|
main |
Utilitaires CLI / TUI majeurs et essentiels | Stricte (CI automatisée, SLSA 3) | Charte Core |
gui |
Applications graphiques de bureau | Élevée (validation raccourcis) | Charte GUI |
community |
Outils émergents ou de niche | Automatisée (linter AST) | Charte Community |
commercial |
Logiciels propriétaires ou payants | Légale & consentement EULA | Charte Commercial |
5.1 Templates d'Issues & Planification Horaire
Chaque bucket propose trois templates dans .gitlab/issue_templates/ (package_add.md, package_update.md, platform_add.md), chaînés toutes les heures par le dépôt core :
:00(hourly_00) : détection multi-plateforme amont pour créer les issues de nouveaux paquets (package-add).:15(hourly_15) : détection des mises à jour disponibles (check_package_updates→package-update) et traitement des issuespackage-add.:30(hourly_30) : détection des nouvelles plateformes sur paquets existants (platform-add) et traitement des issuespackage-update.:45(hourly_45) : traitement et fusion des issues de nouvelles plateformes (platform-add).
6. Ajouter un Bucket Personnalisé
Pour ajouter un nouveau bucket sur votre poste (par exemple un bucket d'équipe ou un bucket privé d'entreprise) :
-
Clonez le dépôt Git dans votre répertoire utilisateur Érable :
-
Le moteur Érable prend en compte immédiatement le nouveau bucket :
[!TIP] Pour configurer des buckets d'entreprise protégés par authentification ou dans un réseau isolé, consultez le Guide Entreprise.