Hlavní navigace

Kompilace FreeBSD ze zdrojového kódu

Jakub Matys

FreeBSD je otevřený operační systém. Jsou k němu dodávány veškeré zdrojové kódy. Není tedy problém přeložit si svůj systém s optimalizací, neoficiálními patchi nebo jej třeba vystavět "na zelené louce".

FreeBSD je otevřený operační systém. Jsou k němu dodávány veškeré zdrojové kódy. Není tedy problém přeložit si svůj systém s optimalizací, neoficiálními patchi nebo jej třeba vystavět „na zelené louce“ (from the scratch).

My se v tomto článku budeme zabývat prvním bodem – nastavíme optimalizační (a jiné) volby pro kompilaci celého systému a postavíme si jádro přímo na míru. Na celý proces nebudeme potřebovat nic jiného než textový editor (např. defaultní vi) a program cvsup. Celý proces je popisován pro FreeBSD 6.0-STABLE, platí však i pro FreeBSD řady 5.x.

Instalace cvsup

Program cvsup si můžete nainstalovat z balíčku nebo si jej zkompilovat. Pro instalaci balíčku stačí jediný příkaz:

pkg_add -r cvsup-without-gui 

Chcete-li si cvsup zkompilovat, musíte mít rozbalený strom portů v adresáři /usr/ports. Překlad provedete jednoduchou sekvencí příkazů:

cd /usr/ports/net/cvsup-without-gui
make install clean 

Toť vše. Zdrojové kódy se stáhnou, přeloží, nainstalují a uklidí se dočasné soubory.

Update zdrojových kódů systému

Zdrojové kódy FreeBSD jsou uloženy v adresáři /usr/src. Synchronizaci (nebo úplně nové stažení souborů) tohoto adresáře s cvs serverem budeme provádět výše instalovaným programem. K tomuto potřebujeme tzv. supfiles. Ty se nacházejí v adresáři /usr/share/examples/cvsup. Najdeme zde několik souborů. cvs-supfile stáhne všechny systémové zdrojové kódy a porty. ports-supfile stáhne pouze porty. A stable-supfile  stáhne zdrojové kódy FreeBSD. Ostatní supfiles nejsou zas tak důležité. Jeden z těchto souborů byste si měli zkopírovat do svého domácího adresáře a upravit. Nejdůležitější změnou v souboru je přepsání řádku *default host=CHANGE_THIS.FreeBSD.org na např. *default host=cvs.FreeBSD.cz. CVS server je samozřejmě na vašem uvážení.

Synchronizaci spustíte příkazem:

cvsup -g -L 2 supfile 

Stahování souborů nějakou dobu trvá. Naštěstí pokud pouze aktualizujete, stahují se jen nezbytné soubory, takže je čas potřebný k operaci mnohem mnohem kratší. Adresář /usr/src zabírá kolem 400 MB, /usr/ports pak kolem 300 MB. Pokud máte tyto adresáře připojeny jako samostatné oddíly, musejí tyto mít kapacitu větší, protože jednotlivé kompilace probíhají v jejich podadresářích (např. Java vyžaduje pro kompilaci 1,7 GB volného místa v  /usr/ports).

Volby kompilace – make.conf

Optimalizační a jiné volby pro kompilaci systému a portů jsou uloženy v souboru make.conf v adresáři /etc. Ten si můžete zkopírovat z /usr/share/examples/etc/make.conf. Na několika následujících řádcích si probereme nejzajímavější řádky souboru.

  • CPUTYPE?=  – volba zapíná optimalizaci pro určitý druh procesoru. Platné názvy procesorů jsou: opteron athlon64 athlon-mp athlon-xp athlon-4 athlon-tbird athlon k8 k6-3 k6-2 k6 k5 nocona pentium4[m] prescott pentium3[m] pentium-m pentium2 pentiumpro pentium-mmx pentium i486 i386 ev67 ev6 pca56 ev56 ev5 ev45 ev4 itanium2 itanium. Při použití této volby je při překladu automaticky kompilátoru předán parametr  -march=cputype.
  • CFLAGS=  – optimalizační volby překladače, můžeme zde zadat –0, –02, -pipe atd.
  • CXXFLAGS+=  – optimalizační volby pro překladač jazyka c++. Při použití += se k následujícím volbám připojí CFLAGS a vše se přiřadí CXXFLAGS. Při použití = se k volbám nic nepřipojuje a ty se rovnou uloží do proměnné.
  • COPTFLAGS=  – volby pro instalaci kernelu.
  • NO_*=  – zakauzuje překlad určitých částí systému. Např. NO_ACPI= , NO_USB= atd.
  • MODULES_WITH_WORLD=  – kompiluje moduly při překladu systému (world) a ne při překladu jádra
  • MODULES_OVERRI­DE=  – zde se zapisují preferované moduly (ty které se budou instalovat; jinak se instalují všechny)
  • WITHOUT_MODULES=  – moduly, které se nikdy nebudou kompilovat

Abychom nemuseli používat přímo program cvsup, nastavíme ještě tyto volby:

SUP_UPDATE=

