Tuum ja Baas

Allikas: Kuutõrvaja
Redaktsioon seisuga 3. detsember 2010, kell 12:40 kasutajalt Jj (arutelu | kaastöö)

Sissejuhatus

Tuum ja Baas

Linux distributsioonid, võtame näiteks ühe populaarseima, Debiani (võiksime sama hästi võtta ka OPensuse, Fedora, Gentoo Linux jms), koosnevad kahest loogilisest üksusest: tuumast ja kasutajamaailmast. BSD operatsioonisüsteemid, näiteks FreeBSD, koosnevad kolmest loogilisest üksusest: tuumast, kasutajamaailmast ja kolmandate osapoolte tarkvarast.

BSD pere operatsioonisüsteemides arendatakse tuuma ja kasutajamaailma koos. Selline tsentraliseeritud arendus- ja ülesehitusmudel tagab mugava dokumenteerimisvõimaluse nii tuumale kui ka “userlandile” korraga. Kogu operatsioonisüsteemi lähtekood on saadav ühest kohast korraga(üle CVS süsteemi).

Linux'i tuuma ja seda osa mida BSD nimetab kasutajamaailmaks arendatakse eraldi. Distributsioon iseenesest koosneb tuumast ja kõigest muust mida konkreetse distro kokkupanijad oma maitse järgi vajalikuks peab. Kui sulle valmis Linuxi distributsioonid ei istu, paned kokku enda oma: kernel ühest kohast, kõik muu hädavajaliku otsid üle interneti kah ise kokku, iga asi ise kohast. Paindlik aga aeganõudev, selle pärast eelistataksegi valmis Linux distributsioone.

Kuna kriitilised BSD operatsioonisüsteemi osad on kokku koondatud ühte kohta, nende arendus toimub juba aastatega väljakujunenud standartite alusel ja on korralikult dokumenteeritud, siis on sellisele süsteemile üsna mugav teha ka turvaauditit. Näiteks OpenBSD, mis on just keskendudnud turvalisusele, auditeerib periooditi nii oma tuuma, kasutajamaailma ja ka kolmandate osapoolte porditud koodi.

Linux osas tegelevad tuuma ja kasutajamaailma kokku koondamisega distributsiooni koostajad. Linux tuuma arendus on hästi organiseeritud ja ka dokumenteeritud. Kurvem lugu on kasutajamaailmaga - oma distributsiooni RedHat vaevalt lubab algajate kirjutatud utiliite, kuid kogu kasutajamaailm on vaja internetist üles otsida, kontrollida et see oleks uusim, parandatud kood, leida korrektne dokumentatsioon(mis ei ole alati just lihtne). Turvaauditit teha kogu distributsioonile võib olla mõnetigi keerukam kui BSD operatsioonisüsteemide puhul. See selleks.

BSD pere operatsioonisüsteemide uuendamine on isegi algaja taseme jaoks mugav: CVS serverist lähtekood, vastavalt siis mis versiooni endale soovid, paar tundi kompileerimist ja ongi tuum koos kasutajamaailmaga uuendatud, või uuendad ainult tuuma, vastavalt oma maitsele. Variante ja optimeerimise võimalusi on palju.

BSD pere operatsioonisüsteemides on tuum koos kasutajamaailmaga(ehk siis operatsioonisüsteemi põhi) eraldatud rangelt kolmandate osapoolte tarkvarast. Näiteks asuvad /bin ja /sbin kataloogides ainult operatsioonisüsteemi failid, kui te soovite oma süsteemi näiteks Apache veebiserverit või KDE töökeskkonda, siis paigaldatakse kõik vajalikud failid väljaspoole süsteemi ala, FreeBSD puhul /usr/local/bin jne, NetBSD kasutajatel /usr/pkg/bin. FreeBSD_kataloogistruktuur Eraldatud pole mitte ainult binaarfailid vaid ka /etc, /share /var jne.

Linux'i distributsioonide uuendamine toimub vastavalt igale distrole erinevalt, Gentoo eelistab enamjaolt kõike ise kompileerida, RedHat, Suse, Debian pakuvad juba valmis binaarkujul pakke kuid igaühe uuendamissüsteem on küllaltki omalaadne ja distrode vahel liikumine nõuab mõningat harjumist. Vanemad RedHat Linux'i kasutajad mäletavad veel ehk kunagist “rpm hell'i”.

FreeBSD uuendamine

