Apt pinning ou comment avoir une Debian Stable et à jour :)
Par E M le mardi, juin 23 2009, 11:18 - Tutoriel - Lien permanent
Problématique
Tu as installé (tout fier) ta Debian Lenny, full stable... Mais tu pleures, tu n'as pas la dernière version d'OpenOffice (3.0) ! Et là se pose une question importante : est-ce que je fais passer mon système en "testing" ? Personnellement, j'ai déjà testé le "full testing", je n'ai pas trop apprécié... Alors je recommande le "mix" de plusieurs branches de Debian. Avec un peu de rigueur tout se passe bien ! :)
En théorie
Il existe plusieurs branches de Debian (autre que stable, testing...). Elles sont "officielles" et parfaitement adapté à notre cas :
- Backports : permet d'avoir des paquets "récents" adaptés à la branche stable
- Volatile : c'est un tout petit dépot qui permet d'avoir les dernières mise à jour, sur les paquets très souvent mis à jour (perso je l'utilise pour Pidgin et sa libpurple, car Microsoft, aime bien faire joujou avec son protocole de messagerie instantanée).
Parfois, il y des paquets qui ne sont pas intégrés dans "stable"... mais ils sont présents dans "testing" et "unstable", voire "experimental"... (exemple : Picviz, vu sur un précédant GNU/Linux mag).
Pour ma part, j'utilise un stable Debian Stable avec Backports, Volatile, avec quelques paquets Testing et Unstable, avec quelques compilés maison ! En ce qui concerne Firefox Iceweasel, je préfère avoir la dernière mise à jour ("unstable") pour des raisons de sécurité.
En pratique
Normalement, tu connais bien le fameux "sources.list"... Dans ce fichier, on y met les adresses des dépôts (voir plus bas mon fichier) pour le système. A côté de ce fichier, il faut utiliser le fichier "preferences" (le crée s'il n'existe pas), pour expliquer au système APT les priorités (ça serait bête d'avoir un système "Unstable" alors que ça n'est pas notre objectif :)).
Pour procéder :
- Changer son sources.list
- Crée son preferences
- "# aptitude update"
Après on vérifie que tout est conforme avec "apt-cache policy", mais j'ai une petite ligne de commande qui permet d'avoir une version "light" and "human readable".
$ apt-cache policy | awk '/^[ ]+[0-9]/ && !/(status|Translation)/ { print $1 " " $2 " " substr($3,0,index($3,"/")-1) }' | sort -rn | uniq
995 http://www.backports.org lenny-backports
800 http://volatile.debian.org lenny
800 http://security.debian.org lenny
800 http://ftp.fr.debian.org lenny
700 http://ftp.fr.debian.org testing
90 http://ftp.fr.debian.org unstable
70 http://ftp.fr.debian.org experimental
Note :
- Quelque soit la configuration des fichiers, il y aura toujours les dépots "Translation" avec une priorité de 500.
- Les paquets actuellement installés ont une priorité de 100.
- Les préférences sont utilisés lors de l'installation "aptitude install" (si aucune branche n'est spécifiée) et lors des "aptitude upgrade"
Quand tout est fait, un petit coup de "aptitude safe-upgrade".
Et voilà le travail, avec ma configuration, j'aimerais savoir quelle version de OOo Writer est celle utilisée :
$ apt-cache policy openoffice.org-writer
openoffice.org-writer:
Installé : 1:3.0.1-11~bpo50+2
Candidat : 1:3.0.1-11~bpo50+2
Table de version :
1:3.1.1~ooo310m13-1 0
70 http://ftp.fr.debian.org experimental/main Packages
1:3.1.0-5 0
90 http://ftp.fr.debian.org unstable/main Packages
*** 1:3.0.1-11~bpo50+2 0
995 http://www.backports.org lenny-backports/main Packages
100 /var/lib/dpkg/status
1:3.0.1-9 0
700 http://ftp.fr.debian.org testing/main Packages
1:2.4.1+dfsg-1 0
800 http://ftp.fr.debian.org lenny/main Packages
Fichiers
/etc/apt/sources.list
############################ # Debian Lenny (Stable) # ############################ # Debian Lenny deb http://ftp.fr.debian.org/debian/ lenny main contrib non-free deb-src http://ftp.fr.debian.org/debian/ lenny main contrib non-free # Debian Lenny Security deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free # Debian Lenny -- Backports deb http://www.backports.org/debian lenny-backports main contrib non-free # Debian Lenny -- Volatile deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free ############################ # Debian Squeeze (Testing) # ############################ deb http://ftp.fr.debian.org/debian/ testing main contrib non-free ############################ # Debian Unstable (Sid) # ############################ deb http://ftp.fr.debian.org/debian/ unstable main contrib non-free ############################ # Debian Experimental # ############################ deb http://ftp.fr.debian.org/debian/ experimental main contrib non-free
/etc/apt/preferences
Package: iceweasel Pin: release o=Debian,a=unstable Pin-Priority: 1000 Package: * Pin: release o=Backports.org archive,a=lenny-backports Pin-Priority: 995 Package: * Pin: release o=volatile.debian.org,a=stable Pin-Priority: 800 Package: * Pin: release o=Debian,a=stable Pin-Priority: 800 Package: * Pin: release o=Debian,a=testing Pin-Priority: 700 Package: * Pin: release o=Debian,a=unstable Pin-Priority: 90 Package: * Pin: release o=Debian,a=experimental Pin-priority: 70
Tips
- Installer un paquet "Testing" explicitement "# aptitude install monpaquet -t testing", attention aux dépendances !!! Il se peut qu'un paquet aie besoin de librairies non présentes en stable !
- Toujours faire un "# aptitude update" lorsqu'on modifie la configuration d'APT... ça permet d'éviter les mauvaises surprises :)
- "$ man apt_preferences" et "$ man sources.list, permet d'en savoir un peu plus :)
Bon bricolage :)


Commentaires
J'ai suivi tes instructions. C'est très intéressant mais mon applet bureau network-manager (0.7.1) ne reconnaît plus la présence du réseau internet! Pourtant tout marche nickel (j'accède au web avec ma freebox) , mais elle m'affiche cette petite croix rouge très énervante pour moi. Je suis maniaque et je ne sais pas comment résoudre ce problème esthétique. Tu n'aurais pas une idée pour résoudre tout ça?
Merci beaucoup pour cet article ! Il m'a permis de bien saisir comment configurer les priorités de dépôts et comment installer un paquet a partir d'un dépôt spécifique ;)