« L'épinglage de paquets via le fichier /etc/apt/preferences » : différence entre les versions

Aller à la navigation Aller à la recherche
m
Ligne 33 : Ligne 33 :
== Structure du fichier /etc/apt/preferences ==
== Structure du fichier /etc/apt/preferences ==


Ce fichier est constitue d'une ou plusieurs entrees separees par des lignes blanches. Un exemple d'entrees de fichier preferences:
Ce fichier est constitué d'une ou plusieurs entrées séparées par des lignes blanches. Un exemple d'entrées de fichier preferences:


   Package: *
   Package: *
Ligne 44 : Ligne 44 :




On constate que chaque entree est de la forme suivante:
On constate que chaque entrée est de la forme suivante:


   Package: * ou nom de paquet
   Package: * ou nom de paquet
   Pin: release a=,n=,v=,c=,o=,l=
   Pin: release a=,n=,v=,c=,o=,l=
   Pin-Priority: P (ou P est un entier positif ou negatif)
   Pin-Priority: P (ou P est un entier positif ou négatif)




Pour completer au mieux ces entrees nous nous servirons de la commande '''apt-cache policy''' qui donne des resultats de ce type:
Pour compléter au mieux ces entrées nous nous servirons de la commande '''apt-cache policy''' qui donne des resultats de ce type:


   500 http://ftp2.fr.debian.org stable/contrib Packages
   500 http://ftp2.fr.debian.org stable/contrib Packages
Ligne 58 : Ligne 58 :




Dans cet exemple ''500'' indique la priorite assignee au depot http://ftp2.fr.debian.org stable/contrib. Les variables telles ''release v=5.0.5,o=Debian,a=stable,n=stable,l=Debian,c=contrib'' serviront a completer la ligne ''Pin'' des entrees du fichier preferences et sont donc expliquees au paragraphe qui la concerne un peu plus bas.
Dans cet exemple ''500'' indique la priorité assignée au dépôt http://ftp2.fr.debian.org stable/contrib. Les variables telles ''release v=5.0.5,o=Debian,a=stable,n=stable,l=Debian,c=contrib'' serviront à compléter la ligne ''Pin'' des entrées du fichier preferences et sont donc expliquées au paragraphe qui la concerne un peu plus bas.




Detaillons ligne par ligne les entrees du fichier preferences:
Détaillons ligne par ligne les entrées du fichier preferences:




==== Ligne Package ====
==== Ligne Package ====
C'est là qu'est indiqué le nom du paquet étiqueté ou * si l'étiquetage concerne tout un groupe de paquets defini par la ligne ''Pin''.
C'est là qu'est indiqué le nom du paquet étiqueté ou * si l'étiquetage concerne tout un groupe de paquets défini par la ligne ''Pin''.


==== Ligne Pin ====
==== Ligne Pin ====
Ligne 83 : Ligne 83 :




La commande '''apt-cache policy''' n'est qu'un moyen tres accessible de synthétiser cela et de voir quelles sont les priorités qu'APT attribue à un, plusieurs ou des ensembles de paquets.
La commande '''apt-cache policy''' n'est qu'un moyen très accessible de synthétiser cela et de voir quelles sont les priorités qu'APT attribue à un, plusieurs ou des ensembles de paquets.


Ainsi cette entree:
Ainsi cette entree:
Ligne 95 : Ligne 95 :


   Package: *                                -> L'ensemble des paquets
   Package: *                                -> L'ensemble des paquets
   Pin: release o=Debian,a=stable  -> se trouvant dans des depots dont la variable Origin (o) a pour valeur "Debian"
   Pin: release o=Debian,a=stable  -> se trouvant dans des dépôts dont la variable Origin (o) a pour valeur "Debian"
                                                       et la variable Suite (a) a pour valeur "stable"
                                                       et la variable Suite (a) a pour valeur "stable"
   Pin-Priority: 900                          -> ont une priorite de 900
   Pin-Priority: 900                          -> ont une priorite de 900




Et cette entree ci:
Et cette entrée ci:


   Package: ardour
   Package: ardour
Ligne 110 : Ligne 110 :


   Package: ardour                        -> Le paquet ardour
   Package: ardour                        -> Le paquet ardour
   Pin: release a=unstable              -> se trouvant dans des depots dont la variable Suite (a) a pour valeur "now"
   Pin: release a=unstable              -> se trouvant dans des dépôts dont la variable Suite (a) a pour valeur "now"
   Pin-Priority: 1001                        -> a une priorite de 1001
   Pin-Priority: 1001                        -> a une priorite de 1001


Ligne 135 : Ligne 135 :




