SZÓTÁR 8. RÉSZ

Két számmal ezelõtt írtam a lek, úgyis angolul használjuk, nem?” vagy programrész, amely egy változót szotar.kiskapu.hu új bõvítéseirõl. De, angolul, és ugyanúgy pontatlanul. (objektumot stb.) hoz létre, alapér- Szinte szóról szóra megismételhetem Az ember hajlamos azt hinni, hogy tékeit, kapcsolatait beállítja. magam: „Igaz, még mindig csecsemõ- az angol nyelvterületeken élõ informa- megszüntetõ (destructor) – az a függ- korát éli, de a tartalma folyamatosan tikusok pontosan tudják, mi micsoda. vény vagy programrész, amely egy bõvül, és igyekszünk a jelzett hiányos- Nos, fityfenét. változó (objektum) megszûntetésekor ságokat is javítani benne”. Igyekez- Azt viszont el kell ismerni, hogy egy- elvégzi a szükséges feladatokat (kap- tünk lehetõvé tenni mindenki számára, egy cikk fordítása gyakran sokkal csolatok, függõségek bontása, terü- hogy a hiányzó szavakat könnyen el nehezebb feladat, mint az eredeti letek felszabadítása stb.). tudja küldeni, illetve új szerkezetet angol nyelvû szöveg megértése. Ez motor – engine adtunk a letölthetõ változatnak, remé- még akkor is így lehet, ha angolul namespace – névtér lem, így könnyebben használható. csak keveset értünk. Például a 30. olda- névtér (namespace) – olyan terület, rész Természetesen a szótár hatékonysága lon kezdõdõ szakcikk, a „Reiser4: vagy egység, amelyen belül csak az nagymértékben azon múlik, hogy hatékonyan gyorstárazó fák tervezése” adott névtéren belül látható változók © Kiskapu Kft. Minden jog fenntartva milyen szószedettel dolgozik. Nagyon így, többszöri átolvasás után is – biztos hozhatók létre. sok olyan szóval kell megküzdenünk, vagyok benne – tele van félreérthetõ overloading – túlterhelés (lásd ott) amelyre még nincs jó magyar fordítás, fordításokkal. Ez egyrészt betudható portable – környezettõl függõen jelent- és folyamatosan keresnünk kell a határ- a fordításnak, másrészt más okok is het átültethetõt vagy hordozhatót. vonalat: mit tudunk lefordítani és mit megbújnak a háttérben. Olyan szakmai process – folyamat nem. Hiába születik több fordítás egy különbségekre gondolok, mint például redirecting – átirányítás angol szóra, ha azt a szakma nem képes a B és B+ fák szerkezete (különbözõ remote login – távoli bejelentkezés (vagy nem akarja használni). Az egyik iskolákban különbözõ módon tanítják). távoli bejelentkezés (remote login) olvasó például az alábbiakat írta: Röviden összefoglalva: sok munka – az adott számítógépre nem közvet- áll még elõttünk, míg kialakítunk egy lenül történõ (például nem a géphez Szerény véleményem szerint nem kellene egységes, rögzített nyelvezetet, és kapcsolt elsõ billentyûzet/monitor a magyarítást túlságosan erõltetni, ha az könnyen lehet, hogy ez csak azokon pároson) történõ bejelentkezés. az érthetõség rovására meg. Például a területeken történhet meg, ahol a TCO (Total Cost of Ownership) cluster  géptelep. Többször neki kellett szakma már egységes és letisztult! – Teljes Birtoklási Költség: az összes ugranom a mondatnak, mire megértettem, olyan költség, amely egy adott gép mi is lehet az a géptelep. (alkatrész, hálózat stb.) megvásárlása accessibility – kisegítõ lehetõségek és üzemeltetése során felmerül. Ide Nem mernék nyíltan állást foglalni, (lásd ott) tartozik például a karbantartási díj, hogy ki melyiket érti jobban. Tapasz- applet – kisalkalmazás a követési díj, a kötelezõ szervizek, talatom szerint ugyanis az emberek átirányítás (redirecting) – egy címre az alkatrészkopás, az üzemben tartó többsége (ideértve számos rendszer- érkezõ kérelemnek (akár szolgáltatás, személyzet költsége, az áramköltség, gazdát is) könnyedén egy kalap alá akár adatküldés stb.) önmûködõen az elfoglalt terület bérleti díja. egy másik címre történõ küldése. továbbítás (forwarding) – valamilyen consistent – következetes, egységes (általában egy másik gép által biztosí- szerkezetû, szerkezeti sérülésektõl tott) szolgáltatás elérhetõvé tétele az mentes adott szolgáltatáson belül. Például constructor – létrehozó SSH-val távoli bejelentkezés közben destructor – megszüntetõ az SSH az X11-csomagokat is továbbít- engine – motor hatja, ezáltal grafikus programokat is folyamat – process futtathatunk. forwarding – továbbítás túlterhelés (overloading) – programo- kisalkalmazás (applet) – olyan önálló zási nyelvekben (például C++) az a programocska, amely képes valamilyen képesség, hogy ugyanazon a néven futtatási környezetbe beágyazódni. több változó (függvény stb.) is szere- Például a weboldalakba, vagy a grafikai pel, és a kódban a használat módjától alkalmazásokba „beágyazódó” progra- függõen mindig a megfelelõ változó mocska ilyen. A fordítás sajnos hosszú, (függvény) kerül felhasználásra. de eddig nem találtunk jobbat. Például van két f nevû függvényünk, kisegítõ lehetõségek (accessibility) az elsõ egy, a második két éréket vár. – a felhasználói felület részeinek hasz- Ha a programban egy értéket adunk nálatát (megjelenítés, bevitel stb.) át f-nek, az elsõ függvényt hívjuk segítõ kiegészítések, például csökkent meg, de ha kettõt, akkor a második képességû (vak, halláskárosult stb.) függvényt. Még nem tisztázott a for- veszi a cluster, array, farm, de még – felhasználók számára. Sajnos nem dítás sorsa, bár szó szerint és értelmi- a stack szavakat is. Mondják, mind találtunk rá jobb fordítást. leg is helyes, mégis, továbbra is kere- ugyanazt jelenti: „Sok izé együtt. konzisztens – lásd: consistent sünk más fordításokat is. Javaslatként És különben is, ha szakemberrel beszé- létrehozó (constructor) – az a függvény, felmerült a kiterjesztés is. Beköszöntõ

Az egyensúly keresése Harcolni kell. Harcolni kell az óriások Megjelent egy hír, miszerint ellen, ha óriás vagy, a kishalak ellen,

a Microsoftot 512 millió harcolni kell a fejõstehénért, aki évente © Kiskapu Kft. Minden jog fenntartva dollár kártérítés megfize- fizeti a jogdíjat, ha fejõstehénnek érzed tésére ítélték. Amikor ezt magad, harcolnod kell a szabadságért, a hírt olvastam, Shan-Tung ha szabad vagy, harcolnod kell mások Hsu fengshui-mester taní- jogaiért, ha jogaid vannak, harcolnod tásai jutottak eszembe. kell a jogdíjért, ha ingyen akarod a világ- Amikor Magyarországon nak adni a terméked, harcolnod kell az járt, elõadása felütéseként ingyenességért. Úgy látszik, ha valami- a mester azt igyekezett nek értéke van, akkor azért harcolni kell. megértetni velünk, hogy És, természetesen, ellene is. a fengshui nem arról szól, Az erõk oldaláról nézve ez egyszerû: hogy a szobámat hogyan ha valami kitér az egyensúlyból, a másik rendezzem be, hogy hajt- oldalt rántja maga felé. Ha valaki világ- sam le a tojodában az ülõ- uralkodó akar lenni, szabadságharco- Szy György deszkát, vagy hogy ne rakjak tükröt sokat követel ki a világtól. Ha valaki a Linuxvilág fõszerkesztõje, az ajtóval szembe. Ezek csak következ- fel akarja szabadítani az egész világot, a Kiskapu Kiadó vezetõje. mények. Mint amilyen következménye zsarnokok bölcsõjét teremti meg. Fontos Mindenki levelét örömmel a náthának a rengeteg taknyos zsebken- tehát, hogy tisztában legyünk az várja a következõ levélcímen: dõ. Tanítása szerint az erõket kell meg- erõkkel. És természetesen a célokkal. [email protected] értenünk. Az erõk áramlanak, egyen- Mert a célok is folyamatosan változnak. súlyra törekszenek, és folytonosan Az egyik nap még azon dolgozunk, hatnak egymásra, és ezek a hatások hogy mûködjön a rendszer, a másikon elõbb-utóbb körbeérnek. pedig arra ébredünk, hogy valaki jog- A fejlõdés során a számítástechnika vilá- díjat akar beszedni rá. Mint ahogy az ga egyszer eljutott egy görcsös állapot- üres lemezekre is jogdíjat fizetünk ba. A hatalom néhány óriásvállalat manapság. Ha úgy nézzük, ennek is kezében összpontosult, a megoldások megvan a maga elõnye. Az ember már drágák, nehezen hozzáférhetõek voltak. nyugodtan mondhatja, hogy a lemez Ekkor néhány kishal nagyon ügyesen csupán házi másolata az egykor meg- elcikázott a nagyok mellett, és új len- vásárolt hanglemeznek. Még a jogdíjat dületet adott – új típusú erõket hozott is megfizettük. a piacra. Ilyen kishal volt a is. Ebben a nagy kavarodásban az ember Késõbb az új erõ képviselõje világcéggé csak kapaszkodik, és reméli, hogy a sok nõtte ki magát, szép lassan ugyanazokat õrültnek – akik például azon civakod- a célokat tûzve maga elé, mint egykor nak, hogy eredetileg melyikõjük találta legyõzött elõdje. És megszülettek az új fel a mondatvégi pontot (Amerikában kishalak. Ezek a kishalak mára elcikáz- erre is jogvédelmet akartak bejegyez- tak a mai óriások mellett. És utána? tetni) – egymást való perelgetése közben És utána õk is elkezdtek úszni a korábbi valamelyik hatóság nem dönt úgy, kishalak céljaihoz kísértetiesen hason- hogy a születése után törvénytelenül lító célok felé. sírt fel, ezért pedig súlyos bírságot kell De nézhetjük más szemszögbõl is. fizetnie. De ebben az esetben a Római Az emberek szeretnek harcolni. Nem Egyház perelné be a hatóságot, hogy vallják be, de egyszerûen nem bírják jogdíj nélkül alkalmazza az eredendõ elképzelni a békés egyensúly állapotát. bûn elméletét. Vezérfonal

Programvadászat

öngészõk hada áll rendel- kezésre Linux alatt – mostani ban, ami eltüntethetõ ugyan, de ezért vagyunk a célhoz. Sokkal jobbak lettek CD-mellékletünkön a legújabb fizetnünk kell. a Microsoft-formátumok szûrõi, vala- és „legfontosabb” böngészõket Megtalálható a Bongeszok/Opera mint PDF, SWF, DocBook formátumok B adjuk közre. Ez természetesen könyvtárban. beolvasására is képes. mindenkinek más és más: akad, aki a A CD-n az OpenOffice.org könyvtárban Mozillát, a Netscape-et vagy az Operát Netscape 7.1 helyeztük el, vállalkozó és a progra- kedveli. Akik KDE-felületet használnak, Hosszú fejlesztõi munka után végre mozáshoz kedvet érzõ olvasóinknak azok nagy része a Konqueror böngészõt megjelenhetett a Mozilla 1.4, ebbõl forráskódban is közreadjuk. részesíti elõnyben, ezért mi megkísér- egyenesen következik, hogy a Netscape lünk mindenkinek a kedvében járni. is fejlesztett a böngészõjén. Szerencsére PostgreSQL

© Kiskapu Kft. Minden jog fenntartva Firebird a híresztelésekkel ellentétben nem az Az általam igen kedvelt PostgreSQL Mozilla-alapokon nyugvó böngészõ, 1.2-es Mozilla lett ennek a csomagnak az legfrissebb, 2003. július 29-én megjelent ez azonban tényleg csak egy böngészõ alapja, hanem a legfrissebb 1.4-es. 7.3.4-es változata is helyet kapott. Ennek felesleges sallangok nélkül, számos más Korongunkon a hálózati és a teljes a forráskódját adjuk közre, hogy min- sallanggal viszont kiegészítve, ami segít- telepítõkészlet is megtalálható a denki a saját szájízének megfelelõen Bongeszok/Netscape könyvtárban. fordíthassa le. Minden PostgreSQL- használónak javasolt a frissítés, különös Mozilla 1.4 tekintettel a 7.3.3-as változatot futtatók- Mint fentebb már írtam, a Mozilla 1.4-es nak. A 7.3-as bármely alváltozatról változata hosszú fejlõdés után jelent frissítõknek nem kell a dump–reload meg. Nagyszámú újdonságot és hibaja- párost végrehajtania. vítást követõen 2003. június 30-án adták Megtalálható még a 7.4beta1-es változat ki a fejlesztõk. Tapasztalataim szerint forráskódja is, de mivel ez nem meg- gyorsabb, mint az elõdei voltak. Megta- bízható változat, csak „guruknak” aján- lott. A korong PostgreSQL könyvtárában találhatóak.

heti a böngészést. Böngészõnek kiváló. 2.6.0-test3 A Bongeszok/Mozilla_Firebird könyvtár- A címbõl is kiderül, hogy a 2.6-os soro- ban találhatnak rá az érdeklõdõk. zatú rendszermag teszt3-as változata került fel a korongra. Seregnyi hibaja- Opera 7.11 vítás után egy még mindig csak próbál- Természetesen a legfrissebb megbízható gatásra és ismerkedésre alkalmas rend- Opera böngészõ sem maradhatott ki a szermagot kapunk, erre a feladatra sorból – a szokásos formátumokban azonban kiválóan megfelel, így amikor akadhatunk rá a korongon (rpm, deb, a végleges 2.6.0-változat megjelenik, tar.gz). Az Opera még mindig csekély nem fog meglepetésként hatni ránk erõforrásigényével tûnik ki a többi lálható a Bongeszok/Mozilla könyvtár- a sok újdonság. ban, mind telepíthetõ, mind forráskód formában. Magazin A szokásos, magazinhoz tartozó anya- Mozilla 1.5a gok kaptak itt helyet, minden cikknél A böngészõk legfiatalabbja, a „felnö- a cím mellett kis CD-vel jelezzük, ha a vekvõ nemzedék”, a következõ fejlesztõi korongon hozzátartozó anyag található. Mozilla-változat. Csak ínyenceknek, E havi anyagaink közül a wxWindows- fejlesztõknek vagy elszántaknak aján- hoz tartozó csomagoknak és egyéb lott. A Bongeszok/Mozilla könyvtárban hasznos dolgoknak jut a legtöbb hely. helyeztük el.

OpenOffice.org 1.1RC3 Az OpenOffice.org-csapat is gõzerõvel Csontos Gyula „memóriafaló” böngészõ közül. Gyors, fejleszti csomagját – meg is lett az ered- ([email protected]) megbízható és a legtöbb akadályt, ami ménye a rengeteg befektetett munká- A Linuxvilág szakmai és az interneten megtalálható, könnyedén nak! Gyorsabb és kevésbé nyûgös prog- CD-szerkesztõje. Szabadidejében veszi. Egyedüli idegesítõ vonása az a ramot kaptunk, bár ez még csak az szívesen mászik hegyet és bizonyos reklámcsík a jobb felsõ sarok- RC3-as kiadás, de már nagyon közel kerékpározik.

6 Linuxvilág Hír-lelõ

Áldásuk rá bináris formában való használatára Itt van az egeremben Az IEEE után a ZigBee Alliance – háló- jogosít fel, ahogy azok a Linux-terjesz- Az IOGEAR Memory zati termékeket gyártó cégek nonprofit tésekben megtalálhatók. Így a 2.4-es Mouse néven bemu- egyesülése – is szabványként fogadta vagy 2.5-ös változatú rendszermagot tatta az elsõ olyan el a 802.15.4-es használók, miközben a Linux-terjesz- kisméretû, sokat jelzésû szabály- tésekre vonatkozó GPL szerzõdés fel- utazó felhasz- gyûjteményt. tételeit is maradéktalanul betartják, nálóknak szánt A 802.15.4 megbízható, biztonságos és megszabadulhatnak attól a nyomasztó egeret, amely 32 MB flashmemóriát is kis energiafelhasználással végzett távoli gondolattól, hogy esetleg jogtalanul tartalmaz. Ha valaki a jövõben nem felügyeletet és alkalmazásvezérlést tesz futtatják gépükön a SCO által birtokolt szeretne hordozható gépet hurcolni lehetõvé vezeték nélküli hálózatokon. kódrészleteket. A SCO – október 15-ig magával, és például USB-s flash- A szabvány az ISO OSI modell alsó két bevezetõ áron – mindössze 699 dollárt meghajtóra sem futja neki, akkor rétegét (fizikai és közeghozzáférés) fedi kér a használati jog megadásáért; ez az – mi sem egyszerûbb – saját egerének le, a megbízható csomagtovábbítást ár természetesen egyetlen processzorra bendõjében hurcolhatja magával bemu- visszaigazolásokkal, hibajavítással, fon- értendõ. A több processzorral felszerelt, tatóját, dokumentumait, vagy éppen tossági sorrend felállításával biztosítja, beágyazott vagy asztali rendszerekhez a kedvenc fényképeit, zeneszámait. A Me- illetve a frekvenciaváltások levezérlé- SCO hamarosan további megoldásokat mory Mouse 800 dpi-s felbontással dol-

sére is alkalmas is. A 2,4 GHz-es és a is ki fog dolgozni. gozik, így nagy pontosságot kívánó © Kiskapu Kft. Minden jog fenntartva 868/915 MHz-es frekvenciákat egyaránt  http://www.aduva.com/soundcheck munkákhoz is használható, illetve szûk lefedi, így világszerte számos távirányí-  http://www.sco.com/scosource helyen a kisebb kézmozdulatok révén tási feladathoz lehet majd alkalmazni, kényelmesebb egerészést tesz lehetõvé. nemcsak számítógépes környezetben, Dugd össze, és… A géphez USB-felületen csatlakozik, de például központilag vezérelhetõ A Canon i560 jelzésû nyomtatója az elsõ kábele behúzható, így szállítása is egy- háztartások kiépítéséhez is. olyan tintasugaras nyomtató, amely a szerûbb, mint a hagyományos, a hor-  http://www.zigbee.org PictBridge megoldás révén – a gyártó- dozható gép táskájában általában kel- tól függetlenül – közvetlenül a fényképe- lemetlen gubancolódást okozó veze- Legénykedõ SCO Group zõgéprõl vagy a videokameráról is képes tékkel ellátott példányoké. Az apróság Sokan várják érdeklõdéssel a SCO fogadni a kinyomtatandó képeket – ára 49 dollár. Grup által az IBM ellen indított peres amennyiben a képrögzítõ eszköz erre  http://www.iogear.com eljárás végét. Amennyiben a bíróság alkalmas. Az i550-es modell utódaként igazat ad a SCO Groupnak, és megál- A papír a lényeg lapítja, hogy az azóta jogi ellentáma- Az IBM és a SuSE közös bejelentése dást is indított IBM szerint a Linux a két cég munkájának jogtalanul épített be eredményeképpen megkapta elsõ unixos megoldásokat biztonsági minõsítését. A SuSE Linux a Linuxba, akkor az Enterprise Server 8 egy IBM eServer összes üzleti célból fenntartott Linux- xSeries gépen futva a Common kiszolgálón módosításokat kell majd Criteria feltételrendszere szerinti végrehajtani. Meg kell ugyanis keresni EAL2-es minõsítést nyerte el. A munka minden olyan kódrészletet, amely a tovább folytatódik, a SuSE még az SCO szellemi tulajdonát képezi, és a idén szeretné megszerezni az EAL3+ linuxos közösség által készítettre le szintû minõsítést, illetve az Egyesült kell cserélni – elvileg. megjelent i560 nemcsak kényelmes, Államok védelmi minisztériumának Ezt kézzel nyilván senki sem szeretné számítógép nélküli használatot nyújt, kereskedelmi termékekre vonatkozó végigcsinálni – legalábbis az Aduva Inc. de a sebessége is kiváló: fekete-fehér Common Operating Environment részérõl így gondolják. A cég OnStage oldalból 22, színesbõl pedig 15 darabot tanúsítványát, így igazolva, hogy ope- és SoundCheck néven két terméket for- nyomtat ki egy perc alatt, míg legna- rációs rendszere a szolgáltatásokra és galmaz, mindkettõ a linuxos kiszolgálók gyobb felbontása 4800×1200 dpi. a biztonságra vonatkozó kívánalmak- felügyeletének megkönnyítését szol- A PictBridge megoldást támogató nak egyaránt megfelel. A Common gálja. Az utóbbi ingyenesen is elérhetõ, készülékek képesek a korábbi Bubble Jet Criteria elismerés elnyerése fontos és amennyiben a bírósági eljárás a világ Direct megoldás szerinti eszközökkel is üzenet a szigorú követelményeket tá- nagyobbik részére nézve kellemetlenül együttmûködni. A PictBridge-t támogató masztó kormányzati szervek vagy vál- ér véget, akkor a cég egy külön változa- fényképezõgépek és nyomtatók egyetlen lalatok számára, illetve a Linux fejlõ- tot fog készíteni belõle, amely a kisebb- USB-kábellel összekapcsolhatók, majd a désének szempontjából is lényeges nagyobb hibák mellett a SCO Group segítségükkel margó nélkül nyomtatha- elõrelépést jelent, hiszen az év végére által jegyzett kódrészletek azonosítására tók ki a megszokott méretû fényképek. – ha minden jól alakul – ilyen módon is alkalmas lesz. Az i560 nyomtató az Exif Print megol- minõsítésekkel teleaggatott SuSE-ter- Természetesen, ha valaki nem akar ilyes- dást is támogatja, amely a fényképezõ- jesztés egészen új, eddig haladásel- mivel vacakolni, élhet a SCO Group gép által rögzített kiegészítõ adatok lenes módon kiváró piacokat nyithat gáláns ajánlatával is, és megvásárolhatja segítségével a fényképek élethûbb repro- meg a SuSE, és így az egész linuxos a kérdéses kódrészletek használatának dukcióját teszi lehetõvé. Az i560 ajánlott tábor elõtt. a jogát. A SCO Intellectual Property végfelhasználói ára 129 dollár lesz.  http://www.ibm.com/linux License for Linux a unixos kódok  http://www.canon.com  http://www.suse.com

www.linuxvilag.hu 2003. szeptember 7 Hír-lelõ

CD-író és kártyaolvasó egyben Linuxos cégek támogatási szövetsége Tungsten T2 Az I/OMagic bejelentette az elsõ olyan A TSANeten – Technical Support Alli- A Palm megújította csúcsmodelljét: a belsõ CD-újraíró meghajtót, amely egy- ance Network – az iparág legnagyobb Tungsten T utódaként megjelentette a ben hétféle memóriakártya kezelésére gyártóktól független támogatási szö- Tungsten T2 kézigépet. Az új Tungsten képes kártyaolvasóként is használható. vetségén belül új közösség jött létre: 32 MB memóriát kapott, pontosan a Linux operációs rendszerrel foglal- kétszer annyit, mint elõdje, operációs kozók társulása. Az alapító tagok: a rendszere a legújabb Palm OS, és kijel- BEA, a , az EMC, a HP, a Network zõje is élesebb, szebb képet ad. A ko- Appliance, a Novell, a SuSE, a Unisys, rábbi változathoz ha- a Veritas és a VMware, de hamarosan sonlóan a gép képes a további jelentkezõkre is számítani Bluetooth-kapcsolatok lehet. A közösség törekvése az, hogy kezelésére és hangrög- akkor is hatékony támogatást tudjon zítésre, rendelkezik nyújtani a vásárlóknak, ha azok több elektronikus levele- gyártótól származó elemekbõl – ame- zésre, böngészésre, lyek alatt eszközöket, operációs rend- SMS-küldésre használ- A meghajtó 52× sebességgel képes a szert és alkalmazásokat egyaránt lehet ható ügyfélprogram-

© Kiskapu Kft. Minden jog fenntartva CD-k írására, újraírást 32× sebességgel érteni – összeállított rendszert üzemel- mal, illetve MP3-fájlok végez, és ha az alaplap egyik USB-csat- tetnek. A cél nem kifejezetten az, vagy mozgóképek lejátszására alkalmas. lakozóját hajlandóak vagyunk felál- hogy a vállalatok megosszák a tudá- A Tungsten T2 ára 399 dollár. Megjele- dozni, akkor az IBM Micro Drive meg- sukat egymással, hanem az, hogy nésével egy idõben – kellemes mellék- hajtók és a Compact Flash, Multimedia elkerüljék az ügyfél „egymásnak való hatásként – a Palm csökkentette az Card, Secure Digital, Memory Stick, lepasszolását”, aki rossz esetben a m130 és az m515 készülékek árát. Memory Stick PRO és Smart Media kár- különféle cégek között õrlõdve sehon-  http://www.palm.com tyák kezelését is helytakarékos módon nan nem kap érdemi segítséget. oldhatjuk meg vele. A cég hasonló meg- A gyorsabbá és pontosabbá váló támo- Tally és Genicom – egyesülés hajtókat eddig is kínált, ám csak külsõ gatás révén a Linux alapú rendszerek Ha valakinek kellemes emlékei kötõd- kivitelben. Az új egység szállítása szep- a komoly elvárásokat támasztó válla- nek a Tally névhez, vigyázó szemeit temberben kezdõdik meg, bevezetõ ára latokhoz, küldetéskritikus környeze- ezentúl a TallyGenicom névre vesse. mindössze 79 dollár lesz. tekbe is eladhatóvá válnak. Az új név rég-új céget takar, amely a  http://www.iomagic.com A linuxos közösség a negyedik szer- Genicom LP vezõdés, amely a TSANet keretein és a Tally AG Õk ellopják, mi fizetjük belül jön létre, a korábbi három támo- összeolvadá- A Kensington új biztonsági termékeket gatási társulás Microsoft Datacenter, sával jött létre. A TallyGenicom a maga mutatott be, ezek egyike a MicroSaver Storage Networking Industry 200 millió dolláros éves bevételével az Guaranteed Notebook Replacement, Association és Mission-Critical egyik legnagyobb lesz azok között a vál- amely valójában már nemcsak egy ter- Customer néven állt össze. lalatok között, amelyek kizárólag nyom- mék, hanem  http://www.tsanet.org tatókkal, nyomtatási kellékekkel és a egyfajta szol- kapcsolódó szolgáltatásokkal foglalkoz- gáltatás is. Érdemes megjegyezni: CRESERC nak. A változásból a cég meglévõ ügy- A gyártó vál- A , a Mitsubishi és az NTT felei, vásárlói elvileg semmit nem fog- lalja, hogyha közös munkájának eredményeként nak érezni, legalábbis az árak emelke- valakinek el- napvilágot látott a CRESERC nevû désétõl vagy a szolgáltatási feltételek lopják a hor- titkosítási megoldás, amely elliptikus megváltozásától nem kell tartaniuk. dozható szá- görbékkel dolgozó algoritmuson ala-  http://www.tallygenicom.com mítógépét, holott az a Kensington fent pulva valósít meg nyilvános kulcsú nevezett termékével volt lezárva, akkor titkosítási rendszert. A CRESERC kidol- DVD-lejátszó a Lindows.com-tól a vásárlástól számított egy éven belül gozásakor – mint a hasonló megoldá- A Lindows.com jóvoltából megjelent történõ lopásnál esetenként legfeljebb soknál általában – finom egyensúlyt az elsõ kereskedelmi DVD-lejátszó prog- 1500 dollár, személyenként évi 10 000 kellett találni a biztonság és a haté- ram Linux alá. dollár erejéig kártérítést fizet a károsult- konyság között, de a kutatók a saját A Lindows.com nak, legalább részben pótolva a gép árát. állításuk szerint sikerrel jártak. jogtiszta módon tett Az új MicroSaver kevlár borítást kapott, A CRESERC kisméretû kulcsokat hasz- szert a DVD-k tar- belsejében rozsdamentes acélsodrony nál, mégis magas fokú biztonságot talmának dekódolásához szükséges kód- található, a cég állítása szerint a huzal garantál, így a nyilvános kulcsú megol- részletekre, így a lejátszó nem meglepõ 40 százalékkal erõsebb, mint a korábbi dások új, az RSA algoritmus leváltására módon fizetõs: 40 dollárba kerül; igaz, példányok. Esetében is érvényes a Ken- is alkalmas nemzedékét képviselheti. a hasonló célt szolgáló alkalmazások árát sington által nyújtott élettartam-garan- Ebben fontos szerepe lehet annak, ha tekintve ez kedvezõnek is nevezhetõ. cia. A termék ára 55 dollár. A visszatérí- a különféle szervezetek szabványként A program nemcsak a DVD-kkel, de az tés igénybe vételéhez a vásárlás tényét is elfogadják, márpedig erre jó esély AVI, MOV, WMV és MP3 formátumok- a vásárlástól számított 30 napon belül mutatkozik, hiszen az érintett cégeknek kal is elboldogul. Többek között a be kell jegyeztetni a gyártónál. több terméke szintén kapott már ilyen Lindows.com oldalán vásárolható meg.  http://www.microsaver.com kitüntetõ címet.  http://www.lindows.com/dvd

8 Linuxvilág Hír-lelõ

Quake-csata útközben A vonalkód visszavág A jövõ év a mobil grafika lendületes Japánban megjelentek az elsõ olyan mo- térnyerését fogja hozni vélik az iparág biltelefonok, amelyek képesek a vonal- szereplõi. A Khronos Group, amely kódok olvasására. Mire jó egy ilyen a mobil eszközökre szánt OpenGL készülék? A Java alapú alkalmazásoknak Embedded Systems szabványt állítja és a telefonok egyre bõvülõ memóriájá- össze, elkészült az elõírás gyûjtemény nak köszönhetõen – a kéziszámítógé- 1.0-s változatával. Eközben a Microsoft pekhez hasonlóan – hamarosan üzleti sem tétlenkedik, hamarosan napvilágot alkalmazásokban is használhatók lesz- lát Direct3D Mobile API-ja, illetve a nek, ám egyelõre sokkal köznapibb célt területen fontos szerepet betöltõ Palm szolgálnak. Ha valaki rendelni szeretne is saját rendszert készít, amely – szeren- egy katalógusból, azt a távol-keleti or- csére – fõ vonalaiban az OpenGL ES szágban már mobiltelefonon is megte- szemléletét követi. heti, a vonalkódolvasó a cikkszámok A kialakuló versengéshez hasonló küz- hosszas bepötyögésétõl kíméli meg a delmet láthattunk néhány éve a PC-s kedves vásárlót. Miután az érdeklõdõ grafikai API-k között, ennek nyertese a katalógusból kikereste a kívánt árut,

– legalábbis a játékprogramokat te- egyszerûen az alatta található vonal- © Kiskapu Kft. Minden jog fenntartva kintve – a Microsoft erejének köszönhe- kódra irányítja mobiltelefonja figyelmét, tõen a DirectX lett. A mobil eszközök amely beolvassa a megfelelõ számsort, piacán egyelõre jóval több befolyásos és már el is lehet küldeni a rendelést szereplõ – mobiltelefon- és kéziszámí- a megfelelõ számra. tógép-gyártó – mozog, mint az asztali A jelenleg még fennálló mûszaki aka- számítógépekén, így a verseny kime- dályok elhárítása után a telefonok arra is netelét egyelõre kár megjósolgatni. alkalmasak lesznek, hogy vonalkódokról A nagyteljesítményû mobilmegjelenítés például webcímet, telefonszámot olvas- nemcsak a programok, de az eszközök sanak be nagy sebességgel, amelyet a oldaláról is nagy kihívást jelent. A vezér- felhasználó így egyetlen mozdulattal lõlapkáknak az akkumulátoros üzem- meglátogathat vagy felhívhat. A kétdi- mód miatt csak nagyon kevés energiát menziós kódok beolvasása sem lehetet- szabad fogyasztaniuk, ugyanakkor bo- len, ezekkel viszonylag nagy adatmeny- nyolult átalakítások, lebegõpontos szá- nyiséget is kényelmesen lehet majd mítások elvégzését kell lehetõvé tenniük. bevinni a telefonokba. A nagyobb lapkagyártók, mint az ATi Technologies, az , a Motorola vagy a Viszlát, Ximian! már az új piacra fenik A Novell – nem nyilvános feltételek a fogukat, nem különben az , mellett – felvásárolta az eddig magán- amely hetvenmillió dollárért vásárolta kézben lévõ Ximiant. A Linux alá a meg a MediaQ nevû, világcégek beszál- vállalatok számára is fontos alkalma- lítójaként pontosan a mobil grafikai zásokat fejlesztõ Ximian megszerzése eszközök piacára fejlesztõ vállalkozást. révén a NetWare visszaszorulása Az állások elfoglalása hamarosan befe- miatt kicsit szerepvesztetten ténfergõ, jezõdik, a háború nem sokára indul. egyre inkább a tanácsadás és a szol- Nekünk csak annyit dolgunk lesz, hogy gáltatások felé forduló Novell átfogóbb a lehetõ leggyakrabban cseréljük le a csoportmunka-megoldásokat kínálhat mobiltelefonunkat. ügyfeleinek. A Ximian alapítói, Miguel de Icaza és Felpörgetve Nat Friedman a továbbiakban a Novell A Hitachi a világon elsõként kínál csapatában folytatja munkáját. A Gnome 7200-as fordulaton mûködõ 2,5"-os és a Mono projekt mögött külön alapít- merevlemezt. Az IBM-es idõkbõl ismert vány, nagy cégek és önkéntes fejlesztõk Travelstar sorozat E7K60 jelzésû tagját százai állnak, így ezek sorsát a felvásár- a gyártó elsõsorban kisméretû, állványra lás ténye remélhetõleg nem befolyásolja szerelt kiszolgálókba ajánlja, mivel az hátrányosan. asztali meghajtókét megközelítõ telje- sítményének és kis hõtermelésének elõnyei ilyen környezetben mutatkoz- nak meg leginkább. Az új Travelstar Medgyesi Zoltán 60 GB kapacitású, belsejében két darab ([email protected]) üveg alapú korong pörög, az adatok A Linuxvilág hírszerkesztõje. írását–olvasását négy darab fej végzi, Szabadidejét legszívesebben súlya 115 gramm. a barátnõjével tölti, szeret  http://www.hgst.com autózni és bográcsban fõzni.

www.linuxvilag.hu 2003. szeptember 9 Láttuk-hallottuk

Rendszermag-fejlesztési hírek Linux-index

A 2.5-ös fában megváltozott a megszakításkérés-kezelõk visszaté- 1. A 2002 végén eladott kiszolgálói rési értéke, hogy jobban tudjanak kezelni bizonyos, külsõ eszközök- operációs rendszerek ennyi százaléka kel kapcsolatos hibákat. Ennek az lett az egyik következménye, hogy volt Linux: 15–20 sok-sok vezérlõprogram használhatatlanná vált, és ki kellett javítani 2. 2006-ra vagy 2007-re az eladott új ki- a forráskódjukat. A hivatalos rendszermagforrás részét képezõ ve- szolgálói operációs rendszerek ekkora Egyes fejlesztõk zérlõprogramok szemszögébõl ez a változás visszatérõ, nemkívá- százaléka lesz Lintel (Linux on Intel): 45 – például Alan Cox – natos napi teendõnek tekinthetõ, ami azonban véghezvihetõ. Ezzel 3. Az informatika területén dolgozók azt állítják, hogy a szemben számtalan külsõ vezérlõprogram csak akkor lesz kijavítva, alapfizetésének növekedési aránya szolgáltatásbõvítés amikor valaki észreveszi, hogy már nem mûködnek, sõt a jogdíjas jelenleg: 5% befagyasztása vezérlõprogramok esetében még inkább elhúzódhat a javítás. tulajdonképpen már Bartlomiej Zolnierkiewicz az IDE-karbantartás hivatalos felelõse. nincs érvényben. Andre Hedrick – legalábbis pillanatnyilag – félreállt, hogy a soros ATA- (SATA) illesztéssel és a gyártók lapkakészleteivel kapcso- latos kérdésekre összpontosítson. Továbbra is Alan Cox a hivata- los összekötõ kapocs Linusszal az összes IDE-javítókészlet tekin- tetében. Andre úgy döntött, hogy visszamenõlegesen az összes olyan munkáját kiadja, amellyel hozzájárult a rendszermag 4. Ennyi SCO Unix-kiszolgálót váltanak fejlesztéséhez, mégpedig kettõs felhasználási engedéllyel, nem fel Linux-kiszolgálóval az új-zélandi csak a GNU általános közreadási feltételek szerint. A másik ilyen Farmlands mezõgazdasági kiskeres- Lawrence E. Rosen nyílt szoftverfelhasználási engedélye. kedelmi üzletlánc kirendeltségeinél: 28 Benjamin Herrenschmidt átvette a Radeon Framebuffer kódot, 5. Ennyi gazdálkodót szolgál ki a amikor Ani Joshi, a kód hivatalos karbantartója abbahagyta a Farmlands: 15 000 javítókészletek alkalmazását, és az üzenetekre sem volt hajlandó 6. Ennyi Linux-kiszolgálót adtak el válaszolni. Ani eltûnése után Benjamin összegyûjtötte a fellelhetõ Ázsia csendes-óceáni térségében különbözõ javítókészleteket, és kiadta az új RadeonFB-frissítést. 2002-ben: 18 000 2003. május elején még mindig sok tennivaló akadt a vezérlõprog- 7. A fenti kiszolgálók eladásából szár- rammal, és Benjamin úgy tervezi, hogy a 2.4-es fa jelenlegi alap- mazó bevétel dollárban: 58 millió kódjával folytatja a munkát, és a szolgáltatásbõvítés lezárása 8. Várhatóan ennyi Linux-kiszolgálót ellenére megpróbálja bejuttatni a program teljesen átírt változatát adnak majd el Ázsia csendes-óceáni a 2.5-ös fába. Egyes fejlesztõk – például Alan Cox – azt állítják, térségében 2007-ben: 47 000 hogy a szolgáltatásbõvítés befagyasztása tulajdonképpen már 9. A fenti kiszolgálók eladásából szár- nincs érvényben. Ha ez tényleg így van, akkor a 2.6-os (vagy mazó bevétel dollárban: 146 millió 3.0-s) változat elõkészítése jegyében elrendelt, a 2.5-ös változat 10. Legkevesebb ennyi számítástechnikai állandósítására tett elsõ kísérlet meghiúsult. csomóponton fut majd Linux az IBM Az I/O-vezérlõfüggvények (ioctls) letûnõben vannak, amióta új Blue Gene rendszerében: 65 000 a SysFS a 2.5-ös rendszermag tervezési megbeszélései során 11. Ennyi CPU van egyetlen Blue Gene megjelent. Azelõtt sokan kirohantak az ellen, hogy a vezérlõprog- lapkán: 32 ramok ioctls függvényeket alkalmazzanak. Nem pusztán renge- 12. Ennyi 32-bites CPU lapka van egyet- teg volt belõlük, de egyszerûen nem is lehetett tudni, hogy ponto- len Blue Gene-csomópontban: 64 san hány ilyen függvény létezik, és így megfelelõ leírást sem lehe- 13. Ennyi csomópont fér egy Blue Gene- tett hozzájuk készíteni. Habár még mindig számos olyan akad, keretbe: 8 amitõl meg kell szabadulni, egyre több jelenik meg az ésszerûbb 14. Ennyi keret szükséges ahhoz, hogy SysFS felületen. Továbbá az általános tisztogatás jegyében eltávo- elérjék az 1 PFLOP teljesítményt lítják azokat, amelyeket soha senki nem használt, például a (1 petaflop = egymilliószor egymil- SCSI_IOCTL_SYNC és a SCSI_IOCTL_BENCHMARK_COMMAND liárd matematikai mûveletet másod- függvényt. Úgy tûnik, hamarosan a SysFS lesz az elsõdleges percenként): 64 illesztési felület a felhasználók és a rendszermag között, felváltva 15. Nagyságrendileg ennyi millió dollárt az ioctls-t és az engedetlen ProcFS fájlrendszert. különítettek el a Blue Gene fejlesz- Greg Kroah-Hartman már 2003 eleje óta a devfs (és a /dev) tésére a 2000-ben tett bejelentés lecserélésén munkálkodott, április közepén végül kiadta az udev szerint: 100 elsõ változatát, ami Dan Stekloff tervei és ötletei alapján készült. Források A /dev könyvtár mindig is rém rendetlen volt, százával hemzsegtek 1–3.: Meta Group, Inc. benne a szükségtelen fájlok. 4–5.: New Zealand Herald 6–9.: Gartner Group Zack Brown 10–15.: CNet

Linux Journal, 2003. augusztus, 112. szám Linux Journal, 2003. 112. szám © Kiskapu Kft. Minden jog fenntartva

10 Linuxvilág Láttuk-hallottuk

Honi internet-saga

A Sulinet Expressz (SEx) Program alapvetõ Ki lehet igényjogosult? célkitûzése, hogy a pedagógusokat és a tanulókat Az igényjogosultságot nem a vásárlásnál, hanem csak otthoni használatra számítógéphez segítse. az esetleges adóellenõrzésnél kell igazolni, viszont az igényjogosultságnak a vásárlás idõpontjában meg kell Az adókedvezményre jogosultak körét és a kedvezmény lennie. A többéves kedvezmény igénybevételénél (pél- mértékét egészen pontosan a 2002. XLII., az adókról, járu- dául lízing) a kedvezmény ideje alatt a jogosultságnak lékokról és egyéb költségvetési befizetésekrõl szóló tör- végig fenn kell állnia. Ha például a gyermek közben befe- vények módosításáról szóló törvény írja le, amely szerint: jezi az iskolát, onnantól kezdve már nem jár a kedvez- 11. § (3) A pedagógus, az oktató, a hallgató, a felnõtt- mény. Mindettõl függetlenül a forgalmazó például rész- képzésben résztvevõ magánszemély, valamint az a letfizetés vagy lízing esetén saját elbírálás alapján kér- magánszemély, akinek gyermeke nappali rendszerû heti a jogosultságok igazolását szolgáló dokumentumok iskolai oktatásban vagy a felsõoktatásról szóló tör- bemutatását. Ez a szülõk esetében az iskolalátogatási vényben felsorolt felsõoktatási intézményben hitelesí- bizonyítvány, a pedagógusoknál, oktatóknál pedig a köz- tett iskolai rendszerû elsõ alapképzésben vesz részt, alkalmazotti jogviszonynak, illetve a munkaviszonynak az összevont adóalap adóját csökkentheti az adóévben © Kiskapu Kft. Minden jog fenntartva az adott idõpontban való fennállását igazoló okirat. általa számítógép, számítástechnikai eszköz megszer- zésére (vásárlására, bérletére, lízingelésére) fordított Hol mit mennyiért? összeggel, ha a megszerzés a Foglalkoztatáspolitikai Eladói oldalról a törvényalkotó a részvételt pályázathoz és Munkaügyi Minisztérium, az Informatikai és Hírköz- kötötte, így azon cégek, konzorciumok termékei kerül- lési Minisztérium vagy az Oktatási Minisztérium által hetnek a SEx-en belül értékesítésre, akik erre pályáztak kiírt pályázat keretében történik. Az adókedvezmény és nyertek. A programban megközelítõleg hetven cég alapját és összegét a vételárat, a bérleti díjat, illetve a vesz részt, a jogosultak az ország számos pontján vá- lízingdíjat tartalmazó, a magánszemély nevére kiállított laszthatnak a több mint 250 féle számítógép, hetvenféle számla bizonyítja. program – közöttük természetesen Linux-változatok is, (4) A magánszemély által e § alapján igénybe vehetõ például SuSE Linux –, valamint nyomtatók, kivetítõk, adókedvezmény(ek) összege adóévenként nem halad- digitális kamerák és modemek közül. hatja meg a hatvanezer forintot.” Az eddigiek során e területen történt a legtöbb baklövés, Ha valaki számítástechnikai eszközt lízingel vagy bérel, sokáig sûrû homály fedte a mit-honnan-mennyiért kér- és a lízingdíjat vagy bérleti díjat több adóév során szám- déskört. A pályázatnyertesekkel megkötött keretszerzõ- lázzák, akkor a kedvezmény a jogszabály érvényessége dés alapján az Oktatási Minisztérium minden értékesítõ- alatt minden egyes adóévben igénybe vehetõ, feltéve, hely számára SEx-emblémával ellátott, A4-es méretû hogy a többi feltétel is teljesül. Sajnos azonban a több- Sulinet Expressz értékesítõhely tanúsítványt adott ki. éves áruhitel nem tartozik ebbe a körbe, mivel ebben A tanúsítványokat az eladótérben ki kell kifüggeszteni, az esetben a termék vételárát a vásárlás idõpontjában megkönnyítve ezzel a vásárlók számára a döntést, hogy számlázzák, vagyis csak egyszeri hatvanezer forint adó- kérdéseikkel, panaszaikkal közvetlenül hova forduljanak. kedvezmény vehetõ igénybe. Egyetlen magánszemély A termékekre öntapadós SEx-matricát és a termék és több címen is lehet jogosult (például pedagógus és az értékesítõhálózat azonosítására alkalmas hologramos szülõ), viszont a kedvezmény együttes összege ekkor termékjelölõ címkét kell ragasztani. sem haladhatja meg a bûvös hatvanezer forintos határt. Néhány szó a kisördögrõl… Amennyiben szülõként kívánjuk igénybe venni az adó- Nyilván sokakban megmozdult a kisördög, ám a pályázat kedvezményt, akkor egy gyermek után mindkét szülõ megalkotói a magyar szokásokhoz híven azonnal igye- igénybe veheti a legnagyobb kedvezményt, mivel nálunk keztek néhány kiskaput bezárni: a SEx keretében az jelenleg nincs családi adózás, csupán személyi jövede- adókedvezmény igénybevételével vásárolt számítógépet, lemadó. A kedvezmények azonban nem vonhatók össze eszközöket a kedvezményt igénybevevõ magánszemé- egyetlen termék megvásárlására, mivel ugyanazt a lyek a vásárlás évének utolsó napját követõ harmadik év terméket nem lehet kétfelé számlázni. Ehelyett mindkét december 31-ig nem értékesíthetik, nem adhatják bérbe, szülõnek külön-külön kell megvásárolnia egy-egy számí- vagy másnak térítésért vagy anélkül nem engedhetik át, tástechnikai eszközt. gazdasági társaságba apport jogcímen nem vihetik be. A kedvezmény nem a vásárláskor érvényesíthetõ,  ugyanis akkor természetesen ki kell fizetni a termék vé- http://ado.sulinet.hu/ telárát, hanem az adóév végén, az adóbevallás elkészí- tésekor jelentkezik: a vásárlónak a kedvezmény összegé- Nagy Anna ([email protected]) vel csökkentett, azaz hatvanezer forinttal kevesebb adót Linuxvilág felelõs szerkesztõje, akit kell befizetnie. Arra azonban nagyon oda kell figyelni, a sors túltengõ pedagógiai hajlammal hogyha az egyébként megfizetendõ adó a kedvezmény és birkatürelemmel áldott meg. összegénél kevesebb, akkor a különbség elvész, vissza- Két kiskorú gyermekével életre szóló téríteni nem lehet. programot írt magának.

www.linuxvilag.hu 2003. szeptember 11 Láttuk-hallottuk

LME-hírözön

A Linux-felhasználók Magyarországi Egyesületének (június 29–július 5., illetve július 6–12.) vendégeskedett (LME) életében rendkívül mozgalmasan telt az Szerencsen, a „Csider-villában”, azaz a Csider Andor elmúlt pár hónap. által igazgatott Szerencsi Középiskolai Kollégiumban. A szállás 2–4 ágyas szobákban, a folyosók végén inter- 2003. június 21–22. között Persányi Miklós környezetvé- neteléréssel, számítógéptermekkel, a nappalikban tele- delmi miniszter fõvédnökségével került megrendezésre vízióval, az alapértelmezett háromszori étkezés lebonyolí- a negyedik Ózon fesztivál Budapesten, a városligeti tására étteremmel várta a tudásra szomjazókat, valamint szánkódomb mellett. a Linux iránt kevésbé érdeklõdõ családtagokat. A napi 4–6 órás oktatás a kollégiumtól 500 méterre lévõ gim- názium géptermeiben az alábbi témakörökben zajlott: 1. hét • Kezdõk számára Általános Linux-alapismeretek

© Kiskapu Kft. Minden jog fenntartva – Telepítés – Linux-rendszer felépítése, TCP/IP – Rendszermag – Grafikus felület (Gnome, KDE, ablakkezelõk) – Hang – USB használata – Belsõ hálózatok – Hálózatbeállítás, névfeloldás – Samba – Levelezés – Nyomtatás (hálózati, cups) – Telepítés forráskódból A fesztivál célja az volt, hogy megpróbálják össze- • Haladók számára gyûjteni és bemutatni azokat a válaszokat és megol- – RAID dásokat, amelyeket a civil társadalom ad a létét – LVM fenyegetõ környezeti, gazdasági, szociális és emberi – Programozás: C, PHP válságokra. – Debian-csomagkezelés, -csomaggyártás A fesztivál keretén belül beszélgetések, elõadások, film- – Biztonság: elmélet, RSBAC, Netfilter, vetítések kaptak helyet, civil szervezetek mutatkozhattak átlátszó proxy, Zorp, VPN be, és tapasztalatcserére, környezetbarát cégek és – Kiszolgálók: Apache, Bind, dhcp, módszerek bemutatkozására nyílt lehetõség. PostgreSQL, cups, Squid, LDAP Ezenkívül volt biopiac, és az otthon elkészíthetõ ételek – Lemez nélküli (Diskless) rendszerek garmadával (például a házi kefirrel, joghurttal, kenyérrel) – Levelezés: Postfix, Qmail, Courier, Squirrelmail ismerkedhettünk meg, a kovászkészítés és a csíráztatás – Vírus- és levélszemétszûrés rejtelmei is feltárultak, de életmód-tanácsadáson is részt – Grafikus rendszer távfelügyelete vehettek az érdeklõdõk. Bepillantást nyerhettünk a kör- nyezetvédelmi jogérvényesítés útvesztõibe, és a függet- 2. hét len médiák bevonásával (Indymedia), valamint a zöld és • Kezdõk számára kritikai folyóiratokkal (Liget, Ezredvég, Eszmélet, Ökotáj, – Linux teljesen kezdõknek Kovász, Fedél Nélkül, Gaia), illetve egyéb kisebb újsá- – Debian-telepítés, -beállítás gok, fanzinok, kézírásos újságok bemutatkozásával – Fájlrendszerek tapasztalatcserére is sor került. – Kiszolgálók: DNS, DHCP, proxy, Samba, cups A „Lehet más a világ!” mottójú eseményen egyesüle- – Levélkiszolgálók tünk is képviseltette magát: a CD-író projekt számtalan – Apache, PHP linuxos CD-vel ajándékozta meg az érdeklõdõket, illetve – Hálózatbiztonság, csomagszûrés Hazai Géza, az LME elnökhelyettese Varga Csaba – Grafikus rendszer, hang Sándor-ral, az FSF.hu alapítvány kuratóriumának elnö- • Haladók számára kével tájékoztató jellegû elõadást tartott. – Lilo, grub Linux-tábor 2003 – Programfejlesztés Czakó Krisztián (Slapic) jóvoltából harmadik alkalommal – Netfilter került megrendezésre az immáron hagyományosnak – Policy routing, QoS mondható Linux-tábor. – Kiszolgálók: DHCP, DNS, LDAP (azonosítás), A megközelítõleg nyolcvan látogató két turnusban Apache, Samba, Squid

12 Linuxvilág Láttuk-hallottuk

«

– Levélkiszolgálók: Postfix, Qmail, Vpopmail, – Agócs Péter (Virusbuster Kft.) Courier (POP3, IMAP) – Dr. Szentiványi Gábor (ULX Kft.) – Grafikus felület – Tesch Zoltán (Kancellar.hu) – Dial-in – Bodoky Tamás (Index.hu) – Távfelügyelet – Witch (a „szakértõ”) • Profik számára A meglehetõsen foghíjasra sikeredett programból – Programfejlesztés érdemes kiemelni Tesch Zoltán és Bodoky Tamás – Debian-csomaggyártás elõadását, valamint a vasárnap délelõtti elmélyült – Biztonság elméleti szinten beszélgetést, ahol mindenki mindenkivel eszmét – RSBAC cserélhetett az elõtérben. – Sandbox/jail-készítés Gyakorlott konferenciaszervezõk biztosan egynaposra – Csomagszûrés tervezték volna a rendezvényt, gondoskodtak volna – VPN

– Applikációs tûzfalak © Kiskapu Kft. Minden jog fenntartva – Lemez nélküli rendszerek Kezdõknek a jelentkezéshez a Linux ismerete nem volt követelmény. Az ismeretanyagok átadását az alábbi oktatók végezték, akiknek ezúton is köszönjük az önzetlen segítséget: – Balázs Tibor (Cövek) – Kis Tamás (Dozer) – Szalai Ferenc (Szferi) – Czakó Krisztián (Slapic) – Tomka Gergely (Tomka) – Pásztor György (Pasztor) – Magosányi Árpád (Mag) – Gerendás Zoltán (ZGerendas) – Haluska György (George) I. Hackertalálkozó „Elmondanám, de nem lehet…” – ez lehetett volna étkezési lehetõségrõl, de azt nézve, hogy ez lényegében a találkozó mottója, ugyanis a magyar törvények már egyetlen ember (Kovács Krisztián) munkájának az azt is büntetik, aki a meglévõ hibákat pusztán eredménye, csak gratulálni lehet. nyilvánosságra hozza. A rendezvény alkalmából készített honlap egész évben 2003. július 5–6. között került megrendezésre hazánk folyamatosan várja az érdeklõdõket a  http://www.hacktivity.hu/ címen. Az eseményen elsõ „betyár” találkozója Tatabányán, a KPVDSZ  Mûvelõdési Házban. Megszokhattuk, hogy az ilyen készült videofelvételek az ftp.eplanet.hu kiszolgálóról ftp-hacktivity és ehhez hasonló országos érdeklõdésre számot a felhasználói névvel tölthetõk le. tartó rendezvények rendszerint fõvárosunkban kerülnek Az eseményt egyesületünk apróbb ajándékokkal megrendezésre. Kovács Krisztián, a rendezvény fõ támogatta. szervezõje ennek ellenére lakhelyét, azon belül is az Sziget fesztivál Újváros szívében található, 1976-ban épült KPVDSZ, 2003. július 30. és augusztus 6. között rendezték meg azaz a kereskedelem, a vendéglátás, a pénzintézet hazánkban a Hajógyári-szigeten Közép-Európa legna- dolgozóinak szakszervezeti mûvelõdési házát válasz- gyobb fesztiválját. A Linux-felhasználók Magyarországi totta. Az egykori KISKER Kultúrotthon jogutódja a helyi Egyesülete az FSF.hu Alapítvánnyal karöltve a „Lehet közösségi ház és „befogadó ház” szerepét is ellátja, más a világ” összefogás által létrehozott Zöld Udvar és ezt saját erõbõl teszi, tehát nem önkormányzati vendégeként elsõ ízben rendezte meg a „Szabad ház, talán ezért is adott örömmel otthont a hazánkban Szoftver Sziget Fesztivált”, amelynek keretében a Sziget még szokatlan rendezvénynek. vendégeinek nyílt forrású programokat, operációs rend- A rendezvényt hozzávetõlegesen nyolcvan látogató szereket mutattak be, ezeket a látogatók természetesen tekintette meg. Mivel a látogatók teljes névtelenséget ki is próbálhatták, elõadásokat hallgathattak, valamint az élveztek, csak tippelni lehet, hogy honnan érkeztek LME CD-író projektjétõl és a támogatóktól kapott Szabad – de a beszélgetésekbõl, hozzászólásokból arra lehet Szoftver CD-khez juthattak. következtetni, hogy a többség rendszergazda, illetve A rendezvény támogatóinak jóvoltából az érdeklõdõk informatikai, biztonságtechnikai szakemberekbõl állt. SuSE és UHU-Linux terjesztésekkel találkozhattak, ezeket Elõadásokat a következõk tartottak: gyári CD-ken is megtalálható bõvítményekkel vehették

www.linuxvilag.hu 2003. szeptember 13 Láttuk-hallottuk

«

kézbe. A szabad programokkal már jó barátságban lévõk V. GNU/Linux szakmai Konferencia a Debiannal és egyéb Linux-változatokkal ismerkedhet- A Linux-felhasználók Magyarországi Egyesülete 2003. tek, ezeket a Szigeten a Multimédia Kft. által támogatott november 8-án (szombaton) rendezi meg az V. GNU/Linux CD-író projekt segítségével haza is vihették. Támoga- szakmai Konferenciát, seregnyi neves elõadó és kiállító tóink közül ki kell még emelnünk a Magyar BSD Egyesü- részvételével a Hotel Novotel Budapest Centrumban letet, az FSN-t, a Linux Support Centert és a Mission (Budapest, VIII. Rákóczi út 43–45.; Critical Linuxot, valamint a Software Station céget.  http://www.novotel-bud-centrum.hu/indexhu.html). Vasárnap Varga Csaba Sándor, az FSF.hu alapítvány A tanácskozás területén kiállítás és vásár is lesz, ahol kuratóriumának elnöke és Szervác Attila, az LME és linuxos szakkönyveket, programokat és egyebeket lehet a Szabadon kampány jelenlévõ képviselõje tartott majd megvásárolni. A konferencia fõ témája a honosítás elõadást. Az elõadás anyagát médiapartnerünk, az és a magyar fejlesztések. Indymedia rögzítette. A konferenciával kapcsolatban felmerülõ véleményeket, A jelenlévõk éppúgy tájékoztatást kaptak a szabadon kérdéseket a Konferencia 2003 ([email protected]) felhasználható programok társadalmi vonatkozásairól, listára várjuk. A program reggel 10 órakor kezdõdik © Kiskapu Kft. Minden jog fenntartva mint a gazdaságiakról, valamint azokról az elõnyökrõl, és 18 óráig tart. Idén a támogatóknak köszönhetõen amelyek miatt a közigazgatási intézmények, az iskolák, a belépõjegyek ára az alábbiak szerint alakul: a civil szervezetek, a magyar vállalatok és a magánsze- • Támogatott belépõ mélyek is egyre inkább a nyílt forráskódú megoldások A támogatott belépõ térítésmentes. A támogatott felé fordulnak. belépõvel érkezõ vendégek a konferenciakiadványon A látogatók megtapasztalhatták, hogy milyen könnyû egy és 1–2 apróságon kívül semmilyen egyéb szolgáltatás- szabad operációs rendszert és a hozzájuk tartozó rengeteg ban nem részesülnek. Elõzetes regisztráció kötelezõ! kiváló programot kezelni. A bemutatókat a civil együtt- mûködés jegyében a Semmelweis Orvostudományi • Üzleti belépõ Egyetem vezetõképzõje támogatta az általuk kölcsönadott Az üzleti belépõjegy ára 19 900 + 25% áfa, azaz 233 MHz-es gépekkel, amelyek megmutatták a szabad bruttó 24 875 forint. programok erejét és kimagasló üzembiztonságát. Üzleti belépõt vásárló vendégeink a következõ szolgáltatásokban részesülnek: Debian X Party – konferenciakiadvány, A Linux-felhasználók Magyarországi Egyesületének – reklámanyagok, Debian csoportja 2003. augusztus 15–17-én a Budapesti – jegyzettömb, reklámtoll, Mûszaki Egyetem Schönherz Zoltán Kollégiumában, az – konferencialogós, galléros póló, Új Vár Klubban határozta el, hogy a Debian GNU/Linux – az elõadások bemutatóinak kinyomtatott 10. születésnapja (augusztus 16.) tiszteletére megren- egybefûzött példánya, dezi a Szabad Szoftver Közösségi találkozóját, amit – névre szóló kitûzõ, Debian X Party névre kereszteltek. – büfé (kávé, üdítõ, sütemény), A Debian projekt minden idõk legnagyobb nyílt fej- – üzleti ebéd a hotel éttermében, lesztési modellre épülõ szabad programja, amely- – a konferencia zárásakor a szervezõk nagy nek „az univerzális operációs rendszer” megterem- értékû ajándékot sorsolnak ki az üzleti belépõ- tése a célja. tulajdonosok között. Mára a világ legnagyobb programrendszerévé nõtte ki Az elõzetes regisztráció szintén kötelezõ! magát, mert gyors, biztonságos és bármilyen felhasz- nálói igény kielégítésére alkalmas felületet nyújt az • VIP-belépõ otthoni felhasználóknak, cégeknek, irodai alkalmazot- A VIP-belépõ térítésmentes, közvetlenül nem taknak és fejlesztõknek egyaránt. igényelhetõ. Ilyen belépõket az LME díszvendégei A résztvevõk az ünneplés mellett hasznos munkával kapnak, valamint a támogatók is hozzájuthatnak, kívánják tölteni a hétvégét. Erre jó lehetõséget ad a és ezeket munkatársaik vagy az általuk meghívott DDTP rendszer (Debian Description Translation Project), személyek szabadon felhasználhatják. amelynek segítségével könnyen fordíthatók azok a rövid, A VIP-belépõvel érkezõk ugyanazokat a három-négymondatos leírások, amelyek magyarul szolgáltatásokat élvezhetik, mint az üzleti segítik elõ a Debian alapjának telepítését, a beállításokat belépõjegyet vásárló vendégeink. és a felhasználó igényei szerinti programok telepítését. Magyarországon akadt már egy példátlanul sikeres Gibizer Tibor ([email protected]) akció, amikor az FSF.hu Alapítvány aktivistái által szerve- Újságíró, immár nyolc éve a Linux zett OpenOffice.org-fordítás alkalmával bebizonyították, elkötelezett híve. Imádja a kutyákat, hogy egy jól megszervezett akcióval milyen óriási a kerékpározást és az autós csavargást. eredményeket lehet elérni. Az LME Debian csoportja hasonló eredményességre törekszik.

14 Linuxvilág Láttuk-hallottuk

A hónap szakmai tanácsai

Kapcsolat idõtúllépése Egyszerûen távolítsd el a nem kívánt rendszermagokat. A telnet és az SSH-kapcsolatok idõtúllépés miatt Az rpm -qa | grep kernel parancs megadja, hogy megszakadnak. A tcsh parancsértelmezõt használom, mely rendszermagcsomagok vannak telepítve, és az és a pty-eszköz, amire bejelentkezem, fel van sorolva a rpm -e paranccsal a régiek eltávolíthatók. Azt javas- /etc/securetty állományban. Ez nem az autologout lom, hogy legalább kettõt tarts meg, így ha valami hibája. Ha letiltom az autologout-ot, akkor is meg- rosszra fordul a jelenlegivel, marad egy tartalék. szakad a kapcsolat, nagyjából egy óra múlva. Amikor ez Mario Bittencourt, [email protected] történik, a felhasználó még mindig bejelentkezettként Ez nemcsak rendben van, de ez a helyes rendszergazdai van felsorolva és a parancsértelmezõ mûködik. A folya- magatartás. Csak a hasznos rendszermagokat tartsd matazonosítóját kilõve lehet csak befejezni a futását. meg – általában kettõ szükséges: az elsõdleges rend- Floyd Miller, [email protected] A Linux Journal honlapján szermag és a biztonsági tartalék, ha valami történne az számtalan gond megoldá- Nagyon valószínû, hogy a tûzfalban van a hiba. Gyakran elsõdlegessel. Annyi különféle változatot, mint neked sához találhattok további megesik címfordító és álcázó tûzfalaknál, hogyha egy van, ritkán kell megtartani, hacsak nem különlegesek az segítséget. A Sunsite összeköttetésen egy bizonyos ideig nincs forgalom, ak- igényeid, például rendszermag-illesztõprogramokat tüköroldalait, a gyakori kor az útválasztó eldobja a kapcsolatot, mert feltételezi, fejlesztesz és próbálsz ki. kérdéseket és az egyéb hogy helytelenül lett lezárva. Ennek az az oka, hogy bizo- Chad Robinson, [email protected] útmutatásokat a nyos ügyfelek nem küldenek megfelelõ lezárási kérést, USB flashmeghajtó?  és nem lenne okos dolog fenntartani ezeket a halott kap- www.linuxjournal.com Hogyan fûzhetek be egy USB flashmeghajtót? A /proc/ csolatokat, mert rendszermag-erõforrásokat kötnek le. honlapon olvashatjátok el. bus//devices/ könyvtárban megjelenik a meghajtó. Chad Robinson, [email protected] A rovatban közzétett A hardverkeresõ hda4-ként azonosítja fat32 fájlrend- válaszokat Linux-szakértõk Valószínûleg címfordító átjárón mész át, ami a tétlen szerrel, de nem tudom befûzni, sem a fájlokat elérni. kis csapata készítette el. TCP-kapcsolatokat egy óra tétlenség után megszakítja. Callum Benepe, [email protected] További kérdéseiteket Rendszergazdaként add ki a következõ parancsot: usb-storage szívesen fogadják echo 600 > /proc/sys/net/ipv4/ Úgy tûnik, hogy nincs betöltve nálad az (angol nyelven) a tcp_keepalive_time modul, ami viszont szükséges ehhez az eszközhöz.  Olvasd el a Linux USB Guide dokumentumot a www.linuxjournal.com/ Ezután, ha SSH-t használsz, küldj életben tartó TCP-cso-  http://www.linux-usb.org honlapon. Itt részletesen lj-issues/techsup.html magokat, hogy a kapcsolat ne haljon el: címen, ahol csak egy ssh -o ´KeepAlive=yes´ célgép leírják a megfelelõ illesztõprogramok betöltésének és az eszköz befûzésének a módját. kérdõívet kell kitöltenetek, Marc Merlin , marc_bts@.com Greg Kroah-Hartman de a [email protected] címre , [email protected] levelet is írhattok. A levél Kevesebbet kell gépelned, ha beírod a A Windows eltüntette a LILO menüjét ProtocolKeepAlives 300 tárgyában szerepeljen Számítógépemre Red Hat 7.1 van telepítve, és egy ~/.ssh/config a „BTS” kulcsszó. sort a állományba, hogy az SSH minden másik lemezrészen Windowst használok. Nemrég újra- kapcsolatra ötpercenként életben tartó csomagot küldjön. telepítettem a Windowst. A rendszerindítás után a gép Don Marti , [email protected] többé nem kérdezi meg, hogy Windowst vagy Linuxot Támogatás az Intel Videóhoz? akarok-e futtatni, hanem egybõl a Windowst indítja. Videokártyám egy beépített Intel 82845G/GL, ami nem Helyreállítható-e a Linux? hajlandó együttmûködni a Linuxszal (Red Hat 8.0). Kunal S Doddanavar, [email protected] A Linux a telepítés során lekérdezi, de nem indul el A Windows vagy eltávolította, vagy letiltotta a Linux a grafikus mód, és a startx végzetes hibát ad. rendszerbetöltõjét, ami a Red Hat 7.1 esetén a LILO. Jafar Borhan, [email protected] Indítsd a rendszert a helyreállítólemezrõl, fûzd be a Linux A Google-n keresve találtam egy oldalt, ahol leírják lemezrészét például így: mount /dev/hda1 /mnt, és a rendszer beállítását ehhez a videokártyához: futtasd a run lilo -R /mnt parancsot a rendszerin-  http://www.linuxcare.com/labs/certs/ibm/netvista- dítás elõtt. Ha GRUB-ot használtál, a grub-install m42/rh80-config.epl. Frissítsd a felsorolt csomagokat, oldja meg a gondot. majd futtasd az Xconfigurator programot. Marc Merlin, [email protected] Marc Merlin, [email protected] Az újabb Red Hat-terjesztéseknél – amelyek a GRUB rendszerbetöltõt használják – indítsd el a rendszert a Régi rendszermagok kiselejtezése helyreállítólemezrõl, és telepítsd újra a GRUB-ot a A Red Hat Network segítségével frissítem a program- grub-install paranccsal. Ha nem készítettél hely- jaimat. Engedélyeztem az up2date programnak, hogy reállítólemezt, akkor a rendszert a telepítõ CD-rõl indítsd, a rendszermagot is frissítse. Viszont a /boot lemezterület helyreállító módban. kezd megtelni. Hogyan távolíthatok el néhányat a régi Christopher Wingert, cwingert@.com rendszermagok közül? Nem hinném, hogy öt különbözõ rendszermagra lenne szükségem a /boot lemezrészen. Linux Journal 2003. augusztus, 112. szám © Kiskapu Kft. Minden jog fenntartva Bob Wooden, [email protected]

16 Linuxvilág Láttuk-hallottuk

Új termékek

SmartFLeX SFT-CXC feljebb 25 hálózatba kötött felhasz- ColdFire, ARM és SPARC), valamint Network Terminal nálót kiszolgáló környezetbe tervez- az MMU-val rendelkezõket, többek Az SFT-CXC karakteres és grafikus tek (frissíthetõ az ötven felhasználós között a SuperH-t, az Xscale-t és terminál a SmartFLeX Technologies változatra). A Small Office Server a x86-ot is. A terjesztés a SnapGear beágyazott Flash tartalmazza a Trustix terjesztést, és által karbantartott µClinux-foltokon Linux-rendszerén web-, levél-, proxy- és helyi hálózati alapul, segédprogramokat, szab- alapul. Az SFT-CXC kiszolgálóként használható. Telepít- ványos API-kat és programkönyv- karakteres terminál- hetõ a meglévõ gépekre, vagy elõre tárakat tartalmaz az egyedülálló üzemmódja akár öt telepített formában megtalálható az programokhoz, valamint forráskód- egyidejû munkame- IBM xSeries gépein. A terjesztésnek gyûjteményt. A SnapGear Embedded net is támogat része a RAV vírus- és levélszemétirtó ingyen letölthetõ a webhelyérõl, – teljes képernyõs programja, valamint a NetVault biz- de megfelelõ díj ellenében CD-leme- üzemmódban, tonsági mentéseket készítõ alkal- zen is elérhetõ. etherneten vagy soros kapcsolaton mazása. A Small Office Server támo- Adatok: SnapGear, Inc., keresztül. X-terminálként használva gatja a felhasználók állományainak 7984 South Welby Park Drive #101, egy XDMCP-munkamenetet használ- központosított tárolását, a hálózati West Jordan, Utah 84088, hatunk a hálózati gazdagéphez. A kü- gyorsítótárazást és a központosított telefon: 801-282-8492, lönféle ablakkezelõk használatára beléptetést.  http://www.snapgear.com felkészítõ bõvítményeket mellékelték Adatok: Trustix, 4819 Emperor (company site), a programhoz. Az SFT-CXC egy Boulevard, 4th Floor, Durham,  http://www.snapgear.org webböngészõ program segítségével North Carolina 27703, (downloads). a távolból is beállítható. telefon: 919-313-4599, 3DBOXX M4 Opteron Adatok: SmartFLeX Technology, Inc.,  http://www.trustix.com munkaállomások 623 Selvaggio Drive, Suite 220, Interphase A BOXX Technologies bejelentette Nazareth, Pennsylvania 18064, IPSec-gyorsítókártyák térbeli leképezõ munkaállomásainak telefon: 610-746-2390, Az Interphase új hálózatbiztonsági új családját, amelyek két Opteron  http://www.smartflextech.com termékvonalának elsõ képviselõi processzort tartalmaznak. A 240-es, ATG 6 a 45 NS (PMC) és az 55 NS (PCI) 242-es és 244-es processzorokkal Az ATG 6 a Red Hat Advanced hálózatbiztonsági gyorsítókártyák. felszerelt gépek már kaphatóak. Server 2.1-re telepíthetõ e-kereske- A kártyák alkalmazásával megszün- Az M4-es munkaállomás nVidia delmi, üzleti folyamatokat és kap- tethetõ a VPN-ek, átjárók, útválasz- Quadro rendszert használ a térbeli csolatokat kezelõ alkalmazáscsomag. tók és tûzfalak szûk keresztmetszete, tartalom leképezésére és mozga- A program önkiszolgáló rendelésfel- mert a kártyák a számításigényes tására a Maya, 3DS Max, Softimage vételre, számlakezelésre és vevõol- IPSec-feldolgozást a számítógép pro- XSI, LightWave 3D és Houdini prog- dali feladatok (például termék-össze- cesszora helyett elvégzik. A gyorsító- ramokkal. Az alapkiépítésû munka- hasonlítás, ajándékküldés és fizetés) kártyák képesek a fejlécelemzésre, állomás tartalmaz egy AMD-8111 végrehajtására képes. A projektek a hasznos forgalom kiemelésére, HyperTransport PCI-alagutat, egy logikai munkafolyamatát önmûködõ tömörítésre, titkosításra, hitelesí- AMD-8151 HyperTransport AGP-ala- eszközök irányítják, a kölcsönhatá- tésre és csomagok összeállítására. gutat, 128 bites kétcsatornás me- sok teljes sorozata önmûködõen Mindkét kártya 500 Mb/s sebességû móriasínt, legfeljebb 8 GB ECC-hiba- megy végbe. Az egymáshoz kapcso- 3DES-átvitelre képes, és gyorsítja javítással ellátott 333 MHz-es DDR- lódó modulok kezelik a közzététellel, a DES, MD5, SHA-1, RC4 és AES memóriát, négy DIMM-bõvítõhelyet, kereséssel, elemzéssel, fizetéssel biztonsági algoritmusokat. További kétcsatornás UltraDMA 133 IDE- és a csalások elleni védekezéssel jellemzõk: 66 MHz-es PCI-sín, 64 MB vezérlõt és hatcsatornás hangot. kapcsolatos feladatokat. Az ATG 6 saját memória, teljesen kétirányú A munkaállomások egyéni felszerelt- többféle meglévõ vállalatirányítási OC3-sebességek támogatása és séggel is megrendelhetõ. A jó hõel- és vevõkapcsolati rendszerrel össze- 512 K egyidejû munkamenet. vezetés érdekében a gépek könnyû kapcsolható. Adatok: Interphase, Parkway Centre, alumíniumházban vannak, és két Adatok: ATG, 25 First Street, Phase 1, 2901 North Dallas Parkway, 92 mm-es ventilátor fújja bennük Second Floor, Cambridge, Suite 200, Plano, Texas 75093, a levegõt. Massachusetts 02141, telefon: 800-327-8638, Adatok: BOXX Technologies, Inc., telefon: 617-386-1000,  http://www.interphase.com 10435 South Burnet Road,  http://www.atg.com Suite 120, Austin, Texas 78758, SnapGear Embedded Linux telefon: 877-877-2699, Trustix Small Office Új, ingyenes beágyazott Linux-ter-  http://www.boxxtech.com Server jesztést adott közre a SnapGear Inc. A Trustix megjelentette a Trustix A SnapGear Embedded támogatja az Linux Journal 2003, 112. szám © Kiskapu Kft. Minden jog fenntartva Small Office Servert, amelyet leg- MMU nélküli processzorokat (például

www.linuxvilag.hu 2003. szeptember 17 Töprengõ

Hogyan teszi a Linux okosabbá a vállalatokat? (2. rész) Hogyan is változtatja meg a Linux a hagyományos vállalatok információtechnológiáját?

ézzünk meg például egy leve- lushoz. Ma ezek a trendek a Linuxnak várogni a vállalathoz, ahogyan a Micro- let, amelynek a szerzõje névte- kedveznek – nagy idõket élünk. A Li- soft SQL Server tette, de annál sokkal lenséget kért: „Egy Fortune nux-fejlesztõkrõl szóló legújabb felmérés nagyobb sebességgel. A MySQL olyan N50-be tartozó vállalatnál dolgozom, ahol szerint (mely fejlesztõk más felületeken az Oracle-nek, mint a Linux a Windows- az IT-részleg új nyílt forrású irányvo- is dolgoznak) az Evans Data Corp. gyors nak. Lassan, de határozottan felkúszik a nalat léptetett érvénybe. Emellett egy átrendezõdést figyelt meg a kereskedel- táplálékláncon, ugyanúgy, mint a Linux jóváhagyott nyílt forrású eszköztárat is mi Unixtól és Windowstól a Linux irá- tette.” Amikor megkérdeztem Marten

© Kiskapu Kft. Minden jog fenntartva kiadott (saját, belsõ „márkanév” alatt), nyába: „Az esetek negyven százalékában Mickost, hogy vajon a MySQL verseny- amit az alkalmazottak egy weblapról a Linux az elsõdleges választás. A Win- zik-e az Oracle-lel, azt válaszolta, hogy tölthetnek le. Már a 3.0 változatnál tar- dows 2000-nek nagyon erõs, 29 száza- nem. „Inkább helyettesítjük az Oracle-t, tunk, ami mind Unix, mind Windows lékos részesedése van, amit a Windows mintsem versenyzünk vele.” alatt megtalálható. Az eszköztár Unix- XP követ 12 százalékkal. A helyzetkép Wim Coekaerts ( http://otn.oracle.com/ oldalon GNU és egyéb eszközökbõl azonban folyamatosan változik. A követ- oramag/Coekaerts.html), az Oracle tevõdik össze, Windows-oldalon pedig a kezõ évben a válaszadók száma, akik a linuxos magfejlesztõ csoportjának veze- Cygwin eszköztárat tartalmazza. Linuxot elsõdleges fejlesztési felületként tõje a következõket nyilatkozta: „A Linux A Linux (jelenleg a Red Hat) az egyike használják, 15 százalékkal nõni fog, nagyon, de nagyon fontos az Oracle szá- az „eszközöknek”. vagyis negyvenrõl 55 százalékra.” mára. Szinte már linuxos cég vagyunk.” Az eszköztár-projektet vezetõ srác szin- Büszkén állítja, hogy magfejlesztõi tén a szabad programok szószólója. Forgalmazók: azt nyújtani a csoportja hozzájárult ahhoz, hogy Az irányelv kinyilatkoztatott célja, hogy vásárlóknak, amit õk szeretnének Linuxot „vállalati szintûvé” tegye. lehetõséget adjon a vállalatnak a megta- A forgalmazók új kényszerítõ ereje az, karításokra. Nyilvánvaló cél az is, hogy hogy azt adják a vevõiknek, amit õk Történet az új szabványról lehetõséget biztosítsanak a vállalatnak szeretnének, és ne próbálják meg bele- Az Oracle-hez hasonlóan a többi szellemi tulajdonuk megvédésére egy kényszeríteni õket egy választás nélküli forgalmazónak is alkalmazkodnia kell harmadik fél (ez a Microsoft) manipulá- kapcsolatba. Köszönik, ebbõl már ahhoz a világhoz, amelyben a Linux ciójával szemben. elegük van. Marten Mickos, a MySQL és a nyílt forrás követõi az alapvetõ Az irányelvnek része az úgynevezett ( http://mysql.com) ügyvezetõje hisz IT-hátteret alkotják. Ez a háttér gyorsan „ne kérdezz, ne mondd el” elv. Az IT abban, hogy az olyan vállalatok, mint válik szabvánnyá, akárcsak a „százas” beleegyezett, hogy nem panaszkodik, az övé is, képesek felébreszteni az IT- szeg és a csavarhúzó. A forgalmazók ha valaki elhatározza, hogy ezeket az tudatosságot. Azt nyilatkozta, hogy a mindig üdvözölni fogják e háttér elõ- eszközöket bármelyik, a felhasználó MySQL azért tudja sikeresen árulni a nyeit, és hozzájárulnak a fejlõdéséhez, által használt számítógépre telepíti. szabad programot (a MySQL GPL de a kapcsolatuk formája az elvonttól Az összes nem vezetõi beosztásban felhasználási szerzõdésû), mert „több az el fog tolódni a kézzelfogható felé, az dolgozó alkalmazottnak most engedélyt érték a látható kódok fejlesztésében, elvont játéktérrõl a valódi IT-projektek kell kérnie helyi vezetõjétõl az eszköz mint abban a forráskódban, ami nem felé, ahol valami hasznoshoz járulhat- letöltésére és telepítésére. A vezetõknek hozzáférhetõ; egy óriási vevõ- és fej- nak hozzá. Amikor ez meg fog történni nincs szükségük ilyen engedélyre, hogy lesztõi közösség tagjai vagyunk, mind és a programipar felnõ, az érdem végre az eszközt a saját gépükre telepíthessék. szenvedélyesen fejlesztjük az alapkódot. oda fog kerülni, ahova már régóta Az irányelv szerint az IT semmilyen Minden nap bebizonyítjuk, hogy létez- kellett volna: az okos emberekhez, akik módon sem szól bele a dologba. Így het olyan kereskedelmi kapcsolat, ame- elkezdték használni a Linuxot, hogy a linuxos eszközök és a többi szabad lyik szabad programot eredményez.” vállalataikat okossá tegyék – függet- program terjedése természetesen és Ez a kereskedelmi kapcsolat még mindig lenül attól, hogy ezek a vállalatok mivel egységesen fog megtörténni. nem az, ami a legjobb forgalmazóknál kereskednek. Mielõtt ezt az irányelvet létrehozták és a vevõk bürokráciájában megtalál- volna, még a GNU Emacs programnak ható. A nagy vevõknél mindez mindkét Linux Journal 2003. július, 111. szám is át kellett esnie a hivatalos IT-felülvizs- oldalon középszinten megy végbe. gálati, illetve -engedélyezési eljáráson. A MySQL vevõi listája lenyûgözõ, köz- Még akkor is, ha a fõnököd akarta, az IT tük van a Nokia, a Yahoo, a NASA, a Doc Searls ([email protected]) harcolhatott ellene, ha kedve volt. Az új Silicon Graphics és a Cisco. Jeremy A Linux Journal szerkesztõje irányelvvel azonban mindez már csak Zawody, aki magát „Yahoo-technikus- és a Cluetrain Manifesto történelem.” nak” nevezi, a Yahoo gazdasági osztá- társszerzõje. A szervezetben az irányelv elkerülhetet- lyán dolgozik. A következõket mondja: lenül alkalmazkodik a fejlesztési életcik- „A MySQL ahhoz hasonlóan fog beszi-

18 Linuxvilág Töprengõ

A kisegítõ lehetõségek szempontjából nézve Hogyan állja meg a helyét a Linux a fogyatékkal élõ felhasználók támogatása terén?

z angol accessibility kifejezés egyszerûen azért, mert az amerikai számára elérhetõk. Lehetséges, hogy ez a fogyatékkal élõket és a csök- kormány az egyik legjelentõsebb vevõ az igény bizonyos területeken akadályt kent képességûeket támogató, az informatikai piacon – jelenleg mint- jelent majd. Többnyire azonban nagyon Aaz általuk is használható megoldásokra egy negyvenmilliárd dollárt költ évente kevéssé zavaró, egész egyszerûen azért, vonatkozik, ezeket magyarul talán a erre a célra, és ez a szám a várakozások mert a Linux foglalatokat (sockets) „kisegítõ lehetõségek”-nek nevezhet- szerint mindössze öt év alatt ötven szá- használ. A munka javát nyilvánvalóan nénk. A kérdés most az, hogy mennyire zalékkal nõhet. Hozzátéve ehhez azt a erre szakosodott fejlesztõk fogják elvé- használható a Linux a fogyatékkal élõk megbecsülést, amit a linuxos szakembe- gezni, mivel a jól mûködõ megoldások

és a csökkent képességûek számára? rek a közösségi értékek iránt mutatnak, elkészítéséhez sok különleges ismeret © Kiskapu Kft. Minden jog fenntartva A válasz ma még nagymértékben attól szorongató érzés arra gondolni, hogyha szükséges. De amit meg akarnak függ, hogy milyen fogyatékról van szó. csak hajszál híján is, de a Linux esetleg valósítani, az nem különbözik attól, A kisegítõ lehetõségekkel kapcsolatos mégsem felel meg a társadalmi elvárá- amit mindannyian akarunk – és vissza kihívások megoldását célzó egyre egysé- sok e mércéjének. is érkeztünk a közösségi szellemhez. gesebb törekvések mögött talán maga Az utóbbi évek során számos fejlesztõ a linuxos szellemiség a legfontosabb dolgozott – elsõsorban a Sun Microsys- Linux Journal 2003. augusztus, 112. szám hajtóerõ. A nyílt forrású és szabad prog- tems, de az IBM, a Red Hat és a Ximian ramok világának alapját olyan közösségi támogatásával is felvértezve – az új Janina Sajka értékek alkotják, amelyek senki kizárását Gnome 2.0-s környezet kisegítõ keret- Az Amerikai Alapítvány A Vakokért nem engedik meg. Mindenkinek joga szolgáltatásainak módszeres kidolgozá- (American Foundation for the Blind, AFB) van használni a programot, mindenki sán. Õszintén szólva nehéz elképzelni, mûszaki kutatási és fejlesztési igazgatója. megnézheti és módosíthatja a kódot hogy ez az 508. cikkely nélkül is meg- – miért maradna ki valaki csak azért, történt volna-e, de ezeknek az erõfeszí- mert nem tud képernyõrõl szöveget téseknek a haszna messze túlterjed az olvasni, vagy nem tudja egy idõben Egyesült Államok határain. A Gnome lenyomni az ALT és az F1 gombot? kisegítõ szolgáltatásainak honlapja A Linux tényleg példamutató eredmé- ( http://developer.gnome.org/projects/ nyeket mutat föl a kisegítõ lehetõségek gap) jelenleg talán a legjobb forrás arról, terén. Többnyire azonban a kisegítõ le- hogy mit is jelent és hogyan valósítha- hetõségek támogatása sajnos csak esetle- tók meg a kiegészítõ lehetõségek a ges – ez egyrészt annak a ténynek a Linux esetében. mellékterméke, hogy a Linux gyökerei Az egész kérdéskör ugyanakkor be- és mélyen az ASCII-kód világába ágyazód- kiviteli kérdésként is összegezhetõ. nak, másrészt annak, hogy a Linux kima- A gondok – bármilyen sokfélék és ösz- gaslóan jól képes szinte bármilyen esz- szetettek számtalan megjelenési formá- közrõl bemenetet olvasni. Nem mintha a jukban – alapvetõen egyszerûek. fejlesztõk szándékosan hagynák ki a kise- Bármilyen beviteli módról legyen is szó, gítõ lehetõségek támogatását – egysze- amin keresztül egy számítógép adatokat rûen csak ezt a szempontot mindeddig fogadhat a felhasználóktól, akadnak nem alkalmazták a kódellenõrzés során. olyanok, akik képtelenek használni õket. Egy másik hatóerõ a szóban forgó prog- Ugyanígy minden emberi fogyasztásra ramoknak elsõbbséget biztosító törvé- szánt kiviteli módhoz találhatók olyan nyek és irányelvek megjelenése. Ezek felhasználók, akik az adott közvetítõ közül a legjelentõsebb az amerikai kor- eszközön keresztül nem képesek befo- mány beszerzési gyakorlatát szabályozó gadni a kimenetet. A kérdés, hogy 508. bekezdés néven ismert jogszabály. miként lehet ezt az alapvetõen bináris E nemrég szigorított rendelkezés szerint elven mûködõ gépet rávenni arra, hogy az amerikai kormány köteles kisegítõ igény szerint bármilyen eszközrõl beme- „elektronikus és informatikai megoldá- netet fogadjon, és miként alakítható a sokat” alkalmazni a munkahelyeken kimenet megjelenési módja úgy, hogy és a nyilvánosan elérhetõ elektronikus a lehetõ legszélesebb felhasználói kör tájékoztatási rendszerekben, amennyi- számára értelmezhetõ legyen. ben ilyen technológia rendelkezésre áll. Az erkölcsi kötelesség nyilvánvaló. Az 508. cikkely hatására megnõtt az A közösségi programok csak akkor érdeklõdés a kisegítõ megoldások iránt, lehetnek valóban közösek, ha mindenki

www.linuxvilag.hu 2003. szeptember 19 Vezérfonal

A hihetetlen Hulk erejétõl az ILM Halálcsillagáig A július elejétõl a magyar mozikban is bemutatott Hulk címû film szintén az ILM linuxos leképezõtelepén készült.

Linux Journalban (és a Linuxvilág 2002. augusztusi számának 32. oldalán) megjelent történet – amelynek témája az Industrial Light & Magic (ILM) Linuxra valóA átállása volt asztali gépeiken és leképezõtelepükön – rekordmennyiségû olvasói visszajelzést váltott ki. A Csillagok háborújának Halálcsillaga mégis létezik! Bár nem mint fenyegetõ, bolygókat megsemmisítõ fegyver, hanem mint

© Kiskapu Kft. Minden jog fenntartva az a leképezõtelep, ami az Industrial Light & Magic mûhelyében készülõ számos mozifilm hátterében húzódó számítási teljesítményt adja. „A Linux folytatja töretlen fejlõdését” – állítja Cliff Plumer, az ILM mûszaki igazgatója. „Leképezõtelepünk jelenleg több mint 1500 processzorral bír, és az asztali gépek révén minden este csaknem 1000 továbbival gyarapszik.” A leképezõtelep mind a kizárólag erre a célra használt processzorokat, mind pedig az üresjáratban dolgozó asztali gépek teljesítményét. kiaknázza

A Halálcsillag leképezõtelep 1. kép Az ILM RackSaver linuxos leképezõtelepe jelenleg 1500 processzorral bír, és a Star Wars Episode III elkészítéséhez ez a szám „Leképezõtelepünk szinte teljes egészében linuxos gépekbõl a kétszeresére fog emelkedni áll, amióta csak SGI gépeinket lecseréltük” – tájékoztat Mike Thompson rendszertervezõ. „A telep körülbelül 750 csomó- pontból, azaz 1500 processzorból áll.” A leképezõtelep 1U lékké összesíti. „Nemrégiben bõvítettük ki a hálózati központot kétprocesszoros, keretszerelésû sorba kötött számítógépekbõl egy 10 gigabites összeköttetéssel, ami nagyon sokat segített áll. Hagyományos értelemben véve ez nem egy szuperszámí- – meséli Thompson. Egy fájlkiszolgáló-maggal és 2500 leké- tógép – mindegyik félig függetlenül, hálórendszerbe kötve pezõközponttal rendelkezünk, ez napi mintegy 70 TB össze- mûködik, nincs meg az egyetlen munkafolyamat futtatásának sített forgalmat jelent.” kötöttsége, mint egy szuperszámítógép esetén. Itt az ILM-nél egy saját, parancsfájl-ütemezõ program, az ObaQ vezérli az Mitõl rettenetes a zöld szín? egyes gépekre jutó munkát. „A Hulk nem egy szokványos képregény-mozi” – világosít fel Ahogy a rendszerek nyers teljesítménye növekszik, egyre Doug Sutton mûszaki igazgató. „Évek óta ez jelentette az egyik nagyobb az ILM géptermének elektromosság- és hûtésigénye. legnagyobb kihívást a munkáink közül. Egy 15 láb magas fickót „Fontos, hogy csökkentsük a fogyasztást és a hõmérsékletet élethûen megalkotni – ez igazi erõpróbát jelent.” A Hulk egy – világít rá Thompson. Mi AMD Athlon 1600-as processzorok számítógéppel elõállított digitális színész, bonyolult mellett döntöttünk, olyan alacsony fogyasztású változat érzelmekkel és zöld színû bõrrel. mellett, amit nem könnyû beszerezni.” Mindegyik csomópont „A filmeket úgy gyártják, hogy az emberek ne nézzenek ki 2 GB memóriával rendelkezik, ami 4 GB-ra bõvíthetõ, és a cso- zöldnek, vagyis a zöld színt eltolják – magyarázza Rod Bogart, mópontok a két processzor kihasználása végett egyszerre két a vezetõ programmérnök. „Mi Kodak Premiere nyomtató- munkafolyamatot futtatnak, de ez néha egy folyamatra készletet használunk, ennek mélyebbek a színei, mint a Kodak csökken, amikor a teljes memóriát ki szeretnénk aknázni. Visionnek. Ha a szereplõ zöld, ahogy Hulk is, elég nehéz olyan Az AMD-vel felszerelt csomópontok a RackSaver cég RS-1100-s látványt létrehozni, ahol a bõr színe tényleg zöldnek hat. egységei. A RackSaver a National Association of Broadcasters A Jurassic Park zöld dinoszauruszai könnyebb feladatot jelen- (NAB, azaz Mûsorszóró Társaságok Nemzeti Egyesülete) kong- tenek. A dinoszauruszoknak nincsenek olyasfajta fényfoltjaik resszusán keltette fel az ILM figyelmét, és kapta meg azt a a bõrükön, mint az embereknek.” A nézõk kevésbé megbocsá- lehetõséget, hogy ajánlatot tegyen a leképezõtelep megépí- tóak az emberi arccal kapcsolatban – fõleg ha az még zöld is. tésére. A RackSaver legnagyobb ellenfele a nehézsúlyú IBM „A zöld a fehérhez közelítve sárgás árnyalatot vesz fel – teszi és a Dell. A cég elõnye David Diggers vezérigazgató szerint hozzá Sutton. Muszáj egy megjelenítõn is ellenõrizni, mielõtt abban áll, hogy a versenytársakéhoz képest kétszeres sûrûségû az ember elfogadná vagy elvetné”. kiszolgálókat képesek gyártani. „A piacnak ebben a szeletében Az élõ jeleneteket San Francisco utcáin rögzítették. Jennifer az ILM, Pixar és Warner Brothers stúdiókkal kötött üzleteink Conelly egy utca közepén áll, és egy nagy zöld fickónak játszik, révén nagyon erõsek vagyunk” – büszkélkedik David. aki nincs is ott. Egyetlen segédeszköze egy pózna, a tetején egy A RackSaver telep kiszolgálói 100BASE-TX csatolókon keresztül zöld fejjel. „Készítettek néhány igazán jó valós hatást, robbanást, csatlakoznak egy Foundry 8000 hálózati kapcsolóhoz, amely de fõleg számítógépes grafikáról van szó – magyarázza Sutton –, ezeket a kapcsolatokat egy gigabites központi hálózati köte- a Maya és a Softimage keverékérõl”.

20 Linuxvilág Vezérfonal

A Cineon és az OpenEXR Valójában létezik egy kihasználatlan Piz12 veszteséges tömö- Egy film képeinek a rögzítése nagyobb dinamikatartományt rítési lehetõség is. A PNG-vel és JPEG-gel ellentétben az igényel, mint amit a JPEG vagy a PNG támogat. A Kodak OpenEXR hullámkódolást használ, ami lényegében egy olyan Cineon hosszú ideje a digitalizált film szabványos formátuma. faszerkezet, ami a képpontok közti elõjeles különbségeket A Cineon 10 bites logaritmikus formátum szemben a JPEG-gel, tárolja. Mivel a számok nagyságrendje kisebb és kevesebb ami 8 bites lineáris (azaz 24 bites RGB), így a Cineon nagyobb egyedi érték fordul elõ, a Huffman-kódolás nagyobb haté- dinamikával és – különösen a fekete közelében – gazdagabb konysággal tudja összetömöríteni az adatokat. Az EXR támo- színkészlettel rendelkezik. Ahogy növekedett a számítási telje- gatja a 32 bites lebegõpontos, a 32 bites egész és 16 bites lebe- sítmény, és a legtöbb számítás a lebegõpontos ábrázolásra gõpontos ábrázolást, tetszõleges számú csatorna esetén. Az egyes csatornák különbözõ színmélységgel rendelkez- hetnek, például az RGBAZ képek esetén nagyobb Z-mélységre van szükség – a jellemzõ érték a 16-16-16-16-32. A Z-csatorna fizikai mélységet jelöl, nem pedig egy szín- vagy alfamaszkot, képzeljük el inkább úgy, mint valami szonárt. 2003 januárjában az ILM kibocsátotta a nyílt forrású OpenEXR-t. Az elsõ olyan nyílt forrású program, ami támogatta ezt a formátumot, a CinePaint volt. © Kiskapu Kft. Minden jog fenntartva A CinePaint A CinePaint, amit a közelmúltig FilmGimp néven emlegettek, egy képenként haladó mozgófilm-retusáló rendszer, ami 1998-ban vált ki a Gimpbõl. Számomra is váratlan módon lettem a CinePaint-projekt vezetõje, miután a Linux Journal számára írtam néhány cikket a FilmGimprõl. A megszokott állókép-formátumokon túl a CinePaint támogatja a filmgyár- 2. kép Az ILM saját ObaQ ütemezõje éppen egy Linux-parancsfájllal tásban elterjedten használt fájlformátumokat is. Ezek között vezérelt leképezést futtat a Hulk címû film készítése során található a Cineon, az RnH 16 bites lebegõpontos formátum (a Rhythm & Hues által létrehozott formátum, ami a 32 bit felének a levágásával jött létre), a Radiance HDR, a LogLuv Tiff és most már az Open EXR. A CinePaint OpenEXR bõvít- ménye az ILM munkája.

Az SDev, a LUT és a rácsvonalak „Soha nem akarunk egy képet a megfelelõ SDev nélkül megnézni” – jelenti ki Sutton. Nagyon fontos, hogy azt lássuk, amit a folyamat végén eredményként kapunk. Az SDev egy szimulációs eszköz, amivel a monitort a filmhez hasonlatossá tudjuk tenni. Az OpenEXR-re való áttérés óta nem használunk LUT-okat többé, de SDev-eket igen.” A LUT egy keresési tábla, amelyet egy kép gammájának a kijavításához használtunk korábban. A monitorok fényereje nem arányos a bemeneti feszültséggel, inkább a bemeneti feszültség valamelyik hatványával. Ezt a kitevõt nevezzük gammának, amelynek az 3. kép Michael Thompson az ILM-tõl a értéke a kijelzõtõl függ. A gépek jellemzõ értéke 1,8, 20 terabájtos EMC fájlkiszolgálóval ami a PC-k esetén 2,2 körüli. „A LUT-ok mûködésének elve leginkább a kontraszt változ- váltott át, a 10 bites logaritmikus formátumban való munka tatására épül – magyarázza Bogart. A LUT ellenben nem képes vált korlátozó tényezõvé. Az OpenEXR egy új, lebegõpontos a színtelítettség növelésére vagy csökkentésére.” A LUT helyett képformátum. az ILM-nél egy összetettebb rácsvonalas számítási módot „Az OpenEXR formátum egy film jobb digitális ábrázolását alkalmaznak. A rácsot 13×13×13 méretû térbeli kockáknak biztosítja, mivel több mint 30 f-egység dinamikatartománnyal kell elképzelnünk – tulajdonképpen háromdimenziós indexelt rendelkezik, anélkül, hogy veszítene a pontosságából – fejti ki tömbrõl van szó. Egy páratlan számot használnak, a középpont a véleményét Plumer. A korábbi 8 bites fájlformátumok csak szürke. A rácsvonalas ábrázolásban minden RGB érték leképe- körülbelül 7–10 f-egységgel rendelkeztek, és különösen nagy zésre kerül, szemben a LUT-tal, ami csatornánkénti leképezést kontrasztú képeket már nem voltak képesek megfelelõ módon végez. Három egymástól független keresési tábla alkalmazása megjeleníteni.” nem megfelelõ egy film látványának visszaadásához – külö- Az ILM 2000 nyarán alkotta meg az EXR formátumot, és olyan nösen telített zöld szín esetén nem. A rács egy 64 K bejegyzést filmek elkészítése során használta, mint a Harry Potter és tartalmazó számított tábla segítségével állítja be a 12 pontos a bölcsek köve, a Men in Black II, a New York bandái, a Jelek filmgörbének megfelelõ értéket. Egy 0 és 1 közé esõ rácsindex (Signs), az Álomcsapda, a Hulk, a Van Helsing, a Peter Pan, háromvonalas vagy négyoldalú interpoláció alkalmazásával az Idõvonal és a Karib-tenger kalózai. és az ezt követõ gammakorrekciójával szolgáltatja a három Az Open EXR veszteségmentes tömörítést használ, mint a értéket. A folyamat lassabb, mert minden egyes képpontot PNG, nem pedig a JPEG-hez hasonló veszteséges tömörítést. a többivel együtt kell kezelni, de élethûbb, mint az RGB-

www.linuxvilag.hu 2003. szeptember 21 Vezérfonal

A lebegõpontos számábrázolási formátumok összehasonlítása Formátum Összes Elõjel Kitevõ Mantissza bitek száma IEEE 754 Double 64 1 11 52 IEEE 754 Float 32 1 8 23 nVidia/ILM Half 16 1 5 10 RnH Float16 16 0 8 8

csatornákon alapuló kikeresés. „A rácsos módszer nem csak a Hulk esetén alkalmazható eredményesen” – mutat rá Bogart. A Minority Report esetén egy színtelenítõ folyamat látványát szimuláltuk a rácsmódszerrel. A LUT színtelítetlenség elõidé- zésére sem alkalmas.”

© Kiskapu Kft. Minden jog fenntartva GPU-programozás az nVidia Cg-vel A nyers 16 bites OpenEXR adatformátumot Halfnak (fél) is ne- 4. kép Az ILM-nél készült Hulk weboldala vezik – utalva a 32 bites lebegõpontos ábrázolás megfelezésére. A Half adatformátum az nVidia grafikus kártyák belsõ adatfor- mátuma. Jó lenne, ha a rácsmódszer számításai, amik jelenleg a központi feldolgozó egységet terhelik, közvetlenül a video- kártya processzorán (GPU) futhatnának. Ennek megvalósítása a grafikus kártyák fejlõdésével egyre közelebb kerül. „Már nagyon várjuk, hogy ez lehetõvé váljon” – vallja be Bogart. A képpel kapcsolatos számításokat a GPU képpontárnyaló rendszerére szeretnénk átterhelni.” Az nVidia egy új, C-szerû fordítót, illetve programkönyvtárat kínál, a Cg-t, képpontkó- dok – közkedvelt nevükön „árnyalók” (shaders) – futtatására a GPU-n. Az ATI hasonló technológiát kínál High Level Shading Language (magas szintû árnyaló nyelv) néven, a 3Dlabs pedig az OpenGL Shading Language fejlesztésén dolgozik. A GPU programozása hasonló a beágyazott rendszerek progra- mozásához, ahol a kódot a gazdafelületen fordítjuk, majd ezt töltjük le a beágyazott rendszerre. A GPU-programok futásidõ- ben fordíthatók és tölthetõk át a grafikus kártyára. A fordító- program (compiler) a futásidejû programkönyvtár részét képezi. Néhány 3D-programcsomag, például a Softimage és a Maya 5. kép Az ILM-nél készült Terminátor 3 webolda már kezdi használni a Cg-t a leképezési teljesítmény növelésére. volna megvalósítani.” Az ObaQ elsõ változata jelenetek szerint Modellezés és leképezés különválasztotta a gépeket – ez bizony nem túl hatékony Az Alias/Wavefront Mayát korábban a részek (particles) és erõforrás-kezelés. néhány szereplõmozgási modell kidolgozására használták. „Az ObaQ kiváltására indított IMP projektünk, ami egy köz- A Pixar RenderMan és a Mental Images cég Mental Ray prog- pontosított erõforrás-kezelõ rendszert állított volna az ObaQ ramja végezte a leképezést. A sugárkövetõ leképezõk tükrö- helyére, nem járt sikerrel – mondja Hess. Visszatértünk az zõdõ felületei jobbak, de az elõállításuk hosszabb idõt vesz ObaQ-hoz és ennek Linuxra való átültetéséhez, ami körülbelül igénybe. Hála a gyorsabb és olcsóbb Linux-rendszereknek, két hétig tartott. Három vagy négy hónappal ezelõtt Florian a módszer gyakorlati alkalmazása egyre egyszerûbbé válik. úgy döntött, megoldja, hogy bármelyik jelenet bármelyik gépet Mind a RenderMan, mind pedig a Mental Ray támogatja az használhassa.” Az ObaQ egyenrangú (peer to peer, P2P) üte- árnyaló programozást a képek egyedibbé tételére. A Render- mezõ rendszer. Ennek az az elõnye, hogy egy esetleges kiszol- Man könnyen elsajátítható saját árnyaló nyelvvel rendelkezik. gálóhiba esetén az egész rendszer nem kerül kapcsolat nélküli A Mental Ray a C nyelvet használja, ami több munkát igényel, állapotba. Az ObaQ2 a teljes ütemezés megvalósítására egyet- de hatékonyabb. Hogy melyik programot használjuk, azt len gépet használ – a futtatására tanácsos egy független gépet jelenetenként eldönthetjük, minden jelenet leképezése egy használatba venni. Az ObaQ2 kiszolgáló elvesztése nem jelenti ütemezõ parancsfájl vezérlése szerint történik. az egész géppark leállását. Léteznek más ütemezõ rendszerek is, mint a népszerû zárt forráskódú termék, a Platform LSF, Az ObaQ ütemezõ parancsfájl vagy a nyílt forrású Condor és OpenPBS ütemezõk, de az ILM „Florian Kines – aki az OpenEXR megalkotásának hátterében is az ObaQ használatának a folytatását tervezi. áll – írta az ütemezõ parancsfájlunkat, sok más mellett, amit az Az SGI a folyamatok megfigyelhetõsége céljából hozzáadott SGI Irix óta alkotott – tudatja velünk Hess. Jó hasznát vettük a néhány képességet az Irix-rendszermagjához, ezáltal a pro- nagygépnek és az asztali számítógépeknek. Amikor elkezdtük cesszoridõ és az ideiglenes helyek követhetõvé váltak. a Linuxra való átállást, jobb erõforrás-gazdálkodást szerettünk Ezektõl az értékektõl függ, hogy az ILM gépidejét hogyan

22 Linuxvilág Vezérfonal

adja vissza a központi elszámolás a projektek számára. Az foltjával sietett a segítségünkre a Linux-hiba behatárolásában. ILM azt tapasztalta, hogy a Linux /proc fájlrendszer nem biz- A Linux NFS UDP választásának másik gyötrõ kérdése a for- tosítja maradéktalanul ezeket a statisztikákat, vagy az rend- galomvezérlés hiánya. „Amikor túlterhelési gondok kezdenek kívül sok többletmunkával jár, és az ObaQ-t sem támogatja jelentkezni a fájlkiszolgálónkon, a leképezõtelep szolgálatmeg- változtatások nélkül. tagadási támadást indít a fájlkiszolgálón – kesereg Thompson. Ismét megpróbáljuk a TCP NFS-t egy Linux-ügyfélgépen, A Halálcsillag most, másfél évvel késõbb. Jövõ héten indul a kipróbálása.” rendszermagjának módosítása A TCP körülbelül öt százalékos többletterhelést jelent. „Florian arra kért, hogy foglalkozzam a Linux-rendszermag Az ILM mostani 20 TB-os tárolókapacitását a jövõ évben a néhány kérdésével – meséli Hess. Az egyik dolog, hogy a Linux kétszeresére emeli. „A Csillagok háborúja III. epizódjára leké- nem ad módot a futási szálak (thread) és a folyamatok (process) pezõtelepünket duplájára növeljük – dicsekszik Thompson. megkülönböztetésére. A ps minden szálat külön folyamatként Ezt a RackSavertõl rendelt 3000 új csomóponttal könnyen tüntet fel.” Néhány munkafolyamat, amilyen a Mental Ray is, megtehetjük, de tönkretehetné a fájlkiszolgálónkat.” Thomp- keretenként több szálat is képes futtatni egymással párhuzamo- son azt tervezi, hogy az NFS-kiszolgáló összeomlását egy san. A Linux top vagy ps parancsa minden szálat úgy mutat, fürtözött fájlkiszolgálóval fogja megakadályozni – egy Sistina mintha 1 GB RAM-ot foglalna le, pedig az csak olyan osztott GFS-sel vagy valami hasonlóval; a fájlkiszolgálás így nem memória, ami többszörösen lett figyelembe véve. A Linux arról korlátozódik kizárólag az ILM berendezéseire.

sem képes adatokat szolgáltatni, hogy melyik munkafolyamat © Kiskapu Kft. Minden jog fenntartva nyit ideiglenes fájlokat. Az ObaQ-nak szüksége van ezekre az Napi digitális munkaanyagok (dailies) ismeretekre ahhoz, hogy egy munkafolyamat félbeszakításakor Az ILM a világ minden tájára küldi napi munkaanyagait az ezeket az ideiglenes fájlokat is törölhesse. Hess egy linuxos ILM Conduiton (ILM-csatorna) keresztül, ami egy titkosított magmodult hozott létre, hogy csapdát állítson a nyitott állomá- SSL-protokollt használó, szabadalmazott fájlküldõ rendszer. nyoknak, elágazásoknak, másolatoknak, kijáratoknak és átne- A Blowfish segítségével mindent kétszeresen rejtjeleznek. vezéseknek, abból a célból, hogy lehetõvé váljon a pontos kimu- Az ILM lejátszói futtathatók Windowson, Macintoshon és tatás elkészítése. A rendszermagmodul a munka nagy részét létezik egy webalapú Java kisalkalmazás-változat is, ami elvégzi, de a hurkolt (hooked) hívásoknak minden olyan mun- mindenütt futtatható. „Az MJPEG-A QuickTime a fõ mozgó- kafolyamatot figyelmen kívül kell hagyniuk, amit nem az filmtároló formátumunk – mondja Thompson –, de a Conduit ObaQ futtat. Ehhez a rendszermag módosítására van szükség. bárminek az átvitelére alkalmas, így illesztési adatok (match- „A ptrace zászló (flag) egyik használaton kívüli bitjét használ- move data), digitális képek, napi munkaanyagok is továbbít- tam fel – magyarázza Hess. Minden x86 munkafolyamat rendel- hatók. A felhasználók a napi munkaanyagokat szabályos háló- kezik egy 32 bites ptrace-vektorral. A 2.4.20-astól kezdve 10 bit zati kapcsolataikon keresztül, linuxos gépeiken játszhatják jelzi a ptrace módot, mint amilyen a lépésenkénti végrehajtás. vissza. Ez valóban lenyûgözõ, ehhez korábban SGI beren- Valamikor a múlt év folyamán a Linux vagy a glibc megváltoz- dezésre volt szükség.” A napi munkaanyagok számára az ILM tatta a ptrace zászló mûködését, így az elágazásoknál törlõdik. 20 TB tárterülettel rendelkezik EMC Clarrion FC4700-as töm- Azt tapasztaltam, hogy a rendszermag törli ezeket a biteket, és bökben, amelyek elõterében négyprocesszoros Sun 420R megtartja a 32. bitet.” Hess elmondása szerint a 2.5 rendszer- kiszolgálók állnak 4 GB memóriával és gigabites hálózati magban az OPROFILE tulajdonság továbbfejlesztett elszámolási csatlakozással. (accounting) képességekkel rendelkezik, így esetleg nincs szükség a módosítására. A ptace zászló (flag) használaton Zöld jelzés a Linuxtól kívüli bitjének felhasználása gyors módja annak, hogy a mun- „A Linux használata számunkra annyit jelent, hogy bármilyen kafolyamatokat az ObaQ-feladatokhoz tartozónak tüntessük fel. feladat megoldásához hihetetlen mennyiségû számítási tel- „Ez az egyik nagyszerû dolog a Linuxban – lelkendezik Hess. jesítmény áll a rendelkezésünkre – jelenti ki Sutton. A Hulk- Mivel rendelkezünk a forráskóddal, saját magunk is kieszközöl- ban a haj és bõr megjelenítésére már nem is tudom, hány hetjük ezt a módosítást, ez pedig nagyon gyors megoldás. Nem mintázatréteget használtunk. Félelmetesen összetett jelenetek kell a fejlesztõt egy ilyen egyedi mûszaki megoldás fejlesztésébe megalkotására vagyunk képesek a Linux használatával.” bevonni, mint azt az Irix esetében meg kellett tennünk.” A stúdiók tevékenysége a rendelkezésre álló pénz és idõ függvénye – a gyorsabb és olcsóbb Linux több film elkészíté- Gondok az NFS-sel sét teszi lehetõvé. „Ekkora tûzerõvel, amivel a leképezõtelepünk rendelkezik, bármelyik fájlkiszolgálót hanyatt lehetne dönteni” – vélekedik Köszönetnyilvánítás Thompson. A nukleáris robbanások leképezése a Hulkban elég Köszönet Jimmy Perry-nek ([email protected]), a döcögõs – ez a fõ oka késõbbi bánatunknak. Egy grafikusnak RackSaver, Inc. marketingszervezõjének az elgondolásáért és könnyû felprocesszoroznia a leképezést (vagyis több pro- az írás kidolgozásában nyújtott segítségéért. cesszort hozzárendelnie a feladathoz) egészen addig a pontig, amikor is a fájlkiszolgáló végleg megadja magát. Hétszázszor Linux Journal 2003. augusztus, 112. szám annyi adatot kell elosztanunk, mint korábban.” Az ILM Sun T3-as lemezegységtömböket használ az NFS kiszolgálására. A Linux NFS-ügyfélként való üzembe helyezése Robin Rowe (robin.rowe@ movieeditor.com) számos kérdést vetett fel, amikor másfél évvel ezelõtt mûködni A MovieEditor.com internetes és televíziós video- kezdett. A Linux NFS UDP-csomaghibája miatt (a 2.4.18-as alkalmazásokat készítõ cég egyik partnere. Írásai változattól javítva) a Sun Solaris kiszolgáló néhány órás a Dr. Dobb’s Journalban, a C++ Reportban, a C/C++ mûködés után száz százalékra pörgött fel, és használhatatlanná Users Journalban, a Data Based Advisorban jelentek vált. A Sun saját Solaris rendszermagmoduljával és IP-verem- meg, és számos tanácskozás anyagában megtalálhatók.

www.linuxvilag.hu 2003. szeptember 23 Vezérfonal

Kilenc SSH-trükk

Titkosítsuk minden kapcsolatunkat SSH segítségével!

z SSH az rsh és az rlogin távoli bejelentkezésre Host távoligép A használható, de nem titkosított programok utódja. ForwardX11 yes Az rsh és az rlogin, akárcsak a telnet, régi szár- User távolifelhasználó mazással büszkélkedhet, mostanra azonban túlhaladottá és biztonsági szempontból elégtelenné vált. Ugyanakkor e prog- Host * ramok meglepõen nagyszámú, igen hasznos szolgáltatást ForwardX11 no gyûjtöttek össze a Unix-fejlesztések két évtizede alatt, így a legjobbak közülük az SSH-ba is bekerültek. Következzék az Mostantól csak a távoli gépet kell begépelnünk, ha a

© Kiskapu Kft. Minden jog fenntartva a 9 trükk, amit a leghasznosabbnak találtam. Hozzuk ki a ForwardX11 képesség bekapcsolásával távoli felhasználóként legtöbbet az SSH programból! Ez a cikk is az OpenSSH-n akarunk bejelentkezni. Minden más esetben a ForwardX11 alapul, ezért ha esetleg valamilyen más változatot használnak, legyen kikapcsolva, ahogy azt fentebb ajánlottuk. A csillag a trükkök kipróbálása elõtt ellenõrizze a leírást. minden gépnévvel egyezõnek tekintendõ, még azokkal a nevekkel is, amelyeket korábban a Host szakaszokban felso- X11-átirányítás roltunk, de mindig csak az elsõ találat utasítását használja a Az SSH-n keresztül X-es kapcsolatainkat titkosíthatjuk. rendszer. Az egyedi Host szakaszokat ezért beállításfájlunkban Ráadásul nemcsak a forgalom lesz titkosított, hanem a távoli az általános Host szakasz elé tegyük. gép DISPLAY környezeti változója is a megfelelõ értéket Az SSH rendszerbeállításfájllal is rendelkezik, amelynek neve veszi fel. Ha tehát a helyi gépünkön X-et futtatunk, távoli /etc/ssh/ssh_config. Az SSH a következõ sorrendben gyûjti a X-alkalmazásaink varázslatos módon a mi képernyõnkön beállításadatokat: parancssori kapcsolók, felhasználói beállítás- jelennek majd meg. fájl, végül rendszer-beállításfájl. Az összes kapcsolót megtalál- Az X11-átirányítást az ssh -X gépnév paranccsal kapcsolhat- hatjuk a man ssh_config szövegében. juk be. Az X11-átirányítást csak olyan gépekrõl használjuk, amelyeknek a rendszergazdájában megbízunk, ellenkezõ eset- Gyorsítsunk: tömörítés és kódolások ben az X11 alapú támadásokkal szemben sebezhetõkké válunk. Az SSH bármelyik kapcsolaton képes használni a gzip Egy, az X11-átirányításon alapuló ügyes trükkel képeket jelenít- tömörítést. Az alapértelmezett tömörítés körülbelül 4×-es hetünk meg az xterm ablakokban. Futtassuk a beépített kép- szövegtömörítésnek felel meg. A tömörítés különösen jól nézõvel ellátott w3m böngészõt a távoli gépen, figyeljük meg a jöhet, ha például X-alkalmazást szeretnénk modemes vagy w3m-img Debian csomagot vagy a w3m-imgdisplay RPM-et. lassú hálózati kapcsolaton átirányítani. A tömörítést az Ezek az X11-átirányítás segítségével xterm ablakunk felett egy ssh -C kapcsolóval vagy a Compression yes beállításfájlba keret nélküli ablakot nyitnak. Ha levelünket szöveges ügyfél illesztésével kapcsolhatjuk be. segítségével, távolról olvassuk SSH-n keresztül, ezzel a mód- Egy másik sebességgyorsító módosítás lehet titkosító kódolá- szerrel ugyanabban az xterm ablakban megnézhetjük a benne sunk megváltoztatása. Számos régi rendszer alapértelmezett rejlõ képességeket. kódolása a háromszoros DES (3DES), amely lassabb a Blowfish vagy AES kódolásnál. Az OpenSSH új változatai alapértelme- Beállításfájl zés szerint a Blowfisht használják. A kódolást az ssh -c Az SSH a ~/.ssh/config helyen keresi a felhasználói beállítás- blowfish kapcsolóval állíthatjuk át. fájlt. Ez például a következõképpen nézhet ki: Beállításfájlunkban attól függõen kell beállítanunk a kódo- lást, hogy SSH1 vagy SSH2 alapú rendszert használunk-e. ForwardX11 yes Az SSH1 esetében a Cipher blowfish, míg SSH2 alatt a Protocol 2,1 Ciphers blowfish-cbc,aes128-cbc,3des-cbc, cast128-cbc,arcfour,aes192-cbc,aes256-cbc A ForwardX11 yes ugyanazt jelenti, mintha a -X kapcsolót alakot használjuk. adtuk volna meg a parancssorban. A Protocol sor adja meg az SSH-nak, hogy elõbb az SSH2 rendszert használja, és ha Kapuátirányítás nem megy, csak akkor lépjen vissza a SSH1-hez. Amennyiben A kapuk a kiszolgáló különféle szolgáltatásait jelképezõ kizárólag SSH2-t használunk, töröljük a ,1 részt. számok; például a 80-as kapu a HTTP-szolgáltatásnak, A beállításfájlunkban a Host utasítás alkalmazásával szaka- míg a 110-es kapu a POP3-nak felel meg. A szabványos szokat is kialakíthatunk, amelyek csak bizonyos távoli gépek- kapuszámokhoz tartozó szolgáltatások listáját a /etc/services hez való kapcsolódás során lépnek életbe. Hasznos beállításfájl- állományban találjuk. Az SSH gépünk bármelyik kapujáról utasítás a User, amely a távoli gépen adja meg felhasználó- képes adatokat átküldeni egy SSH-t futtató távoli gépre, nevünket. Ha ssh -l távolifelhasználó távoligép s a forgalmat aztán a távoli kiszolgáló a másik gép tetszõ- vagy ssh távolifelhasználó@távoligép alakban gyak- leges kapujára irányíthatja. De miért akarnánk mi ilyesmit? ran jelentkezünk be valamelyik gépre, érdemes a beállítás- Két okból: a titkosítás kedvéért és a csövezett fájlunkba illeszteni a következõ sorokat: (tunelling) kapcsolatért.

24 Linuxvilág Vezérfonal

Titkosítás helyére egy kötõjelet írtunk), amit aztán átcsövezünk a desktop Egy csomó alkalmazás használ olyan protokollt, amelyben nevû gépre, és átirányítjuk egy fájlba. a jelszavak és az adatok egyszerû szövegként utaznak a hálózaton. Ilyen a POP3, IMAP, SMTP és az NNTP. Az SSH Távoli héjparancsok futtatása átlátszó módon képes õket titkosítani. Tegyük fel, hogy a Az SSH segítségével nem feltétlenül kell felhasználói beavat- levelezõprogramunk normál esetben a mail.example.net kozással (interactive) héjprogramot nyitnunk, ha mindössze POP3-kapujára szokott kapcsolódni (110-es kapu). Továbbá csak a távoli program kimenetére vagyunk kíváncsiak. Például tegyük fel, hogy a mail.example.net gépre ugyan az SSH-val a következõt is megtehetjük: nem tudunk közvetlenül belépni, viszont van azonosítónk a shell.example.net-en. Ilyenkor megmondhatjuk az SSH-nak, ssh felhasználó@gép w hogy titkosítsa a saját gépünk 9110-es kapuját (a számot tetszõlegesen választhatjuk meg), és a shell.example.net A fenti parancs felhasználóként lefuttatja a w parancsot a gép SSH-kiszolgálóját felhasználva küldje a mail.example.net nevû gépen, majd megjeleníti az eredményt. Használhatjuk 110-es kapujára: a parancsok önmûködõvé tételére is: ssh -L 9110:mail.example.net: perl -e ´foreach $i (1 .. 12) \ 110 shell.example.net {print `ssh server$i "w"`}´ © Kiskapu Kft. Minden jog fenntartva Azaz a helyi 9110-es kaput továbbítsd a mail.example.net 110-es Ügyeljünk az SSH-parancs körüli fordított egyszeres idézõ- kapujára a shell.example.net-re nyitott SSH-kapcsolaton keresztül. jelekre (aposztróf). A fenti sor Perl segítségével 12 alkalommal Ezután nincs más dolgunk, mint a levelezõprogramunknak hívja meg az SSH-t, mindannyiszor más-más távoli gépen fut- megadni, hogy a helyi gépünk 9110-es kapujához kapcsolód- tatva le a w parancsot, kezdve a server1-tõl egészen a server12-ig. jon. Itt az adat titkosítódik, az SSH-kapun keresztül átkerül De minden egyes SSH-kapcsolat létrejöttekor be kell majd gé- a shell.example.net-re, ahol visszakódolódik, végül a pelnünk a jelszavunkat. Ha viszont továbbolvasunk egy kicsit, mail.example.net 110-es kapujára továbbítódik. Hasznos mel- megtudhatjuk, hogyan kerülhetjük el a biztonság feláldozása lékhatásként a mail.example.net POP3-démonja azt fogja nélkül a jelszógépelést. (Ugyanezt sokkal egyszerûbben és hinni, hogy minden forgalmat a shell.example.net-tõl kap. erõforrás-takarékosabban az alábbi héjprogaramocska is tudja:

Csövezett kapcsolatok for i in `seq 1 12` ; do ssh server$i "w"; done Az SSH képes a tûzfalon átívelõ hídként mûködni – védje az a tûzfal akár a saját gépünket, akár a távoli gépet, netalán – Mészáros Gergely, a fordító. mindkettõt. Az egyetlen dolog, amire szükségünk van, egy ismert SSH-kiszolgáló a tûzfal másik oldalán. Például igen sok Utazzunk SSH Java Applettel DSL és kábelmodemes cég tiltja a levelek küldését saját gépünk Seregnyi ember szaladgál lemezen magával hordozva a 25-ös (SMTP) kapuján keresztül. PuTTY-ot vagy valamilyen hasonló windowsos SSH-progra- Következõ példánkban kábelmodemes kapcsolatunkon keresz- mot, hátha utazásai során nem biztonságos gépet kell használ- tül levelet küldünk cégünk SMTP-kiszolgálójáról. A példában nia. Ez a módszer azonban csak akkor mûködik, ha lemezrõl felhasználtuk a mail.example.net nevû SMTP-kiszolgálón meg- lehet futtatni a programokat. Igaz, a PuTTY programot a lévõ azonosítónkat. Az SSH-parancs a következõ lesz: honlapjáról is letölthetjük és elindíthatjuk. Egy másik lehetséges megoldás, ha az elõzõleg valamely ssh -L 9025:mail.example.net: honlapra felrakott SSH Java appletet böngészõbõl használjuk. 25 mail.example.net Például kitûnõ Java SSH-ügyfél a Mindterm, ennek nem üzleti célú felhasználása ingyenes. A programot a Ezt követõen levélküldõ programunknak mondjuk meg, hogy a  http://www.appgate.com/mindterm oldalon találjuk meg. helyi gép 9025-ös kapuját használja levélküldésre. Ez a gyakorlat igen hasonlónak tûnik az elõzõhöz, csak most a mail.example.net Összegzés 25-ös kapujára a mail.example.net-en keresztül a helyi 9025-ös Az SSH beállítása a trükkök alkalmazása során néhány helyen kapuról nyitottunk csatornát. A tûzfal szemszögébõl mindössze könnyen félresiklik. Számos hibát felderíthetünk az ssh -v szabályos SSH-adatok utaznak a szabványos SSH-kapun (22) kapcsolóval és a kimenet figyelésével. Kétségtelen, hogy a keresztül, köztünk és a mail.example.net között. trükkök egyike sem nélkülözhetetlen az SSH használatához, viszont könnyen kerülhetünk olyan helyzetbe, amikor örülünk, Bináris adatok csövezése távoli héjprogramba hogy mégis ismerjük õket. Nem árthat meg, ha kipróbálunk Az SSH-n keresztül használt csövezés távoli héjprogramokba közülük néhányat! teljesen átlátszó módon mûködik. Figyeljük meg a következõket: Linux Journal 2003. augusztus, 112. szám cat myfile | ssh user@desktop lpr tar -cf – source_dir | ssh user@desktop Daniel R. Allen ([email protected]) ´cat > dest.tar´ 1995 óta elfogult Linux-rajongó. Egy kitcheneri programtanácsadó cég, a Prescient Code Az elsõ példa a myfile állományt csövezi az a desktop nevû Solutions elnöke Ontario és Ithaca, területén. gépen futó lpr programba. A második példa egy tarfájlt hoz létre, és a tartalmát a terminálra írja (mivel a tarfájl nevének

www.linuxvilag.hu 2003. szeptember 25 Vezérfonal

VTun

Kapcsoljuk össze otthonunkat és munkahelyünket virtuális magánhálózaton keresztül!

dotcom-korszak boldog, szép napjaiban egy P2P- kell állítani az iptables-t és a routed-et, hogy az otthonról A programot fejlesztõ, induló cég legelsõ alkalmazottja érkezõ vonatok szabadon elérhessék a munkahelyi rendszert, voltam. Mivel az intranetet és a fejlesztõkörnyezetet mintha csak egy munkahelyi géprõl érkeztek volna. az alapjaitól kellett felépítenünk, mindenhol használhattuk a Linuxot. Mint tudjuk, a világ megváltozott, a dotcomok a dodó Szabályok és kikötések madár sorsára jutottak. Induló vállalkozásom is így járt, felvá- Most, hogy áttekintettük a VTun VPN-összetevõit, készen sárolta egy nagyobb vállalat, amely Windows-alapon fejlesztett. állunk a teljes megvalósítás vizsgálatára. A leghétköznapibb Bár az új cég elég engedékeny volt, így továbbra is Linuxszal eset, amikor egyetlen távoli munkaállomást (az otthoni gépün-

© Kiskapu Kft. Minden jog fenntartva dolgozhattam, de az ezzel kapcsolatos rendszergazdai fela- ket) kötjük össze a munkahelyi belsõ hálózattal a munkahelyi datok is teljesen rám hárultak. gépünkön keresztül. Az egyszerûség kedvéért feltesszük, hogy Egyetlen terület volt, ahol komoly nehézséggel kellett szem- lehetséges SSH-kapcsolatot létesíteni otthonról a munkahelyi benéznem: a VPN beállítása. A régi munkahelyemen minden géppel, de az a gép egyébként nem érhetõ el az internetrõl. fejlesztõnek volt bemenõ SSH-kapcsolata a saját munkaállo- Tegyük fel, hogy az otthoni hálózat a 192.168.1.0/24 alhálózatra, mására. Az új munkahelyemen nemcsak az SSH-kapukat zár- a munkahelyi hálózat a 192.168.5.0/24 és a 192.168.100.0/24 ták le, de a rendszeresített VPN-megoldás sem volt Linux- alhálózatokra van beállítva. barát. A tehetetlenség törvényébõl fakadóan várható volt, A VTun kiszolgálóalapú rendszer. A kiszolgálógép a megadott hogy a több felületen is mûködõképes megoldások, például kapukon figyeli a bejövõ kapcsolatokat. Az ügyfél kezdemé- a FreeS/WAN, nem fognak egyhamar bevezetésre kerülni. nyezi az alagút létrehozását a kiszolgáló kapujára csatlakozva Szerencsére a VTun, a régi munkahelyemen használt VPN- – ebben a példában az otthoni gép az ügyfél és a munkahelyi megoldás elég rugalmas volt ahhoz, hogy ebben a barát- gép a kiszolgáló. ságtalan környezetben is helytálljon. A VPN létrehozása azt jelenti, hogy a munkahelyi hálózat onnantól fogva csak annyira biztonságos, mint az otthoni Hogyan mûködik? hálózat. Emiatt az otthoni gépeket kötelezõ tûzfallal védeni, A VTun úgy mûködik, hogy az IP-alagutazást észrevétlenül a amire mindig fel kell rakni az összes biztonsági foltot, és meglévõ csomagtovábbító programokon keresztül valósítja behatolásvédelmi szempontból rendszeresen ellenõrizni meg. A unixos moduláris szemléletnek megfelelõen a VTun kell. A másik nagyon fontos szabály, hogy soha ne hozzunk közvetlenül csak a csomagok alagutaztatásáért felel a két rend- létre VPN-t a munkahelyi rendszergazdák tudta és bele- szer között, és a meglévõ hálózati segédeszközöket használja a egyezése nélkül. teljes VPN-megoldás kialakítására. A hasonlat kedvéért képzel- jük el, hogy az otthoni és a munkahelyi hálózat két különálló Telepítés vasúti hálózat. Minden számítógépnek egy állomás felel meg. A VTun programot az ügyfélre és a kiszolgálóra is telepíteni A Linux-rendszermag vezérli a váltókat, így határozza meg, kell, azaz az itt leírt folyamatot mindkét rendszeren végre hogyan érik el a vonatok egyik állomásról a másikat. Ezeket a kell hajtani. A folyamatot a Red Hat Linux újabb változatain lehetõségeket a route programmal befolyásolhatjuk, így a próbálták ki. Ha a telepítés nem sikerül a terjesztéseden, küldj végfelhasználó is adhat hozzá vagy távolíthat el állomásokat. levelet a [email protected] címre. Ezeket a válaszokat A Linux-rendszermag képes a vonatok útvonalát megváltoz- beépítem a  http://www.ryanbreen.com/vtun honlapon tatni. Vasutaspéldánkhoz adjuk hozzá az internetet, a hatalmas fenntartott terjesztésfüggõ hibákat felsoroló állományba. vasúthálózatot. Az otthoni és a munkahelyi hálózatok aprócska Néhány terjesztés eleve tartalmazza a VTun-csomagot, nyúlványok ebben a rendszerben. Általában egyetlen állomás, úgyhogy elképzelhetõ, hogy megtakaríthatunk egy lépést, a tûzfal vagy az átjáró rendelkezik közvetlen hozzáféréssel az ha a csomagkezelõvel telepítjük a VTun programot. internet vasúthálózatához. Ha egy másik állomás az otthoni A legtöbb VPN-megoldáshoz hasonlóan a VTun is igényli a vágányokról vonatot akar küldeni az internetre, elõször az rendszermag támogatását, ebben az esetben a TUN pont–pont átjáróállomásra kell továbbítania. Ezt az útvonal-módosítást, hálózati illesztõprogramot. A TUN modul része az alaprend- ami mûszakilag az IP-álcázásnak vagy a hálózati címfordítás- szermagnak, úgyhogy valószínûleg nem kell rendszermagot nak felel meg, az iptables program vezérli. Az iptables fordítani hozzá. Tegyünk egy próbát az insmod tun parancs- a 2.4-es Linux-rendszermagban lévõ Netfilter tûzfalkód felhasz- csal (rendszergazdaként), amely megkísérli az illesztõprogram nálói térben futó fele. betöltését. Ha a modul nem található, töltsük le a legújabb Hogyan illeszthetõ be a VTun a példába? Emlékezzünk, hogy változatot (jelenleg ez a tun-1.1) a az otthoni és a munkahelyi hálózatok egymástól elszigetelt  http://vtun.sourceforge.net/tun/index.html címrõl. vasúthálózatok. Otthonról általában nem mehet vonat a Telepítsük: munkahelyre, mert a munkahelyi tûzfalállomás nem engedi át. A VTun segítségével virtuális sínpárt építhetünk két elkülönült tar xzf tun-1.1.tar.gz hálózaton lévõ állomás – például egy otthoni és egy munka- cd tun-1.1 helyi gép – között. A sínpár lefektetése után az állomásokon be su -c ´make install´

26 Linuxvilág Vezérfonal

Ha önmûködõen szeretnénk betölteni a TUN modult, amikor egy folyamat megkísérli elérni a virtuális alagúteszközt, akkor 1. lista Egyszerû vtund-client.conf a következõ sort adjuk a /etc/modules.conf állományhoz: options { alias char-major-10-200 tun port 5000;

Ezután állítsuk be és telepítsük a felhasználói térben futó # Különféle programok elérési útja vtund programot. A legújabb VTun-csomag a ifconfig /sbin/ifconfig;  http://vtun.sourceforge.net/download.html oldalról érhetõ } el. Most forrásból telepítünk, de ha a terjesztésünk támogatja az RPM- vagy DEB-csomagokat, akkor nyugodtan telepítsük # Munkamenet alapértékei az elõre lefordított változatot. A legújabb forráscsomag a cikk default { nyomdába adásának pillanatában a vtun-2.5.tar.gz. compress no; # Nincs tömörítés A fordítás a szokásos módon zajlik: encrypt no; # Az SSH úgyis titkosít speed 0; # Legnagyobb sebesség tar xzf vtun-2.5.tar.gz alapértelmezettként cd vtun-2.5 keepalive yes;

./configure stat yes; © Kiskapu Kft. Minden jog fenntartva make } su -c ´make install´

Egyes terjesztéseknél a beállítólépés sikertelen lehet, mert az my_tunnel { LZO nincs telepítve. Az LZO egy tömörítõ programkönyvtár, pass XXXXXXXX; # Jelszó amelyet a VTun használ. type tun; # IP-alagút A  http://www.oberhumer.com/opensource/lzo/download proto tcp; # TCP protokoll weboldalról tölthetõ le. Fordítsuk le és telepítsük az LZO-t, majd próbáljuk újra a VTun telepítését. up { A telepítés során a VTun a beállítóállományát a /usr/local/etc/ # 10.3.0.1 = hamis alagútcsatoló (otthon) vtund.conf helyre teszi. Ez nagyon zavaró lehet, mert az ügyfél- # 10.3.0.2 = hamis alagútcsatoló nek és a kiszolgálónak mást-mást kell beállítani az alagútleíró (munkahelyen) részben. A félreértések elkerülése érdekében a vtund.conf állo- # 192.168.5.0/24 = az 1. munkahelyi mányt nevezzük át vtund-client.conf, illetve vtund-server.conf hálózat névre. Ezt követõen az indításkor kézzel adjuk meg a meg- # 192.168.100.0/24 = a 2. munkahelyi felelõ beállítóállomány elérési útját. A következõkben e javaslat hálózat szerint járunk el. ifconfig "%% 10.3.0.1 pointopoint 10.3.0.2 mtu A VTun beállítóállománya 1450"; A VTun beállítóállománya viszonylag egyszerû (lásd az 1. és a 2. }; listát – az utóbbi megtalálható az 51. CD Magazin/ VTun könyv- down{ tárában). Az állomány három különálló részbõl áll. Az elsõben ifconfig "%% down"; általános beállítások szerepelnek, például a kiszolgáló kapu- }; száma és a segédprogramok elérési útja. A másodikban az alap- } értelmezett munkamenet beállításai vannak, amelyek az alagút hálózati tulajdonságait írják le. Ezeket a tulajdonságokat szük- ség esetén egy adott alagút beállításánál felül lehet bírálni. ják a VTun programot, hogy kapcsolatfelvételkor hozza létre az Van egy alagútbeállító kapcsoló, amely különleges figyelmet alagút csatolóit. A beállítóállományokban a %% minta jelenti az igényel: ez a keepalive. A vállalati rendszergazdák gyakran alagútcsatolót, így több alagutat is létrehozhatunk tetszõleges alacsony tétlenségi idõt engedélyeznek a tûzfalon keresztül sorrendben. Az alagútcsatoló tényleges neve a „tun” elõtagból és a mûködõ kapcsolatok számára. Ha az alagút a megadott egy számjegybõl áll. Az elsõ létrehozott alagút neve tun0. idõnél tovább tétlen, a kapcsolat idõtúllépéssel megszakad. A keepalive engedélyezésével a VTun úgy kerüli meg ezt a VTun VPN létrehozása gondot, hogy rendszeresen csomagokat küld az ügyféltõl a Próbáljuk ki a gyakorlatban a VTun beállításáról tanultakat. kiszolgálóra, így meggyõzi a tûzfalat arról, hogy a kapcsolat él. Az 1. és 2. lista felhasználásával hozzunk létre egy egyszerû A beállítások utolsó csoportja az adott alagút beállításait tartal- alagutat. A listák az  ftp.ssc.com/pub/lj/listings/issue112/ mazza. A beállítóállomány tetszõleges számú ilyen beállítást 6675.tgz címen megtalálhatók, ha nem szeretnénk begépelni tartalmazhat, így több VPN kialakítása is lehetõvé válik az õket. Mentsük a vtund-server.conf állományt a munkahelyi ügyfelek és a kiszolgálók számára. Minden alagútbeállító cso- gép /usr/local/etc könyvtárába, illetve a vtund-client.conf port egy névvel kezdõdik. Én a my_tunnel nevet választottam, állományt az otthoni gép /usr/local/etc könyvtárába. Miután de bármit megadhatunk. Minden alagút jelszóval védhetõ, de a beállítóállományok a helyükre kerültek, mindkét gépen ezzel általában nem foglalkozunk, ha az alagút SSH-n keresztül indítsuk el a VTun-folyamatokat. Rendszergazdaként indítsuk jön létre. Az up és down részek az alagút felépülésekor, illetve el a kiszolgálót a munkahelyi gépen: lebontásakor végrehajtandó parancsokat tartalmazzák. Az 1. és 2. listán látható egyszerû beállítóállományok arra utasít- vtund -f /usr/local/etc/vtund-server.conf -s

www.linuxvilag.hu 2003. szeptember 27 Vezérfonal

A -L kapcsoló hatására az OpenSSH az otthoni gép 5000-es 3. lista Teljes vtund-client.conf kapuját a munkahelyi gép 5000-es kapujára irányítja. Az otthoni gép 5000-es kapujára irányított kapcsolatok options { SSH-n keresztül észrevétlenül átalagutaznak a munkahelyi port 5000; gép 5000-es kapujára. Az elrendezésnek további elõnye az, hogy a VPN-es forgalom titkosítva van. # Különféle programok elérési útja Miután a munkahelyi gépen futó kiszolgáló elérhetõ az ifconfig /sbin/ifconfig; otthoni géprõl, csak az marad hátra, hogy elindítsuk az firewall /sbin/iptables; ügyfelet. Rendszergazdaként az otthoni gépen futtassuk route /sbin/route; a következõ parancsot: } vtund -f /usr/local/etc/vtund-client.conf # Munkamenet alapértékei my_tunnel localhost default { compress no; # Nincs tömörítés A my_tunnel kapcsoló megadja az ügyfélnek és a kiszolgálónak, encrypt no; # Az SSH úgyis titkosít hogy milyen alagutat kell létrehozni. Mindkét rendszer lekéri és speed 0; # Legnagyobb sebesség futtatja a megfelelõ beállítóállományokból a my_tunnel részhez

© Kiskapu Kft. Minden jog fenntartva # alapértelmezettként tartozó up bejegyzésben megadott parancsokat. Az utolsó kap- keepalive yes; csoló, a localhost, megadja a VTun kiszolgáló gépnevét. Ebben stat yes; az esetben a VTun kiszolgáló a localhost, mert az 5000-es } kaput átirányítottuk az otthoni géprõl a munkahelyi gépre. Ha az alagút sikeresen létrejött, akkor mindkét gépen megje- my_tunnel { lenik az ifconfig kimenetében a tun0 csatoló. Az otthoni pass XXXXXXXX; # Jelszó gépnek az IP-címe 10.3.0.1 a tun0-n, a munkahelyi gépnek az type tun; # IP-alagút IP-címe 10.3.0.2. A vonatos példára visszatérve, létrejött egy proto tcp; # TCP protokoll sínpár az otthoni és a munkahelyi gépek között, és most már irányíthatunk rá vonatokat. Bemutatásként hozzunk létre egy up { SSH-kapcsolatot az otthoni géprõl a 10.3.0.2-re. # 10.3.0.1 = hamis alagútcsatoló (otthon) Beüzemelés # 10.3.0.2 = hamis alagútcsatoló Van már egy mûködõ alagutunk otthonról a munkahelyre. (munkahelyen) A következõ lépésben a route és iptables programok # 192.168.5.0/24 = az 1. munkahelyi segítségével be kell állítanunk, hogy az otthonról jövõ csoma- hálózat gok a munkahelyi gépen keresztül álcázódjanak a munkahelyi # 192.168.100.0/24 = a 2. munkahelyi hálózat felé. Szerencsére ez egyszerûen megtehetõ, csak egy hálózat pár sort kell hozzáadni beállítóállományokhoz az ügyfélen és ifconfig a kiszolgálón, és újra kell indítani a vtund folyamatokat. "%% 10.3.0.1 pointopoint 10.3.0.2 mtu A VTun a kapcsolat létrejöttekor végrehajtja a megfelelõ 1450"; route és iptables parancsokat. route "add -net 192.168.5.0 netmask A vonatos példával elmagyarázva ez azt jelenti, hogy az 255.255.255.0 gw 10.3.0.2"; otthoni állomásról minden munkahelyi hálózatra irányuló route "add -net 192.168.100.0 netmask vonatot az újonnan létrehozott VTun-sínpáron keresztül kell 255.255.255.0 gw 10.3.0.2"; küldeni. Kézzel ez így állítható be: }; down{ route add -net 192.168.5.0 netmask ifconfig "%% down"; 255.255.255.0 gw 10.3.0.2 route "del -net 192.168.5.0 netmask route add -net 192.168.100.0 netmask 255.255.255.0 gw 10.3.0.2"; 255.255.255.0 gw 10.3.0. route "del -net 192.168.100.0 netmask 255.255.255.0 gw 10.3.0.2"; A másik megoldás, hogy a 3. listán látható módon adjuk hozzá a }; parancsokat a vtund-client.conf állományhoz. A parancsok hatá- } sára az iptables minden csomagot továbbít a tun csatolóról, és úgy álcázza õket, mintha a munkahelyi géprõl indulnának. Meg- tehetjük azt is, hogy a 4. listán látható parancsokat adjuk hozzá a A -s kapcsoló hatására a vtund kiszolgálóként indul, a kapcso- vtund-server.conf állományhoz, és újraindítjuk a kiszolgálót. latokra az 5000-es kapun vár. A kiszolgáló eléréséhez el kell A route és az iptables beállítása után az egész vállalati tudnunk érni az 5000-es kaput a munkahelyi gépen. Emlékez- belsõ hálózat látszani fog otthonról. Böngészhetjük a belsõ zünk rá, hogy példánkban feltettük, hogy a munkahelyi gép csak webkiszolgálókat, kapcsolódhatunk a forráskód-kiszolgálóhoz, SSH-n keresztül érhetõ el, ezért az SSH kaputovábbító képessé- és megpróbálhatunk grafikus elemeket (például egy xterm-et) gét kell használnunk a munkahelyi gép 5000-es kapujához való exportálni. Ezekre a célokra több mint elegendõ a teljesítmény, alagutazásra. Otthonról adjuk ki a következõ parancsot: és az SSH-alagút biztosítja, hogy a forgalom a kíváncsi szemek elõl rejtve marad. ssh mydesktop.work.com -L 5000:localhost:5000 Ha a kiszolgálót esetleg önmûködõen szeretnénk elindítani,

28 Linuxvilág Vezérfonal

client.conf állomány up részéhez. Ezt az érdeklõdõ olvasó 4. lista Teljes vtund-server.conf gyakorlásképpen elvégezheti. A fenti megoldás tökéletesen mûködik, ha bármelyik munka- options { helyi gép elérhetõ SSH-n keresztül. Sajnos sok munkahelyen port 5000; egyáltalán nem hagynak nyitva egy bejövõ kaput sem. Pon- tosan ez volt a helyzet az új munkahelyemen is, de a # Különféle programok elérési útja rugalmassága átsegített ezen az akadályon is. A megoldás a ifconfig /sbin/ifconfig; szerepek felcserélése: a munkahelyi gép lesz az ügyfél, és az firewall /sbin/iptables; SSH-alagutat a munkahelyrõl kezdeményezzük. route /sbin/route; A megoldás akkor mûködõképes, ha az otthoni gépet a munka- } helyünkrõl el tudjuk érni. A legtöbb széles sávú szolgáltató viszont dinamikus IP-címet oszt. A gond a dinamikus IP-kre # Munkamenet alapértékei kifejlesztett DNS-szolgáltatások egyikével áthidalható, például default { a Dyndns.org által nyújtottal. compress no; # Nincs tömörítés A legnagyobb hátrány a viszonylagos törékenység. Biztonságos encrypt no; # Az SSH úgyis titkosít környezetben az ügyfél nem indul el önmûködõen, mert az speed 0; # Legnagyobb sebesség SSH-kapcsolathoz hitelesítés szükséges. Egy munkahelyi áram-

# alapértelmezettként szünet miatt könnyen kizáródhatunk. Ha kevésbé aggódunk a © Kiskapu Kft. Minden jog fenntartva keepalive yes; biztonság miatt, önmûködõvé tehetjük a bejelentkezést az SSH stat yes; nyilvános kulcsos hitelesítése segítségével, ha nincs a kulcsnak } jelszava, illetve az expect program parancsállományba építésével. Egyik módszert sem javaslom. my_tunnel { Ha a munkahelyi gép szünetmentes tápegységre van kötve, pass XXXXXXXX; # Jelszó akkor ritkán jön elõ ez a gond. Az elmúlt hat hónapban, amióta type tun; # IP-alagút ezt a megoldást használom, csak egyszer tartott olyan hosszú proto tcp; # TCP protokoll ideig az áramszünet, hogy a VPN-em ügyféloldala meghaljon tõle. A megoldás az otthoni hálózat oldalán is megbízható. up { A számítógép napokra is hálózati kapcsolat nélkül maradhat, # 10.3.0.1 = hamis alagútcsatoló (otthon) a VPN újraindul, ahogy elindítjuk a vtun kiszolgálót, hála az # 10.3.0.2 = hamis alagútcsatoló ügyfél okos életbentartó és újrapróbálkozó képességeinek. (munkahelyen) # 192.168.1.0/24 = az otthoni hálózat Összefoglalás ifconfig A VTun képességeinek teljes ismertetése jóval meghaladná e "%% 10.3.0.2 pointopoint 10.3.0.1 mtu cikk kereteit. Az itt bemutatott egyszerû megoldásokon kívül 1450"; a VTun lehetõvé teszi IP-n kívüli protokollok alagutaztatását is route "add -net 192.168.1.0 netmask etherneten, PPP-n vagy SLIP-en keresztül. A VTun saját maga 255.255.255.0 gw 10.3.0.1"; is képes titkosításra, tömörítésre és sávszélesség-formázásra, firewall "-t nat-A POSTROUTING -o %% úgyhogy minden elképzelhetõ összeköttetéshez alkalmazható. -j MASQUERADE"; firewall "-AFORWARD -i %% -j ACCEPT"; Köszönetnyilvánítás }; Nagyon köszönöm Jennifer Edwardsnak és James Manningnak, down{ hogy lektorálták a cikket. ifconfig "%% down"; route "del -net 192.168.1.0 netmask A cikkhez kapcsolódó listák megtalálhatóak 255.255.255.0 gw 10.3.0.1"; az 51. CD Magazin/VTun könyvtárában. }; } Linux Journal 2003. augusztus, 112. szám

Ryan Breen ([email protected]) akkor a használt terjesztéstõl függ a teendõnk. A VTun-forrás- A Duke Egyetemen szerzett számítástechnikai és csomag tartalmaz néhány indítóparancsfájlt a különbözõ közgazdasági diplomát. Bostonban él a barát- terjesztésekhez – olvassuk el a Readme állományt, majd nõjével és a kutyájával. Nagy áteresztõképességû válasszuk ki a legmegfelelõbbet. böngészõszimulációkat épít, elkötelezett KDE- Beállítások haladóknak felhasználó, és néha fejleszt is KDE alá. Észrevehettük, hogy csak egyetlen otthoni gépnek volt hozzá-  férése a munkahelyi intranethez. Az otthoni hálózat más állomásairól induló vonatok nincsenek átirányítva. Ez a meg- KAPCSOLÓDÓ CÍMEK oldás egy hajszálnyival biztonságosabb, mert csökkenti a munkahelyi hálózatot fenyegetõ, az otthoni hálózatról eredõ VTun  http://vtun.sourceforge.net hibákból adódó veszélyeket. Ha az otthoni hálózat más gépei- Ryan VTun lapja  http://www.ryanbreen.com/vtun rõl is el szeretnénk érni a munkahelyi hálózatot, akkor egysze- VTun TUN/TAP meghajtó  http://vttun.sourceforge.net/tun rûen adjuk hozzá a megfelelõ iptables-szabályokat a vtund-

www.linuxvilag.hu 2003. szeptember 29 Szaktekintély

Reiser4: hatékonyan gyorstárazó fák tervezése (2. rész) A Reiser fájlrendszer negyedik változata a nagyobb teljesítmény érdekében jobban ellapítja a faadatszerkezetet, mint a harmadik változat tette. A leírtakból megtudhatjuk, hogyan is fest ez a gyakorlatban.

cikkünk a Reiser fájlrendszer felépítésérõl szóló cikksorozatunk második része. Az elsõ cikkben (Linuxvilág, 2003. március) az alapokat tárgyaltuk: Ca fákat, a csomópontokat és a cikkelyeket. Ebbõl a cikkbõl azt tudhatod meg, hogy miért jobbak a kiegyensúlyozott fák a

© Kiskapu Kft. Minden jog fenntartva kiegyensúlyozatlan fáknál, és miért jobbak a B+ fák a B- fáknál, miközben a gyorstárazási alapelveket is megismered. Ezt követõen arra is fény derül, hogyan alkalmazza ezeket az említett elemeket a Reiser fájlrendszer az adatbázis-rendsze- reknél már megismert BLOB-ok, vagyis nagyméretû bináris egységek esetében. Mindez azt sugallja, hogy a BLOB-ok 1. ábra Három darab négyszintû kiegyensúlyozott fa csökkentik a belsõ csomópontok gyorstárazásának a haté- konyságát, mivel a fa így kiegyensúlyozatlanná válik. Azt is megtudjuk, hogyan tárol a Reiser fájlrendszer olyan szerke- zeteket, amelyek nagyobb méretûek egy csomópontnál, téve ezt anélkül, hogy a fa kiegyensúlyozatlanná válna. Elnézést az olvasóktól, hogy mindenkit ennyire megvárattam ezzel a cikkel – a késedelem oka a Halloweenkor esedékes 2.6 miatti bõvítésbefagyasztás volt, mivel akkortájt kellett a Reiser4-et gyorsan megbízható formába hozni.

Elágaztatás 2. ábra Egy B-fa Az elágaztatási ütem (n) a csomópontok számát jelöli, ame- lyekre az egyes szintek csomópontjai mutatnak (1. ábra). Ha minden egyes csomópont az alatta lévõ szinten n csomópontra mutathat, akkor a tetejérõl elindulva a gyökércsomópont a következõ szinten n számú belsõ csomópontra mutat, amelyek mindegyike n számú belsõ csomópontra mutat az azt követõ szinten és így tovább. Az m szintû belsõ csomópont nm levél- csomópontra tartalmazhat hivatkozást, amelyek az utolsó szinten rendelkeznek elemekkel. Minél több adatot próbálsz tárolni egy fában, annál nagyobb mezõkre van szükséged a 3. ábra Egy B+fa kulcsoknál, amikkel különbséget lehet tenni az elemek között, majd pedig az adott elem valamelyik része (egy bizonyos elto- lásnál) kijelölhetõ. Ez azt jelenti, hogy a kulcsaidnak nagyob- A B+ fák jobbak a B-fáknál baknak kell lenniük, ennek következtében nõ az elágazási A belsõ csomópontokban nemcsak mutatókat és kulcsokat szám (kivéve, ha a kulcsokat tömöríted, de ezzel a következõ lehet tárolni, hanem a kulcsokhoz tartozó elemeket is. Erre volt változat megjelenéséig még várni kell). képes az eredeti B-fa algoritmus (2. ábra). Ezt követõen találták Az 1. ábra elsõ része egy négyszintû fát ábrázol, aminek az elá- ki a B+ fákat, amelyek csak mutatókat és kulcsokat tárolnak a gazási száma n = 1. Csupán négy darab csomóponttal bír, ezek a belsõ csomópontokban, a kapcsolódó elemek pedig levélszin- vörös gyökércsomóponttal indulnak, átlépve a sötétvörös, vagyis ten tárolódnak (3. ábra). belsõ csomópontba, majd a kék gallycsomópontba, végül pedig a zöld levélcsomópontba, ami a tényleges adatot tartalmazza. A B+ fák elágaztatási jobb a B-fákénál A második négyszintû fa (amelynek az elágazási száma n = 2) Az elágaztatás növelhetõ, ha a belsõ csomópontokban csak egy gyökércsomóponttal kezdõdik, amit két belsõ csomópont mutatókat és kulcsokat helyezünk el, továbbá nem hígítunk követ, amelyek mindegyike két gallycsomópontra mutat (ez az elemek adataival. A nagyobb elágaztatásnak köszönhetõen összesen négy gallycsomópontot jelent), és mindegyikük tovább a belsõ csomópontok hatékonyabban gyorstárazhatók, mivel egy levélcsomópontba, ami összesen nyolc levélcsomópontot így kevesebb belsõ csomópontot kell kezelni. Az emberek erre jelent. Végül pedig egy négyszintû, n = 3 elágazási számú fát gyakran azt mondják, hogy „de a B-fák elemeket gyorstáraz- láthatunk, melynek egy gyökércsomópontja, három belsõ csomó- nak, és az effajta gyorstárazás éppoly hasznos”. Általánosság- pontja, 9 gallycsomópontja, és 27 levélcsomópontja van. ban azonban nem ez a helyes válasz. Ha az általánosságot

30 Linuxvilág Szaktekintély

vesszük alapul, a vita eldöntése még nehezebb lehet. De kötünk egymáshoz, amelyek egyébként nem állnak kapcso- mielõtt erre jobban kitérnénk, tekintsük át a gyorstártervezés latban, de ez még nem elég ahhoz, hogy megértsük, miért alapjait! Tételezzük fel a következõket: jobbak a B+ fák a többinél. Belsõ csomópontok esetében egyetlen csomópontban több mutatót is tárolunk, ezáltal a • Kétcsoportnyi elemmel rendelkezel: A-val és B-vel. mutatók nem külön-külön kerülnek a gyorstárba. Vitatható, • Tegyük fel, hogy a két csoportból változó rendszerességgel hogy a mutatók és az általuk hivatkozott elemek szorosabban szükségesek az elemek: bizonyos dolgokra gyakrabban van összefüggenek-e, mint több különbözõ mutató. Remélem, szükség, másokra ritkábban, és az egyes csoportba tartozó a leírtak valóban tanulságosnak bizonyulnak, azonban még elemek idõvel változhatnak. mindig meg kell értenünk egy gyorstárazási alapelvet. • Bizonyos elemeket kéznél tartunk, miután a korlátozott méretû gyorstárból elõszedtük õket. Saját meghatározásom a gyorstár hõmérsékletére • Az A csoportban található elemekhez olykor egy B csoport- Legyen a gyorstár hõmérséklete egy olyan érték, ami azt beli elemet kell kötni, ami annyit tesz, hogyha szükségünk határozza meg, hogy milyen gyakran férünk hozzá az adott van egy elemre az A csoportból, akkor annak a B csoport- területhez, megszorozva a lemezrõl való beolvasás költségével, beli társára is szükség lesz. végül elosztva a felhasznált bájtok számával. Talán észrevettél egy szándékos pontatlanságot az iménti meghatározásban: Így nõ az A csoportból a gyakran használt elemek tárolásához hogyan lehetnek a kisebb elemek forróbbak beolvasásuk tel-

szükséges gyorstár mérete. Ha erõs kötõdés van két szükséges jesítményigényességének következtében? A gyorstár-hozzá- © Kiskapu Kft. Minden jog fenntartva elem között, amelyek a csoportok egyikében egymáshoz kötöt- férés hõmérsékletére egyéb meghatározások is elképzelhetõk, tek, és ez a kötõdés erõsebb, mint a gyorstárazáshoz felhasznált jelen cikk esetében azonban ez tûnik a legmegfelelõbbnek. erõsforrásokon elért nyereség, ahol A és B az LRU (Least Ha két különbözõ típusú dolgot tárolunk egy csomópontban, Recently used: újabban legkevésbé használt) algoritmusnak amelyeknek különbözik az átlaghõmérséklete, akkor két külön megfelelõen gyorstárazódik, az hasznos lehet. Ha azonban csomópontba helyezésükkel a gyorstárazás hatékonyabbá tehe- nincs efféle kapcsolat, akkor kifejezetten rossz. Az LRU egy tõ. Tegyük fel, hogy R bájtnyi RAM áll rendelkezésre gyorstára- olyan algoritmus, amely az újabban kevésbé használt elemeket zásra, míg D bájtnyi lemezterületünk van. Tegyük fel, hogy szórja ki a gyorstárból, így szabadít fel helyet. Az LRU külön- a kérések nyolcvan százaléka a legutoljára használt dolgokra féle változatai az operációs rendszerek fejlesztésekor használt hivatkozik, ezek a csomópont H (vagyis forró) bájtjai. A na- leggyakoribb gyorstárazási algoritmusok közé tartoznak. gyobb teljesítmény érdekében a H-t az R-hez képest csökkent- De várjunk csak! Mi történik akkor, ha a B csoportból is szük- jük. Ha a gyakran használt adatokat egyenletesen szétszórod, séged van valamilyen elemre, s ezért jó lenne, ha innen is akkor nagyobb méretû gyorstárra lesz szükséged, és a gyorstár néhány elem a gyorstárba kerülne, tehát a B csoport valame- is veszít a hatékonyságából. lyik szeletére lenne szükség? Ebben az esetben az a gond, hogy kapcsolat nélkül nem valószínû, hogy neked a B csoportból Gyorstárazási alapelvek arra az elemre lesz szükséged, ami valamelyik A-beli elemhez Ha növeljük a csomópontok közötti hõmérséklet-eloszlást, akkor kötõdik. Ha kiválasztasz valamit a B-bõl, akkor az a gyorstár- kisméretû gyorstárból is nagyobb teljesítmény tudunk kihozni. ban tárolódik, és ezáltal az LRU-ra épülõ gyorstár hatékony- Ha kétfajta dolognak eltér a hõmérsékletátlaga, akkor külön sága csökken, kivéve, ha a gyorstárazásért egy másik, legalább csomópontokban helyezzük el õket, így növelve a rendszer olyan jó algoritmus felel, mint az LRU. Amikor azt próbáljuk egészében a hõmérséklet-eloszlást. kiválasztani, hogy az A csoportnak megfelelõen a B csoportból Ha minden egyéb egyenlõ, és két különbözõ típusú dolgot melyik elem gyorstárazása lenne ajánlatos, gyakran megesik, tárol több példányban egyetlen csomópontban, akkor a hogy az adott algoritmus nem olyan jó, mint az LRU, így gyorstár hatékonyabbá tehetõ, ha több különbözõ csomó- megint bajban vagyunk. pontban osztjuk el õket. A dolgoknak kevésbé hatékony összekötése, amikre rendszer- telenül van szükségünk, a számítástechnikai világon kívül Mutatók csomópontokra gyakori. Például tegyük fel, hogy szereted a pattogatott kuko- A csomópontokra hivatkozó mutatók gyakran hívódnak meg az ricát és a szusit, de csak bizonyos napokon eszed õket és általuk elfoglalt bájtok számához hasonló gyakorisággal. Vegyük teljesen véletlenszerûen. Tételezzük fel, hogy a megnézendõ azt az esetet, amikor mindhárom átjáró esetében mutatókat kell filmeket is teljesen véletlenszerûen választod ki. Vegyük úgy, használni, amelyek az alsóbb szinten lévõ csomópontokat érik hogy a mozi megköveteli, hogy az adott, véletlenszerûen el, és kisebbek, mint azok a csomópontok, amikre hivatkoznak. kiválasztott film esetében csakis pattogatott kukoricát ehetsz, Ha csak csomópontmutatókat helyezünk el, és a kulcsokat a és nem ehetsz szusit, amit pedig a sarki étteremben megkap- belsõ csomópontokra korlátozzuk, a csomópontok sûrûsége nõ. nál. Ez lenne a társadalmilag legelõnyösebb rendszer? Tegyük Mivel a mutatókra méretükhöz képest négyzetesen több alka- fel, hogy a hot dogok minõsége az egyes hotdog-árusok között lommal van szükség, mint a fájlok tartalmát tároló többi elem- véletlenszerûen változik. Ha a legjobb moziban egy bizonyos re, a mutatók és a cikkelyek adatai között jelentõs a hõmér- este csak a moziban készült hot dogot eheted, és a külsõ árus- sékletátlaguk közötti különbség. nál vásárolt hot dogot nem viheted be a mozi területére, az A korábban tárgyalt gyorstárazási alapelveknek megfelelõen szerinted a társadalmilag legelõnyösebb? Elõnyös-e ez számodra? a kétfajta hõmérséklet-átlagú csoport (a mutatók és az elemek A szorosan egymáshoz kapcsolódó dolgok összerendelése néha adatai) elágaztatása növeli a gyorstár hatékonyságát. a teljesítmény szempontjából is elõnyös. Számos fájlrendszer Most talán azt kérdeznéd, hogy miért nem a valódi hõmérsék- összerendeli a fájlméretadatokat a fájlnévadatokkal, ami úgy letadatok alapján végezzük az elágaztatást a típus szerinti tûnik, hogy jól mûködik, legalábbis jobban, mint ahogyan az helyett? Azért, mert a típus csak a hõmérséklettel függ össze? LRU mûködne. Azt tesszük, amit a legegyszerûbb kódolni, nem csak a hõmér- Gyakori hiba a gyorstárak tervezésekor, hogy olyan dolgokat séklet-eloszlást véve alapul.

www.linuxvilag.hu 2003. szeptember 31 Szaktekintély

Néhány fatervezet úgy rendezi át a fát, hogy a magasabb hõ- mérsékletû elemek magasabban vannak, mint az alacsonyabb hõmérsékletû mutatók. Az elemadatok és a csomópontmutatók közötti hõmérséklet-különbség olyan mértékû, hogy az effajta tervezeteket én nem tartom versenyképesnek, emellett a meg- valósításuk is bonyolultabb. A négyzetes nagyságú átlaghõ- mérséklet-különbséget véve alapul azt gyanítom, hogyha téve- dek is, ez mégsem elegendõ ahhoz, hogy foglalkozzunk vele. A többi fatervezet mintegy oldaljegyzetként megemlíti, hogy a vándorló elemek hõmérséklet szerint magasabban helyez- kednek el a fában. Ha valaki pusztán csak a hõmérséklet 4. ábra Egy háromszintû fa szerint válogatna, de a szintek változtatása nélkül, az talán tényleg hatékonyabb lenne. Amennyiben valaki nem rendel- kezne versenyképes tervezési alapokkal az elemek egymás körüli csoportosítására (ami néhány alkalmazás esetében igaz), és ha valaki az elemeket ahelyett, hogy egyenként férne hozzájuk, csomópontonként próbálja elérni, akkor érdemes

© Kiskapu Kft. Minden jog fenntartva lenne egy csomópont-újracsomagolót birtokolnia, hogy az elemadatokat hõmérséklet szerint csomópontokba rendezze.

A B+ fák jobban végzik a gyorstárazást, mint a B-fák 5. ábra A B+ fák külön csomópontokban osztják el a mutatókat és az Egy kiegyensúlyozatlan fa adatokat. A fában csomópontokra hivatkozó mutatók általában forróbbak, mint a fában található egyéb dolgok (mintegy négy- zetes arányban). Mindazonáltal a korábban tárgyalt gyorstá- razási alapoknak megfelelõen a mutatók és az adatok szétvá- lasztása hatékonyabb gyorstárazást eredményez. A számító- gépiparban a B+ fákat a gyakorlatban jobbnak ismerik el, mint a B-fákat, mint ahogyan ezt a felvázolt elmélet is megjósolja. Az is elfogadott bölcsességnek minõsül, hogy a kiegyensúlyo- zott fák hatékonyabbak a kiegyensúlyozatlan fáknál. Egyelõre azonban még nem elfogadott, de a fentiek alapján mégis meg- jósolható, a BLOB-ok – ahogyan az adatbázisipar hívja õket – 6. ábra rossz hatással vannak a teljesítményre. Errõl és arról, hogy Négyszintû fa egy BLOB beszúrása után mik azok a BLOB-ok, hamarosan bõvebben is szót ejtek. nagyméretû elemeket tároljunk; mûködésük lényege pedig az, Mit takar a kiegyensúlyozott? hogy a csomópont mutatókat tartalmaz azokra a csomópon- Ezt a fogalmat többféle, egymással kapcsolatban nem álló tokra, amelyek az elemet tartalmazzák. Az elemet tartalmazó dologra is alkalmazzák, mint ahogyan a kiegyensúlyozott fák csomópontokat levélcsomópontoknak hívják, ez minden "B*" szakirodalma is megemlíti. E dolgok két legismertebbike a fára jellemzõ. kiegyensúlyozott magasságok és a kiegyensúlyozott területek, A 6. ábrán egy BLOB-ot szúrtunk be egy négyszintû fa levél- amelyek a fa csomópontjaiban találhatók. Sajnálatos módon csomópontjába, ami annyit tesz, hogy a levélcsomópontban ezek a különféle meghatározások sok félreértést okoznak a mutatókat helyeztünk el, amelyek a fájladatokat tartalmazó szakirodalom olvasóinak – ezt én megpróbálom elkerülni. részekre hivatkoznak. A Reiser fájlrendszer 3-as változatának A magasság-kiegyensúlyozott fák azok, amelyek esetében a fái így mûködtek. a gyökértõl elindulva a levélcsomóponthoz vezetõ minden Ez elég jelentõs változás, amit mégis a teljes adatbázis-közösség útvonal azonos hosszúságú. A hosszúság alatt a gyökércsomó- elfogadott. Az itt leírt gyorstárazási alapelveknek megfelelõen ponttól a levélcsomópontig bejárandó csomópontok számát így csökkenthetõ a mutatók és elemadatok elágaztatása, de ez értjük. Például az elsõ ábrán a fa magassága 4, míg a 4. ábrán a ront a gyorstár hatékonyságán. Emlékezzünk rá: a gyorstárazás fa magassága 3, míg az egy csomópontból álló fa magassága 1. alapelvei szerint ez rossz elgondolás. Tehát mindazon okokból A legtöbb algoritmus a magasságmérés elvégzése céljából a fát kifolyólag, amelyek szerint a B+ fák jobbak a B-fáknál, a Reiser csak a tetején növeli, ezáltal a fa sosem esik ki a magassági fájlrendszer 4-es változatának fái is jobbak a 3-as változat egyensúlyból. fáinál, bár nem olyan nagy mértékben. Az 5. ábrán egy kiegyensúlyozatlan fa látható. A fa kezdetben Hogy ezt jobban megértsük, a 7. ábrán egy Reiser4-es fa látható talán kiegyensúlyozott volt, de a különbözõ törlések 3-as elágazási számmal, egy BLOB-bal az elsõ szintû levélcso- következtében elvesztette néhány belsõ csomópontját. Illetve mópontban, valamint egy erre hivatkozó mutatóval a hármas az is elképzelhetõ, hogy azért vált kiegyensúlyozatlanná, mivel szintû gallycsomópontban. Ebben az esetben a BLOB mezõi anélkül lettek hozzá új elemek adva, hogy ügyeltek volna a folyamatosan helyezkednek el. A tárterület érdekében ez a kiegyensúlyozottságra. többi levélcsomópont alatt helyezkedik el, de a hozzá tartozó A hagyományos adatbázismódszerekkel, ha egy csomópontnál mutató egy második szintû gallycsomópontban található, mint nagyobb elemet szeretnénk tárolni, akkor ezt BLOB-okban minden más elem mutatója is. tehetjük meg, ami azt eredményezi, hogy a fa kiegyensúlyozat- Bár elfogadott dolog, hogy a B+ fák jobbak a B-fáknál, az még- lan lesz. A BLOB-ok jelentik az általános módszert arra, hogy sem olyan elterjedt, hogy a BLOB-ok rosszul vannak megter-

32 Linuxvilág Szaktekintély

méretük szerint ágaztassa el egymástól. De egy napon valaki majd biztos megpróbálja, és remélhetõleg elmondja nekünk, hogy mit tapasztalt. A Reiser4 visszatér a magasság-kiegyensúlyozott fák klasszikus meghatározásához, vagyis minden egyes levélcsomóponthoz az út hossza egyenlõ nagyságú. A Reiser4 nem színleli, hogy a nagyméretû elemeket tároló csomópontok nem a fa részei, annak ellenére sem, hogy a fa mutatókkal hivatkozik rájuk. A Reiser4 a Reiser fájlrendszer 3-as változatához képest csök- 7. ábra A Reiser4 a BLOB-okat kenti a belsõ csomópontok és a mutatókat tartalmazó csomó- az elsõ szintû levélcsomópontokban tárolja pontok számát. A 188 megabájtos Linux-rendszermag 2.4.1-es változatának forrásának tárolásához a ReiserFS v3 1629 vezve, és az ezzel kapcsolatos tévhit jellemzõ az adatbázisiparra. csomópontot használt fel, ehhez a Reiser4-nek csak 164 csomó- Gray és Reuter azt mondja, hogy a külsõ memória keresésének pontra van szüksége. Ennek eredményeképpen a mutatók és az a jellegzetessége, hogy az egyes oldalak számát az általános csomópontok tárolásához szükséges RAM-mennyiség a (vagy leghosszabb) keresési úton csökkentsük, méghozzá Reiser4-nél döbbenetes mértékben mérséklõdött. olyan módon, hogy egy tetszõleges keresési útra csökkentjük az egyes oldalak számát, kisebbíti a valószínûségét annak, Megjegyzés a cikk következõ részeihez © Kiskapu Kft. Minden jog fenntartva ha valamit közvetlenül a lemezrõl szükséges beolvasni (lásd A soron következõ cikkekben megtudjuk, hogy miért lénye- a Kapcsolódó címeket). gesen jobb a Reiser4 teljesítménye, mint a ReiserFS v3-é, még Ezzel a magasság-kiegyensúlyozottság hatékonyságáról szóló teljesen üres gyorstár mellett is. Megtudjuk, hogy miért jobbak elemzéssel az a bajom, hogy nem árulja el, hogy egy mérsé- a táncoló fák, mint a helyigényes kiegyensúlyozott fák, és azt kelten kiegyensúlyozott fával is lehet boldogulni – feltéve, is, hogy miként kezeljük a tranzakciókat olyan módon, hogy hogy nem növeled meg nagymértékben a belsõ csomópontok ugyanakkor nagymértékben csökkentjük a kétszer leírandó számát. A gyakorlatban a kiegyensúlyozatlan fák csakugyan adatok mennyiségét. több belsõ csomóponttal rendelkeznek. A legtöbb mérsékelten kiegyensúlyozatlan fa esetében valamennyivel több memórián Linux Journal 2003. május, 109. szám belüli lépdelésre van szükség a fában, ugyanakkor az I/O-ter- helés nagymértékben nõ, mivel több belsõ csomópontot kell feldolgozni, amiket – mivel így már túl sok csomópont van – Hans Reiser ([email protected]) nem lehet a gyorstárban tárolni. 1979-ben csatlakozott az UC Berkeley-hez, és „Rendsze- De ha az összes BLOB-ot egyetlen helyen tárolnánk a fában, rezésre” szakosodott, ami egy egyéni ágazat. Az elméleti akkor ezáltal a csomópontok száma nem nõne jelentõs mérték- modellek fejlõdését tanulmányozza. ben, mivel az adatoknak minden más levélnél alacsonyabb

szinten tartásából adódó teljesítménycsökkenés kis mértékû  lenne. A fa bejárásának a költsége azonban – a RAM sebessé- gétõl függõen – valamelyest nõne, de nem jelentõs mértékben. KAPCSOLÓDÓ CÍMEK A Reiser4-féle megközelítés nem az egyetlen lehetséges módja a belsõ csomópontszám csökkentésének. A BLOB-ok elágaztatása valószínûleg alapvetõen megoldaná a gondot, ami Jim Gray és Andreas Reuter Transaction azoknak a tervezõknek a hibájából keletkezik, akik a magasság- Processing: Concepts and Techniques. Morgan kiegyensúlyozott fák meghatározásának a lényegét figyelmen Kaufmann Publishers, Inc., 1993. – Ez egy régi, kívül hagyják. Valószínûleg az is nagy hatással lenne az I/O- de jó könyv a tranzakciókról. Elérhetõ a  teljesítményre, ha elkülönítenék azokat a BLOB-okat, amelyek http://www.mkp.com/books_catalog/ nem állnak szoros kapcsolatban a fával. A Reiser4 esetében catalog.asp?ISBN=1-55860-190-2 címen. nem akartam arra korlátozni a fát, hogy az elemeket csak a

www.linuxvilag.hu 2003. szeptember 33 Szaktekintély

Processzorhoz kötés

Bizonyos folyamatok egyetlen processzorhoz kötése egy új rendszerhívás segítségével.

Linuxnak az a képessége, hogy a segítségével folya- egy rossz processzorkötésû ütemezés látható; a 2. táblázat azt A matokat köthetünk egyetlen processzorhoz, már mutatja, hogyan néz ki a jó processzorkötésû ütemezés. nagyon régóta várt tulajdonság volt. Ezt a képességet Ezekkel ellentétben az erõs processzorkötés az, amit a pro- processzorhoz kötésnek nevezzük, ami azt jelenti: „ez a folya- cesszorkötéssel kapcsolatos rendszerhívások biztosítanak. Az mat csak ezen a bizonyos processzoron futhat”, vagy pedig erõs kötés kötelesség, amit az ütemezõnek kötelezõ érvénnyel „ezek a folyamatok csak ezeken a processzorokon futhatnak, be kell tartania. Ha például egy folyamat a nullás procesz- de a nullás processzoron nem”. Az ütemezõ ennek megfelelõen szorhoz van kötve, akkor minden esetben csakis azon futhat.

© Kiskapu Kft. Minden jog fenntartva betartja a kikötéseket, és a folyamatok csak a számukra kijelölt processzorokon fognak futni. Miért van szükség a processzorhoz kötésre? Más operációs rendszerek, mint például a Windows NT, már Mielõtt részletesebben megismerkednénk az új rendszerhívá- régóta biztosítanak processzorhoz kötéssel kapcsolatos rend- sokkal, elõtte tisztázzuk, hogy egyáltalán miért van szükség szerhívásokat. Ennek következtében a Linuxban is egyre rájuk. Elsõdleges elõnyük az, hogy a gyorstárazás teljesítménye inkább kívánatossá vált, hogy ilyen képességekkel bõvítsék. növelhetõ. Mint mondtam, az O(1) ütemezõ erõsen törekszik Végül a 2.5-ös rendszermagban megjelentek a folyamatok pro- arra, hogy a folyamatok egy processzoron maradjanak, és lehe- cesszorhoz kötését meghatározó és lekérdezõ rendszerhívások. tõség szerint ott is tartja õket. De bizonyos teljesítményigényes A cikkbõl kiderül, hogy miért szükséges, hogy ismerjük a helyzetekben – mint amilyen mondjuk egy nagy adatbázis-ki- processzorhoz kötéssel kapcsolatos képességeket, és késõbb azt szolgáló futtatása, vagy egy temérdek szállal dolgozó Java-ki- is megtudhatjuk, hogyan használhatjuk ki ezeket az új képes- szolgáló – nagyon fontos lehet, hogy ezt a processzorhoz való ségeket. Ha nem vagy programozó, vagy csak akad egy olyan kötést a legszigorúbban kezeljük. A több processzoros számí- programod, amit nem vagy képes módosítani, bemutatok tógépek keményen megdolgoznak azért, hogy a processzorok neked egy segédeszközt, amellyel egy adott PID-del rendel- gyorstára érvényben maradjon. Az adatok egyszerre csak az kezõ folyamatod processzorhoz való kötését állíthatod be. egyik processzor gyorstárában találhatók meg, máskülönben Végül pedig megvizsgáljuk a processzorhoz kötéssel kapcso- a gyorstár elveszíti összehangoltságát, és ez bizonytalansághoz latos rendszerhívások megvalósítását. vezet azt illetõen, hogy melyik processzor gyorstára tartalmazza a rendszermemóriának leginkább megfelelõ másolatot. Ennek Gyenge és erõs processzorhoz kötés következtében, ha az egyik processzor egy sornyi adatot helyez Kétféle processzorhoz kötés létezik: a gyenge és az erõs. el a gyorstárában, akkor az összes többi processzornak a helyi A gyenge, amit természetes kötésnek is hívunk, az ütemezõnek gyorstárában érvénytelenítenie kell azt a bizonyos sort. Ez az azt a tulajdonságát hivatott jellemezni, hogy egy folyamat ese- érvénytelenítés meglehetõsen kellemetlen és költséges. De az tében az ütemezõ mindig arra törekszik, hogy az adott folyamat igazi gond akkor jelentkezik, ha egy folyamat ugrál a procesz- a lehetõ leghosszabb ideig ugyanazon a processzoron fusson. szorok között, ami érvénytelenítések sorozatával jár, és a szük- De ez pusztán próbálkozás, mivel ha bármi közbejön, a folya- séges adat sosem található meg a gyorstárban. Így a gyorstár mat rögtön költözik is a másik processzorra. A 2.5-ben található hibázási gyakorisága nagyon nagyra nõ. A processzorhoz kötés O(1) ütemezõ kiváló természetes kötési képességekkel bír, ettõl véd meg, és ezáltal növeli a teljesítményt. amelynek a 2.4-es rendszermag pontosan az ellenkezõje, ahol A processzorhoz kötés másik nagy elõnye elsõ pillantásra a is a processzorhoz kötés meglehetõsen gyenge volt. Ha ez a ter- fentiek egyenes következményének tûnik. Ha több szál fér mészetes kötés gyenge, létrejön a pingponghatás. Ez annyit hozzá egyszerre ugyanahhoz az adathoz, akkor elõnyös lehet, tesz, hogy az ütemezõ a folyamat minden egyes meghívásakor ha a szálak egy processzoron futnak. Így biztosított, hogy a más-más processzoron futtatja a folyamatot. Az 1. táblázatban szálak nem érvénytelenítik a különbözõ processzoron lévõ adatokat, és nem okoznak hibákat a gyorstárban. Ez ugyanak- 1. táblázat kor SMP-rendszerek esetén csökkenti a többszálúságból követ- A pingponghatás kezõ teljesítménynövekedést. A gyorstárazásból nyert teljesít- ménynövekedés talán megéri azt a veszteséget, amit a szálak time 1 time 2 time 3 time 4 egymás utáni végrehajtása következtében el kell szenvednünk. Process A CPU 0 CPU 1 CPU 0 CPU 1 A harmadik és egyben utolsó elõny valós idejû, illetve idõ- érzékeny alkalmazások esetében lehet számottevõ. Ebben a megközelítésben minden egyes rendszerfolyamat a rendszer- 2. táblázat ben bizonyos processzorokhoz van kötve. Egy bizonyos alkal- A jó processzorhoz kötés mazás pedig a maradék processzorokhoz. Általános esetben egy kétprocesszoros rendszerben ez a bizonyos alkalmazás egy time 1 time 2 time 3 time 4 processzorhoz van kötve, míg minden más folyamat a másik Process A CPU 0 CPU 0 CPU 0 CPU 0 processzorhoz. Így biztosított, hogy erre a bizonyos alkalma- zásra összpontosul az adott processzor összes figyelme.

34 Linuxvilág Szaktekintély

Az új rendszerhívások elérése #include A rendszerhívások meglehetõsen újak, ezért egyelõre nem min- den rendszeren érhetõk el. Legalább 2.5.8-pre3-as változatszámú long rendszermag és 2.3.1-es glibc szükséges (bár a 2.3.0-s glibc támo- sched_setaffinity(pid_t pid, unsigned int len, gatja a rendszerhívásokat, egy hibát is magában rejt). 2.4-es unsigned long *user_mask_ptr); rendszereken az új rendszerhívások még nem érhetõk el, de egy folt már rendelkezésre áll, ami a  http://www.kernel.org/ long pub/linux/kernel/people/rml/cpu-affinitycímrõl tölthetõ le, illetve sched_getaffinity(pid_t pid, unsigned int len, megtalálható az 51. CD Magazin/Processzor könytárában. unsigned long *user_mask_ptr); A frissebb terjesztések közül több is magában foglalja ezeket a szolgáltatásokat. A Red Hat 9-ben például már a rendszermag Az elsõ rendszerhívást arra használjuk, hogy egy folyamat és a glibc is tartalmazza a rendszerhívásokhoz szükséges támo- kötéseit beállítsuk, míg a második a már beállított kötéseket gatást. A valós idejû megoldások közül például a MontaVista kérdezi le. Linux támogatja az új felületet. Mindegyik rendszerhívás estében a PID kapcsoló annak a folyamatnak a PID-jét jelenti, amelynek a tulajdonságait le Kötõdési maszkok akarod kérdezni, vagy változtatni akarsz rajtuk. Ha a PID A legtöbb rendszeren – beleértve a Linuxot is – a processzorhoz nulla, akkor a hívó folyamatra vonatkoznak a beállítások.

kötést bitmaszkok segítségével lehet beállítani. A bitmaszk n A második kapcsoló a processzorkötési maszkban található © Kiskapu Kft. Minden jog fenntartva számú bitbõl áll, ahol az egyes bitek be-, illetve kikapcsolt bitek számát jelöli, amely jelenleg 4 bájt (32 bit). Ez a kapcsoló állapotától függnek bizonyos szolgáltatások. Például a pro- azért szükséges, mert ha a jövõben a rendszermagban változni cesszorhoz kötést (32 bites számítógépeken) egy 32 bites bit- fog az erre a célra fenntartott bitek száma, akkor a már maszk határozza meg. Az egyes bitek azt jelölik, hogy az adott elkészült programok az új környezetben is helyesen fognak folyamat kötve van-e egy bizonyos processzorhoz vagy pro- mûködni. Nem lenne jó, ha meglévõ programjaink egyszer cesszorokhoz. A biteket jobbról balra kell számolni, a 0-s bittõl csak mûködésképtelenné lennének. A harmadik kapcsoló egy a 31-es bitig, és ennek megfelelõen a nullás processzortól a hivatkozást tartalmaz, ami magára a bitmaszkra mutat. 31. processzorig. Például: Nézzük csak meg, hogyan kérdezhetjük le egy folyamat processzorhoz kötési bitmaszkját: 11111111111111111111111111111111 = 4 294 967 295 unsigned long mask; Ez az alapértelmezett processzorhoz kötési maszk minden unsigned int len = sizeof(mask); folyamat esetében. Mivel minden bit be van kapcsolva, a folyamat bármelyik processzoron futhat. if (sched_getaffinity(0, len, &mask) < 0) { Ugyanakkor, ha a bitmaszk perror("sched_getaffinity"); return -1; 00000000000000000000000000000001 = 1 } akkor sokkal szigorúbb megkötések érvényesek. Minek utána printf("a processzorkötési maszkom: csak a 0. bit van bekapcsolva, a folyamat csak a nullás pro- %08lx\n", mask); cesszoron futhat, vagyis a kötési maszk a folyamatot a nullás processzorhoz köti. Remélem, érthetõ. Afféle kényelmi szolgáltatásként a visszaadott bitmaszk AND- Mit jelent a követezõ két maszk tízes számrendszerben olva van a rendszerben található mûködõképes processzorok értelmezve? Mi történik, ha ezt a két maszkot egy folyamat bitmaszkjával, így biztosan csak a mûködõképes processzo- kötési maszkjaként használjuk fel? rokhoz tartozó biteket látjuk bekapcsolva. Például egy egypro- cesszoros rendszer a fenti hívásra mindig 1-gyel tér vissza 10000000000000000000000000000000 (a 0. bit kivételével minden bit nulla). 00000000000000000000000000000011 A maszk beállítása éppen ilyen egyszerû:

Az elsõ maszk 2 147 483 648-cal egyezik meg, mivel a 31. bit unsigned long mask = 7; van bekapcsolva, és a folyamatot a 31. processzorhoz köti. /* processors 0, 1, and 2 */ A második bitmaszk értéke 3, és a folyamatot a nullás és az unsigned int len = sizeof(mask); elsõ processzorhoz köti. A Linux processzorkötési felülete a fentiekhez hasonló if (sched_setaffinity(0, len, &mask) < 0) { bitmaszkot alkalmaz. A C nyelv azonban sajnos nem perror("sched_setaffinity"); támogatja a bináris állandókat, így mindig a decimális vagy } hexadecimális, azaz tízes vagy tizenhatos számrendszerbeli állandókat kell használni. A fordító talán figyelmeztetni A példában a folyamatot a rendszerben lévõ elsõ három fog, ha olyan nagy állandót próbálsz használni, amelyik processzorhoz kötjük. Ezt követõen meghívhatod a a 31. processzorhoz köti a folyamatot, de ne aggódj, sched_getaffinity() függvényt, hogy megbizonyosodj mûködni fog így is. róla, a fenti példa valóban mûködött-e. Mivel tér vissza a sched_getaffinity(), ha valójában csak két processzor- Az új rendszerhívások használata ral rendelkezel? Mivel tér vissza, ha csak egy processzorral? Az új rendszermag és glibc esetén az új rendszerhívások A rendszerhívás sikertelen, ha a bitmaszkban megjelölt használata meglehetõsen egyszerû: processzorok legalább egyike nem létezik. A nullás maszk

www.linuxvilag.hu 2003. szeptember 35 Szaktekintély

A rendszerben minden folyamat processzorkötési maszkja 1. lista A bind forrása lekérdezhetõ, azonban a maszk csak azokban a folyamatokban változtatható meg, amelyeknek te vagy a tulajdonosa, illetve /* bind - egyszerû parancssoros eszköz bármely folyamat bitmaszkját megváltoztathatod, ha rendszer- * az alkalmazások processzorhoz kötésének gazdai jogosultságokkal rendelkezel. * beállítására. */ Egy eszközt akarok! Ha nem vagy programozó, illetõleg nem vagy képes módosí- #define _GNU_SOURCE tani a forrást, akkor is megváltoztathatod a folyamatok kötési tulajdonságait. Az elsõ listában egy egyszerû parancssoros #include eszköz forráskódját találod, amellyel bármely folyamat kötési #include maszkját egyszerûen beállíthatjuk, ha tudjuk a folyamat PID- #include jét. Mint említettem, ehhez neked kell lenned az adott folyamat tulajdonosának, vagy pedig rendszergazdai jogosultságokat int main(int argc, char *argv[]) kell birtokolnod. { Az eszköz használata egyszerû, ha megtanulod a tízes unsigned long new_mask; számrendszerbeli kifejezésmódot:

© Kiskapu Kft. Minden jog fenntartva unsigned long cur_mask; unsigned int len = sizeof(new_mask); bind pid maszk pid_t pid; Tegyük fel, hogy egy kétprocesszoros rendszerünk van, if (argc != 3) { amelyben az 1600-as PID-del futó Quake-folyamatot a második fprintf(stderr, processzorhoz szeretnénk kötni. Egyszerûen csak a következõt "usage: %s [pid] [cpu_mask]\n", kell begépelnünk: argv[0]); return -1; bind 1600 2 } Legyünk igazán ravaszok pid = atol(argv[1]); Az elõzõ példában a Quake-et a rendszerünkben található sscanf(argv[2], "%08lx", &new_mask); egyik processzorhoz kötöttük. Hogy igazán gyors képet kapjunk, a rendszerünkben minden más folyamatot a másik if (sched_getaffinity(pid, len, processzorhoz kell kötnünk. Ezt megteheted kézzel is, &cur_mask) < 0) { vagy ha írsz egy trükkös parancsfájlt, de egyik sem igazán perror("sched_getaffinity"); hatékony. Ehelyett használd ki, hogy a processzorhoz kötés return -1; a fork() során öröklõdik, vagyis egy folyamat minden } gyermeke ugyanahhoz a processzorhoz fog kötõdni, mint a szülõje. printf("pid %d´s old affinity: %08lx\n", Ennek a legtisztább módja, ha magát az init-et dolgozzuk pid, cur_mask); meg egy kicsit, olyanformán, hogy a kívánt processzorkötési maszkot a rendszermag parancssorán keresztül adjuk át. if (sched_setaffinity(pid, len, Célunkat azonban egyszerûbben is elérhetjük, anélkül, hogy &new_mask)) { módosítanunk kellene vagy újra kellene fordítanunk az perror("sched_setaffinity"); init-et. Helyette egyszerûen megszerkeszthetjük a rendszer- return -1; indító parancsfájlt. A legtöbb rendszeren ez a parancsfájl a } /etc/rc.d/rc.sysinit vagy a /etc/rc.sysinit fájlok egyike, amit az init elõször futtat le. Helyezzük el a bind példaprogramot if (sched_getaffinity(pid, len, a /bin könyvtárban, és az rc.sysinit elejéhez adjuk hozzá a &cur_mask) < 0) { következõ két sort: perror("sched_getaffinity"); return -1; /bin/bind 1 1 } /bin/bind $$ 1

printf(" pid %d´s new affinity: Ezek a sorok az init-et (aminek a PID-je 1) és az éppen %08lx\n", futó folyamatot a nullás processzorhoz kötik. Minden pid, cur_mask); jövõbeli folyamatnak ezek a folyamatok lesznek a szülõi, így örökölni fogják a kötési maszkokat. Ezt követõen a saját return 0; folyamatodat (legyen ez egy valós idejû nukleáris irányító } rendszer vagy a Quake) a másik processzorhoz kötheted. Ezt követõen minden folyamat a nullás processzoron fog futni, kivéve a saját folyamatunkat és annak gyermekeit, mindig sikertelen hívást eredményez. Csakúgy, ha a amelyek az egyes processzoron futnak. Ez azt jelenti, 7. processzorhoz szeretnél kötni egy folyamatot, és nincs hét hogy így a teljes processzor csak a mi saját folyamatunkat processzorod, a rendszerhívás ugyancsak sikertelen lesz. fogja kiszolgálni.

36 Linuxvilág Szaktekintély

Rendszermagbeli processzorkötés megvalósítása szorhoz kötési maszk megváltozik, és a folyamat éppen egy Jóval azelõtt, hogy Linus felvette volna a processzorhoz kötési számára nem engedélyezett processzoron fut, akkor a folyamat rendszerhívásokat, a rendszermag már támogatta és figye- soron kívül áthelyezõdik egy számára engedélyezett pro- lembe vette a processzorhoz kötési maszkokat. Nem létezett cesszorra. Ez biztosítja, hogy egy folyamat csak a számára azonban semmilyen felület, amin keresztül ezeket a maszkokat engedélyezett processzoron kezdheti meg a futását, illetve csak a felhasználó módosíthatta volna. Minden folyamathoz tartozó olyan processzorra költözhet át, amelyen nincs tiltva a futása. maszk a task_struct szerkezetben tárolódik unsigned Természetesen, ha csak egy processzorhoz van kötve a long-ként, cpus_allowed néven. A task_struct szer- folyamat, akkor nem költözik sehova. kezetet a folyamat leírójának nevezzük. Ez tárol minden adatot az egyes folyamatokkal kapcsolatban. A processzorkötési Összegzés felület egyszerûen csak kiolvassa és módosítja a A 2.5-ösben megjelent processzorhoz kötési felület – és egyéb cpus_allowed változót. helyekre átültetett változatai – egyszerû, de mégis hasznos esz- Bármikor, ha a rendszermag egy folyamatot át akar költöztetni közt kínálnak arra, hogy meghatározhassuk, hogy az egyes egy másik processzorra, elõször ellenõrzi, hogy az adott folya- folyamatok mely processzoron fussanak. A többprocesszoros mat futhat-e azon a másik processzoron. Ha a másik procesz- géppel rendelkezõ felhasználók biztosan örülni fognak, hogy szorhoz tartozó bit nincs bekapcsolva, akkor a processzor a újabb lehetõség teremtõdött arra, hogy rendszerüket még ha- folyamatot nem helyezi át. Ezen túlmenõen, ha a procesz- tékonyabbá varázsolhassák, vagy arra, hogy a legfontosabb valós © Kiskapu Kft. Minden jog fenntartva

 idejû alkalmazások mindig kapjanak processzoridõt. De az egyprocesszoros számítógéppel rendelkezõ felhasználóknak sem kell magukat mellõzve érezniük, õk is használhatják az új rend- KAPCSOLÓDÓ CÍMEK szerhívásokat, de ezáltal sem tesznek szert túl sok haszonra.

A Schedutils ütemezõvel kapcsolatos eszköztár: Linux Journal 2003. július, 111. szám  http://tech9.net/rml/schedutils. A csomagban meg- található a taskset nevû program, amellyel hatékonyan Robert Love állítgathatjuk, a folyamatok processzorhoz kötését. A Florida Egyetemen folytat matematikai és Processzorhoz kötési foltok a rendszermaghoz és a számítástudományi tanulmányokat, egyúttal a glibc-hez:  http://www.kernel.org/pub/linux/kernel/ MontaVista Software-nél dolgozik rendszermag- people/rml/cpu-affinity fejlesztõként. Szeret fényképezni.

www.linuxvilag.hu 2003. szeptember 37 Szaktekintély

Az LDAP és a biztonság (1. rész) Az OpenLDAP segítségével az összes alkalmazás kényelmes közös címtárat használhat. Helyes beállításával a hálózat biztonsága nemhogy csökken, hanem nõni fog.

együk fel, hogy IMAP-kiszolgálót üzemeltetünk rengeteg Szerencsére az LDAP-t bõvíthetõre tervezték. Ha az egyik felhasználóval, de nem szeretnénk minden felhaszná- környezetben létrehozunk egy LDAP-adatbázist, az cseresza- lónak teljes értékû fiókot létrehozni a kiszolgálón. Inkább batos lesz más LDAP-megvalósításokkal is, egyszerûen csak Tvalamiféle központi felhasználóhitelesítõ szolgáltatást kellene be kell állítanunk az adatbázis rekordformátumát vagy sémáját. használni, ami más célokra is jó lehet. Ha már itt tartunk, szük- Ez a téma a következõ hónapban kerül sorra. Ennek köszönhe- ség lesz egy állandó elérésû (online) címjegyzékre szervezetünk tõen gond nélkül futtathatjuk az OpenLDAP-kiszolgálót levelezõ- és csoportmunkaprogramjai számára. Ezenkívül Linuxon, és a címjegyzéket elérhetõvé tehetjük, mondjuk egy

© Kiskapu Kft. Minden jog fenntartva tegyük fel, a felhasználóknak titkosítóeszközökre is szükségük Netscape Communicatort futtató Mac-felhasználó számára is. van, amelyek X.509-es tanúsítványokat használnak, valamint az egész szervezet számára kezelik a digitális tanúsítványokat. Az OpenLDAP beszerzése és telepítése Elképzelhetõ, hogy létezik egyetlen szolgáltatás, ami mind a Az OpenLDAP hasznos és fontos eszköz, ennek következtében négy igényt ki tudja elégíteni? Az LDAP képes erre, sõt többre minden jelentõs Linux-terjesztésnek része. Általában több is. A nyílt forrás közössége abban a szerencsés helyzetben csomagra bontják szét: az egyik a kiszolgálódémont, a másik az van, hogy rendelkezésére áll egy szabad, megbízható és teljes ügyfélprogramokat, a harmadik a fejlesztéshez szükséges értékû LDAP-kiszolgáló és -ügyfél, ami a legtöbb Linux-ter- programkönyvtárakat tartalmazza. Ez a cikk az LDAP-kiszol- jesztésnek része: ez az OpenLDAP. gáló felállítását tárgyalja, így magától értetõdõ, hogy terjeszté- Az egyetlen hátrány, hogy az OpenLDAP egy bonyolult sünk OpenLDAP-kiszolgáló csomagját telepíteni kell. Ezen- szörny. Értelmes használatához még több rövidítést és elvont kívül telepítsük az OpenLDAP futásidejû programkönyvtárait, elképzelést kell megismernünk a szokásos Unix-trükkökön ha azok nem részei a kiszolgáló csomagjának. Azt gondolhat- kívül. Felszerelkezve a következõ néhány hónapban megjelenõ nánk, hogy az OpenLDAP ügyfélprogramjainak telepítése folytatással és egy kis elhatározással, nagyhatalmú LDAP-iste- kihagyható egy olyan kiszolgálón, ahol nincsenek helyi fel- nek lehetünk, akik egyszerre több vasat tartanak a tûzben, és használók, és az LDAP-mûveletek a hálózaton keresztül fognak a hálózatunk egyszerre lesz biztonságosabb és könnyebben zajlani. Ez sajnos nem így van, kimondottan javasolt az ügyfél- használható. Tapasztalataim szerint a „biztonságosabb” és az programokat is feltelepíteni, mert sokat segíthetnek a rendszer „egyszerûbben használható” rendszer ritkán valósítható meg kipróbálásában és a hibakeresésben. egyszerre, ezért is lelkesedem azért, hogy ebben a rovatban Red Hat alatt az OpenLDAP a következõ csomagokból áll: végre bemutathatom az OpenLDAP-t. openldap (OpenLDAP-programkönyvtárak, -beállítóállományok és a leírás); openldap-clients (OpenLDAP-ügyfélprogramok és Az LDAP alapjai -parancsok); openldap-servers (OpenLDAP-kiszolgálóprogra- Dióhéjban összegezve: az LDAP címtárszolgáltatást nyújt, azaz mok); valamint az openldap-devel (fejlécállományok és prog- egy központi adatbázisban érhetõk el az emberek, csoportok és ramkönyvtárak fejlesztõk számára). Bár a csomagok legtöbb a szervezetet alkotó más elemek adatai. Mivel minden szerve- függõsége teljesen érthetõ (például glibc), két szükséges csomag zet különbözõ lehet, és nem feltétlenül ugyanazokat az adato- talán még nincs telepítve: a cyrus-sasl és cyrus-sasl-md5, ezek kat tartják lényegesnek, a címtárszolgáltatásnak rugalmasnak az LDAP hitelesítõ mûveleteit hivatottak közvetíteni. és testreszabhatónak kell lennie. A megoldás ezért a feladat SuSE alatt a következõ RPM-ekben helyezkedik el az OpenLDAP: jellegébõl adódóan bonyolult. openldap2-client (az n1 könyvtárban a SuSE 7.3 és 8.0 esetén); A címtárszolgáltatásra létezik egy protokoll, az X.500. Az X.500-at openldap2 (ebben az OpenLDAP-programkönyvtárak és a nagy és összetett szervezetek nagy léptékû címtárszolgáltatásai- kiszolgálódémonok csücsülnek, és az n2 könyvtár részét képe- ra tervezték. Ennek megfelelõen az X.500 önmagában annyira zik); openldap2-devel (a SuSE 7.3-ban az n2-ben található, a nagy és bonyolult protokoll, hogy pehelysúlyú változata, az SuSE 8.0-ban az n4-ben érhetõ el). A Red Hatnél a már említett LDAP, amit az RFC 1777 ír le – és gyakorlatilag az X.500 protokoll cyrus-sasl csomagot mindenképpen telepítsük fel, ami a sec1 részhalmaza –, sokkal inkább elterjedt, mint az eredeti X.500. könyvtárban helyezkedik el. Az X.500 és az LDAP nyílt protokollok, miként a TPC/IP; egyik A 7.3-as és 8.0-s terjesztésekben a SuSE az OpenLDAP 1.2-es sem önálló termék. A protokollt valamilyen programnak kell változatát is közreadta a 2.0-s mellett. Mindenképpen a 2.0-s megvalósítani, ez lehet magmodul, kiszolgálódémon vagy ügy- csomagokat telepítsük, hacsak nincs különleges okunk az félprogram. A TCP/IP-hez hasonlóan nem minden LDAP-meg- OpenLDAP 1.2 futtatására. Ez a tanács nem vonatkozik a Red valósítás egyforma, még csak nem is feltétlenül képesek együtt- Hat- és a Debian-terjesztésekre, mert ezek kizárólag az mûködni egymással (módosítás nélkül). Most egy bizonyos OpenLDAP 2.0-t használják. LDAP-megvalósításról lesz szó, az OpenLDAP-ról, de tudnunk A Debian 3.0-s (Woody-) terjesztésben a megfelelõ deb-csoma- kell, hogy léteznek más programok is, amelyek szintén megva- gok a következõk: libldap2 (OpenLDAP programkönyvtárak a lósítják az LDAP-t. Például ilyen a Netscape Directory Server, a Debian libs könyvtárából); slapd (az OpenLDAP-kiszolgáló a Sun ONE Directory Server és bizonyos korlátokkal a Microsoft net könyvtárból); és az ldap-utils (OpenLDAP-ügyfélparancsok Active Directory a Windows 2000 Serverben. szintén a net könyvtárból). Ezenkívül még a libsasl7

38 Linuxvilág Szaktekintély

Az 1. lista következõ két bejegyzése az LDAP-adatbázis felü- 1. lista A /etc/openldap/slapd.conf testreszabott része gyeletével kapcsolatos; a rootdn és a rootpw azt a felhasz- nálónév és jelszópárost adja meg, amelyet a helyi vagy távoli database ldbm parancsoknak kell megadniuk, ha felügyeleti mûveletet akar- suffix "dc=wiremonkeys,dc=org" nak végrehajtani az LDAP-adatbázison. Érdekes módon ez a rootdn "cn=ldapguy,dc=wiremonkeys, bejegyzés csak erre a célra használatos. Nem jelenik meg a dc=org" szabályos LDAP-adatbázis lekérdezésekben. rootpw {SSHA}zRsCkoVvVDXObE3ewn19/ Ez felveti azt az ellentmondást, hogy akkor milyen módon Imf3yDoH9XC lehet hitelesíteni azokat a mûveleteket, amelyek a hitelesítési directory /var/lib/ldap (LDAP) adatbázis feltöltéséhez szükségesek. Késõbb, ha már feltöltöttük az LDAP-adatbázist valódi adatokkal, az egyik rekordot a slapd.conf hozzáférési listáit használva nevezzük ki felügyeleti fióknak, és töröljük a rootdn és rootpw bejegy- 2. lista A slappasswd parancs zést. Ezt a lépést egy késõbbi írásban tárgyalni fogjuk; pillanat- nyilag a rootdn és a rootpw is megfelel. [root@mydirserver openldap] Nagyon rossz ötlet a rootpw értékét egyszerû szövegben # slappasswd -h {SSHA} tárolni. Ehelyett a slappasswd parancsot kell használni, ami

New password: ********* a jelszó kódolt formáját állítja elõ, miként a 2. lista is mutatja. © Kiskapu Kft. Minden jog fenntartva Re-enter new password: ********* Láthatjuk, hogy a slappasswd bekéri a jelszót, és a kódolt jel- {SSHA}16JhhIDajRc1cDwwa1t6o0ske8goj8Od szót a -h kapcsolóval megadott algoritmus szerint elõállítja és kiírja a képernyõre. A -h után kapcsos zárójelben kell megadni a kívánt algoritmus nevét. A lehetséges választék a slappasswd(8) programkönyvtárra is szükség van a Debian libs könyvtárából. súgóoldalon fel van sorolva. A slappasswd kimenetét közvet- Amennyiben kedvenc terjesztésünk nem tartalmazza az lenül bemásolhatjuk a slapd.conf állományba, én is pontosan ezt OpenLDAP bináris csomagjait, vagy a legújabb OpenLDAP-ból tettem az 1. lista rootpw értékének létrehozásakor. szükségünk van egy adott tulajdonságra, amelyik nincs benne Visszatérve az 1. listához, a következõ érték a címtár meghatá- terjesztés OpenLDAP-csomagjában, vagy testreszabott Open- rozásában a könyvtár. Nem meglepõ módon ez azt adja meg, LDAP-csomagot szeretnénk, még mindig lefordíthatjuk az hogy a helyi állományrendszerben melyik könyvtárban legyen OpenLDAP hivatalos honlapjáról ( http://www.openldap.org) az LDAP-címtár létrehozva. Mivel a /var a megszokott helye a letölthetõ forrást. növekvõ állományoknak, mint a naplók vagy az adatbázisok, az 1. lista a /var/lib/ldap értéket tartalmazza. Létezõ könyvtárat A slapd beállítása és elindítása kell megadni, és az OpenLDAP felhasználójának és csoport- Az OpenLDAP fõ kiszolgálódémonjának a neve slapd, és az jának – általában ldep és ldap – tulajdonában kell lennie. OpenLDAP telepítése után az elsõ feladatunk ennek beállítása. A jogosultságokat állítsuk a 0700 (-rwx------) értékre. A beállítások elsõsorban a /etc/openldap/slapd.conf állomány Mûszaki értelemben ennyi elég az elinduláshoz: az ldap szerkesztésével végezhetõk el. indító-parancsfájljával próbáljuk meg elindítani a slapd A  http://www.openldap.org/doc/admin20/guide.html címen démont. Ez leggyakrabban a /etc/init.d/ldap, de terjesztésen- megtalálható „OpenLDAP 2.0 Administrator's Guide” kitûnõen ként különbözõ lehet. Nyugodtan adjunk hozzá bejegyzéseket elmagyarázza a slapd elindításának és futtatásának kezdõlé- az LDAP-adatbázishoz az ldapadd parancs használatával péseit a 2. fejezet 8. pontjától kezdve. A dokumentum a címtár- – a korábban említett eljárás megmutatja, hogyan. szolgáltatásokat és az LDAP fogalmait írásunknál nagyobb Mielõtt a hálózaton keresztül kezdenénk el kezelni és lekér- mélységben tárgyalja. dezni az LDAP-adatbázist, be kell állítani a TLS-titkosítást. Menjünk végig a lépéseken, hogy biztosan jól sikerüljön a kez- Ez fontos, mert az OpenLDAP által használt egyszerû hitelesí- dés. Az elsõ teendõ a slapd.conf szerkesztése – szemléltetésül tési eljárás a hitelesítési adatokat titkosítás nélkül küldi át a tekintsük meg az 1. listát. Láthatjuk, hogy a slapd.conf jelleg- hálózaton. Sajnos elfogyott a rendelkezésemre álló hely, ezért zetes Linux-beállítóállomány: minden sora egy kapcsolónevet ez a téma a jövõ hónapra marad. Aki nem tud addig várni, az tartalmaz, amit egy érték követ. Az 1. listán szereplõ elsõ kap- olvassa el Vincent Danen Using OpenLDAP for Authentication csoló, a database azt adja meg, hogy milyen adatbázisháttér- írását a  http://www.mandrakesecure.net/en/docs/ldap- rel kívánjuk az OpenLDAP-t használni. Általában a legjobb az auth.php címen, bár ez bizonyos tekintetben a Mandrake-et ldbm-et választani, ami a gyors dbm adatbázis-formátumot helyezi középpontba. Szintén tárgyalni fogom az LDAP-adat- használja, de a shell (egyéni héjprogramhátterek) és a passwd bázis szerkezetének meghatározásával kapcsolatos megfon- (a /etc/passwd használata háttérként) szintén érvényes beállítás. tolásokat, és az LDAP-adatbázis létrehozásának a módját. Az 1. listán a következõ kapcsoló a suffix, amely meghatá- Addig is sok szerencsét! rozza, hogy milyen lekérdezések illenek erre az adatbázis-meg- határozásra. Az itt megadott végzõdés a wiremonkeys.org, ame- Linux Journal 2003. július, 111. szám lyet az LDAP nyelvén balról jobbra értelmezett tartományelem- (dc) kifejezések sorozataként adunk meg. Más szavakkal, ha egy LDAP-ügyfél a cn=bubba,dc=wiremonkeys,dc=org meg- Mick Bauer ([email protected]) különböztetõ nevû (dn) gépet keresve lekérdezi a példakiszol- Biztonsági szakember, a Linux Journal biztonsági gálónkat, akkor mivel a dn vége dc=wiremonkeys,dc=org, ez témákkal foglalkozó szerkesztõje, biztonsági az adatbázis fog ráilleni. A megkülönböztetõ nevekrõl többet tanácsadó a Minnesota állambeli Minneapolisban tudhatunk meg a „Gyorstalpaló az X.500-as nevezéktanról” címû található Upstream Solutions LLC Inc.-nél. írásból (az 51. CD Magazin/LDAP könyvtárában található).

www.linuxvilag.hu 2003. szeptember 39 Szaktekintély

Ismerjük meg a Monót! A Mono haszna például abban áll, hogy segítségével a Linux képessé válik a Microsoft .NET rendszerével való munkára.

mennyiben írtunk már valaha Linux-munkafelületen A Mono története dióhéjban futtatható programot, vagy legalább megvizsgáltuk a A Mono története körülbelül két évvel ezelõtt kezdõdött lehetõségét, akkor ismert elõttünk a nyelvi kötéseknek a Ximian nevû, Linux-programokra szakosodott cégnél. Aaz a sokasága, ami a különbözõ grafikus felületek eszközkész- A Ximian leginkább a Ximian Desktopról, az Evolution letéhez rendelkezésre áll. A Linux grafikus felületére való prog- naptár- és levelezõprogramjáról, a Red Carpet frissítõrend- ramírásnak ez az egyik erõssége: nem vagyunk egy adott progra- szerrõl és a vakbuzgó mûszaki igazgatóról, Miguel de Icazá- mozási nyelvhez hozzáláncolva. Sajnos hamarosan azt is észre ról ismert. Felismerve néhány, az utóbbi idõben napvilágot

© Kiskapu Kft. Minden jog fenntartva kell vennünk, hogy a különbözõ nyelvi kötések az API igen el- látott szabványban rejlõ lehetõséget, Miguel de Icaza elké- térõ készültségi fokával bírnak. Az egyik nyelven használt esz- szítette azt a programprototípust, amely késõbb a Mono- közkészlet egy másik nyelven esetleg még nincs támogatva – ez projektben teljesedett ki. a „soknyelvûség” egyik hátulütõje. Egy API karbantartásához De mik voltak azok a szabványok, amik szemet szúrtak Miguel szükséges munka mennyisége minden egyes nyelv esetén nö- de Icazának? Nem titok, hogy ez az ECMA-334 és az ECMA- vekszik. Az eredeti API megváltoztatása vagy frissítése esetén 335 volt, amelyek a Microsoft .NET fejlesztõi felület alapját a változást minden egyes nyelvi burkolón végig kell vezetni. képezõ technológia leírását tartalmazzák. Ennél a pontnál Most pedig képzeljünk el egyetlen GUI-eszközkészletet, ami hangsúlyoznunk kell, hogy lényeges különbség van a .NET bármilyen programozási nyelvbõl anélkül elérhetõ, hogy API- fejlesztõi felület és az általánosan használt „.NET” kifejezés burkolót kellene használnunk. Egy olyan eszközkészletrõl van tartalma között. A Microsoft-termékek és szolgáltatások széles szó, ami minden õt használó programozási nyelvnek ugyanazt körét – operációs rendszereket, fejlesztõi eszközöket, hálózati a szolgáltatást nyújtja. szolgáltatásokat és alkalmazásokat – illetik a tágabb értelemben A Mono számos egyéb mellett ezzel a képességgel is rendel- használt .NET kifejezéssel. Mi ennek a .NET-nek csak egy kezik, ezáltal teremtve meg felhasználója számára a nyelvfüg- bizonyos részével foglalkozunk. getlenséget és a nyelvek közötti párbeszéd lehetõségét. 2000 októberében a Microsoft, a Hewlett-Packard és az Intel

Rövid bevezetés a C#-be

A C# magas szintû objektumközpontú programozási nyelv, amelyet programozók érdeklõdési területét ez a kis ismertetõ nem fedi le, a a CLI (Common Language Infrastructure, általános nyelvi alap) Kapcsolódó címek részben a C# nyelv részletesebb leírásaihoz is kiegészítésére terveztek. A tervezõi csapat élén Anders Hejlsberg találhatunk hivatkozásokat. (ismert Turbo Pascal- és Delphi-fejlesztõ), Scott Wiltamuth és Bevezetésképpen vessünk egy pillantást a jó öreg Hello World Peter Golde állt. program C#-ben írt változatára: Elsõ pillantásra a C# sok mindenben hasonlít a Javára. Bár a /* parancsformátum szempontjából hasonlóak, a C# számos olyan A hello.cs program kódlistája lehetõséggel is rendelkezik, amivel a Java nem. A szolgáltatások */ némelyike közvetlenül a C++-ból származik, ilyen a túlterhelés (operator overloading), a felhasználó által meghatározott átalakí- using System; tások (user-defined conversions), igazi szabályos tömbök és hivat- kozás szerinti értékátadás (pass-by-reference). A többi tulajdonság, public class HelloWorld mint az osztályok, a csatolófelületek, a struct, az enum és a { még különlegesebb delegate és függvénymutatók, a C, a C++ public static void Main() és a Java keverékébõl származnak. { A korszerû objektumközpontú nyelvek legfontosabb jellemzõinek for (int x=0; x<3; x++){ támogatására a C# szintén rendelkezik a különbözõ elemszerkezetek // Console from the System – tulajdonságok, eljárások, attribútumok, események és leírás – // namespace lehetõségével. Ezzel nagymértékben leegyszerûsödik azoknak a Console.WriteLine("Hello World"); fejlesztõknek a munkája, akik elemeket írnak és RAD-környezetbe } akarják foglalni õket. } Azoknak a programozóknak a számára, akik járatosak a Java vilá- } gában, e kis C#-bevezetésben foglaltak semmilyen gondot nem fognak okozni. Bár az objektumközpontú programozásban gyakorlott folytatás a következõ oldalon

40 Linuxvilág Szaktekintély

közösen elõterjesztette a Common Language Infrastructure ram (compiler) alakítja át a gépnek megfelelõ utasításokká, (CLI, általános nyelvi alap) nevû futásidejû környezet és egy amiket közvetlenül a processzor hajt végre. Egy x86-os soro- újonnan kifejlesztett objektumközpontú nyelv, a C# részletes zatú processzor számára lefordított program egy PPC procesz- leírását. 2001 második felétõl a Ximian hivatalosan is elindította szoron hibát eredményez, ha a programot elõtte a processzor- a Mono-projektet, azzal a céllal, hogy létrehozzák a javasolt nak megfelelõen nem fordítjuk újra. Mindez annyiban nehezíti szabványokon alapuló .NET fejlesztõi környezet nyílt forrású egy program több eszközfelületre való megvalósítását, hogy megvalósítását. 2001 decemberében az ECMA (European minden egyes különbözõ változathoz rendelkeznünk kell a Computer Manufacturing Association, Európai Számítógép- megfelelõen fordított kóddal. gyártók Szövetsége) hivatalosan is jóváhagyta a CLI és C# A másik lehetõség, hogy egy olyan köztes futtatókörnyezet leírásaira vonatkozó szabványokat. számára fordítjuk le a forráskódot, amelynek az utasításai függetlenek a háttérben mûködõ eszköztõl. A köztes utasí- Áttekintés tások ezután különbözõ módszerekkel hajthatók végre. Az A CLI egy alaposztály-eljáráskönyvtárat és egy futtatókör- egyik módszer, hogy egy értelmezõprogramot (interpreter) nyezetet jelöl ki, ennek feladata többek közt az azonnali (JIT, használunk. Az értelmezõprogram betölti az utasításokat, Just In Time) fordítást, memóriakezelést, kivételkezelést majd végrehajtja õket, mintha egy virtuális számítógép mû- megvalósító szolgáltatások, valamint a befûzési- és biztonsági ködne a háttérben. A második módszer szerint a köztes utasí- szolgáltatások nyújtása. A folyamat jobb szemléltetéséhez tások a gépnek megfelelõ utasításokra való JIT-fordítása futás-

segítséget nyújt, ha összehasonlítjuk a forráskód fordításának idõben vagy a telepítéskor történik, s az utasítások ezután © Kiskapu Kft. Minden jog fenntartva hagyományos módszerével. közvetlenül hajtódnak végre. Mivel a JIT-fordítás a futtatófe- A hagyományos folyamat szerint a forráskódot a fordítóprog- lületnek megfelelõ utasításokat alkalmaz, a fordítás a célpro-

folytatás az elõzõ oldalról A for ciklus formátumának a C, C++ vagy Java-programozók számára már ismerõsnek kell lennie. A ciklus elsõ része, az int Minden programnak osztályokból kell felépülnie. x=0 egy x nevû egész típusú változót ad meg, és a 0 értéket adja A lista tetején egy megjegyzésrész látható. A C# ugyanazt a meg- neki. Ez a változó tölti be a ciklusszámláló szerepét. A ciklus jegyzésformátumot használja, mint a Java vagy a C++. A több- középsõ része, az x<3 kifejezés az a logikai feltétel, ami eldönti, soros magyarázatok használatához a kezdet jelzésére a /* jelet, a hogy mikor kell a ciklusnak befejezõdnie. Esetünkben, ha az x végén pedig a */ jelet használjuk. Egysoros megjegyzések esetén értéke 3-nál nagyobb, a vizsgálat eredménye negatív, kilépünk a a kettõs perjel (//) szintén elfogadott. ciklusból. A ciklus utolsó része a frissítési szakasz. A C++-hoz A megjegyzés alatt nem találunk fejállományt (header), mint a C hasonlóan a C# is megengedi az utólagos (post) növelést és csök- vagy C++ esetén. Láthatunk viszont egy utasítást, ami a Javából kentést. Az x++ parancs az x=x+1 rövidítése. A frissítõ szakasz ismert import utasításra emlékeztet. A using kulcsszó a C#-ben minden ciklusvégrehajtás után lefut. A példában a ciklus egy névtér megadására alkalmazható, ami lényegében egy osztály- 3-szor hajtódik végre. gyûjtemény. Ebben az esetben a System az az osztálykönyvtár- A C# a while, a do-while, a for és foreach típusú névtér, amit megadunk. A C# egy kis- és nagybetûket megkülön- ciklusokat támogatja. böztetõ nyelv, így a System nem azonos a system-mel. Szintén A for ciklus belsejében a Console.WriteLine() tagfügg- a Javához hasonló az a tulajdonsága, hogy az utasítások pontos- vény hívása található. A tagfüggvény hivatalos neve vesszõvel zárulnak. System.Console.WriteLine(), de mivel kikötöttük, hogy Lefelé haladva a következõ sor a legkülsõ osztály kezdete. A C# a System névteret használjuk, a System kezdõrészt elhagyhatjuk. fájlonként több osztály megadását is megengedi, így a fájl nevének Hosszú programokban ezzel a fogással jelentõs mennyiségû gépe- nem kell a legkülsõ osztály nevével megegyeznie, mint a Javában; léstõl kímélhetjük meg magunkat, de ha meggondolatlanul használ- ezzel szemben a fájl nevének .cs kiterjesztést kell kapnia. juk, bonyolulttá válhat annak a meghatározása, hogy éppen melyik A Hello World osztály nyitó kapcsos zárójel utáni elsõ sora névteret használjuk. A Console.WriteLine() tagfüggvény a Main() tagfüggvény. Minden programnak rendelkeznie kell a kimeneti szöveget a rendszerkonzolra irányítja. A példaként vizs- Main() tagfüggvénnyel, ami a program belépési pontjának a szere- gált kód végén lévõ kapcsos zárójelek lezárják a ciklust, a tagfügg- pét tölti be. A C++ és Java nyelvektõl eltérõen a Main() nagy- vényt, majd az osztályt. betûvel kezdõdik. A fõ eljárás megadásában szerepel még a public A lista például egy hello.cs nevû szöveges fájlba menthetõ, majd static void kifejezés. A public beállítja az eljárás láthatóságát a Mono C#-fordítójával, az mcs-sel lefordítható. Az eredményként és elérhetõségét (lényegében bárki hozzáférhet). A static kulcsszó kapott hello.exe futtatható fájl az alábbi eredményt szolgáltatja: lehetõvé teszi, hogy még azelõtt belépjünk az eljárásba, mielõtt egy [jdq@newton mono]$ mcs hello.cs Hello World típusú objektumot hoznánk létre. Végül a void Compilation succeeded kulcsszó azt adja meg, hogy az eljárás nem rendelkezik visszaadott [jdq@newton mono]$ mono hello.exe értékkel. A C#-ben a Main() tagfüggvény vagy int típusú Hello World értékkel tér vissza, vagy semmilyen értéket nem ad vissza. Hello World A Main() tagfüggvény belsejében az alábbi ciklus helyezkedik el: Hello World for (int x=0; x<3; x++){ Természetesen a C# sokkal többet érdemel annál, mint amit ebben // Console from the System namespace a bevezetõben elmondhattunk róla. A Kapcsolódó címek részben Console.WriteLine("Hello World"); néhány jó, a C# nyelvet oktató segédanyagot találhatunk. }

www.linuxvilag.hu 2003. szeptember 41 Szaktekintély

cesszornak megfelelõen alakítható. A JIT-fordító tovább növelheti a futtás sebességét, oly módon, hogy csak a felhasz- 1. lista Részlet egy visszafordított C#-programból nálásra kerülõ utasításokat fordítja le, majd a memóriában a CIL utasításkészlet bemutatására tárolja õket a késõbbi hívások számára. A futtatókörnyezet használatának felületfüggetlenségéért // Eljárás 1 sor a eredményt a futtatási sebesség terén kell köttetnünk. .method public hidebysig specialname Az eszközfüggõ kódra történõ fordítás hagyományos módsze- rtspecialname réhez képest a végrehajtás lassabb. A sebességkülönbség instance default void .ctor() cil mértéke függ az adott környezettõl és a használt futtatási managed módszertõl. Általában az értelmezõprogram használata { igényli a legnagyobb futtatási idõt. A JIT-fordítást alkalmazó // Az RVA 0x20ec-nél kezdõdõ eljárás eljárás sebessége jóval közelebb áll a hagyományos fordítási // Kódméret 7 (0x7) módszeréhez, mivel mindkettõ natív (az adott környezetnek .maxstack 8 megfelelõ) utasításokat eredményez. A futásidejû többlet- IL_0000: ldarg.0 munka azonban a sebességben mégis eredményez egy kis IL_0001: call instance void valuetype / lemaradást. [corlib]System.Object::.ctor() Most arra gondolhatunk: egy objektumközpontú nyelv, alap- IL_0006: ret

© Kiskapu Kft. Minden jog fenntartva eljáráskönyvtár, futtatókörnyezet – mintha csak a Javáról lenne } // end of method instance default void szó. Ez igaz is – a CLI alkotóelemei nagyon hasonlítanak a // .ctor() Javában lévõkhöz, mégis van egy alapvetõ különbség. A Java futásidejû része kizárólag a Java nyelv futtatására lett kifej- // Eljárás 2 sor lesztve. Igaz ugyan, hogy néhány más nyelvet is átalakítottak .method public static olyan módon, hogy a kimeneti kódja egyezzen a Javáéval, és default void Main() cil managed ezáltal a JVM (Java Virtual Machine, azaz Java virtuális gép) { számára futtatható legyen, de ez még mindig nem üti meg a // Az RVA 0x20f4-nél kezdõdõ eljárás CLI által biztosított nyelvfüggetlenség mértékét. Hiszen a CLI-t .entrypoint éppen arra tervezték, hogy számos programozási nyelv futtató- // Kódrészelet 11 (0xb) környezete lehessen. A CLI adattípus-rendszere az imperatív .maxstack 8 nyelvek (mint a C vagy a Pascal) és az objektumközpontú IL_0000: ldstr "Hello World" nyelvek támogatására egyaránt képes. IL_0005: call void class / A CLI nemcsak arra képes, hogy többféle nyelven írt progra- mot futtasson (nyelvfüggetlenség), hanem e nyelvek számára [corlib]System.Console::WriteLine(string) az egymás közti adatmegosztáshoz is alapot nyújt (nyelvek IL_000a: ret együttmûködése), ideértve a többnyelvû kivételkezelést is. } // Vége a void Main() eljárásnak Az egyik nyelven létrehozott objektumnak a másikban is lehet- nek leszármazottai. Ha megvizsgáljuk a CLI alapvetõ össze- tevõit, megtudhatjuk, hogy milyen módszerekkel érhetõ el képesek legyenek használni, illetve kiegészíteni. Egy nyelv a nyelvi függetlenségnek ez a magas foka. rendelkezhet arról, hogy milyen mértékben támogatja a CLS-t. Azok a nyelvek, amelyek bármely CLS-típus használatát lehetõvé A CTS teszik, az úgynevezett CLS-fogyasztók. Azok, amelyek képesek A CLI lelke a közös típusrendszer, a CTS (Common Type CLS-típusok létrehozására illetve kiterjesztésére, a CLS-kiterjesz- System). A CTS egy osztott típusrendszert határoz meg, tõk. Végül azok a nyelvek, amelyek teljes mértékben magukban amely rögzíti az adatok megadásának, használatának és keze- foglalják a CLS-t, egyszerre fogyasztók és kiterjesztõk. lésének a szabályait. Ennek a szigorúan kötelezõ típusrend- szernek az alkalmazásával a CLI képes biztosítani a típusok A leíró adat és a CIL épségét, és a nyelvek számára lehetõvé teszi a másik nyelv Amikor egy forrásfájlt egy CIL- (Common Intermediate adattípusainak kezelését. A nagyszámú különbözõ progra- Language, közös közvetítõ nyelv) megfelelõ fordítóprogram- mozási nyelv egyeztethetõsége érdekében a CTS két fõ adattí- mal fordítunk le, kimenetként egy hordozható futtatható pust biztosít, amelyek több altípussal, értékkel (értéktípussal) bináris állomány (PE – portable executable) jön létre, amit néha és objektummal (hivatkozástípussal) rendelkeznek. Az értékek assemblyként is emlegetnek, bár az assembly egynél több az olyan egyszerû adattípusok számára vannak fenntartva, fájlból is állhat. A PE két fontos adatrészbõl tevõdik össze. mint az egész és lebegõpontos értékek. Az objektumok a prog- Az elsõ a leíró adat, ami tartalmazza a használt típusok leírását, ramozási nyelvek számára szükséges összetettebb egyedek a CLI által az osztályok elõkereséséhez és betöltéséhez használt leírására használatosak. adatokat, a memóriaelrendezést és egyéb, futásidõben szüksé- ges adatokat. A második rész a közös közvetítõ nyelven írt CIL- A CLS kód. A CIL a közvetítõutasítások nyelvektõl független gyûjte- A CLS (Common Language Specification, közös nyelvleíró) egy ménye. Amikor lefordítunk egy nyelvet a CLI számára, ez a olyan keretrendszert ír le, amelyhez a fordítóprogramoknak a CIL-kód jön létre. A CIL megfelelõ teljesítménnyel rendelkezik nyelvek közti adatcsere érdekében létrehozott programkönyv- ahhoz, hogy rengeteg különbözõ programozási nyelvet kezel- tárak és bináris állományok elõállításakor ragaszkodniuk kell. hessen, és úgy tervezték, hogy nagy hatékonysággal lehessen A CLS valójában a CTS részegysége, ami ésszerû adattípus- és a felületnek megfelelõ natív utasításokra lefordítani. A CIL- szabályrendszert ad egy nyelv fordítóprogramja számára annak utasítások egy kis része látható az 1. listán, a Hello World érdekében, hogy az így létrejövõ lefordított kódot más nyelvek is program C#-ben írt változatában.

42 Linuxvilág Szaktekintély

(System.Windows.Forms), az ADO.NET és az ASP.NET. A Win 2. lista A ljlib.cs fájl tartalma Forms tartalmaz minden szükséges eljárást, osztályt és ese- ményt a Microsoft Windows-rendszernek megfelelõ grafikus using System; programok kifejlesztéséhez. Mivel a natív Linux grafikus esz- közkészlettel szinte lehetetlen a Windows GUI API-hívásokat namespace LJlib { emulálni, a Mono a WineLib ( http://www.winehq.com) segítségével adja a Windows-felületet. Ha már láttunk alkal- public class Output mazást a Wine alatt futni, akkor tudjuk, hogy a kinézete egyál- { talán nem hasonlít a Linux asztali környezeteire. Ennek megol- static public void SayHello () dására a Wine-ban a Mono gondoskodik a témák támogatá- { sáról, hogy ugyanazokat a leképezõ eljárásokat használja az Console.WriteLine("Hello Linux elemkészletekhez, mint az asztal egyéb részeinél. Journal!"); Az ADO.NET tartalmazza a Mono számára a .NET adatelé- } réssel kapcsolatos osztályait. Az ADO.NET többre képes } egyszerû adatelérésnél: kapcsolat nélküli, méretezhetõ, } XML-en alapuló adatelérési modellt nyújt bármely adatforrás- ból. Az írás idején körülbelül egy tucatnyi adatbázis mûködik

a Mono ADO.NET adatszolgáltatójaként. A program fejlõdé- © Kiskapu Kft. Minden jog fenntartva séért, az újabb és újabb gyártó adatbázisának támogatásáért 3. lista A hello.vb fájl tartalma végzett munka folytatódik. A Monóban az ASPI.NET támogatása két részre lett bontva: Imports LJlib a webûrlapokra és webszolgáltatásokra. A webûrlapok alkotják a webalkalmazások felhasználói felületét. A Win Formshoz Module modmain hasonlóan a webûrlapok is nyújtják a vezérlõeszközökhöz Sub Main() – gombokhoz, szövegdobozokhoz és egyszerûbb vezérlõele- Output.SayHello() mekbõl álló összetettebb elemekhez – tartozó tulajdonságokat, End Sub eljárásokat és eseményeket. Mindez lehetõvé teszi, hogy a End Module webes ûrlap felülete RAD-eszköz (Rapid Application Develop- ment, gyors alkalmazásfejlesztõ) segítségével készüljön, a fogd és vidd módszer alkalmazásával, a Gnome Glade programjá- A VES hoz hasonlóan. Ezáltal a megjelenítés elválik a program logiká- A virtuális futtatórendszer (Virtual Execution System – VES) jától, csökkentve a szükséges kódolás mennyiségét. A webes teremti meg a CLI-re írt programok számára a megfelelõ fut- szolgáltatások egy SOAP alapú távoli eljáráshívás támogatását tatókörnyezetet. Végrehajtja a betöltést, a modulok egyesítését, kínálják. Az olyan, mindenütt jelen lévõ internetes protokollok vezérli a memóriát, megvalósítja a biztonsági szolgáltatások használatával, mint az XML- és HTTP-szolgáltatások, az adatok és kivételek kezelését, valamint megfelelõ hátteret nyújt a és az eredmények hálózatos megosztását teszik lehetõvé, még CIL-utasítások végrehajtásához. tûzfalakon keresztül is. Az ASP.NET a CLI által támogatott A CLI memóriakezelõ része tartalmaz egy szemétgyûjtõt bármelyik nyelven programozható. Ez azt is jelenti, hogy az (Garbage Collector – GC) is. Más futtatókörnyezetekkel szem- ASP.NET kódja lefordításra kerül, és nem értelmezõprogram ben, a CLI megengedi, hogy a forráskódban engedélyezzük segítségével fut, mint az ASP korábbi változatai vagy egyéb vagy tiltsuk a GC használatát. A GC által kezelt adatokat (lefog- webes parancsnyelvek. Az ASP.NET a Mono számára akár az lalás, felszabadítás) felügyelt (managed) adatoknak nevezzük, XSP webkiszolgálón, akár az Apache 2 mod_mono össze- ha pedig a GC tiltva van, felügyelet nélküli adatokról beszé- tevõjével elérhetõ. lünk. A felügyelt kód (a CLI által végrehajtott forráskód) A .NET megvalósításában részt vevõ Mono-osztálykönyvtá- kezelhet felügyelt és felügyelet nélküli adatokat is. rakon túl számos más programkönyvtár és eszköz is érdekes szolgáltatásokat kínál: A Mono A Mono-projekt kettõs célt szolgál. Az elsõ, hogy az ECMA • A GTK#, Qt# és Wx.NET a népszerû linuxos grafikus CLI- és C#-szabványainak gyakorlati megvalósítását nyújtsa. eszközkészletekhez nyújt C#-kapcsolatot. Ezekkel a C#- A második, hogy mindezt a Microsoft .NET fejlesztõi felülettel burkolókkal minden, Monón futtatható nyelv ugyanazok- együttmûködõ módon tegye. Mindkét résznek megvan a maga hoz a grafikus eszközökhöz nyer hozzáférést. értéke, és különbözõ módon szolgálják a Linux javát. Ha pél- • Az OpenGL#, MonoGLo és CsGL a népszerû két- és dául a .NET-megfelelõség megszûnne, a Mono még akkor is háromdimenziós API OpenGL-hez ad kapcsolást. a Linux egyik értékes fejlesztõi keretrendszere lenne. • Az SDL.NET az SDL programkönyvtárhoz történõ Mindamellett a Mono azáltal, hogy a linuxos felületet .NET- kötést biztosítja. megfelelõvé teszi, futtathatóvá teszi Linuxon a Windows alá • A Gst# Gstreamer multimédiakeretrendszer-kötés. fejlesztett programokat. A gondolatmenetet folytatva az is • Számos kommunikációs programkönyvtár, például elmondható, hogy a fejlesztõk számára immár rendelkezésre a .NET Jabber és a Gnutella. fog állni egy megszokott fejlesztõi keretrendszer, amely a • NAnt fordítóeszköz (az Anthez hasonló eszköz). linuxos programok fejlesztésére történõ átállás esetén csökkenti a tanulási kényszerbõl adódó korlátokat. Természetesen ez csak néhány példa, de elég ahhoz, hogy A .NET-nek azok a fõ részei, amelynek a kiadásán a Mono szemléltesse a Monónak azokat a képességeit, amelyek Linux projekt éppen dolgozik, a Win Forms vagy egyéb felületre történõ fejlesztés esetén igénybe vehetõk.

www.linuxvilag.hu 2003. szeptember 43 Szaktekintély

A Mono használata • Programkönyvtár fordításához az mcs -target:library Az elsõ lépés a Mono kipróbálásához a kapcsolóját használjuk:  http://www.go-mono.com címen a projekt honlapjának [jdq@newton]$ mcs -target:library ljlib.cs a meglátogatása, ahonnan letölthetjük a forrás tarcsomagjait, • Compilation succeeded vagy a felületünknek megfelelõ bináris állományokat. Pillanat- Ennek eredménye a ljlib.dll fájl, ami a Ljlib névteret és nyilag a Monónak Linuxon és Windowson futtatható átirata Output osztályt tartalmazza. Most a hello.vb program létezik, de folyamatban van a MacOS X, FreeBSD és más felüle- fordítása következik. Ahhoz, hogy a fordításkor az éppen tekre történõ átírás is. Számos Linux-változatra létezik bináris elõállított ljlib.dll fájl kerüljön felhasználásra, utasítanunk állomány, többek közt Debianra, Red Hatre, SuSE-ra és kell a MonoBasicet, hogy hivatkozásként ezt használja. Mandrake-re. Ha a Ximian Red Carpetet használjuk, a neki Ezt a -r kapcsolóval tehetjük meg: megfelelõ fájlokat a Mono Chanellen is fellelhetjük. A cikkhez a [jdq@newton]$ mbas -r ./ljlib.dll hello.vb Mono 0.20-as változatát használtuk. Észrevehetjük majd, hogy a • Compilation succeeded Mono programcsomagokon felül – amelyek a futásidejû, a C# Az mbas kimenete a hello.exe fájl. Ezt a mono segítségével fordító- és osztálykönyvtárakat tartalmazzák – további cseme- futtathatjuk is: géket is kapunk. Ezek között találjuk a Mono hibakeresõ prog- [jdq@newton]$ mono hello.exe ramját, az XSP webkiszolgálót és a Monodoc leírásböngészõt. Amennyiben gondjaink akadnának a Mono telepítésével, Hello Linux Journal!

© Kiskapu Kft. Minden jog fenntartva forduljunk a honlapon elérhetõ leírásokhoz. És íme: két nyelv, a C# és a MonoBasic egy futtatható állo- mányban egy idõben mûködik. Bár ez egy végtelenül egyszerû A Mono jelenleg a következõ összetevõkkel érkezik: példa, mégis jól mutatja a CLI nyelvfüggetlenségét és együtt- • C#- és Basic-fordítóprogramok. mûködési képességét, és jelzi a Monónak fejlesztõeszközként • A VES, ami egy JIT-fordítóból és a hozzá tartozó hulladék- rendelkezésre álló széles körû lehetõségeit. gyûjtõbõl, a biztonsági rendszerbõl, az osztálybetöltõ, ellenõrzõ és végrehajtó rendszerbõl áll. Egy értelmezõprog- Összegzés ram szintén része ennek az összetevõnek. Bár a Mono még fejlesztés alatt ál, már így is a Linux program- • Egy C#-ben írt osztálykönyvtár-gyûjtemény, amely a CLI- fejlesztése elõsegítésének nagy ígérete. Ha az utóbbi két évben szabványban meghatározott osztályokat, a .NET FDL részét mutatott fejlõdését vesszük alapul, a Mono jövõje nagyon képezõ osztályokat és más Mono által használt osztályokat izgalmasnak ígérkezik. valósít meg. • Különbözõ segédprogramok. Linux Journal 2003. július, 111. szám

Az mcs a Mono C#-fordítóprogramja. Érdekes programozói bravúr, hogy az mcs-t C#-ben írták. A Mono 0.10 óta az mcs Julio David Quintana ([email protected]) önmaga fordítására is képes. Ha érdekelnek bennünket az mcs Villamosmérnök. 1997-ben találkozott a Linuxszal, parancssori lehetõségei, amelyek megegyeznek a Microsoft és azóta nem is tud szabadulni tõle. Ha nyelvtani C#-fordítója által kínált kapcsolókkal, részletes súgóoldalak vagy tárgyi hiba kapcsán keressük, akkor nem állnak rendelkezésünkre. érhetõ el, de a dicséreteket és a jókívánságokat A Visual Basic.NET Monóban található megfelelõjének, a szívesen fogadja. MonoBasicnek a fordítóprogramja az mbas. Bár a fejlesztése még nincs a C#-fordítóéhoz hasonló állapotban, a Basickel való  kísérletezgetéshez már megfelelõ szolgáltatásokkal rendelkezik. A Mono két futtatókörnyezete a mono és a mint. A mono a KAPCSOLÓDÓ CÍMEK VES CLI meghatározásaival egy JIT-fordítónak megfelelõ kör- mint nyezet. Ezzel ellentétben a egy értelmezõprogram, ami A C# összehasonlító áttekintése mono a számára könnyen hordozható megoldást jelent, de  http://genamics.com/developer/csharp_comparative.htm pillanatnyilag csak az x86-os felületet támogatja. A legjobb futási teljesítmény a mono használatával érhetõ el. A C# a Java-fejlesztõk szemszögébõl  A Monóval érkezõ segédprogramok közül figyelemre érdemes http://www.25hoursaday.com/CsharpVsJava.html a monodis és a pedump. A monodis egy lefordított assembly A C# Stations C#-oktató visszafejtésére alkalmas, kimenete a megfelelõ CIL-kód. Ezt  http://www.csharp-station.com/Tutorial.aspx használtuk az 1. listán látható CIL-kód megjelenítésére. Ha Az ECMA CLI-szabványa kíváncsiak vagyunk a CIL további részleteire, vagy bepillantást  szeretnénk nyerni a hordozható futtatható kód elõállításába, http://www.ecma-international.org/publications/standards/ játszadozzunk el velük egy kicsit. ECMA-335.HTM Most, hogy már ismerjük a Mono összetevõit, itt az idõ, hogy Az ECMA C# nyelvre vonatkozó szabvány ki is próbáljuk õket. A Mono nyelvi párbeszédének próbájához  http://www.ecma-international.org/publications/standards/ C#-ben egyetlen eljárással egy egyszerû osztályt írunk, majd egy MonoBasic-programból meghívjuk. ECMA-334.HTM A 2. lista mutatja a ljlib.cs C#-könyvtárat, a 3. listán pedig a A Mono projekt honlapja  http://www.go-mono.com hello.vb MonoBasic-program látható. Az elsõ lépés a ljlib.cs A Softsteel C#-oktatója és „patchwork” könyve programkönyvtárrá történõ fordítása. A lefordított program-  http://www.softsteel.co.uk/tutorials/cSharp/cIndex.html könyvtárak .dll kiterjesztéssel rendelkeznek, a futtatható állományok kiterjesztése pedig .exe.

44 Linuxvilág Szaktekintély

Hálózatkezelés a Nagios rendszerrel A John Deere különféle alkatrészek és programok keverékére volt kénytelen kiterjeszteni a hálózati kezelõrendszert. A nap hõse a Nagios lett.

mikor elkezdtem dolgozni a John Deere Agricultural dalmai. Mivel egy Marketing Centerben, 12 állomásunk volt az Egyesült központosítottabb IT- Államok és Kanada különbözõ pontjain. Ezek a telep- szerkezet felé próbál- helyekA eltérõ felszereltséggel rendelkeztek: az összes feladatot tunk meg el- régi kiszolgálókkal és asztali gépekkel oldották meg – a tarto- mozdulni, a többi mányszolgáltatástól egészen a nyomtatásig. Ez azonban nem megfigyelõprogram igazán egyezett a központosított IT-szervezetrõl alkotott elkép- valamennyi képessé-

zelésünkkel. Hogyan kezelhetnénk és figyelhetnénk meg a ki- gével fel kellett vér- © Kiskapu Kft. Minden jog fenntartva szolgálókat és a WAN csatornákat ennyire változatos helyeken? tezni magunkat. To- Körülbelül két évvel ezelõtt úgy döntöttünk, hogy a felhasz- vábbá minden egy- nálói adatokat hálózatunk központjából kivisszük a telephe- ség saját maga hoz- lyekre. A kérdés csak az volt, hogy miképpen tudjuk majd hatta meg az igényei- szemmel tartani az összes telephely különbözõ gyártóktól szár- nek a legjobban meg- mazó eszközeit? Hogy fogalmat alkothassunk a megfigyelendõ felelõ IT-döntéseket. eszközökrõl, bemutatunk közülük néhányat: minden fõ helyen A kérdés tehát az volt egy 4100 hálózatra kötött tárolóeszköz (NAS) volt: miként fogjuk kiszolgáló, illetve egy Compaq 1600, ami a nyomtatási és tarto- össze a sokféle megfi- mányvezérlõi feladatokat látta el. Néhány kisebb telephelyen gyelõrendszert, és helyi nyomtatókiszolgálóként Dell GX1 asztali gépeket hasz- hogyan mozduljunk náltunk. A központi állomáson egy Compaq TaskSmart N2400 el egyetlen egységes volt a legfõbb fájlkiszolgálónk. megoldás irányába? A változatos alkatrészek következtében egyetlen gyártó eszköz- Az új megfigyelõnek vezérlõ-készlete sem felelt meg az igényeinknek, az az ötlet képesnek kell lennie pedig, hogy mindent más-más eszközzel figyeljünk meg, nem kiszolgálók százait és igazán tetszett. Így aztán gyártófüggetlen megfigyelõeszközök szolgáltatások ezreit közül kellett választanunk. Az általunk talált megoldásokat meg- 1. kép A Nagat-szolgáltatások lapja figyelemmel kísérni, közelítõleg három nagy csoportba sorolhatjuk. A lista aljára azok miközben az egyes a megoldások kerültek, amelyek nem igazán voltak képesek egységeknek lehetõvé teszi, hogy a kialakult irányzatok adatait megfigyelni a folyamatosan növekvõ számú kiszolgálót és asztali grafikonon ábrázolják. Ugyancsak nehézséget jelentett az gépet. A legtöbb esetben kénytelenek lettünk volna a program- eddigieknél is szórtabb megfigyelendõ alkatrészkészlet, a mal érkezõ eszközöknél maradni. Más programok az úgyneve- Network Appliance-tõl kezdve a Sunon át a Dell-gépekig. zett élvonalbeli eszközök közé tartoztak, ilyen például Hewlett- Továbbra is voltak pénzügyi korlátaink, ez azt jelentette, hogy Packard OpenView rendszere. Ezt ugyan jól használhattuk volna az OpenView-osztályú termékek kiestek a lehetõségek közül. ott, ahol szerettük volna, és képes lett volna megfigyelni is azt, Mivel termelési környezetünkben a NetSaintet futtattuk, úgy amit akartunk, de az ára messze meghaladta lehetõségeinket. döntöttünk, nekilátunk és megpróbálunk NetSaint alapú meg- oldást keresni a mezõgazdasági részleg számára. Az elsõ dolog, A NetSaint projekt amit megtanultam, hogyha egy ideig nem követem a nyílt Már éppen kezdtük elveszíteni a reményt, hogy találunk vala- forrás közösségének a történéseit, akkor amikor visszatérek, mit, ami megfelel az igényeinknek, amikor belefutottam a Net- igen sok változást tapasztalok. Esetünkben a NetSaint nem Saint projektbe. A NetSaint olyan megfigyelõrendszert ígért, ami létezett többé; helyét átadta utódjának, a Nagiosnak megfelelt volna az igényeinknek, és képes lett volna megfigyelni ( http://www.nagios.org). azokat a dolgokat, amiket szerettünk volna, mégpedig egy nyílt keretrendszer segítségével, ami lehetõvé tette, hogy saját bõvít- Nagios – az utód ményeket (plugin) készítsünk. De a NetSaint segítségével nem- A Nagios több szempontból a NetSaint evolúciójának a követke- csak egyszerûen megfigyelhetjük a kiszolgálókat és a szolgálta- zõ lépcsõfokát jelenti. Némi szomorúsággal szemléltem, hogy a tásokat, de azt is lehetõvé teszi, hogy a bemutatott irányvonalat pingvin eltûnt a fõoldalról, de lassan hozzászoktam a hiányához. követve munkáinkat elõretekintõbb módon készítsük el. A rendszer tanulmányozása után úgy döntöttünk, hogy a Minden nagyszerûen ment: a NetSaint megbízhatóan végezte többszintû megoldást választjuk, s a megfigyelési projektünk- munkáját a John Deere egyik kisebb irodájában. Ahogy telt- ben szóba kerülõ minden egységnél külön Nagios-kiszolgálót múlt az idõ, a mezõgazdasági részleg belekezdett az IT-részleg helyezünk el. Elsõsorban ezért döntöttünk így, hogy egyetlen korszerûsítési programjába, azzal a célkitûzéssel, hogy a szak- kiszolgáló se terhelõdjön túl, és a szükséges megfigyelési értõi területek színvonalát a teljes részlegben megemeljék. szintet folyamatosan fenntarthassuk. Ezt szem elõtt tartva Ebben a projektben ismét felmerültek a megfigyelés régi bonyo- Moline-ban, Illinois államban telepítettük a fõ megfigyelõgépet,

www.linuxvilag.hu 2003. szeptember 45 Szaktekintély

3. kép A NagMIN kapupásztázó felkutatja a megfigyelendõ szolgáltatásokat

© Kiskapu Kft. Minden jog fenntartva Egy teljes évig meg is felelt az igényeinknek, de ahogy újabb egységeket építettünk be Nagios megfigyelõ rendszerükbe, az 2. kép A NagMIN fõlapja általa nyújtott adatok elérése egyre fontosabbá vált. Többé már nem voltak elégségesek a Nagios saját kis grafikonjai. Magunk majd az elsõ gyermekkiszolgálót a kansasi Lenexában, a szerettük volna az adatokat megkapni és megjeleníteni, embe- mezõgazdasági részleg marketingosztályán helyeztük el. rek és egységek szerint, ezt pedig nem éppen egyszerû meg- tenni az eredeti Nagios-telepítésünk által adott egyszerû szöve- Telepítés ges állományokkal. A szülõ- és a gyermekkiszolgálón ugyanaz a Nagios-telepítés futott. Mindkét gépre Red Hat 8-at telepítettünk, majd felpa- A Nagios beállítása koltuk a Nagios rendszert. A rendszerrel érkezõ leírás csaknem A következõ lépést a fõrendszer beállítása jelentette, ami a leg- teljes értékû, és szépen végigvezet bennünket a telepítés lépé- több szempontból magától értetõdõ volt. Akad néhány dolog, sein. A Nagios mellett minden kiszolgálóra egy Nagat nevû amit érdemes egy kicsit jobban megnézegetni, ha a legtöbbet programot is feltelepítettünk (1. kép). szeretnénk Nagios rendszerünkbõl kihozni. Az egyik ilyen képesség az intelligens ellenõrzés (smart check) módszere. A Nagat beállítóprogram Ahelyett, hogy rendszerünkön az összes ellenõrzést egyszerre A Nagat a Nagioshoz szánt webalapú beállítóprogram. Segítsé- futtatná (ez igen nagy processzorfelhasználással járna), a gével mindössze egy weboldalon kell néhány mezõt kitöltöget- Nagios szétosztja az ellenõrzést, mondjuk ötperces idõközökre, nünk, és a válaszaink alapján elkészül a beállításfájl. Így egyetlen jelentõsen mérsékelve ezáltal a CPU-felhasználást. A másik terminálablak megnyitása nélkül a kevésbé tapasztaltak is be dolog, amit érdemes megnézni: a párhuzamosított szolgáltatás- tudják állítani a Nagiost, illetve annak szolgáltatásait és gépeit. ellenõrzés; ezáltal egy idõben több ellenõrzést is futtathatunk, A Nagat használata során Red Hat 8-as telepítésünk alatt ami sokat segít, ha több processzorral rendelkezünk. belefutottunk néhány nehézségbe. Megfelelõségi gondjaink A szülõ- és a gyerekkiszolgáló beállítása szinte teljesen megegye- elhárítására a PHP és az Apache egyik korábbi változatát kellett zik, akad azonban két lényeges különbség is. A gyermekkiszol- feltelepítenünk (PHP 4.1.2, Apache 1.3). Miután ezt megol- gálón alapértelmezés szerint a figyelmeztetéseket ki kell kap- dottuk, hamar be tudtuk indítani a rendszert. A Nagat ugyan csolni, illetve be kell állítani az aktív ellenõrzést (active check), néhány hibát is magában rejtett, de könnyen kiküszöböltük míg a szülõkiszolgálón ennek éppen az ellenkezõjét kell végre- õket. Az egyik hiba a service edit oldalon bukkan fel: a rendszer hajtanunk. Mindezt azért tesszük, hogy csökkentsük a terhelést nem menti a kapcsolatcsoportot (contact). A javításhoz mind- a fõkiszolgálón és az összes figyelmeztetést egyetlen gépen össze annyit kell tennünk, hogy az alábbi sorokat a 39. sor jelenítsük meg. (A kétféle kiszolgálóhoz használható beállítás- case-szerkezetéhez illesztjük: fájlok az 51. CD Magazin/NAGIOS könyvtárában találhatóak.) A következõ lépés a Nagios által végrehajtandó parancsok $saveobject[´contact_groups´] = megadása lesz. Kísérletet tettem arra, hogy a rendszert hasz- @implode("´",$saveobject[´contact_groups´]); náló emberek eszébe véssem, hogy a Nagios: keretrendszer. Ez alatt azt értem, hogy õ maga semmilyen ellenõrzést nem Ezek után kapcsolatcsoportunkba már gond nélkül kiment- hajt végre, ez a munka a Nagios által meghívható bõvítmé- hetjük a változásokat, a szolgáltatás frissítése közben. nyekre marad. És ez nagyon jó így, hiszen ezáltal könnyedén készíthetünk saját bõvítményeket, mindaddig, amíg ragasz- A kiszolgálók beállítása kodunk a Nagios nyújtotta keretrendszerhez. Az általunk írt Miután mindent feltelepítettünk, elérkeztünk a projekt – véle- bõvítmények segítségével olyan rendszereket is képesek ményem szerint – legnehezebb részéhez: a kiszolgálók beállítá- leszünk megfigyelni, amiket az eredeti Nagios bõvítményeivel sához. Végül maga a kiszolgálóbeállítás közel sem volt olyan nem tudtunk volna. Jelenleg képesek vagyunk megfigyelni nehéz feladat, mint kitalálni, hogy mit is várunk el rendsze- például a NetApp fájlkezelõt (filer), és kiolvasni a lapszámlálót rünktõl, majd végigjárni az odáig vezetõ utat. Az elsõ döntés, a HP nyomtatókból, valamint a Compaq Insight Manager amit meg kellett hoznunk – és amit éppen most vonunk adatait be tudjuk építeni a Nagios rendszerbe. vissza –, a Nagios fordítása beépített adatbázis-kezelés nélkül. A Microsoft Windows-kiszolgálók megfigyelésének talán

46 Linuxvilág Szaktekintély

megkímélve bennünket attól, hogy a rengeteg adatot mind nekünk kelljen felvennünk. A NagMIN a legtöbb rendszeren jól mûködik, de a különleges rendszereket valószínûleg min- denképpen kézzel kell felvennünk a rendszerbe. Amennyiben további tájékoztatásra lenne szükségünk a bõvítménnyel kapcsolatban, látogassunk el a SourceForge.net honlapjára. Nagios kiszolgálónkat a szülõ-gyermek viszony alapján állítot- tuk be. Ehhez némileg eltérõ beállítások szükségesek, mintha egyszerû önálló rendszert készítenénk. Egyrészrõl a webfelü- letet csak a szülõkiszolgálóra telepítettük fel (4. kép). A gyer- mekkiszolgálók mindössze annyit tesznek, hogy ellenõrzési adataikat passzív ellenõrzési módszerrel egyszerûen áttöltik a szülõkiszolgálóra. Ennek kivitelezéséhez egy OCSP parancsot adtunk ki, ami lefuttatja az adatokat a Nagios szülõkiszolgálóra 4. kép Nagios-szolgáltatásrészletek közvetítõ parancsfájlt. Azáltal, hogy a parancsfájl futtatására az OCSP parancsot használjuk, minden egyes Nagios-ellenõrzési legegyszerûbb (de nem az egyetlen) módja, ha kihasználjuk folyamat után le fog futni. Éppen ezért tulajdonképpen csak

az NSClient képességeit. Az NSClient programot windowsos a gyermekkiszolgálóknak kell aktív ellenõrzéseket futtatniuk. © Kiskapu Kft. Minden jog fenntartva gépeinken szolgáltatásként futtassuk. Futtatásához nyissunk Így a Nagios-szülõkiszolgálónak csak a webfelületet kell meg egy kaput a Windows-kiszolgálón – biztonsági okokból futtatnia, illetve hiba esetén elküldenie a jelentést. érdemes jelszóval védeni a kapuelérést. Írásom születésekor Most, hogy körülbelüli képet kaphattunk arról, hogyan állítot- még nem lehetett titkosítást használni a program és a Nagios tuk be a Nagiost, engedjék meg, hogy elmeséljem, milyen kiszolgáló közötti kapcsolatban. A bõvítmény lehetõvé teszi, elõnyökkel járt a használata. Ennek az évnek az elején vásá- hogy elérjük a kiszolgáló memória- és lemezfoglaltságát, a roltunk egy TempTrax nevû digitális hõmérõt, ami együttmû- processzorteljesítményt, illetve egyéb olyan adatokat, amiket ködött a Nagiosszal. A hõmérõt fõ számítógéptermünk hõmér- Windows alatt egyébként a teljesítménykezelõ (performance sékletének a megfigyelésére használtuk. Március eleje környé- manager) eszköz segítségével érhetnénk el. kén aztán kiderült, milyen fontos is számunkra a Nagios. Egyik Linux- és Unix-rendszereinkhez némileg eltérõ módszert hasz- pénteken körülbelül déltájt üzenetet kaptam, miszerint a szá- nálunk. A Nagios Service Check Acceptor (NSCA) nevû prog- mítógépterem hõmérséklete emelkedik. Miközben öltözköd- ramot démonként futtatjuk az inetd alól. A program haszná- tem, a rendszer válságos helyzetrõl szóló üzeneteket kezdett latához a Nagios egy check_nsca nevû bõvítményt indít el, nekem küldözgetni a számítógépszoba hõmérsékletével kap- ami titkosított csatornát hoz létre a két számítógép között, majd csolatban. Mire beértem a munkahelyemre, a hõmérséklet a bõvítmény segítségével lefuttatja a számítógép ellenõrzéséhez 80 fok körül volt, és egyre emelkedett. A Nagiosnak hála elég szükséges kódokat. A rendszer beállítása magától értetõdõ: idõm maradt, és fel tudtam hívni a légkondicionálásért felelõs válasszuk ki a két gép között használható titkosítási módszert, szakembereket, akik megjavították a berendezést, még mielõtt majd az ügyfélen adjuk meg a plugin parancsot. Ezt követõen a számítógépeket komoly kár érte volna. Késõbb kiderült, hogy az adatokat máris átszipkázhatjuk Nagios rendszerünkre. a számítógépszoba A/C egységét vezérlõ másik két rendszer Mint azt korábban említettem, jelenleg éppen azzal foglalko- képtelen volt kitárcsázni és riadóztatni a rendszert felügyelõ zunk, hogy a Nagios által alapértelmezés szerint használt fáj- szakembereket. Ha a Nagios nem figyelmeztetett volna lokat háttéradatbázisba töltsük át. Ezt a módszert arra szeret- bennünket a számítógépszobában elõállt hibára, másnap reggel nénk használni, hogy jobb adatábrázolást érjünk el olyan esz- sokkal nagyobb bajjal találtam volna szemben magam. közök segítségével, mint például a Crystal Reports. A Nagios Egészében véve azt kell mondanom, hogy a Nagios kiváló önmagában is támogat két adatbázis-kezelõt: a MySQL-t és hálózati megfigyelõeszköz. Keretrendszerrõl van szó, ami PostgreSQL-t. A Nagios rendszerrel együtt néhány parancsfájlt önmagában nem túl sok mindenre képes, de pontosan ez az, kapunk, amelyek elõállítják az adatbázist, és elkészítik Nagios ami olyannyira nagyszerû eszközzé teszi. Mivel keretrendszer, rendszer mûködéséhez szükséges táblákat és mezõket. Mi a csak azt végzi el, amire szükségünk van. Lévén nyílt, a bõvít- PostgreSQL mellett döntöttünk. Az adatbázis felállítása után ményeket tervezni hozzá éppolyan egyszerû, mint ellenõrzési a --with-mysql-xdata vagy a --with-pgsql-xdata adatainknak Nagios által is érthetõ formátummá alakítása. kapcsolók valamelyikével újra futtatnunk kell a beállítási pa- Így a bõvítményünk mindent felhasználhat, amit csak a Nagios rancsfájlokat. Az xdata úgy állítja be a rendszert, hogy min- nyújtani tud, és ez nem kevés. Végül a Nagios olyasvalami, denhez adatbázisokat használjon. Jelenleg az egyetlen dolog, amire mindenképpen vetnünk kell legalább egy pillantást ami nem támogatja az adatbázisokat, maga a beállításfájl. – helyi telepítésünkön akár ki is próbálhatjuk. Kötve hiszem, Végül egy érdekességre szeretném felhívni a figyelmet: idén hogy kiábrándulunk belõle. márciusban jött ki egy kiegészítés, mégpedig Nagios rendszer NagMIN elnevezésû Webmin bõvítménye (2. kép). Ez a rend- Linux Journal 2003. július, 111. szám szer nemcsak a Nagios webes beállítását teszi lehetõvé (mint a Nagat), hanem néhány olyan dolgot is felkínál, amit eddig egyetlen eszköz sem. Elõször is lehetõvé teszi a Nagios-beál- Richard C. Harlan lításfájlok adatbázis-támogatását. Másodszor, ha a Nagios-tele- ([email protected]) pítésünket akarjuk beállítani, igencsak jól jön kapuvizsgálat Hálózati mérnök a lenexai John Deere (port scan) képessége (3. kép). Még nem próbáltam ki e képes- Agricultural Marketing Centerben, Kansasban. ség minden lehetõségét, de állítása szerint hálózati felderítést végez, és a fellelt adatokat beilleszti a Nagios beállításfájljaiba,

www.linuxvilag.hu 2003. szeptember 47 Szaktekintély

Hogyan indexeljünk? Honlapunkon valószínûleg akad valamilyen keresõfelület – de mi a helyzet a súgóoldalak vagy a levelezõrendszer keresésével?

zámtalan oka lehet annak, ha indexeket szeretnénk fel. A példákat Red Hat 6.2-t futtató munkaállomáson, valamint rendelni a dokumentumokhoz. Az egyik ilyen gyakran Debian Woody alatt is kipróbáltuk. emlegetett ok a honlapok keresõfelülete, de ugyanígy Jelenleg Red Hat alatt csak forrásból rakhatjuk fel a SWISH-E Selképzelhetõ, hogy valaki a levelezését vagy a mûszaki doku- rendszert, továbbá felépítéséhez elõzõleg a zlib és libxml2 mentumait szeretné indexelni. Aki próbált már ilyen rendszert könyvtárakat is fel kell telepítenünk. Ha úgy tûnik, hogy készíteni, az valószínûleg jól tudja, hogy egyáltalán nem olyan valamelyiket fel kell raknunk, a terjesztésünk csomagjai között

© Kiskapu Kft. Minden jog fenntartva egyszerû dolog, mint amilyennek elsõ látásra gondolnánk. valószínûleg megtaláljuk. Példáinkban az xpdf csomagot is Számos esemény jöhet közbe, ami megakadályozza a hatékony használni fogjuk, így ezt is érdemes feltelepíteni, ha esetleg munkát. még nem tettük volna meg. Az általunk megjelölt Red Hat 7.3 A vénséges vén és nélkülözhetetlen grep és társai igen haté- munkaállomás az összes SWISH-E rendszerhez szükséges konyan keresnek szöveges adatokban. A grep, az egrep és valamennyi elõtelepítési feltételt teljesíti. rokonaik azonban nem tudnak bármit megadni nekünk. Nem A következõkben bemutatjuk a SWISH-E 2.4 használatát, ami keresnek több soron keresztül, nem tudnak rangsorolt keresési a fejlesztõcsapat szerint körülbelül a cikk megjelenésével egy eredményt megjeleníteni, és lineáris keresési algoritmusuk idõben lesz majd elérhetõ. A SWISH-E rendszert a következõ nem igazán teszi alkalmassá õket a nagyobb dokumentumok- parancsok sorozatával telepíthetjük (az x.x helyére az idõszerû kal való munkára. változatszám kerül): A HTML sem lendít sokat a dolgon. Megjelenítés-központú képességei, egyedi nyelvezete, a formázási és entitástagok % wget http://swish-e.org/Download/ serege igencsak megnehezíti a helyes értelmezést. swish-e-x.x.tar.gz Az adattárolási skála másik végén az adatbázisokba szervezett % tar zxf swish-e-x.x.tar.gz adatok állnak. Mindenhol megtalálható példa erre az SQL % cd swish-e-x.x adatbázis, amely viszonylag kifinomult keresési eszközökkel % ./configure rendelkezik, de többnyire nem fut igazán gyorsan. Néhány % make adatbázismotor – kiemelten a MySQL 4 – a kérdést gyors és % make test rendszerezett (ranked) kereséssel próbálja megoldani, viszont nem lehet a kívánt mértékben testreszabni. Ha a SWISH-E futtatható állományt, a C-könyvtárakat és Ebbõl a cikkbõl megtudhatjuk, miképpen készíthetjük el a saját a súgóoldalakat az alapértelmezett /usr/local könyvtárba indexeinket Linux alatt a SWISH-E, a Perl és az XML segítségé- szeretnénk helyezni, rendszergazdaként gépeljük be a make vel. A példákon keresztül bemutatjuk, hogyan használhatjuk install parancsot. Így a SWISH-E végrehajtható állomány a SWISH-E programot HTML-fájlok, PDF-fájlok és súgóoldalak a /usr/local/bin könyvtárba kerül. Amennyiben ez a könyvtár indexének a felépítéséhez. még nincs a PATH útvonalunkban, két dolgot tehetünk: A SWISH-E (Simple Web Indexing System for Humans – Enhan- vagy módosítjuk a megfelelõ ponttal kezdõdõ fájlt, hogy a ced) az 1994-ben Kevin Hughes készítette SWISS utódja. A SWISH /usr/local/bin könyvtárat is helyezze a PATH változóba, vagy 1996-ban hibajavítás és új képességek hozzáadása céljából átke- teljes útvonalával együtt hívjuk meg a swish-e végrehajtható rült az UC Berkeley könyvtárba. Az eredményt GPL alatt adták állományt: /usr/local/bin/swish-e. ki, és SWISH-E-re nevezték át. A fejlesztések Bill Moseley, a Most készítsük el és telepítsük a forrás Perl-könyvtárában jelenlegi projektkarbantartó vezénylete mellett tovább folytatód- található SWISH::API Perl-modult. Késõbb még szükségünk nak, Billt fejlesztõk egész csoportja segít a munkájában. lesz rá, amikor a súgóoldalaink indexeihez használt Perl-ügy- Mi a SkateboardDirectory.com-nál akkor akadtunk rá a felet készítjük el. A SWISH::API modult a szokásos Perl SWISH-E-re, amikor indexelõ eszközkészletet kerestünk. Rájöt- modultelepítési folyamattal tehetjük fel: tünk, hogy egyedülálló képességekkel bír: a SWISH-E nemcsak gyors és erõteljes eszközkészletet kínál, amivel indexeket épít- % cd perl hetünk, illetve kérdezhetünk le, de egyben kiválóan dokumen- % perl Makefile.PL tált, folyamatos fejlesztés és hibajavítás alatt áll, és Perl csatoló- % make felülettel is rendelkezik. Az is nagyon tetszett, hogy a csomag- % make test felelõs Moseley és a többi tapasztalt SWISH-E-felhasználó és -fejlesztõ általában igen gyors és pontos választ ad, ha a Ezt követõen a make install parancsot rendszergazdaként SWISH-E-levelezõlistán kérdések vagy hibák merülnek fel. begépelve telepíthetjük a SWISH-E Perl-modult. Miután a SWISH-E és a SWISH::API Perl-modult teljesen A SWISH-E telepítése feltelepítettük, a SWISH-E kipróbálásához a HTML-fájlok Példánkat egy gyári Red Hat 7.3 munkaállomáson futtattuk, nyilvántartására készítsünk egy egyszerû indexet. Ebben a amire a Software Development csomagcsoportot telepítettük példában az Linux Documentation Project (LDP) HOGYAN-

48 Linuxvilág Szaktekintély

1. lista Az sman-index-prog.pl az indexeléshez súgóoldalakat alakít XML formátumúvá #!/usr/bin/perl -w while ( ) { # kézikönyvoldalak # szakaszolása use strict; $line1 = $_ if $line1 =~ /^\s*$/; use File::Find; $manpage .= $lineM = $_ unless /^\s*$/; if (s/^(\w(\s|\w)+)// my ($cnt, @files) = (0, get_man_files()); || s/^\s*(NAME)/$1/i){ warn scalar @files, " man pages to chomp( my $sec = $1 ); index...\n"; $h{$cur_section} .= $cur_content; for my $f (@files) { $cur_content = ""; warn "processing $cnt\n" unless ++$cnt % 20; $cur_section = $sec; # új szakasz név my ($hashref) = parse_man($f); } my $xml = make_xml($hashref); $cur_content .= $_ unless /^\s*$/; my $size = length $xml; } print "Path-Name: $f\n", $h{$cur_section} .= $cur_content; "Document-Type: XML*\n",

"Content-Length: $size\n\n", $xml; # megvizsgálandó a NAME, HEAD, FOOT, © Kiskapu Kft. Minden jog fenntartva } # (és esetleg a fájlnév is). close(FH) or die "Failed close on pipe sub get_man_files { # angol kézikönyvoldalak to man"; # keresése @h{qw(A_AHEAD A_BFOOT)} = ($line1, $lineM); my @files; my ($mn, $ms, $md) = ("","","",""); chomp(my $man_path = $ENV{MANPATH} || # NAME mn, DESCRIPTION md, & SECTION ms `manpath` || ´/usr/share/man´); for(sort keys(%h)) { # elõször A_AHEAD # find( sub { & A_BFOOT my $n = $File::Find::name; my ($k, $v) = ($_, $h{$_}); # key&val push @files, $n # másolása if -f $n && $n =~ m!man/man.*\.! if (/^A_(AHEAD|BFOOT)$/) { }, split /:/, $man_path ); # look for the ´section´ in ()´s return @files; if ($v =~ /\(([^)]+)\)\s*$/) } {$ms||= $1;} sub make_xml { # a tömb XML-változat kiírása } elsif($k =~ my ($metas) = @_; s/^\s*(NOSECTION|NAME)\s*//) { my $xml = join ("\n", my $namestr = $v || $k; map { "<$_>" . escape($metas->{$_}) . if ($namestr = "" } ~ /(\S.*)\s+--?\s*(.*)/) { keys %$metas); $mn ||= $1 || ""; my $pre = qq{\n}; $md ||= $2 || ""; return qq{$pre$xml\n}; } else { # ez a regex hibázhat. } $md ||= $namestr || $v; sub escape { # az átadott számokat módosítja! } return "" unless defined($_[0]); } s/&/&/g, s//>/g } for $_[0]; if (!$ms && $file =~ m!/man/man([^/]*)/!) { return $_[0]; $ms = $1; # a sec-et a path-ból } # vesszük ha nem található } sub parse_man { # ez a lényeg ($mn = $file) =~ s!(^.*/)|(\.gz$)!! my ($file) = @_; unless $mn; my ($manpage, $cur_content) = (´´, ´´); my %metas; my ($cur_section,%h) = qw(NOSECTION); @metas{qw(swishtitle sec desc page)} = open FH, "man $file | col -b |" ($mn, $ms, $md, $manpage); or die "Failed to run man: $!"; return ( \%metas ); # ref visszaadása 5- my ($line1, $lineM) = # kulcsos tömbnek. (scalar() || "", ""); }

jainak egy oldal/fejezet alapú változatának HTML-oldalait HTML indexelése a fájlrendszeren fogjuk indexelni, ami a ~/HOWTO-htmls/ könyvtárba kerül. A SWISH-E alapú index létrehozásának elsõ lépése a beállí- A cikkben felhasznált LDP-dokumentumok a tásfájl elkészítése. Hozzunk létre egy ~/indices nevû könyvtá-  http://www.tldp.org/docs.html oldalról származnak. rat, majd lépjünk bele, és a következõket írjuk be egy

www.linuxvilag.hu 2003. szeptember 49 Szaktekintély

./howto-html.conf nevû állományba:

# howto-html.conf IndexDir ../HOWTO-htmls/

IndexOnly .html

IndexFile ./howto-html.index

Az IndexDir parancs adja meg azt a könyvtárat, ahol a SWISH- az indexelendõ fájlokat keresi. Az IndexOnly utasítás jelzi, hogy csak a .html végzõdésû állományokat kell indexelni. Végül a létrehozandó index helyét a IndexFile utasítás adja meg.

Az elsõ indexünk A következõ paranccsal készítsük el HTML-fájlindexünket: 1. ábra HTML indexelése a fájlrendszeren SWISH-E rendszerrel

© Kiskapu Kft. Minden jog fenntartva % swish-e -c howto-html.conf

A -c kapcsoló adja meg, hogy melyik SWISH-E beállításfájlt kell felhasználni. Régebbi rendszereken az index elkészítése akár perceket is igénybe vett, egy mai gépen azonban egy perc alatt végezni kell. Az 1. ábra a HTML-fájlok SWISH-E alapú indexelésének folyamatát mutatja be a fájlrendszeren.

Keresés az indexben Próbáljuk ki az új indexünket, és végezzünk el egy egyszerû keresést, ami megadja az NFS-kifejezéssel kapcsolatos HTML- fájlokat. A SWISH-E indexeket a swish-e végrehajtható állomány segítségével gyorsan és könnyen tesztelhetjük, ha az indexet a -f kapcsolóval adjuk meg, majd a keresett szöve- get a -w kapcsoló után írjuk. A SWISH-E indexek keresései kis- és nagybetûérzékenyek. Mivel igen sok oldalt (vagy találatot) várunk, ami tartalmazza az NFS szót, a -m 3 kapcsolóval háromra korlátozzuk a keresések számát:

% swish-e -f howto-html.index -m 3 -w nfs 2. ábra Tetszõleges adatok indexelése külsõ programmal és SWISH-E-vel

Az elõzõ sor a következõket adja vissza (rövidítve és újraformázva): technikailag csak javasolt rész a SWISH-E létrehozásakor, 1000 ../HOWTO-htmls/NFS-HOWTO/performance.html majdhogynem elõkövetelmények számít. "Optimizing NFS Performance" 33288 998 ../HOWTO-htmls/NFS-HOWTO/intro.html A SWISH-E keresési formátumának alapjai "Introduction" 10966 A SWISH-E teljes értékû szövegkeresõ nyelvvel rendelkezik, 993 ../HOWTO-htmls/NFS-HOWTO/security.html amelynek formátumában megtalálható az AND, OR, NOT logikai "Security and NFS" 35968 szerkezet és a zárójelezés. Valamennyi az elvárásoknak megfe- lelõen mûködik. Például a következõ kereséseknek logikus Nem rossz – ezek az oldalak egyértelmûen az NFS-rõl formátumú a szerkezete: szólnak, és a kimenet is intuitív. Az elsõ oszlop a SWISH-E által adott helyezés. A leginkább ide tartozó találatok mindig % swish-e -f howto-html.index -w nfs AND tcp 1000-es helyezést kapnak, míg a kevésbé ide tartozóak egyre % swish-e -f howto-html.index -w nfs OR tcp kisebb rangot. A második oszlop a fájlnevet mutatja, a har- % swish-e -f howto-html.index -w ´(gandalf OR madik az oldal címét adja meg, míg a negyedik az indexelt frodo) OR (lord AND rings)´ adat bájtszámlálója. A SWISH-E egyik HTML-értelmezõ motorjának segítségével a HTML-tagokból minden egyes A beállításfájl oldal címét meghatározza. A SWISH-E beállításfájljai egyszerû szöveges állományok, A beépített SWISH-E értelmezõ motorok neve TXT, HTML és amelyekben minden egyes sor parancs vagy megjegyzés lehet. XML. Valamennyi értelmezõ a nevének megfelelõ adattípus Azokat a sorokat, amelyekben az elsõ nem üres karakter a # kezelésére képes. A SWISH-E jelenlegi változatai már képesek (kettõs kereszt), a SWISH-E megjegyzésként figyelmen kívül a libxml2 könyvtár HTML2 és XML2 értelmezõ hátterét is hagyja. Minden más nem üres sornak a következõ formátu- használni. A beépített változatokkal szemben inkább az XML2 múnak kell lennie: és a HTML2 értelmezõ használatát javaslom, különösen igaz ez a HTML2 esetében. Ez az oka annak, hogy a libxml2, bár Utasítás kapcsoló [érték] ...

50 Linuxvilág Szaktekintély

Amennyiben üres karaktereket tartalmazó kapcsolót kell Beállításfájlunk utolsó, de nem kevéssé fontos bejegyzése a megadnunk, idézõjeleket használunk: MetaNames utasítás. Ez a sor különleges képességgel ruházza fel az indexünket: lehetõségünk nyílik csak a címekben vagy Utasítás "kapcsoló üres karakterekkel!" fájlnevekben keresni. Írjuk meg az indexelendõ PDF-fájlokról adatokat visszaadó Amennyiben a kapcsoló egyszeres idézõjelet (aposztrófot) külsõ programot! Hagyományosan a SWISH-E forrásával tartalmaz, a kettõs idézõjelet használjuk, és vice versa, például: együtt egy pdf2xml.pm nevû példamodult is kapunk, ami az xpdf csomagot használva PDF-fájlokat alakít át XML Utasítás "Fred´s Index Option" formátumúvá, megjelölve õket a SWISH-E által használ- Utasítás ´Josh "joshr" Rabinowitz alkotása´ ható elõtagokkal. Ezt a modult (a ~/indices könyvtárba másolva) a howto-pdf-prog.pl nevû külsõ programunkban (és ha a szöveg mindkét fajta idézõjelet tartalmazza, akkor felhasználhatjuk: sajnáljuk: – a ford.) #!/usr/bin/perl -w A SWISH-E beállításfájljaiban tucatnyi parancsot adhatunk use pdf2xml; meg, a SWISH-E leírásában kimerítõ listát találunk róluk. my @files = `find ../HOWTO-pdfs/ -name ´*.pdf´

Az index -print`; © Kiskapu Kft. Minden jog fenntartva Minden SWISH-E index egy fájlpárban tárolódik. Az egyik for (@files) { fájl neve az IndexFile utasítás alapján készül, a másik chomp(); neve mindig indexname.prop lesz. Ha SWISH-E indexrõl my $xml_record_ref = pdf2xml($_); beszélünk, mindig erre a fájlpárra gondolunk. # Ez egy XML fájl Az indexek elég nagyra nõhetnek. Az iménti HTML-fájlindexelõ # SWISH-E fejléc példánkban használt index 11 MB-ot foglalt el – ez körülbelül print $$xml_record_ref; az egynegyede az eredeti, beindexelt állományok méretének. }

PDF-állományok indexelése Miután a SWISH-E beállításfájllal és a fenti külsõ programmal Egészen mostanáig csak a HTML-, XML- és szövegfájlok felvérteztük magunkat, készítsük el az indexet: indexelésérõl beszéltünk. Nézzünk meg egy haladóbb példát: indexeljünk be a Linux Documentation Project PDF- % swish-e -c howto-pdf.conf -S prog dokumentációit. Ahhoz, hogy a SWISH-E tetszõleges (PDF- vagy egyéb) fájlokat A -S prog kapcsoló mutatja meg a SWISH-E-nek, hogy az indexelhessen, az állományokat elõbb szöveges fájlokká kell IndexDir valójában egy program, ami az indexelendõ alakítani, lehetõleg HTML vagy XML alakúra, majd a SWISH-E adatokról ad vissza információkat. Amennyiben a -S prog segítségével indexelnünk kell az eredményt. kapcsolót elfelejtjük megadni, miközben külsõ programot A PDF-fájlokat tehát úgy indexelhetjük, ha a lemezen mind- használunk a SWISH-E-hez, magát a külsõ programot fogjuk egyiket átalakítjuk, majd indexeljük õket. Ehelyett azonban indexelni és nem az általa leírt dokumentumokat. inkább megragadjuk az alkalmat, és egy rugalmasabb indexe- Miután a PDF-index elkészült, próbáljunk ki egy keresést: lési megoldást mutatunk be: a SWISH-E programozott elérési módszerét (2. ábra). % swish-e -f howto-pdf.index -m 2 -w boot A PDF-állományok indexelését a SWISH-E beállításfájl létre- disk hozásával kezdjük. Nevezzük el howto-pdf.conf-nak, majd a következõ tartalommal töltsük fel: Ilyesféle eredményt kell kapnunk:

# howto-pdf.conf 1000 ../HOWTO-pdfs/Bootdisk-HOWTO.pdf IndexDir ./howto-pdf-prog.pl "Bootdisk-HOWTO.pdf" 127194 # prog file to hand us XML 983 ../HOWTO-pdfs/Large-Disk-HOWTO.pdf # docs "Large-Disk-HOWTO.pdf" 85280 IndexFile ./howto-pdf.index # Index to create. A MetaNames utasítás alkalmazása folytán címek és a PDF- UseStemming yes fájlok útvonala szerint is kereshetünk: MetaNames swishtitle swishdocpath % swish-e -f howto-pdf.index -w Itt az IndexDir utasítás most azt jelenti, hogy a SWISH-E swishtitle=apache e külsõ program meghívásával kapja meg az indexelendõ % swish-e -f howto-pdf.index -w állományok adatait, és nem a könyvtárban található fáj- swishdocpath=linux lokat használja. A UseStemming yes utasítás hatására a SWISH-E indexelés vagy keresés elõtt kikeresi a szavak A keresések minden kombinációja támogatott, például: tövét. E nélkül a szolgáltatás nélkül a „runs” szó keresésekor a „running” szót tartalmazó dokumentumokat nem találná % swish-e -f howto-pdf.index -w ´(larry and meg. A szótõkereséssel a SWISH-E felismeri hogy a „runs” wall) és „running” szavak töve azonos, és megtalálja a megfelelõ OR (swishdocpath=linux OR dokumentumokat. swishtitle=kernel)´

www.linuxvilag.hu 2003. szeptember 51 Szaktekintély

Az elõbbi példában azért szükséges idézõjeleket használnunk, Végül nézzük meg, hogyan használhatunk SWISH::API-t hogy a zárójeleket megóvjuk a héjprogram értelmezésétõl. alkalmazó Perl-parancsfájlokat az imént elkészített indexhez, létrehozva ezzel a unixos apropos parancs egy fejlettebb Súgóoldalak indexelése változatát. A kódot a 2. listában (51. CD Magazin/SWISH-E Utolsó példánkban megmutatjuk, hogyan készíthetünk súgó- könyvtárában) találjuk (sman). Lássuk röviden a szerkezetet: oldalainkhoz hasznos és hatékony indexeket, és miként hasz- az 1–14. sor az alapértékeket állítja be és a parancssori kapcso- nálhatjuk a SWISH::API Perl-modult az index-keresõfelület lókat értelmezi, a 15–23. sor kezeli a lekérdezést, illetve felüle- kialakításához. Ahogy eddig is, a munkát a beállításfájl tes hibakezelést végez, végül a 24–39. sor jeleníti meg a lekér- elkészítésével kezdjük: dezés eredményét a SWISH::API-n keresztül visszakapott Properties alapján. # sman-index.conf A Perl-ügyfél ilyen egyszerû. Próbáljunk meg súgóoldalainkból IndexFile ./sman.index kikeresni egy témát: # elkészítendõ index. IndexDir ./sman-index-prog.pl % ./sman -m 1 boot disk IndexComments no # a megjegyzések szövegeit nem indexeljük Az alábbit kell visszakapnunk: UseStemming yes

© Kiskapu Kft. Minden jog fenntartva MetaNames swishtitle desc sec ootparam (7) Introduction to boot time para... PropertyNames desc sec Ugyanakkor már a következõképpen is kereshetünk: A legtöbb utasítás jelentését már korábban bemutattuk, most azonban néhány új MetaNames nevet is megadtunk, illetve % ./sman sec=3 perl egy új, PropertyNames nevû parancsot vezettünk be. Dióhéjban összefoglalva: a MetaNames határozza meg, Ezáltal a keresést a 3. szakaszra korlátozzuk. Továbbá az sman hogy mi alapján keressen a SWISH-E. Az alapértelmezett program elfogadja a --max=# parancssori kapcsolót, ami MetaName a swishdefault, azaz ha a lekérdezésben nem korlátozza a visszaadott találatok számát, a --file kapcsolót, adunk meg MetaName kapcsolót, akkor ez alapján fog ami megmutatja a keresett szavakat tartalmazó fájl nevét, és keresni. A PropertyNames a visszaadott találatok leírására a --rank kapcsolót, ami az adott lekérdezésen belül kapott használható mezõ. rangot mutatja meg: A SWISH-E által visszaadott eredmény általában az Auto Properties (önmûködõ tulajdonságok parancs) szerint % ./sman --max=1 --file --rank boot jelenik meg, ilyen a swishtitle, swishdesc, swishrank és a swishdocpath. A beállításunkban olvasható MetaNames A fenti parancs a következõ eredményt adja: utasítás azt jelenti, hogy egymástól függetlenül nemcsak a teljes dokumentum, hanem csak a címek, a leírás vagy a sza- 1000 lilo.conf (5) configuration file for lilo kasz alapján is keresni szeretnénk. A PropertyNames sor /usr/man/man5/lilo.conf.5 mutatja meg, hogy minden egyes találat visszaadásakor a sec és desc tulajdonságot szeretnénk látni, vagyis az oldal sza- Figyeljük meg, hogy a rang az elsõ, míg a forrásfájl az utolsó kaszát (sec) és rövid ismertetõjét (desc). oszlopba kerül. A súgóoldalak XML formátumúvá alakítását és SWISH-E A sman csomag fejlettebb változatát a fejlécekké formázását az 1. listában látható módon végezzük  http://joshr.com/src/sman/ címen érhetjük el. (sman-index-prog.pl). Az 1. lista elsõ ciklusa lesz a program fõ váza. Itt pillantunk Összefoglalás bele minden egyes súgóoldalba, szükség szerint értelmezzük, A SWISH-E rendszerének van két említésre érdemes árnyoldala XML-é alakítjuk át, majd a SWISH-E igényeinek megfelelõ is. Elõször is: csak a 8 bites ASCII adatokat kezeli. Másodszor: fejlécekkel egészítjük ki: a SWISH-E indexbõl nem lehet elemeket törölni, a törléshez a teljes indexet újra létre kell hozni. A mérleg másik serpenyõ- • A get_man_file() a File::Find függvényt használja jében a SWISH-E számos olyan képességét találjuk, amit itt még a súgóoldalak könyvtáraiban, hogy megtalálja a feldol- csak megemlíteni sem tudtunk. A részleteket a SWISH-E gozandó súgófájlokat. honlapján, a  http://www.swish-e.org címen találhatjuk meg. • A make_xml() és az escape() együtt a parse_man() által visszaadott hashref-bõl készíti el az XML formátumot. A cikkhez tartozó listák megtalálhatóak az 51. CD Magazin/ • A parse_man() végzi el a trükkös részt, kiemelve a szük- SWISH-E könyvtárában. séges mezõket a súgóoldal forrásából. Linux Journal 2003. július, 111. szám Most, hogy már megismertük a mûködését, használjuk is aprogramunkat: Josh Rabinowitz % swish-e -c sman-index.conf -S prog 13 éve a programipar veteránja, aki tudását a NASA Ames-i kutatóközpontjában, illetve Miután ezzel megvagyunk, a swish-e -w kapcsolóját a CNET.com-nál és egyéb webcégeknél alkalmazva a korábbiakhoz hasonló módon kipróbálhatjuk csiszolgatta. Jelenleg független tanácsadó és a rendszert. a SkateboardDirectory.com kiadója.

52 Linuxvilág Szaktekintély

Inverz kinematika a Blenderben

Ismét eljött az ideje, hogy új tudásra tegyünk szert a Blender képességeinek megismerése során.

emélem, kedves olvasóim, Mozgás! helyére kerül. Szüntessük meg a kije- R mára már sikerült kellõképpen Mint azt a korábbi részekben emlí- lölést, és az elõbbi módon hozzunk létre elmélyedni a korábban elsajá- tettem, az inverz kinematika teszi lehe- egy új vázat. Mivel ennek az irányító tított ismeretekben, így a továbbiakban tõvé, hogy amikor valamilyen tárgyat váznak a részei nem csatlakoznak nem fog gondot okozni a program mozgatunk, annak mozgása ne csak egymáshoz, újra szüntessük meg a használata és különféle lehetõségeinek önmagában létezõ legyen, hanem kijelölést, és a fõ vázon a lábfej végét megértése. a mozgás során az összekapcsolt tár- kijelölve helyezzük el ide a kurzort

Ebben a hónapban azt szeretném rövi- gyak egymásra hatása is megjelenjen. (a SHIFT-S ismételt alkalmazásával). © Kiskapu Kft. Minden jog fenntartva den bemutatni, hogy karaktereinkhez Egyszerû példaként az emberi kar moz- Szüntessük meg ismét a kijelölést, majd hogyan készíthetünk inverz kinematika gása hozható fel, hiszen nem helyezhe- a vezérlõ vázat kijelölve váltsunk szer- által mozgatott csontvázakat. Kezdetben tem tetszõleges helyre a kézfejemet kesztõmódba. Itt következik a másik egy egyszerû módszert szeretnék aján- anélkül, hogy az alkar és a felkar is ne vezérlõrész létrehozása, vagyis a fõme- lani a karaktermodellezés mikéntjével mozogna, és a kézfejhez kapcsolódó nübõl ismételten válasszuk ki az Arma- kapcsolatban. Egy csomó felesleges testrészek hosszúsága is korlátozza ture pontot. Ezek után a létrehozott munkától kímélhetjük meg magunkat, a kézfej mozgását. csontoknak adjuk a „Sarok”, illetve a ha betartjuk az alábbi sorrendet. Úgy gondolom, ennyi bevezetõ után „LábfejControl” nevet. Amennyiben elkezdhetjük a gyakorlati munkát. Egy mindent jól csináltunk, a továbbiakban A terv három ízbõl álló csontváz mozgását Elõször gondoljuk át, hogyan fog kinéz- tanuljuk meg, ennek alapján a késõb- 1. ni a karakter, majd készítsünk minél biekben bonyolultabb vázakat is képe- részletesebb rajzokat róla. Ezeket késõbb sek leszünk mozgásra bírni. Oldalnézet- a modellezés során is felhasználhatjuk, ben hozzunk létre egy három részbõl hiszen a pontos modellezéshez elenged- álló vázat a Fõmenü/Add/Armature hetetlenek. Természetesen a mintázato- menüpontok kiválasztásával. Az egyes kat is könnyebben elkészíthetjük, ha részeket nevezzük el fentrõl lefelé, a egyszer már megrajzoltuk õket. Készít- „Comb”, „Lábszár” és a „Lábfej” megne- sünk elöl-, oldal- és felülnézeti képeket, vezéseket használva. Ehhez ki kell je- és a modellezõprogramban használjuk lölni a vázat, majd a TAB billentyû alkal- õket háttérképként és segítségként egy- mazása után minden részt is az A bil- aránt. A rajzok mellett legalább elkép- lentyûvel. Ekkor az F9 billentyûvel vált- zelés szintjén szükségesnek tartom a sunk át a szerkesztõnézetbe, majd a háromszögek elhelyezkedésének átgon- nézet közepe felé látható „Bone” neve- dolását is. A következõ lépésben tervez- ket változtassuk a fentieknek megfele- zük meg, hogy milyen mozgásokat lõkre. Ezt csupán azért kellett megtenni, kell végeznie a figurának, és gondoljuk hogy a kedves olvasók hozzászokjanak át a csontváz szerkezetét. Modellezés a nevek használatához, hiszen amikor során a csontváz létrehozásával kezdjük, emberi csontvázat készítünk, köny- erre könnyebben felépíthetjük majd a nyebben eligazodunk az ismerõs nevek figurát. Ezután következhet a modell között, mint a számozott csontok elkészítése, majd a mintázatokat képol- között. Természetesen a továbbiak vasóval és rajzprogrammal elkészítjük megértése is könnyebben megy majd, és finomítjuk. Utolsó elõtti lépésként ha például a leírás szerinti „Comb” a modell mintázatának elhelyezése és megtalálásához nem kell minden eset- pontosítása következzen, ezek után a ben a szerkesztõnézetben keresgélni mozdulatsorokat modellezzük a csont- a csontok között. Miután elneveztük váz mozgatásával. a csontokat, még egy két részbõl álló A fentiek betartásával könnyebben és vázat kell létrehozni, amivel majd befo- rövidebb idõ alatt tudunk majd mozgó lyásolhatjuk a mozgást. A szerkesztõ- figurákat modellezni, és szemet gyö- módban jelöljük ki a boka helyén lévõ nyörködtetõ animációk vagy játékok kör alakú csatlakozási pontot, majd a készítéséhez használhatjuk fel õket. SHIFT-S billentyû hatására megjelenõ Most tehát ismerkedjünk meg az inverz menübõl válasszuk a legalsó pontot. kinematika létrehozásának lehetõségeivel! Így a térbeli kurzor pontosan a boka 1. kép Kiindulás az inverz kinematikához

www.linuxvilag.hu 2003. szeptember 53 Szaktekintély

az elsõ képen látható szerkezettel dol- 2. gozhatunk. Megjegyzem, hogy a képen ALT-R Elfordulás törlése a mozgatandó váz van kijelölve, tehát F8 Váltás játéknézetre az látható rózsaszínnel jelölve, a fenti lépések után azonban a Blenderben P Játék indítása még nem látható a „LábfejControl”-t és ESC Játék leállítása a „Sarok” vastagabbik végét összekötõ szaggatott vonal. Ez a vonal jelenti azt, hogy a két csont alárendelt viszonyban választanunk az IK Solver típust. áll egymással, és a helyes mozgáshoz Ennek hatására a típus alatt megjelenik OB ezt is be kell állítani. Ezt a két csontot egy szerkesztõmezõ, ahová be kell 2. kép Kiindulás a játékhoz a szerkesztõmódban kijelölve a szer- írni azt az objektumot, amellyel vezé- kesztõ nézetben megjelenik a csontok relni fogjuk a csontváz mozgását. Ebben neve és az is, hogy milyen viszonyban az esetben nem neveztük át a két csont- 3. vannak egymással. Ezt az információt ból álló vázat, így annak neve Arma- a név mellett látható child of mezõ tar- ture.001 maradt. Ezt kell a billentyûzet talmazza, és nekünk kell most beállítani segítségével beírnunk az OB mezõbe.

© Kiskapu Kft. Minden jog fenntartva a „Sarok”-nak ezt a tulajdonságát. Tehát Ahogyan ezzel elkészültünk, megjelenik a „Sarok” sorában válasszuk ki a legör- egy újabb szerkesztõmezõ, ahová a dülõ listából a „LábfejControl” csontot. „Sarok” nevet kell beírni, hiszen ez a Így a létrehozott szerkezet már valóban csont fogja vezérelni a teljes csontváz megfelel az elsõ képen láthatónak. mozgását. Ezzel készen is vagyunk. Szüntessük meg a kijelölést, és a két Inverz kinematikai rendszer részbõl álló váz mozgatásával máris egy 3. kép A kezdõsebesség beállítása Ezek után nem sok teendõnk van, mûködõ rendszert láthatunk. csupán a Blenderrel kell tudatni, hogy Felmerülhet a kérdés, hogy ha ez ilyen a háromízû váz. Itt kell megemlítenem, ezek a részek tulajdonképpen egy egyszerû, akkor miért volt szükség a hogy a Track to elemet más esetekben inverz kinematikai rendszert alkotnak. „LábfejControl” vázrész létrehozására. is eredményesen használhatjuk, például Itt lesz szükségünk az elõzõ részben Nos, ezzel tudjuk majd a lábfej elfor- amikor a kamerának követnie kell egy olvasottakra, nevezetesen a helyzetmód dulását szabályozni. Ennek eléréséhez objektum mozgását – alkalmazzuk alkalmazására. Elõször azonban az eset- azonban újra az elõbbi korlátozó ténye- bátran ezt az elemet. A Copy Location leges elfordulásokat és az egyéb változ- zõkhöz kell újakat adnunk. Jelöljük ki és a Copy Rotation elemek használata tatásokat mindkét vázrészen meg kell megint a fõ vázat, majd helyzetmódba magától értetõdõ, így ezekkel most nem szüntetni. Ezt az ALT-R billentyûkkel váltva a „Lábfej”-et is. Adjunk újabb foglalkozom részletesen. érhetjük el, de ne lepõdjünk meg, ha a korlátozó elemet az Add gombbal a váz- vázak helyzete megváltozik, hiszen így részhez, ezúttal azonban az alapértel- Játék megalkotása alaphelyzetbe kerülnek, ami megköny- mezett Track to típusú elemen a típust Úgy gondolom, hogy mostanra már nyíti további munkánkat. Végezzük el hagyjuk változatlanul. Az OB ismét az eleget tudunk a Blenderrõl ahhoz, hogy ezt a mûveletet mindkét vázon. Ezután Armature.001 legyen, azonban az elem- elkészítsük elsõ egyszerû játékunkat. jelöljük ki a három részbõl álló csontvá- hez tartozó csontként most a „Lábfej- A jobb érthetõségért célszerû tisztáz- zat, majd a CTRL-TAB billentyûkkel vált- Contol”-t kell beállítani. Az eredménye- nunk néhány alapvetõ dolgot. sunk helyzetmódba. Néhány ablakkezelõ ket megszemlélve látható, hogy a váz- A Blenderben a játékmotorban négyféle ezt a billentyûkombinációt az alkalma- rendszer a „Sarok” mozgatásával most elemtípust találhatunk. Az egyik a tulaj- zások közötti váltásra tartja fenn, ezért megfelelõen mozgatható, és a két rész- donság, amely egy-egy tárgyunk sajátja, helyette használhatjuk a nézet alján bõl álló váz forgatásával a lábfej külön is és típusa a különféle programozási lévõ gombok közül azt, amelyiken egy képes forogni. Ha jobban megfigyeljük, nyelvekben megszokottaknak megfele- sárga fejecske látható. Ez a rétegek akkor azt is észrevehetjük, hogy a lõen lehet egész, valós, logikai és megjelenítéséért felelõs gombok után mozgás nem tökéletes. Néhány helyzet- szöveg. Itt lehetõségünk nyílik egy a tizenkettedik. ben az egész láb kifordul, nem tudjuk úgynevezett Timer típusú tulajdonság Amikor ebben a módban dolgozunk, például vízszintesen elõrenyújtani. Ezen használatára is, ennek kezdõértéket a kijelölt csontváz kék színnel jelenik további korlátozó elemek létrehozásával adhatunk, majd az értéke önmûködõen meg. A sikeres váltás után jelöljük ki a könnyen segíthetünk. Szintén a fõ növekszik. A második típus az érzékelõ, „Lábfej”-et, és a szerkesztõnézet bekap- vázon kell dolgoznunk, de elsõ lépésben amellyel különféle események bekö- csolása mellett látható, láncszemeket a „Comb”-ot jelöljük ki. Adjunk egy vetkezésekor indíthatunk el valamilyen ábrázoló gomb segítségével váltsunk át újabb Track to elemet a vázrészhez, en- folyamatot. Ennek típusa is többféle a korlátozásokat és kapcsolatokat meg- nek célját állítsuk az Armature.001 ob- lehet, itt azonban csak a Keyboard, a határozó nézetre. Itt kell majd meg- jektum „LábfejControl” csontjára. A kö- Always és a Collision típusú érzékelõket adnunk, hogy melyik rész milyen kap- vetkezõ lépés legyen a „Lábszár” elem- fogjuk használni – ezekkel részletesen csolatban van a többiekkel. Az Add hez egy újabb korlátozó tényezõ hozzá- foglalkozom. A Keyboard alkalmas gombbal hozzunk létre egy új elemet, adása, célja szintén az Armature.001 különféle billentyûzettõl érkezõ ese- és a megjelenõ vezérlõk között keressük váz, de itt a követendõ csont a „Sarok” mények figyelésére, megadható, hogy meg a Constraint type mezõt. Ez a kis lesz. Ezeket a lépéseket megtéve már melyik billentyû lenyomására legyen x mellett található, és a listából ki kell minden pozícióban helyesen fog állni érzékeny, milyen módosítóbillentyûkkel

54 Linuxvilág Szaktekintély

4. foglalkozzam, a dinamikai tulajdonsá- gokkal. Az anyagszerkesztõben a színek meghatározása mellett találhatunk egy Dyn feliratú gombot, ezt bekapcsolva megadhatjuk az adott anyag rugalmas- ságát, tapadási együtthatóját és azt, hogy mennyi perdületet szerezzen az ütközés után. Ezek használatához azon- ban a játéknézetben is be kell állítani 4. kép A pattogás logikája a Actor gomb alatt található Do Fh kapcsolót. együtt figyelje a billentyû lenyomását, matos pattogás. Ezt úgy tudjuk megva- Miután létrehoztuk az érzékelõket, és hogy amikor az adott billentyût lósítani, hogy egy érzékelõt helyezünk és meghatároztuk, hogy a jelzés hatá- lenyomtuk, akkor a tárgyunk milyen a tárgyra, ami a síklap elérésekor jelez, sára a tárgynak milyen tevékenységet tulajdonsága változzon meg. Az Always és ekkor a kockának új irányt adunk. kell végeznie, már csak a kettõ közötti típusa érzékelõ, tehát a megadott gya- Tehát a következõ lépésben a nézet kö- kapcsolatot kell meghatározni. Erre korisággal jelzéseket továbbít a kime- zepe felé a Sensors felirat alatt találunk szolgálnak az érzékelõk és a hatások

netén. A Collision alkalmas arra, hogy egy gombot, amivel új érzékelõt adha- közötti területen lévõ vezérlõk. Ezek- © Kiskapu Kft. Minden jog fenntartva egy megadott tulajdonsággal vagy tunk a tárgyhoz. Az Add gomb alkalma- nek négy fajtája létezik, az AND és anyagtípussal rendelkezõ tárggyal való zásával hozzunk létre egy új elemet, kapcsolatot jelent a kapcsolódó beme- ütközést érzékeljen. ennek típusát pedig a megjelenõ legör- neti jelzések között, az OR vagy kap- Az eddigieket próbáljuk megvalósítani dülõ listából kiválasztva állítsuk csolatot, míg a fennmaradó kettõ a gyakorlatban is. Kiindulásként Collision-ra. Itt található még egy M/P mûködése általam jelenleg nem ismert. hozzunk létre egy gömböt, egy síklapot kapcsoló is, amivel választhatunk, hogy Szerencsére ez nem jelent gondot, és egy kockát, majd ezeket helyezzük az adott anyaggal vagy tulajdonsággal hiszen a meglévõ érzékelõk és kapcso- el a 2. képen látható elrendezésben. rendelkezõ tárggyal való ütközéskor latok elegendõek a játék elkészítéséhez. A játék célja az lesz, hogy egy akadály- jelezzen-e meg az érzékelõ. Ezt a kap- Válasszuk ki tehát a vagy kapcsolatot, pályán keresztül kijussunk a gömbbel csolót is kapcsoljuk be, majd a mellette és kössük össze a kimeneteket és a kijáraton. A kijárat a pálya másik lévõ mezõbe írjuk be a „Floor” szócskát. bemeneteket. Ezek a sárga színû körök végén lesz. Ezzel elértük, hogy az érzékelõ olyan és a telt körök az egyes elemek mellett. Kezdetben adjunk anyagot a síklapnak, tárgyakkal való ütközéskor jelezzen, Telt körrel jelölve láthatjuk a kime- és ezt az anyagot nevezzük „Floor”-nak. amiknek az anyaga „Floor” nevû. Ilyen neteket, amelyeket egyszerû kattin- Ezután a kockát kijelölve az F8 billen- tárgy jelenleg egy szerepel a jelenetben, tással és húzással az üres körrel jelölt tyûvel kapcsoljunk játéknézetbe. Itt állít- a síklap. Az érzékelõ beállítása után bemenethez köthetünk. Végsõ lépés- hatjuk be a játék mûködését meghatá- már csak azt kell megadnuk, hogy mi ként kössük az értékelõ kimenetét egy rozó tulajdonságokat, érzékelõket és történjen a jelzés hatására. A nézet jobb vagy kapcsolat bemenetéhez, majd egyéb, a mûködést befolyásoló eleme- oldalán találhatók az események ered- ennek kimenetét a mozgatást megva- ket, amelyekrõl a késõbbiekben bõveb- ményeként létrejövõ hatások. Itt is alkal- lósító hatás bemenetéhez. A 4. képen ben szólok. Most a kocka kijelölése után mazzuk az Add-ot, és az alapértelmezett látható a helyesen kialakított vezér- kapcsoljuk be a nézet bal felsõ sarkánál hatás megjelenése után állítsuk be lõrendszer. található Actor kapcsolót, ezzel tudat- annak jellemzõuit. Amikor a kocka eléri Ebben a részben eddig jutottunk, az juk a Blenderrel, hogy ennek a tárgynak a síklapot, arra van szükség, hogy újra összefoglaló táblázatban mindenki a tulajdonságait a játék futtatása során felfelé induljon el. Úgy biztosítunk megtalálja a tanult billentyûkombiná- figyelembe kell vennie. Kapcsoljuk még számára kezdõsebességet, hogy a linV ciókat; a következõ hónapban pedig a be a megjelenõ Dynamic kapcsolót is. érték Z irányú összetevõjének pozitív billentyûzetkezeléshez használható Ezzel a fizikai törvények is hatni fognak értéket adunk meg. Ez látható a 3. képen, érzékelõket mutatom be majd, és foly- a tárgyra, ami most elsõsorban a gravi- a szükséges változtatás pirossal van tatjuk a játék elkészítését. táció miatt lesz fontos, hiszen ez lesz jelölve. Én a példámban 8-as kezdõ- majd az egyik akadály, a labdának ami a sebességet határoztam meg, ami arra pálya síkja felett pattogni fog. Ha most a elegendõ, hogy a kocka addig a magas- Fábián Zoltán P billentyûvel elindítjuk a játékot, akkor ságig pattanjon fel, ahonnan elindult. ([email protected]) már láthatjuk is a mozgást, vagyis azt, Programozóként dolgozik. hogy a tárgy elkezd lefelé esni, és ami- Rugalmasság Szabadidejében szívesen kor érintkezik a síklappal, akkor megáll. Ideje, hogy egy, az eddigiek során kissé kirándul, és szeret rajzolni, Ez már fél siker, célunk ugyanis a folya- elhanyagolt anyagtulajdonsággal is érdekli a 3D grafika.

www.linuxvilag.hu 2003. szeptember 55 Szaktekintély

A PHP5 újdonságai Újraírt Zend-motor, gyorsabb futás és továbbfejlesztett objektumkezelés – mindez év vége táján várható.

yár van, mégsincs uborkaszezon a PHP háza táján. hozzáférhetõ, míg azon kívül közvetlenül nem. Viszont elér- Június végén a nagyközönség elé tárták a PHP 5.0.0-s hetõk, ha egy kis elõtaggal fejeljük meg, azaz a névtér nevével próbaváltozatát. A fejlesztés tehát eljutott elsõ nyil- és egy kettõzött kettõsponttal. A névtér elõtagot és az utána Nvános megjelenéséig (eddig csak CVS segítségével lehetett következõ változó-, állandó-, függvény-, illetve osztálynevet beszerezni), s már látni lehet az alagút végét. Számos jelentõs hívjuk az objektumközpontú világban „minõsített névnek”. változás lesz a 4-es vonalhoz képest, de semmi olyan, ami miatt Ilyen formában nemcsak a névtereken kívül tudunk hozzáférni meglévõ PHP-programjainkat újra kellene írnunk, legalábbis az azokon belül létrehozott elemekhez, de ilyen módon az

© Kiskapu Kft. Minden jog fenntartva nem nagyobb mértékben, mint az a 3-asról a 4-esre váltás során egyik névtérbõl át is nézhetünk a másikba. szükségessé vált. Nagyszámú olyan újdonság jön viszont az A PHP-értelmezõnek az sem okoz gondot , ha névterünket 5-ös változattal, amit érdemes megismerni. esetlegesen több darabban hozzuk létre, azaz ugyanazt a név- teret akár több állományban is megnyithatjuk, hogy elemeket Névterek pakoljunk bele. A névterek egymásba is ágyazhatók, azaz Hasznos újdonság lesz a PHP életében a névterek bevezetése. névtereken belül is létrehozhatunk külön névtereket. A kívül- Ez az apró kis adalék nagymértékben segítheti a nagyobb rõl való hivatkozáshoz a minõsített névben a szülõnévtértõl lélegzetû munkák szerkezetének a kialakítását, ráadásul külsõ kezdve a teljes névtércsaládfát le kell írnunk. A névtérhivat- osztálykönyvtárak és egyéb kódok anélkül könnyedén együtt kozásokat azonban egymástól csak egyszeres kettõsponttal használhatók, hogy bármiféle osztálynév-, állandó- (constans) szükséges elválasztanunk (lásd az 1. listát). vagy változónév-ütközés veszélye állna fenn. Márpedig ilyen jellegû galiba akár akkor is elõfordulhat, ha csak egyszerûen többen dolgoznak ugyanannak a projektnek más-más részein, 3. lista Az object-overloading.txt és ugyanazt a változónevet eltérõ célból veszik használatba. A névterekkel némi logikai csoportosításra is lehetõségünk hatókörrel rendelkezik. Ez annyit tesz, hogy minden, a név- tukroz_szamot térben létrehozott függvény, változó, állandó a névtéren belül ($parameterek[0]); } else { return $this-> tukroz_szoveget 1. lista A namespace.txt ($parameterek[0]); } ?php } namespace Mail { } const FELADO = '[email protected]'; $level_darab = 0; private function tukroz_szamot($szam) { function jelentes($cimzett, $szoveg) { return 0 - $szam; mail($cimzett, 'Jelentes', $szoveg, } 'From: '.FELADO); } private function } tukroz_szoveget($szoveg) { return sttrev($szoveg); echo Mail::FELADO; } echo Mail::$level_darab; Mail::jelentes('[email protected]', 'Szárazföld!'); }

?> ?>

56 Linuxvilág Szaktekintély

létezik destruktor, pedig az is hasznos eszköz lehet a tarso- Egyelõre még semmi sem biztos… lyunkban. Mielõtt egy objektum megsemmisül, esetleg érdemes lehet még egy-két rutinfeladatot végrehajtatni, ilyen például a A PHP eljövendõ új változatáról még nem sok biztosat lehet elmon- naplózás, esetleg a hibakeresésben segítõ adatok kiíratása. Erre dani, bármi és bármikor megváltozhat a végleges kiadásig. Néhol jelenleg nincs lehetõség. A C++-féle ~Osztálynév() igen hosszúra nyúlt viták következményeképpen a dolgok megerõ- függvény létrehozása sem segít. A fenti feladatokat ugyan egy södnek, eltûnnek vagy megváltoznak. A cikk írása közben például register_shutdown_function() függvényhívás segítsé- kiderült, hogy egyre kevésbé valószínû, hogy a névterek bekerülnek gével is elvégezhetjük, de ekkor a záró mûveletsor semmiféle a végleges ötös változatba. Még ez a játszma sincs lejátszva, so- közvetlen kapcsolatban nem lesz objektumunkkal. kan kardoskodnak a dolog mellett, de vannak erõs érvek az elha- Mit hoz a jövõ? Egy új létrehozó-, illetve megszüntetõ-mega- gyása mellett is. Jelenleg az utóbbi áll nyerésre. A nehézség a nem dási lehetõséget. Az 5-ös változattól felfele a __construct() teljesen tökéletes megvalósíthatóságban rejlik. Az egyik ellenérv és a __destruct() tagfüggvények fognak gondoskodni az szerint: írásmódját tekintve a „(feltétel) ? ha_igaz : ha_hamis” meg- induláskori és a megsemmisülés pillanatában elvégzendõ oldással is ütközik a névtereket egymástól elválasztó kettõspont feladatok biztosításáról. Értelemszerûen a __construct() használata. Ez a kódba történõ kisebb belenyúlással a megfelelõ tagfüggvényben tudjuk megadni az éledéskori alapállapotot, helyeken kiküszöbölhetõ. De természetesen nem csak ez a gond a __destruct()-ban pedig az objektum megszûnésekori vele. Csekély sebességcsökkenés is jár a dologgal, és a sok hát- feladatokat tudjuk meghatározni. rány mellett többek szemében egyre inkább eltörpülnek a névterek Miért jobb ez az elnevezésmód? Tegyük fel, hogy egyre © Kiskapu Kft. Minden jog fenntartva által nyújtott elõnyök. Mindenesetre most sem tartják valószínût- növekvõ munkánkban meg szeretnénk változtatni az egyik osztályunk nevét. Ekkor hibalehetõséget jelenthet az, ha elfe- lennek, hogy a névtértámogatás bekerüljön az új kiadásba, de lejtjük a létrehozót is átnevezni, követve a névváltozást. Más- ehhez egyelõre hiányzik a vállalkozó szellem: nincs aki választ részt elõfordulhat olyan eset is, hogy leszármaztatott osztá- tudna adni minden egyes felmerülõ nehézségre. Reménykedjünk… lyunk egyik tagfüggvényébõl akarjuk meghívni a szülõobjek- Egy másik változás a MySQL-támogatásban lesz. A PHP és a MySQL tum létrehozóját. Ez a jelenlegi felállás szerint csak akkor együttmûködésének nagy hagyományai vannak. Egyes híresztelé- oldható meg, ha a szülõobjektum neve ismert. Ez viszont nem sekkel szemben az igazság az, hogy ez így is fog maradni. Mindössze feltétlenül egyértelmû. Az új elnevezés használatával viszont annyi módosul, hogy a PHP a MySQL-támogatást illetõen egy régeb- minden esetben meg tudjuk célozni a szülõ létrehozóját. bi állapotba kerül vissza, azaz mindenképp külsõ mysql függvény- Természetesen nem kell megijedni, a PHP5 telepítése után könyvtárra lesz szükség. Erre a MySQL és a PHP felhasználási szer- nem kell a létrehozó függvényeket az összes osztályunk for- zõdésbeli különbségei miatt került sor. Nagy nehézséget a dolog nem rásaiban azonnal átnevezni. A visszafelé való csereszabatosság jelent. Egyedül annyi pluszmunkával fog járni, hogy fordításkor a szem elõtt tartásával a „régi”, osztálynévvel megegyezõ létre- -with-mysql= hozó kerül (létezése esetén) végrehajtásra, ha a PHP nem lel kapcsoló beállítására is szükség lesz. a __construct() tagfüggvény nyomára.

Újdonságok az objektumkezelésben Változások az objektumkezelésben • A __clone() Az PHP 5-ös változatának megjelenésével nagy lépést tesz Azzal a lépéssel, hogy az 5-ös változattól kezdve – ha elõre az objektumtámogatásban is. Jelenleg elég kevés és tetszik, ha nem – másolat helyett hivatkozás adódik át a tökéletlen megvalósítás áll csak rendelkezésre, ami azért így függvények számára értékként, elesünk attól a néha azért is sok mindenre elég. A jelenlegi kódoknak az új értelmezõvel szükséges lehetõségtõl, hogy mégiscsak egy teljes, az ere- is lehetõleg ugyanolyan jól kell futniuk, így az sem mindegy, detivel azonos, de innentõl önálló életet élõ objektumot hogy milyen módon változnak meg a dolgok. hozzunk létre. A feladat megoldására szolgál a minden Az egyik sokak által és régóta várt módosítás az objektum objektummal együtt járó tartozék, a __clone() tagfügg- értékként való átadásának megvalósításában történt. A korábbi vény. Példának okáért eztán függvényértéknek adott igény (jelenlegi) változatokban ugyanis a függvényértékként átadott esetén nem a $Dolly objektumváltozót adjuk meg, hanem objektumból egy teljes másolat készült, amely önálló életet élt, a $Dolly->__clone() által létrehozott másolatra való majd a függvénnyel együtt megszûnt létezni. Több okból sem hivatkozást. jó ez így: egyrészt a függvény által kezelt objektum változásai No, azért ne elégedjünk meg ennyivel! A __clone() függ- nem hatnak vissza az eredetire (márpedig ez lenne az üdvö- vény az osztályban ugyanis egy saját, hasonnevû függvény- zítõ), valamint felesleges processzor- és memóriaterhelést is nyel felülírható, ami átveszi a szerepét. Így teljes vezérlést jelent ez egyben. Ez a gond eleddig is megoldható volt, ha nyerhetünk afelett, hogy mi és milyen módon kerüljön magunk gondoskodtunk a referenciahivatkozás megfelelõ átadásra a klónozás során. A dolog hogyanja: a függvényen helyekre történõ biggyesztésével, de a nagy többségre elmond- belül két objektumhivatkozás is rendelkezésre fog állni ható, hogy fogalma sem volt a kérdésrõl (csak szép csöndben ehhez. Egyrészt a megszokott $this, amely már a klóno- több memóriát evett a PHP, mint kellett volna). zás termékére fog mutatni, míg a másolás forrását a $that A PHP ötös változata már másképp fog bánni az objektum típusú objektumváltozóban kapjuk meg. Innentõl ránk van bízva, értékekkel, ugyanis önmûködõen referenciaként adja át õket. mit és hogy teszünk át $that-ból $this-be, valamint Hasonlóan fontos változás történik az objektumok létrehozó, miféle egyéb tevékenységeket folytatunk még eközben. illetve megszüntetõ (constructor/destructor) függvényeivel kap- • A __call() csolatban. Létrehozó most is létezik a C++ nyelvben is ismert Az új Zend-motor további újdonságokat is hoz. A __call() formában. Az osztály nevével azonos elnevezésû függvény névre hallgató tagfüggvény segítségével minden olyan hivatott az új objektum születésekor az elõkészületeket meg- eljáráshívást elkaphatunk, ami mögött nem áll a névnek tenni, a változóknak alapértelmezett értéket adni. Viszont nem megfelelõ tagfüggvény, esetleg csupán nem érhetõ el

www.linuxvilag.hu 2003. szeptember 57 Szaktekintély

4. lista A static.txt 5. lista Az abstract.txt

class Math { abstract class Alakzat { static public $PI = 3.1415926536; abstract function rajzol(); static public abs($szam) { } if ($szam >= 0) { return $szam; class Haromszog extends Alakzat { } else { function rajzol() { return 0 - $szam; // rajzolunk egy haromszoget } } } } } class Kor extends Alakzat { $pi_erteke = Math::$PI; function rajzol() {

© Kiskapu Kft. Minden jog fenntartva $abszolut_ertek = Math::abs($valamennyi); // rajzolunk egy kort } ?> }

?> kívülrõl. Amennyiben létrehozunk egy ilyen __call() névre hallgató tagfüggvényt, az minden olyan esetben mûködésbe lép, ha a meghívott eljárás nem létezik vagy ezek írásakor lép mûködésbe, csakis akkor, ha létrehozunk nem hozzáférhetõ. A függvénynek két értéket kell befogad- ilyen függvényeket. A dolog tehát kísértetiesen hasonlít a nia: az elsõben érkezik a próbára tett eljárás neve, a máso- __call() esetére. A __set() meghívásakor két értéket dikban pedig tömb formájában a függvényértékként mega- is fogadnunk kell. Az elsõben a nem talált vagy nem nyilvá- dott adatok futnak be. A dolog több mindenre is jó. Egy- nos változó nevét kapjuk meg, amibe adatot próbáltak részt így magunk határozhatjuk meg, hogy mi történjen kívülrõl adagolni. A másodikban pedig a beállítani kívánt olyankor, ha valaki nem létezõ függvényt próbál meghívni. értéket. Hogy mit kezdünk ezekkel az adatokkal, az már Ennél viszont sokkal hasznosabb alkalmazási lehetõsége is képzelõerõ kérdése. A __get() esetén egyetlen fogadni- létezik ennek az eszköznek. való értékünk van: az olvasni próbált változó neve. Ha nem is olyan egyszerû és önmûködõ formában, de létre- hozhatjuk saját túlterhelt függvényeinket. Mit is jelent ez? Private, Protected, Public A túlterhelt függvénynevek olyan nevek, amelyek mögött A fenti szavak sem csengenek ismeretlenül a más nyelvektõl több megvalósítás is áll, és annak függvényében hívódik érkezõk számára. Ilyen elõtagokkal ruházhatunk fel minden meg egyik vagy másik függvény, hogy épp milyen típusú osztályon belüli változó- és függvénymeghatározást. A leg- és számosságú értéksort kapott. C++-ban, mivel az fordított utóbbi, a public ezek közül a PHP számára eddig is követett és erõsen típusos nyelv, a dolog viszonylag egyszerûen kivi- módszert jelenti, azaz jelenleg minden osztályon belül létre- telezhetõ. Ott egy adott függvényt nemcsak a neve, de a pa- hozott tagfüggvény és változó elérhetõ kívülrõl. A PHP5 hasz- raméterezhetõségének a mikéntje is azonosít, így nem gond nálatba vételétõl kezdve az osztályon belüli elemek hozzáfé- két különbözõ függvényt azonos néven létrehozni. A PHP rését is finomszabályozhatjuk. A private elõtag használatával viszont egy fordítás közben futó parancsnyelv, így a C++- (ezt mind változómegadás, mind függvénymeghatározás elé féle módszer megvalósíthatatlan. A __call() függvényt odabiggyeszthetjük) levédhetünk bizonyos elemeket a külsõ mankónak használva azonban a dolog mégiscsak megold- meghívástól, olvasástól, illetve módosítástól. Az osztályon ható osztályokon belül, hiszen abból – az értékek típusának belüli tagfüggvények ettõl függetlenül továbbra is hozzáférnek és számának megvizsgálása után – tetszõleges függvény mindenhez. A belsõ (private) függvények használatára volt meghívható. Szemléltetésül egy példa, ahol a hosszú nevû példa a többértelmû, túlterhelt tagfüggvény megvalósítását osztályunk tukroz() tagfüggvénye a valóságban nem bemutató listában, ahol minden, az értékektõl függõ megvalósí- létezik, azt két másik tagfüggvény helyettesíti: a tásért felelõ függvény védett a külsõ, közvetlen meghívástól. tukroz_szamot() és a tukroz_szoveget() saját, belsõ A teljes külvilágtól való elzárás és a teljes nyilvánosság között (private) függvény (hogy jelen esetben mit jelent a belsõ akad még egy átmeneti lehetõség. Elõfordulhat, hogy bár a köz- szó, arról egy kicsit késõbb lesz szó). A két függvény közül a vetlen külsõ meghívás nem kívánatos, az adott osztályt kibõvítõ megfelelõ meghívásáról – a kapott érték megvizsgálása után gyermekosztályokból erre mégiscsak szükség lehet. Az ilyen – a __call() gondoskodik. hozzáférési forma a védett, azaz protected típusú elérési mód. • A __get(), __set() Ha ilyen elõtagot biggyesztünk egy érték vagy függvény megha- Az objektumoknak a tagfüggvények mellett léteznek egyéb tározása elé, az az osztályból származtatott összes gyermekosz- sajátjai is, például a saját változói. És léteznek bizony tályból (de csakis onnan) ugyanolyan jól hozzáférhetõ lesz. változók, értékek, amelyekkel az adott objektum nem rendelkezik. Az ilyenekhez való sikertelen hozzáférések Static esetére vethetjük be a __get() és a __set() függvényt. Megeshet, hogy egy osztály olyan elemekkel is rendelkezik Az elõbbi a nem létezõ változók olvasásakor, a másik pedig – legyen az függvény vagy éppen egy változó – amelyhez

58 Linuxvilág Szaktekintély

jelent, hogy egy bázisosztályt kiegészítõ gyermekosztály 6. lista Az exception.txt nem szolgálhat további gyermek bázisaként. Ily módon az absztrakciónak is megvannak a maga korlátai. A gond enyhí- Sulyos kivétel:' . $e- származtatásnak, így a megvalósításra szánt osztályból még >getMessage() . "\n"; származtathatók gyermekek. echo 'A hibás sor: ' . $e->getFile() . ', ' $e->getLine() . ". sor\n"; Több szülõ közös gyermeke } Kellemes új lehetõség lesz az is, hogy egy származtatott osztályt több osztály közös gyermekeként is létrehozhatunk,

?> vagy akár több felületet valósítunk meg egy osztályban. © Kiskapu Kft. Minden jog fenntartva A dolog trükkje mindössze annyi, hogy az extends és implements kulcsszavak után nem egy, hanem vesszõvel anélkül hozzá lehet férni vagy esetlegesen meg lehet hívni, elválasztva több bázisosztály/felület nevét adjuk meg. hogy az adott osztályt egy objektumban példányosítanánk. Ez olyankor lehetséges, amikor például egy adott függvény Kivételkezelés kimenetére az adott objektum pillanatnyi állapota egyáltalán Általános nehézség az osztályokkal kapcsolatban, hogy a nincs hatással. Szemléltetésül tekintsük meg a 4. listát. különféle osztálykönyvtárakat létrehozó programozók ugyan pontosan be tudnak határolni hibákat, de nem feltétlenül Objektumhivatkozások önmûködõ feloldása (dereferencing) tudják, hogy mit kezdjenek vele. Ugyanígy az ilyen osztály- Objektumaink éppen más objektumokat is tartalmazhatnak, könyvtárakat felhasználó programozók már tudják, hogy és függvényértékként adhatják vissza õket. Ilyenkor a jelen melyik hibával mit kezdjenek, de nem tudják közvetlenül fel- lehetõségek között egy objektumtól visszakapott objektum egy deríteni õket. Sokszor szükség van rá tehát, hogy a hiba felde- tagfüggvényét meghívni két lépésben megy csupán. A PHP5 rítésének és kezelésének helye (és szintje) ne okvetlenül legyen ebben is hoz némi változást. Az eddig csak ilyenformán ugyanaz. Az ilyen hibák egységes kezelésére nagyszerû eszköz mûködõ programsorok a kivételkezelés. És bizony, a kivételkezelés hármasa – a try, throw, catch csapat – is felüti a fejét a PHP következõ nem- $csap = $Leny->csap_noveszt(); zedékének kiadásában. Innentõl pontosan meghatározhatjuk, $csap->kapaszkodik(); hogy mit tartunk hibának, és hol és milyen módon óhajtjuk kezelni azt. Ráadásul azt az elõnyét is élvezhetjük, hogy ilyen az ötös változattól kezdve ezzel a sorral lesznek helyettesíthetõk: módon teljes mértékben elkülöníthetõ a „hasznos” kód és a hibák kezeléséért felelõs kód. $Leny->csap_noveszt()->kapaszkodik(); A cikkhez tartozó listák megtalálhatóak az 51. CD Magazin/PHP Absztrakt osztályok könyvtárában. A legtöbb osztály, amelybõl további osztályokat származtatunk, önmagában is hasznos, példányosításra méltó típus. Létezik Heiglig (Cece) Szabolcs ([email protected]) más nyelvekben, azonban a bázisosztálynak egy olyan fajtája, Veszprémben él. Hobbija, kedvenc idõtöltése ami önmagában semmire sem jó, kizárólag más osztályok és munkája is a programozás. Szabadidejében közös alapjaként szolgál, egyben megfogalmazva azok közös hajlamos kerékpárra pattanni, vagy baráti tulajdonságait. Az ilyen önállótlan bázisosztályokat absztrakt osztályoknak is szokás nevezni. társaságban szerepjátékokkal foglalkozni. Egy osztályt meghatározásakor az abstract elõtag használa- tával tudjuk megfosztani az önálló lét lehetõségétõl. Az ilyen  osztályok példányosítási kísérletei rendre kudarcot fognak vallani, csakis az ezekbõl származtatott alosztályok számára KAPCSOLÓDÓ CÍMEK lehetséges az önálló lét. A teljes osztályon belül lehetnek helyben kifejtett tagfüggvények, de ezek külön is rendelkezhetnek az A legfrissebb fejlesztõi PHP5 a abstract elõtaggal, ami annyit jelent, hogy az adott függvény  http://snaps.php.net címrõl gyûjthetõ be. kifejtése csak a származtatott osztályban fog megtörténni (de ott A Zend-motorról és változásairól több cikk és GYIK is szól kötelezõ jelleggel, hiánya pedig hibaüzenethez vezet). Lássunk  http://zend.com 5. lista egy példát egy absztrakt osztályra és két bõvítményére ( )! A PHP5 új fejlesztéseinek folyamatos és teljes leírását megkísérlõ cikk a  http://phpvolcano.com/articles/ Közös felület php5 címrõl tölthetõ le. A PHP4-nek az a korlátja, hogy egyszeres öröklõdésre nyílik csak lehetõség, a továbbiakban is fennmarad. Ez annyit

www.linuxvilag.hu 2003. szeptember 59 Dobbantó

Programhonosítás a gettext csomaggal Azt mondják, hogy a Microsoft annak idején azzal hódította meg a piacot, hogy a Windows 3.1-et a világ szinte minden nyelvén hozzáférhetõvé tette. Ezáltal a számítástechnika széles rétegek számára lett elérhetõ.

Linux terjedését gátló egyik fõ ok régebben ugyanez volt. Nem várható el, hogy a gépet csak egyszerûen 1. használni kívánó felhasználók az angol nyelvet is ismerjék.A Sõt a számítástechnika szaknyelvében rengeteg olyan kifejezés akad, amit még az angolul egyébként jól tudóknak is külön meg kell tanulni. De a nemzetközi irodalmi mûvek is csak akkor válhattak egy nyelvi kultúra részévé, ha az adott © Kiskapu Kft. Minden jog fenntartva nyelven is elérhetõk lettek (gondoljunk csak a Biblia-fordítá- sokra vagy Shakespeare mûveire). Igaz, az internet térhódításával néhány éven belül eljuthatunk oda, hogy az angol nyelvtudás olyan természetes lesz, mint a jogosítvány, mégis, egészen más érzés az anyanyelvünkön értõ programmal dolgozni. Ezt a kereskedelmi programok készítõi is pontosan tudják. Az elmúlt években több nagy fajsúlyú program (KDE, Gnome, OpenOffice, Mozilla) magyarítása is nagy nyilvánosságot kapott. Bár Magyarország kis ország, és a honosítás elõnyeit hasznosító felhasználók száma aránylag alacsony, e programok 2. magyarra fordítása nagy elõrelépés a Linux elterjedésében. A honosítás olyan munka, amit – a programozói tudással ellen- tétben – csupán felhasználói ismeretekkel is el lehet kezdeni, és ez tovább növeli a Linux fejlesztõinek táborát. S mivel többen magukénak érzik a honosított programot, még többen vannak, akik a barátaikat is meg akarják gyõzni arról, hogy „ez a jobb, ezt használd!”. Izgalmas (s megmosolyogtató) látni azt a lelke- sedést, amellyel a sokszor avatatlan újságírók a Linuxról írnak – önmagában az a tény, hogy az UHU Linux százszázalékosan magyar fejlesztés, olyasmi, amire egyszerûen büszkék lehetünk, és végre Magyarország is kihúzhatja magát, hogy van saját fejlesztésû operációs rendszere. A lelkesedést a megfelelõ mederben tartva valóban minõségi honosítások jöhetnek létre. A  http://forditas.fsf.hu/html/ felelõsséggel végezzük el. A nagyobb programoknál több for- Utmutato.html címen részletes nyelvi útmutatót olvashatunk dítóra is szükség lehet a lefordítandó szövegek nagy száma Koblinger Egmont és Tímár András jóvoltából. Hasznosnak és miatt, így számítsunk arra, hogy csapatmunka várhat ránk. fontosnak tartom a Linuxvilág Szótár rovatát is, amely szintén Bizonyos programok lefordításához komoly szakmai tudásra a nyelvi egységesítés felé mutat jó irányt. is szükség lehet. Készüljünk fel arra, hogy szinte minden prog- Ha eldöntöttük, hogy csatlakozunk valamelyik program fordí- ramban akadnak olyan kifejezések, amelyeket csak akkor tásához, akkor a legegyszerûbb felvenni a kapcsolatot a fejlesz- fogunk tudni lefordítani, ha a programot angol eredetijében tõi csapattal. Elõfordulhat, hogy a programhoz még nincs már teljes egészében megismertük – csak ezután érdemes a magyar fordítás, de az is lehet, hogy már létezik, csak a fordító munkának teljes erõbedobással nekivágni. esetleg már nem foglalkozik a karbantartásával. Mindez az olvasó számára azt sejteti, hogy a fordító munkája akár hosszú Technikai részletek évekig is elnyúlhat, amint a program új szövegekkel gyarap- A programok nemzetköziesítésére több módszer is kínálkozik. szik, esetleg bizonyos szövegrészek módosulnak benne. Úgy tûnik, hogy a legéletképesebb és legelterjedtebb kezde- Némelyik program fejlesztõi erõs iramot diktálnak komolyan ményezés a GNU gettext projekt, amely jelenleg a 0.12.1-es betartandó határidõkkel (ami természetesen a fordítóra is változatnál tart. A  http://www.kde.org/fordfaq/forditas.html vonatkozhat), más programoknál a lendület kisebb, és a fordí- és a  http://www.szabilinux.hu/forditasok/gnome-faq/ tás akár évekig is elhúzódik. Azt mindenesetre tudnunk kell, i18n.html címeken elindulva jó alapokra tehetünk szert a hogy a programozást és a fordítást is többnyire önkéntesek témában, magyar nyelven, röviden. (A gettext hosszú, alapos végzik, szabadidõben; ez azonban nem ad felmentést az alól, leírása talán sokakat elriaszt ettõl az egyébként nagyon kényel- hogy amennyiben egy fordítási munkát elvállalunk, azt mesen kezelhetõ eszköztõl.)

60 Linuxvilág Dobbantó

A gettext alapú fordítási folyamat lényege a következõ: egy szöveg magyar nyelvû megfelelõjét. Látható, hogy a .po fájl elsõ úgynevezett sablonfájlban (pl.: messages.pot) a program szerzõi „éles” bejegyzése az üres "" szöveghez kapcsolódik: a szabvány az összes lefordítandó szöveget felsorolják angol nyelven. Egy szerint az ehhez tartozó „fordítás” ad információt a hu.po fájl ilyen szöveg lehet egy-egy menü neve, esetleg egy rövid felirat, tartalmáról. (Ennek a formátuma eléggé kötött, és hibaüzenetet vagy akár egy hosszabb, több mondaton is átnyúló magyarázó kapunk, ha valamelyik kötelezõ rovatát nem töltöttük ki helyesen.) leírás. A sablonfájlt lemásolva a fordító létrehozza a majdani Akik a C nyelvben kevésbé járatosak, azoknak könnyû a mind saját nyelvû fordításokat tartalmazó fájlt (például hu.po néven), az angol szövegekben, mind a fordításukban megjelenõ egy-két perc alatt módosítja a fájl legelején található leíró formázó részszövegeket felismerniük. Ilyen például a \n, ami fejlécet, majd az egyes angol szövegek alá begépeli a magyar az új sor jele, vagy a %s és a %f, amelyek arra utalnak, hogy nyelvû megfelelõt. Ezután a szerzõknek a hu.po fájlt elküldve a helyükbe egy másik szöveget vagy egy valós számot kell a programba már könnyen befûzhetõk a magyar nyelvû üzene- behelyettesíteni. Arra is mód nyílik, hogy a magyar változatban tek (a befûzést a fejlesztõk rendszerint maguk elvégzik). az egyes számokat, értékeket az angol eredetihez képest más Nézzünk egy példát! A XaoS fraktálrajzoló program 3.1-es sorrendben helyettesítsük be. Például az változatában a forrásprogram src/i18n könyvtárában található hu.po fájl így indul: msgid "Today is %s %s in the year %s." msgstr "A mai dátum: %3$s. %2$s %1$s." # XaoS NLS file for Hungarian language.

# Copyright (C) 2002 Free Software Foundation, eredeti-fordítás párral elérhetjük, hogy az angol szöveg tükör- © Kiskapu Kft. Minden jog fenntartva # Inc. fordítása helyett a magyar szokás szerinti megfelelõ jelenjen # Zoltan Kovacs , 2002. meg a programunkban. Munkánk során azonban többnyire # egyszerûbb esetekkel találkozunk. Az sem baj, ha kezdetben msgid "" nem is fordítunk le minden szöveget, csak a legfontosabbakat: msgstr "" a kihagyott esetekben mindig az angol eredeti fog a magyar "Project-Id-Version: XaoS 3.1\n" változatban is megjelenni. Látható az is, hogy a fenti szövegek "POT-Creation-Date: 2002-09-25 21:17+0200\n" többnyire nem szó szerint lettek lefordítva. Ennek oka sokszor "PO-Revision-Date: 2002-08-17 21:44+0200\n" az, hogy a magyar nyelv logikája néha egészen más, mint az "Last-Translator: Zoltan Kovacs angolé, s így kerülõutakra kényszerülünk. \n" A fordítási lépéssorozatot több grafikus segédprogram is "Language-Team: Hungarian\n" megkönnyítheti. A régebben készült ktranslator program "MIME-Version: 1.0\n" helyett újabban talán többen használják a poEdit többfelületes "Content-Type: text/plain; alkalmazást (ez ugyanis Windowson is elérhetõ), illetve a KDE charset=ISO-8859-2\n" alatt futó kbabel programot (1–2. kép). Akik mégis a „fapados” "Content-Transfer-Encoding: 8-bit\n" megoldásokat szeretik, azoknak viszont teljes szívvel ajánlható például a Midnight Commander szövegszerkesztõje (3. kép). #: ../ui/ui.c:310 msgid "XaoS is out of memory." A puding próbája msgstr "Elfogyott a memória." Sokáig – akár hónapokig is – eltarthat, amíg az elkészült hu.po fájlunk a fejlesztõk jóvoltából belekerül az idõszerû változatba, #: ../ui/ui.c:360 és élesben kipróbálhatjuk. Ha azonban ügyeskedünk egy kicsit, msgid "%s %.2f times (%.1fE) %2.2f már a hu.po fájl készítése közben belepillanthatunk, hogyan is frames/sec %c %i %i %i %i " néz ki a honosított program magyarul, akár csak részben msgstr "" lefordított szövegekkel. "%2$.2f-szeres %1$s (%3$.1fE) %4$2.2f kép/mp" " %5$c %6$i %7$i %8$i %9H$i " 3.

#: ../ui/ui.c:361 msgid "unzoomed" msgstr "kicsinyítés"

#: ../ui/ui.c:361 msgid "zoomed" msgstr "nagyítás"

#: ../ui/ui.c:368 #, c-format msgid "framerate:%f\n" msgstr "képfrissítés:%f\n"

A # (kettõs kereszttel) kezdõdõ sorok megjegyzések, tartalmuk másodlagos. Az angol nyelvû szövegeket az msgid kezdetû so- rokban olvassuk, idézõjelek között. (Amennyiben a szöveg egy sornál hosszabb, úgy az a következõ sorban is folytatható, ismé- telt idézõjelek között.) Az msgstr kezdetû sorok adják meg a

www.linuxvilag.hu 2003. szeptember 61 Dobbantó

amellyel a késõbbiekben elérhetjük, hogy minden szövegünk 4. nemzetközi változata a _("szöveg") hívással is megjelenhes- sen (ez szabványos rövidítés, a gettext leírása is ezt a módszert javasolja, sõt a gettext segédprogramjai alapértelmezésben ezt a rövidítést támogatják). A setlocale() függvénnyel kapcso- lunk nemzetközi üzemmódba (lehetõség volna arra is, hogy például a számokat, illetve a pénznemeket is magyar szabvány alapján jelenítsük meg, az LC_NUMERIC és LC_MONETARY vál- tozók beállításával; errõl bõvebben a gettext leírásában olvas- hatunk). Amennyiben nincs rendszergazdai jogosultságunk, az ize.mo fájlt a ~/hu_HU/LC_MESSAGES könyvtárból olvas- suk majd be, ezt engedélyezzük a #ifdef és a #endif közötti bindtextdomain() függvénnyel. A kiíratás a C nyelvben megszokott módon, a printf() függvénnyel történik. Ezek után megadjuk a programunkban egyelõre egyetlen angol nyelvû szöveg fordítását a hu.po fájlban: A hu.po fájlból a gettext csomag egyik segédprogramja egy .mo

© Kiskapu Kft. Minden jog fenntartva kiterjesztésû fájlt készít, amelyet fejlesztett programunk bináris msgid "" változata könnyedén értelmezni tud. Ezt a fájlt (legyen most msgstr "" a neve ize.mo, arra utalva, hogy az „izé” nevû programot for- "Project-Id-Version: ize 1.0\n" dítjuk magyarra) rendszerint a /usr/share/locale/hu_HU/ "POT-Creation-Date: 2003-07-20 08:10+0200\n" LC_MESSAGES könyvtárban helyezik el (a Linux-változatunk- "PO-Revision-Date: 2003-07-20 08:32+0200\n" tól és a telepített programoktól függõen ettõl különbözõ, illetve "Last-Translator: Zoltan Kovacs ezenkívül más, hasonló nevû könyvtárak is szóba jöhetnek). \n" Keressük meg a gépünkön ezt a könyvtárat, és nézzünk utána, "Language-Team: Hungarian\n" hogy programjaink közül melyiknek van telepítve a magyar "MIME-Version: 1.0\n" nyelvû változata. "Content-Type: text/plain; charset=ISO-8859-2\n" A fenti segédprogram neve: msgfmt, futtatása a következõ "Content-Transfer-Encoding: 8-bit\n" módon javasolt: msgid "Welcome to the program %s!" $ msgfmt -o /usr/share/locale/hu_HU/ msgstr "Köszönti Önt a(z) %s program!" LC_MESSAGES/ize.mo hu.po Az alábbiakban két Makefile olvasható. Ha van rendszergaz- Világos, hogy ehhez rendszergazdai jogosultság is szükséges. dai jogosultságunk, használhatjuk az elsõt, máskülönben csak Ha ilyennel nem rendelkezünk, a saját könyvtárunkban egy- a második fog mûködni. A beljebb kezdett sorokat tabulátorral szerûen hozzunk létre egy hu_HU/LC_MESSAGES alkönyvtárat, kell kezdeni. s oda dolgozzunk – ebben az esetben azonban lehet, hogy a fejlesztett programba is bele kell nyúlnunk, hogy tudassuk vele: all: ize ize.mo a fordításokat nem az alapértelmezett könyvtárban kell keresnie. ize: ize.c Egy mintapélda gcc -o ize ize.c Elképzelhetõ, hogy egy teljesen új programot akarunk írni, amit nemzetközi támogatással szeretnénk ellátni. Progra- ize.mo: hu.po munk, az izé 1.0-s változatának ize.c nevû forráskódja a msgfmt -o következõképpen néz ki: /usr/share/locale/hu_HU/LC_MESSAGES/ize.mo hu.po

#include all: ize ize.mo #define _(szoveg) gettext(szoveg) ize: ize.c main() gcc -o ize ize.c -D HELYBEN { setlocale(LC_MESSAGES, ""); ize.mo: hu.po #ifdef HELYBEN msgfmt -o bindtextdomain("ize", getenv("HOME")); $(HOME)/hu_HU/LC_MESSAGES/ize.mo hu.po #endif textdomain("ize"); Ezek után adjuk ki: printf(_("Welcome to the program %s!"), "ize"); $ make printf("\n"); $ ./ize } Ekkor a Az elsõ sorban tudatjuk a C-fordítóval, hogy a gettext csomag- gal dolgozunk. A másodikban egy olyan rövidítést adunk meg, Köszönti Önt a(z) ize program!

62 Linuxvilág Dobbantó

5. rendelkezésünkre. Ilyen például az msgmerge program, amellyel a hu.po fájlt frissíthetjük az új változatú messages.pot fájl új üzeneteivel (esetlegesen arra is figyelve, hogy bizonyos szövegek idõközben megváltoztak); vagy az xgettext, amellyel a C (vagy számos egyéb, például Java, Python vagy PHP) nyel- vû programból az összes angol nyelvû szöveget „kirobbanthat- juk”, s azokból sablonfájlt szervezhetünk. Hasznos eszköz a gettextize is, amivel egy C nyelvû program könnyen átszab- ható úgy, hogy támogassa a gettext szabványt. A gyakorlatban a fejlesztõk gyakran CVS-rendszert is bevonnak a programozói munkába, hogy a különbözõ változatok közötti eltéréseket könnyebben átláthassák (a nemzetköziesítéstõl függetlenül is). A fenti kérdésekre minden egyes program fejlesztésekor vala- szöveget kell látnunk. Ha a késõbbiekben akár a .c, akár a .po miféle választ szokás adni, de ez a projektektõl függõen más fájlt módosítjuk, egyszerûen csak a make parancsot kell újra és más lehet. A megoldások többnyire a gettext használati uta- kiadnunk, amivel ize és ize.mo nevû bináris fájljaink önmû- sításának ajánlásait követik (ám bizonyos részletekben gyakran ködõen frissülni fognak. el is térnek attól). Lássunk egy példát! A PostgreSQL adatbázis-

kezelõ 7.3-as változatához egy éve új felügyeleti program ké- © Kiskapu Kft. Minden jog fenntartva Többnyelvûség szül pgAdmin3 néven. A nyelvi fordítás a fejlesztéssel párhu- A szép az egészben az, hogy a programunk innentõl kezdve zamosan zajlik, azaz a fordítóknak rendszeresen új sablonfáj- többnyelvû. Az egyes hozzáférhetõ nyelvek közül a program lokat kell összefésülniük az általuk szerkesztett .po fájllal. indítása elõtt választhatunk: A nyelvi koordinátor a  http://snake.pgadmin.org/pgadmin3/ translation.php címen (4. kép) idõrõl idõre frissíti a sablonfájlt, $ LANG=de_DE; ./ize amit a 26 fordító mindegyike, például a poEdit program Catalog menüjének Update from POT file lehetõségével fûzhet Így például németül futna a programunk, ha a megfelelõ össze a saját .po fájljával. Ezután az új és a megváltozott szöve- könyvtárban megvolna az ize.mo fájl német nyelvû változata gek honosításának megtörténtével az újonnan kapott .po fájlt (mivel nincs, a feliratok angol nyelvûek lesznek). vissza kell küldeni a koordinátorhoz, aki a program hivatalos Próbáljuk németül elindítani a Midnight Commandert, forráskódjában (CVS-rendszeren) is rögzíti a változtatásokat. a Gimpet pedig spanyolul és csehül. Ezt az eljárást mindannyiszor meg kell ismételni, ahányszor Mostantól más nemzetiségû fejlesztõk, fordítók is csatla- a sablonfájl módosul. (A gyakorlatban a fejlesztõk mindig elõbb kozhatnak projektünkhöz, ha a hu.po fájlt például de.po-ra járnak, mint a fordítók, így fordulhat elõ, hogy a magyar nevezik át, s az msgstr sorokat a megfelelõ német fordítás szinte egyetlen programnál sem százszázalékos.) fordításokkal helyettesítik. (Jobb, ha létezik egy központi messages.pot sablonfájl, amelyben az msgstr sorok üresek, s A jövõ így a német fordítónak nem kell még a magyar fordítások A gettext olyannyira jól bevált, hogy számos programozási kitörlésével is bajlódnia.) nyelv alapértelmezésben támogatja a használatát. Ennek elle- Ha egy program magyar fordításával elégedetlenek vagyunk, az nére a bábeli zûrzavar teljes megoldása még hosszú távon is eredeti angol szövegeket úgy jeleníthetjük meg, ha a LANG vál- lehetetlen feladatnak tûnik. Évtizedek kemény munkájának tozót C-re kapcsoljuk át (az en_EN érték ugyanúgy megfelelõ). tapasztalata alapján úgy látszik, hogy a fordítási munkafolya- mat csak részben tehetõ önmûködõvé. Még egy számítógépes Tippek és trükkök program fordítása során is sokszor szinte mûvészi tehetség kell, A nemzetköziesítés éles használata számos gyakorlati kérdést hogy a szövegeket anyanyelvünkön szépen, pontosan, csatta- vet fel. Ilyenek például a következõk: nósan fogalmazzuk meg. Emiatt a fordító feladata fáradságos, • Hogyan tehermentesíthetõ a fordító abban az esetben, ha hosszú, sziszifuszi munka lehet. Ezt mindenesetre kárpótol- a már lefordított szövegek idõrõl idõre részben (1–2 karak- hatja az a tény, hogy a magyar fordításon felnõtt járatlan fel- terben, szóban) megváltoznak? Azaz van-e mód arra, hogy használók kényelmesebben, nagyobb örömmel dolgoznak ezekben az esetekben a fordítónak ne kelljen minden majd az adott programmal. Így a fordító közvetve igen sok megváltoztatott szöveget teljes egészében újrafordítania? új honfitárs felhasználót nyerhet meg nemcsak az adott prog- • Megoldható-e, hogy a C nyelvû programban elõforduló ramnak, hanem a Linuxnak is. szövegekbõl önmûködõen jöjjön létre a megfelelõ sablon- fájl? Azaz megoldható-e, hogy a fejlesztõkre kevesebb Tipp: töltsük le az internetrõl a BibleTime programot, és telepít- karbantartói munka háruljon, vagyis a messages.pot fájlt sük mellé Károli Gáspár Biblia-fordítását (HunKar.zip). robot hozza létre? Keressük ki azt a részt Mózes 1. könyvébõl, amelyik Bábel • Hogyan követhetõ nyomon, hogy a fejlesztõk mely új tornyának történetét meséli el (5. kép). szövegeket adták hozzá a program újabb változatához, és a fordító hogyan értesülhet a leggyorsabban arról, ha új Kovács Zoltán szövegeket kell lefordítania? • Megoldható-e, hogy már létezõ C-programokat gyorsan, ([email protected]) önmûködõen nemzetköziesítsünk? Tanársegéd a Szegedi Tudományegyetem Bolyai Intézetében az Analízis Tanszéken, matematikát Mindezeket a kérdéseket (és számos továbbit) a gettext fejlesz- és számítástechnikát tanít óraadóként a szegedi tõi nagyrészt megoldották, és több segédprogramot bocsátanak Radnóti Miklós Kísérleti Gimnáziumban.

www.linuxvilag.hu 2003. szeptember 63 Dobbantó

Operációs rendszerek (14. rész) Sorozatunk jelenlegi témája a lemezterület-kezelés, a fájlrendszerek megbízhatósága, egységessége és hatékonysága lesz.

ikksorozatunk elõzõ részében (Linuxvilág július, a lemezen. Itt nem okozhat gondot a fájl méretének növe- 62. oldal) megismerkedtünk a fájlkezelés alapfogal- kedése, viszont egy fájl teljes tartalmának a beolvasásakor maival. Most már nyugodtan belevághatunk a meg- valószínûleg több fejmozgatásra is szükség lesz. Mindenesetre valósításbaC is. Mivel a fájlokat mágneslemezen tároljuk, a a legtöbb fájlrendszer ezt a sémát használja. rendszer fejlesztõinek tulajdonképpen csak a lemez területé- nek kezelésével kell megbirkózniuk, ami – mint hamarosan A blokkméret megválasztása kiderül – elég nagy kihívás. Az odáig rendben van, hogy a fájlokat egyenlõ részekre oszt- A lemezek kezelésével sorozatunk egyik korábbi részében már juk, de vajon mekkorákra? Mivel a merevlemezek cilinderekre, foglalkoztunk, amikor a blokkos beviteli–kiviteli eszközöket sávokra, illetve szektorokra osztottak, megpróbálhatjuk ezeket

© Kiskapu Kft. Minden jog fenntartva tárgyaltuk. Érdemes az ott leírtakat átismételni, mivel lépten- választani az állományok helyfoglalási egységének. nyomon hivatkozni fogunk rájuk. A cilindert azonban semmiképp sem érdemes választani, mivel Minket most nem az eszközök érdekelnek, nem is fontos, túl nagy. A nagy blokkmérettel az a gond, hogy sok kis hogy milyen lemezrõl van szó. A fájlkezelés nem más, mint állomány esetén rengeteg szabad kapacitás megy veszendõbe. a lemezterület-kezelés tudománya. Az a fontos, hogy milyen Fõleg, ha egy olyan rendszerrõl van szó, amelyik rengeteg apró elv alapján tároljuk állományainkat a lemezen, úgy, hogy a fájllal dolgozik (például jellemzõen ilyenek a Unixok). tartalmukat bármikor visszaolvashassuk, felülírhassuk vagy Nagy a cilinder? Semmi gond, nézzük a szektort, ami sokkal letörölhessük. Ezenkívül az is nagyon fontos, hogy az egész kisebb. Valójában a szektor nemcsak kicsi, hanem túl kicsi folyamat gyors legyen. ahhoz, hogy eszményi blokkméretnek választhassuk. Ez ugyan A lemezterület kezelése sok tekintetben hasonlít a memóriáé- a lehetõ legkevésbé pazarló megoldás, viszont a nagy állomá- hoz, csak még annál is bonyolultabb. Közös bennük, hogy itt nyok rengeteg kis blokkból állnának, s ezek valószínûleg a is egy meghatározott méretû szabad területtel kell gazdálkod- lemezen egymástól jó távolra helyezkednének el. Egy ilyen nunk olyan módon, hogy a lehetõ leggazdaságosabban ki állomány beolvasása a sok pozícionálás miatt próbára tenné tudjuk használni. Ugyanakkor ebben az esetben felmerül egy a felhasználók türelmét. olyan tényezõ is, ami a memóriánál nem volt számottevõ. Ez Egybõl két tanulságot is levonhatunk. Az elsõ, hogy helyfog- pedig nem más, mint az idõ. Ha a lemezrõl be szeretnénk lalási egységet semmiképp sem a lemez „fizikai” egységei olvasni egy bájtot, akkor elõször is az olvasófejet úgy kell moz- alapján érdemes választani. A másik pedig az, hogy minél gatnunk, hogy az pontosan a felett a szektor felett legyen, kisebb a blokkméret, annál jobb a tárolási hatékonyság, viszont amelyik a kívánt bájtot is tartalmazza. Egy szektor beolvasá- a fájlrendszer idõhatékonysága annál rosszabb. Ez az állítás sának az ideje nem számottevõ, de a fej mozgatása annál fordítva is igaz. inkább. Míg a memória összes részét ugyanannyi idõ alatt Mekkora lehet vajon a tökéletes blokkméret? Hát valahol a (gyakorlatilag azonnal) el tudtuk érni, addig a lemezek eseté- nagyon nagy és a nagyon kicsi között. Ez a nyilván megegye- ben a végrehajtási idõ attól függ, hogy a fej éppen hol tartóz- zésen alapuló választás nagymértékben függ a rendszertõl, kodik. Egy jó fájlrendszernél nem elég tehát, hogy gazdaságos illetve attól, hogy kik használják. A legújabb kutatások minden- tárolást nyújt, hanem az is fontos, hogy úgy helyezze el az esetre azt mutatják, hogy a felhasználók átlagosan egyre adatokat, hogy például egy fájl eléréséhez a lehetõ legkeve- nagyobb állományokat birtokolnak, tehát minden jel arra utal, sebbet kelljen mozgatni a fejet. hogy a nagyobb blokkméreteké a jövõ. Lássuk, milyen lehetõségek közül választhatunk! A virtuális memória esetében a szakaszolás és a lapozás volt a két meg- Szabad blokkok határozó módszer, a lemezeknél is használhatunk valami Amikor új állományt hozunk létre, vagy egy régihez újabb ezekhez hasonlót. Például az állományokat tárolhatjuk foly- dolgokat írunk hozzá, akkor a rendszernek szabad blokkot kell tonosan, azaz egybefüggõ lemezterületen. Ez elsõre nagyon foglalnia. Ehhez azonban fontos tudnia, hogy az összes blokk csábító lehet, mivel a fájlok olvasása rendkívül egyszerûen közül melyik szabad, és melyik nem. és gyorsan megoldható, és a fejet is csak egyszer kell Erre két elterjedt módszer létezik. Az elsõ esetben a szabad megmozdítanunk. blokkok címeit is blokkokban tároljuk, és ezeket egy láncolt Rögvest megváltozik a helyzet, amikor egy állomány növeke- listába fûzzük. Ez az úgynevezett láncolt lista, amit úgy désnek indul. A memória esetében ilyenkor nem volt semmi képzelhetünk el, hogy van egy blokk, amelyben csak szabad gond, a szakaszt csak át kellett egy másik memóriaterületre blokkok címeit találjuk. Az utolsó helyen lévõ cím azonban költöztetni, ahol nagyobb szabad hely állt rendelkezésre. nem egy szabad blokk címe, hanem a következõ olyan blokké, Csakhogy a memóriában történõ mozgatás szinte semmi idõbe amelyik szabad címeket tartalmaz. se kerül, míg a lemezekrõl ez nem mondható el. A másik az úgynevezett bittérképes módszer. Itt minden Célszerûbb, ha minden állományt egyenlõ méretû blokkokra blokkhoz egy bitet rendelünk, ami azt jelzi, hogy szabad-e osztunk fel, amelyeknek természetesen nem kell szigorúan vagy sem. egymás mellett lenniük, akár össze-vissza is elhelyezkedhetnek Mindkét módszernek akadnak hátrányai. Vegyünk egy

64 Linuxvilág Dobbantó

1 GB-os merevlemezt 1 KB-os blokkmérettel – ez azt jelenti, a lemezhez fordulnánk. Ha nincs, akkor a gyorsítótárból egy hogy körülbelül egymillió blokkot tartalmaz. Láncolt listás blokkot kiválasztva ki kell írnunk a lemezre, majd betenni a megoldáskor, ha a teljes lemez üres, körülbelül négyezer helyére azt, ami éppen kell nekünk. Ehhez elõbb ki kell válasz- blokkot (4 MB-ot) kell szánnunk az üres blokkok tárolására tanunk, hogy melyik legyen az a blokk, amelyiknek távoznia (32 bites blokkcímek esetében). A bittérképesnél az egész csak kell. Ennek eldöntésére használhatjuk a lapozási algoritmusok egymillió bitet, azaz pontosan 128 KB-ot foglal el. valamelyikét, például az LRU-t vagy a FIFO-t. A bittérképes megoldás jobbnak tûnhet, mint a láncolt listás. A helyzet azonban nem ilyen egyszerû. Ha „színtiszta” Ez azonban csak akkor igaz, ha lehetõség nyílik az egész lapozási algoritmusokat (például az LRU-t) használunk, bittérkép memóriában tárolására. Ma már memória ugyan akkor könnyen kerülhetünk kellemetlen helyzetbe. Képzeljük sok van, de például egy 80 GB-os lemez esetében ez már el azt a helyzetet, amikor módosítunk egy, a fájlrendszer 10 MB-unkba fog kerülni. Ez már elég szempontjából alapvetõ fontos- nagy ahhoz, hogy ne tartsuk az egész ságú blokkot, például olyat, bittérképet a memóriában. ami fájlleírót (inode) tartalmaz. Tegyük fel, hogy a memóriában A módosítás a lemezen csak mindig csak egy blokknyi bittérképet akkor könyvelõdik el, ha tartunk. Ha szabad blokkra van az algoritmus a gyorsítótár- szükségünk, de a bittérképben nincs ból ezt a blokkot takarítja

ilyen, akkor a rendszernek a bittér- ki. Ha eközben esetleg egy © Kiskapu Kft. Minden jog fenntartva kép egy másik szeletét kell beol- rendszerösszeomlás követ- vasnia. Azt azonban semmi sem kezik be (vagy áramszünet, garantálja, hogy abban már talá- vagy hasonló katasztrófa), lunk szabad blokkokat. Ha a a fájlrendszerünk merevlemezünk már csaknem sérülni fog. tele van, azaz kevés a szabad Ezt orvosolhatjuk blokk, megeshet, hogy szinte akképpen, hogy bizo- az egész bittérképet végig kell nyos blokkokat (ame- olvasnunk. A láncolt listás lyek kiemelt szerepet megoldásnál azonban csak játszanak a fájlrend- egyetlen blokkal kell ezt meg- szer életében) egybõl tennünk, és máris nyertünk kiírunk a lemezre, újabb 255 szabad blokkcímet. vagy az LRU-lánc Ne felejtsük el azt sem, hogy elejére teszünk, tehát a láncolt listás megoldásnál a a következõ cserénél lemez betelítésével csökken azon az a blokk lesz az, amelyik kiíródik. blokkok száma, amelyet a szabad blokkok nyilvántartására Az adatblokkokat csak akkor érdemes cserélnünk, ha várha- kell használnunk. Az 1 GB-os merevlemez esetében a bittér- tóan rövid idõn belül nem lesz rájuk szükségünk. Az úgyne- képnek mindig fent kell tartanunk szabad 128 kilobájtot, vezett csonka adatblokkok mindig az LRU-lánc végére kerül- míg a láncolt listásnál egyet sem, feltéve, ha csurig töltjük nek, mivel ezek hamarosan kellenek, hiszen valószínûleg merevlemezünket. valamelyik alkalmazás írni fog bele. Elõfordulhat olyan eset, hogy egy adatblokk sosem kerül az A fájlrendszer hatékonysága LRU-lánc elejére, azaz nem kerül kiírásra. Jellemzõen ilyen A merevlemezek átlagosan százezerszer lassabbak, mint eset, ha valaki szövegszerkesztõvel dolgozik. Például e cikk a memória. Ez az érték attól is függ, hogy a fej éppen hol szerzõje e sorok írásakor már harmadik órája szenved a tartózkodik, illetve mennyi adatot szeretne a felhasználó cikkével, és mivel más lemezmûveleteket végrehajtó programot kiolvasni belõle. A memóriát például bájtonként, egyes nem futtat, a dokumentumot tartalmazó blokk minden bizony- rendszerekben szavanként címezhetjük, lemezek esetében nyal nem kerül ki a gyorsítótárból. Ha a szerzõ egy bután azonban mindig az egész blokkot be kell olvasnunk, illetve megtervezett operációs rendszert használna, és esetleg áram- ki kell írnunk. Ez nem szerencsés akkor, amikor csak egy-két szünet következne be, akkor minden bizonnyal háromórányi bájtra lenne szükségünk. munkája veszne el. Ezen még az sem segítene, ha az önmû- Ezért a lemezterület kezelésnél elõtérbe kerül a hatékonyság ködõ mentési szolgáltatás be lenne kapcsolva. fogalma, azaz ki kell találnunk olyan módszereket, amivel a Szerencsére a szerzõ rendszerében (és minden Unixban) lemezmûveleteket némileg felgyorsíthatnánk. Erre kétféle, ám van egy SYNC nevû rendszerhívás, ami az összes gyorsí- együttesen használható megközelítés is létezik: egyrészt a tótárban lévõ blokkot kiírja a lemezre. Ez a rendszerhívás lehetõ legkevesebbszer forduljunk a lemezhez, másrészt, ha mindig végrehajtódik, amikor egy lemezegység leválasztá- már meg kell tennünk, akkor csökkentsük a lemezmûveletek sára készülünk, de ez még kevés. A SYNC-nek akkor van idejét. Az elsõ célkitûzést egy gyorsítótár (cache) bevezetésével igazán haszna, ha valaki folyamatosan végrehajtja. Ezért megvalósíthatjuk. Egy szektor beolvasását ugyan nem tudjuk az összes Unix induláskor egy folyamatot indít el (amelynek felgyorsítani, ha viszont úgy rendezzük a blokkokat a lemezen, általában update, vagy rendszertõl függõen valami hasonló hogy a fejet ne kelljen minden kérés alkalmával pakolgatni, neve van), ami nem tesz mást, mint hogy félpercenként akkor a második feladatot is teljesíteni tudjuk. meghívja a SYNC-et. Rendszerösszeomláskor itt is bekövet- A gyorsítótárnál alkalmazott elv sok tekintetben hasonlít a kezhet némi adatvesztés, de csak annyié, amennyit az utolsó lapozott memóriáéhoz. Ha egy keresett blokk bent csücsül a 30 másodpercben alkottunk. gyorsítótárban, akkor a kérést anélkül ki tudjuk szolgálni, hogy Létezik azonban olyan rendszer is, amelyik minden módosított

www.linuxvilag.hu 2003. szeptember 65 Dobbantó

blokkot egybõl kiír a lemezre (ez az úgynevezett írásáteresztõ összes blokkot, amelyhez fájl tartozik, elérhetjük. E blokkok gyorsítótár). Ilyen például az MS-DOS. Ezért van az, hogy DOS számlálóját mindig megnöveljük eggyel. Ha ez kész, akkor alatt mindenféle komolyabb következmény nélkül cserélget- jöhet a szabadlista (illetve a bittérkép) végigpásztázása. Ha egy hetjük a hajlékonylemezeinket, míg például Linux alatt elõször blokk elõfordul, akkor annak a másik számlálóját kell növelni. le kell azt választanunk. Ezzel a vizsgálat be is fejezõdött: fájlrendszerünk akkor és csak Ennek a módszernek az a hátránya, hogyha karakterenként akkor lehet összefüggõ, ha az összes blokk számlálóinak értéke írjuk az állományt, akkor annyi lemezmûveletet kell végrehaj- közül pontosan csak az egyik 1. tani, ahány bájtot kiírunk. Ez sokkal lassabb, mintha elõször összegyûjtenénk a változásokat a gyorsítótárba, majd egy SYNC rendszerhívás következtében egyetlen lemezmûvelettel az egészet kiírnánk. (Ezért, akik DOS alá fejlesztettek, gyakran programon belüli gyorsítótárat használtak. Ennek az volt a módja, hogy a kiírandó karaktereket elõször egy tömbbe tették, és ha az megtelt, akkor az egész tömböt kiíratták, majd indul- hatott az egész elölrõl.) Meg kell jegyeznünk azonban, hogy az MS-DOS-nak ez nem tervezési hibája, valójában kifejezetten ilyenre alkották.

© Kiskapu Kft. Minden jog fenntartva Ugyanis ezt a programot a személyi számítógépekre tervezték, még azokban az idõkben, amikor a merevlemez nem volt alapvetõ kellék, és mindenki cserélhetõ lemezegységeket használt. A Unix azonban olyan gépeken fejlõdött, amik nem éppen hajlékonylemezekrõl indultak, így ott volt értelme az írási mûveletek gyorstárazásának is. Ma már nyilván nem a DOS példája a követendõ. A gyorsítótáron kívül fájlrendszerünk hatékonyságát úgy is növelhetjük, hogy valahogy csökkentjük a fej mozgását. Ezt úgy érhetjük el, hogy azokat a blokkokat, amelyekre nagy valószínûséggel egymás után fognak hivatkozni, a lehetõ leg- közelebb helyezzük el egymáshoz (még jobb, ha egy cilinderen is vannak). Ezt úgy érhetjük el, hogy amikor szabad blokkokat kell foglal- nunk, akkor amennyiben lehetséges, mindig egymás utáni blokkokat foglaljunk. Bittérképes nyilvántartás esetén, ha az egész bittérkép a memóriában helyezkedik el, ez egyszerû feladat. Láncolt listásnál sokkalta nehezebb. A fájlleírókat használó fájlrendszerek esetében azonban egy másik gond is felmerül: még a legkisebb állomány eléréséhez is legalább két blokkot be kell olvasni. Amennyiben a fájlleírók a lemez elején lennének, a fejet általában a lemez közepére kellenne pozícionálni. Javíthat a helyzeten, ha a fájlleírókat a lemez közepén helyezzük el, így átlagosan nézve a fej csak feleannyi távot fog befutni. Ez logikus, mivel ha mindkét számláló nulla lenne, akkor az olyan, mintha az a blokk nem is létezne. Ebben az Fájlrendszer-ellenõrzés esetben hiányzó blokkról beszélünk. Ez nem jelent súlyos Minden igyekezet ellenére is elõfordulhatnak olyan szerencsét- veszélyt a fájlrendszerre nézve, de kapacitásveszteséggel len esetek, amikor úgy hal meg a rendszerünk, hogy még jár. A hiba szerencsére könnyedén javítható, csupán fel maradt kiíratlan módosított blokk. Ha ez a blokk netán egy kell venni a szabadlistába. Az sem túlzottan egészséges, fájlleírót vagy egyéb fontos adatot tartalmazott a fájlrendszer- ha egy blokk kétszer szerepel a szabadlistában. Ebben az rõl, akkor a fájlrendszer sérül, más néven inkonzisztens esetben a megoldás kulcsa az, hogy elölrõl építjük az egész állapotba kerül. szabadlistát, ügyelve arra, hogy az adott blokk már csak Az inkonzisztens fájlrendszer nem biztos, hogy használha- egyszer kerüljön bele. tatlan, lehetséges, hogy csak egy-egy blokk válik elérhe- Érdekesebb a helyzet akkor, ha azt kapjuk eredményül, tetlenné stb. Mindenesetre nem jó dolog, ha a fájlrendszer hogy egy blokk több fájlhoz is tartozik. Ez nagyon veszélyes nem egészséges, ezért érdemes valamiféle inkonzisztencia- lehet a fájlrendszerre nézve, mivel ha letörlünk egy olyan ellenõrzõ és -javító programot futtatni. A továbbiakban állományt, amelyikben ez a blokk szerepel, akkor a blokk most egy ilyen alkalmazás mûködésének a rejtelmeibe egyszerre lesz szabad is, meg foglalt is. Ha a másik ilyen pillantunk bele. állományt is letöröljük, akkor a blokk „kétszeresen” lesz Az inkonzisztencia ellenõrzését végezhetjük blokkonként és szabad. Ezt a hibát ezért mindenképpen javítanunk kell. fájlonként is. Elõször nézzük a blokkonkénti ellenõrzést! A bevált módszer a következõ: foglalunk egy új blokkot, Elõször is minden blokkhoz két számlálót rendelünk: az egyik- ami a sérült blokk tartalmával töltünk fel. Ezután a sérült ben azt számoljuk, hogy az adott blokk hány fájlban fordul elõ, blokkot kiszedjük a második fájlból, a helyére pedig betesz- a másikban pedig, hogy hányszor fordul elõ a szabadlistában. szük az újonnan létrehozott blokkot. Valamelyik állomány Ezután végigmegyünk az összes fájlleírón, ennek alapján az tartalma minden bizonnyal sérülni fog, de nézzük a jó

66 Linuxvilág Dobbantó

oldalát: fájlrendszerünk következetessége helyreállt. sem választható. Ennek köszönhetõen a fájlleírót csak A fájlok szerinti összefüggés ellenõrzésekor blokkok helyett egyszer kell átnyálazni. az állományokon megyünk végig. Pontosabban belenézünk Ezek a hibák, amelyek veszélyeztethetik a fájlrendszer össze- az összes könyvtárba, és megszámoljuk, hogy egy adott függõségét, általában mindig a felhasználótól független esemé- fájlleíróhoz hány állomány tartozik. (Minden fájlleíró tartal- nyek miatt következnek be, például rendszerösszeomlás, maz egy kapcsolatszámláló nevû változót, ami megmondja, áramszünet miatt. Igaz, akad egy kivétel: a rendszer helytelen pontosan hány állomány is tartozik hozzá.) Ezután belenéz leállítása. De most már tudjuk, mivel járhat egy ilyen csele- a fájlleíróba is. Ha ott több, netán kevesebb állomány szere- kedet, így remélhetõleg senki sem fog ilyesmire vetemedni. pelne, mint amennyi a könyvtárakon végzett ellenõrzés Nem számoltunk még azonban a felhasználó által okozott eredménye, akkor baj van. hibákról sem, ilyen például állományok véletlen letörlése, vagy Ha a fájlleíró kapcsolatszámlálójának értéke nagyobb, a törlés parancs helytelen használata. Az ilyenek miatt nem mint amennyit mi számoltunk, az még a jobbik eset. Ha lesz a fájlrendszer inkonzisztens, csak a felhasználó adatai nem javítjuk, annyi történhet, hogy ha az összes olyan tûnhetnek el, de ez elég ok arra, hogy létezzen valamilyen állományt kitöröljük, amelyik az adott fájlleíróhoz tartozik, védelmi módszer. Nem minden fájlrendszer tartalmaz ilyet, akkor a fájlleíró maga nem szabadul fel, mivel a számláló és ha tartalmaz is, mind-mind különbözõ módon. Az MS-DOS értéke biztosan nagyobb lesz nullánál. Tehát helypazarlás például nem végezte el a tényleges törlést (azaz a blokkok áll fenn. Mindenesetre a kapcsolatszámláló csökkentésével felszabadítását) egészen addig, amíg volt más szabad hely a

a gond megoldható. lemezen. Addig a felhasználónak lehetõsége volt a megfelelõ © Kiskapu Kft. Minden jog fenntartva A legizgalmasabb azonban az az eset, amikor több állományt parancs segítségével visszahozni a letörölt állományokat. számoltunk össze, mint amennyirõl a fájlleíró „tud”. Ilyenkor A következõ részben a biztonsággal foglalkozunk, pontosabban ugyanis adatvesztéssel is számolnunk kell. Miért is? Tegyük fel, azzal, hogy az operációs rendszerek általában miként védik az hogy letöröljük az egyik állományt. Ha a fájlleíró számlálója adatainkat. Természetesen arról is szót ejtünk, hogy mindezt egy volt, akkor most nulla lesz, és felszabadul a fájlleírót hogyan valósítják meg. tartalmazó blokk. A másik állományt és annak tartalmát soha többé nem fogjuk tudni elérni. Azért a helyzet korántsem ilyen súlyos, egyszerûen csak állítsuk a kapcsolatszámláló értékét Garzó András ([email protected]) annyira, amennyit mi számoltunk. Körülbelül három éve foglalkozik Linux- és más Unix-rendszerekkel. A mostani ellenõrzõprogramok e két módszert (a blokk Legjobban az operációs rendszerek lelkivilága érdekli, de nyitott és az állomány szerinti ellenõrzést) együtt használják, egyéniség. Kedvenc étele a palacsinta, és van egy Richard nevû hatékonysági okból kifolyólag a két folyamat egymástól el macskája. Minden észrevételt, megjegyzést, levelet szívesen fogad.

www.linuxvilag.hu 2003. szeptember 67 Dobbantó

Héjprogramozás Linux alatt – az AWK nyelv (5. rész) Héjprogramozásról szóló sorozatunk mostani részében az AWK sedégprogrammal és szövegfeldolgozó nyelvvel ismerkedünk meg.

alószínûleg az olvasónak is feltûnt, hogy az elõzõ ként lehet hivatkozni. A számozás egytõl indul, de létezik a $0 részben bemutatott megoldás meglehetõsen körül- is, ami a teljes sort jelenti. (Figyelem, ezeknek a szimbólumok- ményes volt. A gondot alapvetõen az okozta, hogy nak semmi közük a héjprogram parancssori kapcsolóihoz!) magaV a héj nem rendelkezik olyan szolgáltatással, amivel Az awk programokban megadhatunk változókat, amelyekre itt egyszerûen hozzáférhetnénk egy táblázat elemeihez. a héj „szokásaitól” eltérõen minden helyzetben egyszerûen a Annak idején talán ez volt az egyik olyan felismerés, ami nevük leírásával lehet hivatkozni. Az awk az eddig használt elvezetett az awk segédprogram és szövegfeldolgozó nyelv expr paranccsal szemben lebegõpontos számokkal is képes megalkotásához. (A furcsa név a szerzõk neveinek kezdõ- mûveleteket végezni, és minden olyan különleges függvényt © Kiskapu Kft. Minden jog fenntartva betûbõl állt össze: Aho, Weinberg, Kernighan.) is ismer, amit egy tudományos zsebszámológépen megtalálha- Az awk – bár mérete általában nem haladja meg a néhány száz tunk. Az eredmények kiíratására a print parancsot kilobájtot – a korszerû táblázatkezelõk gyakorlatilag valameny- használhatjuk. nyi szolgáltatásával rendelkezik. Az egyetlen – ám sokak szá- mára igen lényeges – eltérés az, hogy ennek a programnak A sorok összegzése nincs grafikus felülete, vezérlésére ehelyett egy saját progra- Ennyi bevezetõ után lássuk, miként valósítható meg az awk mozási nyelv szolgál. segítségével egy táblázat sorait összegzõ függvény: Az awk nyelve számos ponton erõsen hasonlít a C-re. Ennek megfelelõen összes függvényét, vezérlési szerkezetét és 1: sorosszeg() egyéb szolgáltatását egyetlen cikkben lehetetlen bemutatni. 2: { Itt és most csak azokról az alapelvekrõl és lehetõségekrõl esik 3: cat $1 | awk \ majd szó, amelyek a héjprogramokban a leggyakrabban 4: '{ osszeg=0 felbukkannak. 5: for(i=1;i<=NF;i++) osszeg+=$i 6: print osszeg}' Az awk mûködésének logikája 7: } Az awk bemenete fájlból és a szabványos bemenetrõl egyaránt érkezhet. A feldolgozást vezérlõ programot szintén meg lehet A cat parancs utáni $1 szimbólum most is a függvény (és nem adni külön fájlban (ilyenkor a -f kapcsolót kell használnunk), a program) elsõ parancssori értékét jelenti, a 3. sor végén pedig de gyakoribb az a megoldás, amikor ezt is rögtön az awk az elõbb említett, az olvashatóságot megkönnyítõ sorösszefûzõ kulcsszó után, egyszeres idézõjelek (aposztróf) közé zárva karakter látható. A pillanatnyi sor mezõin végig haladó for adjuk meg. Egy az awk-val kapcsolatos kódrészlet tehát ciklus akár a C-program része is lehetne. A C nyelvet nem is- sematikusan a következõképpen nézhet ki: merõk kedvéért talán érdemes megemlíteni, hogy az i++ szim- bólum az i=i+1 mûvelet „rövidített” megfelelõje, a += mûve- ...bemenet... | awk 'BEGIN \ leti jel (operator) pedig az osszeg=osszeg+$i mûvelet { utasítások } leírását teszi egyszerûbbé. Mindkét megoldás a C nyelvbõl ered. { fõprogram } A ciklus leállási feltételében szereplõ NF az awk egyik önmû- END { utasítások }' ködõen frissülõ belsõ változója, ami a feldolgozás alatt álló sor mezõinek számát tartalmazza. Gyakran szükséges ezenkívül Az elsõ sor végén látható \ (visszaperjel) sorösszefûzést végez, még az NR belsõ változó, ez a pillanatnyi sor sorszáma (a szá- vagyis azt jelzi a héj számára, hogy csupán az olvashatóság mozás egytõl indul). kedvéért írtuk a kódot több sorba. (Ügyeljünk rá, hogy a \ után már semmi nem állhat, még szóköz sem!) Az oszlopok összeadása A „fõprogramban” található utasításokat az awk a bemenet A sorok összegzésénél nem volt szükség az awk programon valamennyi során önmûködõen végrehajtja, vagyis a program kívüli ciklusra, mivel a végigpásztázásuk önmûködõ. Az osz- eleve tartalmaz egy rejtett (implicit) ciklust. (Emlékezzünk rá, lopok esetében ilyen automatizmus már nincs, így itt két cik- hogy az elõzõ részben a táblázat sorainak végigpásztázásához lusra lesz szükségünk. A megoldás azonban még így is rövidebb nekünk magunknak kellett ciklust írnunk.) és áttekinthetõbb lesz, mint az elõzõ részben bemutatott. A BEGIN blokkban szereplõ utasítások a sorok feldolgozásának megkezdése elõtt hajtódnak végre, az END blokk tartalma 1: oszloposszeg() pedig a feldolgozás után fut le. 2: { És most következzék a lényeg: az awk feldolgozás elõtt minden 3: oszlopszam=`head -1 $1 | wc -w` sort mezõkre bont. Alapértelmezésként mezõ az, amit mindkét 4: i=1 oldalról legalább egy szóköz vagy tabulátor határol. A mezõkre 5: while [ $i -le $oszlopszam ] a programban a $1, $2 stb. szimbólumok segítségével egyen- 6: do

68 Linuxvilág Dobbantó

7: cat $1 | awk -v oszlop=$i \ sorozatban megjelent kódszövegek. Egy igazi Linux- 8: 'BEGIN { osszeg=0 } felhasználónak természetesen eszébe sem jut, hogy ilyesmit 9: { osszeg+=$oszlop } kézzel tegyen meg – helyette megírja a következõ nyúlfarknyi 10: END { print osszeg }' programot: 11: i=`expr $i + 1` 12: done 1: #!/bin/sh 13: } 2: cat $1 | awk \ 3: '{ if (NR<10) A 3. sorban kiderítjük, hogy hány oszlopból áll a táblázat. 4: { print " "NR": " $0 } Ehhez a head segítségével kiemelt elsõ sorban megszámoljuk a 5: else szavakat. A következõ érdekes momentum a 7. sorban látható. 6: {print NR": " $0} Itt az awk -v kapcsolója segítségével kívülrõl állítjuk be az 7: }' oszlop nevû awk változó értékét. Ez fogja megmutatni, hogy éppen hányadik oszlop összegzésénél tartunk. A szabványos Mint korábban említettem, az NR belsõ változó, amelynek a ki- és bemeneten kívül a -v kapcsoló szolgáltatja az egyetlen tartalma az éppen feldolgozott sor sorszáma, vagyis éppen az, kapcsolattartási lehetõséget a héjprogram és az awk program amire nekünk szükségünk van. között. Ezzel a módszerrel természetesen több változó Ha azt akarjuk, hogy az egy- és kétjegyû sorszámok utáni tartalmát is beállíthatjuk, a -v kapcsolót azonban minden kettõspontok szépen egymás alatt sorakozzanak, az egyjegyû- értékadásnál meg kell adni. ek elé egy-egy szóközt is be kell illesztenünk. Éppen ezt teszi a Magának az osszeg változónak a nullázása most a BEGIN fenti döntési szerkezet igaz ága. (Figyeljük meg, hogy awk-ban blokkba került, hiszen ezt a mûveletet csak egyszer akarjuk el- a karakterláncok összefûzéséhez elegendõ egyszerûen végezni. Hasonló okok miatt került az eredmény kiíratása az END megszakítás nélkül egymás mellé írni õket.) blokkba. Maga a fõprogram csupán egy összegzést tartalmaz. Van ebben a megoldásban egy kis tökéletlenség: akkor is A kész héjprogram most is a fenti részek egyszerû összemá- beljebb tolja az egyjegyû sorszámokat, ha nincsenek solásával állítható elõ, a parancssori kapcsolók kezeléséhez kétjegyûek. Ennek megoldását az olvasóra bízom. pedig ugyanazt az egyszerû case szerkezetet használhatjuk, mint a sorozat elõzõ részében. Büki András ([email protected]) Körülbelül kilenc éve dolgozik Linux Szépészet awk-val operációs rendszerrel. Állandó szerzõtársa Befejezésül bemutatom az awk használatának egy másik Prof. Dr. H. V. Kuksinak, akivel a Duna vagy a lehetõségét is. Biztosan az olvasónak is feltûnt már, hogy Tisza partján szoktak az élet és a tudomány milyen „rendszeretõ módon” vannak sorszámozva a viselt dolgairól töprengeni.

www.linuxvilag.hu 2003. szeptember 69 Kovácsmûhely

Az XML és a Perl (1. rész)

Az egyik legáltalánosabb adattárolási módszer alkalmazása a legnépszerûbb programozási nyelvek egyikével.

a programozási nyelvrõl beszélünk, egy olyan, a számí- megoldására. Hamar be kellett látni, hogy a hasonlónak H tógép által értelmezhetõ szövegre gondolunk, ami egy egyben egyszerûbbnek is kell lennie. 1996-ban a World Wide alkalmazást ír le. Erre jó példa a Perl. Ugyanakkor meg- Web Consortium (W3C) megbízott egy csoportot az SGML lepõen sûrûn elõfordulhat az is, hogy az adatunk válik olyan bo- kistestvérének a kidolgozásával, ami elég egyszerû ahhoz, nyolulttá, hogy külön nyelvre van szükségünk a leírásához. Igen hogy adatcseréhez lehessen használni, különösképpen webes egyszerû adatnyelvek is léteznek már. Elõször ezekrõl esik szó. alkalmazások esetében. Ez volt az XML (eXtensible Markup Language). 1998 februárjában jelent meg az XML-ajánlás, amit Adatnyelvek a  http://www.w3.org/TR/REC-xml címen olvashatsz el.

© Kiskapu Kft. Minden jog fenntartva Feltételezem, hogy némi gyakorlatra tettél szert a Perlben, és adatforrásként használtál már vesszõvel elválasztott mezõket Az XML mûködése tartalmazó sorokat (más néven rekordokat) magába foglaló Minden XML-dokumentum egy elhagyható bevezetõbõl állományt. Léteznek ennél bonyolultabb nyelvek is, mint az, (prolog) és egy ezt követõ elembõl, a gyökérelembõl (root amelyikkel a Makefile-okban találkoztál. Ez egy program element) áll. Minden elem elejét egy kezdõcímke jelöli, ami egy lefordításához szükséges adatokat tartalmazza. A szövegalapú kisebb jelbõl (<), egy névbõl, egy elhagyható tulajdonság–érték adattárolás csúcsát bizonyos értelemben a Sendmail beállító- párokból álló listából, és egy záró nagyobb jelbõl (>) áll. Minden állománya jelenti. Ha eddig nem találkoztál vele, örülj neki, elem végét zárócímke jelöli, ami hasonlít a kezdõcímkére, de hogy megúsztad. a kisebb jel után közvetlenül egy perjel (/) található, és nincs tulajdonság–érték listája. Az üres elemek azok, amelyek nem Az SGML tartalmaznak további elemeket, illetve szöveget. Ezeket olyan Hozzávetõlegesen harminc évvel ezelõtt vetõdött fel egy módon írhatjuk le rövidebben, hogy elhagyjuk a zárócímkét, teljesen általános adatnyelv létrehozásának az ötlete. Hamar ugyanakkor a kezdõcímkében a nagyobb jel elé egy perjelet be kellett látni azonban, hogy lehetetlen lenne az adattárolás szúrunk be. Egy nagyon egyszerû XML-dokumentum így fest: területén minden elképzelhetõ célra egyetlen nyelvet felkészí- teni. Így az utóbbi feladattal küzdõ csoport új célt tûzött ki Szia, vilag! magának. Egy olyan metanyelvet kívántak létrehozni, amellyel már könnyedén készíteni lehet egy jelölõnyelvet egy valóságos Szándékosan használtam a magyar dokumentum szót, hiszen dokumentumhoz. Ennek a törekvésnek az eredménye az a címke nevét én határozom meg. Ebben a példában mindössze SGML (Standard Generalized Markup Language), amely egyetlen gyökérelemünk létezik, a dokumentum, és csak egy- 1986-ban vált nemzetközi szabvánnyá. Az SGML neve egy szerû szöveget tartalmaz. Nincsenek tulajdonságai (attributum) picit megtévesztõ, hiszen ez önmagában nem egy jelölõnyelv – adjunk neki egyet! (markup language), hanem egy metanyelv jelölõnyelvek meg- határozásához. Minden ilyen jelölõnyelvet SGML-alkalmazás- Szia, vilag! nak hívunk, ami ismét megtévesztõ lehet azoknak, akik az alkalmazás szót csupán egy program szinonimájaként ismerik. A legtöbb SGML-alkalmazás nagyon sokáig ismeretlen volt az Most már dokumentum elemünknek van egy tulajdonsága, amerikai katonaságon és az egyes közhivatalok berkein kívül. a tipus, ennek értéke a "pelda". Az XML-ben minden A 90-es évek elején azonban színre lépett egy jelölõnyelv, amire értéket idézõjelek közé kell tenni, és minden tulajdonságnak a média is hamar rákapott: ez volt a HTML (HyperText Markup kötelezõ értéket kell adni. Az érték nélküli tulajdonságok Language). Minden SGML-alkalmazás hasonlít a HTML-re elfogadottak az olyan SGML-alkalmazásokban, mint a HTML, annyiban, hogy egyetlen elembõl áll, ami elemeket tartalmaz, de az XML-ben nem. s ezek további elemekbõl, illetve egyszerû szövegbõl állnak. Az XML-t létrehozó csapat ezt annak érdekében határozta Az elemek elejét és a végét kezdõ- és zárócímkék jelentik, meg, hogy az XML-értelmezõk egyszerûbbek és ezáltal amelyek relációjelek között szerepelnek. Nagy vonalakban így gyorsabbak legyenek. fest egy SGML-dokumentum. Az SGML nagyon tág fogalom, Az eddigi példákban dokumentumaink csak egyetlen elembõl és írásmódja számos dolgot engedélyez, ezért olyan nehéz álltak, és az is csupán szöveget tartalmazott (hivatalosabban SGML értelmezõt írni. Egy SGML-értelmezõ ráadásul addig karaktereket). Az XML igazi ereje azonban strukturáltságában nem is tud megfelelõen értelmezni egy dokumentumot, amíg rejlik: szövegen kívül az elemek további elemeket is tartal- nincs meghatározva a jelölõnyelv nyelvtana, a DTD (Docu- mazhatnak. Lássunk erre is egy példát! ment Type Definition) – de errõl majd késõbb ejtünk szót. Az XML Az SGML azt mutatta, hogy egy hozzá hasonló nyelv tökéletes krumpli választás lehetne a különbözõ programok közötti adatcsere

70 Linuxvilág Kovácsmûhely

juk, és elképzelhetõ, hogy a HTML következõ változata egy alma XML-alkalmazásként fog megjelenni. korte • nem olyan nyelv, ami otthoni kiadványszerkesztést tesz lehetõvé a weben. • nem a relációs adatbázisok helyettesítõje. Kis adatmennyi- ség esetén használhatunk XML-alkalmazást relációs adat- Itt a gyökérelemünk a kozert nevet kapta. Ez két csoport bázist használó programok közötti adatcserére, de nem túl nevû elembõl áll, ezek nev tulajdonsággal rendelkeznek. megfontolt döntés egy egész adatbázist így tárolni. Az egyik a zoldseg, míg a másik a gyumolcs értéket kapta. • nem egy mindenre használható svájcibicska tetszõleges Ezeken belül aru elemeket találunk, a fenti két típusnak meg- nyelvek létrehozásához. felelõen elrendezve. Az XML szépségét mutatja, hogy ezt a szer- kezetet többféleképpen is feldolgozhatjuk, ahogyan a sorozat Létre lehetne hozni egy egész programozási nyelvet XML-ben, következõ részeiben bõven láthatunk rá példát. A DOM felépítés de ronda lenne és teljes mértékben rugalmatlan. Az XML olyan például egy faelrendezésben tálalja számunkra az adatokat. adatok ábrázolására alkalmazható jól, amelyek természetüknél Mivel a cikksorozat az XML és a Perl kapcsolatával foglalkozik, fogva hierarchikusak, illetve bizonyos matematikai modellek ez a bevezetõ nem szolgálhat minden részletre kiterjedõ esetében (mint a gráfok). leírással az XML-t illetõen. Ha további tájékoztatásra lenne Szerintem az XML érdekes megközelítése az adattárolásnak,

szükséged, látogass el a  http://www.xml.com oldalra. és megér egy próbát. Mindent ki kell próbálni, és ha már © Kiskapu Kft. Minden jog fenntartva használtad, eldöntheted, hogy tetszett-e vagy sem. Mi nem az XML? Számos félreértésbõl származó tévhit kering az XML-rõl, és arról, hogy miért is hozták létre. Az XML azonban Fülöp Balázs ([email protected]) • nem a HTML helyettesítõje. Az XML egy metanyelv, míg 18 éves, imádja a Túró Rudit, a Debian Linuxot a HTML tényleges nyelv, amit az SGML metanyelvvel hatá- és a teheneket. Kedvenc írója Slawomir Mroek. roztak meg. A HTML-nek elõre rögzített elemei vannak, Leginkább a számítógépes hálózatok biztonsága az XML-alkalmazások elemeit az alkotóik határozzák meg. érdekli. A BME VIK mûszaki informatikus Ugyanakkor a HTML-t az XML szabályai alapján is írhat- szak hallgatója.

www.linuxvilag.hu 2003. szeptember 71 Kovácsmûhely

CMF-típusok Egy tartalomkezelõ csak testreszabás után használható igazán. Kezdjük munkánkat egy olyannal, ami elég hatékony ahhoz, hogy éppen úgy mûködjön, mint a szervezetünk.

z elõzõ hónapokban általánosságban foglalkoztunk Amikor elsõ ízben lépünk be a types a tartalomkezelõ rendszerekkel (CMS), majd külön (típusok) eszközbe, megfigyelhetjük a jelenleg kiemeltük a Zope tartalomkezelõ keretrendszerét megadott CMF-típusokat, többek közt a folders (mappák), (CMF).A A Zope CMF olyan eszközt ad a fejlesztõk kezébe, documents (dokumentumok), news items (hírelemek), links amellyel megalkothatják a saját tartalomkezelõ rendszerüket. (hivatkozások) és topics (témák) típusait. A kiválasztott típus Természetesen az, aki már dolgozott CMS-rendszerrel, tudja, nevére kattintva megnézhetjük, illetve megváltoztathatjuk a

© Kiskapu Kft. Minden jog fenntartva hogy felhasználás elõtt még a kereskedelmi változatok legtöbb- típusokhoz tartozó tulajdonságokat és mûveleteket. Ha például jét is alaposan át kell szabni és újra kell dolgozni. A Zope nem- a File tartalomtípus mûködését meg szeretnénk változtatni, csak egyszerûen az alapprogram árát csökkenti, de gazdag kattintsunk a File-ra. Az oldal tetején új fülkészlet jelenik meg, környezetet is kínál, amelyben könnyedén fejleszthetjük és amelyek közül csak a properties (alapértelmezett tulajdonsá- ízlésünkhöz igazíthatjuk a CMS-t. gok) és az actions (mûveletek) lesz az, ami nem része a hagyo- A CMF-oldalak létrehozása során (az oldal gazdájaként) doku- mányos Zope-készletnek. Igazság szerint a tulajdonságok fül a mentumokat adhatunk a rendszerhez, illetve módosíthatunk szabványos Zope-fülek közt is megtalálható, de a CMF-típusok és törölhetünk. Kattintsunk a könyvtártartalom hivatkozásra, számos szokatlan tulajdonságnévvel is bírnak. majd bökjünk a New... gombra, és válasszuk ki, hogy milyen A megszokott szabványtulajdonságokon túl minden típus típusú dokumentumot szeretnénk, illetve milyen azonosítóval néhány, a mûködését befolyásoló egyéb tulajdonsággal is rendelkezzen, majd kattintsunk az Add gombra. Gépeljük be rendelkezik: a segédadatokat (ez a cím, a leírás, a téma és a tartalomtípus), • Icon: karaktersorozat, ami azt írja le, hogy az adott típushoz kattintsunk a Change&Edit gombra, gépeljünk be valami tartal- milyen ikon jelenjen meg. mat, és már kész is vagyunk. • Product metatype: a Zope-termék metanevét adhatjuk meg Igaz ugyan, hogy a már meglévõ tartalomtípusok egy-egy egy- itt. A metaneveket az Add... menüpontban a Zope-kezelõ- szerû oldal esetében elegendõnek bizonyulhatnak, a kifino- felületén (Management Interface) használjuk. A CMF multabb oldalakhoz általában egyedi változatokra van szükség: hasonló Add... menüjében úgyszintén ezt a nevet találjuk. a saját típusokra. A CMF pontosan ennek a lehetõségét kínálja • Product name: azt a Zope-terméket jelöli meg, amelyikben fel. Ebben a hónapban a CMF-be illeszthetõ típusokkal foglal- a CMF-típust meghatároztuk. Minthogy a File és a News kozunk, megtudhatjuk, hogy miképpen dolgozzunk velük, elemtípusok már az eredeti CMF-telepítésben is benne viselkedését hogyan szabjuk az igényeinkhez, milyen módon vannak, itt a CMFDefault termék neve szerepel. Ami igaz is, telepítsünk újabb elemeket, vagy akár hogyan készítsünk saját hiszen ha belenézünk a /lib/python/products/CMFDefault tartalmat kezelõ egyedi típusokat. könyvtárba, amely, CMF 1.3-as változat alatt a CMF-1.3/ CMFDefault könyvtárra mutató közvetett hivatkozás, A CMF-típusok megtalálhatjuk a tartalomtípusokat meghatározó File.py Az új típusok létrehozásának legegyszerûbb módja, ha a CMF és a NewsItem.py Python-modulokat. Ha kíváncsiak beépített, webalapú típuskiterjesztés rendszerét használjuk. vagyunk, hogyan állíthatjuk be a tulajdonságok alapérté- Ennek segítségével olyan új típusokat hozhatunk létre, ame- keit, nézzük meg a factory_type_information lyek tagfüggvényeiket, tulajdonságaikat, mûveleteiket, megje- változót bármelyik CMF-típus akármelyik moduljában. lenítõ sablonjaikat és ikonjaikat megoszthatják a többi típussal. • Product factory method: megadja azt a tagfüggvényt, Amikor a webalapú kiterjesztésrendszerrel új típust hozunk amelyet a CMF a típus új példányainak a létrehozásához létre, az elemek bármelyikét megváltoztathatjuk, kivéve a tag- hív majd meg. függvényeket és a tulajdonságokat (properties). Más szavakkal, • Filter content types és Allowed content types: ez a két újonnan létrehozott típusunk akár egészen más kinézettel is bejegyzés ugyan két különálló tulajdonság, de együvé rendelkezhet, mint a szülõtípusa, a viselkedése azonban tartoznak. Mindkét tulajdonság valamennyi CMF-típusban továbbra is nagyon hasonló lesz. megtalálható, kizárólag a mappa stílusú elemekre vonat- A példa kedvéért vegyük a types eszközként ismert elemet, koznak. Ilyen például a Folders vagy a Topics. Az elsõ, a amihez a CMF-oldalunk kezelõfelületének portal_types ele- Filter content types kétértékû változó, amely az mére kattintva juthatunk el. Ha még nem adtunk meg CMF- Allowed content types érvényességét kapcsolja ki-be. oldalt a Zope alatt, könnyedén készíthetünk egyet a webalapú A második, az Allow content types változó azt mutatja Zope-kezelõfelület jobb felsõ sarkában található Add... menü meg, hogy milyen altípusok kerülhetnek az adott típusba. CMF Site pontjának kiválasztásával. Miután elkészítettük az Tehát például, ha egy olyan könyvtárat szeretnénk létre- oldalt, a kezelõfelületbõl a hozzátartozó ikonra kattintva jó hozni, ami kizárólag hírelemeket tartalmazhat, ezt a yes-re néhány, csavarkulcsra emlékeztetõ ikonnal ellátott különbözõ való kattintással könnyedén megtehetjük, majd megmu- beállításeszközt fogunk találni. tatva, hogy mely típusokat engedélyezzük.

72 Linuxvilág Kovácsmûhely

Új típus létrehozása A Zope induláskor végignézi a termékeket és a megfelelõ Új CMF-típusokat úgy hozhatunk létre a legkönnyebben, ha összefüggésekkel (contex) meghívja az initialize() egy már létezõ típusra alapozva a webalapú CMF-típuskészítõ tagfüggvényeket. Az összefüggések a Zope szerzeményezõ eszközt használjuk. Ez a módszer ugyan nem engedi meg, rendszerének a részei, ahol az objektumok tulajdonságait a hogy a típussal kapcsolatos mezõket vagy tagfüggvényeket rendszerben elfoglalt helyük legalább annyira meghatározza, megváltoztassuk, viszont lehetõvé teszi, hogy szabadon állít- mint az eredeti osztálymeghatározás. A fenti példában a hassuk be a típus mûveleteivel kapcsolatos engedélyeket, meg- MyProduct két létrehozóval (constructor) jegyzi be magát: ez a adjuk, hogy a típus megvitatható-e, sõt még az adattípus manage_addMyProductForm és a manage_addMyProduct. megjelenítésének a módját is megengedi. A CMF-típusnak nemcsak a Zope, hanem a CMF rendszerébe is Például lépjünk be a portal_types eszközbe, és a jobb felsõ be kell jegyeznie magát, már amennyiben meg akar jelenni sarokban található Select type to add... menüpontból válasszuk a különféle CMF-eszközök között. Termékünk initialize() a gyárilag meglévõ típusadatot. Itt két adatot kell majd meg- tagfüggvényének ezért a CMF-hez tartozó bejegyzési mûvele- adnunk: az új típus nevét vagy azonosítóját, illetve azt a már teket is tartalmaznia kell, azaz a __init__.py programnak modu- létezõ típust, amelyre alapozni akarjuk. Az ATFDocument lokat kell importálnia a CMF-bõl. Továbbá minden CMF-típusnak típust fogjuk létrehozni, amit értelemszerûen a Document nevû be kell jegyeznie magát a Products.CMFCore.utils egyik CMF alapértelmezett típusra fogunk alapozni. CMF vonatkozású alaphelyzetbe állító eljárásával. Például a Miután az új típust létrehoztuk, az összes típuslistában látható CMF-be épített CMFDefault __init__.py programja elsõ lépésként

és elérhetõ lesz, ideértve a típuseszközöket és a tartalomnéze- megadja azokat az osztályokat, amelyeket az elkövetkezendõk- © Kiskapu Kft. Minden jog fenntartva tet, amelyben a típusból új példányokat készíthetünk. Tulaj- ben be fog jegyezni: donképpen bárki, aki rendszergazdai jogosultságokkal rendel- kezik az oldalon, mostantól megtalálhatja az új ATFDocument contentClasses = ( Document.Document típust abban a menüben, ahonnan az újonnan létrehozandó új , File.File típusokat is kiválaszthatja. , Image.Image De mi értelme van ennek, ha egyszer az ATFDocument és a , Link.Link Document teljesen egyforma? Nos, valójában nem teljesen egy- , Favorite.Favorite formák, inkább csak azonos tagfüggvényeken és általános , NewsItem.NewsItem osztálymeghatározásokon osztoznak. A típus egyéb jellemzõi, , SkinnedFolder. mint például a tulajdonságok, az engedélyek és a bõrök (skins) SkinnedFolder alapértelmezés szerint azonosak ugyan a Document beállításai- ) val, de bármikor teljesen megváltoztathatják a kinézetet. Így például, ha azt szeretnénk, hogy a Document fehér alapon Majd valamennyi osztályhoz megad egy létrehozót: feketével jelenjen meg, vitafórum nélkül, az ATFDocument viszont gesztenye alapon sárga színnel és vitafórummal, ezt contentConstructors = ( Document.addDocument ezzel a módszerrel minden további nélkül, néhány kattintással , File.addFile kialakíthatjuk. Azután, amikor a késõbbiek során CMF-rend- , Image.addImage szerünket fejlesztjük, az ATFDocument típus a Document , Link.addLink típussal együtt önmûködõen frissülni fog. , Favorite.addFavorite , NewsItem.addNewsItem A színfalak mögött , SkinnedFolder.addSkinnedFolder Könnyen elõfordulhat azonban, hogy olyan típust szeretnénk, ) amely a meglévõ típusoktól teljesen eltérõ mezõkkel vagy visel- kedéssel bír. Erre is létezik néhány lehetõség, ezek közül a leg- Természetesen minden osztály saját egyedi eszközzel rugalmasabb (s egyben legnagyobb kihívást jelentõ, és legsilá- rendelkezhet: nyabbul dokumentált) módszer a CMF-szabályoknak megfelelõ új Zope-termék létrehozása. Minden Python-csomagnak a tools = ( DiscussionTool.DiscussionTool csomag gyökérkönyvtárában tartalmaznia kell egy __init__.py , MembershipTool.MembershipTool állományt. Ez az állomány akár üres is lehet, de itt helyezhetjük , RegistrationTool.RegistrationTool el azokat az utasításokat, amelyek a modul elsõ memóriába , PropertiesTool.PropertiesTool töltése során elindulnak. A termékek esetében maga az osztály , URLTool.URLTool az initialize() tagfüggvény segítségével az __init__.py , MetadataTool.MetadataTool belsejében jegyzi be magát a Zope rendszerébe, ami egyetlen, , SyndicationTool.SyndicationTool általában context-nek nevezett értéket fogad. A lecsupaszított ) Zope-termék tehát egyetlen __init__.py állományból áll, ami a következõ misztikus MyProduct-termékhez hasonlít: Végül a csomag initialize() tagfüggvénye, amit egy kicsit lerövidítve adunk közre, eszközök esetében a import MyProduct utils.ToolInit(), tartalom esetében pedig a ContentInit def initialize(context): eljárással bejegyzi az osztályokat. Ezután a visszakapott értékkel context.registerClass( meghívja az initialize(context) függvényt, ezáltal MyProduct.MyProduct, jegyezve be az új terméket a Zope rendszerébe: constructors= (MyProduct.manage_addMyProductForm, def initialize( context ): MyProduct.manage_addMyProduct) utils.ToolInit(´CMFDefault Tool´, ) tools=tools,

www.linuxvilag.hu 2003. szeptember 73 Kovácsmûhely

product_name=´CMFDefault´, Összefoglalás icon=´tool.gif´, A Zope CMF saját CMS-készítéshez használható lenyûgözõ ).initialize( context ) keretrendszer. Kétségem sincs afelõl, hogy a CMF alatt könnye- dén lehet CMS rendszert készíteni, ráadásul lényegesen keve- utils.ContentInit( ´CMFDefault Content´ sebb költséggel és erõfeszítéssel, mint amennyit egy teljes , content_types=contentClasses értékû üzleti megoldás igényelne. Azt mondják, a CMF ideje , permission=AddPortalContent még nem érkezett el azok számára, akik nem állnak bensõséges , extra_constructors= viszonyban vele vagy nem szeretnének jelentõs idõt pazarolni contentConstructors a megtanulására. Elgondolkodtató, hogy a CMF a Plone által , fti=Portal. került reflektorfénybe, az a tény pedig, hogy a Zope 3 közel factory_type_information vagy teljesen a CMF-fel egybeépítve jelenik majd meg, azt ).initialize( context ) sugallja, hogy a Zope Corporation mostantól komoly késztetést context.registerClass(Portal.CMFSite, érez a CMF lenyûgözõbbé és jobban dokumentálttá tételére, constructors=( mint korábban. Portal.manage_addCMFSiteForm, Amennyiben komolyabb programozói tapasztalatokkal rendel- Portal.manage_addCMFSite, kezünk a Python és a Zope területén, szinte biztosan fel tudjuk )) használni a CMF-rendszert saját típusaink Zope-termék alakú

© Kiskapu Kft. Minden jog fenntartva létrehozásához, velük pedig lenyûgözõ és érdekes oldalakat Láthatjuk, hogy az initialize() fenti változatának utolsó készíthetünk magunknak és ügyfeleink számára. Ugyanakkor, utasítása igen hasonló a MyProduct() példa initialize() amíg a típuskészítõ rendszer nem lesz egy kicsit jobban függvényének utolsó részéhez, ami ékesen bizonyítja, hogy a érthetõ, a Zope-közösségen kívül a CMF nem fogja az õt meg- CMF-típusok valójában néhány további kiegészítéssel rendel- illetõ figyelmet megkapni. A Zope-termékek létrehozása ma kezõ Zope-termékek. már nem tûnik olyan fekete mágiának, mint korábban, és várhatóan a jövõben a CMF-típusok készítésére is ugyanilyen Érdemes használni a CMF rendszert? szemmel tekintünk majd. E cikk zárja a Zope mint tartalomkezelõi felület körüli vizs- A következõ hónapban hirtelen fordulatot veszünk, és gálódásainkat. Körutazásunk a Plone-nal kezdõdött, és a egy másik nyílt forrású CMS rendszert vizsgálunk meg: CMF-rendszerrel, illetve a CMF-típusokkal zárult. Most, hogy a Bricolage-t. A Bricolage, ami Mason-, mod_perl- és már egy kicsit részletesebben is megismerhettük a CMF PostgreSQL-alapokra épül, igen szép területet hasított ki rendszerét, eldönthetjük, érdemes-e CMS alapú projektekbe magának az elmúlt években, és egyre jelentõsebb résztvevõje belekezdenünk. a nyílt forrású CMS-közösségnek. Jó hír, hogy CMF igen hatékony és rugalmas rendszer. Egy ügyes és hozzáértõ fejlesztõ kezében lehetõvé teszi, hogy saját Linux Journal 2003. augusztus, 112. szám CMS rendszert hozzunk létre a piacon jelenleg elérhetõ üzleti rendszereknél jóval olcsóbban, ugyanakkor nagyobb rugalmas- Reuven M. Lerner ( http:/www.lerner.co.il/atf) sággal. Minthogy a rendszer teljes egészében a gyors fejlesz- tésekhez szánt Zope-ra épül, az új típusok létrehozása, a Nyílt forrású programokra, valamint web- és adat- sablonok módosítása és az új szolgáltatások fejlesztése igen bázis-alkalmazásokra szakosodott tanácsadó. egyszerû és gyors. Könyve, a Core Perl, 2002 januárjában jelent meg Ugyanakkor a CMF, akárcsak a legtöbb nyílt forrású program, a Prentice Hall gondozásában. Reuven feleségével iszonyú hiányt szenved naprakész, használható leírások és lányaival Izraelben, Modi’in-ben él.

terén. Bizonyos vagyok benne, hogy a Plone CMS rendsze-  rének sikere nagyrészben a Plone-hoz tartozó kiváló leírásnak köszönhetõ. KAPCSOLÓDÓ CÍMEK Tehát amennyiben használni szeretnénk a CMF-et, készüljünk fel egy komoly adag Python-kód átrágására, nem kevés kísérle- A Zope CMF honlapja a  http://cmf.zope.org tezgetésre és más CMF-fejlesztõk segítségének igénybevételére. Már a honlapon sem tudtam egyszerûen eligazodni, Figyelembe véve a CMF központi szerepét a Zope világában, ráadásul semmilyen jó minõségû, hasznos útmutatót véleményem szerint a CMF-leírások minõsége és mennyisége sem találtam CMF-témában. folyamatosan javulni fog. Amíg azonban ez az idõ el nem jön, A legjobb, CMF-típusokról szóló bemutatkozó jellegû a CMF-fel való munka sok-sok türelmet, forráskódböngészést, írást nem a CMF-oldalon, hanem a Plone oldalán, a próbálkozást és hibajavítást igényel.  http://www.plone.org címen találtam. Például a A CMF rendszert jelenlegi állapotában – a legnagyobb  és legösszetettebb tartalomkezelõ rendszerek kivételével http://plone.org/documentation/CMFTypesBook/ – egy kicsit haboznék bármi másra felhasználni. backtalk_book_view címen fellelhetjük a CMF Types Ahogy mondják, a CMF rugalmassága és hatékonysága Book írást, amely jól olvasható és számos példát pontosan ebben a méretarányban mutatkozhat meg a tartalmaz. A The Plone Book 8. fejezete szintén tartalmaz leginkább. Röviden: amennyire a CMF nem megfelelõ néhány hasznos útmutatót a CMF-típusokról. Ezt a  a kisebb munkákhoz, valószínûleg épp annyira jól mûkö- http://plone.org/documentation/book/8 címen találjuk.  dik a nagyoknál. Az idõ múlásával várhatóan egyre jelen- Mint mindig, a http://www.zopelabs.com címen tõsebb szerepet tölt majd be a nyílt forrású tartalomkezelés- található a ZopeLabs szép számú példakódja és ben, keretrendszert biztosítva egy saját CMS programrend- minibemutatója. szer gyors kifejlesztéséhez.

74 Linuxvilág Fogadó a Linuxhoz

A hálózat rejtett zugai Hálózatunk legsötétebb sarkainak megvilágításához Marcel a hálózatmegfigyelõ eszközökbõl állított össze egy különleges menüt.

em, François, ennek a szimatolónak semmi köze a borhoz. A bor az a terület, ahol az emberi orr bármi- lyen programnál jobban teljesít, függetlenül attól, Nhogy milyen okos a programozó. Õszintén szólva, mon ami, a borkóstolás – természetesen minõségellenõrzési célzattal – olyan feladat, amit nem szívesen automatizálnék. Azoknak a szimatolóknak, amikkel a Linuxszal való kotyvasztás közben

találkozhatunk, más a rendeltetése. © Kiskapu Kft. Minden jog fenntartva Nézz csak ide, mon ami! Figyeld meg, hogy a sávszélességünk mekkora része van használatban itt és itt. Kíváncsi vagy, hogy ezek a kapcsolatok mekkora sávszélességeket jelentenek? François, miért nem ide figyelsz? Á, megérkeztek a vendé- geink! Miért nem szóltál? Bonsoir, mes amis! Örömmel üdvözöllek titeket ismét Chez Marcelnél, a kitûnõ Linux-konyha, a világ legjobb borai és 1. kép A conntrack figyelõprogram megjeleníti az álcázott kapcsolatokat a nyílt forrású dolgok iránt érzett általános szeretet házában. Üljetek csak le, és helyezzétek magatokat kényelembe! Mielõtt adat egy másik helyen található, mégpedig a megérkeztetek, éppen arról beszéltem François-nak, hogy /proc/net/ip_conntrack fájlban. A PID a kapcsolatot használó mennyi rejtett adat áramlik keresztül egy átlagos hálózaton. program folyamatazonosítója. Éppenséggel kiadhatunk egy Ha már a rejtett élvezeteknél tartunk, François, kérlek, siess cat parancsot a /proc/net/ip_conntrack fájlra vonatkozóan, a borospincébe, irány a nyugati szárny, és hozd fel az 1995-ös de az eredmény nem lesz egy szemnyugtató olvasmány. Rioja Imperial Gran Reservát. Ez a spanyol vörös egy tökéletes Pillantsunk az alábbi példára (a kimenet egyetlen burkolt sor): hálózatos bor, nemde? Éppen azt ecseteltem hûséges pincéremnek, hogy egy átlagos há- tcp 6 431253 ESTABLISHED lózaton mennyi minden történik, és sokan teljesen megfeledkez- src=192.168.22.5 dst=192.168.22.10 nek azokról a kapcsolatokról, amiket korábban õk kezdeményez- sport=34212 dport=22 src=192.168.22.10 tek. A mûködõ kapcsolataink ellenõrzésére szolgáló legegysze- dst=192.168.22.5 sport=22 rûbb eszköz, a Netstat minden Linux-rendszercsomagban megta- dport=34212 [ASSURED] use=1 lálható. A -a és -p kapcsoló segítségével rendszerünk szinte összes nyitott hálózati kapcsolata (vagy kapuja) feltérképezhetõ, Patrick Lagacé is nyilván nehezen olvashatónak találta ezt és azt is megtudhatjuk, hogy melyiket melyik program használja. a szöveget. Az õ Conntrack-nézõ parancsfájlja a Figyeljük meg, mi történik akkor, amikor a programot futtatom.  http://cv.intellos.net címen érhetõ el. Mivel egy Perl nyelvû Használni fogom a -n kapcsolót is, ami a Netstatot arra utasítja, parancsfájlról van szó, a letöltés után a jogosultságok meg- hogy ne habozzon az IP-címeket szimbolikus címekké alakítani. változtatásával egyszerûen tegyük futtathatóvá a fájlt, és adjuk Ez egy kicsit gyorsítja a program futását, mert így nem hajt ki a következõ parancsot: végre névfeloldást. Az eredmény egy meglehetõsen hosszú lista is lehet, ezért a kimenetet a more-ra irányítottam, lásd a listánkon. chmod +x conntrack-viewer.pl Á, François, megérkeztél a borral, nagyszerû. Kérlek, tölts a ./contrack-viewer.pl vendégeinknek! A lent látható lista nem teljes, de az általam kapott is hiányos. Ennek oka, hogy az álcázott (masqueraded) A kimenet alapértelmezésben az összes kapcsolatot megmu- kapcsolatok IP-táblái a Netstat számára nem láthatóak; ez az tatja, az álcázottakat is beleértve. A -m kapcsolóval korlátoz-

#netstat -apn | more Active Internet connections (servers and estabilished) Proto Recv-Q Send-Q Local Adress Foregin Adress State PID/Program name Tcp 0 20 192.168.22.100:22 192.168.22.100:1014 ESTABILISHED 4003/sshd Tcp 0 0 192.168.22.100:22 192.168.22.100:1015 ESTABILISHED 6122/named Tcp 0 0 192.168.22.100:53 0.0.0.0:* LIStEN 6122/named Tcp 0 0 127.0.0.1:53 0.0.0.0:* LIStEN 6122/named Tcp 0 0 0.0.0.0:* 0.0.0.0:* LIStEN 1231/httpd Tcp 0 0 0.0.0.0:443 0.0.0.0:* LIStEN

www.linuxvilag.hu 2003. szeptember 75 Fogadó a Linuxhoz

2. kép Az Nnetstat egy tetszetõs grafikus Netstat 4. kép Az azonosított fájlnevek a pktstat megjelenítõjén

keket – bízzunk a rendszerben. Amit meg kell adnunk, az a

© Kiskapu Kft. Minden jog fenntartva legközelebbi CPAN-tükrözések címe. Amikor a rendszer fel- teszi a kérdést, válasszuk ki a földrészt és az országot, majd az elérhetõ helyi tükrözéseket. Ha ezzel készen vagyunk, a Gtk telepítése magától folytatódik. A Gtk Perl-modulok telepítése eltart egy darabig. Talán nem árt felhívnom a figyelmet, hogy a telepítés végefelé még egy teszt- sorozat lefut. Ne lepõdjünk meg, ha egy grafikus ablak jelenik meg a képernyõn, azt kérve, hogy a csomaggal kapcsolatos grafikus varázslatok kipróbálása céljából kattintsunk a Run feliratra. Amikor elégedettek vagyunk az eredménnyel, a próba befejezéséhez kattintsunk a Close gombra, és végezzük el a telepítésbõl hátralévõ részt. Ha igazán rémisztõ – vagy szórakoztató, ez nézõpont kérdése – módon szeretnénk látni, hogy pontosan mi folyik keresztül a rendszerünkön, használjuk a Driftnetet. Már maga a név (vonóháló) elég ahhoz, hogy az embernek a hideg kezdjen futkosni a hátán. Röviden a Driftnet figyeli a kiválasztott csato- lófelületen áthaladó kép- vagy videofájlokat (csak az MPEG típusúakat), és a talált képeket megjeleníti. Hogy ez a felfedés a rendszergazda számára félelmetesebb-e, hiszen kiderül szá- mára, hogy a felhasználók miket néznek, esetleg maguknak a felhasználóknak, az több tényezõtõl függ. A képgyûjtemény 3. kép A Driftnet munkában: minden képetek hozzám tartozik! teljesen válogatás nélküli, semmilyen módon nem utal egy valóságos felhasználóra. hatjuk a kimenetet az álcázott kapcsolatokra, az ellenkezõ Saját példányunk beszerzéséhez keressük fel Chris Lightfoot hatás (az álcázott kapcsolatok elrejtése) a -d kapcsolóval érhetõ honlapját a  http://www.ex-parrot.com/~chris/driftnet címen, el. Vessünk egy pillantást az 1. képre, amelyen a program és töltsük le a forráskódot. Mielõtt a köztetek lévõ szellemidé- kimeneti képe látható. zõk megkérdeznék – amikor utoljára ellenõriztem, a honlap Alexander Neptun Nnetstat nevû programja tetszetõs külsejû még nem szûnt meg és nem is költözött melegebb éghajlatra. grafikus segédprogram a mûködõ hálózati kapcsolatok, útvá- A Driftnet lefordításához szükség van néhány programkönyv- lasztó táblázatok és egyebek megjelenítésére. Saját legfrissebb tárra, ezek közül a legjelentõsebb a libungif, a libjpeg és a példányunkat a  http://www.aneptun.de/linux/Nnetstat libcap. Ha még nem telepítettük õket, a hivatkozások a cikk címrõl tölthetjük le. A program alapjában véve egy Perl-pa- végén, a Kapcsolódó címek között megtalálhatók, de elõször rancsfájl, így telepítésre nincs is szükség, elég lehetõséget a rendszercsomag lemezein érdemes keresnünk. A csomag teremteni arra, hogy a Nnetstat.pl fájl futtatható legyen. Mint lefordítása ettõl kezdve egy egyszerû tarcsomag-kibontás és kiderül, a Nnetstat futtatásához szükség van még a Gtk.pm a make futtatása a forráskód könyvtárában. Ezután már futtat- modulkönyvtárakra, és míg a Perl minden bizonnyal a rend- hatjuk is a kicsomagolt programot a könyvtárból, vagy átmá- szerünkön van már, ez a modul valószínûleg nincs. A beszerzés solhatjuk egy megfelelõbb helyre: legegyszerûbb módja a Perl CPAN adattárról való letöltés, és a telepítõ parancssor is egész barátságos: ./driftnet -i eth0

perl -MCPAN -e "install Gtk" Mivel a Driftnet futtatásához a csatolófelületet vegyes módra kell állítani, a futtatásához rendszergazdai jogosultságra van Ha ez az elsõ alkalom, amikor ilyen módon telepítünk Perl-mo- szükség. A 3. képen a Driftnet mûködés közben látható. dulokat, elõször keresztül kell jutnunk egy kis kérdés–felelet Kétségtelen, hogy a hálózatunkon keringõ képek nézegetése részen. Menjünk végig rajta, és fogadjuk el a felajánlott érté- jó szórakozás, ha nem törõdünk a folyamat sávszélességigé-

76 Linuxvilág Fogadó a Linuxhoz

IPTraf. Ez egy ncurses alapú program, ami megjeleníti az IP-forgalmat, a csomagok és bájtok számát (beleértve a nem IP- csomagokat is), az UDP-forgalmat, a bejövõ és kimenõ adatok mennyiségét és még sok egyebet. Az IPTraf az a csomag, amelynek mindenkinél kéznél kell lennie, akit egy hálózat felügyeletével bíztak meg. Látogassunk el Gerard Paul Java-honlapjára ( http://iptraf.seul.org), és töltsünk le egy IPTraf-példányt magunknak. Csomagoljuk ki a tar és gzip programokkal becsomagolt fájlt, lépjünk a könyvtárba, és a program lefordítá- sához futtassuk a Setup-ot. A telepítési folyamat a bináris állomány /usr/local/bin könyvtárba való másolásával fejezõdik be. Az IPTraf futtatásához gépeljük be az iptraf parancsot, nyomjunk ENTER-t, és már sínen is vagyunk (az 5. kép egy mûködõ IPTraf-folyamatot szemléltet). Miközben az IPTraf összegyûjti és megjeleníti az adatokat, a képernyõ nagyon hamar megtelhet. Érdemes nagyobb, például

80×40 méretû X-terminálon futtatni a programot. Az ESC gomb © Kiskapu Kft. Minden jog fenntartva megnyomásával visszatérhetünk a pillanatnyi nézetbõl vagy 5. kép Az IPTraf alapértelmezett megfigyelõablaka folyamatból. Innen megváltoztathatjuk a beállításokat, szûrõket adhatunk hozzá vagy távolíthatunk el, majd folytathatjuk az nyével. De milyen egyéb érdekes dolgok mozognak ezekben adatgyûjtést. Az IPTraf különbözõ nézeteket kínál többek között a vezetékekben? Világhálós kérések, fájlletöltések, elektronikus az alapértelmezett állomások közötti forgalomról, a csatoló levelek, üzenetváltások és még egy csomó más. A legtöbb háló- forgalmi kimutatásának alap- és részletezett adatairól, egyéb zatfigyelõ program – a Netstatot is beleértve – megmutatja a fizikai statisztikákról és a csomagméret-hibákról. Ne tévesszen mûködõ kapcsolatokat, de a következõ kérdés az, hogy ezek meg a program látszólagos egyszerûsége. Az IPTraf elég rugal- pontosan mekkora forgalmat képviselnek. mas ahhoz, hogy az IP-megfigyelés számos igényét kielégítse. David Leonard írt egy ncurses-alapú programot, amely a Nos, mes amis, a záróra rohamosan közeledik. Mialatt François pktstat nevet viseli újratölti a poharaitokat, én annak a reményemnek adok ( http://www.itee.uq.edu.au/~leonard/personal/software/ hangot, hogy amikor elmentek, pontos képpel fogtok rendel- #pktstat), és igen jó munkát végez az egyes kapcsolatok által kezni arról, hogy mi történik a hálózataitokon. A jó rendszer- lefoglalt sávszélesség bemutatásának terén. Az üzemben töltött gazdák tudják, hogy mi folyik a hálózatukon, ám emellett azt idõ formájában tárolja a mindenkori hálózatterhelési értéket, is tudják, hogy mit nem szabad észrevenniük. Ezzel emelem de nem a futtatási sor folyamatainak, hanem az átviteli sebes- poharamat rátok, mes amis. A votre santé! ség nyomon követésével. A többi programtól az a képessége Bon appétit! különbözteti meg, hogy a hálózatunkon lévõ ügyfélgépekrõl letöltött vagy a webkiszolgálón áthaladó adatcsomagokhoz Linux Journal 2003. augusztus, 112. szám rendelt fájlneveket meg tudja jeleníteni. A pktstat fordítása a forráskód kicsomagolásából, a megfelelõ könyvtárra való Marcel Gagné ([email protected]) váltásból és a make parancs futtatásából áll: Mississaguában, Ontario államban él. Õ a szerzõje a Kiskapu kiadásában tavaly szep- tar -xzvf pktstat-1.7.2q.tar.gz temberben megjelent Linux-rendszerfelügyelet cd pktstat-1.7.2q (ISBN 96-9301-40) címû könyvnek (jelenleg is make egy könyvön dolgozik). su -c "make install" 

A program futtatásakor a -i kapcsolóval adhatjuk meg azt KAPCSOLÓDÓ CÍMEK a csatolót, amelyiknek a forgalmát vizsgálni szeretnénk: Conntrack nézõke  http://cv.intellos.net pktstat -i eth1 Driftnet  http://www.ex-parrot.com/~chris/driftnet  Ekkor egy, a 4. képen láthatóhoz hasonló ablak jelenik meg. IPTraf http://iptraf.seul.org Mint látható, elkezdtem letölteni a legfrissebb Openoffice.org- Libjpeg (Independent JPEG Group)  http://www.ijg.org csomagot. A tényleges fájlnév a kapcsolat adatai alatt jelenik Libpcap (csomagbefogó programkönyvtár) meg, ugyanez érvényes a HTTP-webkérésekre. Nemcsak a  http://www.tcpdump.org letöltés alatt álló fájl címe látszik, hanem a fájl neve is, legyen Nnetstat  http://www.aneptun.de/linux/Nnetstat akár egy HTML-oldal vagy egy kép.  Ha már a hálózati forgalomról esett szó, és ha egyszerûen arra Marcel borlapja http://www.marcelgagne.com/wine.html  akarjuk fáradozásainkat összpontosítani, hogy éppen hol és Libungif http://prtr-13.ucsc.edu/~badger/software/libungif mire használják a hálózatunkat, ennek kiderítésére a mai menü Pktstat legutolsó fogásaként felszolgált IPTraf a legmegfelelõbb.  http://www.itee.uq.edu.au/~leonard/personal/ Szerény konyhafõnökötök egyik kedvenc IP-forgalomfigyelõ software/#pktstat segédprogramja, amihez idõrõl idõre mindig visszatér, az

www.linuxvilag.hu 2003. szeptember 77 Mustra

Többfelületes programozás wxWindowszal A jól bevált wxWindows a most készülõ Chandler csoportmunkaprogram eszközkészlete.

többfelületes fejlesztés az utóbbi években minden- wxWindowst használó programok napos kifejezéssé vált – Redmond bugyraiban épp- Olyan vezetõ cégek is használják a wxWindowst, mint az úgy, mint a nyílt forrású kezdeményezések háza AMD, az Intel Graphics Lab, a Compaq Alpha processzor táján.A Használata szinte mindig a Java, .NET, a V vagy a Qt fejlesztõcsoportja, a Netscape és a Lockheed Martin. Az Open körül forog, de ne feledkezzünk meg a wxWindowsról sem. Source Applications Foundation az új, Chandler névre keresz- Akár MFC-kódot akarunk Linuxra átültetni, akár egyszerûen telt, személyes adatok kezelésére és csoportmunka támogatá- csak a lehetõ legszélesebb közönség számára akarunk egy sára szolgáló programjában használja (wxPython segítségével).

© Kiskapu Kft. Minden jog fenntartva programot elérhetõvé tenni, a wxWindows megállja a helyét. Furcsa módon úgy tûnik, hogy még nem sokan hallottak róla, de írásunk remélhetõleg segít abban, hogy szélesebb körben is megismerjék. Miért választanánk a wxWindowst a fenti fejlesztõeszközök helyett? Jogos a kérdés, és minden egyes eszköz esetében más és más a válasz.

Összehasonlítás más eszközökkel Bár a KDE-programok készítéséhez a Qt a szabványos eszköz, a wxWindows szintén használható. A Qt windowsos változata jogdíjas programok készítéséhez nem használható fel szaba- don, de a wxWindows igen, és a Qt az eseménykezelõ rend- szerhez különleges elõfeldolgozót igényel. A Microsoft .NET és az Ximian Mono rendszere éppúgy, mint a Java, nem annyira eszközkészlet, inkább technológia. Ezek a megoldások újabb réteget adnak a programokhoz, ami a teljesítmény rovására mehet. Errõl a kérdésrõl a „fejlesztési idõ A Helpblocks ( http://www.helpblocks.com) programmal vagy futásidõ” ellentét alapján is vitát lehetne nyitni, amit a különbözõ felületekre készíthetõk súgóállományok, és mind program életciklusa befolyásol a leginkább. Ahelyett, hogy Windows-, mind Linux-rendszerre a wxWindows könyvtárral belebonyolódunk a kifejezések körüli csatározásokba, csak fejlesztik. Többek között wxWindowsos alkalmazás még a annyit mondunk: „mindenki másképp csinálja”. Vulcan 3D (modellezõprogram bányaipari felhasználásra, de A V pedig egyszerûen nem olyan rugalmas, mint a wxWin- még több is ennél), a SciTech Display Doctor programja, az dows; nem támogat annyi fordítót. Még mielõtt a wxWindowst Intuitive MX (egy többsávos hangkeverõ, ami 3D-ben jeleníti ezekkel a többfelületes fejlesztõeszközökkel igazán összevet- meg a keverési folyamatot – az Intuitive Works fejleszti), nénk, fontos megemlítenünk, hogy a wxWindowsnak minden- valamint a Ground Control Station a Geneva Aerospace-tõl. féle összehasonlítás nélkül is megvannak a maga erõsségei. Akár a te programod lehet a következõ a listán! A wxWindowszal megkapjuk a nyílt forrás megszokott elõnyeit – jogdíj fizetése nélkül felhasználható, szabadon módosítható, Linuxos fejlesztés wxWindowszal továbbá megszabadulunk attól a kockázattól, hogy a terjesztõ Szükségünk lesz a gcc-re, és olyan eszközöket használhatunk, cég megszûnik (vagy olyan módon frissíti a programkönyv- mint a gdb, a ddd, az Emacs, valamint olyan egységes fejlesz- tárait vagy a fejlesztõeszközeit, hogy kénytelenek legyünk tõkörnyezetet, mint az Anjuta. Ha Windowsra is fordítunk, egy megvenni az új változatot). Ezenkívül a programot a legkülön- keresztfordítóra is szükség lehet. Legfõképpen pedig szüksé- bözõbb operációs rendszereken is szabadon futtathatjuk, günk lesz magára a wxWindows könyvtárra, ami szintén meg- például Unix/Linux, Windows, Mac OS 9, Mac OS X és OS2 található a wxWindows-honlapon vagy megrendelhetõ CD-n környezetben. Ráadásul minden rendszeren egységes meg- is. A cikk írásának idején a legfrissebb változat a 2.4.0-s volt. jelenést ad. A wxWindows felhasználási szerzõdése rugalmas, (jelenleg a legfrissebb megbízható változat a 2.4.1-es, ami és a Nyílt Forrás Kezdeményezés (Open Source Initiative) megtalalható az 51. CD Magazin/wxWindows könytárában). is jóváhagyta. Sokunk jó szokásaival ellentétben nem árt elolvasni a csomag- Körülbelül 11 évi fejlesztéssel a háta mögött a wxWindows ban található leírás linuxos fejlesztésre vonatkozó részét. üzembiztos, kiforrott fejlesztõi programkönyvtár, amihez a Nem árt feliratkozni a wx-user levelezési listára sem  http://wxWindows.org honlapon elérhetõ levelezõlisták (a  http://wxWindows.org lapon a Support alatt találjuk), valós idejû támogatást nyújtanak. A több mint háromszáz hátha nem megy minden könnyûszerrel. Legokosabb, ha a osztály és ötezer függvény nagyszámú szolgáltatást tesz kérdéseinkre rákeresünk az archívumban, hátha föltette már elérhetõvé. Ezzel a könyvtárral az MFC programok átültetése õket más is. is egyszerû feladat. Maga a könyvtár több mint hetven példaprogramot tartalmaz,

78 Linuxvilág Mustra

ami az MFC-ben nincs, és nem támogatja az OLE-t. Egy wxApp osztály létrehozása Listánkon egy üres eseménykezelõ is látható, ami olyan esemé- nyek kezelését teszi lehetõvé, mint az egérkattintás, a billen- #include "wx/wx.h" tyûleütések vagy a saját egyedi események. Ez a kód egy #include "mondrian.xpm" eléggé unalmas programot ír le, ami csak csücsül magában és meg se mukkan. // Új alkalmazásosztály (wxApp) A könyvtár tele van mûködõ példákkal – mintha minden osz- // meghatározása tályhoz lenne egy példadémon, ami bemutatja a mûködését. class MyApp : public wxApp { Az egyik az eseménykezelést bemutató példa, ami Vadim Zeitlin public: munkája. Azért választottam ezt, mert a legtöbb wxWindowszal // kezdõérték-adás ismerkedõ fejlesztõnek gondja akad az eseményekkel – az virtual bool OnInit(); olvasó tehát egy kis elõnyre tehet szert. Kipróbálásához szükség }; lesz a wxWindows könyvtárra, és ha ez megvan, akkor a teljes forráskódja is megtalálható a Samples könyvtárban. // Új kerettípus meghatározása fõ keretként A honlapon még egy Wikire mutató hivatkozás is fellelhetõ, class MyFrame : public wxFrame { úgyhogy könnyen elérhetõ a legfrissebb leírás, és még bele public: is javíthat, akinek hozzáfûznivalója akad.

MyFrame(const wxString& title, © Kiskapu Kft. Minden jog fenntartva const wxPoint& pos, Adjuk meg a fejlesztõknek, ami jár! const wxSize& size, A több ezer hozzájáruló mellett a fejlesztõcsapat magja külön long style = wxDEFAULT_FRAME_STYLE); említést és köszönetet érdemel: • Julian Smart  http://www.anthemion.co.uk // Eseménykezelõk (nem virtuális!) • Robin Dunn  http://www.python.org void OnQuit(wxCommandEvent& event); • Vadim Zeitlin  http://www.tt-solutions.com void OnAbout(wxCommandEvent& event); • Stefan Csomor  http://www.advanced.ch • Vaclav Slavik  http://sourceforge.net/users/vaclavslavik private: • Robert Roebling  http://www.roebling.de

// Eseménytábla bevezetése Õk a xw-user levelezõlistán gyakran napi, ha nem óránkénti DECLARE_EVENT_TABLE() rendszerességgel nyújtanak segítséget a wxWindows könyvtár }; felhasználóinak.

// Új alkalmazásobjektum létrehozása A wxWindows jövõje IMPLEMENT_APP(MyApp) A 2.4.0-s változat kiadását követõen a fejlesztõcsapat megadta azoknak a szolgáltatásoknak a listáját, amiket a 3.0-s változat- // ´Main App´ megfelõje ban látni szeretnének. A támogatott felületek köre folyama- bool MyApp::OnInit() tosan bõvül, ez a következõ kiadásban sem lesz másképp. { Az egyik új felület Marco Cavallini és Robert Roebling munká- // Fõ alkalmazásablak létrehozása jának köszönhetõen feltehetõleg a Windows CE lesz. MyFrame *frame = Készül a Winelib támogatás is a Winelib-csapat gondozásában, new MyFrame(_T("Example"), Julian Smart és Stefan Csomor pedig az MFC-rõl wxWindows- wxPoint(50, 50), wxSize(450, ra átültetést segítõ jogdíjas eszközöket fejleszti. 340)); Mivel egyre több cég használ Linuxot, MFC-kódjukat szeretnék frame->Show(TRUE); Linuxra átültetni, és ennek egyik legegyszerûbb eszköze a return TRUE; wxWindows könyvtár. Már csak a kedvezõ költségekek miatt } is megéri. Az átállással járó fejlesztési gondokat a könyvtár egyszerû felépítése a lehetõ legkevesebbre csökkenti, ezért a Windowsról Linuxra történõ átállást tervezõ cégek kódjuk egy- amelyek szinte mindent bemutatnak, amire a könyvtárat szerû átvitelére számíthatnak. Még wxNET felület fejlesztése valaha is eszünkbe juthat használni – valószínûleg ez a legjobb is folyamatban van. leírás, mert így mûködõ programokkal kísérletezgetve figyel- Lehet, hogy neked is van mit hozzátenned a wxWindowszal hetjük meg, hogyan is rakták õket össze. Ha a könyvtárat megvalósított programok hosszú sorához. A wxWindows beszereztük, és a megszokott fejlesztõeszközeinkkel már programokról naprakész lista található a kezelni tudjuk, kezdõdhet a programozás.  http://wxWindows.org honlapon.

Egy-két példa Linux Journal 2003. július, 111. szám Egyszerû alkalmazásosztályt létrehozni nem nehéz.  Listánkon egy wxApp osztály létrehozására láthatunk példát. Taran Rampersadt ( http://KnowProSE.com) Amint látható, könnyen hozhatunk létre új wxWindows alkal- 14 éves tapasztalattal rendelkezõ programfejlesztõ; mazást, és az MFC-t közelebbrõl ismerõ olvasók talán elgon- jelenleg tanácsadással és fejlesztéssel foglalkozik. dolkozva dörzsölik az állukat. Örömmel vehetik tudomásul, Trinidad és Tobagoról ír. Részt vesz a helyi számító- hogy nincs benne MFC, soha nem is lesz, de az osztályok gépes társaságokban, és segít a Caribbean FLOS Kon- egyszerûen átalakíthatók MFC-bõl. Akad benne néhány dolog, ferencia ( http://floscaribbean.org) szervezésében.

www.linuxvilag.hu 2003. szeptember 79 Falatka

Webkiszolgáló az asztal alatt Avagy hogyan készítsünk tartománynevet dinamikus IP-címmel rendelkezõ kiszolgálónknak.

kimutatások szerint hazánkban meg kell adnunk a felhasználónevet, természetesen operációs rendszerünk- az internet-hozzáférés még elektronikus levélcímünket és jelsza- nek megfelelõt. Válasszuk ki a Unixot igencsak siralmas állapotban vunkat. Valós elektronikus levélcímet az operációs rendszerek listájából és a van,A bár szép lassan javul a helyzet. Ez el- adjunk meg, mert a visszaigazolást erre leválogatott listából a ddclient prog- sõsorban a különbözõ DSL és kábeltévés a címre kapjuk meg – enélkül nem ramot. Ez természetesen csak példa, hozzáférések terjedésének köszönhetõ. mûködik a szolgáltatás. lehet kísérletezgetni, hogy a többi ho- Ha egy ilyen csatlakozás végére egy Amennyiben az ügyintézési részen gyan mûködik. A ddclient telepítése

© Kiskapu Kft. Minden jog fenntartva linuxos kiszolgáló kerül tûzfallal, felme- túlestünk, jöhet az érdemi munka. nagyon egyszerû: kicsomagolás után be rülhet az igény, hogy egy kis webkiszol- kell másolni a /usr/bin könyvtárba, majd gálót is lehetne üzemeltetni. No nem a beállításfájlt a /etc alá: azért, hogy hatalmas forgalmú csomó- pontot képezzünk információkban dús- cp ddclient /usr/bin káló portálok számára, hanem csak úgy, cp sample-etc_ddclient.conf a saját szórakozásunkra, hogy kipró- /etc/ddclient.conf bálhassuk, hogyan is mûködik egy ilyen. Esetleg törzsügyfeleinknek szeretnénk A másolások után már csak a beállítás- zártkörû hozzáférést biztosítani az anya- fájlt kell megfelelõen finomhangolni. gainkhoz. Egy ilyen weboldal elérésével Hívjuk be kedvenc szövegszerkesz- egyetlen gond akad, az, hogy nem tõnkbe, és szerkesszük át a példafájlt. tudjuk a címét, mivel az IP-cím idõ- Az alábbi sort keressük meg benne: közönként változik. Nézzük meg, hogy milyen megoldás #use=if, if=ppp+, lehetséges arra, hogy webkiszolgálónkat #via interfaces a változó IP-cím ellenére mindig állandó tartománynévvel érhessük el. A megol- Vegyük ki a megjegyzést az elejérõl, dáshoz egy ingyenes szolgáltatást majd pár sorral lejjebb a login és fogunk igénybe venni. password sorokat már bejegyzett A weben találhatóak olyan szolgáltatók, hozzáférésünk adataival töltsük ki. Most amelyek ezt a szolgáltatást kínálják, már csak meg kell adnunk, hogy melyik ilyen a DynDNS, a NoIp stb. Most a Most a frissen kapott hozzáférésünkkel tartományt szeretnénk frissíteni. Pár DynDNS-en keresztül mutatjuk be, már beléptünk, így a Dynamic DNS cso- sorral lejjebb, a ## dyndns.org hogyan is mûködik a dolog. portban ki tudjuk választani az Add host dynamic addresses csoportban az Elsõ lépésként látogassunk el a DynDNS menüt. A New Dynamic Host oldalon alábbi sorokat állítsuk be: weboldalára. A  http://www.dyndns.org megadhatjuk a webkiszolgáló nevét, oldalon megtaláljuk, amit keresünk. A nyi- például sajatweb vagy homeweb. server=member.dyndns.org, tóoldalon válasszuk mindjárt a Services A pont után egy szép nagy listából tar- protocol=dyndns2 fület, és a 6. pontban már meg is találtuk tományt választhatunk a névhez – vá- sajatweb.homelinux.net azt, amire szükségünk van: a Dynamic laszthatjuk például a homelinux.net-et, DNS szolgáltatást. így a webkiszolgálónk címe: sajatweb Ha elindítjuk a ddclient programot és sajatweb.homelinux.net lesz. Az IP- ezután változik meg az IP-címünk, a A Dynamic DNS szolgáltatás címnél a jelenlegi címünk látható, tehát program a DynDNS kiszolgálóján frissíti A dinamikus DNS-oldalra lépve tájékoz- a rendszer új tartománynevünket elsõ- a bejegyzést, és webkiszolgálónk a tatást kapunk a szolgáltatás mibenlé- ként ehhez a címhez fogja rendelni. bejegyzett címen mindig elérhetõ lesz. térõl, tehát itt kell majd beállítanunk Ezzel a tartománynév-bejegyzésen túl is a webkiszolgáló címét. estünk. Ha a böngészõnkben meghívjuk Ambrits Tamás Mielõtt bármit tenni tudnánk, be kell az új címet, máris a saját weblapjainkat ([email protected]) jegyeztetnünk (registration) egy új láthatjuk a cím alatt. Igen ám, de holnap Nem „fanatikus” Linux-rajongó, de egyre hozzáférést, így a felhasználónevünkkel más IP-címünk lesz, ezért az oldalak több feladat megoldására alkalmazza nagy és jelszavunkkal a késõbbiekben is mó- nem lesznek elérhetõk. megelégedéssel. dosítani tudjuk a beállításokat, ha az A feladat egy kis ügyfélprogrammal old- szükséges. A hozzáférést az Account ható meg. A Dynamic DNS csoportban a Orbán Zsolt ([email protected]) menü alatt tudjuk bejegyezni. Itt el kell Clients menüpont alatt nagyon sok ilyen Igazi Linux-, de inkább Debian-megszállott. fogadnunk a felhasználási feltételeket, programot találhatunk, ízlésünknek és Minden érdekli, ami Linux.

80 Linuxvilág