Introduction à l'apt-pinning
Apt-pinning permet d’utiliser simultanément plusieurs suites (stable, testing, unstable) sur Debian et dérivés, et de contrôler quelle version d’un paquet proviendra de quelle suite. Suivez une méthodologie simple : ajouter les dépôts nécessaires, définir les priorités dans /etc/apt/preferences (ou via /etc/apt/preferences.d/), puis tester avec apt-cache policy avant d’installer.
Version 1.0
Auteur : Falko Timme
Un bref aperçu de l’apt-pinning
Cet article est un aperçu court de l’utilisation de l’apt-pinning sur Debian et distributions basées sur Debian (comme Ubuntu). L’apt-pinning vous permet d’utiliser plusieurs versions de distribution (par exemple stable, testing et unstable) sur le même système et de préciser pour chaque paquet de quelle distribution il doit être installé. Ainsi, vous pouvez exécuter un système principalement basé sur la branche stable, tout en installant certains paquets plus récents depuis testing, unstable ou des dépôts tiers.
Important : je ne garantis pas que cela fonctionnera parfaitement dans votre environnement.
1 Note préliminaire
J’utilise ici un système Debian Lenny (stable). J’explique l’apt-pinning à partir de l’exemple du paquet phpmyadmin qui, au moment de la rédaction, est disponible en trois versions différentes dans les dépôts stable, testing et unstable — voir http://packages.debian.org/search?keywords=phpmyadmin&searchon=names&suite=all§ion=all :
- lenny (stable) : version 4:2.11.8.1-5
- squeeze (testing) : version 4:3.1.2-2
- sid (unstable) : version 4:3.1.3-1
2 Mon sources.list
J’ajoute les dépôts testing et unstable à mon /etc/apt/sources.list pour qu’il ressemble à ce qui suit :
vi /etc/apt/sources.list| deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main ## Lenny / Stable deb http://ftp2.de.debian.org/debian/ lenny main deb-src http://ftp2.de.debian.org/debian/ lenny main deb http://security.debian.org/ lenny/updates main deb-src http://security.debian.org/ lenny/updates main ## Squeeze / Testing deb http://ftp2.de.debian.org/debian/ squeeze main deb-src http://ftp2.de.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main ## Sid / Unstable deb http://ftp2.de.debian.org/debian/ sid main deb-src http://ftp2.de.debian.org/debian/ sid main |
Ouvrez /etc/apt/apt.conf :
vi /etc/apt/apt.conf… et insérez la ligne suivante :
| APT::Cache-Limit "100000000"; |
(Remarque : sinon vous pourriez obtenir une erreur comme celle-ci lors d’un apt-get update :
E: Dynamic MMap ran out of room)
Ensuite, exécutez :
apt-get updatepour mettre à jour la base de paquets.
Avec la configuration par défaut, apt tenterait toujours d’installer la version la plus récente d’un paquet — qui provient généralement d’un dépôt unstable ou testing — ce qui peut rendre le système instable. Avec l’apt-pinning, on définit des priorités afin qu’un paquet soit installé depuis unstable ou testing seulement si aucune version depuis stable n’est disponible.
Nous pouvons vérifier les priorités apt ainsi :
apt-cache policyserver1:~# apt-cache policy
Package files:
100 /var/lib/dpkg/status
release a=now
500 http://volatile.debian.org lenny/volatile/main Packages
release o=volatile.debian.org,a=stable,l=debian-volatile,c=main
origin volatile.debian.org
500 http://ftp2.de.debian.org sid/main Packages
release o=Debian,a=unstable,l=Debian,c=main
origin ftp2.de.debian.org
500 http://security.debian.org squeeze/updates/main Packages
release v=None,o=Debian,a=testing,l=Debian-Security,c=main
origin security.debian.org
500 http://ftp2.de.debian.org squeeze/main Packages
release o=Debian,a=testing,l=Debian,c=main
origin ftp2.de.debian.org
500 http://security.debian.org lenny/updates/main Packages
release v=5.0,o=Debian,a=stable,l=Debian-Security,c=main
origin security.debian.org
500 http://ftp2.de.debian.org lenny/main Packages
release v=5.0,o=Debian,a=stable,l=Debian,c=main
origin ftp2.de.debian.org
Pinned packages:
server1:~#Comme vous le voyez, stable, testing et unstable ont la même priorité (500) ; cela signifie que la version la plus récente d’un paquet serait installée. Dans le cas de notre paquet phpmyadmin, il s’agit de la version 4:3.1.3-1 provenant d’unstable :
apt-cache policy phpmyadminLa ligne Candidate montre la version qui serait installée :
server1:~# apt-cache policy phpmyadmin
phpmyadmin:
Installed: (none)
Candidate: 4:3.1.3-1
Version table:
4:3.1.3-1 0
500 http://ftp2.de.debian.org sid/main Packages
4:3.1.2-2 0
500 http://ftp2.de.debian.org squeeze/main Packages
4:2.11.8.1-5 0
500 http://ftp2.de.debian.org lenny/main Packages
server1:~#Voici comment les priorités sont définies (voir aussi :
man 5 apt_preferences) :
P > 1000
provoque l’installation d’une version même si cela constitue un rétrogradage du paquet990 < P <= 1000
provoque l’installation d’une version même si elle ne provient pas de la release cible, sauf si la version installée est plus récente500 < P <= 990
provoque l’installation d’une version à moins qu’il n’y ait une version appartenant à la release cible ou que la version installée soit plus récente100 < P <= 500
provoque l’installation d’une version à moins qu’il n’y ait une version disponible appartenant à une autre distribution ou que la version installée soit plus récente0 < P <= 100
provoque l’installation d’une version seulement s’il n’existe aucune version installée du paquetP < 0
empêche l’installation de la version
Méthodologie recommandée (mini-méthode)
- Sauvegarder /etc/apt/sources.list et /etc/apt/sources.list.d/*
- Ajouter les dépôts souhaités dans sources.list (testing/unstable) sans activer la mise à niveau automatique
- Définir une taille de cache suffisante dans /etc/apt/apt.conf
- Définir des priorités dans /etc/apt/preferences ou /etc/apt/preferences.d/ (pinning par paquet si besoin)
- Exécuter apt-get update puis apt-cache policy
pour vérifier la candidate - Installer avec prudence, tester dans un environnement non productif
Important : testez toujours sur une machine non critique avant de déployer en production.
Exemple de checklist par rôle
- Administrateur système : vérifier sauvegardes, modifier preferences.d, exécuter apt-get update, vérifier politiques apt-cache
- Développeur : valider que la version ciblée compile/semble fonctionner avec l’environnement applicatif
- Responsable sécurité : vérifier les dépôts tiers et politiques de signature
Approches alternatives
- Utiliser les backports officiels lorsque disponibles (plus sûr que tester/unstable).
- Installer un paquet spécifique depuis une autre release avec apt-get install -t testing
(moins persistant que pinning global). - Construire un paquet local (.deb) à partir des sources pour garantir compatibilité.
Quand l’apt-pinning peut échouer (contre-exemples)
- Dépendances croisées complexes : un paquet plus récent peut exiger des versions de bibliothèques indisponibles sur stable.
- Mises à jour de sécurité non appliquées si vous retenez trop de versions.
- Paquets tiers non signés ou incompatibles provoquant des conflits.
Fact box — points clés
- But : contrôler la source des paquets entre plusieurs suites.
- Fichier principal : /etc/apt/preferences ou /etc/apt/preferences.d/*.
- Commandes utiles : apt-get update, apt-cache policy, apt-get install -t
.
Glossaire (une ligne)
- apt-pinning : mécanisme pour définir des priorités (pins) afin de choisir quelle version d’un paquet installer.
- sources.list : fichier listant les dépôts APT.
- Candidate : version qu’APT considère pour installation.
Remarques de sécurité et bonnes pratiques
- Préférez des pins par paquet plutôt qu’un pin global pour testing/unstable.
- Documentez toute exception (quelle version, pourquoi, date).
- Surveillez les mises à jour de sécurité pour les paquets retenus.
Résumé
L’apt-pinning est un outil puissant pour mélanger des paquets issus de plusieurs suites dans Debian. Employé avec une méthodologie claire, il permet d’obtenir des paquets plus récents sans basculer entièrement vers une distribution instable. Testez, documentez et limitez les pins au strict nécessaire.
Important : adaptez ces instructions à votre version de Debian/Ubuntu et à vos contraintes opérationnelles.
Matériaux similaires
Installer et utiliser Podman sur Debian 11
Guide pratique : apt-pinning sur Debian
OptiScaler : activer FSR 4 dans n'importe quel jeu
Dansguardian + Squid NTLM sur Debian Etch
Corriger l'erreur d'installation Android sur SD