On peut donc inclure une ou plusieures de ces variables dans la ligne ''Pin''. Il n'est pas forcement utile de les inclure toutes, une ou deux bien utilisées peuvent tout à fait être suffisantes.
On peut donc inclure une ou plusieurs de ces variables dans la ligne ''Pin''. Il n'est pas forcément utile de les inclure toutes, une ou deux bien utilisées peuvent tout à fait être suffisantes.


==== Ligne Pin-Priority ====
==== Ligne Pin-Priority ====


C'est sur cette ligne qu'est indiquee la priorite du paquet ou groupe de paquets. Elle doit etre un entier positif ou negatif. Ces priorites sont interpretes a peu pres comme suit:
C'est sur cette ligne qu'est indiquée la priorité du paquet ou groupe de paquets. Elle doit être un entier positif ou négatif. Ces priorités sont interprétés à peu près comme suit:


   P > 1000
   P > 1000
   Cette priorite entraine l'installation du paquet meme s'il s'agit d'un retour en arriere.
   Cette priorité entraine l'installation du paquet même s'il s'agit d'un retour en arrière.
    
    
   990 < P <=1000
   990 < P <=1000
   La version sera installee, meme si elle n'appartient pas a la distribution par defaut ; mais elle ne sera pas installee si la version installee est plus recente.
   La version sera installée, meme si elle n'appartient pas a la distribution par defaut ; mais elle ne sera pas installee si la version installee est plus recente.
    
    
   500 < P <=990
   500 < P <=990
   La version sera installee, sauf s'il existe une version appartenant a la distribution par defaut ou si la version installee est plus recente.
   La version sera installee, sauf s'il existe une version appartenant à la distribution par défaut ou si la version installée est plus recente.
    
    
   100 < P <=500
   100 < P <=500
   La version sera installee, sauf s'il existe une version appartenant a une autre distribution ou si la version installee est plus recente.
   La version sera installée, sauf s'il existe une version appartenant à une autre distribution ou si la version installée est plus recente.
    
    
   0 < P <=100
   0 < P <=100
   La version sera installee si aucune version du paquet n'est installee.
   La version sera installée si aucune version du paquet n'est installée.
    
    
   P < 0
   P < 0
   Cette priorite empeche l'installation de la version.
   Cette priorite empêche l'installation de la version.




Les quelques recommandations qui suivent devraient vous aider a etablir des priorites qui ne mettront pas votre systeme en danger. Dans ce qui suit, ''branche principale'' designe la branche de Debian que vous avez choisie de suivre en priorite (stable, testing ou sid), les autres depots presents dans le sources.list ne servant qu'a y piocher des paquets si besoin est.
Les quelques recommandations qui suivent devraient vous aider a établir des priorités qui ne mettront pas votre système en danger. Dans ce qui suit, ''branche principale'' désigne la branche de Debian que vous avez choisie de suivre en priorité (stable, testing ou sid), les autres dépôts presents dans le sources.list ne servant qu'a y piocher des paquets si besoin est.




- '''Garder des priorites identiques pour les depots Debian officiels d'une meme branche'''. C'est le comportement par defaut (quand l'on a que les depots de la branche principale dans le sources.list sans preferences). Tout manquement a cette regle casse le comportement par defaut et peut generer des resultats tres dommageables car non prevus par les devellopeurs Debian.
- '''Garder des priorités identiques pour les dépôts Debian officiels d'une même branche'''. C'est le comportement par défaut (quand l'on a que les dépôts de la branche principale dans le sources.list sans 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.




- '''Attribuer une priorite comprise entre 500 et <990 pour la branche principale''' et la/les branche(s) comportant des paquets aux versions =< a cette branche principale.
- '''Attribuer une priorité comprise entre 500 et <990 pour la branche principale''' et la/les branche(s) comportant des paquets aux versions =< à cette branche principale.


Pourquoi <990? Car lorsque l'on utilise l'option ''-t branche'' pour piocher des paquets dans une autre branche que la principale, celle-ci devient temporairement la branche par defaut et a donc une priorite de 990. On comprend donc aisement qu'avoir une priorite =>990 pour la branche principale perturbe cette option.
Pourquoi <990? Car lorsque l'on utilise l'option ''-t branche'' pour piocher des paquets dans une autre branche que la principale, celle-ci devient temporairement la branche par défaut et a donc une priorite de 990. On comprend donc aisément qu'avoir une priorite =>990 pour la branche principale perturbe cette option.


Les methodes pour piocher dans les differents depots sont expliquees un peu plus bas, dans le paragraphe ''Comment piocher dans les differents depots du sources.list?'' ce qui devrait clarifier ce point.
Les méthodes pour piocher dans les differents dépôts sont expliquées un peu plus bas, dans le paragraphe ''Comment piocher dans les différents dépôts du sources.list?'' ce qui devrait clarifier ce point.