FreeBSD uuendamiseks tuleb uuesti kompileerida kokku nii baas kui tuum. Sourcest saab tõmmata lihtsate vahenditega nii kõige viimase release kui ka veel arenduses olevaid versioone. FreeBSD võimaldab ka käigult kompileerida näiteks FreeBSD versioo 6 ümber versioon 7'meks. Ei tasuks ainult uuendamisel ühte versiooni vahele jätta näiteks üritada versioon 4 kompileerida kohe versiooniks 7 vaid esimesena versiooniks 5 ja siis 6 ning seejärel 7 alles. Sellise uuendamise teeb võimalikuks see ,et kõik kolmanda osapoole tarkvara paigaldatakse kausta /usr/local ja baas ning kernel on monoliitne ühtne bsd arendusmeeskonna poolt loodav. Selline võimalus teeb lihtsaks FreeBSD käigupealt uuendamise.

Koodi hankimine

Vaja on omada mingit head kiiret cvsup serverit kust kood hankida, antud näites on kasutatud EENeti mitteametlikku FreeBSD cvs serverit cvsup.eenet.ee

Hea kiire endale lähima cvs serveri leidmiseks võib kasutada ka tarkvara fastest_cvsup, seda saab paigaldada nii portsust kui paketist ning käivitamine käib käsuga fastest_cvsup -c all

tulem võiks välja näha järgnev

- 1st: cvsup2.ee.freebsd.org
- 2nd: cvsup.ee.freebsd.org
- 3rd: cvsup.lv.freebsd.org

FreeBSD 6x ja 7x sees on juba olemas käsk csup nii ,et ei pea enam cvsup-without-gui hakkama installima piisab kui teha cvsup fail nimega (nimi võib olla tahes milline) 7-sup ja sisuga

*default host=cvsup.eenet.ee
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_7
src-all

Ja anda käsk

csup 7-sup

Cvs võimaldab hankida ka mingit teatud ajahetke BSD versiooni. Näiteks lisades cvs faili

*default  date=2006.10.10.00.00.00

Kui on soov portse nii ajas tagasi tõmmata tuleb meeles pidada ,et uuendada tuleks selljuhul kogu portsude puud

Kui on huvi kasutada kõige uuemat mitte releaseks või stableks tunnistatud FreBSD'd milleks näiteks hetkel on versioon 8 siis tuleb määrata *default tag=.

Tuum

Operatsioonisüsteemi tuum laetakse mällu peale arvuti käivitamist esimesena ning tema ülesanne on vahendada füüsilisi seadmeid operatsioonisüsteemi programmidele.

Vajadus uue tuuma järele tekib tavaliselt siis, kui

  • soovite uuendada enda FreeBSD versiooni
  • soovite eemaldada või lisada olemasolevasse tuuma mõne seadme toetust, näiteks PS2 hiirt
  • soovite eemaldada või lisada tuuma teatud funktsioone, näiteks toetust IP pakettide filtreerimiseks

FreeBSD tuuma juurde kuuluvad samuti moodulid mis vaikimisi tekitatakse igakordsel tuuma paigaldamisel kataloogi /modules. FreeBSD tuuma lähtetekstid tulevad koos reliisiga kaasa ja neid ei avaldata reliiside vahel sarnaselt näiteks Linuxi tuumale.

Tuuma konfigureerimine

NB! Juhul kui eesmärgiks on vaid FreeBSD tuuma ehk Linuxi keeles kerneli versiooni uuendamine siis võib järgneva tekstilõigu ka rahulikult vahele jätta.

Siiski on konfigureeritud tuumal mitmeid eeliseid GENERIC ees

Alglaadimine toimub kiiremalt. Kuna kernel otsib ainult riistvara, mis sul masinas ka tegelikult olemas on, võtab süsteemi alglaadimine tunduvalt vähem aega.

Väiksem mälukasutus. Kohandatud kernel kasutab tihtipeale vähem mälu kui GENERIC-kernel ja see on tähtis, kuna kernel on protsess, mis peab alati reaalses mälus olema. Sellel põhjusel on kohandatud kerneli kasutamine eriti kasulik vähese RAM-iga süsteemi puhul.

Lisanduv riistvaratugi. Kohandatud kernelisse saad lisada toe näiteks helikaartidele, mida GENERIC-kernelis pole.

Enne lähtetekstidest tuuma kompileerimist peab näitama, milliste omadustega tulemust soovitakse saada. Seda tehakse ühe tekstifaili sisu redigeerides.

Kerneli default seadistusfail asub kaustas /usr/src/sys/arhidektuurinimi/conf nimega GENERIC (kus paikneb kerneli seadistuste fail) ja compile (see on kataloog, kuhu kernel ehitatakse). arhitektuur tähistab sinu arvuti arhitektuuri, näiteks i386, alpha või pc98 (alternatiivne PC arendusharu, mis on populaarne Jaapanis). Kõik, mis on konkreetse arhitektuuri kataloogi all, on antud arhitektuurile spetsiifiline. Kogu ülejäänud kood on kõikidele platformidele, millele FreeBSD võidakse portida, ühine.

näiteks 64 bitine kernelifaili täisrada oleks

/usr/src/sys/amd64/conf/GENERIC

