Nna, a visszajelzésekből úgy látom, hogy egyre többen érdeklődnek az OpenBSD iránt. Remélem, hogy az első kettő írás kedvet csinált ehhez a szoftver disztribúcióhoz. Aki esetleg most kapcsolódna be a dologba, az megtalálja a telepítésre vonatkozó információkat itt, a telepítés után ajánlott első lépések leírását itt.
A mai napon azt nézzük meg, hogy hogyan kell saját, az OpenBSD csapat által is támogatott kernelt fordítani. Vágjunk bele:
1.1.) az OpenBSD kiadások
Az OpenBSD-nek három kiadása (flavor = íz, aroma, illat, ahogy az OpenBSD-sek hívják) létezik:
-release: Az OpenBSD-nek az a verziója, amely 6 hónaponként került kiadásra CD-n
-stable: A release, plusz azok a kritikus patchek, javítások (az errata oldalról), amelyek fontosak a biztonságos és stabil működéshez
-current: Az OpenBSD ``éppen aktuális'' verziója, amely fejlesztés alatt áll, és amelyből 6 havonta -release lesz
Grafikusan ez valahogy így néz ki:
A legtöbb felhasználó a -release és a -stable kiadásokat használja, de vannak szép számmal akik mindig a legfrissebb állapotot tükröző -current-et futtatják. Míg a -release és a -stable stabilitást nyújt a felhasználóinak, addig a -current-ben előfordulhat, hogy valami éppen nem működik.
Éppen ezért azoknak, akik éles rendszert futtatnak a -stable (patchelt -release) javasolt. Akiknek az a legfontosabb, hogy állandóan a legfrissebb, legújabb funkciókat használhassák (tapasztalt felhasználók, fejlesztők, tesztelők) esetleg azon az áron is, hogy néha valami nem működik, nekik ajánlható a -current kiadás.
1.2.) snapshot-ok
A kiadások mellett léteznek ún. snapshotok (pillanatképek) is a fejlesztés éppen aktuális állásáról. A kiadások közt levő fél éves ciklusokban jelennek meg a snapshotok az FTP oldalakon. A snapshotok - mint ahogy nevük is mutatja - a fejlesztés éppen aktuális pillanatát ``fényképezik'' le, az éppen aktuális kódból generálónak, így nagyon könnyen előfordulhat, hogy a snapshotok nem működnek 100%-osan.
Kinek jók akkor a snapshotok? A snapshotok igazából a -current felhasználóknak jó. A snapshot jó kiindulópont lehet a -current usernek, hiszen azt telepítve könnyen szinkronizálhatja magát a -current fához.
1.3.) tartsuk a dolgokat szinkronban!
El is érkeztunk minden operációs rendszer biztonságos és stabil működésének sarkalatos pontjához. Egy operációs rendszer csak akkor működik megfelelően, ha az karban van tartva. Ez azt jelenti, hogy a megfelelő verziót használjuk, és a megjelent biztonsági és funkcionális patcheket, javításokat alkalmazzuk a rendszerünkön. Nincs ez máshogy az OpenBSD esetében sem.
Az OpenBSD-vel ismerkedőknek fontos megérteni, hogy az OpenBSD egy operációs rendszer, plusz a megfelelő programok utility-k halmaza, nem pusztán egy operációs rendszer mag (kernel). Ellentétben a Linuxszal (a kernelről beszélünk), ahol a disztribútorok által összeállított programok több kernel verzióval is ragyogóan működnek, a BSD világban az egész operációs rendszer egy egészet alkot, amelyet nem szabad szétválasztani. A OpenBSD három fő részből áll:
- OpenBSD kernel
- az ``userland'' (programok, utility-k, amelyek szerves egységet alkotnak a kernellel)
- port fa (ports tree) (külső 3party alkalmazások)
Ennek a három komponensnek szinkronban kell lennie, máskülönben nemkívánatos működés lehet a ``káosz'' eredménye. Például: nem fogsz tudni vadonatúj port-okat futtatni mondjuk egy-két hónapos rendszeren, vagy nem tudsz működő kernelt fordítani a -current forrásból, ha az ``userland'' programjaid nem a legújabbak. Tehát a jelszó: szinkronizálás!
Hogyan?
A szinronizálás legegyszerűbben úgy történhet, hogy letöltjük a kernel és az ``userland'' forrását, lefordítjuk, majd telepítjük. Ezzel az első kettő komponens naprakész. Természetesen szinkronban kell tartanunk a port fát is (erről később). Egyetlen nagyon fontos dolog van, amelyet észben kell tartani a forrásból való frissítéskor: a frissítés egyirányú, azaz csak upgrade-lni lehet. Downgrade-re nincs lehetőség. A frissítés iránya mindig a korábbiról az újabbra, a -stable-ról a -currentre történik. Nem teheted meg azt, hogy az OpenBSD 3.5-current-et használva meggondolod magad (mert mondjuk valami nem működik) és visszalépsz a 3.5-stable-re. A választás a magad választása, ilyenkor csak azt tudod megtenni, hogy újratelepíted a rendszert az elejéről (from scratch). Az OpenBSD csapat ebben neked nem fog segíteni, hiába is fordulsz hozzájuk!
Mielőtt -current-re frissítesz GONDOLD MEG KÉTSZER!
1.4.) Miért van szükségem saját kernelre?
Általában nincs szükséged saját (nem a GENERIC file alapján fordított) kernelre, megfelelő az OpenBSD csapat által szállított GENERIC kernel.
A kernelt többféleképpen is ``felépítheted''. Fordíthatod a GENERIC (konfig)file alapján (ez az OpenBSD csapat által szállított kernel), de készíthetsz saját kernelt is úgy, mint mondjuk Linux alatt. A saját kernel készíthető -release, -stable és -current kódból is, akárcsak a GENERIC kernel. Egy óriási különbség van a saját és a GENERIC kernel között. Az előbbit nem, míg az utóbbit támogatja az OpenBSD csapat.
A GENERIC kernel konfigurációs file (amely alapján a GENERIC kernelt le tudjuk fordítani) úgy van felépítve, hogy az a legtöbb ember számára megfelelő. Sok ember azt hiszi, hogy ha saját kernelt fordít, akkor jobb lesz a rendszerének működése, teljesítménye. Ez nem igaz az OpenBSD esetén! Csak speciális igények esetén kell saját (nem a GENERIC konfig alapján) kernelt fordítanod!
Néhány ok ami miatt saját kernelt fordíthatsz:
- Biztos vagy benne, hogy tudod mit teszel, és el akarsz távolítani bizonyos számodra szükségtelen eszközmeghajtó-programokat (device drivers), mert olyan rendszerre akarod telepíteni az OpenBSD-t, amely nagyon kevés memóriával rendelkezik
- Biztos vagy benne, hogy tudod mit teszel, és engedélyezni akarsz olyan funkciókat, amelyek alapértelmezetten nincsenek engedélyezve, vagy le akarsz tiltani olyan funkciókat, amelyek alapértelmezett engedélyezve vannak, de számodra szükségtelenek
- Biztos vagy benne, hogy tudod mit teszel, és engedélyezni szeretnél csak kísérleti jelleggel elérhető funkciókat
- Biztos vagy benne, hogy tudod mit teszel, és olyan speciális kivánságaid vannak, amelyeket a GENERIC kernel nem elégít ki, ezért saját kernelt fordítasz (viszont ha nem működik valami a saját kerneleddel, akkor nem fogod megkérdezni, hogy miért nem működik)
Néhány ok ami miatt _biztos_, hogy nem kell saját kernel fordítanod:
- Normális esetben nem kell saját kernelt fordítanod
- Saját kernellel nem lesz gyorsabb a rendszered
- Saját kernellel könnyen készíthetsz kevésbé megbízható rendszert
- Saját kernellel nem kapsz támogatást a fejlesztőktől
- Ha valami hibát találsz, akkor azt előbb reprodukálnod kell majd a GENERIC kernellel is, mielőtt azt szeretnéd, hogy a fejlesztők komolyan foglalkozznak a problémáddal
- A felhasználók és a fejlesztők nevetni fognak, ha tönkreteszed a rendszered
- A saját fordító (compiler) opciók gyakrabban idéznek elő fordító program hibákat, minthogy gyorsítanák a rendszer működését
1.5.) a kenrel konfigurációs fileok
Az OpenBSD kernel ``építésének'' módja a konfigurációs fileokban van rögzítve. Ezek a filok a /usr/src/sys/arch/$arch/conf/ könyvtában találhatóak alapértelmezés szerint (ahol a $arch az éppen használt architektúrát jelenti). Minden architektúrának van egy olyan fileja, amelyet GENERIC-nek hívnak. Ebből a fileból lehet előállítani a standard OpenBSD kernelt a különböző platformokra. Léteznek még egyéb kernel konfigurációs fileok is, amelyekkel különböző céllal létrehozott kerneleket lehet előállítani. Ilyen fileok például a DISKLESS, RAMDISK, RAMDISKB, RAMDISKC, amelyek nevéből lehet következtetni arra, hogy milyen kernelt lehet belőlük ``építeni''.
A konfigurációs filet a config(8) dolgozza fel, amely létrehozza és előkészíti fordításra használt könyvtárt a ../compile útvonalon (tipikus telepítés esetén a /usr/src/sys/arch/$arch/compile/ útvonalon). A config(8) szintén létrehoz egy Makefile-t, és az összes többi olyan filet, amely a sikeres kernelfordításhoz szükséges.
Példaként nézd meg az i386-os architektúra konfigurációs filejait itt.
A konfigurációs fileok architektúránként változnak, de van közös részük is. Ezért van az, hogy a fileok elejében ezt olvashatjuk:
include "../../../conf/GENERIC"
Ez azt jelenti, hogy a platform-független opciók ebben a fileban vannak elhelyezve, és ezt használja az összes platform kiegészítve a saját, csak az ő platformjára jellemző opciókkal.
Ez a file a src/sys/conf/. Ha saját kernel konfig filet hozol létre, akkor nézd meg ezt a filet is!
1.6.) saját kernel építése
A saját kernel készítésére vonatkozó teljes és részletes leírást megtalálod a man afterboot(8)-ban, itt csak egy rövid leírást talász:
Ahhoz, hogy saját kernelt fordíthass, szükséged lesz a forráskódra. Ezt vagy a hivatalos CD-ROM-on (3-as diszk), vagy az FTP oldalakon találod.
Forrás telepítése CD-ről:
A következő példa feltételezi, hogy a 3-as CD fel van mountolva a /mnt alá:
# cd /usr/src
# tar xvzf /mnt/src.tar.gz
Forrás telepítése FTP-ről:
Ha a forráskódot FTP-ről töltöd le, akkor szükség lesz a src.tar.gz és a sys.tar.gz fileokra is. Az első az ``userland'' forrása, míg a második a kernelforrás. (A CD-ROM-on ez a két file egybe van dolgozva). Az FTP-s letöltés esetén ezt a két file-t bontsd ki a /usr/src könyvtárba.
A legegyszerűbb módon úgy tudsz saját kernelt fordítani, hogy a GENERIC filet használod fel (emlékezz! csak indokolt esetben kell eltérni a GENERIC filetól! a legtöbb esetben semmi sem indokolja, hogy módosítsd a hivatalos kernel konfigurációt!).
A GENERIC file-t megtalálod a /usr/src/sys/arch/$ARCH/conf/GENERIC útvonalon, ahol a $ARCH az általad használt architektúrát jelöli. Ez a legtöbb esetben i386.
A fordítás (ha a forrásfa csak olvasható helyen van):
# cd /akárhova
# cp /usr/src/sys/arch/$ARCH/conf/SOMEFILE VALAMI
(ahol a VALAMI általában a rendszer neve. Például ha a gép a foobar.foo.hu, akkor a VALAMI legyen FOOBAR. ez nem kötelező, csak ajánlott, és bevett szokás)
# vi VALAMI (változtassunk, ha szeretnénk)
# config -s /usr/src/sys -b . VALAMI
ezt két parancs követheti:
# make depend
- VAGY -
# make clean
# make
A ``make depend''-et akkor kell futtatni, ha valami változott a forrásban (pl. patchelted, vagy frissítetted), azaz általában mindig. A ``make clean''-t abban az esetben kell használni, ha megváltoztattuk a kernel konfigurációs opciókat és/vagy a forrásfában nagyobb változtatás történt. A ``make clean'' egyébként bármikor használható, egyetlen hátránya a hosszabb ``build''-elési idő.
A fordítás (ha a forrásfa írható/olvasható):
# cd sys/arch/$ARCH/conf
# cp SOMEFILE VALAMI
# vi VALAMI (változtass igényed szerint)
# config VALAMI (bővebben infóért nézd meg a man config(8)-ot)
# cd ../compile/VALAMI
# make
Ahol az $ARCH az általad használt architektúra (pl. i386).
A kernel helyére másolása:
# cp /bsd /bsd.old
# cp /sys/arch/$ARCH/compile/SOMEFILE/bsd /bsd
Ha valami balul ütne ki, akkor a boot időben válaszd a korábbi kernelt:
boot> bsd.old
és ebben az esetben a korábbi működő kerneled (/bsd.old) indul el a frissen fordított helyett (/bsd).
Mára ennyi, legközelebb folytatjuk.
Az írás a hivatalos OpenBSD FAQ lapján készült.