Retourner aux forums || Retourner au forum Programmation.shell
Programmation.shell : help : script bash qui trouve les dépendances
Posté par Anacr0x (page perso, ) le 14 juin 2005Or, je voudrais que les libs qui sont demander par d'autres libs ne soit pas affiché. (Ex : grace au script je trouve libqt3c102-mt et libx11-6, mais comme libx11-6 est nécessaire pour libqt3c102-mt, il ne doit pas s'afficher)
Mais je fais face à de nombreux problèmes : notamment à cause de deux variables (n2 et dependsLibs) qui perdent leur valeurs en sortant d'une boucle.
Si une âme charitable pourrait m'aider, ca ne serait pas de refus (^_^)
Merci d'avance.
#!/bin/bash
libs[0]=""
dependsLibs[0]=""
n=0
n2=0
preexistant=0
# On lit les .so necessaire à l'exe un par un
ldd $1 | awk '{ print $3 }' | while read so
do
# On trouve le paquet de chaque .so et le rajoute au tableau
libs[n]=`dpkg -S $so | awk -F: '{ print $1 }'`
############Expérimentale#################
###########(ne marche pas)################
if [ $n = 0 ]
then apt-cache depends ${libs[0]} | while read lib
do
dependsLibs[n2]=`echo $lib | awk '{ print $2 }'`
let "n2 += 1"
# ici n2 augmente logiquement
done
fi
##########################################
##########################################
# ici, n2 == 0, pourquoi ????
# On cherche si la lib a déjà été trouver, si oui on ne la rajoute pas
for (( tmp = 0; tmp < n; tmp++ ))
do
if [ "${libs[n]}" = "${libs[tmp]}" ]
then let "preexistant = 1"
fi
done
if [ $preexistant = 0 ]
then echo ${libs[n]}
fi
# On remet preexistant sur "non" et change dans le tableau
let "preexistant = 0"
let "n += 1"
done
> Lire le message (8 commentaires, moyenne: 1,6).
ldd puxor
Bon enfin non, mais pour disons qu'il n'est pas vraiment adapté à ce que tu veux faire. Typiquement, les bibliothèques que tu dois lister en tant que dépendances sont celles qui sont directement requises par tes binaires, alors que ldd fait une résolution récursive.
Essaye plutôt ça :
# objdump -p ton_fichier_binaire | sed -n 's:^NEEDED::p'
Et tu peux aussi jeter un oeil sur ces bouts de code là, qui pourraient t'inspirer. Y'a des trucs spécifiques à Gentoo dedans, mais c'est adaptable je pense :
http://www.gentoo.org/cgi-bin/viewcvs.cgi/users/spider/depreverse/?(...)
http://tdegreni.free.fr/gentoo/dotfinder.py(...)
-
[^]Re: ldd puxor
Posté par tgl () le 14/06/2005 à 11:08. (lien). Évalué à 2.> Et tu peux aussi jeter un oeil sur ces bouts de code là, qui
> pourraient t'inspirer.
Plus précisement, le premier lien pointe sur "depreverse", un petit script du genre du tiens (qui fait aussi les dépendances des modules perl ou python, mais bon là on s'en fout). Lui doit être distro-agnostique je pense.
Le deuxième, c'est une surcouche autour pour faire des jolis dessins avec "dot", dans ce genre là :
http://tdegreni.free.fr/gentoo/freeciv-gtk2.ps(...)
Lui est spécifique à Gentoo, mais probablement adaptable si ça t'amuse (en gros, réécrire les bouts de code qui font des correspondances fichier/paquet).-
[^]Re: ldd puxor
Posté par Anacr0x (page perso, ) le 14/06/2005 à 12:58. (lien). Évalué à 1.Je te remercie beaucoup, ce n'est pas parfait, mais j'ai reussi ce que je voulais ^^
#!/bin/bash
echo ""
tour=0
# On lit les .so necessaire à l'exe un par un
objdump -p $1 | awk '/NEEDED/ { print $2 }' | while read so
do
# On trouve le paquet de chaque .so et le rajoute au tableau
dpkg -S $so | awk -F: '{ print $1 }' | while read result
do
if [ $tour = 0 ]
then echo $result
let "tour += 1"
fi
done
done
-
Euh,
Ce que tu veux, c'est pas tout simplement ce que te donneras dh_shlibdep quand tu vas faire ton package?
Agogo
-
[^]Re: Euh,
Posté par Anacr0x (page perso, ) le 14/06/2005 à 12:46. (lien). Évalué à 1.Sauf que j'utilise pas dh_shlibdep puisque je fait mes paquetage à la main. Pour des petits programmes tel que les miens c'est largements suffisant.
Et de tte facon j'avais déjà essayer de faire un paquet "en bonne et due forme" comme dit sur le guide de developpeur debian (il me semble) mais je n'arrivai à rien... et je ne pense pas que dh_shlibdep peut s'utiliser betement et facilement sur un executable-
[^]Re: Euh,
Posté par tgl () le 14/06/2005 à 15:13. (lien). Évalué à 2.je ne pense pas que dh_shlibdep peut s'utiliser betement et facilement sur un executable
En l'occurence si, probablement. Enfin j'ai pas de Debian pour tester, mais je viens de voir que sous Gentoo le paquet 'dpkg' installe, parmi d'autres utilitaires, un /usr/bin/dpkg-shlibdeps (peut-être que le préfixe "dpkg-" est ajouté par le paquet Gentoo, je sais pas), qui a l'air très bien :% dpkg-shlibdeps -h Debian dpkg-shlibdeps 1.10.28. Copyright (C) 1996 Ian Jackson. Copyright (C) 2000 Wichert Akkerman. This is free software; see the GNU General Public Licence version 2 or later for copying conditions. There is NO warranty. Usage: dpkg-shlibdeps [<option> ...] <executable>|-e<executable> [<option>] ... Positional arguments/options (order is significant): <executable> } include dependencies for <executable> -e<executable> } (use -e if <executable> starts with `-') -d<dependencyfield> next executable(s) set shlibs:<dependencyfield> Overall options (have global effect no matter where placed): -p<varnameprefix> set <varnameprefix>:* instead of shlibs:*. -O print variable settings to stdout -L<localshlibsfile> shlibs override file, not debian/shlibs.local -T<varlistfile> update variables here, not debian/substvars Dependency fields recognised are Suggests/Recommends/Depends/Pre-DependsJ'ai regardé rapidement les sources (script perl), et il fait justement un "objdump -p ...", avec tout ce qu'il faut autour :)-
[^]Re: Euh,
Posté par Anacr0x (page perso, ) le 14/06/2005 à 16:31. (lien). Évalué à 1.oui mais non :
"dpkg-shlibdeps ./mon_exe
failure: open new substvars file `debian/substvars.new': Aucun fichier ou répertoire de ce type"
et je n'ai aucune idée de ce que peut etre ce fichier et de ce qu'il peut y avoir dedans
De plus (ca m'est revenu subitement), j'avais arrété d'essayer de faire des paquets avec les outils debian puisque ceux ci était principalement fait pour les progs utilisant autotools, ce qui n'était pas mon cas. Enfin je dis peut-être une connerie, je ne m'y connais pas énorméments dans ce domaine.-
[^]Re: Euh,
Posté par gros_rouge () le 14/06/2005 à 18:01. (lien). Évalué à 2.De plus (ca m'est revenu subitement), j'avais arrété d'essayer de faire des paquets avec les outils debian puisque ceux ci était principalement fait pour les progs utilisant autotools, ce qui n'était pas mon cas. Enfin je dis peut-être une connerie, je ne m'y connais pas énorméments dans ce domaine.
Tu mets ce que tu veux dans le ./debian/rules, c'est un simple makefile.
Sinon essaie avec dh_make :
# apt-get install dh-make
Voilà à quoi ressemble le makefile généré :
http://lists.debian.org/debian-user-french/2004/11/msg02119.html(...)
-
-
-
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.