Solid State Linux 1. del

Objavljeno: 13.11.2005 12:06 | Avtor: Tom Erjavec | Kategorija: Odprta scena | Revija: April 2004

Usmerjevalnik, ki je v zadnjih letih postal standardni del postavitev računalniških omrežij, je mogoče izdelati tudi lastnoročno - iz razmeroma preprostih sestavnih delov. Kar je najslajše, tak usmerjevalnik je lahko nadpovprečno zmogljiv. Medtem ko so komercialni usmerjevalniki procesno bistveno "podhranjeni" (med 2 in 4 Mb/s), bo naš izdelek - namenjen uporabi v manjšem krajevnem omrežju, na primer doma ali v manjšem podjetju, za varno širokopasovno povezavo v internet, na primer prek kabelskega modema ali modema ADSL - vsaj desetkrat zmogljivejši in bo kos tudi povezavam na 100 Mb/s ethernetu.

Usmerjevalnik je zgrajen na podlagi Linuxa, s požarnim zidom in z ethernetnimi omrežnimi vmesniki. Uporabljena strojna oprema ne vsebuje gibljivih delov: nima hladilnega ventilatorja, nima disketnega ali CD pogona in nima diska. Namesto diska je uporabljen elektronski pomnilnik (flash) z gonilnikom za simuliranje delovanja diska, DiskOnChip. V končnem izdelku ni elementov, ki navadno odpovedo najprej, zato je primeren za brezprekinitveno delovanje. Zaradi omejenih pomnilniških sredstev je uporabljena namenska mini distribucija Linuxa, LEAF/Bering, derivat projekta LRP (Linux Routing Project). Ker je opisani izdelek mogoče realizirati tudi na kateremkoli cenenem starem PCju, je na koncu podan tudi napotek, kako opisano postavitev zapeči na CD-ROM in se tako izogniti potrebi po manj običajnem pomnilniku "Disk on Chip".

Grafično je cilj projekta predstavljen na sliki 1.

Širokopasovni prehodni usmerjevalnik ("gateway") z javnim in zasebnim segmentom, požarnim zidom, preusmerjanjem TCP/IP vrat ("port redirection"), NAT, DHCP in DNScache.

Usmerjevalnik bo znal izhodno preslikovati zasebne naslove v javne ("outbound NAT"), vhodno preslikovati vrata TCP/IP ("port redirection"/"inbound NAT"), izvajati naloge strežnika DNS, požarnega zidu z analizo stanj ("stateful inspection"), upravljiv bo na daljavo prek SSH in nadzorljiv s spletnim brskalnikom. Operacijski sistem Linux bo ugnezden v pomnilniku flash ("embedded linux").

Ozadje

Visok potencial operacijskega sistema Linux za omrežne storitve so med prvimi komercialno odkrili Izraelci. Že leta 1998 so ponudili trgu prvo visoko zmogljivo usmerjevalniško stikalo, ki ga je poganjal Linux. Račun je bil enostaven: na namensko strojno podlago so prenesli licenčnin prost operacijski sistem s priznano kakovostnimi omrežnimi storitvami in tako prihranili nekaj let trdega dela za razvoj lastnega namenskega operacijskega sistema.

Ob koncu tisočletja so na Tajvanu začeli množično izdelovati cenene računalnike, internetne vmesnike (set top box), ki naj bi manj zahtevnim uporabnikom na TV sprejemniku prek kabelskega modema omogočali enostavne internetne funkcije. Škatle so narejene za neuke uporabnike in predpostavljajo vgradnjo gnezdenih operacijskih sistemov v čipu - brez diska - in okleščene pomnilniške zmogljivosti: tipično 32 MB RAMa in 8 do 16 MB flash EPROMa.

