saját program csomagfüggőségei

 ( BimbaLaszlo | 2010. október 29., péntek - 19:11 )

Üdv!

Az a problémám, hogy neten szeretném közzétenni a programjaimat bináris és forráskód formájában is. Viszont ahoz, hogy a bináris fusson, szükségesek a függőségei is. Hogy megtudjam, hogyan lehet megtudni egy bináris csomagfüggőségeit, szétnéztem a neten, és ezt a shell-script-et raktam össze:

objdump -p PROGI | grep "NEEDED.*.so" | awk '{ print $2 }' | xargs dpkg -S | \
awk '{ print $1 }' | sort | uniq | sed "s/://"

Tudom, nem túl szép, de a célnak hellyel-közzel megfelel. Íme a kimenet egy GTK-s progi esetén:

libatk1.0-0
libc6
libcairo2
libfontconfig1
libfreetype6
libgdk-pixbuf2.0-0
libglib2.0-0
libgtk2.0-0
libpango1.0-0
libpng12-0

Namost ezzel az a baj, hogy nincsenek feltüntetve a verziószámok, másfelől meg tuti van ennek elegánsabb megoldása is. A kérdés az, hogy valaki tudja-e, hogy miként lehet megtudni egy bináris csomagfüggőségeit álltalánosabb formában?

Megoldás:

dpkg-shlibdeps -O PROGI

Ha ezzel a hibaüzenettel találkoztok:

dpkg-shlibdeps: error: cannot read debian/control: No such file or directory

...akkor:

mkdir debian
touch debian/control
dpkg-shlibdeps -O PROGI 2> /dev/null

Egy példa kimenet az előbb említett GTK-s program esetén:

shlibs:Depends=libatk1.0-0 (>= 1.29.3), libc6 (>= 2.1), libc6 (>= 2.3.6-6~),
libcairo2 (>= 1.2.4), libfontconfig1 (>= 2.8.0), libfreetype6 (>= 2.2.1),
libgdk-pixbuf2.0-0 (>= 2.21.6), libglib2.0-0 (>= 2.16.0), libgtk2.0-0 (>= 2.18.0),
libpango1.0-0 (>= 1.14.0), libpng12-0 (>= 1.2.13-4)

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

készíts belőle csomago(ka)t!

Igen, ez nekem is eszembe jutott, de különböző az nem igazán disztró-független dolog, annyit meg nem akarok vele szórakázni, hogy minden létező csomagformában megcsináljam...
--
Azt akarom, hogy az emberek ne kényszerből tanuljanak, hanem azért, mert tudni akarnak.

Nem kell minden létező csomagformában, támogatod a kedvenc 1-2 disztribúciódat, a többieknek meg ott a forrás. Vagy: https://build.opensuse.org/

dpkg -s csomagnév

ldd binaris |grep -v linux-gate.so.1 |cut -f 2 |cut -f 1 -d \ |xargs dpkg -S|cut -f 1 -d : |sort -u| xargs dpkg-query -W

Kicsit csúnya meg lassú, de azt csinálja amit szeretnél. Biztos szebben is meg lehet írni, hirtelen ez jutott eszembe.

--
Debian - The "What?!" starts not!
http://nyizsa.uni.cc

Na, ez volt, ami hiányzott: dpkg-query -W
Köszönöm a segítséget. (mindenki másnak is)

Egyébként a te megoldásod több függőséget mutat. Az lehet a különbség, hogy az enyém közvetlen függőségeket muatat, a tied pedig a progi alatt elterülő teljes 'függőség-fát'?
--
Azt akarom, hogy az emberek ne kényszerből tanuljanak, hanem azért, mert tudni akarnak.

feliratkozás

Minden kommentar nelkul segitenek ennyit:

awk '{ gsub(/:/, "", $1); print $1; }'

--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.

:) Köszönöm! Ok, tudom, utánnanézhetnék magam is - csak nem akarom sok apró (jelen pillanatban jelentéktelen) dologra irányítani a figyelmem.
--
Azt akarom, hogy az emberek ne kényszerből tanuljanak, hanem azért, mert tudni akarnak.

dpkg-shlibdeps -O "$PROGI"

Ez valóban azt adja, amit szeretnék, de egy dolgot furcsálok: mások a verziószámok, mint az én megoldásom esetében:

libatk1.0-0          (>= 1.29.3  )
libc6                (>= 2.1     )
libc6                (>= 2.3.6-6~)
libcairo2            (>= 1.2.4   )
libfontconfig1       (>= 2.8.0   )
libfreetype6         (>= 2.2.1   )
libgdk-pixbuf2.0-0   (>= 2.21.6  )
libglib2.0-0         (>= 2.16.0  )
libgtk2.0-0          (>= 2.18.0  )
libpango1.0-0        (>= 1.14.0  )
libpng12-0           (>= 1.2.13-4)

Ezt megtudnád-e magyarázni, miért van?
--
Azt akarom, hogy az emberek ne kényszerből tanuljanak, hanem azért, mert tudni akarnak.

Azert, mert te kinyerted a telepitett csomag verziojat. dkpg-shlibdeps pedig a libraryt kerdezi meg, hogy melyik a legkisebb verzio, amivel meg kompatibilis - es ez altalaban kisebb, mint az aktualis.

Értem. Köszönöm a megoldást és a magyarázatot - ez pöttytet könnyebb, mint az én verzióm. :D
--
Azt akarom, hogy az emberek ne kényszerből tanuljanak, hanem azért, mert tudni akarnak.