A program az uhubuild-here csomag része.
Az uhubuild-build szkript végzi a tényleges csomagkészítést.
Az alábbi környezeti változókat kell megadnunk:
Ebben a könyvtárban keresi a lefordítandó csomag forrás fáját. A változó értékét felülbírálja a szkriptnek adott argumentum. Ha se argumentum, se ilyen változó, akkor az aktuális munkakönyvtár játszik.
Itt zajlik a fordítás teljes egésze. Ha nincs megadva, akkor egy ideiglenes könyvtárat választ magának a szkript /tmp alatt.
Ezen könyvtár alá kerül a compile snapshot. Ha nincs ilyen változó, vagy üres az értéke, akkor nem készül compile snapshot.
Ugyanez, csak az install snapshotra.
Közös default érték adható meg a compile és az install snapshot helyére.
A ccache progi cache könyvtárának útvonala. Ha nincsen megadva, nem használunk ccache-t.
Ide kerülnek az elkészült bináris csomagok. Ha nincs megadva, nem készülnek bináris csomagok.
Ezen könyvtár alá kerül a forráskód csomag (majd egyszer). Ha nincs megadva, nem készül forráskód csomag.
Ezen könyvtár alá kerül a fordítás naplócsomagja. Ha nincs beállítva, nem készül ilyen naplócsomag.
A forrás fát csak olvashatónak tételezi fel, ezért egy "uhubuild-check --copy" paranccsal nemcsak leellenőrzi, hogy szintaktikailag helyesek-e a fájlok, és megvan-e minden szükséges fájl, hanem rögtön át is másolja azokat $UHUBUILD_WORKDIR/.src alá. Mostantól ezt a könyvtárat hívjuk $UHUBUILD_SRCDIR-nek.
Ezt követően nincs más hátra, mint adott sorrendben végrehajtani a /usr/lib/uhubuild/steps alatti kis progikat, amelyek a teljes csomagkészítést végzik. Ezek a szkriptek a következő környezeti változókat kapják meg:
Source Name.
Értelemszerűen.
Whitespace-szel elválasztva a készítendő bináris csomagok nevei.
Ahol dolgozunk.
Az átmásolt forrás fa kezdete.
Ideiglenes cuccokat tárolhat itt egy szkript. Az itteni fájlokat lehetőleg csak az a szkript használja, amelyik elhelyezte azokat ott. Két szkript egymás közötti kommunikációra használja az UB_ADMINDIR-t.
Olyan dolgokat tárolhat itt egy szkript, amelyre később másik szkript által még szükség lehet, például telepített csomagok listája vagy fordítási idő, illetve egyéb adminisztratív adatok.
A forráskód ide tömörítődik ki. Általában itt zajlik a fordítás, de ha nem, akkor
itt.
Ide kell telepíteni a fájlokat.
Ide kerülnek a snapshotok.
Az UB_INSTALLDIR alatti fájlok lesznek alcsomagokra szétrobbantva ide mozgatva.
A fentiek közül egy konkrét csomagot készítő embernek valószínűleg csak keveset kell ismernie. Egy tipikus "compile" szkript a fentiek egyikét sem használja, míg egy tipikus "install" szkript csak az $UB_INSTALLDIR értéket veszi figyelembe: ide kell a fájlokat telepítenie.
A szkriptek, amelyek meghívódnak, időrendi sorrendben a következők:
A forrás kicsomagolása, patch-ek alkalmazása.
A compile szkript meghívása, vagyis a tényleges fordítás.
Snapshot készítése a compile utáni helyzetről (admin, compile és object könyvtárak, valamint egy-két egyéb adminisztratív infók), hogy lehessen itt folytatni a csomagkészítést.
Az install szkript meghívása, vagyis a tényleges telepítés az $UB_INSTALLDIR-ként átadott könyvtár alá. $UB_INSTALLDIR alatt a leggyakoribb könyvtárak már létre vannak hozva.
Strip.
A forráskód alól a doc fájlban alatt megnevezett fájlok telepítése /usr/share/doc/<sourcename> alá. Ezt muszáj az install-snapshot-create előtt csinálni, különben egy snapshot-ból visszaállítás után a doksi fájlokat már nem tudnánk elérni.
Második snapshot készítése, ezúttal az install könyvtárról, plusz adminisztratív infók. Innen is lehet folytatni a csomagkészítést. Ez a snapshot általában jóval kisebb méretű az előzőnél (nyilván), és pont emiatt van a strip fázis mögé rakva. Mostantól a compile és object könyvtárak alatti fájlokhoz nem nyúlunk (hiszen azok ott sincsenek egy install snapshot visszaállítás után).
Az addons alatti cuccok bemásolása.
A files konfigurációs fájl alapján a csomag szétrobbantása. Ezt követően minden egyes csomag alatt az üresen maradt könyvtárak törlése. A DEBIAN könyvtár létrehozása.
Az üres könyvtárak törlése, majd a dirs fájlban felsorolt könyvtárak létrehozása.
Ha van users és/vagy groups fájl, bemásoljuk a DEBIAN könyvtár alá.
Ha van suid_wrapper fájl, bemásolja a DEBIAN könyvtár alá, és ellenőrzi, hogy csak létező fájlnevek legyenek benne.
A daemons fájl bemásolása a DEBIAN könyvtár alá.
Tulajdonos, csoport és hozzáférési jog megváltoztatása a perms fájlban felsorolt fájlokra és könyvtárakra.
Standard postinst, prerm és postrm szkript készítése minden csomaghoz. Az egyéni postinst, prerm és postrm szkript átmásolása, ha van ilyen.
man page-ek rendberakása.
info fájlok rendberakása, /usr/share/info/dir törlése.
Dependencia keresése: ki kell ennek a csomagnak.
shlibs fájl készítése: milyen library-ket tartalmaz ez a csomag. (Fogalmam sincs, hogy ez mire jó, de a Debian csinál ilyet, úgyhogy csinálunk mi is.)
A kapott fájlrendszer FHS-nek megfelel-e.
A conffiles fájl bemásolása.
Az uhuinfo fájl előállítása.
A control fájl elkészítése.
Utolsó simítás a jogok terén, csomagolás, a kész csomag .deb-ről .uhu-ra átkeresztelése.
Forrás csomag készítése lesz majd egyszer.
Ez az utolsó lépés, ez akkor is lefut, ha valahol előbb hiba volt. A napló csomagot készíti el.