Skip navigation

Derrière ce titre plus trollifère qu’autre chose (et le fait que ce blog revienne enfin à la vie), se cache une réalité : les paquets de Debian Stable sont vieux. Vous me direz, c’est bien normal vu qu’une nouvelle version de paquet pourrait introduire une instabilité. Et je suis bien d’accord avec vous. Mais il arrive que l’on ait besoin d’une fonctionnalité non présente dans la version du logiciel présent dans les dépôts de sa petite Debian Lenny adorée. Un exemple ? J’ai été amené à mettre en production un nginx, par souci de performance, apache ne tenant plus la charge (troll troll troll), le souci a été que la version présente dans les dépôts est assez vieille :
$ nginx -V
nginx version: nginx/0.6.32

Cette version ne comporte pas tout ce qu’il faut pour faire du bon url rewritting et ne gère pas le cache si on utilise du fastcgi (ça vaudra peut être un article d’ailleurs).

Que faire ? Installer le .deb disponible sur le site des packages debian pour squeeze ? Non, les dépendances ne sont pas non plus dans les dépôts, ça ferait trop de paquets à installer à la main, et pour la maintenance c’est pas tip top… Tout compiler ? Oui mais non, je n’ai pas que ça à faire non plus, j’aurais pris une distribution source à la place sinon. Et si on migrait vers Squeeze, la version est bonne là bas, les prés sont verts, les sirènes sont… Non, n’oublions pas que c’est un serveur en production et que Squeeze n’est pas encore considérée comme stable (à l’écriture de cette article elle venait d’être freezée).

Et c’est ici que le pinning va nous aider.

Mais avant tout, qu’est-ce que le pinning ?

Le pinning est l’art de mélanger différents dépôts (Stable, Testing, Unstable, Whateveryouwant) tout en leur accordant un poids qui permet de prioriser certains dépôts. On peut par exemple ajouter un dépôt Squeeze à sa Lenny favorite pour obtenir un paquet de Squeeze et toutes ses mises à jours/dépendances tout en accordant un poids supérieur aux dépôts Lenny, pour ne pas mettre à jour son système en entier alors que l’on avait juste besoin d’un seul paquet plus à jour. Vous me suivez ? C’est très bien car c’est exactement ce que nous allons faire.
Avant tout, le disclaimer : hydraze.org et l’auteur de ce billet ne pourront être rendu responsable de tout problème ayant été causé par cet article.

Commençons par le commencement, ajoutons le dépôt voulu à votre fichier /etc/apt/sources.list qui contient la liste des dépôts. Ici le dépôt qui nous intéresse sera :
deb http://ftp.fr.debian.org/debian squeeze main non-free contrib

Je vous laisse utiliser votre éditeur favoris pour ajouter cette ligne à la fin de votre sources.list ou alors simplement utiliser cette commande avec les droits root :
echo -e "#testing\ndeb http://ftp.fr.debian.org/debian testing main non-free contrib" >> /etc/apt/sources.list

Une fois ceci fait, vous devrez maintenant définir le poids de votre dépôt, pour cela il faut éditer le fichier /etc/apt/preferences et y rajouter :
Package: *
Pin: release a=stable
Pin-Priority: 991
Package: *
Pin: release a=testing
Pin-Priority: 450

Une fois fait, vous pourrez effectuer un aptitude update ou un apt-get update

Comment installe-t’on un paquet dans un dépôt avec un poids plus bas ? C’est simple, on le suffixe avec /dépôt.
Ainsi, pour reprendre l’exemple de notre nginx, il a fallu écrire :
aptitude install nginx/testing

Vérifions la version de notre nginx :
$ nginx -V
nginx version: nginx/0.7.67

Et voilà donc ça de fait.

Merci à vous d’avoir lu cet article et merci à Pierref pour sa relecture, sachez que de nombreux autres articles sont en préparation, de mon côté, comme celui de lidstah et que l’on a un petit nouveau que je ne tarderai pas à vous présenter. Si vous avez des questions n’hésitez pas à les poser en commentaire. À très bientôt 🙂

One Trackback/Pingback

  1. By Twitted by Hydraze on 26 Août 2010 at 9:50

    […] This post was Twitted by Hydraze […]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

What is 14 + 5 ?
Please leave these two fields as-is: