# 11. Gestion de paquets Cette section couvre les deux grandes familles de gestion de paquets Linux, la résolution de dépendances, et les approches plus récentes qui cherchent à s'en affranchir partiellement. ## Les deux familles historiques - **dpkg/apt** (Debian et dérivés) : `dpkg` installe/retire un paquet `.deb` individuel sans résoudre ses dépendances ; `apt` (couche supérieure) interroge un ou plusieurs **dépôts** distants, résout l'arbre de dépendances complet, télécharge et invoque `dpkg` dans le bon ordre. - **rpm/dnf** (Fedora, RHEL et dérivés) : même séparation de responsabilités — `rpm` opère sur un paquet unique, `dnf` (successeur de `yum`) gère les dépôts et la résolution de dépendances. ## Anatomie d'un paquet Un paquet binaire embarque généralement : les fichiers à installer, des métadonnées (nom, version, dépendances déclarées, checksums), et des **scripts de maintenance** exécutés à des étapes précises du cycle de vie (avant/après installation, avant/après suppression) — par exemple pour créer un utilisateur système dédié ou enregistrer un service auprès de systemd. Ces scripts s'exécutent avec les privilèges de l'installation elle-même (généralement root) : la confiance accordée à un dépôt de paquets est donc une confiance d'exécution de code arbitraire, pas seulement de fichiers statiques — d'où l'importance des signatures cryptographiques de dépôt vérifiées avant toute installation. ## Résolution de dépendances Un paquet déclare les versions de ses dépendances qu'il requiert (parfois avec des bornes : `>= 2.0`, `< 3.0`). Le gestionnaire doit trouver un ensemble de versions **mutuellement compatibles** pour tous les paquets concernés — un problème de satisfaction de contraintes NP-difficile en théorie, résolu en pratique par des heuristiques efficaces sur les tailles de dépôts réels. Un conflit de versions irrésolvable entre deux paquets demandés (ex. deux paquets exigeant chacun une version incompatible d'une même dépendance commune) est signalé plutôt que résolu silencieusement par un choix arbitraire. ## Dépôts et confiance Chaque dépôt publie un index signé cryptographiquement (clé publique du mainteneur du dépôt, importée une fois et vérifiée ensuite à chaque mise à jour de l'index) — sans cette signature, un serveur de dépôt compromis ou un homme du milieu pourrait distribuer un paquet malveillant sous un nom légitime. `apt-key`/`dnf`+GPG vérifient cette chaîne de confiance avant d'autoriser toute installation depuis un dépôt donné. ## Approches plus récentes - **Paquets universels** (Flatpak, Snap, AppImage selon la distribution) : embarquent leurs propres dépendances, isolés du reste du système via les mêmes primitives que les conteneurs (section 7) — résout les conflits de version au prix d'une duplication de bibliothèques sur disque. - **Gestionnaires immuables/déclaratifs** : décrivent l'état complet du système souhaité dans un fichier de configuration versionné, appliqué de façon atomique (bascule complète ou aucune modification), permettant un retour en arrière instantané vers l'état précédent en cas de problème après une mise à jour. *(Schéma disponible : `schema.svg`, dans ce dossier.)*