SUP=            /usr/local/bin/cvsup
SUPFLAGS=       -g -L 2
SUPHOST=        cvsup.uk.FreeBSD.org
SUPFILE=        /usr/share/examples/cvsup/standard-supfile
PORTSSUPFILE=   /usr/share/examples/cvsup/ports-supfile
#DOCSUPFILE=     /usr/share/examples/cvsup/doc-supfile 

Nyní stačí v adresářích /usr/src nebo /usr/ports zadat příkaz make update a aktualizujeme… Ještě bych chtěl poznamenat, že je jedno, v kterém adresáři update provedeme; zaktualizují se oba najednou.

Kompilace a instalace systému

Kompilaci zahájíme v adresáři /usr/src. Spouští se příkazem make buildworld a instalujeme příkazem make installworld. Můžeme je také spojit do jediného příkazu make world. Po instalaci už můžeme používat nově zkompilované a optimalizované systémové utility. Nyní nám už zbývá pouze přeložení kernelu.

Volby kompilace jádra

Konfigurační soubory jádra jsou uloženy v adresáři /usr/src/sys/arch/conf. arch představuje vaši architekturu (i386, amd64, ia64, pc98, powerpc). Konfigurační soubor výchozího jádra se nazývá GENERIC. Je vhodné si jej zkopírovat pod jiné jméno, abyste měli ještě nějaká zadní vrátka. A nyní se podívejme na několik zajímavých voleb.

  • machine i386  – typ archytektury.
  •     cpu     I486_CPU
        cpu     I586_CPU
        cpu     I686_CPU
    
    – optimalizace pro procesory. Je vhodné ponechat pouze jednu volbu.
  • ident GENERIC  – identifikátor jádra. Vypisuje se při bootování a jako výstup příkazu uname -i. Je vhodné mít stejný název konfiguračního souboru a identifikátor.
  •     #options    SCHED_ULE       # ULE scheduler
        options     SCHED_4BSD      # 4BSD scheduler
    
    – ve FreeBSD 6.0 si můžeme vybrat mezi dvěma schedulery – novým ULE (viz Lakadla FreeBSD 6.0), který by již měl být bez chyb, a 4BSD schedulerem.
  • options SCSI_DELAY=5000  – prodleva při zavádění, aby se mohly nalézt a připojit SCSI zařízení. Pokud nevlastníte žádná SCSI zařízení, nemá význam.
  • device atapicam  – tato volba je důležitá pro emulaci IDE-SCSI. Jestliže chcete vypalovat CD/DVD, je pro vás „životně“ důležitá;)
  • device scbus  – SCSI „sběrnice“, nezbytné pro všechny emulace (IDE-SCSI, USB-SCSI)
  • device da  – volba potřebná pro umass (flash disky, usb disky..)
  • device cd
  • device pass  – tato volba, stejně jako výše, je důležitá pro emulaci cd

Volby zadávané v konfiguračním souboru se zkompilují do jádra staticky. Nezadali-li jste v make.conf  volby MODULES_OVERRIDE= nebo WITHOUT_MODULES=, zkompilují se VŠECHNY moduly. Konfigurační adresář dále obsahuje několik přednastavených souborů a soubor NOTES s poznámkami k různým specifickým volbám.

Kompilace a instalace jádra

Kompilaci provádíme zase v adresáři /usr/src. Příkazy jsou obdobné jako pro systém: make buildkernel KERNEL=, make install kernel KERNEL=. Volbě KERNEL přiřadíme název našeho konfiguračního souboru (např. KERNEL=SHADOW). Jádro se instaluje do adresáře /boot/kernel. Je možné funkční jádro překopírovat do jiného adresáře a později jej zavést. Velikost jádra se všemi moduly je 19 MB.

Nezbývá než rebootovat systém a zavést nové FreeBSD. A to je konec… tohoto článku, doufám, že bude někomu k užitku (a že většina z vás zavede).

Našli jste v článku chybu?

13. 12. 2005 10:37

- instalovanie worldu pred instalaciou kernelu ??
- ziadny mergemaster atd. ??

mam pocit ze tento clanok moze narobit viac skody ako uzitku. :-(
kazdopadne, the handbook je daleko lepsi zdroj poucenia..

a este pozor na CPUTYPE -- v 6.0 (release aj stable) mi pri pouziti CPUTYPE?=pentium-m vygeneruje chybny /boot/loader a system sa neda zaviest. pomoze obnovenie loaderu zo zalohy (/boot/loader.old, urobit po instalacii worldu) alebo z instalacneho CD.





6. 12. 2005 15:39

junix (neregistrovaný)
jj, taky jsem chtel pripomenout portsnap. Nicmene cvsup a portsnap porad nejsou vsechny zpusoby jak dotahnout zdrojaky. Pres /stand/sysinstall (uz od nepameti ten uplne nejzakladnejsi instalacni nastroj pro FreeBSD) je mozne v sekci "distribution" vybrat src/all nebo staci src/sys a stahnou se vam zdrojove kody aktualni distribuce, nebo te, kterou nastavite v options. Pro prvotni stazeni zdrojaku je to absolutne nejrychlejsi a nejpohodlnejsi cesta. Nedela se totiz zadne porovnavani, al…
Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Poznáte poctivé suroviny na pečení cukroví?

Poznáte poctivé suroviny na pečení cukroví?

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

120na80.cz: Jmelí je více léčivé než jedovaté

Jmelí je více léčivé než jedovaté

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET