====== Les fichiers apt_preferences ======
* Objet : Modifier la priorité d'installation des paquets
* Niveau requis : {{tag>avisé}} (ou fou furieux)
* Commentaires : //Modifier la priorité d'installation des paquets lorsque différentes versions sont proposées par différents dépôts.//
* **Avertissement** : Attention, ce tuto, c'est le manuel de l'apprenti mauvais-administrateur-système, à utiliser avec modération...
* Suivi : {{tag> à-compléter}}
* Création par [[user>captnfab]] 23/05/2013
* Testé par [[user>Ir0nsh007er]] le 19/07/2015
* Mise à jour par [[user>smolski]] le 09-08-2015
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=1718&p=1 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
===== Introduction =====
Lorsque l'on dispose de plusieurs versions installables dans les dépôts renseignés dans les fichiers [[:doc:systeme:apt:sources.list|sources.list]], il faut définir des priorités pour que ''APT'' sache quelle version installer.
Par exemple, si l'on a les dépôts Debian de testing et unstable et que l'on veut rester autant que possible en testing, il faut indiquer à ''APT'' que //testing// a une priorité supérieure à //sid//. Inversement, si pour un paquet donné on veut utiliser sa version présente dans //sid//, il faut le spécifier également. La définition de ces priorités s'appelle le **pinning**.
C'est à cela que servent les fichiers **preferences**.
Les cas d'utilisation raisonnable sont les suivants :
- Vous voulez être en //testing// avec les dépôts //sid// sous la main au cas où ;
- Vous voulez être en //testing// ou //sid// mais récupérer la version //sid// ou //experimental// d'un paquet en particulier.
En dehors de ça, si vous voulez mélanger stable et une //testing/unstable/experimental//, alors vous devriez prendre rendez-vous d'urgence chez votre garagiste pour qu'il s'occupe de votre carie.
==== Les priorités ====
Les fichiers ''preferences'' permettent de fixer la priorité des paquets suivant leurs dépôt. Voici la signification d'une priorité ''P''.
* P ≥ 1000 : le paquet sera installé même si APT est forcé d'installer une version plus ancienne((On appelle cela le //downgrade// par opposition à l'//upgrade//.)) que la version actuelle. Cette opération n'est pas sans risque.
* 990 ≤ P < 1000 : le paquet sera installé sauf si une version plus récente est déjà installée.
* 500 ≤ P < 990 : le paquet ne sera installé qu'à défaut de version plus récente installée ou disponible dans la distribution cible.
* 100 ≤ P < 500 : le paquet ne sera installé que s'il n'en existe aucune version plus récente, installée ou disponible dans une autre branche.
* 0 < P < 100 : le paquet ne sera installé que si aucune autre version du paquet n'est installée.
* P < 0 : le paquet ne sera jamais installé.
==== Configuration initiale ====
Cette configuration est très bien, franchement, je ne vois pas pourquoi vous voulez la changer :-)
* Par défaut, la priorité de tous les dépôts est de 500, à l'exception du dépôt ''backports'', de priorité 100, et du dépôt ''experimental'' de priorité 1.
* Lors d'une installation, les dépôts correspondant à la branche courante prennent une priorité 990.
* Lors d'une installation avec l'option « -t votrebranche », les dépôts correspondant à la branche « votrebranche » prennent une priorité 990.
* Lors d'une installation en précisant la branche d'un paquet avec « /votrebranche », le paquet concerné prend une priorité 990.
== exemple : ==
La commande :
apt-get -t bullseye-backports install libreoffice
donne une priorité élevée à **toute la branche bullseye-backports** le temps de l’instance d’APT.
L'option -t (''t'' pour target) indique le dépôt cible où l'on va chercher le paquet à installer en gérant correctement les dépendances par rapport à ce dépôt et aux dépôts stables. \\
Merci à chalu de cette précision-ci sur le forum à ce post là :
* https://debian-facile.org/viewtopic.php?pid=207154#p207154
La commande :
apt-get install libreoffice/bullseye-backports
pose des problèmes de dépendances parce que la version prioritaire du paquet libreoffice-common restera celle des sources habituelles et non pas celles des backports.
Lien sur le forum :
[[https://debian-facile.org/viewtopic.php?id=12207 | différence install -t backports & paquet/backports]]
On peut vérifier les priorités en utilisant la ligne de commande, par exemple, si vous êtes en //stable// :
apt-cache policy
===== Synaptic =====
Le pinning fonctionne si tu utilises soit [[doc:systeme:apt:apt|apt]], [[doc:systeme:apt:apt-get|apt-get]] ou [[doc:systeme:apt:aptitude|aptitude]], mais si tu utilises [[doc:systeme:apt:synaptic|synaptic]], le fichier créé en faisant du pinning va entrer en conflit avec le fichier de configuration de synaptic !
Configuration de synaptic :
- Tu vas dans : \\ ''configuration'' -> ''préférences'' onglet ''Distribution''
- Tu coches ''Préférer les version de'' et tu choisis la version que tu désires.
Normalement tu ne devrais plus y être submergé par des demande de mise à jours.
Merci à **valmy** et **Severian** qui ont initié cette recommandation sur le forum ! :-)
===== Précautions =====
**ATTENTION** ! \\ En faisant joujou avec les fichiers ''preferences'', on peut très rapidement faire quelque chose qu'on ne voulait pas, et qui nous oblige à **réinstaller** le système.
Pour éviter cela, il existe une série de tests que vous pouvez faire pour tester votre configuration, et de précautions à prendre.
==== Vérifier la configuration ====
Après avoir **créé ou modifié** votre fichier ''preferences'', la première chose à faire est dans un terminal en root :
apt-get update
Puis vérifiez que vos modifications ont bien été prises en compte grâce à ''apt-cache policy''.
Si les résultats affichés ne vous conviennent pas, vous risquez d'avoir une mauvaise
surprise après une mise à jour...
===== Les exemples d'utilisation =====
=== Stable avec suivi d'un paquet dans les Backports ===
Par exemple, pour installer la version de //libreoffice// des backports et la maintenir à jour.
On crée un fichier ''/etc/apt/preferences.d/90suivi-backports'' contenant le code suivant :
Package: libreoffice
Pin: release a=bullseye-backports
Pin-Priority: 900
Par défaut le dépôt stable-backports a une priorité de 100. Il est alors inutile de préciser la priorité des autres paquets de stable-backports
=== Testing avec Sid non-prioritaire ===
On suppose que vous avez comme sources quelque chose comme ça :
deb http://deb.debian.org/debian testing main contrib non-free
deb http://deb.debian.org/debian sid main contrib non-free
mais que vous voulez rester en //testing// autant que possible.
On crée un fichier ''/etc/apt/preferences.d/40sid-et-testing'' contenant le code suivant :
Package: *
Pin: release n=sid
Pin-Priority: 100
=== Testing avec suivi d'un paquet dans Sid ===
Par exemple, je suis en Testing mais veut installer la version du paquet ''firefox'' du dépôt de Sid tout en restant à jour.
On crée un fichier ''/etc/apt/preferences.d/40firefox-sid'' contenant le code suivant :
Package: *
Pin: release n=sid
Pin-priority:100
Package: firefox
Pin: release n=sid
Pin-Priority: 900
Cette méthode n’est pas conseillé sur Stable. Dans ce cas, il est préférable de construire le paquet depuis les sources du paquet dans Sid en suivant [[/doc:mentors:retroportage| le wiki rétroportage]]
=== Sid avec suivi d'un paquet dans Experimental ===
Par exemple, je suis en sid mais veut installer la version ''experimental'' de ''firefox'' tout en restant à jour.
On crée un fichier ''/etc/apt/preferences.d/40suivi-experimental'' contenant le code suivant :
Package: firefox
Pin: release a=experimental
Pin-Priority: 900
Par défaut le dépôt expérimental a une priorité de 1. Il est alors inutile de préciser la priorité des autres paquets
=== Les paquets particuliers ===
La forme particulière affecte une priorité (Pin-Priority) à un paquet précis, à une version précise ou à un intervalle spécifiant plusieurs versions. \\
Par exemple, l'entrée suivante affecte une priorité haute à toutes les versions du paquet ''perl'' dont le numéro de version commence par **5.8**. :
Package: perl
Pin: version 5.8*
Pin-Priority: 1001
//Merci à //**caly**// sur le chan d'avoir suscité cet ajout.// :-)
===== Conseils et remarques =====
Le fait d'avoir des priorités qui ne sont pas égales pour toutes les différentes branches Debian a pour inconvénient que les mises à jours de sécurité et jessie-updates des paquets communs aux branches Unstable et Stable sont moins réactives, qu'elles prennent plus de temps à arriver.
=== Nommer les branches par leur nom **commun** ou leur nom **release** ===
deb http://deb.debian.org/debian/ stretch main contrib non-free
''apt-cache policy'' donne une option (//n=stretch//)
900 http://deb.debian.org/debian/ stretch/main Packages
release v=6.0.2.1,o=Debian,a=stable,n=stretch,l=Debian,c=main
origin deb.debian.org
donc on peut rajouter dans le fichier **preferences** ce style d'interprétation :
Package: *
Pin: release a=stable
Pin-priority: 900
Package: *
Pin: release n=stretch
Pin-priority: 900
=== Garder des priorités identiques pour les dépôts d'une même branche ===
C'est le comportement //__par défaut__// quand on n'a que les dépôts de la
branche suivie, sans fichier **preferences**.
Tout manquement à cette règle casse le comportement par défaut et
peut générer des résultats très dommageables car non prévus par les développeurs
Debian.
(Excepté les dépôts **backports**)
=== Attribuer une priorité comprise entre 500 et 989 ===
pour la branche suivie et la/les branche(s) comportant des paquets aux versions
égales ou inférieures à la branche suivie.
Pourquoi une valeur plus petite que 990 ? Parce que lorsque l'on utilise l'option **-t** ainsi :
apt-get install -t
pour installer des paquets d'une branche autre que celle suivie, celle-ci
devient la branche par défaut (APT::Default-Release "branche") avec une priorité
__temporaire__ de **990**.\\
Donc, pour //la branche prioritaire// du fichier **preferences**
avoir une priorité égale ou supérieure à 990 perturbe l'option "-t"
=== D'un point de vue pratique, ===
Il est préférable d'utiliser des chiffres ronds, comme 900, 800, 90. Par exemple, si l'on a une priorité 620 et une priorité 630, il sera facile d'intercaler une priorité 625.
L'installation d'un paquet d'une branche **supérieure** peut nécessiter :
* La mise à jour de lib récentes **incompatibles** avec d'autres paquets plus anciens, qui devront également être upgradés (mis à jour...) à leur tour !
Bref, installer ou mettre à jour un paquet d'une branche supérieure peut n'être
possible qu'en migrant vers la branche supérieure.
=== libc6 ===
Si vous êtes sous stable et que vous voulez installer un paquet de la branche
testing, ou même unstable, qui impliquerait des mises à jour aussi importantes
que **libc6**, alors abandonnez, le pinning ne sera pas une solution pour vous, puisqu'il romprait la stabilité du système et effectuerait une mise à jour partielle vers testing, ce qui est la pire des situations possibles.
===== À consulter : =====
La documentation de référence sur ce fichier de configuration est disponible
dans la page de manuel apt_preferences, accessible par la commande :
man apt_preferences