Rétroporter un paquet

Il arrive parfois lorsqu’on utilise une Debian stable qu’on ait envie d’utiliser un paquet ou une version de paquet disponible uniquement en testing. Parfois ce paquet se trouve dans les dépôts stable-backports, mais on n’a pas toujours cette chance.

Ce guide va vous donner la méthode pour rétroporter vous-même un paquet présent en testing sur une Debian stable. Pour l’exemple j’ai choisi le paquet tunesviewer présent uniquement à partir de Jessie que je vais compiler sur une Wheezy.

Pré-requis :

Pour tout rétroportage le paquet dpkg-dev doit être installé, et la liste des codes-sources des paquets de la testing doit être connue du système. Pour Jessie, ajoutez les deux lignes suivantes au fichier /etc/apt/sources.list puis lancez un [mono]# apt-get update[/mono] :

deb-src http://ftp.fr.debian.org/debian/ jessie main deb-src http://security.debian.org/ jessie/updates main

Rétroportage :

La récupération des dépendances de compilation du paquet est gérée automatiquement par APT, avec la commande suivante :

La compilation elle-même peut-être réalisée sans droits root, avec cette série de commandes :

$ apt-get source tunesviewer $ cd tunesviewer-1.4.99.2 $ dpkg-buildpackage -b -uc
Le paquet construit se trouve dans le répertoire d’où vous avez lancé la commande [mono]$ apt-get source tunesviewer[/mono] et peut-être installé ainsi que ses dépendances avec les commandes suivantes :

[code]# dpkg -i tunesviewer_1.4.99.2-1_all.deb

apt-get -f install[/code]

Dépendance manquante :

Si lors de la commande [mono]# apt-get build-dep paquet[/mono] APT retourne une erreur selon laquelle un paquet ne peut être trouvé dans les dépôts de Wheezy, cette dépendance de compilation doit elle-même être rétroportée suivant cette méthode puis être installée avant de pouvoir vous attaquer au paquet qui vous intéresse vraiment.


fran.b donne un peu plus bas la marche à suivre en cas de difficultés supplémentaires :
retroporter-un-paquet-t49698.html#p495590

Très bonne idée ce tuto car la question est souvent posée.
Dorénavant, un lien suffira.

Plusieurs remarques:
faire

fakeroot dpkg-buildpackage -b -ucafin de ne pas refaire les sources en même temps et de ne pas signer le paquet. Il est important de ne pas travailler en root. Un makefile mal foutu peut torpiller une installation si il est fait en root.

Il peut y avoir des difficultés que l’on règle au fur et à mesure. Pour reprendre la compilation, faire

Plusieurs difficultés peuvent arriver:

  • Mauvaise version de deb-helper, editer dans ce cas le fichier debian/compat et abaisser la version exigée. Il y aura peut être des grincements de dents.
  • Le paquet d’une dépendance existe mais pas dans la version adequate, ou vous en avez marre de retroporter 170 paquets. Vous pouvez passer outre les dépendances nécessaires en rajoutant l’option -d:

fakeroot dpkg-buildpackage -d -b -ucTrès souvent cela marche, cela peut aussi fournir une version ayant moins d’options mais suffisantes pour vos besoins.

  • Vous désirez modifier les options de compilation. Editez le fichier debian/rules en y adaptant vos options.

J’ai d’ailleurs une question concernant les dépots de sources debian :

Lorsqu’on consulte le site, on voir sur le coté droit de l’écran plusieurs fichiers concernant les sources :
[paquet_0.x-y.dsc]
[paquet_0.x.orig.tar.gz]
[paquet_0.x-y.diff.gz]

Un fichier orig et un diff. Qu’est vraiment l’archive orig ?

apt-get source donne le fichier orig ou applique le diff dessus ?

[quote=“fran.b”]Plusieurs remarques:
faire

Sauf erreur de ma part dpkg-buildpackage fait déjà appel à fakeroot, et les commandes sont déjà notées comme à lancer avec un simple utilisateur. J’ajoute par contre les switchs [mono]-b -uc[/mono], et te remercie de m’avoir appris pourquoi j’obtenais toujours cet avertissement au sujet de clés privées manquantes.

[quote=“fran.b”]Il peut y avoir des difficultés que l’on règle au fur et à mesure. Pour reprendre la compilation, faire

Plusieurs difficultés peuvent arriver:

  • Mauvaise version de deb-helper, editer dans ce cas le fichier debian/compat et abaisser la version exigée. Il y aura peut être des grincements de dents.
  • Le paquet d’une dépendance existe mais pas dans la version adequate, ou vous en avez marre de retroporter 170 paquets. Vous pouvez passer outre les dépendances nécessaires en rajoutant l’option -d:

fakeroot dpkg-buildpackage -d -b -ucTrès souvent cela marche, cela peut aussi fournir une version ayant moins d’options mais suffisantes pour vos besoins.

  • Vous désirez modifier les options de compilation. Editez le fichier debian/rules en y adaptant vos options.[/quote]
    Comme je me sens un poil fainéant, je vais me contenter d’un lien vers ton message :wink:

Je m’y suis peut-être mal pris, mais il m’est arrivé pour certaines applications de voir lors d’un [mono]apt-get build-dep paquet[/mono] une proposition d’upgrade de la libc6… Ça arrive ou c’est juste moi qui suis dans les choux?
Bon forcément je n’ai plus le paquet en tête…

thuban :
Ce genre de situation ne peut pas arriver si tu n’ajoutes que les lignes [mono]deb-src[/mono] pour testing. Par contre si tu ajoutes les lignes [mono]deb[/mono], même avec une priorité faible déclarée pour testing, un paquet dépendant pour sa construction d’une version plus récente de libc6-dev pourrait amener par le jeu des dépendances une version plus récente de libc6.

Je n’ai pas de situation de ce genre en tête, mais APT le permet.

Bon, je reprendrais ce tuto au calme plutôt que mes notes la prochaine fois, je sais où venir poser mes questions si ça ne fonctionne pas :slightly_smiling:

[quote=“vv222”]thuban :
Ce genre de situation ne peut pas arriver si tu n’ajoutes que les lignes [mono]deb-src[/mono] pour testing. Par contre si tu ajoutes les lignes [mono]deb[/mono], même avec une priorité faible déclarée pour testing, un paquet dépendant pour sa construction d’une version plus récente de libc6-dev pourrait amener par le jeu des dépendances une version plus récente de libc6.

Je n’ai pas de situation de ce genre en tête, mais APT le permet.[/quote]

En fait, en général, c’est tout simplement parce que dans les sources (source.list) il y a un libc6 plus récent (testing), or je crois bien que l’installation des -dev entraine l’installation du paquet lui même. Si ce paquet est de testing, la libc6 de testing va être installé et le retroportage sera complètement gaché. Il faut donc surtout avoir un sources.list ne contenant que le dépot sid en deb-src et les dépot stables, cela évite ce genre de soucis. Le retroportage peut être délicat, outre les soucis cités, si des fonctionnalités très récentes de la libc6 sont utilisées (ou d’une autre librairie fondamentale), le changement de la libc6 sera nécessaire dans ce cas et le retroprotage inutile (prendre le pinning). Un retroportage peut prendre beaucoup de temps dans certain cas (je me suis retrouvé une fois à devoir faire un backport complet de Xorg!!, j’ai des souvenirs pénibles de wine).

@vv222: tu vas envoyer ce tuto sur le wiki?

Probablement, je vais juste le laisser mûrir ici une semaine ou deux le temps de voir si d’autres questions remontent.