Destination Debian

Infos à la source, maîtrisez votre distribution Debian/Ubuntu

  • Soutenir
  • Mes livres
    • Mémento Git à 100%
    • Debian 8 Jessie
  • Lettre d’informations
  • Mes activités chez Debian
    • Historique
    • Mes projets
  • Mes autres sites
    • My blog on free software
    • Freexian, ma société
    • Mon blog perso
  • Contact
Home Archives for dpkg-gencontrol

Comment générer des dépendances différentes pour Debian et Ubuntu avec un paquet source commun

Posted on 16/03/2011 Written by Raphaël Hertzog

Il arrive que les dépendances requises par certains paquets diffèrent entre Debian et Ubuntu. Il reste néanmoins possible de garder un seul paquet source, capable de générer plusieurs variantes distinctes. Cet article décrit comment faire, pas-à-pas.

1. Quand est-ce nécessaire ?

Bien qu’il soit possible d’avoir des dépendances différentes en fonction de la distribution pour laquelle le paquet est construit, cela doit autant que possible être évité, et ne constituer que la dernière option possible, comme par exemple lorsque :

  • Ubuntu dispose de paquets que Debian ne propose pas (et réciproquement), alors que le paquet qui nous occupe profiterait de leurs installations.
  • Le nom du paquet diffère entre les deux distributions (et ce de manière volontaire, non en raison d’un défaut de synchronisation entre Ubuntu et Debian)
  • Les paquets sont construits différemment dans les deux distributions, ce qui entraîne une différence de dépendances d’exécution. Certains patches ne peuvent être appliqués qu’à Ubuntu.

2. Variables de substitution dans debian/control

Les dépendances variant entre les distributions ne peuvent pas être écrites « en dur » dans debian/control. Il est par contre possible d’utiliser une variable de substitution (substvar) qui sera remplacée par dpkg-gencontrol au moment de la compilation. Elle peut par exemple être notée ${dist:Depends} :

[...]
Depends: bzip2, ${shlibs:Depends}, ${misc:Depends}, ${dist:Depends}
[...]

A noter qu’il est fort probable que vous ayez déjà d’autres variables de substitution telles que ${shlibs:Depends} pour dpkg-shlibdeps, ou ${misc:Depends} pour debhelper et ses scripts dh_*.

3. dpkg-gencontrol et option -V

Les valeurs de dépendance remplacées par cette nouvelle variable doivent être communiquées à dpkg-gencontrol, via l’option -V. Exemple :

dpkg-gencontrol [...] -Vdist:Depends="paquet-A (>= 2), paquet-B"

Si vous utilisez debhelper, l’option doit être passée à dh_gencontrol après deux tirets (--) :

dh_gencontrol -- -Vdist:Depends="paquet-A (>= 2), paquet-B"

Si vous utilisez CDBS, vous pouvez passer à la variable DEB_DH_GENCONTROL_ARGS_ALL la valeur souhaitée :

include /usr/share/cdbs/1/rules/debhelper.mk
DEB_DH_GENCONTROL_ARGS_ALL = -- -Vdist:Depends="paquet-A (>= 2), paquet-B"

Les valeurs passées à dpkg-gencontrol sont, dans tous les exemples précédents, statiques. Voyons maintenant comment les rendre dépendantes de la distribution visée.

4. Utiliser dpkg-vendor dans debian/rules

dpkg-vendor est un petit outil (fourni avec le paquet dpkg-dev) permettant d’interpréter le fichier /etc/dpkg/origins/default (fourni quant à lui par le paquet base-files) pour connaître la distribution actuelle ainsi que ses prédécesseurs. Il peut être utilisé dans debian/rules pour adapter le comportement en fonction de la distribution utilisée. La page de man explicite les nombreuses options supportées, nous allons quant à nous n’en utiliser qu’une ici : --derives-from <vendor>. Cette option entraîne le renvoi d’un code retour à la fin du script, égal à 0 si la distribution utilisée est — ou dérive de — celle indiquée, et vaut 1 sinon.

Si l’on assemble maintenant toutes les pièces du puzzle entre elles, on peut donc utiliser dpkg-vendor pour définir dynamiquement la valeur de la variable de substitution dans debian/rules. Supposons par exemple que votre paquet doit dépendre de « paquet-A (>= 2) » sur Ubuntu (et ses dérivés), de « paquet-B » sinon. En utilisant le fichier de règles de debhelper 7, cela donne :

ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
	SUBSTVARS = -Vdist:Depends="paquet-A (>= 2)"
else
	SUBSTVARS = -Vdist:Depends="paquet-B"
endif

%:
	dh $@

override_dh_gencontrol:
	dh_gencontrol -- $(SUBSTVARS)

Si vous utilisez CDBS, cela donnerait :

include /usr/share/cdbs/1/rules/debhelper.mk
ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
	DEB_DH_GENCONTROL_ARGS_ALL = -- -Vdist:Depends="paquet-A (>= 2)"
else
	DEB_DH_GENCONTROL_ARGS_ALL = -- -Vdist:Depends="paquet-B"
endif

Cet article est une traduction de How to generate different dependencies on Debian and Ubuntu with a common source package contribuée par Weierstrass01. Suivez moi sur Identi.ca, Twitter et Facebook. Ou abonnez-vous à ce blog par RSS ou par email.

Filed Under: Documentation, Documentation pour les contributeurs Tagged With: Debian, dpkg-gencontrol, dpkg-vendor, HOWTO, Packaging, Ubuntu

Découvrez mes ouvrages

Apprenez en plus en cliquant sur leur couverture :

Lettre d’informations

Abonnez-vous à ma lettre d'informations, saisissez votre adresse électronique et cliquez sur « S'abonner » :

Suivez moi

  • Adresse mail
  • Facebook
  • Github
  • Flux RSS
  • Twitter

Archives

Planètes

  • Planète April
  • Planète Debian-Fr
  • Planète des utilisateurs Debian
  • Planète Libre

Flux Mon blog anglophone sur le libre

  • Freexian’s report about Debian Long Term Support, July 2022 31/08/2022
  • Freexian’s report about Debian Long Term Support, June 2022 26/07/2022
  • Freexian’s report about Debian Long Term Support, May 2022 23/06/2022
  • Freexian’s report about Debian Long Term Support, April 2022 03/06/2022
  • Debian 9 soon out of (free) security support 11/05/2022
  • Freexian’s report about Debian Long Term Support, March 2022 28/04/2022

Mots-clés

3.0 (quilt) Annonce aptitude Cahier Admin conffile Contribuer DebConf Debian Debian France Debian Live Distro Tracker dpkg dpkg-source Eyrolles Freexian GNOME GSOC HOWTO Informatique Kali Linux Libre Livres LTS Moi multiarch nautilus-dropbox nettoyage Packaging Politique Presse Pro Programmation PTS publican python-django Release Rolling Référence Résumé d'activité synaptic Testing Tryton Ubuntu unstable wordpress

Articles récents

  • Le logiciel libre a t’il une couleur politique ?
  • Mes activités libres en janvier 2017
  • Élections présidentielles, logiciel libre et Charlotte Marchandise
  • Mes activités libres en décembre 2016
  • Mes activités libres en novembre 2016

Copyright © 2023 · Focus Pro Theme sur Genesis Framework · WordPress · Log in