- '''Attribuer une priorite comprise entre 1 et <100 pour la/les branche(s) comportant des paquets aux versions > a la branche principale'''. Ceci permet d'installer les paquets a la demande ou a ''aptitude'' de le faire simplement en cas de besoins sans pour autant "suivre" les paquets installes a partir des ces depots.
- '''Attribuer une priorité comprise entre 1 et <100 pour la/les branche(s) comportant des paquets aux versions > à la branche principale'''. Ceci permet d'installer les paquets à la demande ou a ''aptitude'' de le faire simplement en cas de besoins sans pour autant "suivre" les paquets installés à partir des ces dépôts.


Si on veut les "suivre", c'est a dire qu'ils se mettent a jours automatiquement si une nouvelle version est placee dans ces depots lors d'une mise a jour, il est normalement suffisant d'attribuer une priorite a ces branches comprise entre 100 et <500. Si c'est envisageable individuellement ce n'est pas prudent pour un preferences generique du fait des dependances.
Si on veut les "suivre", c'est a dire qu'ils se mettent à jour automatiquement si une nouvelle version est placée dans ces depots lors d'une mise a jour, il est normalement suffisant d'attribuer une priorité à ces branches comprise entre 100 et <500. Si c'est envisageable individuellement ce n'est pas prudent pour un preferences générique du fait des dépendances.




