Pár napja több fórumon is olvasható volt néhány cikk (1, 2) a debianos apt-build használatáról. Ha már annyit emlegették gondoltam kipróbálom.
Előrebocsátom, hogy nem vagyok híve az ész nélküli optimalizálásnak. Azt vallom, hogy egy rendszer inkább legyen stabilabb, mintsem pár százalékkal gyorsabb (vagy lassabb és nagyobb?), de hajlamosabb a tévedésre.
Ez az írás is csak azért született, hogy lássuk, hogy a Debian alatt is van lehetőség arra, hogy valaki optimalizált csomagokat fordítson egyszerűen a saját rendszerére.
A ``legjobb disztribúció szerintem'' vitákban gyakran előkerül érvként, hogy ``a Debian azért nem jó, mert nincs lehetőség (vagy csak körülményesen lehet) az adott rendszerre lefordítani, optimalizalni a csomagokat, míg más disztribúciókban ez egyszerűen megy''.
Természetesen a fenti állítás nem igaz. Gondolom a hasonló állításokat cáfolandó született meg Julien Reveret ``apt-build: Optimize Debian packages for your system'' című írása is. Az írás azt mutatja be, hogy hogyan lehet a Debianban a szoftvereket úgy újrafordítani az apt-build segítségével, hogy azok a rendszerhez legyenek igazítva.
Az optimalizált rendszerhez jutásnak több módja is van. Az egyik a szokásos... letöltöm a forrást, kicsomagolom, futtatom a configure szkriptet, beállítom az kedvenc opcióimat, lefordítom, majd ``make install''-lal telepítem. Ezzel egy probléma van: nem használom ki a Debian csomagkezelés előnyeit. A másik lehetőség a Stow használata, amely nem igényel túl nagy erőfeszítést, de a végeredmény szintén nem igazán integrálódik össze a Debian csomagkezelő rendszerével. Az igazi megoldás az, hogy újrafordítjuk a Debian számára elkészített csomagokat az apt-build felhasználásával.
Az írás hatására kipróbáltam, hogy is van ez. Én biztos nem fogok ezzel időt tölteni, de hátha valakinek megjön a kedve hozzá :-)
Lássuk!1.) Próbáld ki, és használni fogod!
Az apt-build telepítése a szokásos módon történik:
# apt-get install apt-build
Amikor telepítve van, a post installation szkript egy csomó kérdést fog feltenni a
build könyvtárral...
a repository-val...
az optimalizáció szintjével...
a sources.list-tel...
a gcc opciókkal...
a processzor architektúrával kapcsolatban.
Az általad megadott információk a későbbi felhasználás céljából a /etc/apt/apt-build.conf fileban tárolódnak. Ha a telepítéskor elhibáztál egy kérdést, ott tudod korrigálni a beállításokat. A telepítés után így néz ki a file:
Persze az options=" " részbe jöhetnek a további okosságok, mint például a -fomit-frame-pointer
-funroll-loops -pipe, hogy csak a gyakrabban használtakat említsük (teljes lista itt).
Ellenőrizd le, hogy a build-dir és a repository-dir paraméterek olyan partícióra mutatnak, ahol a fordításhoz elegendő hely áll majd rendelkezésre.
Végül a használathoz egy sort be kell szúrni a /etc/apt/sources.list fileba (függően attól, hogy melyik terjesztést követed):
Ha ezzel végeztél, akkor kész is vagy az apt-build használatára!
2.) És most mit csinálunk?
Az apt-build-nek néhány kulcsszava ismerős lehet az apt-get-ből. A leggyakrabban használt parancsok az update, upgrade, install, source és clean-build. Melyik mire való?
Az update parancs azt csinálja, amit a neve mond. Frissíti a telepíthető csomagok listáját. Az upgrade parancs hatását gondolom nem kell magyarázni. Nézzük mit csinál az install parancs:
frissítjük a csomaglistát
majd kiadjuk az
apt-build install memstat parancsot
Amint látjuk az apt elvégzett néhány feladatot. Megvizsgálta a build függőségeit, letöltötte a forrást, lefordította, majd telepítette a csomagot. A fordítást természetesen annak megfelelően végezte el, ahogy azt korábban az /etc/apt/apt-build.conf-ban megadtuk. Ezzel a csomag optimalizált állapotban telepítésre került a rendszerünkre.
3.) Mi van még?
Nézzük meg a source parancsot. Ez a parancs nem csinál semmi mást, mint letölti a telepítendő csomag elkészítéséhez szükséges forrást, és azokat fileokat amelyeket a debian/ könyvtárban találunk, és amelyek ahhoz kellenek, hogy elkészíthessük a csomagot (rules, control, changelog fileok, stb.). Ezeket behelyezi a build könyvtárba, kibontja őket és alkalmazza a pactheket. Például:
4.) Az egészet akarom!
A BSD rendszereken megfelelő előkészületek után egy make buildworld paranccsal újra tudjuk fordítani az egész alaprendszert úgy, hogy az a gépünkhöz legyen igazítva. Milyen jó lenne, ha Debian alatt is meg lehetne ezt csinálni! Sőt az összes telepített csomagot újra lehetne fordítani... Az apt-build-del újra tudjuk!
Amint látszik a world fordításához még hiányzik a /etc/apt/apt-build.list file. Ezt létre kell hoznunk:
Megszerkesztjük a filet igény szerint. Ezután egy apt-build world paranccsal újra tudjuk fordítani a rendszerünkön található csomagokat. FIGYELEM: mindenki csak saját felelősségére!
Annak érdekében, hogy egy apt-get dist-upgrade parancs kiadása után a szépen lefordított csomagjainkat ne írja felül az apt a hivatalos verzióval, állítsuk be az apt-build által készített csomagok prioritását a apt-pinning segítségével a /etc/apt/preferences fileban így:
Package: *
Pin: release o=apt-build
Pin-Priority: 990
Ezután nem kell aggódnunk, hogy az dist-upgrade fejbevágja a saját csomagjainkat. Az ellenőrzéshez használjuk az apt-cache policy parancsot:
# apt-cache policy
Package Files:
100 /var/lib/dpkg/status
release a=now
500 http://ftp.de.debian.org sarge/non-free Packages
release o=Debian,a=unstable,l=Debian,c=non-free
origin ftp.de.debian.org
500 http://ftp.de.debian.org sarge/contrib Packages
release
o=Debian,a=unstable,l=Debian,c=contrib
origin ftp.de.debian.org
500 http://ftp.de.debian.org sarge/main Packages
release o=Debian,a=unstable,l=Debian,c=main
origin ftp.de.debian.org
990 file: apt-build/main Packages
release o=apt-build,a=apt-build,l=apt-build,c=main
Pinned Packages:
Ez az írás csak egy kis kivonat volt az eredeti cikkből. Az angol nyelvű verziót megtalálod itt. A használat előtt érdemes még elolvasni a /usr/share/doc/apt-build/README.Debian file-t is. További infók nyerhetők ki a (sajnos már csak Google cache-ben megtalálható) APT-Build HOWTO-ból is.
Több csomagot is sikerrel újrafordítottam az apt-build-del. Nekiálltam a world lefordításának is, de aztán ráuntam. Aki esetleg nekiáll lepörgetni egy egész rendszert, az írja meg a tapasztalatait!