Tuum ja Baas
Sisukord
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 (kasutajamaailm on kõik utiliidid, seadistusfailid ning kaustad: /bin/sh, ee, cp, mv jne). BSD operatsioonisüsteemid, näiteks FreeBSD, koosnevad kolmest loogilisest üksusest: tuumast, kasutajamaailmast ja kolmandate osapoolte (apache, samba ..) 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.
FreeBSD uuendamine koosneb järgnevatest sammudest
- Algkoodi hankimine
- Vajaduse korral tuuma seadistamine ning tuuma & baassüsteemi algkoodist kompileerimine
- Tuuma ja baassüsteemi paigaldamine ning konfiguratsioonifailide uuendamine
Uuendamine Subversioniga
TODO
# pkg_add -r subversion # cd /usr # svn co https://svn0.us-east.FreeBSD.org/base/stable/9 /usr/src # cd /usr/src # svn update
viimase aja valguses
svn co https://svn0.us-east.FreeBSD.org/base/stable/10 /usr/src
9.1-RELEASE puhul võib teatada
pw useradd -n auditdistd -g audit -c "Auditdistd unprivileged user" -d /var/empty -s /usr/sbin/nologin
ERROR: Required unbound user is missing, see /usr/src/UPDATING.
pw useradd -n unbound -c "Unbound unprivileged user" -d /var/empty -s /usr/sbin/nologin
Koodi hankimine CVS
Esmalt on vaja leida üks kiire lähedalasuv CVD serverit kust algkood hankida. Eestis on võimalik kasutada näiteks ametlikku mirrorit: cvsup.ee.FreeBSD.org või mitteametlikku cvsup.eenet.ee. CVS serverite täielikku nimekirja näeb lingilt http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html. Endale lähima ja kiireima cvs serveri leidmiseks võib kasutada ka tarkvara nimega fastest_cvsup, seda saab paigaldada nii portsust kui paketist ning käivitamine käib käsuga
# fastest_cvsup -c all
Selle väljund näeb välja midagi sarnast
- 1st: cvsup2.ee.freebsd.org - 2nd: cvsup.ee.freebsd.org - 3rd: cvsup.lv.freebsd.org
Ehk kõige kiirem on cvsup2.ee, teisel kohal cvsup.ee ja kolmandal kohal Läti mirror.
Olles leidnud sobiva CVS algkoodi serveri aadressi tuleb luua CVS seadistusfail mille alusel koodi tõmbame. Faili nimi pole poluline. Näiteks tekitame ta hetkel 8-sup nimega ja kirjutame sinna sisse oma lemmik tekstiredaktoriga järgmise sisu. Faili asukoht süsteemis pole oluline, võime nt paigaldada selle administraatori kodukausta.
*default host=cvsup.eenet.ee *default base=/var/db *default prefix=/usr *default release=cvs tag=RELENG_8 src-all
Selline seadistusfail võtab ühendust cvsup.eenet.ee serveriga, pakib portsud lahti /usr harusse jing tõmbab alla FreeBSD 8 kõige uuema STABLE haru algkoodi (src-all)
Koodi tõmbamise alustamiseks tuleb kasutada käsku csup (FreeBSD 6x, 7x, 8x sees on see vaikimisi olemas, vanemates versioonides tuleb paigaldada pakett cvsup-without-gui).
# csup 8-sup
Cvs võimaldab hankida ka mingit teatud ajahetke BSD versiooni. Näiteks lisades cvs faili 8-sup rea
*default date=2006.10.10.00.00.00
Mis tõmbab algkoodi sellisel kujul nagu ta oli 2006.10.10 kuupäeval. Selliselt on võimalik ajas tagasi liigutada ka portsude puud, uuendada oleks mõistlik seejuures kogu portsude puu mitte vaid mõni selle haru.
Kui on huvi kasutada kõige uuemat mitte releaseks või isegi mitte stableks tunnistatud FreBSD'd milleks näiteks hetkel on versioon 9 siis tuleks määrata seadistusfailis *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.
Tuuma konfigureerimine
NB! Kui eesmärgiks on vaid FreeBSD tuuma ehk Linuxi keeles kerneli versiooni uuendamine siis võib järgneva tekstilõigu rahulikult vahele jätta.
Tasub siiski tähele panna, et üldiselt on konfigureeritud tuumal mitmeid eeliseid vaikeseaditustega 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 kohandatud omadustega tulemust soovitakse saada. Kerneli sedadistamist tehakse kerneli seadistusfaili redigeerides, mingit Linuxi menuconfig laadset käsurea tarkvara selleks pole. 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
# 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 ja anda käsk
# make buildkernel
Kui see käsk on oma töö edukalt lõpetanud võib kohe ka tuuma paigaldada käsuga
# make installkernel
Juhul kui te tegite eelneva peatüki eeskujul tuuma konfiguratsioonifailis mingeid muudatusi tuleb need käsud anda KERNCONF=TUUM1 võtmega kujul näitks make buildkernel KERNCONF=TUUM1 ja make installkernel KERNCONF=TUUM1
Probleemide esinemisel
Kui uus tuum mingil põhjusel ei sobi. Näiteks ei sisalda vajalikku draiverit või lihtsalt ei käivitu saab startida süsteemi uuesti vanalt.
Nimelt 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
Baas süsteemi 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
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 mida me ei soovi kaotada.
Lihtsustada võivad aidata protsessi mõned võtmed:
# mergemaster -F If the files differ only by VCS Id ($FreeBSD) install the new file. # mergemaster -U Attempt to auto upgrade files that have not been user modified.
Viimaseks sammuks on algkäivitus, peale seda on juba kasutusel uus FreeBSD versioon
Täpsem häälestamine
/etc/src.conf faili abil on võimalik häälestada kuidas ja mis komponentidest süsteem kokku pannakse. Järgnevalt mõned võimalikud väärtused milleta võib süsteemi kokku meisterdada. Rohkem infot annab man src.conf
#WITHOUT_ACPI= true # do not build acpiconf(8) and related programs WITHOUT_BOOT= true # do not build boot blocks and loader WITHOUT_BLUETOOTH= true # do not build Bluetooth related stuff WITHOUT_FORTRAN= true # do not build g77 and related libraries WITHOUT_GDB= true # do not build GDB WITHOUT_GPIB= true # do not build GPIB support WITHOUT_I4B= true # do not build isdn4bsd package WITHOUT_IPFILTER= true # do not build IP Filter package WITHOUT_PF= true # do not build PF firewall package WITHOUT_AUTHPF= true # do not build and install authpf (setuid/gid) #WITHOUT_KERBEROS= true # do not build and install Kerberos 5 (KTH Heimdal) WITHOUT_LPR= true # do not build lpr and related programs WITHOUT_MAILWRAPPER=true # do not build the mailwrapper(8) MTA selector WITHOUT_MODULES= true # do not build modules with the kernel WITHOUT_SHAREDOCS= true # do not build the 4.4BSD legacy docs WITHOUT_NETCAT= true # do not build netcat #WITHOUT_NIS= true # do not build NIS support and related programs WITHOUT_SENDMAIL= true # do not build sendmail and related programs #WITHOUT_USB= true # do not build usbd(8) and related programs WITHOUT_VINUM= true # do not build Vinum utilities WITHOUT_ATM= true # do not build ATM related programs and libraries #WITHOUT_CRYPT= true # do not build any crypto code WITHOUT_GAMES= true # do not build games (games/ subdir) #WITHOUT_INFO= true # do not make or install info files WITHOUT_MAN= true # do not build manual pages WITHOUT_PROFILE= true # Avoid compiling profiled libraries # BIND OPTIONS WITHOUT_BIND= true # Do not build any part of BIND WITHOUT_BIND_DNSSEC= true # Do not build dnssec-keygen, dnssec-signzone WITHOUT_BIND_ETC= true # Do not install files to /etc/namedb #WITHOUT_BIND_LIBS_LWRES= true # Do not install the lwres library WITHOUT_BIND_MTREE= true # Do not run mtree to create chroot directories WITHOUT_BIND_NAMED= true # Do not build named, rndc, lwresd, etc.
NB! see mõjutab peamiselt ainult installworldi, kompileeritakse kokku kõik jupid endiselt
Võimalik on erinevaid konfiguratsioone ühendada külge võtmete abil, näiteks
# make installworld DESTDIR=<jail mroot> SRCCONF=/root/src.conf.internetz
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