[Linux-bruxelles] RESOLU!! Problemes pour construire le package Debian uw-imapd-2003

Miguel Telleria de Esteban miguel at mtelleria.com
Dim 4 Mai 11:23:48 CEST 2003


Cuenta la leyenda que el Sat, 3 May 2003 20:45:59 +0200 Miguel 
escribió:

MTDE> Bonjour la liste,
MTDE> 
MTDE> Je m'amuse à hacker le source du uw-imapd sur Debian Sid.
MTDE> 
MTDE> 1.  apt-get source uw-imapd
MTDE> 
MTDE> [...]
MTDE> 
MTDE> d-devlibdeps debian/libc-client2003debian-dev.substvars
MTDE> c-client/libc-client.so
MTDE>  --> comerr-dev package exists.
MTDE>  --> libc6-dev package exists.
MTDE> devlibs error: There is no package matching [libcrypto0.9.6-dev]
MTDE> and noone provides it, please report bug to d-shlibs maintainer
MTDE>  --> libkrb5-dev package exists.
MTDE>  --> libpam0g-dev package exists.
MTDE> devlibs error: There is no package matching [libssl0.9.6-dev] and
MTDE> noone provides it, please report bug to d-shlibs maintainer make:
MTDE> *** [install] Error 1
MTDE> 
MTDE> Voici l'output de ldd c-client/libc-client.so
MTDE> 
MTDE>         libpam.so.0 => /lib/libpam.so.0 (0x400c6000)
MTDE>         libdl.so.2 => /lib/libdl.so.2 (0x400cf000)
MTDE>         libc.so.6 => /lib/libc.so.6 (0x400d2000)
MTDE>         libssl.so.0.9.6 => /usr/lib/i586/libssl.so.0.9.6
MTDE>         (0x401e2000) libcrypto.so.0.9.6 =>
MTDE>         /usr/lib/i586/libcrypto.so.0.9.6 (0x4020e000)
MTDE>         libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2
MTDE>         (0x402c5000) libkrb5.so.3 => /usr/lib/libkrb5.so.3
MTDE>         (0x402d6000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3
MTDE>         (0x4032c000) libcom_err.so.2 => /lib/libcom_err.so.2
MTDE>         (0x4033d000)/lib/ld-linux.so.2 => /lib/ld-linux.so.2
MTDE>         (0x80000000) libresolv.so.2 => /lib/libresolv.so.2
MTDE>         (0x4033f000)
MTDE> 

[Je crois avoir resolu le problème en hackant un peu d-devlibdeps,
je partage avec vous mais lignes d'investigation pour les curieux...]

POUR LOCALISER LE PROBLÈME

D'abbord on isole le problème.  Le problème arrive avec l'invocation
du command d-devlibdeps sur la librarie recement construite libc-client.so.
On copie la librarie dans un repertoire separé et on lance la commande
de nouveau.

	$ d-devlibdeps tempfile libc-client.so
        (l'output est le mème).

On cherche l'executable qu'on utilise avec which et on regarde de quel
type de fichier il s'agit.

	$which `d-devlibdeps`
        /usr/bin/d-devlibdeps
	$file `which d-devlibdeps`
	/usr/bin/d-devlibdeps: Bourne-Again shell script text executable

On fait une copie local du fichier d-devlibdeps et on la regarde avec
Emacs.  Je vois d'abbord quelques expression reguliers de transformation
"s/<xxx>/<yyy>" qui semblent être la clef du fonctionement de la script.

Je ne suis pas familiarisé avec les scripts bash ni avec sed ni awk
mais rien m'empeche de tracer l'execution avec les options de
bash -v (print input) et -x (print output).

Donc on lance de nouveau:

        $bash -v -x d-devlibdeps temp_file libc-client.so 2>output.txt
           (Le 2> redirige stderr au lieu de stdout.  C'est la où bash
		envoie ces traces).

Pas encore tout à fait claire mais on a des idées déjà.  Apparement
la script cherche les packages de development des librairies dont
le programme depends.  L'association librarie-binaire <--> package
de development se fait dans les expression regulières, ensuite la
script regarde avec un "apt-cache show" ou "apt-cache showpkg" si
ces packages existent ou non dans l'ensemble des packages.

Pour encore etre plus sûr je cherche l'apparition du la librairie 
"libpam" (dont d-devlibdeps ne se plaint pas) et la librarie "libcryto"
(qui cause le problème).

Je vois qu'avec libpam l'argument devient libpam0g-dev qui existe
en effet sur les packages, mais par contre le nom  libcrypto0.9.6
n'est pas modifié et le package libcryto0.9.6-dev n'existe pas 
sur Debian Sid à ce moment la.

C'est maintenant quand je repère que la macro substitue libcrypto et
libssl versions 0.9.7 mais pas les versions 0.9.6.  Donc voila
mon "hackage":

	Je copie les lignes des libssl0.9.7 et libcrypto0.9.7 et
	les renomme à libcrypto0.9.6.

J'execute la script de nouveau et maintenant ça marche!!!.  Effectivement
comme dis dans l'output, le problème se trouve dans le package d-shlibs.
En regardant dans son README.Debian il dit explicitement que
d-devlibdeps n'est pas encore dans un êtat d'usage stable!!.

POUR FIXER LE PROBLÈME

La solution la plus evident serait de ecraser /usr/bin/d-devlibdeps avec
la version hackée.  Mais je voudrais faire quelque chose de plus
durable...

Donc je downloade le packatage d-shlibs en source et je fais
la modification dans le packetage mème:

	apt-get source d-shlibs
	(je change le fichier d-devlibdeps).

Après je modifie le changelog courant pour creer une revision
et pas une nouvelle version.

	J'edite le fichier debian/changelog et modifie la
        dernière version du 0.15 à 0.15-1.

Ensuite j'ajoute mon entrée à l'aide du dch:

	dch -i "Added support for versions 0.9.6 of libssl and libcrypto"

	(voila, la nouvelle entrée montre le version 0.15-2).

Je reconstruit le package comme j'avais appris hier:

	(depuis le repertoir au-dessus du ~/debian) je lance
	dpkg-buildpackage -rfakeroot

Il me donne le package d-shlibs_0.15-2 que je procede à installer
avec dpkg -i (avec les priviledges de root).

Et voila, je garderai cette version du package avec le package
du uw-imapd aussi hacké dans mes backups.

Merci de votre attention,

	Miguel

PS:  Il me manque reporter le bug dans le BTS, ce que je fairai
     après.






Plus d'informations sur la liste de diffusion Linux-bruxelles