Približno ob istem času je Dave Cinege začel svoj odprtokodni projekt LRP (Linux Routing Project), ki je zdaj že mrtev. Iz njega je izšla množica projektov odprte (in zaprte) kode, katerih cilj so različne postavitve IP usmerjevalnikov in internetnih storitev na kar najbolj okleščenem Linuxu. Najmanjše različice potrebujejo za ves operacijski sistem, omrežne funkcije in še kakšno storitev manj kot eno disketo 1,44 MB. Eden od najbolj prispevnih avtorjev je bil Charles Steinkuehler s svojo serijo distribucij "...stein" .

Z Linuxovim jedrom 2.4 se je pojavil nov programski sistem paketnega filtriranja na IP ravni, imenovan IPtables. Ker je razmeroma kompleksen in zahteva solidno znanje za pisanje pravil za požarni zid, je Tom Eastep (na osnovi svojega dela na podobnem sistemu IPchains za starejša jedra Linuxa) leta 2001 razvil lupino za izgradnjo požarnega zidu z IPtables, imenovano Shorewall.

Našteti štirje elementi, sestavljeni skupaj, dajo predmet tega prispevka.

Strojna oprema

Za strojno podlago lahko uporabimo kakršenkoli odslužen PC, tudi tak s procesorjem 486 je dovolj dober. Sam sem izbral lično oblikovan "set top box" STB3036 tajvanskega proizvajalca Allwell, ki v Sloveniji menda nima zastopnika, vsaj zame pa ima več prednosti: ima vgrajen diskovni čip DoC 16 MB, iz katerega je mogoče pognati sistem, na osnovni plošči je že priključek 100 Mb/s ethernet (in vsi drugi možni priključki), ima eno razširitveno mesto in čisto nič ni podoben PC računalniku. Standardno ima vgrajen RAM pomnilnik z 32 MB. Po obliki je videti kot resna omrežna naprava. Cena te škatle je na Tajvanu okrog 180 dolarjev.

STB3036 ni prav nič podoben PCju in je v kovinskem ohišju videti kot resna omrežna naprava.

Procesor izbranega modela je Cyrix 233 MHz, pomnilnika je 32 MB. Ker nima nobenega gibljivega dela, je poraba tako majhna, da računalnik ne potrebuje hladilnega ventilatorja, niti na procesorju ne. Ta je hlajen s pasivnim črnim rebrastim hladilnikom. V nasprotju s pričakovanji je bil hladilnik tako površno namazan s toplotno prevodno pasto, da se je procesor ob umetni testni 100 % obremenitvi močno pregreval in po nekaj urah padal v toplotno zaustavitev (thermal shutdown). Tajvansko površnost sem moral odpraviti z vnovičnim namazom prevodne paste in procesor se je zdaj z istim hladilnikom dovolj ohlajal, da je 100 % obremenitev lahko prenašal poljubno dolgo.

Vgrajeni vmesnik ethernet je Realtek 8139, sam pa sem v prosto razširitveno mesto dodal še staro, preizkušeno kartico 3c905c. Oba vmesnika podpirata 100 Mb/s.

Drobovje je kompaktno; brez diska, disketnega pogona in ventilatorja je brez gibljivih delov.

Pasivni črni hladilnik procesorja je brez ventilatorja.

Flash EPROM "DiskOnChip", DoC, izdeluje družba M-Systems. Računalnik ga vidi kot disk IDE. Idealen je za gnezdenje operacijskih sistemov. Majhni čipi do 64 MB so na trgu vredni od 16 do 50 dolarjev, zmogljivosti proti 1 GB pa so nesramno drage.

Operacijski sistem

Od številnih različic mini distribucij Linuxa, izhajajočih iz projekta LRP, sem izbral različico Bering, ki sta jo razvila Jacques Nilo in Eric Wolzak na podlagi Steinkuehlerjevega Dachsteina. Različne distribucije Beringa so opisane na naslovu http://leaf.sourceforge.net, od koder jih je mogoče tudi potegniti k sebi v različnih oblikah, skupaj z dokaj dobro napisano dokumentacijo v oblikah HTML ali PDF (ki pa ni povsem brez pomanjkljivosti).

