Következő Előző Tartalomjegyzék Kilépés

2. uhubuild-pack

A program az uhubuild-here csomag része.

A dpkg szemlélete szerint a csomagkészítés legbelső lépését a "dpkg --build" (avagy "dpkg-deb --build") lépés adja. Ez a parancs a fájlrendszer megadott helyén lévő könyvtárszerkezetet, valamint az ott található adminisztratív fájlokat csomagolja össze egy .deb fájllá, és mit sem törődik azzal, hogy ezek a fájlok hogyan álltak elő.

Ennek a megközelítésnek hátránya az, hogy semmi nem garantálja, hogy bizonyos adatok, melyeknek minden csomagban kötelező jelleggel szerepelniük kellene, valóban szerepelni fognak és valóban helyes tartalommal.

Az uhubuild-pack pontosan ezeket a lépéseket hajtja végre, garantálva, hogy nem fog téves adat szerepelni a csomagban.

Lássuk a részleteket:

md5sums

A program előállítja a DEBIAN/md5sums fájlt, melybe a csomagba bekerülő közönséges fájlok ellenőrző összege kerül, kivéve a DEBIAN/conffiles alatt megnevezett konfigurációs fájlokat.

stat

A DEBIAN/stat fájlba stat információ kerül a csomag fájljairól. A csomagba kerülő összes nem-könyvtár entitás megjelenik itt (ez a közönséges fájlokon túl tipikusan a szimlinkeket jelenti), de a könyvtárak közül is bizonyosak részei a csomagnak az UHU értelmezése szerint, így bizonyos könyvtárak stat információját is feltüntetjük itt. Ez a következőképpen történik.

Ha létezett már DEBIAN/stat fájl, akkor kigyűjtjük az ebben szereplő könyvtárakat. Továbbá ha létezik DEBIAN/dirs fájl (soronként egy bejegyzéssel), akkor ezt is kiolvassuk. Minden olyan könyvtár, amely valamelyik helyen a két lehetséges közül meg volt említve, és a most becsomagolandó könyvtárrendszerben is megtalálható, része lesz a csomagnak, tehát szerepelni fog a stat fájlban. Továbbá az összes ilyen könyvtárra a rekurzíve alattuk szereplő összes könyvtár is a csomag része lesz, vagyis szerepelni fog a DEBIAN/stat fájlban.

A DEBIAN/stat fájl előállítása után a DEBIAN/dirs fájlt, ha létezett, töröljük, a régi DEBIAN/stat fájlt meg értelemszerűen felülírjuk.

Ez a kettős megközelítés (két helyre is írhatjuk a könyvtárak nevét) azért jó, mert az első csomagolás során a készítő szkriptnek nem kell bonyolult szintaxisú fájlt készítenie, egyszerűen csak a csomagneveket kell felsorolnia, viszont később egy újracsomagolás esetén sem kell bonyolítani az életet, hanem az ebben az esetben már létező stat fájlt újrahasznosítjuk.

Installed-Size

Az Installed-Size sorok értékét számítja ki és írja be a control fájlba. A tipikus csatolási pontokra (például /usr, /usr/share) is kiszámítja ezt az értéket, és beteszi a control fájlba, amennyiben pakol az adott csatolási pont alá a csomag. Ez arra jó, hogy a telepítő meg tudja határozni, mennyi hely marad üresen az egyes partíciókon bizonyos csomagok telepítése után.

A Debian a "du -s" parancs kimenetét használja. Ennek hátránya, hogy függ a csomagolás során használt fájlrendszertől és egyéb körülményektől, így azonos csomagra is adhat más-más eredményt.

Az RPM csomagkezelő a közönséges fájlok méretének össz hosszát tárolja le, ami nyilván kisebb a telepített méretnél.

Köztes megoldásként az UHU-ban minden egyes fájlra annak hosszát 4096 byte többszörösére felfelé kerekítve számoljuk, valamint 4096 byte-ot számolunk minden könyvtárra, amely ténylegesen része a csomagnak. Az egyéb dolgok (szimlinkek, nem ténylegesen a csomag részét képező könyvtárak, nulla hosszú fájlok stb.) nem számítanak. Ez a módszer viszonylag reálisan közelíti meg a diszken elfoglalt terület méretét, ugyanakkor következetes: azonos csomagra mindig azonos értéket ad.

Az uhubuild-pack program az első argumentumban megadott könyvtár alatt hajtja végre a változtatásokat, majd meghívja a "dpkg-deb --build -z 9" parancsot az összes kapott argumentummal. Ily módon nem tudjuk a tömörítési arányt megváltoztatni, és nem tudunk "--nocheck" opciót sem adni a "dpkg-deb"-nek, viszont azt megválaszthatjuk, hogy második argumentumot adunk-e egyáltalán, és ha igen, akkor közönséges fájlt vagy könyvtárat nevezünk-e meg ott. Ezzel már csak a "dpkg-deb" fog törődni.

Amennyiben a sortdir library telepítve van, a "dpkg-deb" programot ezen keresztül hívjuk meg, így a deb csomag részét képző tar fájl ábécérendben fogja tárolni a fájlokat, nem össze-vissza kiszámíthatatlan sorrendben. Ennek akkor látjuk hasznát, ha később "mc"-ben F3-mal ránézünk a .deb fájlra, vagy ha telepítése után kiadjuk a "dpkg -L csomagnév" parancsot.

Az uhubuild-pack program tökéletesen alkalmas arra, hogy ha például egy CD-re helyhiány miatt a már elkészített UHU csomagokat mondjuk dokumentáció nélkül szeretnénk feltenni, akkor ily módon átdolgozzuk a csomagokat. Egy ilyen újracsomagolás során ha nem root-ként dolgozunk (márpedig miért is dolgoznánk root-ként?), akkor javasolt (sőt, mondjuk inkább, hogy kötelező) a pretendroot függvénykönyvtár használata a ki- és az újra becsomagolás során annak érdekében, hogy a tar fájlban (illetve a DEBIAN/stat fájlban is) ne az aktuális igazi felhasználó neve alatt, hanem a tényleges kívánt felhasználó (általában root) neve alatt látszódjanak a fájlok.

A progit vagy root-ként, vagy a pretendroot könyvtáron keresztül kell futtatni, különben a keletkező csomagokban az igazi felhasználóneved lesz a fájlok tulaja, ami nem jó.

2.1. uhubuild-extract

Kábé az uhubuild-pack ellentéte. A csomagot kipakolja az aktuális könyvtár alá. Ajánlott root-ként, vagy a pretendroot könyvtáron keresztül futtatni, hogy a tulajok megmaradjanak.

2.2. uhubuild-repack

Az argumentumban megadott csomagot valami ideiglenes helyre kipakolja (uhubuild-extract), ott bizonyos dolgokat változtat rajta (/usr/lib/uhubuild/postwork alatti lépések), majd újra becsomagolja (uhubuild-pack), és a második argumentumban megadott könyvtár alá pakolja. Mindezt úgy teszi, hogy ő saját maga gondoskodik a pretendroot használatáról.

Egyelőre baromira kísérleti verzió. Meg kellene csinálni, hogy megadható legyen, mely lépéseket hajtja végre. Az egyes lépéseken belül is lehetne finomítani (például opció lehetne, hogy hagyjon meg adott nyelvű fordításokat).

A postwork alatti lépésekben meg kellene teremteni a release érték kultúrált módon történő átírását is.


Következő Előző Tartalomjegyzék Kilépés