Soovides seda faili nüüd muuta sisenege kataloogi /usr/src/sys/amd64/conf ning kopeerige meelepärase nime alla tuuma näidiskonfiguratsioonifail GENERIC

bash# cp GENERIC TUUM1

Tuuma nimi kirjutatakse traditsiooniliselt suurte tähtedega. Tuuma konfiguratsioonifaili süntaks on traditsiooniline, trellist (#) paremale jäävat teksti ja tühje ridu ignoreeritakse. Teistel ridadel on parameetrid ja nende väärtused süstaksiga

parameeter väärtus1 [väärtus2]

näiteks selline rida konfigureerib tuuma ISO9660 standardile vastavate CD-plaatide lugemise toetuse

options 	CD9660

aga rida

options    SMP  

lisab mitmeprotsessori toe

Võrguseadme kasutamiseks tuleb tuuma konfiguratsioonis näidata, millise seadmega on tegemist, näiteks 3Comi PCI etherneti võrgukaardi mudel 3C950 jaoks on rida

device          vx              # 3Com 3c590, 3c595 (``Vortex)

ning arvuti algkäivitamisel sobiva tuumaga ilmub dmesgi sarnane tekst

vx0: <3COM 3C590 Etherlink III PCI> port 0xa800-0xa81f irq 10 at device 10.0 on pci0
vx0: supplying EUI64: 00:a0:24:ff:fe:75:43:6e
vx0: driver is using old-style compatability shims
vx0: starting DAD for fe80:0001::02a0:24ff:fe75:436e
vx0: DAD complete for fe80:0001::02a0:24ff:fe75:436e - no duplicates found

Samas kataloogis asuv fail NOTES sisaldab kõikvõimalikke parameetreid koos kommentaaridega. Kindlasti tasub seda faili uurida ,et paremini mõista mis rida teeb mida ja ei saaks kogematta midagi väga vajalikku välja visatud näiteks klaviatuuri tugi või midagi hullemat

Tuuma kompileermine ja paigaldamine

Kompileerimiseks tuleb liikuda kaustapuus '/usr/src alla

make buildkernel KERNCONF=TUUM1
make installkernel KERNCONF=TUUM1

Juhul kui te pole teinud tuuma konfiguratsioonifailis mingeid muudatusi võib anda ka lihtsalt käsud ilma KERNCONF võtmeta

muutuja KERNCONF abil tohib defineerida tuumanime juba /etc/make.conf'i alla lihtsustades veelgi kompileerimist.

Olles installeerinud uue kerneli jäetakse ka eelmine kernel nime alla /kernel.old alles. Vana saate kasutada katkestades bootimise ja andes käsu

config> boot /kernel.old 

Samas kirjutatakse kernel.old igakord uuesti yle nii ,et tasuks siiski teha erineva nimealla eelnevast kernelist varukoopja

cd /boot
cp -r kernel.old kernel.generic

Ning boodil tuleb anda käsud.

unload
config>boot /boot/kernel.generic/kernel

Kui aga käsu täitmisel teatatakse, et ruumi napib (vaikimisi tehtud juur partitsioon liiga väike juhtunud) tuleb raske südamega kustutada vana kernel rm -rf /boot/kernel.old

Systeemi kompileerimine ja paigaldamine

Kui tuum on paigas tuleks kokku panna ka uus userland, ehk siis baas süsteem kus asuvad kõik töövahendid ning failid

Selleks siseneda kausta /usr/src ja anda käsud

# make buildworld

Mis kompileerib eelnevalt allatõmmatud algkoodis baasi kokku. Kui need käsud läksid veatult läbi siis

# make installworld

Mis asendab kokku kompileeritud failidega hetkel kasutuses olevad

Aravatavasti tasub järgnevalt kontrollida põhimõttelisi muudatusi süsteemses seadistuses

# mergemaster -p

Seejärel teeme reboodi ning liigume uuest src kausta

ja teeme /etc kataloogis paiknevate konfiguratsioonifailide ning init skriptide diff võrdlemise ja nende uuenenutega asendamise.

Selleks tuleb anda käsk

mergemaster

Käsu väljundit ja küsimusi tuleks hoolikalt jälgida sest mergemaster võib tahta kirjutada üle faile nt master.passwd etc milledes võib leiduda väärtuslikke seadistusi.

Moodulid

Tuuma modulaarsuse põhjuseks on see, et parasjagu mitteoluline kood poleks arvuti mällu laetud ja ei raiskaks süsteemi ressurssi. Moodulid asuvad kataloogis /boot/kernel ja nendega manipuleerimine toimub järgmiste programmidega:

kldstat - kuvatakse nimekiri kernelisse laetud moodulites 
kldload nimi - moodul laetakse mällu 
kldunload nimi - moodul eemaldatakse mälust