Stranica: 1/1.

Buildanje paketa kroz Mock

PostPostano: 31 pro 2011, 17:26
Postao/la 4ndY
Vjerojatno je naš forumaš Grof bolje upućen u ovu tematiku, no nedavno sam i sam otkrio vrlo zgodnu stvar: buildanje paketa kroz mock (a.k.a. "nabildani" chroot).

Linux korisnik tu i tamo mora nešto kompajlirati iz izvornog koda i ako niste LFS ili Gentoo guy, vjerojatno vam to teško pada. Iskusniji korisnici znaju se već nositi s kompajliranjem paketa iz izvornog koda, ali problemi još uvijek postoje. Meni osobno najveći je problem što moram povući pedesetak -devel paketa i time "kontaminirati" cijeli sustav novim paketima koje vjerojatno neću koristiti narednih X mjeseci, a koji će se redovito ažurirati i "bloatati" sustav. Rješenje je ovog problema napraviti paket u posebnom okruženju koje poslije možete lagano obrisati bez da "kontaminirate" sustav.

Stvaranje "virtualnog" okruženja u datotečnom sistemu na Unix sustavima radi se pomoću naredbe chroot. Jednostavno možete stvoriti novo okruženje unutar proizvoljne putanje (npr. /tmp/buld/chroot/) te će sve aplikacije koje su chrootane misliti da se nalaze u pravom datotečnom sustavu, a ne unutar neke proizvoljne putanje. Ovo nije virtualizacija u pravom smislu riječi, jer kernel i sva druga oprema ostaju "stvarni".

Fedora nudi jedan zgodan alat namijenjen lakšem i čišćem pravljenju RPM paketa, ali može poslužiti i u druge svrhe ;-) Alat se zove mock i nalazi se u repozitoriju:
Kod: Označi sve
yum install -y mock

(kako bi radio s običnim korisnikom, treba se isti dodati u grupu mock).

Stvaranje novog chroot okruženja radi se s naredbom:
Kod: Označi sve
mock -r fedora-16-x86_64 --install

gdje umjesto fedora-16-x86_64 može stajati bilo koja distribucija, no predefinirani profili su ovi:
Kod: Označi sve
epel-4-i386.cfg
epel-4-ppc.cfg
epel-4-x86_64.cfg
epel-5-i386.cfg
epel-5-ppc.cfg
epel-5-x86_64.cfg
epel-6-i386.cfg
epel-6-ppc64.cfg
epel-6-x86_64.cfg
fedora-14-i386.cfg
fedora-14-s390x.cfg
fedora-14-x86_64.cfg
fedora-15-arm.cfg
fedora-15-i386.cfg
fedora-15-s390.cfg
fedora-15-s390x.cfg
fedora-15-sparc64.cfg
fedora-15-sparc.cfg
fedora-15-x86_64.cfg
fedora-16-arm.cfg
fedora-16-i386.cfg
fedora-16-ppc64.cfg
fedora-16-ppc.cfg
fedora-16-s390.cfg
fedora-16-s390x.cfg
fedora-16-sparc64.cfg
fedora-16-sparc.cfg
fedora-16-x86_64.cfg
fedora-4-i386-epel.cfg
fedora-4-ppc-epel.cfg
fedora-4-x86_64-epel.cfg
fedora-5-i386-epel.cfg
fedora-5-ppc-epel.cfg
fedora-5-x86_64-epel.cfg
fedora-devel-i386.cfg
fedora-devel-ppc64.cfg
fedora-devel-ppc.cfg
fedora-devel-x86_64.cfg
fedora-rawhide-arm.cfg
fedora-rawhide-i386.cfg
fedora-rawhide-ppc64.cfg
fedora-rawhide-ppc.cfg
fedora-rawhide-s390x.cfg
fedora-rawhide-sparc64.cfg
fedora-rawhide-sparc.cfg
fedora-rawhide-x86_64.cfg

(moguće je dodati i druge distribucije, ali treba prilagoditi onda upravitelj paketa i dodati pripadajuće repozitorije).

Instalirani chrootovi nalaze su na zadanom mjestu, npr. /var/lib/mock/fedora-16-x86_64, no i to se može modificirati u profilu mocka (za ovo je potrebno više mjesta na root particiji).

Recimo da želimo napraviti dodatak transparent-oxygen za KDE.

Instalacija paketa u chroot vrši se s mockom:
Kod: Označi sve
mock -r fedora-16-x86_64 --install kdebase-workspace-devel kdelibs-devel git libXrender-devel libX11-devel gcc-c++ cmake gcc wget


Ulazak u "shell" chrootanog okruženja radi se ovako:
Kod: Označi sve
mock -r fedora-16-x86_64 --shell

gdje se dalje može normalno nastaviti "po starom" (umjesto zadnjeg koraka, "make install", bilo bi najbolje napraviti RPM s recimo checkinstall ako spec datoteka nije dostupna, ali moguće je i izaći iz chroot okruženja s "exit" i napraviti "make install" unutar prave hijerarhije).

Prednosti: prava virtualizacija za ovako nešto definitivno je overkill, a ova metoda pruža buildanje paketa za bilo koju platfromu i arhitekturu (isto kao virtualizacija), a za razliku od klasičnog načina kroz pravi sustav ostaje vam čisti sustav.
Nedostaci: u startu kreiranje chroota pojede se više internet prometa i možda je nekim sve ovo overkill.

EDIT: Ovo sam "otkrio" pokušavajući što jednostavnije kompajlirati na "velikom" kompu (64-bitnom) neki izvorni kod za Atom-based netbook (32-bit) koji bi to inače radio par sati :(