- D'un point de vue pratique, '''utiliser des chiffres ronds''' (900, 800, 90...). Cela permet d'adapter facilement le preferences en fonction des besoins individuels (ajout de depots, etc) sans avoir a decaler toutes les autres entrees dans le preferences et c'est ainsi beaucoup plus lisible et donc facile de faire la differences entre les differentes priorites des depots a la lecture du ''apt-cache policy''.
- D'un point de vue pratique, '''utiliser des chiffres ronds''' (900, 800, 90...). Cela permet d'adapter facilement le preferences en fonction des besoins individuels (ajout de dépôts, etc) sans avoir à décaler toutes les autres entrées dans le preferences et c'est ainsi beaucoup plus lisible et donc facile de faire la différence entre les différentes priorités des dépôts à la lecture du ''apt-cache policy''.




==== Comment piocher dans les differents depots du sources.list? ====
==== Comment piocher dans les différents dépôts du sources.list? ====


Tout d'abord, pour que le fichier preferences soit pris en compte apres une modification, il vous faut mettre a jour APT en utilisant soit la commande '''apt-get update''', soit la commande '''aptitude update'''. Verifiez ensuite a l'aide de ''apt-cache policy'' que les priorites sont correctes.
Tout d'abord, pour que le fichier preferences soit pris en compte apres une modification, il vous faut mettre à jour APT en utilisant soit la commande '''apt-get update''', soit la commande '''aptitude update'''. Vérifiez ensuite à l'aide de ''apt-cache policy'' que les priorités sont correctes.




Il y a deux manieres d'indiquer a APT d'aller piocher dans des depots differents que ceux de la branche principale (les commandes qui suivent sont valable a la fois pour ''apt-get'' et pour ''aptitude''):
Il y a deux manières d'indiquer à APT d'aller piocher dans des dépôts différents que ceux de la branche principale (les commandes qui suivent sont valable à la fois pour ''apt-get'' et pour ''aptitude''):




- Vous utiliserez '''apt-get install -t branche paquet(s)''' si vous voulez installer un paquet avec une version superieure a celle qui se trouve dans votre branche principale. Par exemple, cette branche est testing et vous voulez utiliser le paquet ardour present dans sid parce qu'il est plus recent, vous utiliserez cette commande:
- Vous utiliserez '''apt-get install -t branche paquet(s)''' si vous voulez installer un paquet avec une version supérieure à celle qui se trouve dans votre branche principale. Par exemple, cette branche est testing et vous voulez utiliser le paquet ardour présent dans sid parce qu'il est plus récent, vous utiliserez cette commande:


   apt-get install -t unstable ardour
   apt-get install -t unstable ardour




Lorsque l'on utilise l'option ''-t branche'' pour installer des paquets d'une autre branche que la principale, celle-ci devient temporairement la branche par défaut et a donc une priorite de 990. Du coup les dependances sont mieux gerees.
Lorsque l'on utilise l'option ''-t branche'' pour installer des paquets d'une autre branche que la principale, celle-ci devient temporairement la branche par défaut et a donc une priorite de 990. Du coup les dépendances sont mieux gérées.




Ligne 202 : Ligne 202 :




Le probleme c'est que APT voudra remettre a niveau le paquet downgrade lors de la prochaine mise a jour. Il faut donc bloquer le paquet dans sa version nouvellement installee. Pour cela il y a deux possibilites:
Le problème c'est que APT voudra remettre à niveau le paquet downgrade lors de la prochaine mise a jour. Il faut donc bloquer le paquet dans sa version nouvellement installée. Pour cela il y a deux possibilites:




- Soit '''utiliser la commande aptitude hold paquet'''. Pour debloquer le paquet il suffira de lancer la commande '''aptitude unhold paquet'''. La commande '''aptitude search ~U''' permet de voir la liste des paquets a mettre a jour, les paquets que vous avez bloque par cette methode y apparaitront precedes d'un '''h'''.
- Soit '''utiliser la commande aptitude hold paquet'''. Pour débloquer le paquet il suffira de lancer la commande '''aptitude unhold paquet'''. La commande '''aptitude search ~U''' permet de voir la liste des paquets à mettre à jour, les paquets que vous avez bloqué par cette méthode y apparaitront précédés d'un '''h'''.




- Soit '''etiqueter le paquet''' dans le fichier preferences '''avec une priorite de 1001''' et en renseignant la ligne ''Pin'' avec le numero de version du paquet bloque ou avec la variable release''' a=now'''.
- Soit '''étiqueter le paquet''' dans le fichier preferences '''avec une priorite de 1001''' et en renseignant la ligne ''Pin'' avec le numero de version du paquet bloqué ou avec la variable release''' a=now'''.




Par exemple si je veux downgrader ardour de la ''version 1:2.8.11-1'' presente dans sid a la ''version 1:2.8.9-1'' presente dans testing, j'effectuerai un '''aptitude install ardour/testing''' avant d'ajouter cette entree dans le preferences:
Par exemple si je veux downgrader ardour de la ''version 1:2.8.11-1'' présente dans sid à la ''version 1:2.8.9-1'' présente dans testing, j'effectuerai un '''aptitude install ardour/testing''' avant d'ajouter cette entrée dans le preferences:


   Package: ardour
   Package: ardour
Ligne 218 : Ligne 218 :




Si vous avez un doute sur le numero de version a inserer dans la ligne ''Pin'', un '''apt-cache policy''' paquet vous renseignera, dans le cas de notre exemple:
Si vous avez un doute sur le numéro de version a insérer dans la ligne ''Pin'', un '''apt-cache policy''' paquet vous renseignera, dans le cas de notre exemple:


   # apt-cache policy ardour
   # apt-cache policy ardour
Ligne 232 : Ligne 232 :




Encore plus simple, vous pouvez assigner a la ligne ''Pin'' la variable de release '''a=now''', variable que l'on pourrait expliquer par ''paquet(s) installe(s) maintenant''.
Encore plus simple, vous pouvez assigner à la ligne ''Pin'' la variable de release '''a=now''', variable que l'on pourrait expliquer par ''paquet(s) installe(s) maintenant''.


   Package: ardour
   Package: ardour
Ligne 239 : Ligne 239 :




Dans notre exemple, avec cette entree, ''le paquet ardour qui est installe maintenant sera forcement installe meme s'il s'agit d'un retour en arriere'', donc ne sera pas mis a jour. Pour debloquer le paquet il suffira d'enlever son entree du fichier preferences.
Dans notre exemple, avec cette entrée, ''le paquet ardour qui est installé maintenant sera forcément installé même s'il s'agit d'un retour en arrière'', donc ne sera pas mis à jour. Pour débloquer le paquet il suffira d'enlever son entrée du fichier preferences.




'''N'hesitez pas a simuler en utilisant l'option de simulation -s'''. Par exemple faire '''apt-get install -s ardour/testing''' va simuler le downgrade du paquet ardour sans l'appliquer reellement, ca permet de verifier que le comportement de la commande est bien celui que vous attendez. Si tout se passe bien effectuez reellement la commande en enlevant l'option ''-s''. cette option fonctionne egalement avec ''aptitude'', ou encore en combinaison avec l'option ''-t'' (par exemple ''apt-get install -s -t unstable ardour''), aussi pour effectuer des mises a jours (par exemple ''aptitude safe-upgrade -s''), etc... C'est une securite non negligeable.
'''N'hésitez pas à simuler en utilisant l'option de simulation -s'''. Par exemple faire '''apt-get install -s ardour/testing''' va simuler le downgrade du paquet ardour sans l'appliquer reellement, ça permet de vérifier que le comportement de la commande est bien celui que vous attendez. Si tout se passe bien effectuez réellement la commande en enlevant l'option ''-s''. cette option fonctionne également avec ''aptitude'', ou encore en combinaison avec l'option ''-t'' (par exemple ''apt-get install -s -t unstable ardour''), aussi pour effectuer des mises à jour (par exemple ''aptitude safe-upgrade -s''), etc... C'est une sécurité non négligeable.


== Stable ==
== Stable ==
editor, reviewer
523

modifications

Menu de navigation