Sam sem gradil z različico Bering 1.2, ki je bila objavljena 11. maja 2003. Njena osnova je Linuxovo jedro 2.4.20. Uporabniki Linuxa si potegnejo sliko diskete s končnico .bin, ki si jo po formatiranju na 1,68 MB z dd zapišejo na disketo. Uporabniki windows vzamejo ustrezno različico .exe, ki se ob zagonu kar sama zapiše na disketo. Na voljo je seveda tudi vsa izvorna koda ter dokumentacija za nameščanje in uporabo.

Posebnost zgrajene diskete je format 1,68 MB namesto običajnih 1,44 MB. Disketa je zagonska. Če jo vstavimo v disketni pogon in vključimo računalnik, se po dolgotrajnem škrtanju in žaganju po disketi sistem zbudi v Linuxu 2.4 s čakajočim izpisom "login: ".

Dviganje z diskete brez disketnega pogona

Prvi trdi oreh me je čakal, ko sem moral računalnik brez gibljivih delov, STB3036, zagnati z disketne enote (ki je STB3036 nima). Tole je nekako tako kakor problem kure in jajca. Te zvijače me je že pred leti naučil Uroš Juvan. Pod pokrovom računalnika je na matični plošči ponavadi priključek za (zunanjo) disketno enoto, čeprav je računalnik fizično nima vgrajene. Tako je bilo tudi pri mojem STB3036. Razdrl sem torej svoj namizni PC, snel ploščati kabel disketne enote z njegove matične plošče in ga vtaknil v vmesnik na matični plošči STB3036. Disketna enota se je še naprej napajala iz namiznega PC, vse drugo pa iz STB3036. Videti je grozno, spominja na transfuzijo med operacijo črevesja, a deluje.

Takole je videti PC transfuzija pri odprtem abdomnu.

Po uspešni prijavi z uporabniškim imenom "root" brez gesla se zagon Beringa konča na menuju. Postavke menuja niso povsem samoumevne, če nismo prej prebrali dokumentacije, zato pa je le-ta skoraj odlična. Najprej je treba prebrati Bering_doc_install_1.2.pdf in Bering_doc_users_1.2.pdf, ki ju najdemo na odložišču distribucije Bering, http://sourceforge.net/project/showfiles.php?group_id=13751 .

Komponente mini Linuxa

Jasno je, da na eno disketo ni mogoče spraviti celotnega sodobnega operacijskega sistema. Zato ni nujno, da bo Bering prepoznal vso strojno opremo računalnika, na katerem smo ga pognali. Mini Linux moramo pred uporabo primerno nastaviti. To naredimo z dodajanjem dinamično naložljivih modulov, predvsem gonilnikov strojnih naprav, in aplikacijskih paketov, ki določajo funkcionalnost naše postavitve.

Gonilniki za ethernet, ki so priloženi distribuciji, skoraj gotovo ne bodo pravi - podprti sta npr. prastara kartica NE2000 in EtherExpressPro 100. Zato moramo odklikati na razvojno stran projekta Bering, ki jo vzdržuje Jacques Nilo, http://leaf.sourceforge.net/devel/jnilo/bering/latest/modules/, in si potegniti gonilnike, ki jih potrebujemo. Za jedro 2.4.20 jih bomo našli v imeniku /2.4.20/kernel/drivers.

Tam je cela množica gonilnikov za razne naprave. Za strojno opremo, ki sem si jo izbral, sem moral potegniti gonilnike za obe moji omrežni kartici, za naprave IDE in CD-ROM (na koncu bomo zapisali, kako Bering poženemo iz pogona CD brez diska) in za flash pomnilnik DoC.

Iz zakladnice Jacquesa Nila sem si zložil naslednje gonilnike:

za omrežni kartici RealTek in 3c905c-TX:

mii.o, 8193too.o in 3c59x.o

za CD-ROM:

cdrom.o, ide-mod.o, ide-cd.o, ide-probe-mod.o in isofs.o

za flash disk DoC:

mtdcore.o, docecc.o, doc2000.o, docprobe.o in nftl.o

