Le module xcraft-contrib-pacman
est un gestionnaire de paquets complet pour l'écosystème Xcraft. Il permet de créer, construire, installer, publier et gérer des paquets logiciels dans différentes distributions et architectures. Ce module s'appuie sur WPKG (Windows Package Manager) pour la gestion des paquets et fournit une interface complète pour manipuler le cycle de vie des paquets.
- Structure du module
- Fonctionnement global
- Exemples d'utilisation
- Interactions avec d'autres modules
- Configuration avancée
- Variables d'environnement
- Détails des sources
Le module est organisé en plusieurs composants principaux :
- Commandes principales (
pacman.js
) : Interface de commande pour toutes les opérations de gestion de paquets - Définition de paquets (
lib/def.js
) : Gestion des définitions de paquets au format YAML - Construction (
lib/build.js
) : Compilation des paquets source - Installation (
lib/install.js
) : Installation des paquets dans un environnement cible - Publication (
lib/publish.js
) : Publication des paquets dans des dépôts - Génération de fichiers (
lib/file/
) : Création des fichiers de contrôle, changelog, copyright, etc. - Utilitaires (
lib/utils.js
) : Fonctions utilitaires communes - Serveur HTTP (
lib/wpkgHttp.js
) : Serveur pour accéder aux dépôts via HTTP - Administration (
lib/admindir.js
) : Gestion des répertoires d'administration WPKG
Le flux de travail typique avec pacman est le suivant :
- Définition du paquet : Création ou édition d'un fichier de configuration YAML décrivant le paquet
- Make : Génération des fichiers de contrôle et préparation du paquet
- Build : Compilation des sources (pour les paquets source)
- Install : Installation du paquet dans l'environnement cible
- Publish : Publication du paquet dans un dépôt pour le partager
Le module gère également les dépendances entre paquets, permettant de construire automatiquement les dépendances nécessaires lors de la construction d'un paquet. Il prend en charge différents types de dépendances :
- Dépendances d'installation : Nécessaires pour exécuter le paquet
- Dépendances de construction : Nécessaires pour compiler le paquet
- Dépendances de make : Nécessaires pour générer les fichiers de contrôle
Le système maintient automatiquement les références ($ref
) et les hachages ($hash
) des sources pour garantir la reproductibilité des builds. Lorsqu'un paquet est construit, ces informations sont mises à jour dans la définition du paquet.
Pour optimiser les performances, pacman utilise un système de tampons qui permet d'éviter de reconstruire des paquets inchangés. Les tampons sont stockés dans le répertoire spécifié par la configuration stamps
.
zog pacman.edit my-package
Cette commande lance un assistant interactif pour créer ou modifier la définition d'un paquet.
# Générer les fichiers de contrôle
zog pacman.make my-package
# Compiler le paquet source
zog pacman.build my-package
# Installation simple
zog pacman.install my-package
# Installation avec une version spécifique
zog pacman.install my-package '' '' 1.0.0
zog pacman.publish /path/to/repo my-package myDistribution
zog pacman.full my-package
zog pacman.bom my-package
zog pacman.version my-package
zog pacman.graph my-package
- xcraft-core-etc : Pour la configuration
- xcraft-core-fs : Pour les opérations sur le système de fichiers
- xcraft-core-platform : Pour la détection de la plateforme
- xcraft-contrib-wpkg : Pour les opérations WPKG sous-jacentes
- xcraft-contrib-peon : Pour les opérations de construction
- xcraft-core-wizard : Pour l'interface d'édition interactive
- xcraft-core-env : Pour la gestion des environnements
- xcraft-core-placeholder : Pour l'injection de variables dans les templates
- goblin-overwatch : Pour la gestion des erreurs et le reporting
Le module peut être configuré via le fichier config.js
:
Option | Description | Type | Valeur par défaut |
---|---|---|---|
architectures | Liste des architectures supportées | Array | mswindows-i386, mswindows-amd64, linux-i386, linux-amd64, linux-aarch64, darwin-i386, darwin-amd64, darwin-aarch64, solaris-i386, solaris-amd64, freebsd-i386, freebsd-amd64 |
pkgCfgFileName | Nom du fichier de configuration pour les définitions WPKG | String | config.yaml |
pkgScript | Nom du modèle pour les scripts WPKG | String | script |
pkgMakeall | Nom du script make all | String | makeall |
pkgWPKG | Répertoire pour les paquets WPKG | String | WPKG |
pkgToolchainRepository | Chemin du dépôt de la chaîne d'outils | String | toolchain/ |
pkgIndex | Fichier d'index pour les dépôts WPKG | String | index.tar.gz |
wpkgTemp | Répertoire temporaire pour WPKG | String | ./var/tmp/ |
stamps | Emplacement pour les tampons de construction | String | ./var/xcraft-contrib-pacman/ |
http.enabled | Activer le serveur HTTP pour les dépôts WPKG | Boolean | true |
http.port | Port du serveur HTTP | Number | 12321 |
http.hostname | Nom d'hôte du serveur HTTP | String | 0.0.0.0 |
Variable | Description | Exemple | Valeur par défaut |
---|---|---|---|
PEON_DEBUG_PKG | Définit le paquet en mode débogage pour zeroBuild | PEON_DEBUG_PKG=my-package | - |
Ce fichier est le point d'entrée principal du module. Il définit toutes les commandes disponibles pour manipuler les paquets. Le fichier exporte xcraftCommands
qui expose les commandes sur le bus Xcraft.
- Extraction de paquets : La fonction
extractPackages
analyse les références de paquets et résout les dépendances avec le motif@deps
- Gestion des erreurs : La fonction
wrapOverwatch
intègre le système de surveillance des erreurs - Commandes de cycle de vie : Toutes les opérations de gestion de paquets sont exposées comme commandes
list(msg, resp)
— Liste tous les paquets disponibles à partir des définitionslistStatus(msg, resp, next)
— Liste l'état des paquets installés avec filtrage par pattern et architecturelistCheck(msg, resp, next)
— Vérifie les versions des paquets installés par rapport aux définitionssearch(msg, resp, next)
— Recherche des fichiers dans les paquets installésunlock(msg, resp, next)
— Supprime le verrou de la base de données WPKGedit(msg, resp)
— Lance l'assistant interactif pour créer ou modifier un paquetmake(msg, resp, next)
— Génère les fichiers de contrôle pour WPKG avec gestion des dépendances makeinstall(msg, resp)
— Installe un paquet dans l'environnement ciblereinstall(msg, resp)
— Réinstalle un paquet existantupgrade(msg, resp, next)
— Met à jour tous les paquets d'une distributionstatus(msg, resp)
— Vérifie l'état d'un paquet (installé et/ou publié)show(msg, resp, next)
— Affiche les informations détaillées d'un paquetbom(msg, resp, next)
— Affiche la liste des matériaux (Bill of Materials) d'un paquet avec toutes ses dépendancesbuild(msg, resp)
— Compile un paquet source avec résolution automatique des dépendanceszeroBuild(msg, resp)
— Prépare un paquet pour la construction sans démarrer la compilation (mode débogage)full(msg, resp)
— Effectue make, build et install en une seule opérationremove(msg, resp)
— Supprime un paquet avec option récursiveremoveAll(msg, resp, next)
— Supprime tous les paquets d'une distributionautoremove(msg, resp)
— Supprime automatiquement les paquets implicitesclean(msg, resp)
— Supprime les fichiers temporaires de constructionpublish(msg, resp)
— Publie un paquet dans un dépôtunpublish(msg, resp)
— Dépublie un paquet d'un dépôtaddSource(msg, resp)
— Ajoute une nouvelle source à un répertoire cibledelSource(msg, resp)
— Supprime une source d'un répertoire ciblesyncRepository(msg, resp)
— Synchronise les dépôts d'archivesgraph(msg, resp)
— Génère le graphe de dépendances pour un ou plusieurs paquetsversion(msg, resp)
— Vérifie et teste les versions disponibles d'un paquetrefrhash(msg, resp, next)
— Actualise les entrées $hash des définitions en téléchargeant les sourcesgitMergeDefinitions(msg, resp, next)
— Fusionne automatiquement les définitions de paquets lors de conflits Git
Ce fichier définit l'assistant interactif pour la création et la modification de paquets. Il utilise le module inquirer
pour créer une interface en ligne de commande interactive.
- header : Informations générales du paquet (nom, version, architecture, mainteneur, description)
- askdep : Questions pour ajouter des dépendances (install, build, make)
- dependency : Configuration détaillée des dépendances
- data : Configuration des données source (URI, type, règles de construction)
- rulesEnv : Variables d'environnement pour la construction
- env : Variables d'environnement générales
- chest : Options de téléchargement vers le serveur chest
Gère les répertoires d'administration WPKG et les sources de paquets.
addSource(uri, arch, distribution, location, components, next)
— Ajoute une source de paquets à un répertoire d'administrationdelSource(uri, arch, distribution, location, components, next)
— Supprime une source de paquets d'un répertoire d'administrationregisterHooks(arch, distribution, next)
— Enregistre les hooks post-installation et pré-suppressioncreate(packageRef, targetRoot, distribution, next)
— Crée un répertoire d'administration WPKG avec configuration automatique
Responsable de la compilation des paquets source avec gestion complète des dépendances.
- Résolution récursive des dépendances de construction
- Installation automatique des dépendances manquantes
- Gestion des paquets stub pour éviter les conflits de versions
- Support des dépendances externes
package(packageRef, distribution, next)
— Orchestre tout le processus de construction d'un paquet avec gestion des dépendances
Gère le nettoyage des fichiers temporaires de construction.
temp(packageName)
— Supprime les fichiers temporaires pour un paquet spécifique ou tous les paquets
Gère les définitions de paquets au format YAML avec support des distributions multiples.
- Chargement et sauvegarde des définitions YAML
- Support des configurations par distribution
- Gestion des modifications non validées (unstage)
- Validation et nettoyage automatique des définitions
loadAll(packageName, props, resp)
— Charge toutes les définitions d'un paquet pour toutes les distributionsgetBasePackageDef(packageName, resp)
— Obtient la définition de base d'un paquet avec résolution des sous-paquetsload(packageName, props, resp, distribution)
— Charge une définition de paquet pour une distribution spécifiqueupdate(packageName, props, resp, distribution)
— Met à jour une définition de paquetsave(packageDef, pkgConfig, resp)
— Sauvegarde une définition de paquet avec nettoyage automatiqueremoveUnstage(packageDef, resp)
— Supprime les modifications non validéesbumpPackageVersion(version)
— Incrémente automatiquement la version d'un paquet
Convertit les réponses de l'assistant interactif en définitions de paquets.
pkgTemplate(inquirerPkg, resp, callbackInquirer, callback)
— Crée un modèle de paquet à partir des réponses de l'assistant
Fonction utilitaire qui effectue une séquence complète make, build, install.
Génère des graphiques de dépendances pour visualiser les relations entre paquets.
graph(packageNames, distribution, next)
— Génère un graphique de dépendances pour les paquets spécifiés
Fournit des fonctions utilitaires pour la gestion des chemins et la configuration du serveur HTTP.
getTargetRoot(distribution, resp)
— Retourne le répertoire racine cible pour une distributiongetDebRoot(distribution, resp)
— Retourne le répertoire racine des paquets Debian pour une distributionwpkgHttp()
— Initialise et retourne l'instance du serveur HTTP WPKGdispose()
— Nettoie les ressources du module
Gère l'installation des paquets dans un environnement cible.
package(packageRef, distribution, prodRoot, reinstall, next)
— Installation standard d'un paquetpackageArchive(packageRef, version, distribution, prodRoot, reinstall, next)
— Installation à partir d'une archive spécifiqueexternalPackage(packageRef, distribution, prodRoot, reinstall, next)
— Installation d'un paquet externestatus(packageRef, distribution, next)
— Vérification de l'état d'installation d'un paquet
Fournit des fonctions pour lister les paquets disponibles.
listProducts(resp)
— Retourne la liste de tous les paquets disponibles avec leurs métadonnées
Responsable de la génération des fichiers de contrôle et de la préparation des paquets pour WPKG.
- Génération des fichiers de contrôle WPKG
- Gestion des tampons pour éviter les reconstructions inutiles
- Support des dépendances make
- Injection automatique des références et hachages
package(packageName, arch, defProps, outputRepository, distribution)
— Génère la structure complète du paquet avec optimisationsinjectHash(packageName, hash, distribution = null)
— Met à jour le hachage d'un paquet dans sa définition
Responsable de la publication des paquets dans des dépôts.
add(packageRef, inputRepository, outputRepository, distribution, next)
— Ajoute un paquet à un dépôtremove(packageRef, repository, distribution, updateIndex, next)
— Supprime un paquet d'un dépôtremoveAll(packageList, repository, distribution, next)
— Supprime plusieurs paquets d'un dépôtstatus(packageRef, distribution, repositoryPath, next)
— Vérifie l'état de publication d'un paquetgetNewVersionIfArchived(packageRef, version, distribution, targetDistribution)
— Détermine si une nouvelle version est nécessaire
Gère la suppression des paquets installés.
package(packageRef, distribution, recursive, next)
— Supprime un paquet avec option de suppression récursive des dépendances
Fournit des fonctions utilitaires communes pour le module.
checkArch(arch)
— Vérifie si une architecture est supportéeparsePkgRef(packageRef)
— Analyse une référence de paquet (nom:architecture)checkOsSupport(packageName, packageArch, packageDef, arch)
— Vérifie la compatibilité avec le système d'exploitationinjectThisPh(packageDef, data)
— Injecte les placeholders dans les donnéesflatten(object)
— Aplatit un objet en propriétés à pointsgetDistributions(packageDef)
— Obtient la liste des distributions disponibles pour un paqueterrorReporting(resp)
— Génère un rapport d'erreurs formatémakeGetObj(packageDef)
— Crée un objet de récupération avec URIs résolues
Implémente un serveur HTTP pour accéder aux dépôts WPKG via le web.
- Serveur Express pour servir les dépôts WPKG
- Surveillance automatique des nouveaux dépôts
- Gestion des fallbacks de distribution
- Support des dépôts versionnés
serve()
— Démarre le serveur HTTP sur le port configurédispose(next)
— Arrête proprement le serveur et libère les ressources
Ces modules génèrent les différents fichiers nécessaires pour un paquet WPKG :
Génère les fichiers de contrôle WPKG avec toutes les métadonnées du paquet.
Génère les fichiers de changelog avec horodatage automatique.
Génère les fichiers de copyright à partir des informations du mainteneur.
Génère les fichiers CMakeLists.txt pour les paquets source.
Génère les fichiers de configuration d'environnement au format JSON.
Cette documentation a été mise à jour.