S-kami írta:Nemrég szükségem volt rá, így mintegy magamnak is elmentve leírom, hátha pont kapóra jön valakinek.
Ki kellett mentenem egy program függőségeit - a lib fájlokat:
Kód: Egész kijelölése
ldd fájlnév | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' /célkönyvtár
A fájlnév nálam mindig teljes path, például :
/usr/local/bin/mc
Köszi szépen, hogy megosztottad a scrip-et!!!
Ezzel csak egy gondom van, én nem vagyok programozó, sem linux guru, csak egy puppy linux-ot kedvelő amatőr felhasználónak mondott egyén, aki igaz, már több, mint két év óta csak puppy-t használ fő rendszerként mellette néha azért még elindítja a windows-t is, ha kellhet netán.
Szóval, -bár nem vagyok programozó- de ennyi idő után azért már úgy kezdem sejteni, hogy egyes állományokat, -úgy a rendszerhez tartozó /lib könyvtárban lévőket, és az egyes programokhoz tartozó /usr/lib könyvtárba kerülőket hol is kell keresni, illetve az utóbbiakat hova kell pótolni, ha netán hiányoznak, lásd a függőségi lib-ek hiányának a problémakörét.
Viszont ez a script sajnos nem úgy menti ki a szükséges libeket, ahogyan azok a rendszerben helyet foglalnak hanem a célkönyvtárban egy kupacba, ún. mindent egybe jelleggel!
/tudom, illetve sejtem csak, hogy ez a script egy gyors mentési művelet miatt jött létre, ahhoz oké is, de talán a végeredményként kimentett lib-ek megtarthatnák az eredeti könyvtárszerkezet szerinti helyzetüket, úgy talán még könnyebben menne a visszaállításuk is./
Lásd ezt a példát.
ldd /usr/bin/audacious | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' /root/libelmentes
Az audacious program engem már sokszor megviccelt, egyes puppy verziókra bizonyos audacious programverziók nem, vagy csak nagy nehezen, kínlódva mentek fel, még az általam favorizált, precise 571 lite linux-ra is. Most nem a csomagkezelőből telepített/telepíthető verzióra értem ezt ott természetesen megkapom a program mellé a kellő függőségeket és azok a megfelelő helyre fel is települnek. Hanem, ha kézzel akarok egy frissebb verziót feltenni ebből a programból, akár egy audacious-486-os típusként, akár egy audacious-686-os típusként, ezek eltérő függőségi igénnyel lépne fel azokat nekem kel összevadásznom, és a rendszerbe illesztenem kézzel, a megfelelő helyre, ha van a függőségi lib-ehez mellékelt telepítési infó, ez általában sikerül is, és a lib-ek a megfelelő helyre kerülnek bemásolásra, így, ha mindent jól csináltam, a program hajlandó lesz elindulni, de néha még így is gondom volt vele, mert például egyes audacious verzió, amikben gyárilag pl. nem szerepelt az mp3 lejátszáshoz szükséges 123mpeg.pet, mert a program készítő úgy vélte ez eleve egy rendszerben már benne van, holott volt olyan puppy verzió, amiben ez pl. nem szerepelt, és az audacious-t feltelepítve -meg a függőségeit is- majd a programot elindítva, és egy mp3 fájl lejátszást elindítva az audacious program egyszerűen bezáródott, kilépett! És nagyon nehezen jöttem rá arra, hogy az említett 123mpeg.pet kell neki, azt feltelepítve ezután a program már működött is. És a legszebb az egészben az, hogy az audacious program -annak, amit éppen utólag akartam telepíteni, illetve a régi verziót törölve frissíteni- nos, annak a függőség igényében ez az állomány nem szerepelt! Gondolom, a program készítő úgy vélte, ezen álomány eleve már adott a puppy verzióban, hát egyes verziókban nem. Ha pedig, a telepítendő audacious program fő, bin fájljának a függőségi igényét megnézem, (jobb egérgomb a Rox-ban) ezt kapom:
-------------------------------------------------------------------------------
### Dependencies ###
-------------------------------------------------------------------------------
Unused direct dependencies:
linux-gate.so.1
/usr/lib/libaudcore.so.1
/usr/lib/libaudgui.so.1
/usr/lib/libaudtag.so.1
/usr/lib/libaudclient.so.2
/lib/libm.so.6
/usr/lib/libSM.so.6
/usr/lib/libICE.so.6
/lib/libglib-2.0.so.0
/usr/lib/libgthread-2.0.so.0
/usr/lib/libgtk-3.so.0
/usr/lib/libgdk-3.so.0
/usr/lib/libgdk_pixbuf-2.0.so.0
/usr/lib/libgobject-2.0.so.0
/usr/lib/libdbus-glib-1.so.2
/lib/libdbus-1.so.3
/lib/libpthread.so.0
/usr/lib/libguess.so.1
-------------------------------------------------------------------------------
### ! ! ! End of Information ! ! ! ###
-------------------------------------------------------------------------------
tehát az 123mpeg hiánya itt nem szerepel, pedig ehhez az is kell ám! Továbbá, még ott vannak a programhoz kellő, egyéb codec ib-ek is, mert ez sem jellemző, hogy minden puppy verzióban benne lennéne alapból, sajnos!
Na mindegy, valahogy összehoztuk-telepítettük a rendszerre a programot, és ugye jó lenne a függőségi lib-eket kimenteni, hátha kellenének később még netán. Oké, itt jön jól a Skami féle script, kimenti nekünk, igaz egy kupacba (a célkönyvtárba!) teszi mindegyik lib-et! Ez annak, aki tudja fejből, mi hova való, annak ez nem gond!
De mindenki másnak igen! Ja, és ebben a lib-mentésben sem szerepel(nek) ám a programhoz szükséges 123mpeg csomagban lévő függőség fájl(ok), sem a klf. codec-lib filék sem!
Talán ezt a scrip-et meg lehetne úgy is variálni, -nem tudom, mert nem vagyok programozó- hogy a célkönyvtárban is az eredeti könyvtárszerkezeti helyfoglalásnak megfelelően kerülnének a függőségi lib-ek elmentésre, tehát ne mindent egybe jelleggel, hanem a tényleges, a script elején megadott, source helyzetnek megfelelően lenne a lib mentés is elkészítve a célkönyvtárban!
Mert az ok, hogy Skami, és a többi profi linux-os egyből vágja, mit hova is kell majd visszatenni, de lehet, lesznek netán olyan felhasználók is, -mint pl. én is!- akinek ez nem fog egyből az eszébe jutni.
Amit pedig a függőségvadász script-hez megjegyeznék, ha pl. a példában is szereplő programhoz, annak a függőségeinek levadászásához alkalmaznánk is ezt az ügyes scrip-et, arra azért oda kell figyelni, hogy a program működéséhez (nem csak az elindulásához!) még pár szükséges függőségi csomag is kellhet néha, ami nem biztos, hogy már eleve megvan, létezik a saját puppy rendszerünkön belül.
Jó esetben ez a program leírásában, a programon belül elhelyezett megfelelő állományban rögzítésre is kerül(het, nem mindig van így, sajnos!) és ekkor elvileg a program fő bin fájl függőség ellenőrzése ezt felszínre hozhatja, és ekkor ezen szükséges állomány (ha tudjuk, hol, melyik repó-ban, tárolóban van ez, le is szedhető a megfelelő útvonal, elérés megadásával. Bocs, hogy kissé hosszúra sikeredett a mondanivalóm, elnézést érte.