Za določitev funkcionalnosti postavitve pa moramo sestaviti primerne aplikacijske pakete. V vseh derivatih projekta LRP so paketi prepoznavni po končnici .lrp. V resnici gre za arhive formata gzip, ki jih LRP ob času nameščanja z orodjem lrpkg razpihne in postavi na pravo mesto v datotečnem sistemu.

Za dosego svojih ciljev sem poleg standardnih paketov v distribuciji Bering uporabil še pakete:

za funkcionalnost SSH:

libz.lrp, sftp.lrp, sshd.lrp in sshkey.lrp

za vzpostavitev delovanja flash diska:

fdisk.lrp, mkdosfs.lrp in syslinux.lrp

fdisk omogoča določiti vsebino tabele razdelkov na diskih (particijska tabela). mkdosfs je program, ki na ciljnem disku zgradi datotečni sistem FAT-12 ali FAT-16, syslinux pa je orodje za zagon Linuxa iz različnih datotečnih sistemov. Vendar o tem kasneje.

Dobrobit standardizacije je očitna tudi v tem primeru. Vse izpeljanke projekta LRP uporabljajo enake aplikacijske pakete. Če pridno klikamo po spletu, najdemo veliko različnih aplikacijskih paketov .lrp. Praviloma bodo delovali, vendar morajo biti prevedeni za isto različico jedra Linux, kot jo uporabljamo.

Z zgornjimi gonilniki sem lahko prepričal mini Linux, da je prepoznal vse naprave mojega STB3036. Za drugačen računalnik bodo koraki seveda drugačni, postopek za moj primer pa je opisan spodaj.

Z distribucijske diskete sem najprej pobrisal gonilnike in pakete, ki jih nisem potreboval, da sem naredil prostor za gonilnike in pakete, ki sem jih potreboval. Windows XP diskete z 1,6 MB bere z Windows Explorerjem brez težav. V Linuxu pa tako disketo povežemo na datotečni sistem z ukazom:

mount -t msdos /dev/fd0u1680 /mnt

Od modulov sem pobrisal vse zame neuporabne gonilnike za omrežne kartice. Ker sem delal usmerjevalnik za kabelski modem, sem pobrisal tudi gonilnike za PPP, PPPoE, HDLC in ASYNC. Od paketov sem pobrisal vse, kar je dišalo po PPP in izpeljankah, ter paket bridge.lrp. Nato sem na disketo dodal gonilnike za svoji omrežni kartici, za CD-ROM in flash DoC.

Nastavljanje gonilnikov

Po "transfuzijskem" kablu sem z disketnega pogona dvignil Bering na STB3036. Na disketi so tedaj že bili pravi gonilniki, a Bering še ni bil postavljen, da bi jih naložil. Po prijavi upravitelja (root) Bering požene menujski sistem lrcfg, ki omogoča postavljanje modulov in paketov.

Beringov glavni menu, lrcfg

lrcfg omogoča dodajanje modulov na dveh mestih. Moduli, ki jih dodamo v datotečni sistem na /lib/modules, se bodo ob dviganju operacijskega sistema naložili šele po zagonu jedra in vzpostavitvi datotečnega sistema. Te module nastavimo v izboru "Packages configuration" pod postavko "modules". Sem npr. ne moremo dodati gonilnika za disk, s katerega želimo naložiti Linux, ker se Linux ne bo mogel začeti nalagati, ne da bi imel dostop do datotek, ki jih vidi šele po tem, ko se naloži (spet problem kure in jajca!). Zato module, ki jih potrebujemo že čisto na začetku zagonskega postopka, zložimo v /boot/lib/modules. Nastavimo jih v izboru "Packages configuration" pod postavko "initrd".

Za dosego svojih ciljev sem v /boot/lib/modules zložil gonilnike: mtdcore.o, docecc.o, doc2000.o, docprobe.o in nftl.o. To so gonilniki za dostop do flash diska DoC.

