{"id":113,"date":"2014-09-26T16:40:51","date_gmt":"2014-09-26T15:40:51","guid":{"rendered":"http:\/\/almin.tf\/blog\/?p=113"},"modified":"2025-11-30T18:50:15","modified_gmt":"2025-11-30T17:50:15","slug":"epinglage-apt-pinning","status":"publish","type":"post","link":"https:\/\/almic.fr\/blog\/2014\/09\/26\/epinglage-apt-pinning\/","title":{"rendered":"L\u2019\u00e9pinglage APT (APT pinning)"},"content":{"rendered":"<p style=\"text-align: justify;\">Quand on mixe plusieurs d\u00e9p\u00f4ts, l\u2019\u00e9pinglage APT permet de d\u00e9finir des priorit\u00e9s d\u2019installation et de mise \u00e0 jour, par d\u00e9p\u00f4t ou par paquet.<\/p>\n<p><!--more--><\/p>\n<p style=\"text-align: justify;\">Les commandes pr\u00e9fix\u00e9es d\u2019un # sont \u00e0 lancer en root. Les commandes pr\u00e9fix\u00e9es d\u2019un % sont \u00e0 lancer en simple utilisateur.<\/p>\n<h4>Contexte<\/h4>\n<p style=\"text-align: justify;\">J\u2019ai encore plusieurs serveurs qui tournent avec OpenVZ. Une fois qu\u2019on a appris \u00e0 l\u2019utiliser, OpenVZ est efficace : son overhead se limite \u00e0 quelques pourcents. Mais depuis wheezy, OpenVZ n\u2019est plus support\u00e9 par Debian. \u00c0 terme, il faudra migrer vers LXC ou Xen.<\/p>\n<p style=\"text-align: justify;\">Mes premiers tests avec LXC n\u2019\u00e9taient pas concluants, le projet \u00e9tait encore trop jeune. Je suis donc rest\u00e9 avec OpenVZ pour un moment, en attendant de faire un choix entre un LXC plus mature, ou bien Xen. Seulement, si on mets \u00e0 jour un conteneur VZ vers wheezy, on tombe sur <a href=\"https:\/\/bugs.debian.org\/cgi-bin\/bugreport.cgi?bug=683454\">ce probl\u00e8me.<\/a><\/p>\n<p style=\"text-align: justify;\">Mon workaround \u201crapide et sale\u201d, c\u2019\u00e9tait <i>apt-mark hold bash<\/i>. Mais la r\u00e9cente <a href=\"http:\/\/www.cert.ssi.gouv.fr\/site\/CERTFR-2014-ALE-006\/index.html\">faille de s\u00e9curit\u00e9 dans bash<\/a> m\u2019a incit\u00e9 \u00e0 utiliser une solution mieux adapt\u00e9e : l\u2019\u00e9pinglage APT (et squeeze-lts).<\/p>\n<h2>L\u2019option Default-Release<\/h2>\n<p style=\"text-align: justify;\">Un moyen simple pour trier les d\u00e9p\u00f4ts quand on en utilise que deux, c\u2019est l\u2019\u00e9pinglage automatique fourni par Default-Release.<\/p>\n<p style=\"text-align: justify;\">Cr\u00e9ez un fichier <i>\/etc\/apt\/apt.conf.d\/00default-release<\/i> et mettez dedans :<\/p>\n<p><code>APT::Default-Release \"wheezy\";<\/code><\/p>\n<p style=\"text-align: justify;\">En r\u00e9sum\u00e9, pour chaque paquet, cette option mets en place l\u2019\u00e9pinglage suivant :<\/p>\n<ul>\n<li>100 pour la version d\u00e9j\u00e0 install\u00e9e (si elle existe) ;<\/li>\n<li>500 pour les versions qui ne sont pas install\u00e9es et qui n&rsquo;appartiennent pas \u00e0 wheezy ;<\/li>\n<li>990 pour les versions qui ne sont pas install\u00e9es et qui appartiennent \u00e0 wheezy.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">On peut avoir plus de d\u00e9tails avec <i>man apt_preferences<\/i>, dans la section \u00ab\u00a0M\u00e9thode d&rsquo;interpr\u00e9tation des priorit\u00e9s par APT\u00a0\u00bb. Extrait :<\/p>\n<pre>Les priorit\u00e9s (P) indiqu\u00e9es dans le fichier des pr\u00e9f\u00e9rences\r\ndoivent \u00eatre des entiers positifs ou n\u00e9gatifs. Ils sont interpr\u00e9t\u00e9s \u00e0\r\npeu pr\u00e8s comme suit :\r\n\r\n       P >= 1000\r\n           cette priorit\u00e9 entra\u00eene l'installation du paquet m\u00eame s'il\r\n           s'agit d'un retour en arri\u00e8re.\r\n           \r\n       990 <= P < 1000\r\n           la version sera install\u00e9e, m\u00eame si elle n'appartient pas \u00e0 la\r\n           distribution par d\u00e9faut ; mais elle ne sera pas install\u00e9e si\r\n           la version install\u00e9e est plus r\u00e9cente.\r\n           \r\n       500 <= P < 990\r\n           La version sera install\u00e9e, sauf s'il existe une version\r\n           appartenant \u00e0 la distribution par d\u00e9faut ou si la version\r\n           install\u00e9e est plus r\u00e9cente.\r\n           \r\n       100 <= P < 500\r\n           la version sera install\u00e9e, sauf s'il existe une version\r\n           appartenant \u00e0 une autre distribution ou si la version\r\n           install\u00e9e est plus r\u00e9cente.\r\n\r\n       0 < P < 100\r\n           la version sera install\u00e9e si aucune version du paquet n'est\r\n           install\u00e9e.<\/pre>\n<p style=\"text-align: justify;\">Mais \u00e7a ne permet pas d\u2019appliquer des r\u00e8gles sp\u00e9cifiques pour un paquet. Donc, dans notre conteneur wheezy, la version wheezy de bash prendra le pas sur la version squeeze-lts. Pour forcer la version qui ne bloque pas vzctl enter, il va falloir d\u00e9finir des r\u00e8gles d\u2019\u00e9pinglage personnalis\u00e9es.<\/p>\n<h2>L\u2019\u00e9pinglage personnalis\u00e9<\/h2>\n<p style=\"text-align: justify;\">Il faut commencer par supprimer le fichier <i>\/etc\/apt\/apt.conf.d\/00default-release<\/i>, s\u2019il existe. L\u2019option Default-Release semble \u00e9craser toute r\u00e8gle personnelle.<\/p>\n<p style=\"text-align: justify;\">Dans le fichier <i>\/etc\/apt\/preferences<\/i>, on d\u00e9finit une r\u00e8gle qui reproduit le comportement de Default-Release :<\/p>\n<p><code>Package: *<br \/>\nPin: release o=Debian,n=wheezy<br \/>\nPin-Priority: 990<\/code><\/p>\n<p style=\"text-align: justify;\">Pour on ajoute une r\u00e8gle pour bash. Attention, il faut une ligne vide entre chaque r\u00e8gle.<\/p>\n<p><code>Package: bash<br \/>\nPin: release a=squeeze-lts<br \/>\nPin-Priority: 991<\/code><\/p>\n<p style=\"text-align: justify;\">Le o signifie origine, le n correspond \u00e0 la distribution wheezy dans sa globalit\u00e9, le a correspond \u00e0 une ligne dans <i>sources.list<\/i>. Il faut parfois jongler avec <i>Pin: release o=, Pin: release a=<\/i> et <i>Pin: origin \"url\"<\/i> jusqu\u2019\u00e0 ce qu\u2019APT identifie le d\u00e9p\u00f4t vis\u00e9 et qu\u2019il l\u2019\u00e9pingle correctement.<\/p>\n<p style=\"text-align: justify;\">On v\u00e9rifie que l\u2019\u00e9pinglage est bien pris en compte.<\/p>\n<pre>% apt-cache policy bash\r\nbash:\r\n  Install\u00e9 : 4.1-3+deb6u2\r\n  Candidat : 4.1-3+deb6u2\r\n  <b>\u00c9pinglage de paquet : 4.1-3+deb6u2<\/b>\r\n Table de version :\r\n     4.2+dfsg-0.1+deb7u3 991\r\n        <b>990<\/b> http:\/\/security.debian.org\/ wheezy\/updates\/main i386 Packages\r\n     4.2+dfsg-0.1 991\r\n        <b>990<\/b> http:\/\/ftp.fr.debian.org\/debian\/ wheezy\/main i386 Packages\r\n *** 4.1-3+deb6u2 <b>991<\/b>\r\n        500 http:\/\/http.debian.net\/debian\/ squeeze-lts\/main i386 Packages\r\n        100 \/var\/lib\/dpkg\/status\r\n     4.1-3 991\r\n        500 http:\/\/ftp.fr.debian.org\/debian\/ squeeze\/main i386 Packages<\/pre>\n<p style=\"text-align: justify;\">Les 990 en gras, sur les lignes des d\u00e9p\u00f4ts wheezy, indique que la release wheezy a la bonne priorit\u00e9. Le 991 en gras, sur la ligne des paquets, indique que bash est bien \u00e9pingl\u00e9 par une r\u00e8gle, ici sur la version squeeze-lts. J\u2019ignore pourquoi les d\u00e9veloppeurs Debian ont choisi d\u2019afficher l\u2019\u00e9pinglage devant chaque version plut\u00f4t que juste devant la version squeeze-lts. En tous cas, la ligne \u00ab\u00a0\u00c9pinglage de paquet\u00a0\u00bb vous assure que tout marche comme pr\u00e9vu.<\/p>\n<h4>Les mises \u00e0 jour dist-upgrade<\/h4>\n<p style=\"text-align: justify;\">Durant une mise \u00e0 jour, apr\u00e8s apt-get upgrade et avant dist-upgrade, on peut avoir des choses bizarres avec l\u2019\u00e9pinglage. Si des paquets ne doivent pas \u00eatre mis \u00e0 jour, il faut les geler avec :<\/p>\n<p><code># apt-mark hold paquet<\/code><\/p>\n<p style=\"text-align: justify;\">Si apt-mark r\u00e9pond \u00ab <i>Error importing apt_pkg, is python-apt installed?<\/i> \u00bb alors que ce paquet est install\u00e9 :<\/p>\n<p><code># echo paquet hold | dpkg --set-selections<\/code><\/p>\n<h4>Le d\u00e9p\u00f4t DMO<\/h4>\n<p style=\"text-align: justify;\">Si vous utilisez le d\u00e9p\u00f4t DMO de Christian Marillat, je vous conseille de cr\u00e9er un fichier <i>\/etc\/apt\/preferences.d\/dmo<\/i> :<\/p>\n<p><code>Package: *<br \/>\nPin: origin www.deb-multimedia.org<br \/>\nPin-Priority: 600<\/code><\/p>\n<p style=\"text-align: justify;\">De cette mani\u00e8re, les paquets DMO n\u2019\u00e9craseront pas la version de la release par d\u00e9faut, mais resteront prioritaires par rapport aux autres sources (par d\u00e9faut \u00e0 500), et par rapport aux paquets d\u00e9j\u00e0 install\u00e9s (par d\u00e9faut \u00e0 100), ou encore des backports (\u201cpackages are pinned to 100 by using ButAutomaticUpgrades: yes in the Release files\u201d).<\/p>\n<p style=\"text-align: justify;\">Ensuite, pour chaque paquet dont vous voulez la version DMO, ajoutez une r\u00e8gle pour \u00e9pingler ce paquet \u00e0 991, comme pour bash dans les conteneurs VZ.<\/p>\n<p><code>Package: mplayer<br \/>\nPin: origin www.deb-multimedia.org<br \/>\nPin-Priority: 991<\/code><\/p>\n<p style=\"text-align: justify;\">Si vous voulez plus de d\u00e9tails, je vous conseille la lecture de ces pages :<\/p>\n<p><a href=\"https:\/\/wiki.debian.org\/AptPreferences\">https:\/\/wiki.debian.org\/AptPreferences<\/a><br \/>\n<a href=\"http:\/\/www.argon.org\/~roderick\/apt-pinning.html\">http:\/\/www.argon.org\/~roderick\/apt-pinning.html<\/a><br \/>\n<a href=\"https:\/\/www.isalo.org\/wiki.debian-fr\/L'etiquetage_de_paquets_via_le_fichier_\/etc\/apt\/preferences\">https:\/\/www.isalo.org\/wiki.debian-fr\/L'etiquetage_de_paquets_via_le_fichier_\/etc\/apt\/preferences<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quand on mixe plusieurs d\u00e9p\u00f4ts, l\u2019\u00e9pinglage APT permet de d\u00e9finir des priorit\u00e9s d\u2019installation et de mise \u00e0 jour, par d\u00e9p\u00f4t ou par paquet.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-113","post","type-post","status-publish","format-standard","hentry","category-debian","radius"],"_links":{"self":[{"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/posts\/113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/comments?post=113"}],"version-history":[{"count":25,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/posts\/113\/revisions"}],"predecessor-version":[{"id":492,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/posts\/113\/revisions\/492"}],"wp:attachment":[{"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/media?parent=113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/categories?post=113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/almic.fr\/blog\/wp-json\/wp\/v2\/tags?post=113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}