apt-build: Debian csomagok optimalizálása a saját rendszeredhez

Címkék

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!

Hozzászólások

Persze, hogy nem lehet links-ssl ssl nélkül.

Én is használok gentoo-t a debian mellett (meg más disztribeket is). Valóban olyan, mint az USE flag-ek nincs debian-ban. Az apt-build-dal csak a gcc kapcsolókkal tudsz játszani, és a configure paraméterekkel nem (mint ezt már fentebb is írtam). Az USE flag-ek beállítását viszont nem tekintem optimalizációnak.

Inkább azt akartad írni nem, hogy a gentoo előnye az USE flag-ek szabadsága, és nem csak az optimalizáció... Hmmm? ;-)

Egyébként meg rakj fel egy debian-t és játszál az apt-build-del. Én imádok több disztribet kipróbálni, még akkor is, ha van kedvencem.

Totya

Egyszer felraktam egy Gentoot pont az optimalizalas miatt a Pegasosomra, mert PowerPC-n meg tobbet segit az optimalizalas, mint egy atlag x86-on. De eleg korulmenyes volt, es valahogy nem is jott be annyira a Debian utan, mint ahogy azt a hivei josoltak. Szep volt, jo volt, _gyors_ volt, meg minden, de nem nyujtott annyi pluszt, meg a gyorsasaga ellenere sem, hogy huzamosan hasznalni kezdjem.

Viszont ez a Debian optimalizalt build most beletette a bolhat a fulembe, lehet hogy kiprobalom a dolgot. Ezzel kapcsolatos kerdes, hogy ki lehet deriteni valahogy, milyen kapcsolokkal forditjak a default csomagokat? Hogy nagyjabol kideruljon, mekkora sebessegnovekedesre lehet szamitani.

>Ezzel kapcsolatos kerdes, hogy ki lehet deriteni valahogy, milyen kapcsolokkal forditjak a default csomagokat? Hogy nagyjabol kideruljon, mekkora sebessegnovekedesre lehet szamitani.

``Debianis a binary-based distribution with an extremely stable performance record. All packages are distributed in an i386 format – what this means, in a nutshell, is no optimizations have taken place. All packages are compiled with the “lowest common denominator” architecture as the target. As such, if you are running a newer system with mmx, sse(2), or 3d-now! Instructions, you are not getting the most out of your processor.''

Ezzel a debian adott magának egy nagy pofont. Ok hogy optimalizálva lesz a program viszont egy lényeges dolog kimaradt. A configure script paraméterei. pl apt-build eled a mozillát és nem lesz benne ldap támogaás, lehet hogy ssl se. Vagy pl a openofficet nem csak annyi leforgatni hogy ./configure -> make mert ennke hatására sokmindne lesz csak le nem fog fordulni.

Hja, kb. erre szamitottam. :) Bar kerdes, hogy PPC-n 601 vagy 603 a default proci amire forditanak. Ha 601, akkor meg fog taltosodni a gep egy apt-build utan, mert a mai PPC-k teljesen masok, ha 603, akkor csak szimplan kellemes gyorsulas fog bekovetkezni. Bar a Debiant ismerve valoszinuleg 601 a default, meg akkor is ha a 601-es gepek nagyresze NuBusos korai PowerMac, amiket amugy nem, vagy alig-alig tamogat a Linux kernel.

A csomagban pontosan olyan támogatás lesz, mint az eredetiben. Se több, se kevesebb. Az apt-build felrakja azokat a csomagokat, melyek a fordításhoz szükségesek.

Tehát a csomag készítőjének döntését valóban nem tudod megváltoztatni. Egy pontosan olyan, de optimalizált csomagot fogsz kapni, mint az eredeti.

Totya

vagy fel eve foglalkoztam a temaval... egy hetveget ;-)

eredmenyek a debian_desktopban;

lenyeg, hogy egy forrashoz a lehetseges osszes csomagot elkesziti, a libraryk, dokumentaciok, kulonbozo binaris valtozatokat egyarant; ezekbol annyit telepitesz, amennyi jolesik;

ha nem igy lenne, nyugodtan javitsatok ki (a doksimban); vhogy nem villanyoz fel egy vim ujraforgatasbol szarmazo "hatalmas gyorsulas"; egy jo progi onmagatol is eleg gyors;

mondjuk pont a links-sslt sehogy:

# apt-cache show links-ssl

(...)

Links-ssl is not distributable due to license incompabilities. This package

will upgrade existing installations of links-ssl to elinks, a browser similar

to links that supports SSL. This dummy package can be safely removed

afterwards.

ghost írta:

debianban van links és links-ssl

ugyan abból a csomagből vannak leforgatvan

--with-ssl és annélkül

ezt hogy oldja meg a apt-build ??

Egyszerű az egész. Ha a foo kell neked, akkor ezt mondod:

apt-build install foo

Ha a foo-ssl kell, akkor:

apt-build install foo-ssl

Az, hogy ehhez azonos source csomagot kell leszedni az nem számít. A foo és foo-ssl különböző tágogatással fordított csomag ugyanabból a forrásból. Ezért is más a nevük. Nem azonos a két csomag, bár egy forrás csomag kell a lefordítsukhoz és a csomag elkészítéséhez. Az apt-build tudja, hogy mit kell tennie. Az apt-build install foo csak a foo és csakis a foo csomag optimalizált változatát rakja fel neked. És fordítva.

Totya

De pl gentoora gondolva, az optimaizálás lényege nem a C hanem sokkal inkább a USE flagekben keresendő, amik leginkább a configure opciókra hatnak. Namost ha azt nem állítom át, mert ugye akkor a apt-build fooból foo-bar lesz akkor mi értelme? Mert ugye ha nem lehet ssl nélküli links-ssl, az logikus, ha meg lehet, akkor fából vaskarika.

Érdekes, nekem sok pluszt nyújtott anno a Gentoo.

Talán ismerni kellene a programokat, amit használni akarsz, és máris minden igényedet kielégíti.

Sok disztribet használtam már, és igazából (kivéve SuSe) mindegyik tetszett.

Ha nem emerge, ha nem apt-get, akkor urpmi van arra, hogy frissíts...

Az tény, hogy a Gentoo hasított a legjobban, de meg kellett szenvedni érte. 3 napig gép nélkül voltam. Aztán egy merevlemezelszállást követően nem volt türelmem megint kivárni...