Druge gonilnike sem zložil v /lib/modules. Če bi hoteli naložiti Bering s CD-ROMa namesto iz flasha, bi morali gonilnike za dostop do CD-ROMa seveda prestaviti v /boot/lib/modules, smiselno pa bi bilo potem odstraniti gonilnike za flash, ker jih ne bi več potrebovali.

Zaganjanje storitev

Aktiviranje storitev usmerjevalnika, ki ga želimo zgraditi, opravimo tako, da zagonskemu programu povemo, katere pakete LRP naj požene ob vzpostavitvi operacijskega sistema. To naredimo tako, da uredimo parametre v datoteki syslinux.cfg na zagonskem mediju. Dokumentacija distribucije Bering zelo natančno opisuje ta postopek in njegove različne možnosti. Moja datoteka syslinux.cfg (zaenkrat še na disketi) je taka:

display syslinux.dpy

timeout 0

default linux initrd=initrd.lrp init=/linuxrc rw root=/dev/ram0 boot=/dev/fd0u1680:msdos PKGPATH=/dev/fd0u1680

LRP=root,etc,local,modules,iptables,pump,keyboard,shorwall,ulogd,dnscache,weblet,libz,sshkey,sshd,sftp

Ker je njena vsebina zelo pomembna za način delovanja, si jo oglejmo. Prva vrstica navaja datoteko, ki vsebuje sliko, v kateri parametrično določimo videz začetnega zaslona (tu se lahko podpišemo ali narišemo svoj logotip, vendar moramo navesti zasluge za razvojno delo avtorjev odprte kode). Druga vrstica določa zakasnitev zagona.

Pomembnejši parametri v tretji vrstici določajo:

datoteko z začetno sliko diska RAM (initrd.lrp), ta vsebuje gonilnike iz /boot/lib/modules

logični disk, s katerega bo tekel operacijski sistem (/dev/ram0),

logična naprava, s katere bo tekel zagon operacijskega sistema (/dev/fd0u1680 - to je disketna enota - za flash disk bomo morali to popraviti na /dev/nftla1),

datotečni sistem (msdos - oznaka za FAT12 ali FAT16),

logična naprava, na kateri so programski paketi (/dev/fd0u1680) in

seznam programskih paketov, ki jih želimo naložiti ob zagonu (LRP=...).

To je standardna nastavitvena datoteka za zaganjalnik syslinux, ki ga je izdelal Peter Anvin, in je namenjen zaganjanju Linuxa tudi iz dosovskih datotečnih sistemov (http://syslinux.zytor.com/).

POZOR: Različica syslinux 1.62 ne deluje pravilno. Preizkušeno deluje stara različica 1.42. Novejših različic 2.x nisem preizkušal.

Delovanje z navideznega diska RAM

Imeniki, ki jih naštevam zgoraj, niso na disketi, temveč v navideznem datotečnem sistemu, v pomnilniku RAM. Mini distribucije Linuxa si ne morejo privoščiti, da bi delale z diskete, ker na njej ni dovolj prostora, niti ni disketa dovolj hitra za delovanje operacijskega sistema. Zato si že ob času zaganjanja v pomnilniku RAM naredijo navidezni disk, imenovan disk RAM, na katerem si zgradijo potreben Linuxov datotečni sistem.

Nastavljanje mini distribucij poteka tako, da na disku RAM nastavimo želeno stanje, nato pa navidezni datotečni sistem s pomnilnika RAM, ustrezno pakiranega, zapišemo nazaj na disketo. Ob naslednjem nalaganju z diskete se na navideznem disku RAM vzpostavi želeno stanje.

Kar smo zapisali doslej, zadošča, da se zbudi operacijski sistem usmerjevalnika in da se naložijo storitveni programi, zaenkrat še vse z diskete. Operacijski sistem je polno funkcionalen, vendar usmerjevalnik še ne deluje, ker ni nastavljen.

(Nadaljevanje in konec v naslednji številki)

Naroči se na redna tedenska ali mesečna obvestila o novih prispevkih na naši spletni strani!
Prijava

ph

Komentirajo lahko le prijavljeni uporabniki