Beköszöntõ

Május van, éljen a tavasz, izzad- lat ez, mint ami motoros és kedves janak a pingvinek! benzinparipája között szokott kiala- Lássuk, mit tartogat ez a szám kulni. A szenvedélyes motorosok és azoknak, akik a napsütés ellenére autósok féltõ gonddal fényezgetik is hajlandóak olvasással tölteni a karosszériát, sõt néha még beszélnek egy kis idõt. is a gépükhöz. Olyan azonban, hogy Mûszaki érdeklõdésû olvasóink a motor vagy autó visszaszóljon, még közül valószínûleg sokan tudják, mit nem nagyon fordult elõ. (Eltekintve © Kiskapu Kft. Minden jog fenntartva neveznek a mérnöki gyakorlatban persze Knight Ridertõl, meg azoktól, „léptékhatásnak”. Ha kicsiben akarunk akik egyébként is rendszeresen szok- valamit megcsinálni, gyakran egészen tak hangokat hallani.) más módszerekre és eszközökre van Ebbõl is látszik, hogy a számítógép, szükségünk, mint annak, aki „nagyban az azért valami nagyon más. A digitális játszik”. És ez néha az egészen egysze- technika jelenlegi fejlettségi szintjén rûnek látszó dolgokra is igaz. Ha pél- valójában nincs különösebb akadálya dául mindössze annyi a feladat, hogy annak, hogy bármilyen szöveges tar- forraljunk tejet, akkor is elõre tudnunk talmat csaknem teljesen élethû emberi kell, hogy mekkora a „feldolgozandó” hangon olvasson föl nekünk a gép. anyagmennyiség. Fél litert az ember Ez a lehetõség különösen nagy segít- egyszerûen feltesz egy fazékban a gáz- ség lehet a látássérülteknek, bár eddig ra. 2-3 liternél már résen kell lenni, viszonylag drága programok kellettek mert ha nem kevergetjük, akkor az alja hozzá. A közelmúltban azonban odakozmál. 100 liternél pedig kever- – mint megannyi más területen – itt is hetjük, ahogy akarjuk, akkor is odaég. megjelent a nyílt forrású alternatíva. Ilyenkor a módszert és az eszközt kell Az emberi beszéd elõállításának lehetõ- lecserélni. ségeit mutatja be Klein Eleonóra cikke. Ugyanez igaz az ügyfelek kezelésére A mostanában meglehetõsen sokat em- is. Amelyik cégnek vagy vállalkozónak legetett számítógépes betörések és el- mindössze 5-10 fõnyi állandó ügyfél- követõik általában amolyan „bizserge- köre van, az egy notesz segítségével is tõen érdekes” témát jelentenek a médi- elboldogul. Több száz, vagy több ezer ának. Ebben a számban – ha nem is ügyfél esetében azonban már „célszer- örökre – de mi is csatlakozunk a trend- szám” kell a sikerhez. Ilyeneket lehet hez, Dr. Dudás Ágnes ugyanis a kalóz- az adott célnak megfelelõen fejleszte- kodást és annak jogi következményeit ni, lehet komoly pénzért vásárolni, elemzi. Elöljáróban mi egyebet is de akár ingyenes eszközt is találhat, mondhatnánk: reszkessetek betörõk. aki jól tájékozott. Természetesen folytatódnak korábbi Horváth Ernõ bemutat egyet azok kö- sorozataink is. Fábián Zoltán az eFltk zül a nyílt forrású ügyfélkezelõ rend- környezet, míg Illés Viktor a Samba szerek (más néven CRM rendszerek) használatát taglalja. Komáromi Zoltán közül, amelyek jelentõsen meg- az OpenOffice.org 2.0-ás változatának könnyíthetik egy-egy komolyabb új szolgáltatásait tekintette át, Garzó ügyfélkörrel rendelkezõ cég életét. András pedig folytatja a számítógép Aki ért hozzá, az néha talán érezte hálózatok bemutatását. már úgy, hogy a számítógép nem csupán munkaeszköz, hanem egyfajta Hasznos idõtöltést, jó szórakozást társ is. Némelyeknél olyasféle kapcso- kíván a Linuxvilág stábja. Hír-lelõ

Kódkert Bõvülõ 6000-család Intel SpeedStep Technology-t is ismerni Az O’Reilly Media és a nyílt forrású IT Két új taggal bõvült az NVIDIA GeForce fogják-e, egyelõre kérdéses, ahogy egy- szolgáltatásokkal foglalkozó SpikeSource 6 GPU-sorozata, a belépõ szintû 6200- elõre a pontos megjelenési ütemezés közös internetes forráskódtárat hoztak as modellel és a felsõ kategóriába tar- és az árak is homályban maradtak. tozó 6800 Ultra lapka 512 MB memóri- A kiszolgálók területén fontos újdonság ával ellátott változatával. Utóbbi lesz a legfeljebb négy darab Xeon pro- a nagy mennyiségû DDR3 memóriá- cesszor támogatására képes E8500 lap- létre. A CodeZoo oldalon az O’Reilly nak köszönhetõen még szebb, még kakészlet. Az E8500 kettõ darab elõol- könyveiben, egyéb kiadványaiban, jobb, még színesebb képet biztosít, és dali buszt támogat majd, ezek órajele blogjaiban, illetve a kiadóhoz kötõdõ természetesen támogatja a két kártya 667 MHz lesz. Mindkét buszra két-két konferenciákon szereplõ kódrészlete- együttes használatát lehetõvé tévõ SLI processzor csatlakozhat majd, amivel ket, leírásokat, feljegyzéseket kívánják megoldást is; elõbbi pedig a húszezer a lapkakészlet jóval nagyobb teljesít- összegyûjteni. A CodeZoo tartalma jó forint alatti piaci szegmensben biztosít ményt biztosít, mint egyetlen 400 MHz- néhány kategóriát fog majd át, kezdve viszonylag kifinomult grafikai szolgál- es buszra négy processzort csatlakozta- a játékoktól kezdve az üzleti alkalma- tatásokat. Az új GPU-kra épülõ kár- tó elõdjei. Továbblépést jelent a négy zásokon keresztül egészen a tudomá- tyák áprilisban jelennek meg, várható- memóriavezérlõ támogatása, amelyek nyos programokig; célja – ahogy min- an AGP és PCI Express csatlakozóval két csatornán keresztül PC2100, PC2700 © Kiskapu Kft. Minden jog fenntartva den hasonló gyûjteményé – a tanulás egyaránt kaphatók lesznek. és PC2-3200 típusú memóriákat kezel- és a jobb minõségû programkódok nek, akár memóriatükrözéssel, memó- készítésének elõsegítése. Kémelhárítás ria RAID-del, ECC alapú védelemmel és  http://www.codezoo.com/ Kémprogramok elleni védekezést se- üzem közbeni cserével. A lapkakészlet gítõ szoftverfejlesztõ készletet adott ki 28 PCI Express csatornát lesz képes ke- Nyitott a Nero az InterMute. A cég SpySubtract prog- zelni, ami például – elvileg – 28 darab A Nero AG linuxos változatban is meg- ramjához épült készletet termékinteg- PCI Express x1 csatolókártya vagy há- jelentette közismert és kedvelt Nero rátoroknak, hardver- és szoftverfej- rom darab x8 és egy darab x4 kártya CD- és DVD-író alkalmazását. lesztõknek egyaránt ajánlják, célja az csatlakoztatását teszi lehetõvé. egyes termékek kémprogramok elleni Az új lapkakészlethez új processzor védelemmel való bõvítésének segítése. is jár, a csúcs Xeon immár 3,33 GHz-es Alapját a SpySubtract motorja képezi, órajellel és 8 MB gyorsítótárral (vala- ezt a más termékekkel (tûzfalakkal, mint jóval félmillió forint feletti árral) A NeroLINUX RPM vagy DEB formá- víruskeresõkkel, behatolásérzékelõ üzemel, és esetében is számolhatunk tumú, szabványos csomagként tölthe- alkalmazásokkal) való egybeépítést az üzem közbeni órajelváltások lehe- tõ le, jelenleg a Red Hat 7.2 - 9.0 és támogató API-készlet egészíti ki. Segít- tõsége és a 64 bites kiterjesztések által Enterprise 3.0, a SuSE 8.0 - 9.2 és ségével a motor asztali gépeken, ki- kínált lehetõségekkel. a Debian 3.0 és 3.1 terjesztéseket támo- szolgálókon és hálózati készülékeken gatja. A NeroLINUX 2.4-es és 2.6-os egyaránt futtatható, míg a vállalati Kis helyen is elfér rendszermag alatt futtatható, külsõ szintû megoldások kidolgozását táv- A Toshiba után a Hitachi is bejelentette, segédprogramokkal képes a menet felügyeleti és automatikus telepítési hogy már ez év második felében sze- közben végzett hangkódolásra és megoldások teszik lehetõvé. retne függõleges adatrögzítési eljárást – dekódolásra, továbbá a belsõ meg-  www.intermute.com alkalmazó merevlemezeket piacra hajtók mellett az USB kapura csatlako- dobni. A merevlemezek kapacitását zó külsõ egységeket is ismeri. Intel alsó-felsõ szinten hosszú évek óta úgy növelik a gyár-  http://www.nero.com/en/ Az Intel a közeljövõben mind a belépõ tók, hogy a lemezek felületére írt mág- NeroLINUX.html szintû, mind a kiszolgáló gépek piacára neses jeleket egyre közelebb tolják újdonságokat ígér. A hétköznapi fel- egymáshoz. Az újfajta eljárásnál Adobe Reader 7.0 Linux alá használók új, már a 64 bites kiterjeszté- a mágneses hordozó réteget jóval mé- Szemfüles webezõk felfedezték, hogy seket is támogató Celeron processzoro- lyebben mágnesezik, így a korábbinál bár az Adobe letöltési oldalán nem kat kapnak. A Celeron D sorozatba tar- is közelebb tudják helyezni egymás- dicsekednek vele, az Adobe Reader tozó lapkák órajele várhatóan 2,53 és hoz az egyes biteket hordozó jeleket legújabb, 7.0-s változata Linux alá is 3,33 GHz közé esik majd, a lassanként – az újfajta rögzítési megoldás tehát elkészült. A Linuxot használók – már követhetetlenné váló számozási rend- kisebb technológiai ugrást jelent amennyiben ragaszkodtak az Adobe ter- szerben pedig a 326-355 tartományból a merevlemezek világában. A váltás mékéhez – eddig egy ma már megle- kapnak azonosítókat. Az új Celeronok a felhasználók számára természetesen hetõsen öregecske változattal, az 5.0.10- Socket 775 foglalatba illeszkednek majd, észrevétlen, õk csak annyit fognak essel voltak kénytelenek beérni, miköz- 256 KB másodszintû gyorsítótárat kap- tapasztalni az egészbõl, hogy hamaro- ben a windowsos tábor folyamatosan nak, elõoldali buszsebességük 533 MHz san megjelennek a 100 GB feletti ka- újabb és újabb kiadásokhoz juthatott lesz. Biztosan támogatni fogják a futta- pacitású, hordozható gépekbe szánt hozzá. Az Adobe Reader 7.0 linuxos ki- tás letiltását lehetõvé tévõ jelzõbit hasz- merevlemezek, az asztali egységek adása az  ftp://ftp.adobe.com/pub/adobe/ nálatát, míg az, hogy az órajel üzem kapacitása pedig hamarosan akár az reader/unix/7x/7.0/enu/ címrõl tölthetõ le. közbeni állítását lehetõvé tévõ Enhanced 1 GB-ot is elérheti.

6 Linuxvilág Hír-lelõ

Szárnyal a Firefox Egy gombnyomásra a világ Februárban továbbra is az Internet A Zoom Technologies újabb tagokkal Explorer uralta a böngészõk piacát, ám bõvítette ADSL modemes termékcsa- a Firefox fokozatosan erõsítve immár ládját. A négy kapuval rendelkezõ X6 8,45 százalékos részesedést ért el. Bár ez nagyjából egytizede az Explorer részesedésének, ahhoz lassan elég lesz, hogy a weblapok fejlesztõi ne csak Explorerre készítsék oldalaikat, de a Firefox/Mozilla vonal alatti megje- leníthetõséget is kénytelenek legyenek figyelembe venni. Üröm az örömben, hogy elsõsorban a mûszaki dolgok iránt érdeklõdõ felhasználók használ- ADSL modem tulajdonképpen nem ják az alternatív böngészõket, a hét- több, mint egy nagyon jó forgalom- köznapi internetezõk maradnak irányító és tûzfal, amely amellett, a kék e betûnél. hogy internet-hozzáférést biztosít, A Firefox terjedésének másik hátul- vezeték nélküli hálózatokkal is képes © Kiskapu Kft. Minden jog fenntartva ütõje az, hogy egyre könnyebben fel- kapcsolatot teremteni, valamint kiter- színre kerülnek a benne lévõ hibák. jedt felügyeleti szolgáltatásokat Az 1.0.0 változat kiadását gyors ütem- nyújt. Az X5v és a v3 modem vezeték ben követte a 17 hibajavítást magába nélküli kapcsolatok létesítésére foglaló 1.0.1, majd a további három ugyan nem képes, a vezetékes világ biztonsági rést betömõ 1.0.2, ám a kö- két részét, a telefonhálózatokat és az zeljövõben további sebezhetõségek internetet azonban közelebb hozza felismerésére lehet számítani. Aminek egymáshoz. Ezek a készülékek ren- kapcsán felmerül az a kérdés is, hogy delkeznek egy külön aljzattal, amely- a Firefox vajon valóban biztonságo- hez hagyományos telefonkészüléket sabb, mint a Microsoft böngészõje, kell csatlakoztatni; ezt követõen vagy csak egész egyszerûen senki a felhasználó választhat, hogy kime- nem foglalkozott eddig azzal, hogy nõ hívását a hagyományos rend- hibákat keressen benne? szeren szeretné bonyolítani – mert például a helyi hívások ingyenesek –, Megalakult a LiSoG vagy rendkívül kedvezõ áron VoIP LiSoG (Linux Solutions Group) névvel alapú hívást szeretne kezdeményez- új – vagy ha úgy tetszik, újabb – ni. Utóbbit a Global Village szolgáltatás a Linux terjedését segítõ szövetség bonyolítja, mely a SIP szabvány sze- alakult. Az IBM, a MySQL, a Novell, rint építi fel a kapcsolatokat, vagyis a Red Hat, a Siemens mellett számos a hasonló jellegû készülékek és szol- további informatikai vállalat, továb- gáltatások túlnyomó részével képes bá egyetemek és felhasználók támo- együttmûködni. Fizetni a VoIP alapú gatását maga mögött tudó, irodáját hívásokért csak akkor kell, ha a túlsó a németországi Stuttgartban megnyi- végponton kilépnek az internetes tó, tevékenységét elsõsorban a német hálózatból, és hagyományos tele- nyelvterületekre összpontosító szö- fonállomáson végzõdnek; ha a be- vetség az ipari igényeket és a mû- szélgetõpartner szintén internetes szaki lehetõségeket egyaránt figye- csatlakozást használ, akkor a be- lembe vevõ, szigorúan a tényleges szélgetés ingyenes (sõt, a cég tervei felhasználói igények alapján készülõ szerint ez a jövõben is így marad). megoldások kidolgozását célozza. A Zoom újdonságai a tengeren túl A LiSoG elsõsorban tudásanyagot körülbelül 100 dollár körüli árakon kíván közvetíteni a leendõ felhasz- vásárolhatók meg. nálók felé, segíteni szeretné õket  www.zoom.com a döntések meghozatalában, illetve be kívánja mutatni nekik a különféle Medgyesi Zoltán megoldások, üzleti alkalmazások ([email protected]) mûködését, függetlenül az alkal- A Linuxvilág hírszerkesztõje. mazott alaprendszertõl, a gyártóktól Szabadidejét legszívesebben és technológiáktól. a barátnõjével tölti, szeret  www.lisog.org autózni és bográcsban fõzni.

www.linuxvilag.hu 2005. május 7 Láttuk-hallottuk

Mi újság a rendszermag fejlesztése körül?

Linus Torvalds és Andrew Morton továbbra is kere- hetõ, Linux alapú terméket, és határozottan elutasí- sik a Linux fejlesztésének legjobb módját. Az totta a forráskód kiadását. Hirdetéseikben és útmu- üzembiztos és a próbasorozatok ötlete életképte- tatóikban egy pillanatig sem csinálnak titkot abból, lennek bizonyult, miközben egyre erõsebb az igény hogy multimédiás lejátszójuk Linuxra épül, ám az egyes kiadások üzembiztossága iránt, ahogy ezt a GPL szerzõdés már elmaradt, és sem weboldaluk, a 2.6.9-es és a 2.6.10-es kiadásnál is láthattuk sem maga a termék semmilyen lehetõséget nem Eközben sok felhasználó vonakodik a 2.6-os rend- kínál a forrás beszerzésére. szermagok tesztelésétõl, éppen az ezekbe kerülõ fejlesztések hatalmas mennyisége miatt. Linus, A SquashFS tömörített fájlrendszer rendkívül közel Andrew és mások most azon törik a fejüket, került ahhoz, hogy a hivatalos rendszermag- vajon a kiszámíthatatlan ütemezésûvé fa részévé váljon. Phillip Lougher kód- vált hivatalos fa hogyan nyerhetné ja összefogott, jól mûködõ és le- el minél több tesztelõ bizalmát. tisztult. Többen, köztük Greg Az egyik felvetés az üzembiz- Kroah-Hartman is bíztatták

© Kiskapu Kft. Minden jog fenntartva tos és a próbaváltozatok a kód beépítésére, ám váltakozó kiadásának Phillip vonakodik. visszahozása volt. Számos új szolgáltatást A 2.6.11 tehát egy szeretne még hozzáad- üzembiztos rendszermag ni, és még nem tudta volna, és csak az utóbbi eldönteni, hogy ezeket hónapok hibajavításait tar- a hivatalos rendszer- talmazná, a 2.6.12 pedig az magba való befogadás elmúlt hónapok újdonságait elõtt vagy után lenne foglalná magába, és így to- jobb megvalósítani. Jóma- vább. Egy másik megoldás az gam biztos vagyok abban, lenne, ha egy negyedik számmal hogy amikor Phillip elérkezettnek bõvítenék a változatszámokat, így példá- látja az idõt, a SquashFS zökkenõ- ul a 2.6.11.2 és a 2.6.11.3 hibajavításokat tartalma- mentesen fog beépülni a 2.6-os rendszermagba. zó kiadás lenne, az új fejlesztések pedig a 2.6.12- A rendszermagot gondozó srácok már türel- es kiadásba kerülnének. Eddig még semmi nem metlenül várják. dõlt el, Linus és Andrew egyelõre az eddigi rend- szer feladásának hatásait próbálják feltérképezni. A FUSE – ez egy felhasználói térben futó fájl- Érdemes követni a fejleményeket. rendszer – ellenben komoly problémákkal küzd, miközben a fõ rendszermagfa részévé próbál válni. Érdekes szerzõi jogi kérdés merült fel, amikor Különösen Linus Torvalds véli úgy, hogy a fájl- Adrian Bunk felvetette, hogy a ReiserFS fájlokban rendszerek jellegüknél fogva nem igazán futhatnak van egy megjegyzés, amely szerint minden bõvítés felhasználói térben. A fájlrendszer leválasztása szerzõi joga Hans Reiserre száll át. Bár a szerzõk a rendszermagról szerinte olyan, mintha a mikro- megtehetik, hogy hozzájárulásaikhoz külön nyilat- rendszermagok szemléletét követve elkülönítenénk kozatot mellékelnek, amellyel fenntartják jogaikat, egymástól a rendszer belsõ részeit. Amiért Linus ám Adrian mégis zavarosnak vélte a dolgot. Linus a monolitikus rendszermagszerkezetben hisz, azért Torvalds támogatásáról biztosította Hans eljárását, utasítja el a felhasználói térben futó fájlrendszer valamint maga Hans ügyel arra, hogy minden hozzá- ötletét is. Más részrõl Linus úgy nyilatkozott, hogy járuló figyelmét felhívja a szerzõi jogi kérdésekre. hajlandó elfogadni a FUSE-t, ám csak korlátozott Hans szerint a kérdéses szöveg csak a forrásfáj- szolgáltatáskészlettel, a felhasználói térben futó lokban szerepel, célja pedig csupán az, hogy védje fájlrendszerekhez nem illõ jellemzõk eltüntetése magát például a The SCO Group rosszindulatától. után. Hasonló korlátokat emelt annak idején Christoph Hellwig rámutatott, hogy az SGI is hason- a DevFS elõtt is. A DevFS kapcsán viszont teljes ló eljárást követ, amikor befogadja mások hozzájáru- zûrzavar alakult ki, részben azért, mert a /dev lásait az XFS fájlrendszerhez. Megfelelõ precedens- könyvtár a Linux mûködésének egyik sarokköve. sel, némi elõzékenységgel és a fõ-fõ linuxos figura Talán soha más fájlrendszer nem lesz ennyire jóváhagyásával lehetséges, hogy ez a megoldás vitatott sorsú. a rendszermag egyéb területeire is át fog terjedni. Zack Brown Marcus Metzler felhívta a figyelmet arra, hogy az iRiver kiadott egy kizárólag futtatható formában elér- Linux Journal 2005. április, 132. szám

8 Linuxvilág Láttuk-hallottuk

Új termékek

PeerFS 3.0 változat WebScan for Linux kat és indexeket különálló leme- A Radiant Data Corporation kiadta A WebScan for Linux víruskeresõ zekre vagy tömbökre is képes el- a PeerFS 3.0-s változatát. A PeerFS és tartalombiztonsági szolgáltatá- helyezni, növelve a lekérdezések az adatok folyamatos elérhetõsé- sokat egyesítve védi a hálózatot, sebességét. Végül a PostgreSQL mégpedig az átjáró vagy a proxy- az Adaptive Replacement Cache kiszolgáló szintjén. A WebScan algoritmus, az új háttéríró és alkalmas arra, hogy a szervezetek a szintén új vákuum késleltetés szabályozzák az átjárón keresztül révén továbbfejlesztett lemez- és elérhetõ webes tartalom típusát, memóriahasználatot ígér. gét biztosítja Linux alapú vállalati illetve védjék a hálózatot a proxyki- www.postgresql.org alkalmazások számára. A PeerFS szolgálókon keresztül bejutni pró- IBM OpenPower 710 segítségével egyidejû tranzakciókat báló vírusoktól. A WebScan képes Az IBM bejelentette a POWER5 lehet végezni olyan kiszolgálókon, a weblapok tartalmának házirend processzorra épülõ, Linuxot futta- amelyek különbözõ helyeken van- alapján történõ ellenõrzésére, vala- tó eServer OpenPower 710 kiszol- nak, és különálló, de azonos adat- mint a vírusok, férgek, trójaik és © Kiskapu Kft. Minden jog fenntartva tárolókkal rendelkeznek. A PeerFS egyéb rosszindulatú programok 3.0-s kiadásának újdonsága a több- felismerésére. MIME fájltípusokból féle terjesztés támogatása, ide ért- álló feketelistát is összeállíthatunk, ve a Trustixot és a Debiant; a 2.6- amelyre például a hang- és képfáj- os rendszermag, a SuSE Standard lokat felvéve takarékoskodhatunk gálót. Az OpenPower 710 egy Server 9.0 és a SuSE Enterprise az internetkapcsolat sávszélessé- vagy két processzort tartalmazó, Server 9.0 támogatása; az elve- gével. A HTTP alapú fájlfeltöltések az IBM 64 bites Power géptípusá- szett csomópontokra vonatkozó letiltására is alkalmas, amivel meg- ra épülõ, szekrénybe szerelhetõ házirend, amely képes észlelni, ha elõzhetõ a bizalmas adatok ellopá- rendszer, kiegészítõ jelleggel a csoport egy vagy több csomó- sa, kiszivárogtatása. Segítségével a POWER5 rendszerekre egyedi- pontja elérhetetlenné vált; vala- számos webhely engedély nélküli leg jellemzõ, a nagygépek világát mint a kettõnél több csomópontból elérését megelõzhetjük olyan szer- idézõ virtualizációs és mikroparti- álló egységességi csoportok meg- vezetek minõsítései alapján, mint cionálási szolgáltatások támogatá- adásának lehetõsége. Emellett a RASCi, Safe Surf és ICRA. sára is képes. Az OpenPower 710 a PeerFS lemez nélküli ügyfelei A rendszergazdák számára a Web- 1,65 GHz-es POWER5 mikropro- új szolgáltatásokkal bõvültek, Scan széles körû jelentõrendszert cesszorokkal és legfeljebb 32 GB a mount parancs a továbbiakban biztosít a házirend áthágásainak memóriával vásárolható meg. képes a terheléselosztásra és az figyelésére, a beállítások módosí- Támogatja a Novell SUSE LINUX állomáshoz kötésre. tását és a felügyeletet pedig grafi- Enterprise Server 9-et és a Red www.radiantdata.com kus felülettel segíti. Hat Enterprise Linux AS 3-at. www.mwti.net 1-Box for Linux 1.0 Alapesetben a 710 1 GB memóri- Az 1-Box for Linux 1.0 egy önálló PostgreSQL 8.0 át tartalmaz, házában 73 GB-os program, tetszõleges Linux ter- A PostgreSQL Global Develop- 10000-es fordulatszámú merev- jesztéshez hozzáadva egyetlen ment kiadta a PostgreSQL objek- lemezt és DVD-ROM-meghajtót PC-bõl egy akár tíz munkaállo- tum alapú, relációs adatbázis-keze- találunk. A garancia három év, másból álló hálózatot hoz létre. lõ rendszer 8.0-s változatát. A 8.0-s következõ munkanapi javítást Ha a fõ PC-t két monitor vezér- változat fontos újdonsága az SQL- biztosít. A négy darab szabvá- lésére is képes videokártyákkal világban jól ismert mentési pontok nyos, menet közben cserélhetõ bõvítjük, akkor a munkaállomá- támogatása, amelyek segítségével Ultra320 SCSI meghajtóhely révén sokhoz csak egy monitorra, vala- egy adatbázis-tranzakció bizonyos a gép akár 570 GB-nyi belsõ tár- mint egy USB-s billentyûzetre és részei a teljes mûvelet visszavoná- helyet is kaphat. A bõvítést három egérre van szükség. A felhaszná- sa nélkül is visszavonhatók. PCI-X foglalat és két 10/100/1000 lók egyszerre böngészhetnek az Ugyancsak új a PostgreSQL 8.0- Mbps sebességû Ethernet aljzat interneten, egymástól függetlenül ban az idõpontra való visszaállítás segíti, a magas rendelkezésre levelezhetnek, és a telepített lehetõsége, amely az önmûködõ- állást pedig az igény szerint akár programok bármelyikét szabadon en és folyamatosan vezetett tranz- redundáns, üzem közben csatla- futtathatják. Az1-Box a Novell, akciós naplók alapján lehetõvé te- koztatható tápegységek és hûtõk a Mandrake, a Fedora Core és szi az adatok teljes visszaállítását, biztosítják. a Red Hat terjesztéseket támogat- illetve az óránkénti és napi bizton- www-1..com/servers/ ja, a sor hamarosan a Sun Java sági mentések kiváltására is alkal- eserver/openpower Desktoppal bõvül. mas. A 8.0-s változat a táblatereket Linux Journal 2005. 132. szám www.userful.com is ismeri, így a nagyméretû táblá-

www.linuxvilag.hu 2005. május 9 Láttuk-hallottuk

A hónap szakmai tanácsai

A fájlleírók és a blokkméretek módosítása mindenképpen vedd figyelembe, és döntsd el, Két kérdést szeretnék feltenni. hogy sebességre vagy tárkapacitásra akarsz opti- 1) Vajon milyen hatással lesz a teljesítményre, ha malizálni. Gondold át, hogy szerinted mi lesz egy linuxos lemezrészt az alábbi parancsokkal a fájlok átlagos mérete, és melyek lesznek a leg- formázok meg: gyakrabban használt fájlok. Arra is ügyelj, nehogy túl kevés fájlleíróra korlátozd magad. Valószínû, mkfs.ext2 -i 1024 -b 1024 /dev/hda1 hogy – persze attól függõen, hogy mire haszná- mkfs.ext3 -i -1024 -b 1024 /dev/hda2 lod a gépet – hosszú távon jóval több fájlod lesz, mint eredetileg gondoltad, ezért ne légy túl szûk- A Linux Journal Tudom, hogy a második paranccsal naplózó fájlrend- markú. Ami az ext2 és az ext3 közötti teljesít- honlapján számtalan szert hozok létre, de a nagy számú fájlleíró miatt ménykülönbséget illeti, a naplózó fájlrendszerek gond megoldásához nem fog lelassulni a rendszer? Egy tûzfalgéprõl van mindig nagyobb terheléssel mûködnek, ám szó, amin Squid, INN és qmail szolgáltatás futna. a sebességkülönbség elenyészõ, különösen, találhattok további ha a naplók meglétének elõnyeivel vetjük össze. segítséget. A Sunsite 2) Van két hasonló gépem, 66 MHz-es 486DX és 50 Timothy Hamlin,  tüköroldalait, a gyakori MHz-es 486SLC2 processzorral, mindkettõben 32 [email protected] kérdéseket és az egyéb MB RAM van. Megoldható, hogy Red Hat Linux útmutatásokat a 9-es változatát futtassam rajtuk? Vagy inkább 2) Sem a Red Hat 9-hez, sem a Red Hat 6.2-höz nincs már támogatás, vagyis nem adnak ki hoz- www.linuxjournal.com tegyem fel a Red Hat 6.2-es változatát, majd az up2date-tel frissítsem? zájuk biztonsági frissítéseket. Az utód, a Fedora honlapon olvashatjátok Lee Spivey, futtatásához legalább Pentium processzor kell. el. A rovatban közzétett  [email protected] Olyan terjesztést kell telepítened, amely válaszokat Linux-szak- a Pentiumnál régebbi processzorokat is támogat- értõk kis csapata készí- 1) Az, hogy a fájlleírók mérete és száma mekkora ja – például Gentoot vagy Debiant. Ne feledkezz hatást gyakorol a lemezelérési sebességre, attól el a biztonsági frissítésekrõl sem. tette el. További kérdé- Tulajdonképpen mindegy, hogy mit teszel fel, seiteket szívesen fogad- függ, hogy milyen típusú fájlok vannak a lemezen. A fenti parancsokkal inkább a merevlemez kapaci- ezek a gépek egy korszerû munkakörnyezet futta- tásához túlságosan lassúak. Webkiszolgálónak, ják (angol nyelven) a tásának jobb kihasználását lehet elérni – persze  nyomtatókiszolgálónak, tûzfalnak, esetleg tanulási www.linuxjournal.com/ az sem rossz dolog. Ez különösen a nagyméretû célra tudod használni õket. lj-issues/techsup.html merevlemezeknél igaz, náluk megsokszorozódik Don Marti, a fenti érték hatása. címen, ahol csak egy  [email protected] kérdõívet kell kitöltene- A gyakorlatban azonban a weblapok és üzenetek mérete már túllépett az 1 KB-on. Ha a fájlrend- tek, de a [email protected] szer blokkméretét ekkorára korlátozod, akkor Régi Red Hat címre levelet is írhattok. a Linux a megfelelõ adatok megtalálásához túlsá- Gondjaim vannak a Red Hat 7.2 telepítésével egy A levél tárgyában gosan sok fájlleírót lesz kénytelen bejárni és kö- 133 MHz-es PC-n, amit Smoothwall proxyként hasz- szerepeljen a „BTS” vetni. Minél több fájlleíró van egy fájlban, annál nálok. A telepítés sikeresen megvolt, ám amikor újra- kulcsszó. tovább tart mindez. Figyelembe véve a jelenlegi indult a gép és megpróbáltam bejelentkezni, valami merevlemezek MB-ra vetített árát, valamint azt, olyan üzenetet, kaptam, hogy error in service hogy a megtakarítás valószínûleg nem lesz több mode. Nehéz pontosan megmondani, mert csak egy 100 MB-nál, inkább 4-8 KB-os érték használatát pillanatra villan fel a képernyõn, aztán azonnal vissza- javaslom. dob a bejelentkezési képernyõre. Ellenõriztem a fájl- Chad Robinson, rendszert, a Bash telepítve van, valamint a környezeti  [email protected] elérési út is helyesen van beállítva. Valami mégis biz- tosan rossz, mert nem tudok bejelentkezni. Van vala- 1) Ahogy Chad is rámutatott, a blokkméret befolyá- mi ötletetek, hogy mi lehet a hiba oka, vagy – ami solja a teljesítményt. Ha a használatban lévõ fáj- még jobb volna – tudjátok, mi lehet a megoldás? lok jellemzõen 1 KB feletti méretûek, akkor eléré- Nagyon megköszönném a segítségeteket. sükhöz több fájlleírót is be kell olvasni, ami telje- Jeff, sítményromláshoz vezet. Nem is arról van szó,  [email protected] hogy mennyi fájlleíród lesz, hanem arról, hogy a leggyakrabban használt fájlok beolvasásához Amikor a rendszer elindult és megjelenítette a beje- hányat kell elérni. Vagyis ami fontos, az a fájlle- lentkezési képernyõt, nyomd le és tartsd lenyomva író/fájlméret arány, tehát pontosan az általad aCTRL és az ALT gombot, majd nyomd meg az F1 megadott mkfs parancsokban szereplõ -i átadott gombot. Ekkor kapsz egy parancssort. Be kell tud- érték fordítottja. A fájlrendszer tervezésekor ezt nod jelentkezni, mint root felhasználó. A 1-6-os szá- © Kiskapu Kft. Minden jog fenntartva

10 Linuxvilág Láttuk-hallottuk

«

mú konzolok között az ALT-F1 - ALT-F6 billentyûkom- zott azon, hogy a lehetõ legtöbb géptípushoz készít- binációkkal tudsz váltogatni, az F7 pedig egy grafi- sen bináris kiadásokat, köztük 64 bites gépekhez is, kus képernyõ. Miközben a konzolok között lépkedsz, így ez a gond mára jelentéktelenné vált. további részleteket is találsz a hibaüzenetrõl és/vagy A Gentoo telepítésének folyamata rémálom, és bár a hozzá vezetõ eseményekrõl. Bejelentkezés után a fejlesztõk már elkezdték egy újabb telepítõ össze- nézd át a /var/log/messages fájlt és a /var/log könyv- állítását, nem biztos, hogy nem lesz ijesztõ számod- tárban lévõ egyéb naplófájlokat. Ennyivel már el ra, amit látni fogsz, amikor a géped megkezdi a be- tudsz indulni. töltését. Ha mást szeretnél, akkor a Red Hat és Usman S. Ansari, a Novell/SuSE terjesztések is jó választásnak tûn-  [email protected] nek. Mindkettõbõl vannak natív fordítások, és telepí- tõjük is könnyen kezelhetõ, áttekinthetõ. Ha teljesen Grafikus felületen próbálsz bejelentkezni? Ha igen, szabad terjesztést akarsz, akkor a Debiant válaszd, próbáld letiltani a grafikus felületet. Ehhez át kell fejlesztõi az AMD64-es változatát az i386 után a leg- írnod a /etc/inittab fájlt, és 5-ös helyett 3-as futási teljesebb átültetésnek nevezik. Az említett terjeszté-

szintet kell megadnod. A következõ sort: sek mindegyike rendelkezik olyan csomagkezelõvel, © Kiskapu Kft. Minden jog fenntartva x:5:respawn:/etc/X11/prefdm -nodaemon amellyel a rendszert naprakészen tudod tartani, vala- mint könnyedén tudsz új alkalmazásokat, például erre írd át: médialejátszókat telepíteni – vagy éppen be tudod x:3:respawn:/etc/X11/prefdm -nodaemon szerezni a szükséges kodekeket. Chad Robinson, vagy a rendszertöltõn keresztül adj meg ideiglenes  [email protected] beállításokat. Ha nem xdm-et futtatsz, akkor vizs- gáld át a naplófájlokat, és keress hibajelzéseket. Külön felhívom a figyelmed a /var/log/messages és A kezdõlap felkutatása a /var/log/secure fájlra, illetve X használatakor az X- A Red Hat 9.0-s változatát futtatom 2.4.20-8-as naplókat is át kell futni. rendszermaggal, és a terjesztéshez tartozó Apache Timothy Hamlin, kiszolgálóm használom. Amikor belépek a kiszolgá-  [email protected] lóra, egy tesztoldalt látok. A honlapom a /var/local/ www/html könyvtárban van, ahogy azt javasolják. Melyik terjesztést? Azt mondták, hogy a tesztoldalt cseréljem fel a hon- lapommal. Meg tudjátok mondani, hogy melyik fájlt Ostoba kérdésnek tûnhet, de azon gondolkodom, kell átírnom ehhez? Kinyomtattam a httpd.conf fájl hogy 80 GB-os merevlemezemre második operációs rendszerként felteszem a Linuxot. Elsõsorban mul- mind a 15 oldalát, és napokon keresztül tanulmá- timédiás dolgokra, szövegszerkesztésre, film- és nyoztam, de nem jutottam semmire. George Robertson, zenelejátszásra szeretném használni, ugyanis úgy  hallottam, a Linux elég hatékonyan bánik az erõfor- [email protected] rásokkal. A Windowst fõleg játékra fogom megtarta- ni. A gépemben Athlon 64 3500+ processzor van, A Red Hat 9 alapértelmezett Apache-telepítésében ezért a 64 bites adottságok kihasználására alkalmas a tesztoldal, azt hiszem, a /var/www/html/index.html. rendszert keresek. Tudtok olyan terjesztést ajánlani, Ha tehát le szeretnéd cserélni, akkor készíts róla amivel a legjobban ki tudom használni a gépem 64 egy biztonsági másolatot, majd tedd a helyére bites képességeit, és könnyû alatta médiafájlokat le- a saját fájlodat. játszani, webezni stb.? Néztem a Mandrake Linuxot, Timothy Hamlin,  de elég sok rosszat hallottam az AMD64 processzo- [email protected] rokra készült változatáról. Köszönöm, hogy idõt szántok rám, várom válaszotokat. Az Apache beállító fájljában a DocumentRoot sort Derek Allen, kell keresned. Az itt szereplõ könyvtárban található  [email protected] a honlapod. Most tekints a DirectoryIndex sorra, ebben a fájl lehetséges nevei láthatók. Mielõtt azon- Lehet, hogy megköveznek érte, de szerintem ismer- ban túlságosan sokat dolgoznál a rendszerrel, fris- kedj meg a Gentooval (www.gentoo.org), vele szinte sítsd a terjesztést a legújabb biztonsági foltokkal. minden géptípusból a lehetõ legtöbbet tudod kihozni, A Red Hat 9-hez 2004. április 30-ig adtak ki bizton- ugyanis képes arra, hogy telepítés közben natívan sági frissítéseket. fordítsa le az összes csomagot. Ezt sokszor a Gentoo Most van a Red Hat Múzeum Hét, vagy mi? hátrányaként említik, mert a folyamat eltarthat egy Don Marti, ideig. Ugyanakkor a Gentoo csapat rengeteget dolgo-  [email protected]

www.linuxvilag.hu 2005. május 11 Láttuk-hallottuk

«

Távfelügyelet magánjellegû kéréseket, a külsõ feloldásokat pedig Windows kiszolgálókat már jó ideje kezelek VPN- külsõ kiszolgálóhoz fordulva végzi el. Ha jól emlék- kapcsolaton keresztül. A linuxos rendszerek fel- szem – nem tegnap volt, hogy telepítettem – ügyeletére is van hasonló megoldás? Azt értem, a -on a „caching only nameserver” (csak hogy VPN-en keresztül be tudok jutni a linuxos névkiszolgáló gyorsítótárazása) szövegre keresve rendszerekre, de milyen megoldást javasoltok jó pár példát és beállítást találtam. Timothy Hamlin, a távelérésre és a felügyeleti teendõk elvégzésére?  Esetleg valamilyen könyvet tudtok ajánlani a témá- [email protected] val kapcsolatban? Ric Jones, Nem szabványos illesztõprogram összeomlik  [email protected] az új rendszermaggal Egy ideig haboztam, hogy kérjek-e segítséget tõle- A linuxos rendszerek távfelügyeletének hagyomá- tek, de egyszerûen nincs ötletem, hogyan oldhat- nyos eszköze az OpenSSH (www.openssh.com). nám meg a gondomat. Slackware 10.0 terjesztést © Kiskapu Kft. Minden jog fenntartva Minden komolyabb terjesztésnek alapvetõ része, és használok, 2.6.9-es rendszermaggal és 3.3.4-es for- titkosított megoldást biztosít parancsok futtatására dítóval, a rendszerindítást CD-lemezrõl, isolinuxszal és fájlok továbbítására, VPN-kapcsolat létesítése végzem. A gond az, hogy az Intel 536EP modemlap- nélkül. Ha mégis VPN-t szeretnél, Mick Bauer követ- kája Linux alatt nem támogatott. Az Intel által adott kezõ írása kiválóan összefoglalja a témát: forráskód (Intel-536ep-4.69-5.4.src.rpm) rendben www.linuxjournal.com/article/7881. van, a modem mûködik is. Amikor az új rendszerma- Don Marti, got használom, külön kell lefordítanom. A rendszer-  [email protected] indítási folyamat során mindig az Intel536: module license ‘Proprietary’ taints kernel Intranet DNS üzenetet kapom, de a modem mûködik. KPPP-t használok KDE 3.2 alatt. Amikor a 2.6.10-es rend- Az intranetem számára próbálok beállítani egy bind szermag kijött, megfoltoztam a saját gépem rend- kiszolgálót. Van egy itthoni kábelmodemes forga- szermagját, lefordítottam ugyanazzal a .config fájllal, lomirányítóm, ez játssza a DHCP kiszolgáló szere- és persze újrafordítottam az 536ep kódját is, de pét. Azt szeretném, ha lenne egy intranetes névte- a modem elnémult. Nem indul, nincs várakozás OK- rem a magán IP-címek feloldására, az internetes ra az ATZ után, és nincs tárcsahang sem. Természe- DNS kérések pedig az internetszolgáltató DNS ki- tesen a régi, 2.6.9-es rendszermag még megvan, és szolgálói felé továbbítódnának. Odáig eljutottam, azzal megy is minden. Örömmel venném, ha bármi hogy a kiszolgáló válaszoljon a címrekordkérésekre segítséget, megjegyzést vagy egyéb adalékot kap- (ls -t), de az egyes állomásnevek IP-címét nem nék tõletek a probléma megoldásához. adja vissza. Werner Gerstmann, A gyökérzóna visszamutat ugyanazon gép bind ki-  [email protected] szolgálójára. Beállítottam az ort.cloud tartományzó- nát, ez tartalmazza a bind kiszolgáló gazdagépét, Abban reménykedsz, hogy egy a fõ rendszermag- a forgalomirányító IP-címét, továbbá a hálózati állo- fába nem tartozó illesztõprogram hosszú távon is mások IP-cím - állomásnév hozzárendeléseit és a ka- mûködõképes lesz a gépeden. A valóság azonban nonikus név - IP-cím leképezéseket. Egy másik zóna az, hogy a rendszermag API-jai a hibajavítások, felelõs a név - IP-cím és a kanonikus név - IP-cím a biztonsági foltozások és a szolgáltatások tovább- összerendelésekért. Nem vagyok biztos abban, fejlesztése nyomán folyamatosan változnak, ezért hogy a kettõsség szükséges vagy sem, de egyelõre szinte biztos, hogy az illesztõprogram nem vagy úgy tûnik, hogy mûködõ megoldást ad. nem sokáig fog mûködni. Jeff,  A www.kroah.com/log/linux/stable_api_nonsense.html [email protected] oldalon utánaolvashatsz, hogy a Linux rendszermag- nak miért nincs stabil belsõ API-ja. Javaslom, hogy A DNS beállításával kapcsolatban talán a leg- vedd fel a kapcsolatot az illesztõprogram írójával, és jobb információforrás a DNS-HOWTO, ami tõle kérj segítséget, ugyanis õ az a személy, aki a leg- a www.tldp.org/HOWTO/DNS-HOWTO.html címen jobban ismeri a kódot. érhetõ el. A leírás szerzõje Nicolai Langfeldt, õ egy Greg Kroah-Hartman, DNS and Bind címû könyvet is írt, ami további  [email protected] részleteket és példákat is tartalmaz. Nekem is ha- sonló rendszerem van, mint aminek az összeállítá- Linux Journal 2005. április, 132. szám sával próbálkozol: belsõ DNS szolgálja ki a helyi,

12 Linuxvilág Láttuk-hallottuk

SugarCRM a gyakorlatban Interjú Szigetvári Csabával, a program magyarítását végezte A SugarCRM-nél akárcsak minden más, szabad szoftver esetén mindenki

könnyen hozzáférhet a program dokumentációjához, és szabadon olvasgathatja, © Kiskapu Kft. Minden jog fenntartva tesztelheti a szoftvert mind otthoni, mind pedig éles környezetben. Ez az egyik leglényegesebb érv, ami a szabad szoftverek mellett szól.

em csak egy demó programot kapunk egy-két – kapcsolattartás adatainak kezelése (ügyfél adatok, hétre, korlátozott képességekkel, hanem magát döntéshozatal hierarchiája, lehetséges üzletek várható a teljes értékû szoftvert tudjuk kipróbálni a beve- nagyságrendje) Nzetés elõtt. Így vagy még idõben fény derül arra, hogy – üzleti lehetõségek elemzése (folyamatok becslése, a szoftver nem felel meg a céljainknak, vagy ingyen jutot- döntéshozatalt segítõ elõrejelzések) tunk egy kiváló megoldáshoz. – kommunikációs eszközök (web-alapú ügyfélkapcsolat, Egy zárt forráskódú, kereskedelmi szoftver pedig, ha még- e-mail és automatizált e-mail visszacsatolások, bejövõ sem tudja a beígért funkciókat megvalósítani, amit például hívások nyilvántartása, kampánymenedzsment, honlap- a demóból cselesen kihagytak, akkor jogosan becsapva analitika, kérdõívek) érezhetjük magunkat, még ha esetleg késõbb sikerül is – szerzõdés nyilvántartások (szerzõdések, szerzõdés visszaszereznünk a szoftver árát. Úgy gondoltam, hogy tervezetek, szándéknyilatkozatok tárolása) hasznos lenne utánajárni, annak, hogy mik a tapasztalatok a SugarCRM használatával. Szigetvári Csaba fordította ma- Az elvárások CRM rendszerekkel szemben: gyarra, majd több helyre be is vezette a SugarCRM-et, így – ügyfélszolgálat szintjének javítása õt kérdeztem arról, hogy milyen tapasztalatai vannak – növelni az ügyfélforgalmat a szoftver használatával kapcsolatban. – új ügyfelek szerzése – termékértékesítés hatékonyságának növelése – A SugarCRM-rõl szóló cikk készítése során nagyon – az üzletkötés elõkészítési idõtartamának csökkentése sok különbözõ leírást találtam arról, hogy mik a CRM – marketing és disztribúciós folyamatok áttekinthetõvé rendszerek, illetve hogy milyennek is kell lennie egy tétele CRM rendszernek. Neked mi errõl a véleményed, milyen alapvetõ funkciókkal kell rendelkeznie egy A CRM rendszerek a csoportos munkát elõsegítõ és koordi- jó CRM szoftvernek? náló úgynevezett Workgroup szoftverek egy speciális ága. – A CRM betûrövidítés az angol „Customer Relationship Sok tekintetben hasonlóak az BPM rövidítéssel jelölt „Busi- Management” kifejezésbõl származik, amit hozzávetõle- ness Process Management” típusú alkalmazásokhoz, ame- gesen ügyfélkapcsolati ügyintézésként lehet fordítani. lyek az üzleti folyamatok általános meghatározását céloz- Olyan folyamatokra és módszertani alkalmazásokra zák. A CRM rendszerek azonban sokkal konkrétabban egy utal, amelyek az ügyfél igényeinek, elvárásainak és szo- jól meghatározott üzleti részterületre összpontosítanak. kásainak elemzésével igyekszenek megerõsíteni az ügy- félkapcsolatokat. A CRM rendszerek általános célja az – A következõ kérdés azt hiszem meglehetõsen magától ügyfelek, az értékesítés, a marketing hatékonyságának, értetõdõ: miért éppen a SugarCRM mellett tetted le a vok- piaci folyamatok és visszajelzések adatainak kezelése és sodat, illetve miért pont ezt a szoftvert fordítottad le? kiértékelése. A CRM rendszer segít az üzleti vállalkozás- Mik voltak a leglényegesebb érvek és ellenérvek? nak a mûszaki lehetõségek kiaknázásában, valamint – A SugarCRM 2004 õszén került a látótérbe, és körülbelül a meglévõ és potenciális ügyfelek helyes megítélésben. 2 hónapos helyi tesztelés után elég stabilnak bizonyult Fõbb összetevõi lehetnek: a felvállalt feladat ellátására. Ezt követõen három olyan

www.linuxvilag.hu 2005. május 13 Láttuk-hallottuk

cégnél került bevezetésre, ahol rendszergazdai tevékeny- zést is minden bejelentkezett felhasználó láthatja, nem ség keretében érintve vagyok. Valamennyi cég kevesebb csupán az akinek szól. Ebben a formában a belsõ levele- mint 5-20 munkatárssal dolgozik, ami azt jelenti, hogy zés inkább a munka kiosztására korlátozódik. Ennél va- szükség van a csoportos munka szervezését segítõ szoft- lamivel árnyaltabb megoldás hasznos lenne. Ez az igény verre, viszont a LotusNotes és hasonló jellegû termékek tudtommal a SugarCRM fejlesztõi felé a kapcsolódó fó- minden tekintetben túllõnek a célon. rumokon keresztül már megfogalmazódott, de a jelenle- A SugarCRM-nél számos dolgot említhetek elõnyként. gi ütemtervben még nem szerepel (az aktuális helyzet- AMP (Apache/MySQL/PHP) alapon fut, így csupán felméréshez érdemes nyomon követni a fórumbeszélge- a szerver-telepítés igényel kiemelt figyelmet. Ugyanakkor téseket). Jelenleg úgy küszöböltük át a helyzetet, hogy platformtól függetlenül alkalmazható a felhasználók gé- az egyik cégnél többször telepítettük fel a SugarCRM-et, pein (így egy Apple iBook éppúgy része lehet a csoport- így minden munkacsoport a saját adatbázisával dolgo- munkának, mint a Windows és Linux felhasználói gépek). zik. Ennek hátránya, hogy az átfedõ adatokat többször Forráskód tekintetében szabad szoftver, így nem alakul kell felvezetni, külön-külön az egyes adatbázisokba. ki olyan függõség egy gyártó felé, amelynek hosszú tá- von nehezen kalkulálható anyagi és szervezeti vonzatai – Sok helyen olvashatjuk, hogy a CRM rendszerek növe- lehetnek (ha túl nagy a gyártó, akkor alig vehetõ rá lik a hatékonyságot, és ezáltal esetleg plusz bevételekhez egyedi kiegészítésekre; ha túl kicsi, akkor fennáll a ve- is juthat a vállalat, ahol megfelelõen használnak egy © Kiskapu Kft. Minden jog fenntartva szély, hogy nem tudja fenntartani a termék folyamatos CRM szoftvet, mi a helyzet azoknál a cégeknél, ahová fejlesztését). Ez azt is jelenti, hogy egyedi kiegészítõ fej- te vezetted be SugarCRM-et? Érezhetõ-e már valamilyen lesztést önerõbõl is eszközölhetünk, ha a cég mûködése pozitív változás? az általánostól eltérõ követelményeket támaszt (az egyik – A SugarCRM eddig jól teljesíti az elvárásokat, de végle- felhasználó pl. egy utazási iroda, ahol hosszú távon gesen nem szeretnék még ítéletet mondani róla, mert szükség lesz bizonyos célirányú kiegészítésekre). a hatékonysága akkor lesz csak bizonyítható, ha tényle- Az adatmentések, illetve adatok export/import funkciói gesen éltetõ eleme lesz a cégmûködésnek. Ennek pedig a MySQL adatbázisból problémamentes folyamatok. az a feltétele, hogy napi használatú eszközzé váljon A SugarCRM mûködtetéséhez a szóban forgó létszámok a munkatársaknak és (ami fontosabb) a fõnököknek mellett bõven megfelelnek szervergépnek azok a régi egyaránt. Ha a fõnök használja, akkor az alkalmazottak elfekvõ Pentium I és II-es gépek, amelyeken Windows is használni fogják. rendszer már nem futtatható: a Windows98 biztonsági támogatása teljesen megszûnt, A Win2k/NT esetében is – Három bevezetés után, akkor nyilván van már tapasztala- hamarosan ez lesz a helyzet, a WinXP pedig keservesen tod arról, hogy hogyan érdemes elkezdeni a SugarCRM köhög ezeken a gépeken. Ugyanezek a gépek Linux bevezetését? telepítéssel még akkor is ütemesek, ha X11 fut rajta, – Elsõ lépésben egységesen ügyféladatokat és címlistákat a SugarCRM-nek pedig szerverként a terminálos üzem- vezetünk fel. Ez az alap. Ha elsõ reflexként a CRM adat- mód is megteszi. bázisban keresnek a munkatársak adatokat, akkor idõ- Ár tekintetében szabad szoftver, ami leginkább azért lé- vel a többi lehetõséget is kezdik kiaknázni. nyeges, mert 30-napos próbaverziókkal nem lehet egy cég Második lépés a belsõ információmozgás (belsõ levele- keretében tesztelni szoftvert, ugyanakkor zsákbamacskára zés) átírányítása a CRM keretein belülre. Ez kis létszámú sem érdemes költeni. A SugarCRM mögött egy kommersz cégnél nehézkes, mert egyszerûbb átmenni a másik iro- vállalkozás áll, ha tehát valaha adódna olyan helyzet, ami- dai szobába megbeszélni valamit, vagy telefonon gyor- kor nagyon gyorsan és megfelelõ minõségû kiegészítõ san átszólni. A belsõ levelezés tényleges célja az írásos megoldásra volna szükség (ilyenkor általában a pénztárca folyamatdokumentáció, az ügyek utólagos is lazul), akkor van közvetlenül kihez fordulni. Ha meg- nyomonkövethetõsége. Ahol anyagi vonzata van dönté- szûnne ez a cég vagy profilt váltana, akkor még mindig seknek, ott a felelõsségeket is egyértelmûen kell látni. megmaradnak a szabad forráskód elõnyei. Végül a mun- Ennek a lépésnek a teljesítése tulajdonképpen nem kafelület funkciói félreérthetetlenek, így a gyakorlatban a CRM mûködésének függvénye, hanem a munkaszer- nem igényel különösebb oktatást, betanítást. vezésé. Az ilyesmi e-mail útján is megoldható, de feles- leges egy belsõ használatú üzenetet világ körüli útra – Nyilván szembekerültetek több nehézséggel is, például indítani ahhoz, hogy a másik szobába megérkezzen nem volt magyar fordítás a termékhez, vannak-e más – mellesleg az adatbiztonsági elvárásoknak is jobban olyan hiányosságai a szoftvernek, melyek nehézséget eleget tesz, ha csak az intraneten belül mozog. okoztak a bevezetés, használat során? Harmadik lépés lenne a CRM rendszer használata – Magyar vállalatnál nem csupán illik, de többnyire cél- eredménykimutatásokra. A SugarCRM nyilván nem egy szerû is magyar felhasználói felülettel mûködõ szoftver ügyviteli vagy számviteli rendszer, de megfelelõ felhasz- alkalmazása. Ez abban az adott pillanatban nem állt ren- nálói ambíciókkal költségnem, költséghely és költségvise- delkezésre, de felvállalható idõ- és költségráfordítással lõ jellegû összefüggések grafikonos kimutatására már a je- megoldhatónak bizonyult. lenlegi változatában is alkalmas. A SugarCRM alapvetõen A hozzáférési jogosultságok korlátozottak. A felhaszná- egy pénzügyi szemléletet tükrözõ logikai keretrendszer. lók adminisztrálásától eltekintve minden felhasználó bármilyen adatot felvezethet és törölhet. A belsõ levele- Az interjút készítette Horváth Ernõ

14 Linuxvilág Szaktekintély

Tér-idõ feldolgozás linuxos stílusban Ha új generációs vezeték nélküli kommunikációs készülékeket szeretnénk fejlesz- teni, akkor szükségünk lesz FPGA fejlesztõi eszközökre, egy fürtre a szimulációk- hoz, valamint egy beágyazott operációs rendszerre a mintapéldányokhoz. A Linux mindegyik célra megfelel. © Kiskapu Kft. Minden jog fenntartva

unkahelyemen, az új-zélandi Christchurchben lévõ Tait Electronics Group Researchnél az el- 1. kódrészlet A fürtbeli csomópontok IP-címét múlt idõszakban szép csendesen kidolgoztunk SMB megosztáson tároló parancsfájl Megy fejlett vezeték nélküli hálózati megoldást, amit tér-idõ (space-time, ST) feldolgozásnak neveztünk el. Az ST-t so- #!/bin/sh kan a vezeték nélküli rendszerek következõ, a harmadik # generáció utáni megoldásának tartják. A tér-idõ lényege # Saját IP kiírása SMB megosztásra a mögöttes matematika, ebbõl fakadóan megvalósítása # rendkívül bonyolult. Nem egy akadémiai kutató dolgozik # Központi SMB megosztás befûzése ezen a területen, mégis talán mi vagyunk azok, akik ST smbmount //pelda/proba /mnt/proba tömbkutató (STAR) alaprendszerünkre építkezve el tudtuk -o username=nev,password=jelszo >& készíteni a két elsõ gyakorlati megvalósítást. Ezek az idõ- /dev/null#IP kiírása inverziós tér-idõ blokk-kódolás (time-reversal space-time #Az IP-cím lekérdezése az ifconfiggal block coding, TR-STBC) és a nyelvtörõnek is beillõ nevû address/sbin/ifconfig | grep Bcast egyhordozós, adaptív többváltozós döntés-visszacsatolásos, | sed ´s/^.*addr://;s/Bcast.*//´ > kiegyenlített több bemenetû, több kimenetû (single carrier, /mnt/proba/$HOSTNAME.ip adaptive multivariate decision feedback equalised multiple- in, multiple-out, SC-AMV-DFE-MIMO) kódolási séma. Kétségtelen, hogy eredményeinket jelentõs mértékben a Linux kiváló teljesítményének és alkalmazkodókészsé- gének köszönhetjük. A továbbiakban szeretnénk elmondani, a Linux milyen – amúgy kulcsfontosságú – szerepet játszott matematikai megoldásaink kidolgozásában, illetve hogyan alkalmaztuk beágyazott feldolgozási és futási idejû vezérlési célokra. Olyan szerteágazó témákat fogunk érinteni, mint az üzenet- átadó felület (message passing interface, MPI), a fürtözött adatfeldolgozás, a beágyazott Linux, a PHP, a héjparancs- fájlok, a hálózati fájlrendszer (NFS), az SMB (kiszolgáló üzenetblokk) és a rendszermagmodulok használata és fut- tatása ARM, Alpha és Intel géptípusokon. A fejlesztés rész- leteit át fogjuk ugrani, ám a rendszer jelenlegi mûködését ismertetni fogjuk, kiemelve azokat a valós életbeli elõnyö- 1. ábra Minden STAR alaprendszerben a kétirányú ket, amelyeket a Linux biztosított számunkra. rádiós összeköttetés egy többcsatornás adót és egy többcsatornás Alapesetben minden STAR eszköz egy többcsatornás adó- vevõt használ egységbõl és egy többcsatornás vevõegységbõl áll, mindket- tõ egy megosztott LAN-hoz csatlakozik, és mikrohullámú Az 1. ábrán a rendszer egy megosztott Ethernet hálózathoz frekvenciákon bármilyen adattípust legfeljebb 200 Mbit/s kétirányú rádiófrekvenciás összeköttetésként csatlakoztatva sebességgel képes továbbítani. Jelenleg minden egységben látható. Ez az összeállítás természetesen csak kísérleti célo- 23 nyomtatott áramkör található, ezek megtervezése és le- kat szolgál, a tényleges termékeknél az adó és a vevõ között gyártása 15 embernek egy évig tartott. nem lesz megosztott Ethernet hálózat.

www.linuxvilag.hu 2005. május 15 Szaktekintély

A rádiójelek feldolgozása a digitális kártyán történik, de nem az ARM processzor, hanem egy dedikált, egyedileg 2. kódrészlet writeport.c programozható kaputömb (field programmable gate array, Egyszerû program 32 bites egész szám megadott FPGA) és egy digitális jelfeldolgozó processzor (DSP) végzi. fizikai memóriahelyre írására Az FPGA-ban lévõ kódot belsõ programnak nevezzük, ese- tében elég nehéz eldönteni, hogy program vagy vas alapú #include megvalósításról van-e szó. Ezzel a könnyed megoldással #include //az O_RDWR és az O_SYNC megengedhetjük magunknak, hogy mindenféle programo- miatt szükséges zási és vastervezési szabványt figyelmen kívül hagyjunk. #include //a PROT_READ stb. miatt A múlt év közepén, amikor a rendszert terveztük, a legna- szükséges gyobb, leggyorsabb és legdrágább FPGA-t és DSP-t válasz- #define GRAB_SIZE 1024UL tottunk, amit csak be tudtunk szerezni, de azóta további két #define GRAB_MASK (GRAB_SIZE - 1) nagyméretû FPGA-t adtunk hozzá. Az ARM processzort alacsony szintû mûveletekre nem használjuk, mert az ST int main(int argc, char **argv) feldolgozásokhoz több mint 50000 MIPS teljesítményre van { szükségünk. Ilyen szintû bonyolultságnál még a leggyor- void *grab_base, *virt_addr; sabb építõelemek is lassúnak bizonyulnak, ezért elég hamar unsigned int md, read_result, writeval; © Kiskapu Kft. Minden jog fenntartva eldöntöttük, hogy többprocesszoros mûködésre képes off_t phys_addr = strtoul(argv[1], 0, 0); rendszerben gondolkodunk. /*memóriakezelõ felület megnyitása*/ A STAR egységeket nagy sebességû, alacsony feszültségû, if((md = open(“/dev/mem”, O_RDWR | O_SYNC)) differenciális jelzéskezelésû (low-voltage differential == -1) signaling, LVDS), legfeljebb 1 Gbit/s sebességre képes kap- { csolatokkal lehet bõvíteni. Minden kártyán két darab ötcsa- printf(“HIBA - /dev/mem megnyitása tornás, kétirányú LVDS összeköttetés áll rendelkezésre sikertelen\n”); a szomszédos kártyákkal történõ kapcsolatteremtésre. exit(1); Ugyanakkor minden kártya rendelkezik Ethernet kapcsolat- } tal is. A nagy sebességû adatátvitel az LVDS összeköttetése- /* Lap leképezése a megadott fizikai címre*/ ken, a vezérlõadatok továbbítása pedig az Ethernet kapcso- if(grab_base = mmap(0, GRAB_SIZE, PROT_READ | laton keresztül történik. PROT_WRITE, MAP_SHARED, md, phys_addr & ~GRAB_MASK), grab_base == (void *) -1) Fejlesztés { A feldolgozás túlnyomó része az FPGA-ban folyik, a kód printf(“HIBA: leképezés sikertelen\n”); VHDL-ben készült. Linux alá egyre több VHDL eszköz érhe- exit(1); tõ el (lásd a széljegyzetet), mi az Quartust használ- } tuk. Rendszerünkben az algoritmusokat GNU-Octave alatt /*írás a kért fizikai címre leképezett fejlesztettük ki, majd átültettük õket VHDL alá. Az Octave képzetes memóriába*/ és a vele többé-kevésbé együttmûködni képes MATLAB *((unsigned long *)grab_base + (phys_addr & Linux és Microsoft Windows alá egyaránt elérhetõ, ám az GRAB_MASK)) = strtoul(argv[2], 0, 0); Octave-nak van egy MPI-képes változata is, mely fürtökön /*memóriakezelõ felület lezárása*/ is futtatható. Jó öreg DEC Alpha gépek fürtjére fordítottuk if(munmap(grab_base, GRAB_SIZE) == -1) le, ezt egyébként zionnak neveztük el. Az MPI-Octave { annak ellenére is nagyon szépen teljesített a zionon, hogy printf(“HIBA - leképezés megszüntetése leggyorsabb processzora is csak 500 MHz-es volt. sikertelen\n”); A digitális kártyákhoz egy a handhelds.org-on talált ARM exit(1); Linux eszközláncot használtuk a frissen foltozott 2.4.18-as } rendszermagforrások lefordítására. Russell King az 1990-es close(md); évek elején Acorn számítógépekhez készített terjesztést, } ekkor kezdett el dolgozni az ARM Linuxon. Jelenleg az ARM az egyik legjobb linuxos támogatású processzor, ami számunkra nagy könnyebbséget jelentett. Mindössze há- memóriával gazdálkodott, ezért úgy döntöttünk, hogy a tö- rom napra volt szükségünk, hogy a Linuxot átültessük mörített rendszermag és a RAM-lemez egyaránt legfeljebb egyedi eszközeinkre, igaz, az Ethernet illesztõprogram be- 1024 KB-os legyen, noha a tömörítetlen RAM-lemez mérete üzemelése még eltartott néhány napig. Az ARM a világon 4 MB. Mindkettõt a Flash memória tárolja, és külsõ beavat- a legnagyobb példányszámban eladott processzorfajta, kozás nélküli rendszerindítást tesznek lehetõvé. a Linux rajta való futtatásához elképesztõ mennyiségû A gyakran használt eszközöket, mint az ls, a cd, a mount, támogatást lehet szerezni. Ennek köszönhetõ, hogy a Tait az insmod és a ping a BusyBoxból gyûjtöttük ki, a bejelent- Electronics úgy döntött, a jövõben is ARM processzorokat kezések és jelszavak kezelését pedig a TinyLoginra bíztuk. fog használni. További segédprogramok végzik a memórialeképezett külsõ Amikor az ARM Linux már elindult, létrehoztunk neki egy eszközök és a Flash kezelését, a TinyLogin szolgáltatásait RAM-lemezt. Az ARM 16 MB SDRAM-mal és 2 MB Flash használó telnet démon pedig a netkit-base csomagból szár-

16 Linuxvilág Szaktekintély

3. ábra A fájlrendszerfa az egység oldaláról nézve

Amikor az MPI mûködõképes volt, letöltöttük a legújabb Octave változatot, és felraktuk rá az Octave-MPI foltot. Az- óta az Octave-MPI fejlesztését a Transient Research vette át. (Lásd az internetes források részt.) MPI rendszerünket egy © Kiskapu Kft. Minden jog fenntartva parancsfájl segítségével helyezzük üzembe, ez összegyûjti a már említett parancsfájl által elmentett IP-címeket, 2. ábra Minden egység rendelkezik Flash alapú és RAM alapú megpingeli õket, majd létrehoz egy rhosts fájlt. Amikor az fájlrendszerrel is rhosts dinamikus elõállítása befejezõdött, akkor a 4+1 gé- pen az alábbi parancsokkal indítjuk el az Octave-MPI-t: mazik. Linux-ARM fejlesztéseihez a Tait Electronics vásárolt egy MAC-címtartományt az IEEE-tõl, az egyes kártyák recon -v MAC-címét a Flash memória tárolja. lamboot Emellett jó néhány apróbb segédprogramot is készítettünk, mpirun -v -c4 octave-mpi illetve az Abyss webkiszolgálót is mûködésre bírtuk, de termé- szetesen mindez egyszerre már nem fér el a Flash memóriá- Ha a rendszer életre kelt, az Octave terhelése eloszlik a fürt ban. A zionról ugyanakkor NFS-en keresztül minden ARM-on tagjain. Észrevettük, hogy az Alpha processzorok sokkal be tudunk fûzni egy könyvtárat, amivel több GB-nyi tárhely- jobb lebegõpontos teljesítménnyel rendelkeznek, mint hez jutunk. A 2. ábrán a fájlrendszerek elrendezése látható. a Pentiumok, ám az MPI-üzenetek Ethernet feletti továbbí- A zion alól SMB befûzésekkel a felhasználók megosztott tása lassította a fürtöt. Teljesítményteszteket ugyan nem meghajtóit is elérhetõvé tettük, ezekhez az ARM kártyák végezünk, de az tény, hogy egy olyan szimuláció, amely szintén NFS-en keresztül férhettek hozzá. Ha az ARM kár- egy 2 GHz-es Compaq PC-n néhány óra alatt fejezõdik be, tyákon futtattuk a webkiszolgálót, akkor végeredményként körülbelül 10 százalékkal gyorsabban futott az elsõ, négy szerteágazó kapcsolatokkal rendelkezõ rendszert kaptunk. darab Alpha alapú gépbõl álló fürtön. A Windows-felhasználók saját meghajtóikat webkiszolgálón A GNU-Octave numerikus szimulációk elvégzésére kiváló keresztül is el tudták érni, és ez a webkiszolgáló olyan be- eszköznek bizonyult. A -traditional, vagy, ha úgy tetszik, ágyazott ARM-on futott, amely NFS-en keresztül egy távoli -braindead kapcsolóval futtatva a legtöbb MATLAB pa- fürtkiszolgálóhoz kapcsolódott. rancsfájlt képes értelmezni. Egyes esetekben az Octave jobb szolgáltatásokat nyújt, mint a MATLAB; igaz, a MATLAB Zion megjelenítési képességei fejlettebbek, mint az Octave által 2001 vége felé megvettük a kiöregedõben lévõ DEC Alpha alapesetben használt gnuplot motoréi. gépeket, és kíváncsian vártuk, mit tudunk kezdeni velük. Néhány mérnökünk inkább a windowsos fejlesztést kedvel- Elõször is, módosítottuk a beépített rendszerindítót, és mû- te, ezért az MPI-Octave webes felületet is kapott. JavaScript ködésre bírtuk a 7.1-es Red Hatet. Két fontosabb változtatást alapú telnet ügyfelet használ, amelyet a zionon futó Apache hajtottunk végre. Elõször kiválasztottunk egy mester gépet, és néhány háttérben dolgozó parancsfájl szolgáltat. A pa- majd hat darab SCSI merevlemezt és egy DVD-ROM- rancsfájlokat egy hálózati többszereplõs játék motorjából meghajtót szereltünk bele. Öt darab lemezbõl egy RAID-5- vettük. A windowsos felhasználók megosztott meghajtóit ös tömb lett (a raidtools segítségével), ez tárolja a kísérletek a telnet ügyfél önmûködõen befûzi a zion fájlrendszerébe, adatait, a fennmaradó lemez pedig a rendszerindítás és majd telneten keresztül futtatja az Octave-ot, valamint a helyreállítás céljait szolgálja. a rajzolást úgy állítja be, hogy a rajzok PNG formátumban A második módosítás az MPI telepítése volt az összes gép- a webkiszolgáló egyik könyvtárába kerüljenek, ahonnan re. Bár maga a telepítés egyszerû volt, az összes IP-címet böngészõvel lehet megtekinteni õket. A felhasználók dönt- DHCP-n keresztül kellett kiosztani, és ezzel bizony meg- hetnek úgy is, hogy a rajzokat közvetlenül megosztott meg- szenvedtünk. Végül a zion nevû mester gépnek adtunk egy hajtójukra mentik. állandó IP-címet, a többi gépen pedig egy olyan indító pa- Hibakeresési célokra az ARM el tudja érni az FPGA nagy- rancsfájlt futtatunk, amely RPC használatával egy SMB méretû hibakeresõ pufferét. Az FPGA-t 32 bites, nagysebes- megosztásra naplózza az egyes gépek címét. ségû, aszinkron hozzáféréssel leképeztük a memóriába, így

www.linuxvilag.hu 2005. május 17 Szaktekintély

felhasználói és rendszermag térbõl egyaránt elérhetõvé vált az ARM számára. Nem meglepõ, hogy a rendszermag tér- ben fájlként elért karakteres illesztõprogram modult hasz- nálunk. Ez löket módban akár 1024 adatszó nagysebességû továbbítására is alkalmas – természetesen folyamatos átvi- telnél nincs ilyen jó sebessége –, miközben gondoskodik a jelzéskezelésrõl is. A felhasználói hozzáférést az mmap se- gítségével, a /dev/mem felületen keresztül biztosítjuk – per- sze nem árt, ha nem feledkezünk meg a /dev/mem létreho- zásáról a beágyazott fájlrendszer alatt. Mindezen eszközök segítségével fel tudjuk tölteni az is- mert, az Octave által a zionra mentett tesztvektorokat a hi- bakeresõ pufferbe. Az ARM vezérlése alatt a hibakeresõ puffer kimenetét a tesztelés alatt álló blokk bemenetére irá- 4 ábra A csatornamódok megjelenítése (összetett útvonalak nyítjuk, futtatjuk a rendszert néhány órajel erejéig, majd az adó és a vevõ között) ugyancsak a hibakeresõ pufferben fogadjuk a kimenetet. Az eredményt az Octave-val elemezve el tudjuk dönteni, könnyen tudják használni, és a felhasználók által megszo- © Kiskapu Kft. Minden jog fenntartva hogy a blokk mûködik-e. kott és ismert webes felület is elõnyt jelent. A legtöbb alkal- A megjelenítést fontos tényezõnek tartottuk. Az elsõ fon- mazás forráskódja 50 KB-nál kisebb, ami elõnyös a hibake- tosabb lépések elvégzése után meghívtunk néhány em- resésnél, illetve ebbõl fakadóan több bizalmat helyezhetünk bert, és megmutattuk nekik a rendszert. Hogy mit láttak? az egyes kódrészletekbe. Zümmögõ dobozokat, amelyeken néhány zöld LED jelez- Az ilyen jellegû felhasználói felületeknek sajnos hátrányaik te, hogy minden rendben mûködik. Nem nagyon akartak is vannak. Az egyik eset az, amikor valamilyen háttérbeli lelkesedni, holott ez a mûszaki megoldás nálunk mûkö- eseményre kell felhívni a felhasználó figyelmét, a másik dött elsõként a világon – kénytelen-kelletlen beláttuk te- pedig az, amikor a rendszernek közvetlen párbeszédet kell hát, hogy valami még hiányzik. Kitaláltuk, hogy – nagyjá- folytatnia a vassal. Az elsõ kérdést folyamatosan frissülõ ból valós idõben, alkalmazásuk szerint – megjelenítjük üzenetek külön keretben való megjelenítésével lehet meg- a csatornamodelleket. A csatorna egy összetett útvonal oldani. A második gondot mi úgy hárítottuk el, hogy a vevõ és az adó között, különféle visszaverõdésekkel, a PHP-vel a kapcsolatot fájl alapú felületen keresztül tartó, többszörös utakkal, szóródásokkal stb. Rendszerünk pró- apró, alacsony szintû C programokat írtunk. bajelekkel vizsgálta a csatornát, mielõtt megkezdte volna Nem mondom, szép szövevényes rendszerünk lett. Minden az adatok továbbítását. A próbák révén egyfajta képet le- egység vezérlõje egy ARM processzor, de a vezérlõk vezér- hetett alkotni a csatornáról, és úgy döntöttünk, hogy ezt lõje egy PHP parancsfájlokat kezelõ webkiszolgáló. Önel- fogjuk megjeleníteni. Készítettünk egy ARM alapú pa- lenõrzés céljából a rendszer öt másodpercenként minden rancsfájlt, ez idõnként elindított egy programot, amely ARM-on lefuttat egy parancsfájlt, majd az eredményeket a vevõoldali FPGA hibakeresõ pufferébõl kinyerte a csa- átadja a webkiszolgálónak. Az eredmények az egyes ARM- tornaadatokat, megformázta õket, és egy az Octave által ok Ethernet csatolójának IP-címe szerint elnevezett fájlokba is kezelhetõ .mat fájlba mentette a zionra. Az Octave kerülnek. A figyelõ parancsfájl feladata annak biztosítása is, a zionon nem interaktív módban futva rendszeresen kiol- hogy minden mûködõ rendszer órája szinkronban legyen vasta a csatornaadatokat, elemezte õket, majd négy darab a zionéval. Az NTP használatát elvetettük, mert viszonylag PNG képfájl formájában elkészítette a rajzokat. Ezeket nagyméretû kód kellett volna hozzá, és az órák együttállá- a zionon futó webkiszolgáló egy PHP alapú weblappal sára csak a fájlrendszerek kezelésekor jelentkezõ hibák elke- jelenítette meg, négy másodperces frissítéssel. (4. ábra) rülése miatt volt szükségünk. A zion egy parancsfájl és a data parancs segítségével az aktuális idõt és dátumot öt Támogatás másodpercenként egy fájlba írja; az ARM-ok ezt a fájl ol- Linuxos digitális kártyáink normál esetben összetett feldol- vassák ki szintén öt másodpercenként, és tartalma alapján gozó algoritmusokat futtatnak, rádiójelek és Ethernet se- beállítják órájukat. Ezzel el tudjuk kerülni az idõszinkroni- gítségével tartják a kapcsolatot más rendszerekkel. Mivel zálási gondokat, valamint biztosítani tudjuk a fájlok idõbé- még laboratóriumi körülmények között is nehéz megmon- lyegeinek pontosságát. Egyben idõzítõként is szolgál a több dani, hogy minden összetevõ megfelelõen mûködik-e, úgy mint egy percet csúszó kártyák alapállapotba hozatalára. döntöttünk, hogy a Linux erejére építve önellenõrzõ és Az önellenõrzésen túl a parancsfájl indításkor a RAM- önmegfigyelõ megoldásokat készítünk. A megjelenítéshez lemezek és a rendszermagok változatszámát is lekérdezi hasonlóan itt is számos összetevõt kellett rugalmasan és rögzíti egy állapotfájlba. A parancsfájl utolsó feladata összekapcsolni. a kártyákhoz egyedileg megadott parancsok végrehajtása. A nem mûszaki területen dolgozó felhasználók grafikus A parancsokat a PHP alapú weboldal szolgáltatja, ez szabja felületet akartak, amit GTK, Tk, Qt vagy valami hasonló meg, hogy melyik ARM kártyának mit kell tennie. Az utasí- eszközzel állíthattunk volna össze, mi azonban PHP alapú tások PHP alól héjparancsfájl formájában érkeznek, ezeket webes parancsfájlok használatát választottuk, így ugyanis kell az IP-cím alapján kiválasztott kártyán lefuttatni. a rendszer elérése tökéletesen gépfüggetlen. A PHP-t Minden egység ugyanolyan rendszermaggal és RAM- a C stílusú írásmódnak köszönhetõen a C programozók is lemezekkel dolgozik, ezek tárolása a helyi Flash memóriá-

18 Linuxvilág Szaktekintély

ban történik, illetve a zionon lévõ másolat alapján minden Összefoglalás indításkor megtörténik sértetlenségük ellenõrzése. Bármi- Legújabb tervünk az, hogy az elméleti kutatásokon túl termé- lyen eltérésnél a rendszer újra bemásolja a Flash memóriá- kek tervezésébe is belefogunk. Valószínûleg IP-csomagok kül- ba a megfelelõ rendszermagot és RAM-lemezt. Erre a célra désérõl-fogadásáról lesz szó, és a termék vezérlését beágya- egyedi Flash memóriakezelõ eszközöket fejlesztettünk. zott Linuxra fogjuk bízni. Ennek nemcsak az az oka, hogy A gyakorlatban tárolási rendellenességeket nem tapasz- a fejlesztés során is a Linuxra támaszkodtunk, de az is, hogy taltunk, ám ezzel a megoldással felhasználói beavatkozás számos kiváló lehetõséget biztosít az IP-csomagok kezelésére. nélkül tudjuk telepíteni a rendszermag és a RAM-lemez A WinCE lassú és nagy, a VxWorks pedig drága és kevés pro- újabb változatait. tokollt támogat. A Tait Electronics nonprofit, az új-zélandi A PHP alapú weboldalak az autoload HTML címke hasz- Christchurch alkalmazottait és közösségét segítõ elektronikai nálatával öt másodpercenként frissülnek, természetesen egyesülés. Sir Angus Tait alapította, több mint 30 évvel ez- csak akkor, ha legalább egy felhasználó megnyitotta bön- elõtt. Mobil rádiós termékeinek 97 százalékát exportálja, érté- gészõjével az adott oldalt – egyébként lehetséges, hogy kesítései a világ több mint 200 országára terjednek ki. az oldalon szereplõ adatokra éppen nincs is szükség. A vezetõknek szánt weboldalak szinte minden hasznos Linux Journal 2004. szeptember, 125. szám adatot elrejtenek, viszont jól néznek ki. A valódi fel- használóknak szánt oldalakon ellenben lehetõség nyílik Ian McLoughlin 12 éve használja a Linuxot, az alsóbb szintek elérésére is, egészen az egyes kártyák szakterülete a jelfeldolgozás. Mielõtt kiván- © Kiskapu Kft. Minden jog fenntartva mûködését irányító parancsfájlokig. dorolt volna Új-Zélandra, egyetemi elõadó volt Szingapúrban, és mint az XSat mûholdas prog- Hibakeresés és figyelés ram – indítását 2006-ra tervezik – vendégtudó- Az ARM-on futó linuxos program az FPGA által tárolt belsõ sa jelenleg is sokat tartózkodik ott. program segítségével kisméretû csomagokból álló adatfo- lyamot továbbít a vezeték nélküli összeköttetésen keresztül Tom Scott a Mission Technologies Ltd. az FPGA hibakeresõ pufferébe. Ráérõ idejében az ARM ki- (www.missiontech.co.nz) igazgatója, elsõsor- bontja ezeket, és eltárolja õket a zionon. A fájlokban önmû- ban a dolgokhoz való lényegre törõ, nyílt, ködõ eljárásokkal meg lehet keresni a hibákat (például szabatos és gyakorlatias hozzáállásáról ismert. a csupa nullából álló sorozatokat), és szükség esetén Felesége és két gyermeke hittérítõ. a weboldalakon keresztül riasztani lehet a felhasználókat.

www.linuxvilag.hu 2005. május 19 Szaktekintély

Gyártófolyamatok automatizálása Linuxszal Avagy hogyan kísérhetünk figyelemmel valós idõben több gyártósort? A problémánkat saját magunknak oldottuk meg a Linux segítségével.

© Kiskapu Kft. Minden jog fenntartva gy termeléssel foglalkozó vállalat csak akkor termel hasznot, amikor mûködnek a gyártósorok, ezért lét- fontosságú, hogy a gyártószintrõl származó informá- Eciók kellõ idõben rendelkezésre álljanak. A vállalatunk mé- retével együtt növekedett a bonyolultsága is, így rövid idõ alatt kinõttük a termelés ellenõrzésére hivatott manuális, papír alapú módszereinket. Cégünk, a Midwest Tool & Die elektronikus csatlakozóvégeket sajtol, és mûanyag alkatrészeket formáz az autógyártás, elekt- ronikai és fogyasztói ipar számára. A gyártófolyamatainkban rengeteg adat keletkezik. A nagysebességû préseink percen- ként akár 1200 alkatrész legyártására is képesek, és minden egyes darabnak megfelelõnek kell lennie. Minden gyártott alkatrésznek megvizsgáljuk a kritikus méreteit, folyamatosan figyelemmel kísérjük és ábrázoljuk a minõséget, az adatokat pedig a nyomon követhetõség érdekében archiváljuk. 1. ábra Két SmartPress gyártási automatizáló rendszer használat közben. Minden rendszer egy PC-bõl, egy DAQ-kártyából, Miért fontos az automatizálás? elektronikus leválasztó rendszerbõl, tartalék akkumulátorból A gyártófolyamataink továbbfejlesztéséhez szükségünk volt és vonalkód-nyomtatóból áll. az összes adat kezelésére. A fõ célunk az volt, hogy növel- jük az üzemidõt és minél jobban megértsük az állásidõ oka- Végül a rendszernek rugalmasnak s könnyen frissíthetõnek it. Ezen felül reménykedtünk abban, hogy a költségeket is kellett lennie továbbá alkalmasnak kellett lennie új gyártó- nyomon követhetõvé és ellenõrizhetõvé tehetjük, csökkent- sorokra való átültetésre és a rendszerbemenetek megválto- hetjük a papírmunkát és elkerülhetõvé válik az emberi zásának kezelésére. adatbevitelbõl származó hiba. E célok alapján körvonalazódtak az új rendszerrel kapcsola- Miért a Linuxot választottuk? tos elvárások. Elsõdleges elvárás volt az adatok összegyûjtése A fent vázolt elvárások tükrében több megoldást is meg- a sokféle gépvezérlõ egységbõl, érzékelõkbõl, automatikus vizsgáltunk. Az ipari PLC-k megbízhatóan össze tudnák vezérlõegységekbõl, a programozható logikai vezérlõkbõl gyûjteni az adatokat, a hálózati megoldásaik azonban év- (PLC) és az operátorként dolgozó munkatársaktól. A rend- tizedekre megrekedtek bizonyos nem szabványos, szaba- szernek megbízhatónak kellett lennie és képesnek arra, hogy dalmilag védett eljárások szintjén. Az Ethernet kapcsolat a legnagyobb termelési sebesség mellett is összegyûjtse az ugyan elérhetõvé vált, de az ilyen rendszerek drágák. adatokat. A következõ elvárás az volt, hogy a rendszer meg A felhasználói felület jellemzõen a gyártófüggõ megjelenítõ is feleltesse az így begyûjtött adatokat, vagyis párbeszédké- hardverre készül. Minden gyártó kifejleszti a saját szabadal- pesnek kellett lennie a cég PostgreSQL adatbázisaival. A ter- mazott fejlesztõi felületét. Látható tehát, hogy az értékelés melési adatok és a folyamat állapota a PostgreSQL-nek adó- minden pontján megjelenik a gyártótól való függés. dik át megjelenítés és jelentéskészítés céljából. A következõ próbálkozásunk egy adatgyûjtõ (data Az új automatizáló rendszernek felhasználói felülettel is ren- acquisition, DAQ-) kártyával felszerelt PC volt. Korábban delkeznie kellett, amelyen a gépkezelõk és a karbantartó sze- egy táskagépet használtunk egy DAQ-kártyával, Microsoft mélyzet naplózhatja a saját tevékenységét. Az állásidõk és Windows-t és Aglient VEE-t. Ez az együttes jól mûködött ezek okai rögzítésre kerülnének és továbbítódnának a vállala- az adatok gyors összegyûjtésének terén, ehhez csak kevés ti adatbázis felé. Ezzel a megoldással kiváltható lenne a papír programozási munkára volt szükség. Ezzel a rendszerrel az alapú naplózásra és manuális adatrögzítésre fordított munka. adatok továbbítása az adatbázisunkhoz csak a Windows OLE

20 Linuxvilág Szaktekintély

ségek, de még ez sem elégíti ki egy szigorúan valósidejû rendszerrel (hard real-time system) szemben támasztott követelményeket. Rengeteg nagyszerû kiadvány jelent már meg az RTLinux- szal kapcsolatban, sok ezek közül Michael Barbnovtól és Victor Yodaikentõl származik, akik elõször valósították meg az RTLinuxot még 1996-ban, és azóta is fejlesztik. A Finite State Machine Labs, Inc. (FSMLabs) egy a tulajdonukban lé- võ szoftvercég, amely karbantartja a programot. Az évek so- rán kidolgoztak olyan továbbfejlesztéseket, amelyeket az RTLinux kereskedelmi változataiba építettek be, de továbbra is biztosítanak egy ingyenes változatot RTLinux/Free néven, amely a GNU GPL és az Open RTLinux Patent Licence (nyílt RTLinux szabadalmi licenc) alapján használható. A projek- tünkhöz az ingyenes változatot használtuk, amelyhez nem jár támogatás az FSMLabs-tól. A Dinil Divakarannak köszönhetõ RTLinux HOWTO-ban © Kiskapu Kft. Minden jog fenntartva 2. ábra Az RTLinux-rendszerfolyam megtaláltuk az RTLinux telepítéséhez és futtatásához szük- séges információ túlnyomó részét. felületén keresztül volt lehetséges. Írhattunk volna egyedi al- kalmazásokat de a szabadalmazott felület a gyártóhoz kötött Az RTLinux-rendszerfolyam volna minket. A National Instruments szintén ajánlott teljes Egy normál Linux rendszerben ha írunk egy függvényt, DAQ-csomagot a PC-hez, de csak felár fejében. amely az adatgyûjtõ kártyáról érkezõ adatokat meghatáro- Az igényeinknek legjobban megfelelõ megoldás is PC-bõl zott idõnként beolvassa, nem kapunk kielégítõ eredményt. és DAQ-kártyából áll, az eltérés az RTLinux használata, Egy ilyen rendszer nem tudja garantálni a kapott ütemezési amely egy Linuxra épülõ valós idejû operációs rendszer. elsõbbséget. Amint a 2. ábrán látható, a szabványos Linux Ezzel korlátozhattuk a gyártóhoz való kötõdést és ingyen operációs rendszerben minden rendszerfolyamat a hardver- létesíthettünk kapcsolatot a PostgreSQL adatbázissal és tõl elválasztva mûködik. Ez nem is lenne gond, ha az adat- a TCP/IP hálózattal. A valós idejû operációs rendszer a PLC beolvasó folyamatunk lenne az egyetlen, amit a rendszer megbízhatóságát kínálta anélkül, hogy cserébe az összeköt- éppen végrehajt. A mi projektünknek azonban felhasználói tetésekrõl le kellett volna mondanunk. Nem utolsó sorban térben futó programra van szüksége, és garanciára, hogy az pedig a felhasználó felületet is a saját tetszésünknek megfe- érzékelõk bemeneteit minden ezredmásodpercben beolvas- lelõ nyelven készíthettük el. A nyílt forráskódú eszközök hatja. A szigorúan valósidejû rendszerek biztosítani tudják, használatával rugalmas és könnyen frissíthetõ alkalmazáso- hogy az érzékelõk bemeneti adatai egyszer sem vesznek el. kat hozhattunk létre. Az RTLinux operációs rendszerben, amely szintén látható a 2. ábrán, a valós idejû feladat el van választva a többi A SmartPress rendszer rendszerfolyamattól, és modulként kerül megvalósításra. A számítógépek, amelyeket az adatbegyûjtés és az adatok A modul közvetlen hozzáférést élvez a hardver és a DAQ- kezelésének feladatára választottunk, a manapság kapható kártya meghajtói felé, és a rendszer többi része felett is gépekhez képest lassúak. Lehetõségünk adódott ugyanis megkapja a szükséges prioritást. A modult egy adott feladat a régi irodai gépeink újrahasznosítására a gyártási szinten. megoldására írják, amely megbízható eredményeket bizto- Ezek a 400 MHz-es Celeron processzoros gépek elég gyor- sít, és ezeket a FIFO meghajtó-fájlokon keresztül adja át sak ahhoz, hogy megfelelõen elvégezzék a rájuk bízott fel- a felhasználónak. A fejlesztõk törekedtek arra, hogy a mo- adatokat anélkül, hogy akadályoznák az adatok begyûjtésé- dul kódja minél egyszerûbb maradjon, csak azokat a felada- vel kapcsolatos magas szintû elvárásainkat. Az általunk al- tokat oldották meg vele, amelyeknek mindenképpen valós kalmazott rendszerre induláskor a Red Hat 7.3 rendszercso- idõben kell zajlaniuk. Az egyik FIFO meghajtó-fájlhoz hoz- mag került a 2.4.18-as rendszermaggal. zákapcsolva egy kezelõfüggvényt lehetõség nyílik arra, hogy az operátor kezelõprogramja ezen keresztül végezze Az RTLinux és a Linux rendszermagok az irányítást. Az RTLinuxnak ez a felépítése biztosítja, hogy A rendszermag választja el a felhasználói szintû feladato- a rendszermag másodlagos folyamatok futtatása miatt ne kat a rendszer hardverétõl. A szabványos Linux rendszer- késleltethesse a fontos modulfeladatok végrehajtását. mag minden egyes felhasználói kérés számára idõszele- teket oszt ki és képes ezek lejártakor az adott feladat fel- Az adatgyûjtõ szálak függesztésére. Ez ahhoz vezethet, hogy a kritikus fontossá- Egyedül a digitális bemenet állapotát kell a szigorú valós gú feladatokban késést okozhatnak a rendszer nem kiemelt idejû feltételekkel figyelnünk, ezért a valós idejû függvé- fontosságú folyamatai. Léteznek olyan parancsok, amelyek- nyünk kis méretû maradhatott. Az adatbemenetek lekérde- kel befolyásolhatjuk a Linux feladatütemezõ mûködését, zését megkönnyítette, hogy a United Electronics Industries bár a 2.4-es rendszermagban ezeknek a paramétereknek a DAQ-kártyáihoz RTLinux meghajtóprogramot is adott. az átállítása sem eredményez igazi valós idejû rendszert. Az ADLINK Technology, Inc. DAQ-kártyáját szintén az A 2.6 rendszermagban már fejlettebbek a valós-idejû képes- RTLinuxhoz készült meghajtókkal teszteltük, a beállítással

www.linuxvilag.hu 2005. május 21 Szaktekintély

1. lista Egy valós idejû modul kódjának váza

#include } #include } #include #include int handler_function(){ #include // Code tied to the handler FIFO #include // Variables for counting above are cleared // out pthread_t thread_variable; }

void thread_name(void) int init_module(void) { { Struct Sched_param p; ififo_status = rtl_create(unsigned int fifo, p.sched_priority = 1 int size) pthread_setschedparam(pthread_self(), pthread_create(&thread_variable, NULL, SCHED_FIFO, &p); thread_name, NULL); pthread_make periodicnp(pthread_self(), rtf_create_handler(FIFO_Number, © Kiskapu Kft. Minden jog fenntartva getrtime(), &handler_function) 1000000); } while(1) { // Real Time Task Code int cleanup_module(void) // Poll Data input lines, count low to { // high transitions rtf_destroy(unsigned int fifo) rtf_put() // Counts to be transferred by pthread_cancel(thrad_variable) FIFO } pthread_wait_np();

nem volt gondunk. Nem sok cég kínál ilyen szolgáltatást, idejû modul bonyolult része a keretrendszer létrehozása jóllehet a Comedi Project a nyílt forrású meghajtók, segéd- volt. A valós idejû feladat magától értetõdõ volt, bár igen programok és programkönyvtárak révén egy másik lehetõ- hosszú, ezért ide csak a valós idejû modul vázát illesztettük séget is kínál az adatgyûjtés megvalósítására. be (1. lista). Láthatjuk, hogy milyen egyszerû a valós idejû A valós idejû feladatot egy betölthetõ modul formájában írtuk elvárásokat megvalósító kód. meg, amelynek legalább két függvénnyel kell rendelkeznie: Az egyik az init_module függvény, amelyet a modul rend- A felhasználói felület szermagba történõ beillesztése elõtt hívunk meg, a másik A valós idejû folyamat üzembe helyezésének következõ lé- a cleanup_module, amelyet közvetlenül az eltávolítás elõtt pése az alkalmazás felhasználói felületének létrehozása volt. hívunk (1. lista). A programunkban a grafikus felület volt annak a számos fel- Miután a modul alapszerkezete elkészült, szükségünk volt adatoknak az egyike, amelyeknek nem kellett szükségszerû- a modulban egy szál létrehozására, amely a valós idejû fel- en teljesíteniük a szigorú valós idejû kikötéseket. Nem kel- adatot végzi el. A szálat az init_module belsejében hoztuk lett különösebben törõdnünk a rendszererõforrásokkal, mi- létre, és úgy állítottuk be, hogy a megfelelõ RTLinux priori- vel a valós idejû modulunk a már megvalósított valós idejû tásokkal fusson. A megfelelõ prioritás és futási sebesség be- környezetünkben fog futni. A választásunk a KDevelop IDE állítása a szál számára a valós idejû feladat létrehozásának és a Trolltech Qt Designer grafikus felület készítõ eszközére fontos lépését jelentette. esett. A Qt Designer lehetõvé tette egy olyan grafikus felület kifejlesztését, amely a KDevelopban elkészített program A FIFO meghajtófájlok függvényeivel képes volt a jelekkel és csatolókkal megvaló- A kiszámítható idõzítésû futtatás megvalósításához szükség sított kapcsolattartásra. Ennek a két eszköznek az együttes volt valós idejû memóriára az adatátvitelhez. A felhasználói használatával létrehozott felület tökéletesen megfelelt szintû folyamatnak hozzá kellett férnie az összegyûjtött a programunk számára. Rövid idõn belül képesek voltunk adatokhoz és a valós idejû folyamat vezérléséhez. A valós egy felhasználóbarát felület létrehozására. idejû FIFO-k olyan várakozási sorok, ahonnan a Linux fo- A program két forrásból képes a rendszer számára infor- lyamatok adatokat olvashatnak ki és írhatnak bele vissza. mációkat fogadni: a DAQ-kártya felõl jövõ digitális be- A valós idejû FIFO meghajtók fordítása az RTLinux telepí- menetrõl és a grafikus felületen keresztül a kezelõszemély- tésekor történik, a létrehozása pedig a valós idejû modulok zettõl. Ennek a két forrásnak az egyesítésére volt szükség inicializálásakor. Ekkor egy kezelõprogram hozható létre és ahhoz, hogy megõrizhessük az adatok sértetlenségét. köthetõ az egyik FIFO meghajtóhoz. A kezelõt úgy állíthat- Például a kezelõ a munkafolyamathoz beírja a gyártandó juk be, hogy akkor fusson le, amikor a felhasználói felület- alkatrész számát, a futás alatt összegyûjtött adatok pedig rõl egy 1-es érték érkezik a kezelõ FIFO-ba mint a szüksé- ehhez az alkatrészszámhoz rendelõdnek. Ez helyettesíti ges modul vezérlõje. A modult a rendszermagba valós idejû a felhasználó korábbi kötelezettségét a nyilvántartások folyamatként való telepítés céljából hoztuk létre. A valós kézzel történõ kitöltésére vonatkozóan.

22 Linuxvilág Szaktekintély

Az adatok kezelése A programfejlesztésünk szintén olcsó volt, az idõ, amelyet Az adatok összegyûjtése csak a rendszer és a program elsõ Ryan Walsh ezzel a projekttel töltött, körülbelül annyi, lépését jelentette. A legfontosabb az volt, hogy az informá- mint amennyit egy kereskedelmi vezérlõnyelv megtanu- ciókat használhatóvá tegyük a cég minden osztálya számá- lásával és az abban történõ fejlesztéssel kellett volna eltöl- ra. A tervezési, beszerzési és karbantartó osztály csak né- tenie. Ryan mostanra teljesen otthonosan mozog a rend- hány példa azokra a helyekre, ahol ezeknek az informáci- szermag-modulok, a valós idejû operációs rendszerek, óknak jó hasznát vehetik. a PostgreSQL és a grafikus felületek fejlesztése terén, A SmartPress program az összegyûjtött adatokat egy ezek a készségek pedig sokkalta használhatóbbak, mint PostgreSQL adatbázisban helyezte el. A PostgreSQL rend- egyetlen gyártó programozási nyelvének elsajátítása. szer képezi a vállalati szintû háttéradatbázisunkat is, így Számunkra a „csináld magad” módszer választása azt a jövõben kifejlesztendõ alkalmazás egész vállalati szinten eredményezte, hogy alacsonyabb költséggel, gyártóhoz láthatóvá teszi majd a SmartPress adatait. való kötöttség nélkül és fejlesztõi ismereteink gyarapítá- sával sikerült elérnünk a céljainkat. Összegzés – „csináld magad” információtechnológia A SmartPress rendszerünk a tesztelõszobából kikerült a ter- Linux Journal 2004. december, 128. szám melési szintre. Visszatekintve elmondhatjuk, hogy sikerült létrehoznunk egy rugalmas gyártásellenõrzõ rendszert. Craig Swanson ([email protected]) © Kiskapu Kft. Minden jog fenntartva A Linux használatával egy olyan bõvíthetõ alkalmazást hálózattervezõ és Linux tanácsadó az SLS kaptunk, amely a cég igényeitõl függõn szabható testre. Solutions cégnél. A Midwest Tool & Die cégnél Lehetõség van a SmartPress új gyártófolyamatokra történõ Linux programok fejlesztésével foglalkozik. bevezetésére is. A rendszer egyszerûen frissíthetõ, a jövõ- 1993 óta használ Linuxot. ben tervezzük is a program új rendszermagra történõ átül- tetését. A frissítéshez valószínûleg a Fedora magot fogjuk Linux-alapként használni. Ryan Walsh ([email protected]) A SmartPress alacsony hardverköltségei fontos szempontot a Midwest Tool & Die hálózati mérnöke. jelentenek számunkra, mivel minden egyes préssor számá- Szabadidejében repülõgépekbõl kiugrálva ra egy-egy külön rendszert telepítünk. A költségeket sze- élvezi a szabadesés élményét. mélyi számítógépek és a Linux által támogatott DAQ- kártyák használatával tudtuk alacsony szinten tartani.

www.linuxvilag.hu 2005. május 23 Szaktekintély

MyHDL: egy Python alapú hardverleíró nyelv Az alkatrésztervezés végre belépett a XXI. századba. Ez az új eszköz a Python olvasható kódját ötvözi az extrém programozás tudományágával az alkatrész- projektjeinkben. © Kiskapu Kft. Minden jog fenntartva

digitális alkatrészterveket általában speciális Következõ példánk egy óragenerátort modellezõ generátor- leíró nyelven, az úgynevezett alkatrészleíró függvényt mutat be: nyelven (hardware description language, HDL) Akészítik. Ezt a megközelítés azon a feltételezésen alapul, def clkgen(clk): hogy az alkatrésztervezés különleges követelményeket “”” Clock generator. támaszt. Manapság a legkedveltebb HDL nyelv a Verilog clk — clock signal és a VHDL. “”” A MyHDL projekt szakít a hagyománnyal és egy magas while 1: szintû, általános célú nyelvet a Python-t teszi alkalmassá az yield delay(10) alkatrésztervezésre. Ez a megközelítés lehetõvé teszi az al- clk.next = not clk katrésztervezõknek, hogy kihasználják egy jól megterve- zett, széles körben használt nyelv és a mögötte meghúzódó A függvény nagyon hasonlít a hagyományos Python függ- nyílt forrású modell elõnyeit. vényekhez. Figyeljük meg, hogy a kód a while 1 ciklussal kezdõdik; ezzel a pórias megoldással tartjuk örökre élet- Fogalmak ben a generátorunkat. A hagyományos és a generátor A HDL használ néhány fogalmat amelyek az alkatrészek függvény között a yield utasítás jelenti a lényegi különb- természetét írják le. A legtöbb leíró fogalom az erõs párhu- séget. Nagyon hasonlóan mûködik a return utasításhoz, zamosítás modelljére vonatkozik. A HDL leírása rengeteg attól eltekintve, hogy a generátor a yield után tovább él apró szálat tartalmaz, amelyek szoros kapcsolatban állnak és folytathatja futását errõl a pontról. Továbbá a yield egymással. Ez a körülmény megköveteli, hogy a szálásítás utasítás késleltetõ objektumot ad vissza. MyHDL alatt a lehetõ legegyszerûbb legyen. A HDL szerkezeteink egy ezzel a mechanizmussal adjuk át a vezérlési információ- kifejezetten erre a célra kialakított környezetben, a szimulá- kat a szimulátornak. Jelen esetben a szimulátort arról torban futnak. értesítettük, hogy tíz idõegység múltán kell visszatérnie A MyHDL tervezésekor a Python szellemiségére oly a végrehajtáshoz. annyira jellemzõ egyszerûségre törekedtem, ami persze A clk paraméter jelképezi az órajelet. MyHDL alatt a gene- egyébként is hasznos dolog. A MyHDL egyik fontos része rátorok közötti kommunikáció ilyen jelzésekkel történik. a Python felhasználási modellje. A másik rész a myhdl A jelzés fogalmát a VHDL-tõl kölcsönöztük. A jelzés objek- Python csomag, amely a HDL fogalmak objektumait tartal- tum két értékkel rendelkezik: a csak olvasható aktuális ér- mazza. A következõ Python kód néhány MyHDL objektu- tékkel valamint a következõ (next) értékkel, amely a .next mot importál, amelyeket hamarosan használni is fogunk: attribútumhoz rendelve állíthatunk be. Példánkban az óra- jel úgy váltakozik, hogy a következõ értéket az aktuális ér- from myhdl import Signal, Simulation, delay, now ték inverzére állítjuk be. Az órajelgenerátor modellezéséhez elõször is elõállítjuk A MyHDL a Python nyelvbe nemrég bevezetett generator az óra jelzést: típusú függvényekkel (lásd a hálózati forrásokat) szimulál- ja a párhuzamosságot. Ezek nagyon hasonlóak a hagyomá- clk = Signal(bool(0)) nyos függvényekhez, azzal az eltéréssel, hogy van nem végzetes visszatérési értékük is. Amikor generátorfügg- A clk jelzéshez a logikai zero kezdeti értéket rendeljük. vényt hívunk meg, egy generátort ad vissza, azaz a minket Most már a generátorfüggvény meghívásával létrehozhat- érdeklõ objektumot. A generátorok folytathatók és állapo- juk az órajel-generátorunkat: tukat az egyes meghívások között is megtartják, így kiváló- an felhasználhatjuk õket szuper-könnyûsúlyú szálakként. clkgen_inst = clkgen(clk)

24 Linuxvilág Szaktekintély

1. lista MyHDL SPI szolga modell

from myhdl import Signal, posedge, negedge, intbv yield negedge(sclk) if ss_n == ACTIVE_n: ACTIVE_n, INACTIVE_n = bool(0), bool(1) sreg[n:1] = sreg[n-1:] IDLE, TRANSFER = bool(0), bool(1) sreg[0] = mosi if cnt == n-1: def toggle(sig): rxdata.next = sreg sig.next = not sig toggle(rxrdy)

def SPISlave(miso, mosi, sclk, ss_n, def TX(): txdata, txrdy, rxdata, rxrdy, sreg = intbv(0)[n:] rst_n, n=8): state = IDLE “”” SPI Slave model. while 1: yield posedge(sclk), negedge(rst_n) © Kiskapu Kft. Minden jog fenntartva miso — „master in, slave out” soros kimenet if rst_n == ACTIVE_n: mosi — „master out, slave in” soros kimenet state = IDLE sclk — eltolási óra bemenet (shift clock cnt.next = 0 input) else: ss_n — aktív alacsony szolga választó bemenet if state == IDLE: txdata — n-bites bemenet a küldendõ adattal if ss_n == ACTIVE_n: txrdy — ha új txdata fogadható, megváltozik sreg[:] = txdata rxdata — n-bites kimenet a fogadott adattal toggle(txrdy) rxrdy — megváltozik, ha van elérhetõ rxdata state = TRANSFER rst_n – aktív alacsony reset bemenet cnt.next = 0 n — paraméteres adat else: # TRANSFER sreg[n:1] = sreg[n-1:] “”” if cnt == n-2: state = IDLE cnt = Signal(intbv(0, min=0, max=n)) cnt.next = (cnt + 1) % n miso.next = sreg[n-1] def RX(): sreg = intbv(0)[n:] return RX(), TX() while 1:

A legegyszerûbb de még használható szimuláció létrehozá- Ezzel 50 idõegységen keresztül futtatjuk a szimulátort. sához készítsünk egy másik generátort, amely megfigyeli, A kimenet a következõ lesz: és kiírja az óra jelzéseinek változását: $ python clkgen.py def monitor(): time: clk print “time: clk” 0: 0 while 1: 10: 1 print “%4d: %s” % (now(), int(clk)) 20: 0 yield clk 30: 1 40: 0 A yield clk utasításból láthatjuk, miképpen vár a generá- 50: 1 tor a jelzés értékének megváltozására. MyHDL-ben a szimulátort a Simulation objektum Most már tudjuk, hogyan mûködik a szimulátor. konstruktorral készíthetjük el amely tetszõleges számú A szimulátor algoritmusát a VHDL ihlette, amely generátort vár paraméterként: ugyan kevésbé népszerû HDL mint a Verilog, viszont jobb követendõ példa. Az összes generátor párhuza- sim = Simulation(clkGen_inst, monitor()) mos végrehajtását a szimulátor esemény vezérelt algo- rit mussal oldja meg. A generátor yield utasításában a szimulátor elindításához meghívjuk a run metódust: megadott objektum határozza meg, azt az eseményt amelyre a következõ meghívásáig várakozni szeretne. sim.run(50) Tegyük fel az egyik szimulációs lépésnél néhány generátor

www.linuxvilag.hu 2005. május 25 Szaktekintély

2. lista Teszkörnyezet az SPI Slave Module-hoz 3. lista Teszt eset SPI-on keresztül történõ adatfogadáshoz

import unittest from random import randrange import unittest from random import randrange from myhdl import Signal, intbv, traceSignals from myhdl import Simulation, join, delay, from SPISlave import SPISlave, ACTIVE_n, intbv, downrange INACTIVE_n from SPISlave import SPISlave, ACTIVE_n, def TestBench(SPITester, n): INACTIVE_n from SPISlaveTestBench import TestBench miso = Signal(bool(0)) mosi = Signal(bool(0)) n=8 sclk = Signal(bool(0)) NR_TESTS = 100 © Kiskapu Kft. Minden jog fenntartva ss_n = Signal(INACTIVE_n) txrdy = Signal(bool(0)) class TestSPISlave(unittest.TestCase): rxrdy = Signal(bool(0)) rst_n = Signal(INACTIVE_n) def RXTester(self, miso, mosi, sclk, ss_n, txdata = Signal(intbv(0)[n:]) txdata, txrdy, rxdata, rxrdy, rxdata = Signal(intbv(0)[n:]) rst_n, n):

SPISlave_inst = traceSignals(SPISlave, def stimulus(data): miso, mosi, sclk, ss_n, txdata, yield delay(50) txrdy, rxdata, rxrdy, rst_n, n=n) ss_n.next = ACTIVE_n yield delay(10) SPITester_inst = SPITester( for i in downrange(n): miso, mosi, sclk, ss_n, txdata, sclk.next = 1 txrdy, rxdata, rxrdy, rst_n, n=n) mosi.next = data[i] yield delay(10) return SPISlave_inst, SPITester_inst sclk.next = 0 yield delay(10) ss_n.next = INACTIVE_n

elindul, ugyanis bekövetkezik az esemény amire vártak. def check(data): A szimulációs fázisban az összes generátor lefut az aktuá- yield rxrdy lis jeleket használva, közben pedig beállítják a következõ self.assertEqual(rxdata, data) jelet (next signal). A második fázisban az aktuális jelérté- keket lecseréljük a következõ jelben lévõkkel. A jelértékek for i in range(NR_TESTS): változása következtében néhány generátor ismét aktívvá data = intbv(randrange(2**n)) válik és a szimulációs ciklus megismétlõdik. A mechaniz- yield join(stimulus(data), mus garantáltan determinisztikus, ugyanis az aktív gene- check(data)) rátorok futtatási sorrendje a modell viselkedési szempont- jából lényegtelen. def testRX(self): “”” Test RX path of SPI Slave “”” Valós tervezési példa sim = Simulation(TestBench Az elvek bemutatása után készen állunk rá, hogy egy való- (self.RXTester, n)) di MyHDL tervezési példával is megismerkedjünk. A soros sim.run(quiet=1) külsõ csatolófelület (SPI) szolga alkatrész modulját válasz- tottam. Az SPI népszerû szinkron soros vezérlõfelület ame- if __name__ == ´__main__´: lyet eredetileg a Motorola tervezett. unittest.main() Egyetlen SPI mester több szolgát is irányíthat. Három álta- lános I/O kaput használhatunk: a mosi, azaz a mester ki, szolga be (master-out slave-in) soros vonalat, a miso, azaz zajlik mindkét irányban. Az adatváltozást kiváltó óra határt a mester-be, szolga ki (master-in slave-out) soros vonalat, általában szabadon beállíthatjuk. Ebben a példában felfutó valamint az sclk-t azaz a mester által vezérelt soros órát. élet használunk. Ezen kívül minden szolga rendelkezésére áll a szolga-vá- Az SPI szolga MyHDL kódját a az 1. listában mutatjuk be. lasztó (ss_n) vonal. Az SPI kommunikáció mindig egyszerre Az SPISlave nevû klasszikus Python függvény segítségével

26 Linuxvilág Szaktekintély

Az SPI szolga modul belsejében létrehozzuk a cnt jelzést amiben a soros ciklusszámot tartjuk nyilván. Ez kezdeti értékként az intbv objektumot használja fel. Az intbv alkatrész orientált osztály amely bitszintû képességekkel rendelkezõ egészként viselkedik. A Python indexelõ és szeletelõ képességével elérhetjük az egyes biteket és szele- teket. Továbbá az intbv objektumnak lehet minimum és maximum értéke. Az RX generátor függvények a fogadási viselkedést írják le. Valahányszor az ss_n szolga választó vonal aktív ala- csony, a mosi bemenetet az sreg eltolási regiszterbe tol- juk. A yield negedge(sclk) utasítás azt jelenti, hogy a mûvelet az ereszkedõ órajel ciklusban hajtódik végre. 1. kép A gtkwave segítségével a tesztkészlet futása során Az utolsó soros ciklusban az eltolási regiszter az rxdata megjeleníthetjük az összes jelet kimenetre kerül az rxrdy pedig átvált. A TX generátor függvény valamivel bonyolultabb, modellezzük az alkatrész modult. A függvény az összes jel- mivel egy apró állapotgépre van szüksége a protokoll © Kiskapu Kft. Minden jog fenntartva zést paraméterként kapja meg és két generátort ad vissza. irányításához. A yield utasítás ebben az esetben A kód jól mutatja hogyan modellezzük MyHDL alatt a hie- két esemény jelöl, így a generátor az elsõként bekö- rarchiát: a magasabb szintû függvény meghívja az alacso- vetkezõ esemény hatására folytatja futását. Amikor nyabb szintût és a visszaadott generátorokat beépíti saját a reset bemenet aktív alacsony, a cnt és az állapot visszatérési értékébe. alaphelyzetbe kerül. A másik esetben a mûvelet az A modul csatolófelület néhány további jelzést és paramétert állapottól függ. Az IDLE állapotban megvárjuk amíg is tartalmaz. A txdata az átadandó bemeneti adat szó, a select vonal aktív alacsony és csak akkor fogad- a txrdy pedig akkor változik ha új adatot fogadhatunk. juk el a szót átvitelre és lépünk be a TRANSFER álla- Hasonlóképpen, az rxdata tartalmazza a fogadott adatszót, potba. A TRANSFER állapotban a shift regisztert és az rxrdy változik ha új szót fogadtunk. Végül találunk sorosan kitoljuk. Az állapotgép fenntartja a helyes egy bemeneti reset jelet (rst_n), és az bemeneti szószéles- soros ciklust és az utolsó kitolás után visszatér séget meghatározó n paramétert. az IDLE állapotba.

www.linuxvilag.hu 2005. május 27 Szaktekintély

Ellenõrzés $ python test_SPISlave.py -v Az SPI szolga modult a megvalósításhoz nagyon közeli Test RX path of SPI Slave ... ok szinten modelleztük. Ez jó lehetõséget adott nekünk ———————————————————————— a MyHDL fogalmainak bemutatására. Ugyanakkor Ran 1 test in 0.559s a MyHDL-t ilyen célra használva nem jutunk túl sok elõny- höz a hagyományos HDL-ekhez képest. A MyHDL igazi Hullámforma nézet ereje abban rejlik, hogy a teljes Python képességkészletet A MyHDL támogatja az alkatrész viselkedés népszerû elérhetõvé teszi az alkatrésztervezõk számára. A Python vizsgálati módszerét, a hullámforma nézetet is. A 2. kifejezõereje, rugalmassága és kiterjedt könyvtára már listában az SPI szolga modul létrehozását a traceSignals jóval túlmutat a hagyományos HDL-ek képességein. függvényhívásba csomagoltuk. Mellékhatásként a szimu- Az egyik terület, ahol a Python-szerû képességek nagyon láció alatt történt jelváltozások szabványos formátumú jól jönnek: az ellenõrzés. Akárcsak a programoknál az alkat- fájlba íródnak. Az 1. ábrán a minta-hullámformánkat lát- résztervezésnél is az ellenõrzés a keményebb dió. Általános juk a nyílt forráskódú gtkwave hullámforma-nézegetõ vélemény, hogy a hagyományos HDL-ek nem igazán alkal- megjelenítésében. masak erre a feladatra. Következésképpen egy újabb nyelv jelent meg a színen, az alkatrész ellenõrzõ nyelv (hardware Kapcsolat más HDL rendszerekkel verification language avagy HVL). A MyHDL ezzel a meg- A MyHDL praktikus megoldás, amely más HDL rendsze- © Kiskapu Kft. Minden jog fenntartva közelítéssel szemben a Python támaszkodik. rekkel is képes a kapcsolattartásra. A MyHDL támogatja Az alkatrész ellenõrzõ környezet kialakításakor elõször is lét- a segéd-szimulációt más HDL szimulátorokkal, amennyiben rehozzuk a tesztasztalt. Ez az az alkatrész modul, amely azok rendelkeznek csatolófelülettel az operációs rendszer- a tesztelés alatt álló tervünk (design under test, azaz DUT) , hez. Minden szimulátorhoz létre kell hozni egy hidat. valamint az adatgenerátorok és ellenõrzõk összességét meg- Ez a nyílt forrású Icarus és cver Verilog szimulátorokhoz jeleníti számunkra. A 2. lista az SPI szolga modul tesztaszta- már el is készült. lát mutatja be. Itt az SPI szolga modult, és az SPI tesztelõ Ezen túl, a MyHDL megvalósítás-orientált kódrészei auto- modult láthatjuk, amely a csatolófelület tûit vezérli. Hogy matikusan konvertálhatók Verilog alá. Ezt a toVerilog egy idõben több, a tervet különbözõ szempontok alapján függvény segítségével érhetjük el, amelyet ugyanúgy hasz- vizsgáló SPI tesztelõt is alkalmazni tudjunk, az SPI teszt nálunk, mint a korábban bemutatott traceSignals függ- modul a tesztasztalunk paramétere lesz. vényt. Az eredményül kapott kódot felhasználhatjuk a szo- Magukhoz a tesztekhez tesztelõ keretrendszert használunk. kásos tervezési folyamatban például automatikusan szinte- Az egységtesztelés a extrém programozás (XP) sarokköve. tizálhatjuk megvalósításunkba. Ez a modern programfejlesztési módszer a józan ítélõképes- ség és radikálisan új elképzelések érdekes keveréke. Az ere- Epilógus deti XP megközelítés szerint elõször a tesztet kell kifejleszte- Tim Peters, a híres Python guru, a következõ paradox kije- ni, még a megvalósítás elõtt. Bár az XP igen hasznos mód- lentéssel jellemzi szeretett Python nyelvét: „a Python kódot szertan, az alkatrészfejlesztõk közössége általában mégis könnyû kidobni.” Hasonló szellemben, a MyHDL célja figyelmen kívül hagyja tanulságait. MyHDL alatt a Python olyan kedvelt alkatrésztervezõ nyelvvé válni, amelyben egységtesztelõ keretrendszere a unittest, amely jó szolgála- egyszerûen próbálhatunk ki új ötleteket. tot tesz nekünk a teszt-vezérelt alkatrészfejlesztésben. A 3. lista az SPI szolga modul teszt kódját mutatja be. Linux Journal 2004. november, 127. szám A teszteket a unittest.TestCase osztály alosztályai- ként adjuk meg. Az összes test elõtaggal jelölt metódus Jan Decaluwe 18 évig dolgozott ASIC tervezõmérnökként és a tényleges tesztre vonatkozik, a többi a teszt támogatá- vállalkozóként. Jelenleg elektronikus tervezési és automati- sára szolgál. Egy tipikus tesztben számos tesztet és teszt- zálási tanácsadó. A [email protected] címen érhetõ el. esetet találunk, itt azonban mintaképpen csak egytelen  tesztet mutatunk be. KAPCSOLÓDÓ CÍMEK Az RXTester generátor függvény metódus célja az SPI szol- ga fogadási oldalának tesztelése. Tartalmaz egy stimulus ne-  vû helyi generátor függvényt, amely mesterként továbbítja www.jandecaluwe.com/Tools/MyHDL/Overview.html az adatszót az SPI buszon. Másik helyi generátor függvé-  sourceforge.net/projects/myhdl nye a check, amely ellenõrzi, hogy a szolga helyesen fojgadta-e az adatszót. A teljes teszt adott számú véletlen  news.gmane.org/gmane.comp.python.myhdl szó átvitelébõl áll. Minden adatszó esetében létrehozunk  www.python.org/peps/pep-0255.html egy stimulus és egy check generátort. A MyHDL lehetõvé teszi, hogy a yield utasításba helyezzük õket, így megvár-  www-106.ibm.com/developerworks/linux/ hatjuk a befejezésüket. A helyes szinkronizáció érdekében library/l-pythrd.html csak akkor akarunk továbblépni ha már mindkét függvény  kilépett. Ezt a feladatot a join függvény látja el. www.embedded.com/story/OEG20020124S0116 A tesztprogram futtatásakor a kimenetben láthatjuk melyik  www.mct.net/faq/spi.html teszt lett hibás melyik ponton. Amennyiben minden mûkö- dik, apró példánk kimenete a következõ lesz:

28 Linuxvilág Szaktekintély

Makacs hibák megkeresése sokatmondó hibainformációkkal Amikor egy felhasználó egy olyan hibát jelez, amit nem tudunk megismételni, bízzuk inkább a programunkra a hiba megkeresését. Hozzunk létre egy esemény- naplót, és legyünk hibakeresõ bajnokok a szoftver alkalmazása után. © Kiskapu Kft. Minden jog fenntartva

gy hiba nyomon követése gyakran a programfejlesz- ezzel biztosítva van számunkra egy BTS-rendszer is. Ezt tés egyik legbonyolultabb folyamata. A felhasználók mindenképpen érdemes használnunk és a felhasználóinkat sokszor a fejlesztõétõl eltérõ helyzetben használják is arra kell ösztönöznünk, hogy a levelezõlisták helyett ezt Ea programot, és a programhibák, amik a felhasználónak a felületet használják a hibák jelzésére. nagy gondot okoznak, a fejlesztõ gépén esetleg meg sem je- Ha ennél nagyobb rugalmasságra tartunk igényt, kereshe- lennek. Néha a hibák maguktól elmúlnak, vagy a hálózatos tünk a Linuxhoz készített BTS-rendszert is. Néhány a leg- programokban csak akkor jelentkezik a tünet, amikor egy népszerûbb ingyenes BTS-programok közül: bizonyos kiszolgálóval vagy ügyféllel folytatunk adatcserét. • Bugzilla: A Mozilla Projekt által használt BTS egy rugal- Ebben a cikkben olyan módszereket ismertetek, amelyek mas rendszer, amelyet elsõdlegesen a webes felületén segítségével a programfejlesztõk könnyebben kinyomoz- keresztül alkalmazhatunk. hatják egy hibajelenség eredetét. • A Request Tracker használható akár hibakövetõ, akár tá- Elõször bemutatok két módszert a hibajelentések könnyebb mogatás-nyilvántartó rendszerként. Rendelkezik webes fogadására és kezelésére, majd megmutatom, miképpen és levelezõi felülettel is, bár bizonyos rendszergazdai érhetjük el, hogy a programunk jobban használható hiba- funkciók csak a webes felületen keresztül érhetõek el. keresõ kimenetet adjon. Ezután szólni fogok a kellemetlen • A Jitterbug a Samba Projekt által is használt BTS. hibák felderítésérõl, végül bemutatok néhány fogást arra, Az alkalmazott elv hasonló a Bugzillaban használthoz, hogyan elõzhetjük meg a programhibák kialakulását. de annál kisebb programról van szó. A cikkben bemutatandó eljárások közül sokat alkalmaztam • A Debbugs a Debian Projekt által használt BTS. A Debbugs az OfflineIMAP fejlesztésekor. rendelkezik egy webes felülettel, de ez csak olvasható, minden mûvelet e-mail-en keresztül történik. A Debbugs A programhibák felderítése a nagy projektekhez a legmegfelelõbb az egyértelmûen Mielõtt megvizsgálnánk, hogyan tehetünk szert jobb hibaje- azonosítható összetevõivel és ezek hatáskörével. lentésekre, nagyon fontos, hogy biztosak legyünk benne, hogy egyáltalán foglalkozni tudunk-e a kapott hibajelenté- Tegyük egyszerûbbé a hibák bejelentését sekkel. Kisebb projektek esetében elegendõ lehet, ha egysze- Elõfordul, hogy kellemetlen hibát találok egy programban és rûen egy e-mail címet tartunk fenn erre a célra, habár a leg- errõl tájékoztatni akarom a fejlesztõt, de ehhez egy részletes több projekt esetében ennél többre van szükség. A fejlesztõk kérdõívet kell kitöltenem és olyan dolgokat megadnom, gyakran elfoglaltak és feledékenyek. A hibák kijavítása meg- amiket nem nagyon szeretnék. Egyszerûvé kell tennünk lehetõsen bonyolult is lehet, és több ember közremûködését a felhasználók számára a hibák és a felderítésükhöz szüksé- is igényelheti, de az is elõfordulhat, hogy elárasztanak a hi- ges információk elküldését. Ha a bejelentéseket a Világhálón bajelentések. keresztül fogadjuk, a folyamat legyen minél egyszerûbb. Ne A hibakövetõ rendszerek (BTS, bug-tracking system) remek követeljünk túl sok információt és olyan bejelentéseket is fo- eszközt biztosítanak ahhoz, hogy egy hibáról se feledkez- gadjunk el, amikrõl esetleg hiányzik néhány adat. Ne várjuk zünk el. A legtöbb BTS lehetõséget ad a levelezés követésé- a felhasználóktól, hogy tisztában legyenek a program külön- re, a csatolt állományok kezelésére és a hibákkal kapcsolatos bözõ összetevõivel, vagy hogy tudják, melyik fejlesztõnek feladatok megosztására. Néhány támogatja a hiba súlyossá- kell foglalkoznia az adott problémával. ga, a felhasználói környezet és bizonyos összetevõk alapján történõ osztályozást is. A napló használata Amennyiben a projektünket a SourceForge vagy Savannah Problémák felderítése közben gyakran szeretnénk tudni, weboldalakhoz hasonló tárhelyeken helyezzük el, akkor hogy milyen környezetben mûködik a program, máskor

www.linuxvilag.hu 2005. május 29 Szaktekintély

pedig esetleg arra van szükség, hogy ismerjük a hiba jelent- A program a naplózás alapbeállításával kezdõdik. A napló- kezését megelõzõ, azt kiváltó eseményeket. Mivel a felhasz- üzenetek szabványos hibakimenetre történõ kiírását nálók nem feltétlenül ismerik az általunk kódolásra és hiba- a StreamHandler kezelõ végzi. A naplózás szintjét INFO-ra keresésre használt eszközöket, elterjedt a naplózás használa- állítjuk. Öt naplóüzenetet naplózunk, de a program futása- ta erre a célra. A naplózás egyszerûen egy rekord rögzítését kor csak az utolsó négyet látjuk. A debug üzenetet a napló- jelenti az elvégzett mûveletekrõl. Az egyszerû programok zási szint INFO-ra állítása kiszûrte. Sok program biztosít be- esetleg csak a képernyõre írják az adatokat, de valószínû, állítási lehetõséget vagy parancssori paramétert a naplózási hogy ennél kicsit jobb eszközre lesz szükségünk. szint futásidõben történõ beállítására. Ettõl eltérõ naplózási A nem interaktív programok – amilyenek például a hálózati módszert is használhatunk egyszerûen egy másik kezelõt kiszolgálók – nem rendelkeznek olyan kijelzõvel, amin megje- adva a Logger objektumunkhoz. A Python leírásában meg- leníthetnék ezeket az információkat. Ezek a programok a be- találjuk az összes használható kezelõ ismertetését. jegyzéseiket rendszerint naplófájlba rögzítik, vagy a Linux és UNIX rendszerekbe beépített syslog eszközt használják. A bemenet ellenõrzése Az interaktív programok vagy a képernyõre vagy egy fájlba Bizonyosodjunk meg arról, hogy a kapott bemenet megfe- írhatják az információkat. A naplófájl megkönnyíti a hibaje- lelõ. Például ha a parancssoron keresztül várunk valamit, lentések elkészítését, mert a felhasználó egyszerûen csatol- ellenõrizzük a paraméterek megfelelõ számát, mielõtt meg- hatja ezt a fájlt a bejelentéséhez. próbálnánk alkalmazni (vagy a kapott kivételt elcsípni). © Kiskapu Kft. Minden jog fenntartva Sokszor meglehetõsen sok adatra van szükség annak Ezzel a módszerrel jobb hibaüzenethez juthatunk. Íme egy megállapításához, hogy pontosan mi is történik egy adott Python példaprogram ennek bemutatására: rendszeren, de ez az adatmennyiség lehetetlenné is teheti a normál mûködést, elboríthatja a felhasználó képernyõ- #!/usr/bin/env python jét, vagy megtöltheti a merevlemezét. Éppen ezért sok import sys programban találkozhatunk a naplózási szint fogalmával, try: ami annyit jelent, hogy a felhasználó futási idõben megha- print “You supplied: %s” % sys.argv[1] tározhatja a naplózott információ mennyiségét. Néhány except IndexError: program osztályozza is az eseményeket, így a felhasználó print “You forgot an argument.” azt is megadhatja, hogy milyen típusú információk kerül- jenek be a naplóba. Az OfflineIMAP ezt a megközelítési A kivételek kezelése módot használja. Kellemetlenebb problémák esetén a fel- Számos programozási nyelv – többek közt a Java, Python és használó bekapcsolhatja a kapcsolattartási naplót, amely az OCaml – biztosít lehetõséget a kivételek kezelésére. A ki- minden, az IMAP-kiszolgáló felé elküldött vagy onnan vételek használatával a kívánt helyen csíphetjük el a hibákat érkezõ adatot naplóz. ahelyett, hogy minden esetlegesen problémát okozó hívást A Python 2.3 változatában megjelent egy hasznos modul, ellenõriznünk és az elõforduló hibákat kezelnünk kellene. aminek naplózás (logging) a neve. Ez a modul egységes fe- Idõnként nem okoz gondot a kivételek lekezelés nélküli át- lületet biztosít az üzenetek naplózásának számos különbö- engedése, de rendszerint nem ez a helyzet, a kivételeket el zõ módszeréhez. A támogatott naplózási módszerek közt kell fogni és megfelelõen kezelni. Habár megfelelõ megoldás megtaláljuk a naplófájlok használatát, a hálózati szolgáltatá- lehet felfüggeszteni a program mûködését, amikor nem tud- sokat, a syslog-ot, az e-mail üzeneteket és számos egyéb juk megnyitni a felhasználó által kért fájlt, de ezt jobb egy módszert. Nézzünk egy egyszerû példát a naplózó modul megfelelõ hibaüzenettel tennünk, amely megadja a problé- használatának bemutatására: ma jellegét és a fájl nevét, ahelyett, hogy a felhasználó csak a kivétel csúnya üzenetét kapná meg. #!/usr/bin/env python import logging, sys A kivételek elfogása # A naplózó objektum létrehozása Még a tényleg végzetes kivételek esetén is érdemes lehet l = logging.getLogger(‘testlog’) a kivételt elfogni. Ez lehetõvé teszi például a kivétel napló- # Egy kezelõ létrehozása és az objektumhoz rendelése fájlba való írását vagy egy felugró ablakban a grafikus felüle- handler = logging.StreamHandler(sys.stderr) ten történõ megjelenítését. Ez megkönnyíti a felhasználók l.addHandler(handler) számára, hogy a rögzített nyomokat visszaküldjék számunk- # A szintek: DEBUG, INFO, WARNING, ERROR, ra. Használhatunk általános kivételelfogót is, amely egyéb # CRITICAL. mûveleteket is végrehajthat, például az átmeneti tárak rög- # Beállítjuk az alapértelmezett szintet. zítését, amely megkönnyíti az események visszakövetését. # Az e szint alatti Az alábbi példa minden kivételt elkap és naplóz néhány # naplóüzeneteket figyelmen kívül hagyjuk. egyéb, a futó programmal kapcsolatos információval együtt. l.setLevel(logging.INFO) Ezután újra kiváltja a kivételt és kilép. # Kipróbáljuk. l.debug(“Debug message -- system initialized.”) #!/usr/bin/env python l.info(“Here’s some info. I’ve just debugged.”) import logging, sys, StringIO, traceback, os l.warning(“I don’t have many messages left.”) l = logging.getLogger(‘testlog’) l.error(“Only one more message to go.”) handler = logging.StreamHandler(sys.stderr) l.critical(“Nothing else to do!”) l.addHandler(handler)

30 Linuxvilág Szaktekintély

formatter = logging.Formatter(“LOG: %(message)s”) • Az elvártnak megfelelõ volt a bemenet és a kimenet? handler.setFormatter(formatter) Elõfordulhat, hogy a felhasználó olyan értéket használt, l.setLevel(logging.INFO) amire nem gondoltunk a program írásakor. Esetleg egy def logexception(): hálózati ügyfélgép vagy kiszolgáló kezel egy kicsit elté- sbuf = StringIO.StringIO() rõen valamilyen protokollt. Talán csak a bemenet vagy traceback.print_exc(file = sbuf) a kimenet maga torzult és a hiba nem is a mi progra- excval = sbuf.getvalue() munkban van. Nagyon hasznos tud lenni ezen a pon- l.critical(“ *** Exception Detected ***”) ton egy olyan hibakeresõ napló, amely az összes be- és l.critical(“Current PID: %d” % os.getpid()) kimenetet tartalmazza. l.critical(“Program name: %s” % sys.argv[0]) • A vártnak megfelelõen alakult a program futási folya- l.critical(“Command line: %s” % \ mata? Amennyiben a naplónk különbözõ függvények str(sys.argv[1:])) és eljárások hívását tartalmazza, szükséges, hogy egy for line in excval.split(“\n”): programmal követni tudjuk a futási folyamatot. Elõfor- l.critical(line) dulhat, hogy valamilyen feltételek együttesen vezettek def main(): egy élõ kódrészlet figyelmen kívül hagyásához, amely print “Hello, I’m running.” késõbb vezetett a hibához. raise RuntimeError(“Oops! I’ve had a problem!”) • Mi a helyes futás utolsó pontja? Ez lehet a hibát közvet- © Kiskapu Kft. Minden jog fenntartva try: lenül megelõzõ rész, de az is elõfordulhat, hogy már main() a hibát valamennyi idõvel megelõzõen történt egy rossz except: adatátadás. Ha megkeressük azt a legkésõbbi helyet, logexception() ahol a program még megfelelõen mûködött, akkor raise könnyebben behatárolhatjuk a félresiklás pontos helyét. • Ha kéznél vannak a visszakövetési információk A program futtatásakor valami ilyesmit kell látnunk (traceback), ellenõrizzük, hogy a verem tartalma megfe- a képernyõn: lelõnek tûnik-e. Vizsgáljuk meg, hogy a függvényhívá- sok és a kapott paraméterek a vártnak megfelelõek-e. Hello, I’m running. LOG: *** Exception Detected *** A hibák megelõzése LOG: Current PID: 28441 Ugyan hasznosak a fent ismertetett módszerek, de önma- LOG: Program name: /tmp/logerror.py gukban még nem elegendõek. Fontos az is, hogy olyan fej- LOG: Command line: [] lesztési gyakorlatot folytassunk, amely segít csökkenteni LOG: Traceback (most recent call last): a hibák elõfordulási valószínûségét. Néhány megfontolásra LOG: File “/tmp/logerror.py”, line 30, in ? érdemes módszer ezek közül: LOG: main() • Alkalmazzunk az egységek tesztelését (unit testing). LOG: File “/tmp/logerror.py”, line 27, in main A Java, Python, OCaml, Perl és C nyelvek mindegyike LOG: raise RuntimeError(“Oops! I’ve had rendelkezik egységtesztelõ keretrendszerrel. Használjuk a problem!”) ki ezeket és a lehetõ legtöbb futási esetet vizsgáljunk LOG: RuntimeError: Oops! I’ve had a problem! meg velük. Ez különösen az olyan nyelveknél fontos, LOG: mint a Python, amelynél egy bizonyos futáskor még a kódértelmezés sem terjed ki a teljes kódra. Fontos ez A kivételkezelõ megtalálta a kivételt, begyûjtötte a kapcsoló- a Java esetében is, ahol a futásidejû kivételek nem meg- dó információkat és sikeresen rögzítette a naplóban. Másod- felelõ objektumváltást eredményezhetnek. szor is láthatjuk a visszakövetõ (traceback) információkat. • Kerüljük a globális változókat. A globális (vagy osztály- A program végén lévõ raise utasítás újra elõidézi a kivételt szinten globális) változók segítenek a problémák körül- és lehetõvé teszi annak normál módon történõ lekezelését. határolásában és megóvnak a többszálú programok Ez azt jelenti, hogy egy visszakövetéssel félbeszakítja a prog- szinkronizációs gondjaitól. A globális változók nem várt ramunkat. Az elvárásainktól függõen egy sys.exit() mûve- és nehezen visszakövethetõ mellékhatásokat okozhat- letet is használhatunk ehelyett. nak a függvényhívásokban. • Használjuk a legmegfelelõbb eszközt az adott munká- A bejelentett hibák megkeresése hoz. A programozási nyelvek mindegyikének megvan Most, hogy már rendelkezünk néhány módszerrel arra, a maga erõssége és gyengéje, nincs olyan nyelv, ami hogy a felhasználókat segítsük a minél jobb hibajelentések minden feladatra a legmegfelelõbb. Például Perlben elküldésében, vizsgáljuk meg ezeknek a jelentéseknek a fel- programozva könnyû a körülhatárolt szövegfájlok sza- használási módjait. Egy hibanaplóval és talán a visszaköve- bályos kifejezésekkel történõ elemzése, az OCaml pedig tési információkkal felfegyverkezve a következõ kérdéseket olyan eszközökkel rendelkezik, amelyeket kifejezetten tehetjük fel magunknak: fordítóprogramok (compiler) írására használhatunk. • Elõ tudom-e idézni a hibát a saját futtatókörnyezetem- Az egyik nyelvben könnyen kifejezhetõ probléma ben? Ha ez a saját gépünkön is sikerül, közel kerültünk sokkal bonyolultabb lehet egy másikban. ahhoz, hogy ki is javítsuk. Használjunk egy hibakeresõt • Ne használjunk túl sok különbözõ eszközt sem. A leg- vagy valamilyen más eszközt az ok megkereséséhez. több projektnek elõnyére válik a használt eszközkészlet

www.linuxvilag.hu 2005. május 31 Szaktekintély

behatárolása. Válasszuk ki a legmegfelelõbb nyelvet és Késõbb egy második felhasználó is tapasztalta ugyanezt a hi- programkönyvtárat és csak akkor nyúljunk új eszköz- bát, észrevette a korábbi debianos hibajelentést és elküldte höz, ha erre alapos okunk van. a saját információit vele kapcsolatban. Az OfflineIMAP vég- • Használjunk karakter- és memóriakezelõ programokat. zetes hiba esetén megpróbálja kiíratni a hibakeresõ napló ré- Sok nyelv, többek közt a Java, Python, OCaml, Perl és szeit, ennek a felhasználónak pedig sikerült elcsípnie ezeket Ruby háttérben futó memóriakezelést biztosít, így nincs a kimeneteket. Az OfflineIMAP e tulajdonsága hasznosnak szükség a memória lefoglalására és felszabadítására. bizonyult tehát, mivel gyakran lehetetlen egy problémához Nem kell az explicit karakterlánc-végzõdésekkel és a ka- vezetõ helyzet utólagos reprodukálása. rakterláncokra vonatkozó hosszkorlátokkal foglalkoz- Ebben az esetben segített a kapott információ, most már nunk, melyek mindegyik gyakori probléma a C nyelv képes voltam felidézni, mit csinált az OfflineIMAP közvet- használatakor és futásidejû hibákhoz, vagy biztonsági lenül a hiba felbukkanása elõtt. Ahhoz azonban kevés volt, résekhez vezethet. Ha mindenképpen C-t kell használ- hogy a probléma okára is rájöjjek, minden normálisnak nunk, fontoljuk meg egy hulladékgyûjtõ- vagy memó- tûnt. A hiba csak idõnként bukkant fel, és további informá- riatartalék-programkönyvtár használatát. ciók nem álltak rendelkezésre. • Elõször tegyük a programot mûködõvé és utána keres- Végül egy harmadik felhasználó is tapasztalta ugyanezt a hi- sük meg a lehetõ legjobb megoldást. Sok esetben jobb bát. Neki is voltak információi, de ahhoz kevés, hogy választ kifejleszteni egy mûködõ kódot és késõbb optimalizálni. kapjak a kérdésemre. Valaminek még történnie kellett, ezért © Kiskapu Kft. Minden jog fenntartva Sokan elõször optimalizálnak, ami mûködik is olykor, a kérdéses kódrészhez még részletesebb naplózást készítet- mégis rendszerint fontosabb egy egyszerû, hibátlan kód, tem. Remélhetõleg a következõ alkalommal a részletesebb in- mint egy olyan, ami a lehetõ leggyorsabb. formációk alapján majd visszakövethetem a probléma okát. • Kódoljunk tisztán, készítsünk függvényeket az egyes A folyamat során számos tényezõ játszott fontos szerepet. kódrészletekhez. Használjunk megjegyzéseket. Készít- Az elsõ, hogy az OfflineIMAP végzetes hiba esetén mindig sünk leírást arról, hogy melyik függvénynek mi a szere- létrehoz egy használható verem-képet. Még e legkevésbé pe és milyen hatással van a környezetre. részletes jelentés is pontosan megmutatta, hogy milyen ál- lapotban volt a program az összeomláskor. Másodszor, a hi- Esettanulmány: egy hiba az OfflineIMAP-ben banaplók ugyan hasznosak, de kevéssé vehetjük hasznukat Az OfflineIMAP egy olyan program, amely kapcsolatot tart akkor, amikor egy bizonyos hibát nem tudunk könnyen az IMAP-kiszolgálókkal és összehangolja az IMAP mappa- elõidézni. A hibakeresõ információk kiíratása a program szerkezetet a helyi faszerkezettel. Sokféle IMAP-kiszolgáló lé- összeomlásakor vagy hibás mûködésekor hasznos lehet tezik, amelyek nem teljesen azonos módon mûködnek. Két- a probléma leküzdésében. éves pályafutása során az OfflineIMAP egyre nagyobb arány- A hibakövetõ rendszer is fontos szerepet játszhat a problé- ban alkalmazta a cikkben bemutatott hibakeresõ eljárásokat. ma felderítésében. Mivel a Debian hibajelentései nyilváno- Azok a problémák, amelyekkel a felhasználók szembesülnek, sak, a három említett hibabejelentõ felismerhette a fennálló gyakran elõidézhetetlennek bizonyulnak az én egyedi rend- hibajelentéseket és hozzátehette a saját információját. Ez szeremen, ezért elengedhetetlen, hogy a program részletes mindenkinek segített az adott témával kapcsolatos informá- naplózást folytasson. Néha maguk az IMAP-kiszolgálók sem ciók kezelésében és kiindulópontot biztosított azoknak hibátlanok, ezért a hibajelentések jelentõs részénél az elsõ a felhasználónak, akik elõször botlottak a problémába. megválaszolandó kérdés az, hogy egyáltalán az OfflineIMAP rendszerben lévõ hibáról van-e szó. Az esetek meglepõen Összegzés nagy százalékában nemleges a válasz. Az OfflineIMAP szá- Számos módja van annak, hogy segítsük a felhasználóinkat mos olyan IMAP-szolgáltatást használ, amelyet az IMAP- a hibák bejelentésében és visszakövetésében, de ezek ön- ügyfelek többsége nem, és ezek a tulajdonságok néhány magukban még nem elegendõek. Ne feledkezzünk meg ar- kiszolgálón elég gyengén tesztelt állapotban vannak. ról, hogy minél könnyebb legyen a hiba bejelentése és kö- Szeretnék bemutatni az OfflineIMAP egy különösen ma- vetése, és hogy törekedjünk a kód tisztaságára. Végül azt se kacs hibáját, amivel egyszer dolgom akadt. Körülbelül egy feledjük, hogy önmagában egyik lépés sem varázstöltény. évvel ezelõtt egy felhasználó egy hibát jelzett a program- Együtt alkalmazva egyszerûsíthetik a hibakeresõ folyamatot ban, amelyet a Debian hibakeresõ rendszerével fedezett fel. és segíthetnek a problémák felderítésében, de nem feltétle- Sajnos nem tudtam újra elõidézni a hibát és az eredeti beje- nül oldanak meg minden kérdést. lentõnek éppen nem volt a naplózás bekapcsolva, amikor a hiba jelentkezett. Hibakeresõ információkat szintén nem Linux Journal 2005. január, 129. szám tudott biztosítani. A kapott információk birtokában, ame- lyek közt egy hibaüzenet is volt, a cikkben korábban vázolt A cikkhez kapcsolódó források a  www.linuxjournal.com/ lépéseket követve sikerült némi információt összegyûjte- aricle/7747 címen érhetõek el. nem. A be- és kimenet nem állt rendelkezésemre, de a program folyamata és a verem tartalma jónak tûnt. Végül John Goerzen hosszú ideje Linux-programozó, már tudtam, hogy a program melyik részén következett be a Foundations of Python Network Programming az esemény, de azt nem, hogy miért, így a kódban egy ideig (A Python hálózati programozásának alapjai) bennmaradt a hiba. A helyzetet bonyolította, hogy a jelen- szerzõje. A szoftverágazat igazgatójaként dolgo- ség nem jött elõ állandóan, a program néha jól mûködött, zik a Public Interest, Inc. cégnél. A hozzászólá- idõnként azonban bedobta a törölközõt. sokat a [email protected] címre várja.

32 Linuxvilág Szaktekintély

WLAN-ok védelme WPA és FreeRADIUS alkalmazásával (1. rész)

Vezeték nélküli hálózatunkat a kiöregedett, biztonságot nem nyújtó WEP helyett véd- jük az új szabvány szerint, s egyben építsük össze a hitelesítést linuxos hálózatunkkal. © Kiskapu Kft. Minden jog fenntartva

ggódunk 802.11b vezeték nélküli helyi hálózatunk A (wireless local area network, WLAN) biztonsága mi- att, mert még a jó öreg WEP-et (wired equivalent privacy, vezetékes egyenértékû adatvédelem) használjuk? Aki kizárólag a WEP-re bízza magát, bizony jól teszi, ha fél: komoly és jól ismert sebezhetõségek vannak benne, amelyek révén a kalózok néhány órányi hallgatózás után, nyers erõbõl végzett töréssel könnyedén visszafejthetik WEP-kulcsainkat. De van remény! A WPA (Wi-Fi protected access, Wi-Fi védett elérés) új hitelesítési eljárásokkal és továbbfejlesztett kulcs- elõállítási képességgel ruházza fel a 802.11b hálózatokat, és a WPA támogatására képes WLAN-készülékek szinte pillana- tok alatt megjelentek az üzletekben. További örömre ad okot, hogy a WPA-kérvényezõk (ügyfélrendszerek), a hitelesítõk (hoz- 1. ábra A WPA felépítése záférési pontok) és a kiszolgálók (RADIUS hitelesítõ kiszolgá- lók) számára linuxos eszközök is rendelkezésre állnak. 802.1x hitelesítõ protokoll. A második a TKIP protokoll, Következõ két cikkemben a WPA-t és alkotó protokolljait, melynek segítségével egyedi WEP-kulcsokat tudunk hozzá- illetve ezek együttmûködését fogom ismertetni, valamint rendelni az egyes WLAN-ügyfelekhez, majd dinamikusan szólok arról is, hogy a FreeRADIUS csomag segítségével tudjuk elvégezni ezek újraegyeztetését, így a WEP-nél lá- hogyan helyezhetünk üzembe egy Linux-alapú WLAN tott kulcsszármaztatási sebezhetõség megszûnik. hitelesítõ kiszolgálót. Az 1. ábrán a WPA alapú rendszerek összetevõi közötti kapcsolatokat szemléltettem. Elõször is, van egy WLAN- Áttekintés képes ügyfélrendszerünk, ennek WPA ügyfélprogramját Mi is alapvetõen a baj a 802.11b hálózatok biztonságával? kérvényezõnek nevezzük. Az ügyfél/kérvényezõ csatlako- Röviden, a 802.11b szabvány WEP protokolljában van két zik egy vezeték nélküli hozzáférési ponthoz (access point, súlyos hiba. Az elsõ, a titkosítási-megvalósítási hiba lehetet- AP), amely hitelesítõ szerepet játszik, miközben gyakor- lenné teszi, hogy a gyakorlatban 40 bitnél erõsebb kulcsot latilag proxyzza a hitelesítési párbeszédet a kérvényezõ használjunk, még ha rendszerünk elvileg képes is lenne és a háttérben üzemelõ hitelesítõ kiszolgáló között. Az a hosszabb kulcsok kezelésére. A második a WEP titkosítási 1. ábrán ez a hitelesítõ kiszolgáló egy RADIUS kiszolgáló, kulcs származtatási eljárásában keresendõ, miatta a támadó de TACACS-t is használhatunk. megfelelõ számú csomag elfogása után meg tudja határozni A kérvényezõ és a kiszolgáló közötti hitelesítésproxyzás mel- a hálózat titkos WEP-kulcsát – azt a titkosítási kulcsot, ame- lett az AP/hitelesítõ a TKIP (Temporal Key Integrity Protocol, lyet a hálózat minden egyes állomása használ. ideiglenes kulcsintegritás protokoll) alkalmazásával adatokat A jelenleg fejlesztés alatt álló 802.11i protokoll teljes értékû, közöl a hitelesítõ kiszolgálóról, ezzel segítve a WEP munka- erõteljes biztonsági keretrendszert fog biztosítani a WLAN- menetkulcs beszerzését. Ezután átadja a kulcsot a kérvénye- okhoz. Természetesen véglegesítése után is kell némi idõ zõnek. A kérvényezõnek rendszeres idõközönként újra kell ahhoz, hogy a protokoll széles körben elérhetõvé váljon hitelesítenie magát, ilyenkor új WEP kulcsot kap. a kereskedelmi termékekben és a szabad programokban. A hitelesítõ (RADIUS) kiszolgáló elhagyható. Egy másik le- Térjünk rá a WPA-ra. A WPA a 802.11i két kulcsfontosságú hetõség az elõre megosztott kulcs (pre-shared key, PSK) mód összetevõjét emeli át a 802.11b-be. Az elsõ a rugalmas és használata, ennél az egyes WPA kérvényezõ rendszerek nagyteljesítményû hitelesítési szolgáltatásokat biztosító egyedi kulcsát kézzel adjuk meg az AP-nek, majd RADIUS

www.linuxvilag.hu 2005. május 33 Szaktekintély

helyett ezt használjuk fel a hitelesítésre. lót is hitelesítse a felhasználó számára, Ez az eljárás is jobb, mint a WEP, mert például tanúsítvánnyal, ahogy azt az SSL magát a megosztott kulcsot nem hasz- esetében is láthatjuk. Az EAP-MD5 tehát náljuk titkosító kulcsként. Feladata WPA környezetben meglehetõsen gyen- csupán a dinamikus WEP kulcsokat ge választás 802.1x hitelesítésre. szállító TKIP tranzakciók védelmének Az EAP-TLS alapvetõ hitelesítésre a TLS megalapozása. titkosító protokollt, az SSL leszármazott- A WPA-t jelenleg az újabb WLAN csato- ját használja. Ez egy erõteljesnek mond- lók és hozzáférési pontok széles köre ható hitelesítési mód, hiszen használata- támogatja, sõt, a belsõ programok frissí- kor a kiszolgáló és az ügyfél egyaránt sa- tésével néhány régebbi, 802.11b-s ter- ját digitális tanúsítványával – ezek adják méken is elérhetõvé vált. A linuxos vi- 2. ábra a hitelesítési transzakciók alapját – iga- lágban támogatását az ügyfél oldalon A WPA protokolljai0 zolja magát. Nagyobb számú felhaszná- a wpa_supplicant (hostap.epitest.fi/ lónak digitális tanúsítványt adni, illetve wpa_supplicant), a linuxos hozzáférési pontokon a hostapd ezeket a tanúsítványokat kezelni ugyanakkor összetett és (hostap.epitest.fi/hostapd), míg a hitelesítõ kiszolgálók olda- idõrabló teendõ lehet. Elég, ha arra gondolunk, hogy a szer- lán a FreeRADIUS (www.freeradius.org) biztosítja. vezetünket elhagyó személyek tanúsítványát vissza kell © Kiskapu Kft. Minden jog fenntartva Mielõtt rátérnénk szûkebb témánkra, s egyben következõ vonni. Az EAP-TLS használatához általában teljes értékû cikkem tárgyára, a WPA-képes FreeRADIUS kiszolgálók épí- nyilvános kulcs infrastruktúrát (Public Key Infrastructure, tésére, vizsgáljuk meg részletesebben is a WPA hitelesítési PKI) kell fenntartani, ami viszont egy kisebb vagy akár kö- és titkosítási megoldásait. zepes méretû szervezet számára megterhelõ lehet. Ne feled- jük el azt sem, hogy a hitelesítések kezdeményezésekor WPA hitelesítés: 802.1x, EAP és RADIUS a felhasználónevek nyílt szövegként továbbítódnak, ami Mindenki tud követni? Csak azért, mert a WPA valójában apró kis hiányosság ugyan, de nem árt megjegyezni. egy kicsit bonyolultabb annál, amit az 1. ábra tartalma sugall. A PEAP (Protected, védett EAP) eredetileg a Microsoft fej- Tehát: a WPA használatakor az ügyfélrendszernek (a kérvé- lesztése, célja a gyengébb, de egyszerûbb hitelesítési eljárá- nyezõnek) még az elõtt kell hitelesítenie magát, hogy enge- sok, például az MD5 és az MS-CHAP TLS titkosítással való délyt kapna a csatlakozásra, amikor is hozzájut egy rendsze- védelme. A PEAP használatakor az azonosító adatok továb- resen lecserélésre kerülõ titkosítási munkamenetkulcshoz. bítása elõtt egy titkosított csatorna jön létre a kérvényezõ és A dolog attól kezd bonyolódni, hogy a WPA hitelesítésre a kiszolgáló között. Általában a webes alkalmazások is ha- használt 802.1x protokoll számos különbözõ módszer hasz- sonló módon használják a TLS-t: segítségével felépítenek nálatát teszi lehetõvé a kérvényezõk hitelesítésére – ami egy titkosított alagutat, ezen keresztül biztonságosan le lehet persze jó dolog. Moduláris, bõvíthetõ hitelesítõ megoldást bonyolítani az egyszerû, felhasználónév és jelszó alapján alkalmazva nem kell attól tartanunk, hogy a WPA, a 802.1x végzett hitelesítéseket, és nincs szükség a TLS biztonságo- vagy a 802.11i egy csapásra elavulttá válik, ahogy a külön- sabb, ám jóval bonyolultabb, ügyféltanúsítványra épülõ eljá- féle hitelesítõ protokollok divatba jönnek és elfelejtõdnek. rásainak alkalmazására. A PEAP fõ hátránya Microsoft-köz- A 802.1x modularitása és bõvíthetõsége a számos változat- pontúsága. Bár a szabad programok között is találni a PEAP ban létezõ Extensible Authentication Protocol (bõvíthetõ támogatására képest, a legtöbben nem látják a Microsoft hitelesítõ protokoll, EAP) hozománya. Ejtsünk néhány szót szándékát arra, hogy biztosítsa az együttmûködés lehetõsé- a legnépszerûbb változatokról. gét más gyártók WPA termékeivel vagy megoldásaival. Az EAP-TTLS lényegében egy nem microsoftos PEAP- Az a számtalan protokoll! alternatíva. Esetében is létrejön egy titkosított TLS alagút, Nem véletlen, hogy egy egész cikket szentelek a WPA mû- ezen keresztül TLS alapú vagy egyéb, gyengébb hitelesítési ködésének boncolgatására, és nem vetem bele magam eljárást lehet folytatni. Fõ elõnye a PEAP-pal szemben, a FreeRADIUS WPA használatára való beállításának témájá- hogy nincs kitéve egy nagyvállalat szeszélyeinek. Jelenleg ba – annyi a WPA felépítésében részt vevõ protokollal és hitelesítési módszerbõl is többet támogat – igaz, a PEAP-ot alprotokollal találkozhatunk ugyanis, hogy megfelelõ alap- is úgy tervezték, hogy a jelenleg megvalósítottaknál jóval ismeretek hiányában pillanatok alatt összezavarodunk. Aki több módszer támogatására legyen képes. Néhányan úgy már most elveszítette a fonalat az talán a WPA protokolljait látják, a Microsoft támogatása nélkül az EAP-TTLS nem lesz hierarchikus formában szemléltetõ 2. ábra alapján rendet olyan sikeres, mint a PEAP. tud teremteni gondolatai között. További EAP-variánsok az EAP-SIM, a Microsoft EAP- Az EAP-MD5 egyszerû, MD5 kivonat alapú azonosítóadat- MSCHAPv2-je és a Cisco Lightweight EAP-ja (LEAP). cserét végez. A kérvényezõ közöl egy felhasználónevet és Álljunk csak meg, bizonyára ezt kérik néhányan; hát egy MD5 kivonatolt jelszót a kiszolgálóval, amely összeha- a RADIUS nem hitelesítõ protokoll? Hogyan illeszkedik sonlítja ezeket az adatbázisában tárolt adatokkal. Sajnos hall- a képbe? A RADIUS az a protokoll, amely felett a hitelesítõ, gatózással meg lehet szerezni a WPA kérvényezõ által elkül- vagyis az AP a hitelesítõ kiszolgálóval tartja a kapcsolatot. dött kivonatot, és offline, szótár alapú támadással meg lehet A 802.1x és a WPA témakörében a RADIUS-ra mint szállító- határozni az elõállításához használt jelszót. Gondot jelent az eszközre gondolhatunk, amely felett a hitelesítõ továbbítja is, hogy bár az EAP-MD5 hitelesíti a kérvényezõt a kiszolgáló az EAP-üzeneteket a kiszolgálónak. Tehát a végfelhasználó, felé, ám semmit nem tesz annak érdekében, hogy a kiszolgá- mint kérvényezõ EAP nyelven beszél a hitelesítõvel, a hite-

34 Linuxvilág Szaktekintély

lesítõ pedig RADIUS-csomagokba ágyazva továbbítja a kér- átlátszó, a feladat elvégzéséhez sem a kiszolgálón, sem vényt a kiszolgáló felé. Van egy további protokoll is, mely a kérvényezõn nem kell megadnunk semmilyen beállítást. hasonló szerepet játszik, vagyis a kérvényezõ és a hitelesítõ A legtöbb hozzáférési ponton ugyanakkor, ide értve között közvetít, és ez az EAPOL, azaz az EAP Over LAN. a linuxos hostapd-t is, meg lehet adni egyedi beállításokat, Ez egy tökéletesen átlátszó protokoll, ugyanis a kérvényezõ például a WEP kulcsfrissítési idõközt. és a hitelesítõ oldali programba van beépítve, és mint ilyen- A TKIP kapcsán érdemes még megjegyezni, hogy, mint nek, beállításokat sem kell megadnunk neki. Mondhatnám említettem is, esetében a kiszolgáló elhagyható. Ha a kér- úgy is, amíg nem WPA alapú programot akarunk írni, ad- vényezõket és a hitelesítõt elõre megosztott kulcsos üzem- dig semmi érdemlegeset nem kell tudnunk az EAPOL-ról. módra állítottuk be, a TKIP-t akkor is használhatjuk a WEP- Attól kezdve, hogy egy kérvényezõ csatlakozást kezdemé- titkosítás kulcsozására és a kulcsok frissítésére a kérvényezõ nyez az AP felé, az AP kizárólag EAP alapú forgalmat enge- és a hozzáférési pont között. délyez. Csak a hitelesítés – a kiszolgáló válaszán alapuló – teljes befejezése után kap a kérvényezõ DHCP bérletet, il- Összefoglalás – egyelõre letve engedélyt a WLAN-hoz való teljes értékû csatlakozás- Dióhéjban ennyit a WPA-ról. A következõ alkalommal ra. A sikeres hitelesítés másik folyománya egy WEP-kulcs a most megismert fogalmakat a FreeRADIUS használata kiosztása a kérvényezõnek. kapcsán fogjuk alkalmazni, és összeállítunk egy Linux ala- pú, WPA-s hitelesítõ kiszolgálót. Aki nem tud addig várni, A TKIP és a WEP kulcsozás tanulmányozza az internetes forrásokat. Elsõ a biztonság! © Kiskapu Kft. Minden jog fenntartva Ha egy kérvényezõt EAP-TLS vagy más titkosított EAP- változat segítségével hitelesítünk, akkor a hitelesítési forga- Linux Journal 2005. április, 132. szám lom titkosított. Maguk a vezeték nélküli hálózat keretei vi- szont nem, hiszen ennek elõfeltétele a WEP engedélyezése A cikk forrásai:  www.linuxjournal.com/article/8017 a kérvényezõ rendszer és a hozzáférési pont közötti kap- csolaton. A megvalósítást végzõ szempontjából érdekes Mick Bauer ([email protected]) módon ez a WPA használatának legegyszerûbb mozzanata. Biztonsági szakember, a Linux Journal A sikeres hitelesítés után a kiszolgáló, a hitelesítõ és a kér- biztonsági témákkal foglalkozó szerkesztõje, vényezõ a TKIP-t alkalmazzák a hitelesítõ és a kérvényezõ biztonsági tanácsadó a Minnesota állambeli rendszer közötti kapcsolaton érvényes WEP-kulcsok egyez- Minneapolisban található Upstream Solutions tetésére és biztonságos továbbítására. A folyamat nagyrészt LLC Inc.-nél.

www.linuxvilag.hu 2005. május 35 Szaktekintély

Címtárszolgáltatások (3. rész) Az AFS – Biztonságos, elosztott fájlrendszer Egyszeri bejelentkezésre épülõ rendszerünket többféle géptípusról is elérhetõ, elosztott fájlrendszerrel tehetjük teljessé. © Kiskapu Kft. Minden jog fenntartva

z Andrew File System (AFS) egy elosztott, biztonsá- gos, átfogó, az adatok számára helyfüggetlenséget, méretezhetõséget és áttelepítési lehetõséget bizto- sítóA fájlrendszer. Az AFS sokféle operációs rendszer alól elér- hetõ, és számos nagyobb helyen használják hosszú évek óta. Az AFS – közel 20 éves életkora ellenére – egyedi, más el- osztott fájlrendszerek által nem biztosított szolgáltatásokat nyújt. Lehet, hogy öregsége miatt egyeseknek nem annyira vonzó, ám miután az IBM 2000-ben nyílt forrásúvá tette, 1. ábra Az AFS fájltér mindenhonnan azonosnak látszik, használata és fejlesztése új lendületet kapott. Írásomban az használatakor az ügyfélnek nem kell tudnia, hogy melyik könyvtár AFS szolgáltatásait szeretném ismertetni, és szeretnék ked- melyik kiszolgálón található vet csinálni a kipróbálásához. zük. A sejtek Kerberos tartományokhoz tartoznak. Egy jel- Az AFS szolgáltatásai és elõnyei legzetes AFS elérési út így néz ki: /afs/cern.ch/felhasznalo/ Az AFS ügyfélprogram Linux, illetve a HP-, a Compaq-, az a/alf/tervezetek/. Az elérési útban szerepel ugyan az AFS sejt IBM-, a Sun- és az SGI-féle UNIX-változatokhoz, továbbá neve, ám a fájlkiszolgálóé nem. Microsoft Windows és az Apple Mac OS X-e alá érhetõ el. A helyfüggetlenségnek köszönhetõen az AFS rendszergaz- Az AFS tehát tökéletes megoldás, ha helyi vagy nagy távol- dák úgy mozgathatnak át fájlokat az egyik AFS kiszolgálóról ságú hálózaton keresztül többféle operációs rendszer vagy a másikra, hogy a felhasználók ebbõl semmit nem észlelnek. géptípus között szeretnénk adatokat megosztani. Ugyancsak ez alapozza meg az AFS kiváló méretezhetõségét. Minden AFS ügyfélgép rendelkezik helyi gyorsítótárral. Ha AFS fájlkiszolgálóinkon elfogy a hely, akkor elég egy újat A gyorsítótár-kezelõ feladata a gépet igénybe vevõ felhaszná- üzembe állítanunk, majd áttelepítenünk rá az adatok egy ré- lók követése, valamint a tõlük érkezõ adatkérések kezelése. szét. Az ügyfelek mindebbõl semmit nem vesznek észre. Az Az adatok gyorsítótárazása fájldarabonként történik, a rend- AFS a fájlkiszolgálónkénti felhasználók száma tekintetében szer ezeket az AFS fájlkiszolgálóról a helyi lemezre másolja. is kiválóan méretezõdik. Egy korszerû gépen egy AFS fájlki- A gyorsítótárat a gép minden felhasználója igénybe veheti, szolgáló akár ezer ügyfelet is gond nélkül képes kiszolgálni. tartalma az újraindítások során is érintetlen marad. A helyi A felhasználók szemszögébõl az AFS fájltér pontosan úgy gyorsítótárazásnak köszönhetõen csökken a hálózati forga- néz ki, mint az összes többi fájlrendszer. Kerberos hitelesítõ lom, és a gyorsítótárazott adatok ismételt elérése is felgyorsul. adataikkal AFS alatt tárolt fájljaikat a világ bármely pontjá- Az AFS egy átfogóan egyedi névtér szerint szervezõdik. ról elérhetik, köszönhetõen az átfogóan egyedi névtérnek. Az AFS fájltér átfogó nézetére láthatunk példát az 1. ábrán. Nézzünk egy példát: ha a svájci CERN-ben lévõ kezdõ- A fájlokhoz vezetõ elérési utak neve minden esetben azo- könyvtáramból a kaliforniai SLAC-ben lévõ kezdõkönyv- nos, függetlenül attól, hogy az adatokat honnan érjük el. táramba szeretnék másolni valamit, akkor két különbözõ Az elérési utak nem tartalmaznak kiszolgálóra utaló részt. AFS-sejt felé kell hitelesítenem magam: Mondhatnám úgy is, hogy az AFS használója nem tudja, % kinit --afslog [email protected] hogy a kívánt adat melyik fájlkiszolgálón található. Ez úgy [email protected]’s Password: érhetõ el, hogy az AFS az adatok helyét tároló adatbázist % kinit -c /tmp/krb5cc_5828_1 --afslog [email protected] replikálja minden ügyfélre. A megoldás merõben eltér [email protected]’s Password: a Network File Systemtõl (NFS), amelynél az ügyfélnek is- mernie kell az NFS adott részének helyt adó fájlkiszolgálót. Az AFS tokens parancsával meg tudjuk jeleníteni A különféle, független AFS tartományokat sejteknek nevez- a hitelesítõ adatokat:

36 Linuxvilág Szaktekintély

% tokens Tokens held by the Cache Manager: kétségtelenül elõnyös. Az AFS alatt tárolt adatok helyfüg- User’s (AFS ID 388) tokens for [email protected] [Expires getlensége szintén megkönnyíti a felügyelhetõséget; példá- Apr 2 10:30] ul egy AFS fájlkiszolgálót a köteteket más kiszolgálókra User’s (AFS ID 10214) tokens for mozgatva akár teljesen – ráadásul a felhasználók számára [email protected] [Expires Apr 2 09:49] észrevétlenül – ki tudunk üríteni. Az üres kiszolgálón ez- --End of list-- után elvégezhetjük a szükséges karbantartásokat, legyen szó akár az operációs rendszer frissítésérõl, akár a hardver A hitelesítés után mindkét kezdõkönyvtáramat el tudom érni: javításáról. Amikor végeztünk, csak – ismét átlátszó mó- % cp /afs/cern.ch/felhasznalo/a/alf/ don – vissza kell mozgatnunk rá a köteteket. tervezetek/X/src/hello.c \ Az AFS belül Kerberost alkalmaz a felhasználók hitelesítésére. /afs/ir.stanford.edu/felhasznalok/a/l/alfw/ Ez eredetileg a Kerberos 4-es változata, ám a Kerberos 5 bár- tervezetek/Y/src/. melyik jelentõsebb megvalósítása mellett is dönthetünk, ha fokozni szeretnénk a biztonságot. Az AFS hozzáférés-vezérlési Az AFS fájlkiszolgálók az adatokat különleges, /vicepXX ne- listák (access control list, ACL) alapján korlátozza a könyvtá- vû lemezrészeken tárolják, ahol az XX az „a-zz” tartomány- rak elérését. Az ACL-ekben csak Kerberos fõfiókok és ezek ba esik, vagyis egy-egy kiszolgálón összesen 256 lemezrész csoportjai szerepelhetnek, ellentétben az NFS-sel, amelynél lehet. A lemezrészek mindegyikén adatkonténerek találha- kizárólag unixos felhasználóazonosítókkal történik a hitele- tók, ezeket köteteknek nevezzük. A kötetek a legkisebb sítés. Emellett egy további jogosultságkezelõ szolgáltatás, © Kiskapu Kft. Minden jog fenntartva mozgatásra, replikálásra vagy biztonsági mentés készítésére a védelmi szolgáltatás (protection service, PTS) is figyelemmel használható egységek. A köteteken belül könyvtárak és fáj- követi az egyes Kerberos fõfiókokat és fõfiókcsoportokat. lok vannak. A kötetek csak azt követõen válnak láthatókká, hogy befûzzük õket az AFS fájltérbe. Ezek a befûzési pon- Az AFS összetevõi tok pontosan olyanok, mint a könyvtárak. Mindezen szolgáltatások biztosításához az AFS-nek számos Az AFS az ügyféloldali gyorsítótárazásnak köszönhetõen különbözõ összetevõre van szüksége. Az AFS ügyfélprog- különösen jól használható csak olvasható adatok, például ramnak minden az AFS fájltér elérésére használni kívánt a /usr/local/ fa tárolására. Az ilyen megoldások mûködésének számítógépen futnia kell. Az AFS kiszolgáló program négy javítását, üzembiztosságának fokozását az AFS azzal segíti, alaprészbõl áll. Hitelesítésre Kerberost használ, a jogosult- hogy lehetõvé teszi a csak olvasható adatok másolatainak ságkezelést a PTS végzi, a kötethely kiszolgáló a helyfüg- különbözõ AFS fájlkiszolgálókon való elhelyezését. Ha a pél- getlenséget teszi lehetõvé, az adatszolgáltatásért pedig egy dányokat tároló kiszolgálók valamelyike leáll, az ügyfél észre- fájl- és egy kötetkiszolgáló felelõs. Az egyes folyamatokat az vétlenül átvált az adatok egy másik példányát tároló kiszolgá- AFS kiszolgálókon az alapszintû felügyelõ (basic overseer, lóra. Ugyanezzel a replikációs megoldással történik a földraj- BOS) kiszolgáló kezeli. Mindezen feltétlenül szükséges zilag távol lévõ kiszolgálók közötti adatmásolás is. Az ügyfele- összetevõk mellett további démonok is léteznek az AFS ki- ket be lehet úgy állítani, hogy lehetõleg a közeli másolatot szolgálók karbantartására és tartalmuk biztonsági mentésé- használják, a távoli példányhoz csak meghibásodás esetén re. Az AFS kiszolgálók telepítése sajnos túlmutat témánkon. forduljanak. Az .org AFS sejt például két kiszolgálóról A különféle kiszolgáló összetevõk miatt az AFS megismeré- fut, az egyik a Pennsylvania állambéli Pittsburgh-i Carnegie sének elsõ lépései egyenesen riasztók. Mégis érdemes meg- Mellon Egyetemen, a másik svédországi, stockholmi Royal küzdeni vele, mára sok helyen létezni sem tudnának nélkü- Institute of Technology (KTH) intézetben található. le. Ha egy sejtet telepítettünk, akkor az AFS napi szintû Az AFS pillanatképek készítésének lehetõségével segíti karbantartását körülbelül 2 órában el tudjuk végezni, még a biztonsági másolatok létrehozását. A pillanatképek létre- nagyméretû telepítéseknél is. hozása az általunk kiválasztott idõpontban történik, és min- Akit részletesebben is érdekel, hogy mások, például a Morgan dig kötetekrõl készülnek. A pillanatképeket ezután az Stanley és az Intel hogyan és mire használják az AFS-t, az egyéb felhasználói mûveletek zavarása nélkül menthetjük vessen egy pillantást a legutóbbi AFS Best Practices Work- le például szalagra, de külön befûzési pontokon, AFS kez- shopon szerepelt bemutatóra (lásd az internetes forrásokat). dõkönyvtárukon belül akár a felhasználók számára is elér- hetõkké tehetjük õket. Ezzel az egyszerû trükkel megelõz- Az AFS ügyfelek telepítése hetjük, hogy állandóan mentési és visszaállítási kérésekkel Az AFS kipróbálásához nincs szükség saját AFS kiszolgálóra. zaklassanak a felhasználók, hiszen az utolsó éjszaka készült Elég, ha telepítjük az OpenAFS ügyfélprogramot, majd egy pillanatképekben lévõ fájlok szabadon hozzáférhetõk. különleges, az idegen AFS sejtek nyilvánosan elérhetõ terei- Az AFS adatcsere protokollját nagy távolságú hálózatokhoz nek használatát engedélyezõ kapcsolóval indítjuk el az AFS tervezték. Saját távoli eljáráshívás (remote procedure call, RPC) ügyféldémont (afsd). Az AFS ügyfelek telepítésének legne- megvalósítást használ, ennek neve Rx, és UDP felett mûködik. hezebb mozzanata a szükséges rendszermagmodul beszer- A protokoll minden csomagkötetbõl csak az esetlegesen meg- zése. Ha Red Hat vagy Fedora rendszert használunk, töltsük hibásodott csomagokat küldi újra, és más protokollokhoz ké- le a megfelelõ RPM-eket (lásd a forrásokat). A rendszermag- pest több nyugtázatlan csomag kint létét engedi meg. modul mellett az AFS ügyfélnek egy felhasználói térbeli dé- Az AFS felügyelete bármelyik AFS ügyfélrõl elvégezhetõ, monra (afsd), valamint az AFS parancskészletre is szüksége tehát semmi szükség nincs arra, hogy bármelyik AFS kiszol- van. Ezek két további RPM-ben találhatók meg. gálóra bejelentkezzünk. A rendszergazda tehát „szorosra Ha megvannak a modulok, a következõ lépés az AFS-ügyfél zárhatja” az AFS kiszolgálókat, ami biztonsági szempontból igényeink szerinti beállítása. Elsõként azt kell megadnunk,

www.linuxvilag.hu 2005. május 37 Szaktekintély

hogy számítógépünk melyik sejt tagja legyen. Az AFS sejt % tokens neve a /usr/vice/etc/ThisCell fájlban van megadva. Ha saját Tokens held by the Cache Manager: AFS kiszolgálókkal nem rendelkezünk, akkor a név tetszõle- --End of list-- ges, egyébként viszont az általuk kiszolgált sejt nevét kell beállítanunk. A következõ beállítási érték az AFS helyi A listában – a korábbi példával ellentétben – nincsenek gyorsítótárával kapcsolatos. Az AFS-ügyfeleken az ügyfél- hitelesítõ adatok. programot külön lemezrészre kell telepíteni, a gyorsítótárat Elsõ lépésként kérdezzük le a /afs/ könyvtár tartalmát. viszont bárhova tehetjük. A gyorsítótár helyét és méretét Ekkor az AFS ügyfelünk által ismert AFS sejtek mindegyike a /usr/vice/etc/cacheinfo fájlban adhatjuk meg. A gyorsítótár megjelenik. Most lépjünk át a /afs/openafs.org/software/ alapértelmezett helye a /usr/vice/cache, mérete pedig 100 openafs könyvtárba, és listáztassuk ki ennek tartalmát is. MB, ami egy átlagos asztali vagy hordozható számítógép A következõket kell látnunk: esetében bõségesen elegendõ. Az openafs-client RPM telepí- %ls-l tése után ezekkel a beállításokkal kezdünk, ilyenkor total 10 a cacheinfo fájlban az alábbi beállítást láthatjuk: drwxrwxrwx 3 root root 2048 Jan 7 2003 delta /afs:/usr/vice/cache:100000 drwxr-xr-x 8 100 wheel 2048 Jun 23 2001 v1.0 drwxr-xr-x 4 100 wheel 2048 Jul 19 2001 v1.1 Következõként az afsd, vagyis az AFS ügyféldémon drwxrwxr-x 17 100 101 2048 Oct 24 12:36 v1.2 © Kiskapu Kft. Minden jog fenntartva a /etc/sysconfig/afs fájlban található beállításait kell test- drwxrwxr-x 4 100 101 2048 Nov 26 21:49 v1.3 reszabnunk. Az OPTIONS meghatározáshoz adjuk hozzá a -dynroot kapcsolót, így az AFS-ügyfél saját AFS kiszol- Lépjünk be valamelyik könyvtárba. Például: gáló nélkül is el tud indulni. % cd v1.2/1.2.10/binary/fedora-1.0 Egy további fontos beállítás a -fakestat. Hatására az afsd meghamisítja a /afs/ könyvtárban lévõ bejegyzések stat(3) Vessünk egy pillantást a könyvtárban lévõ ACL-ekre: adatait. Hiányában az AFS ügyfél világgá indulna, és minden % fs listacl . számára ismert AFS sejttel kapcsolatba lépne. Ez jelenleg 133 Access list for . is sejtet jelent, amint a /afs/ könyvtárban kiadott hosszú listá- Normal rights: zással (/bin/ls -l) magunk is meggyõzõdhetünk róla. openafs:gatekeepers rlidwka Mivel az AFS Kerberost használ a hitelesítésre, gépünkön system:administrators rlidwka vagy gépeinken az idõt is szinkronizálnunk kell. Az AFS system:anyuser rl ugyan saját szinkronizálási megoldással is rendelkezett, ám ez mára elavult, használatát nem javaslom. Kapcsoljuk is ki; A fentiekben két csoportot láthatunk, mindkettõhöz mind ehhez a /etc/sysconfig/afs fájl OPTIONS meghatározásához a hét jogosultság hozzá van rendelve: olvasás (r, read), ke- a -nosettime kapcsolót kell hozzáadnunk. Ha nincs kész resés (l, lookup), beillesztés (i, insert), írás (w, write), teljes, megoldásunk az idõ szinkronizálására, akkor ismerkedjünk önkéntes érvényû fájlzárolás (k) és ACL-módosítás (a). meg a hálózati idõ protokollal (Network Time Protocol, A system:anyuser egy különleges, az AFS-hez tartozó NTP; lásd a forrásokat). csoport, olvasási (r) és keresési (l) joggal rendelkezik, így Mindezen módosítások végrehajtása után a /etc/sysconfig/ lényegében mindenkinek hozzáférést biztosít. afs fájl OPTIONS meghatározásának így kell kinéznie: Egy csoport tagjait a pts, a védelmi szolgáltatás megfelelõ OPTIONS=”$MEDIUM -dynroot -fakestat -nosettime” parancsával adhatjuk meg: % pts member openafs:gatekeepers - openafs.org Az utolsó lépés az AFS fájlrendszer befûzési pontjának -noauth létrehozása, amit a Members of openafs:gatekeepers (id: -207) are: % sudo mkdir /afs shadow rees parancs kiadásával végezhetünk el. Ezután a zacheiss.admin % sudo /etc/init.d/afs start jaltman

paranccsal indíthatjuk el az AFS-ügyfelet. Az indítás eltart A -noauth kapcsolót azért használjuk, mert a parancsot néhány másodpercig, ugyanis az afsd-nek indulása elõtt fel erre a sejtre nézve hitelesítõ adatok nélkül futtatjuk. kell töltenie a helyi gyorsítótárat. Mivel a gyorsítótár az új- Az AFS hitelesítési részének – amely amúgy normál raindítások során is megõrzi tartalmát, a késõbbi indítások Kerberos – felderítéséhez különleges felügyeleti jogokra van már gyorsabbak lesznek. szükség, ezért ettõl most eltekintünk. Inkább nézzük meg, hogy a jelenlegi könyvtár fizikailag hol található: Az AFS-világ felfedezése % fs whereis . Ha nincs is saját AFS-kiszolgálónk, de AFS-ügyfelünk File . is on hosts andrew.e.kth.se beállításait a fentiek szerint módosítottuk, akkor az AFS VIRTUE.OPENAFS.ORG használatával kapcsolatos parancsok egy részét, illetve a világszintû AFS teret egyedül is megismerhetjük. A kimenet szerint a könyvtárból két példány létezik, az Egy gyors ellenõrzéssel láthatjuk, hogy egyetlen AFS egyik az andrew.e.kth.se, a másik a VIRTUE.OPENAFS.ORG sejtben sem vagyunk hitelesítve: címen érhetõ el.

38 Linuxvilág Szaktekintély

A Total number of volumes on server VIRTUE.OPENAFS.ORG % fs lsmount /afs/openafs.org/software/openafs partition /vicepa: 275 ?/v1.2/1.2.10/binary/fedora-1.0 openafs.10.src 536870975 RW 11407 K On-line /afs/openafs.org/software/openafs/v1.2/1.2.10/ openafs.10.src.backup 536870977 BK 11407 K On-line binary/fedora-1.0 openafs.10.src.readonly 536870976 RO 11407 K On-line ? is a mount point for volume #openafs.1210.f10 openafs.101.src 536870972 RW 11442 K On-line openafs.101.src.backup 536870974 BK 11442 K On-line parancs kimenete szerint ez a könyvtár valójában az openafs.101.src.readonly 536870973 RO 11442 K On-line openafs.1210.f10 nevû AFS kötet befûzési pontja. A kötetet egy másik paranccsal vizsgálhatjuk meg: Érdemes még ismerni a bos parancsot, amely egy sejt % vos examine openafs.1210.f10 -cell openafs.org alapszintû felügyelõ kiszolgálójával veszi fel a kapcsola- -noauth tot, és meghatározza a rajta futó AFS kiszolgáló folyama- tok állapotát. Az fs, a pts, a vos és a bos parancshoz A fenti parancs az openafs.org AFS-sejtben található számos további alparancs is tartozik. Szerencsére az AFS openafs.1210.f10 kötet írható-olvasható változatáról parancsainak mindegyike érti a help kapcsolót (elé nem szolgáltat részletesebb adatokat. A kimenetnek így kell kell kötõjelet írni), ennek segítségével megjeleníthetjük alakulnia: az alparancsokat is. Az fs -help (itt már kell a kötõjel) segítségével az egyes alparancsok szintaxi- © Kiskapu Kft. Minden jog fenntartva openafs.1210.f10 536871770 RW 25680 K sát is lekérdezhetjük. On-line VIRTUE.OPENAFS.ORG /vicepb Az AFS jövõje RWrite 536871770 ROnly 536871771 Backup 0 Jelenleg is számos az AFS fejlesztését célzó tervezet MaxQuota 0 K van folyamatban. A legfontosabb ezek közül az AFS-nek Creation Fri Nov 21 17:56:28 2003 a 2.6-os Linux rendszermagok alatti mûködését lehetõvé Last Update Fri Nov 21 18:05:30 2003 tévõ. Ezeknél a rendszermagoknál már nem érhetõ el 0 accesses in the past day (i.e., vnode szabadon a syscall tábla. Egy másik tervezet a kapcsolat references) nélküli üzemmód támogatását célozza, ennél az AFS- ügyfelek hálózati kapcsolatuk megszakítása után is RWrite: 536871770 ROnly: 536871771 folytathatnák az AFS használatát, az AFS tér és a fájlok number of sites -> 3 tartalma a kapcsolat ismételt létrejötte után kerülnének server VIRTUE.OPENAFS.ORG partition /vicepb szinkronizálásra. RW Site server VIRTUE.OPENAFS.ORG partition /vicepb Összefoglalás RO Site Bár az AFS-t minden oldaláról egy csapásra megismer- server andrew.e.kth.se partition /vicepb RO ni gyakorlatilag lehetetlen, az AFS sejtek üzembe helye- Site zésének folyamatát megismerni pedig komoly munka, az AFS-t mégis kifizetõdõ saját infrastruktúránkon be- A kimenet értelmében a kötet a VIRTUE.OPENAFS.ORG állo- lül használni. Segítségével a biztonságos, gépfüggetlen, más /vicepb lemezrészén található. A következõ sorban az világszintû fájlmegosztás ugyanolyan könnyedén meg- írható-olvasható és a csak olvasható kötetek kötetazonosítói oldható, mint a /usr/local/ könyvtárág vagy a unixos láthatók, némi statisztika társaságában. Az utolsó három sor kezdõkönyvtárak tárolásának leegyszerûsítése. Ráadásul a kötet egy írható-olvasható (RW Site) és két csak olvasható hosszú távon felügyeleti terheink növekedésével sem (RO Site) másolatának helyét adja meg. kell számolnunk. Ha kíváncsiak vagyunk rá, vajon hány további AFS lemez- rész található a VIRTUE.OPENAFS.ORG kiszolgálón, alkalmaz- Linux Journal 2005. április, 132. szám zuk a következõ parancsot: % vos listpart VIRTUE.OPENAFS.ORG -noauth A cikkhez tartozó források elérhetõsége:

Segítségével a következõ lemezrészekrõl szerezhetünk  www.linuxjournal.com/article/8079 tudomást: /vicepa /vicepb /vicepc Dr. Alf Wachsmann 1999 óta a Stanford Linear Total: 3 Accelerator Center (SLAC) munkatársa. Õ fele- lõs az önmûködõ Linux-telepítések minden Vagyis a gépen összesen három /vicep lemezrész van. mozzanatáért, egyaránt ide értve a farmok Ha látni szeretnénk, hogy hány kötet található a kiszolgáló csomópontjainak, a kiszolgálóknak és az asztali /vicepa lemezrészén, adjuk ki az alábbi parancsot: gépeknek a kezelését. Munkája során elsõsor- % vos listvol VIRTUE.OPENAFS.ORG /vicepa -noauth ban az aktív fájlkészletek (AFS) támogatásával, a Kerberos 5-re való áttéréssel, egy felhasz- A parancs végrehajtása eltart egy kis ideig, végül 275 kötet nálónyilvántartó tervezettel és felhasználói listáját látjuk. A lista elsõ néhány eleme a következõ: tanácsadással foglalkozik.

www.linuxvilag.hu 2005. május 39 Szaktekintély

Szaktekintély, immár századszor Eleinte minden aprósághoz CGI parancsfájlokat írtunk; mára viszont eljutottunk a webes eszközök és keretrendszerek pazar bõségéhez. Vajon milyen lesz a webes fejlesztések jövõje?

© Kiskapu Kft. Minden jog fenntartva öszöntök mindenkit a Szaktekintély rovat századik A dinamikus forradalom kezdete meglehetõsen egyszerû írásának megjelenése alkalmából! Bizony, ez már volt. Az elsõ dinamikusan elõállított tartalmak inkább bur- a századik cikk, amit a Linux Journal számára, illet- kolók voltak olyan unixos parancsokhoz, mint a mail és veK korábban a SSC Websmith címû kiadványa számára 1996 a finger. Barátaimmal együtt készített elsõ programjaim egyi- tavasza óta írtam. Az évek során rendkívül sok örömömet ke például egyszerûen arra volt alkalmas, hogy kereséseket leltem abban, hogy hónapról hónapra a webes és kiszolgáló végezzünk újságunk online archívumában. Természetesen oldali megoldások egy-egy újabb elemét mutathattam be. megtehettük volna, hogy különleges HTTP-kiszolgálókat Ebben a hónapban szeretnék kicsit visszatekinteni a kiszolgá- írunk a kívánt szolgáltatások biztosítására. Szerencsénkre ló oldali és a web/adatbázis-programozás múltjára – így talán azonban – és a többi webes fejlesztõ szerencséjére – az NCSA a jelenlegi helyzetet is jobban tudjuk majd értékelni. Ezután httpd, az Apache elõdjének tervezõi a közös átjárófelület megvizsgáljuk a web mostani állapotát, és megpróbáljuk fel- (common gateway interface, CGI) révén az összes a kiszolgá- mérni, vajon mire számíthatunk az eljövendõ években. lón található program számára lehetõvé tették a HTTP alapú kommunikációt. A CGI révén a kiszolgáló bármely program- Visszatekintés ját elérhetõvé tudtuk tenni a weben keresztül, egész egysze- Manapság a webet és az internetet mint természetesen rûen egy CGI programba burkolva. meglévõ dolgot fogadjuk el. A banki ügyeimet weben Az elsõ években kemény idõk járták. Mindenki feltételezte, keresztül intézem; könyveket vásárlok online boltokból; hogy a web eleve állapot nélküli, és mindenki kitörõ öröm- webes RSS-olvasóval webnaplókat olvasok; a webes újságo- mel fogadta, amikor a Netscape bejelentette a sütiket kat gyakrabban látogatom, mint ahogy nyomtatott változa- (cookie), amelyek segítségével a kiszolgálók figyelemmel tukat kézbe vettem; azonnali üzenetküldõ programokon követhették a felhasználókhoz egyedileg rendelt adatokat. keresztül csevegek a barátaimmal és ismerõseimmel; sõt, Nem voltak a webes forgalom mérésére alkalmas progra- még a fizetségeimet is a PayPalon keresztül kapom. Sokszor mok, nem is beszélve a webes programozás alacsonyabb hallottam, hogy Manhattan lakóinak soha nem muszáj szintjeit elfedõ könyvtárakról. A hibakeresés nagyjából kimozdulniuk otthonukból, mert mindent házhoz lehet a webkiszolgáló hibanaplójának figyelésében merült ki. szállíttatni. Nem akarom megítélni, hogy ez jó vagy sem, Minden olyan dolognak a használata, amely bonyolultabb de tény, hogy az internet világszerte egyre több ember volt egy egyszerû szöveges fájlnál, már fejlett, különleges számára teszi mindezt elérhetõvé. adattárolási megoldásnak számított. Az internet üzleti és szórakoztató jellege egy dinamikus fo- lyamat eredményeként alakult ki. A webkiszolgálók eredeti- Itt és most leg elõre összeállított, nyers vagy HTML formázású, szöve- Napjainkra a webes fejlesztés teljesen megváltozott. ges dokumentumok megosztására szolgáló megoldások vol- Az Apache legújabb változatának letöltése és telepítése tak. Röviddel az után, hogy a weben közzétett, viszonylag gyerekjáték, a  www.apache.org oldal megnyitása után korlátozott számú dokumentum felfedezése egyre népsze- néhány perccel már profin beállított webkiszolgáló lehet rûbb tevékenység lett, valaki rájött, hogy a HTTP ügyfél-ki- a gépünkön. Relációs adatbázis nélkül, még ha esetleg szolgáló jellegének köszönhetõen a dokumentumokat dina- nem is akarjuk bevallani, ma már nem létezik normálisabb mikusan, a beérkezõ kérésekre válaszul is elõ lehetne állíta- webes alkalmazás. A legtöbb idõt azzal takaríthatjuk meg, ni. Amikor egy HTTP-ügyfél elküldi adott dokumentumra hogy többé nem is kell saját programokat írnunk – a ren- vonatkozó kérését a kiszolgálónak, akkor még nem tudja, delkezésünkre álló, a web és adatbázis alapú programok hogy a dokumentum hónapok óta ott várakozik a kiszolgá- készítését segítõ alkalmazások, könyvtárak és keretrend- ló fájlrendszerében, vagy a kérésre válaszul állítják elõ. szerek száma egészen lenyûgözõ. Korábban égen-földön Ez a szemlélet aztán örökre átalakította a webet, egyszerû, kutatnunk kellett, ha találni akartunk egy az igényeinknek statikus anyagok megosztott tárháza helyett valós idejû megfelelõ, nyílt forrású alkalmazást. Kétségtelen, hogy dokumentumok és alkalmazások rendszerévé formálva. a leginkább megfelelõ alkalmazás megtalálása most sem

40 Linuxvilág Szaktekintély

feltétlenül könnyû, ám ennek csak az az oka, hogy hibakeresési idõben észlelhetõ elõnye viszont annyira nagy, rengeteg gyenge vagy nem odaillõ programot kell meg- hogy ma már szinte senki nem ír C-ben webes alkalmazást. ismernünk, mire rálelünk az igazi megoldásra. Szintén jól látható folyamat, hogy a nagyvállalatok egyre Mindemellett a fejlesztõi közösség is rengeteget fejlõdött az inkább magas szintû nyelveket alkalmaznak, és a nyílt for- évek során. A kiszolgáló oldali programozás világába kezdõ- rású programokat is elfogadják. Sok vállalat – például az ként belépõk jóindulatban és segítségben sosem szenvedtek Amazon vagy az eBay már rájött, hogy programozói jóval hiányt, ám a kellõ tapasztalat felhalmozódásához idõ kellett. termelékenyebbek, ha magas szintû nyelvekkel dolgoznak. A webes programozás egykor kutatólaborok hálózatához Az a tény, hogy ma már a Java és C# a két legalacsonyabb hasonlított, amelyben minden résztvevõ megosztotta ta- szintû webes fejlesztésre használt nyelv, elég sokat elmond pasztalatait a közösség többi tagjával. Mára komoly tapasz- arról, hogy hová tart az iparág. Olyan nyelvek vették át az talat gyûlt össze, a nyílt közösségben és a vállalatok falai uralmat, amelyek lehetõvé teszik, hogy a programozó végre mögött egyaránt. Ha egy ifjú programozó új alkalmazásokat a valódi ötletekkel foglalkozzon, és ne biteket és bájtokat szeretne írni, akkor szinte végtelen mennyiségû könyv, piszkáljon naphosszat. A Java, azt hiszem, kijelenthetjük, weboldal és forráskód áll rendelkezésére a tanuláshoz. mint asztali programozási nyelv megbukott, ám a C# aje- Arról sem szabad elfeledkezni, hogy az ezen a területen hasz- lek szerint, köszönhetõen a Microsoft .NET kezdeményezé- nált, népszerû programozási nyelvek, mint a Perl, a Python, sének, egyre népszerûbb; így nem kizárt, hogy néhány év a PHP és a Java az elmúlt évek során rengeteget fejlõdtek. múlva a legtöbb asztali alkalmazás olyan nyelveken készül, Engem ugyanakkor ezeknek a nyelveknek és könyvtáraiknak amelyek nem tartalmaznak mutatókat, az automatikus sze- © Kiskapu Kft. Minden jog fenntartva fejlõdése kevésbé lepett meg, mint az, hogy az iparág egyre métgyûjtést ellenben elvégzik. inkább a magas szintû nyelvek használata felé halad. Természeten az ilyen nyelvek terjedésének okai szerteága- A webes világ hajnalán a legtöbben C és C++ nyelven fej- zók, mûszaki és pénzügyi jellegûeket egyaránt találunk kö- lesztettek. Akik magas szintû nyelveket, például Perlt vagy zöttük. Biztos vagyok abban, hogy a web kiemelkedõ szere- Pythont használtak, azokat szinte kontároknak tekintették, pet játszott az irányváltásban. A magas szintû nyelvek, mint a „rendes” nyelveket használókhoz képest komolytalannak a Perl, kiválóan megfelelnek a webes környezet igényeinek, számítottak. A web mindezt megváltoztatta: ma már az is mint furcsa adattípusok kezelése, adatbázis-kapcsolat, lehet komoly alkalmazásfejlesztõ, aki csupán PHP-ben dol- könnyû használat, sokoldalú szövegkezelési lehetõségek és gozik. Természetesen a lefordított C programok ma is gyor- könyvtárak. A web nem más, mint hálózatra kihajított szö- sabban futnak, mint az azonos feladatokat ellátó, de magas vegek halmaza, márpedig ezeket a legmesszebbre magas szintû nyelveken készültek, ám utóbbiaknak a fejlesztési és szintû, nyílt forrású nyelvek segítségével hajíthatjuk.

www.linuxvilag.hu 2005. május 41 Szaktekintély

Elképesztõ növekedés állt be a kiszolgáló oldali alkalmazá- lyek például a Mozilla motorra épülnek. Sokszor mondtam, sok készítésére szolgáló keretrendszerek számában is. Hiába hogy a Mozilla az új Emacs. Noha a Mozilla alapú fejlesztés rendelkezik valaki magas szintû programozási nyelvvel, ha jóval nehezebb, mint az Emacs testreszabása valaha is volt, saját rendszert kell írnia a felhasználók, a csoportok, az en- az a tény, hogy a Mozilla többféle operációs rendszer felett is gedélyek, a tartalom és az üzenetek kezelésére. Valamelyik futó, programozható környezetet biztosít sokoldalú asztali al- meglévõ keretrendszert használva megúszhatjuk ezt a mun- kalmazások készítéséhez, önmagában is figyelemre érdemes. kát, és felhasználhatjuk valaki másnak a tapasztalatait. A ke- Ígéretes alkalmazás a Sunbird, a Mozilla naptárprogramja is, retrendszerek két alapvetõ irányt követnek: egy részük tar- amelyet a saját gépemen én is hónapokon keresztül használ- talomkezelésre, híroldalak és magazinok oldalainak valós tam. A Sunbird ugyan számos hibától és problémától terhes, idejû összeállítására szolgál, mások viszont alkalmazás- mégis roppant rokonszenvessé teszi, hogy az iCalendar szab- kiszolgálóként üzemelnek, vagyis alkalmazások készítésére ványt használja különféle naptáraknak az internetrõl, HTTP- használható eszközkészletekkel látják el a fejlesztõket. n keresztül végzett letöltéséhez. Bizony! Pontosan errõl volt Felületesen szemlélve azt hinnénk, hogy az olyan alkalma- szó: olyan asztali alkalmazás, amely Mozilla alapú, HTTP-n zási keretrendszerek, mint a HTML::Mason, a Zope, az keresztül URL-eket kérdez le, mégsem webböngészõ! OpenACS és a Java servletek/JSP-k kevés közös tulajdonság- Kiszolgáló oldalon az együttmûködés egyre hangsúlyosabb gal rendelkeznek. Aki azonban egynél többet is megismer szerepet kap. Bár egy kereskedelmi enciklopédia színvona- közülük, az hamar rájön, hogy bár mindegyik sajátos szem- lát nem feltétlenül éri el, én mégis a Wikipediához fordulok © Kiskapu Kft. Minden jog fenntartva léletet követ, sokban azonosak. Igaz, hogy egyik keretrend- elõször, ha valamilyen témáról bõvebb ismereteket szeret- szerrõl a másikra áttérni továbbra is fájdalmas, ám aki már nék gyûjteni. Köszönettel tartozunk a több ezer szerkesztõ- többet is felfedezett közülük, annak egy-egy újabb megis- nek, munkájuk eredménye mindennapos használatra több merése rutinmûveletté válik. mint kiváló. Egy ilyen jellegû együttmûködést vezényelni Igen, webes fejlesztõnek lenni 2005-ben messze kelleme- nem kis feladat, és a WikiMedia Foundation PHP és MySQL sebb ahhoz képest, amit tíz évvel ezelõtt ki kellett állnunk. alapú MediaWiki alkalmazása szép csendben élvonalbeli A szoftverek egyre kiforrottabbak, a közösség kiterjedt és közös írást és szerkesztést segítõ megoldássá vált. segítõkész, nem kell többé minden héten feltalálni a kere- Végül, hibakeresõ és tesztelõ keretrendszerekre mindig is ket, és a web felé nyitó szervezetek száma egyértelmûen szükség lesz. A jövõben egyre kiterjedtebb tesztelésekre, azt jelzi, hogy a munkákra van igény a piacon. sõt, tesztelés alapú programozásra kell felkészülnünk. A részegységek ellenõrzése alapján soha nem lehet egyér- A jövõ telmûen megállapítani, hogy vajon a teljes alkalmazás meg- Miután ennyit áradoztam a jelenlegi helyzetrõl, vajon mi felelõen fog-e mûködni, ám ennek ellenére nyilvánvaló, vár ránk a jövõben? Milyen folyamatok fognak felgyorsulni hogy minden eljárást tüzetesen ellenõrizni kell, mielõtt a 2005-ös év során? Elõször is, szerintem egyértelmû, hogy összeépítenénk õket. A tesztelés alapú fejlesztés elõtérbe ke- a web, ami alatt itt a HTTP, a HTML és az URL-ek együtte- rülése az utóbbi néhány év egyik legfontosabb módszertani sét értem, felbomlik alkotó elemeire. Mindig is úgy gondol- változása, és hiszem, hogy népszerûsége az alkalmazások tam, hogy a web szokatlanul sokoldalú, hiszen három ön- bonyolultságával párhuzamosan fog növekedni. magában is nagy tudású megoldásból – ezek lennének a HTTP, a HTML és az URL-ek – áll össze. Tisztán látható, Összefoglalás hogy mindhárom megoldás önmagában is megállja a he- Õszintén örülök, hogy alkalmat kaptam immár száz cikk lyét, és más területeken is meg fog jelenni. megírására. Ám a fentiekbõl is kitûnik, a webes megoldások- Különösen érdekesek a webszolgáltatások, amelyek egy kal, adatbázisokkal foglalkozó fejlesztõket számos újabb ki- a böngészõktõl különbözõ programok számára készült, új, hívás várja, vagyis bõségesen lesz témám további száz írás- sokoldalú és nyílt kommunikációs protokollt képviselnek. hoz. A következõ hónapok során több itt említett ötletet is Amikor elõször megjelentek, azt hittem, hogy valami egy- meg fogunk vizsgálni, ide értve az iCalendart, a Wiki szoft- szerû dologról van szó, aminek kiötlõi megpróbálják ki- vert, a webszolgáltatásokat és a tesztelés alapú fejlesztést. használni a web sikerét és nevét. Az lehet, hogy a szegé- Lehet, hogy elmúlt tíz éves, a webbel dolgozni mégis szóra- nyes névválasztás tekintetében igazam volt, sõt, talán a hát- koztató, izgalmas és sok fejtörést okoz. térelméletek sem túl összetettek, ám mindez mit sem vál- A [email protected] címen bárki levelét szívesen fogadom, toztat azon, hogy a webszolgáltatások valóban komoly le- ha meg kívánja velem osztani a web jövõjével kapcsolatos hetõségeket kínálnak. Az az ötlet, hogy adott alkalmazás gondolatait, esetleg közölni szeretné, hogy mely tervezetek- operációs rendszertõl és programozási nyelvtõl függetlenül kel, megoldásokkal és irányzatokkal kapcsolatban szeretne kapcsolódhasson egy másikhoz, egyszerû, mégis zseniális. bõvebben is olvasni az eljövendõ hónapok és évek során. Bár a webszolgáltatások igazán jó használatára még ritkán látunk példát, az Amazon, a Google és a Bloglines már iga- Linux Journal 2005. április, 132. szám zolta, hogy belsõ API-jaink ügyfelek és más külsõ szemé- lyek számára való elérhetõvé tétele nem feltétlenül veszé- Reuven M. Lerner hosszú ideje web/adatbázis lyezteti üzletmenetünk biztonságát. tanácsadóként és fejlesztõként dolgozik, jelen- Hasonló irányzat a webböngészõk asztali alkalmazások belsõ leg a Northwestern University oktatásmódszer- összetevõjeként való használata. A súgók már HTML alapú- tan kurzusának hallgatója. Weblogja az ak, és mini webböngészõkkel mûködnek, de vannak teljes altneuland.lerner.co.il, õ maga pedig alkalmazások is, mint például az ActiveState Komodoja, ame- a [email protected] címen érhetõ el.

42 Linuxvilág Szaktekintély

Kedvenc Bash trükkjeim Rengeteg gépelést takaríthatunk meg néhány hasznos bash trükkel amelyek a régivágású UNIX héjprogramokból még hiányoztak. © Kiskapu Kft. Minden jog fenntartva bash, azaz „Bourne again shell”, a legtöbb Linux $ echo {one,two,red,blue}fish terjesztésben alapértelmezett héjprogram. A bash onefish twofish redfish bluefish héjprogram népszerûsége a Linux és UNIX fel- $ echo fish{one,two,red,blue} Ahasználók között nem a véletlen mûve. Igen sok funkciója fishone fishtwo fishred fishblue van amely a felhasználóbarát jelleget és a termelékenységet $ echo fi{one,two,red,blue}sh erõsíti. Sajnos nem igazán tudjuk kihasználni ezeket a lehe- fionesh fitwosh firedsh fibluesh tõségeket, ha a létezésükrõl sem tudunk. Amikor elõször kezdtem el Linuxot használni, az egyetlen Figyeljük meg, hogy a zárójelek és a csatlakozó karakter- bash képességet használtam. Nevezetesen, hogy a parancs- sorozatok között nincsen szóköz karakter. Ha kitesszük sorban a felfele nyíl segítségével vissza lehet lépkedni a szóközt, a dolgok megbolondulnak: a parancstörténetben. Hamarosan további lehetõségekre $ echo {one, two, red, blue }fish is rábukkantam, másokat figyelve vagy kérdezõsködve. {one, two, red, blue }fish Cikkemben az évek alatt megismert kedvenc bash trükk- $ echo “{one,two,red,blue} fish” jeimet szeretném megosztani mindenkivel. {one,two,red,blue} fish Ebben a cikkben nem akarjuk a bash összes képességét összefoglalni; ahhoz egy könyvre lenne szükség, és szép Ugyanakkor, ha idézõjelet használunk a zárójeleken kívül számmal találunk is könyveket, melyek ezzel a témával vagy a listában, akkor szóközöket is beírhatunk: foglalkoznak. Ilyen például a Learning the bash Shell $ echo {“one “,”two “,”red “,”blue “}fish O’Reilly könyv. Ebben a cikkben inkább azokat a bash one fish two fish red fish blue fish trükköket szeretném összegyûjteni amelyeket a leggyak- $ echo {one,two,red,blue}” fish” rabban használok és amelyek nélkül elveszettnek érez- one fish two fish red fish blue fish ném magam. A zárójeleket akár egymásba is ágyazhatjuk, de ügyelnünk Zárójel kiegészítés kell a formára: Kedvenc bash trükköm egyértelmûen a zárójel bõvítés $ echo {{1,2,3},1,2,3} (brace expansion). A zárójel bõvítés vesszõvel elválasztott 123123 karaktersorozatokból készít nekünk különálló paramétere- $ echo {{1,2,3}1,2,3} ket. A listát kapcsos-zárójelek, azaz { és } közé tesszük, 11 21 31 2 3 a vesszõk környékén pedig nem hagyunk szóköz karakte- reket. Például: E példák után, biztos sokan azt mondják magukban: $ echo {one,two,red,blue} „Nahát, ezek aztán tényleg ügyes szalontrükkök, de miért jó one two red blue nekem ez a zárójelbõvítés?” A zárójel bõvítés hasznos lehet, ha biztonsági másolatot akarunk készíteni egy állományról. Az elõbbi egyszerû példában bemutatott zárójel bõvítés Ez az egyik kedvenc héjtrükköm. Szinte miden nap haszná- nem igazán nyújt túl sokat a felhasználónak. Tulajdonkép- lom, amikor egy beállításállományról változtatás elõtt máso- pen a fenti példa kettõvel több karakter begépelését igényli, latot készítek. Például, amikor megváltoztatom az Apache mint ha egyszerûen csak ennyit írnánk: beállításállományt, egy kis gépelést megtakarítva a követke- echo one two red blue zõket írhatom: $ cp /etc/httpd/conf/httpd.conf{,.bak} ami azonos eredményt ad. Ugyanakkor a zárójel bõvítés rendkívül hasznos tud lenni, ha a zárójelbe foglalt lista Figyeljük meg hogy semmilyen karakter nem álla a nyitó közvetlenül egy másik karakter sorozat elõtt, mögött vagy zárójel és a vesszõ között. Az ilyesmit teljesen elfogadott és annak közepében foglal helyet: hasznos amikor betûket szeretnénk egy létezõ fájlnévhez fûz-

www.linuxvilag.hu 2005. május 43 Szaktekintély

ni vagy ha az egyik paraméter részhalmaza a másiknak. Az- denied hibaüzenetek tengerében melyek pillanatok tán ha késõbb kíváncsi vagyok milyen változtatást végeztem, alatt elözönlötték a terminálablakunkat? könnyen megtudhatom a diff parancs segítségével a karak- Ha mi vagyunk a rendszergazdák, átjelentkezhetünk root tersorozatokat fordított sorrendben megadva a zárójelben: felhasználóként, hogy úgy adjuk ki újra a find parancsot. $ diff /etc/httpd/conf/httpd.conf{.bak,} Minthogy a root bármilyen állományt olvashat, többé nem 1050a1051 kapunk hibaüzeneteket. Sajnos nem mindenki rendelkezik > # I added this comment earlier root jogokkal azon a rendszeren amit használ. Emellett meg- lehetõsen rossz gyakorlat root-ként dolgozni hacsak nemfel- Parancs helyettesítés tétlen szükséges. De vajon mi mást tehetünk? Az egyik meg- A másik bash trükk amit szeretek használni a parancshe- oldás, ha a kimenetet egy állományba irányítjuk. A szokásos lyettesítés. A parancshelyettesítés használatához egy alap kimenet átirányítás nem lehet újdonság annak aki bizo- szabványos kimenetre író parancsot helyezzünk zárójelek nyos idõt töltött UNIX vagy Linux héjkörnyezetben, így a ki- közé, majd a nyitó zárójel elé tegyünk egy dollár jelet, menet átirányítás részleteibe most nem mennék bele. A find $(command). A parancshelyettesítés nagyon hasznos ha érté- parancs hasznos kimenetének elmentéséhez a kimenetet ket akarunk adni egy változónak. Elég általános a héjprog- a következõképpen irányíthatjuk egy állományba: ramokban, ahol gyakori mûvelet a dátum vagy idõ hozzá- $ find / -name foo > output.txt rendelése egy változónévhez. Akkor is hasznos lehet, ha © Kiskapu Kft. Minden jog fenntartva az egyik parancs kimenetét egy másik program paramétere- A hibaüzeneteket továbbra is látni fogjuk a képernyõn, ám ként szeretnénk felhasználni. Például, amikor a dátumot a keresett állomány elérési útját már nem. Ez ugyanis az szeretnénk egy változóhoz rendelni, a következõt írjuk: output.txt állományba kerül. Amikor a find parancs befeje- $ date +%d-%b-%Y zõdik, kiírathatjuk a output.txt állomány tartalmát a cat 12-Mar-2004 paranccsal és máris láthatjuk a keresett fájl(ok) elérési helyét. $ today=$(date +%d-%b-%Y) Ez ugyan elfogadható módszer, de van jobb megoldás is. $ echo $today Ne a szabványos kimenetet irányítsuk át egy állományba, 12-Mar-2004 hanem a hibaüzeneteket. Ezt úgy érhetjük el, hogy közvet- lenül az átirányító jel elé a 2-es számot írjuk. Ha nem érde- Gyakran használom a parancskiegészítést amikor több kelnek bennünket a hibaüzenetek, nyugodtan elküldhetjük RPM csomagról szeretnék egyszerre információt kapni. õket a /dev/null-ba: Például ha azon RPM csomagok fájllistájára vagyok kí- $ find / -name foo 2> /dev/null váncsi amelyek nevében szerepel a httpd szó, egyszerûn a következõ parancsot adom ki: Így a bosszantó permission denied üzenetek nélkül nézhetjük $ rpm -ql $(rpm -qa | grep httpd) meg a foo állomány elérési útját, feltéve persze, hogy létezik. Szinte mindig így hívom meg a find parancsot. A 2-es szám A belsõ parancs az rpm -qa | grep httpd, valamennyi httpd a szabványos hibacsatornát jelenti. A legtöbb program erre szót tartalmazó nevû csomagot listázza. A külsõ parancs az a szabványos hiba csatornára küldi a hibaüzeneteit. A szoká- rpm -ql, pedig a csomagban található állományokat jeleníti sos (nem-hiba) kimenet a szabványos kimenetre kerül, amit meg. Most a tapasztaltabb Bourne héj használók rámutatná- egyébként az 1-es szám jelez. Minthogy a leggyakrabban átirá- nak, hogy a parancshelyettesítést úgy is végre lehet hajtani, nyított csatorna a szabványos kimenet a kimenet átirányítás ha a parancsot fordított aposztrófok (back-tick) közé helyez- alapértelmezés szerint a szabványos kimenet folyamot irányít- zük. A Bourne-stílusú parancshelyettesítéssel, a fenti dátum ja át. Következésképpen a következõ két parancs egyenértékû: értékadás a következõ alakot ölti: $ find / -name foo > output.txt today2=`date +%d-%b-%Y` $ find / -name foo 1> output.txt $ echo $today2 12-Mar-2004 Elõfordul, hogy a a hibaüzeneteket és a szabványos kimene- tet is el szeretnénk menteni egy állományba. A cron folya- Az újabb bash-stílusú parancshelyettesítés formátumnak matok esetében gyakran van szükség ilyesmire, amikor min- azonban van néhány fontos elõnye. Elõször is könnyebben den kimenetet egy naplófájlba szeretnénk menteni. Ezt is egymásba ágyazható. Mivel a nyitó és záró jelek különbözõ- megtehetjük, ha mindkét kimeneti folyamot egyazon állo- ek, a belsõ jeleket nem kell backslash-el védeni. Másodszor mányba irányítjuk: könnyebb olvasni, különösen ha beágyazva használjuk. $ find / -name foo > output.txt 2> output.txt Még Linuxon is, ahol a bash az általános, könnyen találkoz- hatunk a régi, Bourne stílusú formátumot használó héjprog- Mûködik ugyan, de megint csak van egy jobb módszer. ramokkal. Ennek oka a hordozhatóság biztosítása a külön- Az és jel segítségével a szabványos hibafolyamot a szabvá- féle UNIX verziók között, ahol nem mindig van elérhetõ nyos kimenethez köthetjük. Miután ezt megtettük, a hiba- bash viszont van Bourne héj. A bash visszafelé együttmûkö- üzenetek ugyanoda mennek ahová a szabványos kimenetet dik a Bourne héjjal, így megérti a régebbi formátumot. irányítottuk: $ find / -name foo > output.txt 2>&1 Szabványos hiba átirányítása Elõfordult már, hogy egy állományt kerestünk a find Egy dologra azonban oda kell figyelni, a kötés mûveleti jele paranccsal, ám a keresett állomány eltûnt a permission mindig a kimenetet készítõ parancs végére kerül. Ez akkor

44 Linuxvilág Szaktekintély

lehet fontos, ha a kimentet egy másik parancsba vezetjük használná ezeket a lehetõségeket. Inkább az a jellemzõ, át. A következõ sor úgy mûködik ahogy várjuk: hogy az emberek minden ciklusban visszalépkednek a pa- find -name test.sh 2>&1 | tee /tmp/output2.txt rancstörténetben és módosítják az eredetileg beírt parancsot. Amennyiben valaki nem nagyon ismeri a for vagy Ez viszont nem: egyéb ciklustípusok készítésének módozatait, érdemes find -name test.sh | tee /tmp/output2.txt 2>&1 utánaolvasni. Sok jó héjprogramozásról szóló könyv tár- gyalja a kérdést. A for ciklusok általános tárgyalása önma- és a következõ sem: gában is megérdemelne egy cikket. find -name test.sh 2>&1 > /tmp/output.txt Kétféleképpen lehet interaktív szkriptet írni. Az elsõ, általam elõnyben részesített módszer, ha minden sort A kimenet átirányítás bemutatásához a find parancsot pontosvesszõvel választunk el. A könyvtárban található használtam példaként, majd valamennyi késõbbi példa is valamennyi fájlról háttérmentést készítõ egyszerû ciklus ezt a parancsot használta. A megoldás azonban természete- a következõképpen nézne ki: sen nem csak a find paranccsal mûködik. Rengeteg másik $ for file in * ; do cp $file $file.bak; done parancs is készít hibaüzeneteket amelyek elfedhetik az eredményül várt egy-két soros kimenetet. A másik lehetõség, ha pontosvesszõ beszúrása helyett min- A kimenet átirányítás sem bash különlegesség. Minden den sor után Enter-t ütünk. A bash a for kulcsszóból felis- UNIX/Linux héj ugyanilyen alakban támogatja a kimenet meri hogy ciklust készítünk, és a másodlagos prompt alkal- © Kiskapu Kft. Minden jog fenntartva átirányítást. mazásával kéri be a következõ sorokat. A done kulcsszóból meg tudja állapítani, hogy befejeztük a ciklust: Keresés a parancstörténetben $ for file in * A bash héj egyik legnagyszerûbb képessége a parancstörté- > do cp $file $file.bak net, melynek segítségével könnyedén navigálhatunk oda- > done vissza a már kiadott parancsok között a fel és lefelé nyilak segítségével. Mindez kiváló amíg csak az utóbbi 10-20 ki- És most valami egészen más adott parancs között keresgélünk, de igen fárasztó, ha Amikor eredetileg rászántam magam erre a cikkre, a „Bolon- a parancs 75-100 parancsnyira van a parancstörténetben. dos bash trükkök” címet akartam adni neki, ahol bemutatok A dolgok felgyorsítása érdekében interaktívan keresgélhe- néhány különös, ezoterikus bash parancsot amelyeket megis- tünk a parancstörténetben a Ctrl-R kombináció leütésével. mertem. A cikk hangvétele azóta sokat változott, de egy bo- Amint ezt megtettük a parancssor a következõre változik: lond bash trükk azért megmaradt amit be szeretnék mutatni. (reverse-i-search)`’: Körülbelül öt évvel ezelõtt egy Linux rendszer, amelyért én feleltem, kifutott a memóriából. Még az olyan egyszerû pa- Gépeljük be a keresett parancs néhány betûjét és a bash rancsok is, mint az ls insufficient memory hibával álltak le. megmutatja melyik az a legfrissebb parancs amely tartal- A probléma nyilvánvaló orvoslása egy egyszerû reboot lett mazza az eddig begépelt betûket. Amit gépelünk, a ` és ‘ volna. Az egyik rendszergazda azonban szeretett volna meg- jelek között jelenik meg a parancssorban. Az alábbi példá- nézni egy állományt amely esetleg a problémával kapcsola- ban, a htt szót gépeltem be: tos nyomokat tartalmazhat, de nem emlékezett a pontos fájl- (reverse-i-search)`htt’: rpm -ql $(rpm -qa | grep névre. A könyvtárakba be tudtunk lépni, hiszen a cd parancs httpd) a bash része, de a fájllistát már nem tudtuk lekérdezni, hi- szen még az ls sem mûködött. A probléma megkerülésére Ez azt jelenti, hogy a legutoljára begépelt parancs amely a másik rendszergazda készített egy egyszerû ciklust amely tartalmazza a htt karaktereket a: megmutatta a könyvtárban található állományokat: rpm -ql $(rpm -qa | grep httpd) $ for file in *; do echo $file; done amennyiben újra végre akarom hajtani a parancsot, egysze- Ez olyankor is mûködött amikor az ls nem, hiszen az echo rûen csak Entert ütök. Ha inkább szerkeszteni szeretnénk, a bash héj része, így már eleve a memóriába töltve találha- a jobb vagy bal nyíl segítségével ezt is megtehetem. Ilyen- tó. Érdekes megoldása egy nem szokványos problémának. kor a parancssorban mutatott parancs a szokásos prompt Meg tudja valaki mondani, hogyan lehet egy állomány tar- sorba kerül, ahol ugyanúgy szerkeszthetem mintha begé- talmát megjeleníteni kizárólag bash beépített parancsokat peltem volna. Ez igazi idõmegtakarítás lehet ha sok para- használva? méterrel ellátott parancsot szeretnék a parancstörténet mélyérõl elõásni. Összefoglalás A bash héj rengeteg remek szolgáltatással könnyíti meg fel- Ciklusok használata parancssorból használói életét. Remélem, legkedveltebb bash trükkjeim Az utolsó tipp amit be szeretnék mutatni, az, hogyan tu- rövid összefoglalója mutatott néhány új lehetõséget, hogy dunk ciklusokat használni a parancssorban. A parancssor jobban kihasználhassuk a bash igazi erejét. nem igazán az a hely ahol egymásba ágyazott ciklusokat és elágazásokat tartalmazó összetett szkripteket szokás írni. Linux Journal 2005. április, 132. szám Kis ciklusok használatával azonban egész sok idõt takarítha- tunk meg. Sajnos nem sok emberrel találkoztam aki ki is Prentice Bisbal

www.linuxvilag.hu 2005. május 45 Szaktekintély

Emberi beszéd mesterséges elõállítása és gépi felismerése Az emberi hangok mesterséges elõállítása a világon elõször a magyar Kempelen Farkasnak sikerült. Az õ készüléke mechanikus úton imitálta az emberi hangkép- zést az 1700-as évek végén. © Kiskapu Kft. Minden jog fenntartva

számítógépek õskorában, az 1960-as években újra kelljen külön kiadnunk? Egy hangkártya, körülbelül 20 MB feléledt a gondolat: hogyan állíthatnánk elõ emberi hely a merevlemezen és egy beszédszintetizáló program. beszédet mesterségesen? A gépi hangok emberi be- A jelenleg létezõ beszédszintetizáló rendszerekrõl szédkéntA való felismeréshez még az 1980-as években is „sok a  http://www.speech.cs.cmu.edu/comp.speech/Section5/ jóindulat” kellett. Annyira rossz volt a hang minõsége, hogy Q5.5.html címen találhatunk összefoglalót. A dolog gyakor- a hallgatónak önkéntelenül az az érzése támadt, a számító- lati oldalát tekintve az átlagos érdeklõdõ számára olyan gépnek sürgõsen meg kellene csináltatnia a fogait. Ennek az rendszer jöhet számításba, amely ingyenes, amelyhez támo- oka többek között a kimenõ csatorna kis frekvenciaszélessé- gatja az új nyelvek felvételét, amelynek elfogadható a mi- ge volt. A gépek növekvõ teljesítménye mára lehetõvé tette nõsége, és amely lehetõleg Linuxon is és Windows alatt is élvezhetõ és érthetõ hang elõállítását számítógép segítségé- mûködik. Ezeknek a feltételeknek jelenleg egyetlen rend- vel. Ugyanakkor egy hibátlanul hangsúlyozó, valódi emberi szer felel meg, az mbrola beszédszintetizátor. A nevét helye- hangon beszélõ, az érzelmeket és hangerõváltozásokat hûen sen „embérolának” kell ejteni, amúgy az angol umbrella visszaadó rendszerig, amilyeneket néha filmekben látunk, (esernyõ) szóból ered. A rendszert a  http://tcts.fpms.ac.be/ még hosszú utat kell megtennünk. synthesis/mbrola.html helyen találhatjuk meg.

Magyar fejlesztések Az mbrola beszédszintetizátor Már a 80-as évek óta létezik egy magyar fejlesztésû hang- Az mbrola ugyan nem szabad forráskódú program, de szintetizátor, amit a  http://speechlab.ttt.bme.hu/ címen talál- a katonai és a kereskedelmi célú alkalmazásokat kivéve bár- hatunk meg. A  www.világhallo.hu webhelyen kis is pró- ki ingyen használhatja. A programot a Belgiumban levõ bálhatjuk a rendszert, és tapasztalhatjuk, hogy a minõsége Monsi Mûszaki Egyetem hangtechnika tanszéke írta. Körül- kifejezetten jó. Elõször multivox néven egy tisztán szinte- belül 10 éves, így ma már érettnek mondható, amit az is bi- tizált hangokból álló beszédszintetizátort fejlesztettek ki, zonyít, hogy 33 nyelvhez, köztük a japánhoz és koreaihoz majd egy emberi hangra alapuló változatot, mely profivox is van már hangja. Egy adott nyelv támogatásához valaki- néven ismert. Sajnos, mindkettõ kereskedelmi termék, nek gépbe kell mondania az összes elõforduló kettõs hang- a profivox része az angol árjegyzék szerint körülbelül 850 zót, szaknyelven difonémát. Ha megvan ez az adatbázis, dollárba kerülõ jaws csomagnak, melynek demó változata a szintetizátor képes az adott nyelven beszélni. a  http://www.vakalap.hu oldalról tölthetõ le. Ugyanezt a http://www.vilaghallo.hu ingyenes felolvasóprogramként A difonéma adatbank terjeszti, de ez a megoldás egyrészt állandó hálózatot köve- Egy difonéma adatbank elkészítése nem triviális feladat, tel, másrészt csak néhány mások által elõre kiválasztott errõl részletes beszámoló olvasható könyvet képes felolvasni, ami sokakat biztosan nem elégít ki. a  http://tkltrans.sourceforge.net/magyar/bmrolamod.htm cí- 2001 óta létezik a szintén magyar fejlesztésû speakboard men. Ezt természetesen csak egyetlen egyszer kell megtenni, ( http://www.speecht.com/speakboard/intro.php), mely saját hiszen késõbb a hangadatbank minden felhasználó rendelke- állítása szerint nyelvfüggetlen beszédszintézis-rendszer. zésére áll. A magyar nyelvhez 2005. januárja óta van adat- Magyar és angol változata vásárolható meg, ára körülbelül bank, és további magyar adatbankok vannak készülõben. húszezer forint. Az elõállított beszéd meg is hallgatható a fenti oldalon, véleményem szerint szintén jól érthetõ. Szöveg-fonéma átalakító Ingyenes illetve nyílt forráskódú beszédszintetizátorok Ha kész a difonéma-állomány, még szükséges egy nyelv- Mi kell tehát ma ahhoz, hogy számítógépünk beszélni, függõ fonémaelõállító program is, mely az elmondandó vagy akár énekelni tudjon anélkül, hogy emiatt nagy pénzt szöveget difonémákká alakítja. Ez a magyar nyelvhez

46 Linuxvilág Szaktekintély

A hangerõsség változtatására a .pho fájlon belül nincs lehe- tõség. Ugyanakkor ez is megoldott például a de6 és de7 Magyar szöveg Olasz szöveg Angol szöveg hangadatbankokban. Az ötlet annyi, hogy ezek a hangadat- bankok terjedelmüket megháromszorozva, minden difoné- mát hangos és halk módban is bemondanak. Elõfeldolgozás Elõfeldolgozás Elõfeldolgozás A fonémasorozatot az mbrola szövegszintetizáló program közvetlenül .wav állománnyá képes alakítani, melyet a szá- mítógép közvetlenül a play segédprogrammal vagy például Fonémagenerátor Fonémagenerátor Fonémagenerátor az mplayerrel (Linux) vagy Windows esetén bármelyik leját- magyar olasz angol szó programmal (például Media Player) le tud játszani. Az mbrolával való hangelõállítás menetét talán legvilágo- sabban ez az ábra szemlélteti: hang/hu Mint látható, a hangelõkészítést és a szöveg fonémákká átalakításának nyelvspecifikus részét nem az mbrola szin- tetizátor végzi, hanem külsõ modulok. Ez a modularizált hang/i Beszédszintetizátor felépítés nagy szabadságot jelent, és lehetõvé teszi, hogy a fejlesztõ mindig csak az adott nyelvre koncentráljon, hiszen a hallható beszéddé alakítás végsõ soron független © Kiskapu Kft. Minden jog fenntartva hang/e a célnyelv szabályaitól, sajátosságaitól.

Beszéd A szövegszintetizáló rész (wav) A felhasználó számára az mbrola program és a fonémakép- zéshez szükséges eszközök telepítése talán a legnehezebb a megoldandó feladatok közül. A programot és a hang- adatbázist a  http://tcts.fpms.ac.be/synthesis/mbrola/ 1. ábra mbrcopybin.html kell letölteni. Egy linuxos gépen az mbr301.zip tartalmát kicsomagolás a  http://tkltrans.sf.net/magyar/hunpho.tar.gz címen után a /usr/local/mbrola könyvtárba kell írni, és ez alatt létre található. A „Helló világ!” szöveg például így néz ki kell hozni egy hu1 alkönyvtárat. Ide kerül a hu1 adatbank, fonémákká alakítva: vagyis ide kell kitömöríteni a hu1.zip nevû fájlt. Az egész folyamat a Linux alatt így néz ki (/en/konyvtaram _ 50 0 160 az a hely, ahová a letöltött csomagokat helyezzük). h 70 0 170 30 200 E 90 bash# cd /usr/local l 65 bash# mkdir mbrola l 65 bash# cd mbrola o: 148 bash# unzip /en/konyvtaram/mbr301h.zip _ 10 0 160 bash# unzip /en/konyvtaram/hu1.zip _ 150 0 160 _ 10 0 160 A /usr/local/bin könyvtárban hozzunk létre egy a végrehajt- v 70 0 210 30 200 ható mbrola állományra mutató szimbolikus linket: i 90 l 65 bash# cd /usr/local/bin a: 148 bash# ln -s /usr/local/mbrola/mbrola-linux-i386 g 75 mbrola _ 10 0 160 30 190 _ 350 0 160 A szöveg fonémákká alakítása Ezek után a szöveg-fonéma átalakítót (http://tkltrans.sf.net/ A fonémasorozatban egy sor értelmezése: Az elsõ jel magyar/hunpho.tar.gz) kell beüzemelnünk. Ennek a kimondandó betû úgynevezett sampa jelölésben. a részegységnek szüksége van a Perl nyelvre, valamint Errõl bõvebben a  http://phon.ucl.ac.uk/home/sampa az awk-ra. címen olvashatunk. A második jel a kimondás hossza A feldolgozandó szövegnek egyszerû szövegként kell ms-ban, majd a hanglejtés (pitch) megadása következik, rendelkezésre állnia, vagyis a .doc, .pdf, és egyéb ehhez amely számpárokból áll: Az elsõ szám a fonémán belüli hasonló fájlokat elõbb tiszta szöveggé kell átalakítanunk. hanglejtés kezdetét adja meg, a második a frekvenciát A szöveg két szûrõn halad át, mielõtt hanggá (vagyis foné- hertzben (Hz). mák sorozatává) válik. A példa elsõ sora (_ 50 0 160) azt jelenti, hogy 50 ms-nyi A szam.awk kiszûri a zárójeleket és idézõjeleket, az szünetet tartunk úgy, hogy ennek 0%-ánál a frekvencia önálló betûket, egyes rövidítéseket kiejthetõvé tesz, 160 Hz kell legyen. A hanglejtési pontok egy lineáris hang- problémás szókapcsolatokat szétválaszt a számjegyeket lejtési görbét adnak meg. pedig szavakká alakítja.

www.linuxvilag.hu 2005. május 47 Szaktekintély

Az xttp.pl aztán az így megszûrt szöveget fonémákká ala- 1. táblázat A zenei alaphangok frekvenciái kítja. Az keletkezett fonéma állományt kell átadni az mbrola programnak úgy, hogy az a hu1 adatbázist használja. c3 d3 e3 f3 g3 a3 h3 c3 262 294.5 327.5 349 393 440 491 524 awk -f szam.awk <$1.txt >$11.txt perl xttp.pl $2 < $11.txt >$1.pho mbrola /usr/local/mbrola/hu1/hu1 $1.pho $1.wav 2. táblázat „Boci, boci, tarka...” play $1.wav rm -f $11.txt {Singing: 8,c2, 8,e2, 8, c2, 8, e2, 4,g2 4,g2 }. bo ci bo ci tar ka xttp.pl paramétere, melyet nem kötelezõ megadni, lehet m, f1, f2 vagy f3. A paraméter hiánya a legmélyebb nõi hangot jelenti, azaz megfelel az f1 paraméternek, f2 és f3 dik paraméter szám, akkor az annyiadik sorban kezdi meg egyre magasabb hangokat jelent, m pedig a férfihang. a fölolvasást. Íme néhány példa: Ha egy szövegállományt sikeresen átalakítottunk perl mesel.pl szoveg/olvasnivalo last szöveg.pho formátumba, akkor az mbrola azt wav formá- tummá alakítja, amit aztán egy tetszõleges hanglejátszó Ez esetben mesel_sorok.txt tartalma szabja meg, hogy hol © Kiskapu Kft. Minden jog fenntartva program le tud játszani. A legegyszerûbben a kezdi el az olvasást. play szöveg.wav perl mesel.pl szoveg/olvasnivalo 256

paranccsal tehetjük hallhatóvá mûvünket. (Alsa meghajtó Ekkor a 256-odik sornál kezdi el a fölolvasást. esetén az aplay parancsot kell használni). Íme két példa a do.sh (vagy do2.sh) használatára: Éneklés sh do.sh szoveg f1 Mivel a számítógép szemszögébõl az éneklés sem más, mint sh do.sh szoveg a hangképzés egy különleges esete, a mbrola énekelni is tud. A hunpo.tar.gz-ben mellékelt boci.txt állomány például a bo- Eljutottunk tehát odáig, hogy bármely szöveget fel tudunk ci-boci tarkát tartalmazza. A további mellékelt dalok a dam- olvastatni a géppel. Most koncentráljunk a finomabb igé- dam (damdam.txt), a király és a bolond (bolond.txt), szeret- nyekre. A mbrola fel tud olvasni hosszabb szövegeket, tud nék szántani (szantani.txt). Ha valakinek netán komponálni énekelni, a szöveg hanglejtését pedig grafikusan is megjele- támadt volna kedve, annak ajánlom figyelmébe az 1. tábláza- níthetjük vele. Ez utóbbi szolgáltatás a fonémaátalakító tot, amely az alaphangok frekvenciáit tartalmazza (hertzben). program javításánál jól használható. Gépünket a következõ egyszerû paranccsal fakaszthat- juk dalra: Hosszabb szöveg felolvasása sh do.sh szoveg/boci.txt Mivel hosszabb szövegek feldolgozása nagyon nagy wav állományt eredményezne, célszerû ezeket kisebb darabokba A rendszer hangzókészlete négy oktávnyi távolságot fog szabdalni és úgy fölolvastatni. Erre való a mesel.pl program, át, ami egy géptõl egészen szép teljesítmény. A hangok cn, amely a segedeszkozok könyvtárból futtatható. Az olvasandó ciszn, dn, diszn, en, fn, fiszn, gn, giszn, an, aiszn, hn állomány nevét a program paramétereként adhatjuk meg alakban adhatók meg. Az n egy szám, ami a hangmagassá- (a .txt végzõdés nélkül), az eredménynek pedig hozzuk got jelzi. 1 a legalacsonyabb, 4 a legmagasabb oktáv. A nor- létre a test nevû alkönyvtárat. mál zenei á hang (440 Hz) jele tehát a3. Minden hang elõtt A program kizárólag olvassa a neki átadott állományt, meg kell adni a hosszúságát is. 1 a leghosszabb, 16 a legrö- tehát annak tartalmát semmilyen módon nem változtatja videbb hang. Ezzel a jelölésrendszerrel a „Boci boci tarka” meg. Az éppen fölolvasott részt a kwrite segítségével a következõképpen fest: a képernyõn is mutatja. A megjelenítéshez használt prog- {Singing: 8,c2,8,e2,8,c2,8,e2,4,g2,4,g2}. ram a $szerkeszto változóval ízlés szerint változtatható. A $sor belsõ változó az egyszerre fölolvasott sorok szá- Az egyes szakaszok kiénekelt formáját a 2. táblázat mutatja. ma, szintén ízlés szerint beállítható. A mesel.pl program Látható, hogy az elsõ helyen a {Singing: betûsorozatnak hívása, ha a fölolvasandó szöveg a szoveg/olvasnivalo.txt kell állnia, majd ezt követik a hosszúság/hang párok, vesszõ- állomány: vel elválasztva. A sorozatot egy „}.” jelpár zárja. (A pont fontos a sor végén!) A {Singing: kezdetû sort követõ sor- perl mesel.pl szoveg/olvasnivalo ban van az énekelendõ szöveg. Ennek ugyanannyi szótag- A mellékelt mesel.sh állományt használva: ból kell állnia, mint ahány hangot megadtunk, és ezt is pont zárja a végén. Szintén lényeges, hogy a {Singing:-et meg- sh mesel.sh szoveg/olvasnivalo elõzõ szövegrészt ponttal kell lezárni, különben ezt lenyeli a program. A mesel.pl a mesel_sorok.txt fájlban feljegyzi, hogy éppen hol tart az olvasásban. Ha indításakor a második paraméter Egy mondat hanglejtésének grafikus megjelenítése a last szó, akkor a mesel_sorok.txt állományban levõ szám Néha nagy segítséget jelenthetnek a a show.pl illetve által kijelölt sornál kezdi el a szöveg olvasását. Ha a harma- a graph5.pl nevû Perl programok, amelyeket szintén

48 Linuxvilág Szaktekintély

A beszéd során néha sutto- 3. táblázat Az mbrola program kapcsolói: gunk és néha kiabálunk, Kapcsoló Leírás Példa Ezt, mivel a suttogás és kiabá- lás nem képezhetõ le ugyanar- h segítség a kapcsolókhoz mbrola -h ra a difonéma adatbankra csak i fonéma-adatbank információ mbrola -i /usr/local/mbrola/hu1/hu1 úgy lehet megoldani, ha egy e nem létezõ difonéma ne mbrola -e /usr/local/mbrola/hu1/hu1 helyett háromszor készletet okozzon megállást test.pho test.wav hozunk létre a difonémákból: egyet a suttogáshoz, egyet v hangerõ 1: alapállás, mbrola -v 1.1 /usr/local/mbrola/hu1/hu1 a normálishoz és egyet kiabál- <1: halkabb, >1: hangosabb test.pho test.wav va. Ez egyetlen szöveg keretén f hangmagasság 1: alapállás, mbrola -f 0.6 /usr/local/mbrola/hu1/hu1 belül lehetõvé teszi a három- <1: magasabb, >1: mélyebb test.pho test.wav féle szöveg kiadását, amit t beszédsebesség 1: alapállás, mbrola -t 1.2 /usr/local/mbrola/hu1/hu1 a német de6 és de7 difonéma <1: gyorsabb, >1: lassabb test.pho test.wav adatbankok esetébe már meg is oldottak.

A szegény ember beszédszintetizátora © Kiskapu Kft. Minden jog fenntartva A mbrola mögött megbúvó zseniális ötlet tulajdonképpen a difonémák használata. Ha van valaki, aki összeállítja egy adott nyelv difonémakészletét, azt kellõ monotoni- tással a gépbe mondja (azaz wav állományokat hoz létre) és ezekbõl adatbankot készít, akkor ezzel a rendszer tetszõleges szöveg felolvasására képessé válik. Ráadásul ehhez elegendõ például egy egyszerû Perl program, mely a felolvasandó szöveg difonémáit leképezi az adatbank difonémáira. Tegyük fel például, hogy az adatbank tartalmazza a követ- kezõ difonémákat:

_b, _a, ab, ba, aa, bb, _a, _b,

2. ábra ahol a _ jel szünetet jelent. Ezzel az adatbankkal a gép ki tudja mondani a „baba”, a hunpho.tar.gz csomagban találunk. Ezek a megadott „abba”, „a”, „bab”, „ba” szakavak és szóelemeket, illetve mondat hanglejtését egy képfájlba írják ki, amit aztán minden más, csak „a”-t és „b”-t tartalmazó szót. A megfelelõ bármelyik böngészõvel meg lehet tekinteni: Perl program mondjuk a „baba” szóhoz kikeresi a show.pl:teszt.png graph5.pl:file3.png _b ba ab ba a_ Ezek az eszközök a jobb fonetika kidolgozásában segítenek, vagyis az xttp.pl program javításában. A háló kedvelõi szá- difonémákhoz tartózó wav jeleket, majd ezeket egyetlen mára a szolgáltatás online is elérhetõ a következõ helyen: wav állománnyá alakítja. És ezzel meg is oldotta a baba szó http://pascal.kgw.tu-berlin.de/expressive-speech/online/ kimondását. synthesis/hungarian/en/ia-en.php. (Köszönet Astrid Paeschké- Problémát jelent, hogy az egyes difonémák összeköté- nek a Berlini Egyetemrõl a magyar adatbank integrálásáért!). sekor a találkozási pontban egyes esetekben keletkezhet egy kattanás, ha a hangerõ vagy a hangmagasság nem A fonéma-átalakító és a nyelvi adatbázis ugyanaz. Nyilván célszerû úgy kialakítani a szoftvert, továbbfejlesztése hogy állítható legyen a hangmagasság (pitch), a beszéd Elsõ lépésben a hangsúlyozást kell tökéletesíteni, hogy sebessége, valamint a hangerõ. Ezeknek a paraméterek- a kérdõ, felszólító, óhajtó, stb... mondatok intonációja he- nek a helyes megválasztásával kelthetjük a beszéd való- lyes legyen. A hely és idõbeli viszonyt kifejezõ szavakat diságának érzetét. Mindezt az mbrola program már most nem hangsúlyozzuk, (például „asztal alatt”). így a fonéma- is lehetõvé teszi. átalakító már ma is helyesen kezeli ezt. A német fonetika-átalakító (txt2pho) képes egyes szavak Más, nyílt forráskódú beszédszintetizátorok különféle hangsúlyozására. A „felástam a kertben a zöldség- Létezik nyílt forráskódú beszédszintetizátor is. Ilyen példá- ágyást” mondat esetében például a hangsúlyozandó szót ul a http://www.cstr.ed.ac.uk/projects/festival/ helyen elér- ki lehet emelni a szórenddel, de a hangsúlyozással is. hetõ Festival. Ehhez jelenleg csak angol, welsh és spanyol A következõ lépés a különféle érzelmeket (kétely, félelem, difonémakészlet létezik, valamint egy olyan kapcsolat, letörtség, jókedv, buzdítás, stb) kifejezõ szöveg helyes melynek segítségével az mbrola hangadatbankjait és szinte- hangsúlyozása lenne. tizáló képességét is felhasználja a Festival.

www.linuxvilag.hu 2005. május 49 Szaktekintély

Ehhez nagyon hasonló a CMU egyetem Festvox nevû A beszédfelismerés módszertana mára már annyira érett, terméke (http://festvox.org), melyhez szintén csak a fenti hogy nemsokára bizton számíthatunk a gyakorlatban is három hangadatbank létezik, de a dokumentációja leírja, használható beszédfelismerõk megjelenésére. Ezek a gépbe hogyan lehet japán adatbankot készíteni hozzá mondott szöveget írott alakra hozzák, ami szintén sok eset- (http://festvox.org/bsv/bsv-jpdiphone-ch.html). ben hasznos lehet. Egy értekezleten például a gép vezetheti A Festival szintetizátor Mandrake Linuxon 10.0 alatt ne- a jegyzõkönyvet, de diktálhatunk a gépi titkárnõnek levele- kem rögtön mûködött, de a hang kétszeres sebességû, ket és más szövegeket is. vagyis csipogó volt. Elolvasva aztán a gyakran ismételt Összehasonlításként talán nem árt áttekinteni a kereskedel- kérdések oldalt rögtön a második kérdésére adott válaszban mi termékek piacát sem. megtaláltam ennek az okát (http://www.cstr.ed.ac.uk/cgi- Magyarul összesen egyetlen olyan program létezik, amely bin/cstr/lists.cgi?config=festival_faq&entry=arunning_festi beszédfelismerésre és gépi szövegbevitelre képes. Ez a Phi- val/speed.html). A trükk annyi, hogy hogy létre kell hozni lips SpeechMagic nevû programja, mely azonban ármegje- a lib könyvtárban egy siteinit.scm állományt a következõ lölés nélkül szerepel a magyar weben. Az idegen nyelvû tartalommal: változat 850 dollárba kerül. Angol és német nyelven az IBM illetve a Scansoft Dragon (Parameter.set ‘Audio_Method ‘Audio_Command) nevû programja versenyez egymással, az IBM terméke (Parameter.set ‘Audio_Command “sox -t raw -sw -r a ViaVoice körülbelül 160 dollárba kerül, a Dragon pedig © Kiskapu Kft. Minden jog fenntartva $SR $FILE -c2 -t ossdsp /dev/dsp”) kiépítéstõl függõen 90 és 850 dollár közötti áron kapható. A fölismerési pontosság cégek szerint ma még csak 95%-os, Alsa hangmeghajtás esetén a második sor: ami nyilvánvalóan komoly utólagos feldolgozást tesz szük- ségessé. A pontosság a program betanítása után általában (Parameter.set ‘Audio_Command “aplay -fS16_LE -r javul, de ezt minden felhasználónak külön-külön kell $SR $FILE “) elvégeznie.

A Festival beszédszintetizáló és a Szfinx beszédfelismerõ Nyelvi megfontolások, algoritmusok programcsomagok azoknak az elszántabb embereknek A magyar nyelv esetén a ragozott alakok fölismerése jók, akik szeretnének a forráskódhoz hozzájutni és aki- nyilvánvalóan nem triviális, de mint a magyar ket érdekelnek azok a programtechnikai eszközök, me- helyesírásellenõrzõk minõsége mutatja, egyáltalán lyeket ezek a programcsomagok használnak, illetve akik nem lehetetlen feladat. Szerencsére az egyértelmû kíváncsiak mondjuk arra, hogy más hangadatbankok kiejtés a szükséges szótár méretét nagyon lecsökkenti milyen egyszerû fonémákból, trifonémákból vagy fölvett (különleges kiejtést kívánó nevek mint Széchenyi, szövegekbõl állnak, és ezekkel milyen hangminõséget Desewffy, vagy idegen szavak mint pszichológia tartoz- eredményeznek. nak a magyar szótárba.). Az angol nyelv esetén a rago- Mivel ezek a programcsomagok temérdek lehetõséget zott szavak problematikája ugyan minimális, a szótár- kínálnak, megértésük lényegesen idõigényesebb, mint nak viszont a teljes angol szókészletet fel kell ölelnie a most bemutatott mbrola használata. a kiejtés szóspecifikus volta miatt. sAz beszédszintetizáló alkalmazások száma manapság Az összehasonlításra az elterjedt módszer a HMM egyre nagyobb, képességeik pedig egyre jobbak. Könyvek, (Hidden Markov Model), mely alapjában statisztikai mód- cikkek, emailek fölolvasása mellett lehetõvé teszik, hogy szer. Elõnye a hullámösszehasonlítási módszerekkel szem- a számítógépet vakok is kezelhessék. Ez utóbbira több ben a gyorsaság. A szavak határának megállapítására linuxos projekt is létezik: a szintén statisztikai Viterbi algoritmus terjedt el, de el- képzelhetõek természetesen más módszerek is. A szinteti- http://developer.gnome.org/projects/gap/AT/Gnopernicus/ zálásra az egyszerûbb LPC (Linear predicting code) vagy http://www.kde-apps.org/content/show.php?content=18806 a komplikáltabb PSOLA (Pitch-Synchronous-OveraLap-Add) http://emacspeak.sourceforge.net/ módszerek a legelterjedtebbek. A szintetizálási módszerek iránt érdeklõdõk jó bevezetõt találhatnak Ezek közül talán a Gnopernicus a legelõrehaladottabb, de a http://tcts.fpms.ac.be/synthesis/introtts.html címen. még ez sem kész. Korlátozott felismerés illetve szövegszintézis Beszédfelismerés Olyan területeken, ahol kevés szó felismerése ele- A gépi beszéddel rokon, de lényegesen bonyolultabb té- gendõ, már próbaképpen bevezették a gépi szöveg- ma a gépi beszédfelismerés. Mûszaki szempontból, illetve felismerést. Ilyen például a vonat- vagy repülõjegy nehézségét tekintve a beszédfelismerés a kézírásos szöveg telefonos megrendelése, vagy a menetrendi tájékoztatók. gépi felismerésével egyenértékû feladat. (A kézírásos szö- Egyes bankok a korlátozott szövegfelolvasást használ- vegnél az írások különbözõsége mellett az igazi nehézséget ják például a folyószámla állásának lekérdezésére. az jelenti, hogy az egyes szavak közti üres jel nincs min- Ilyenkor a felhasználó a telefon billentyûin keresztül denhol bejelölve.) adja be a folyószámlaszámot, a gép pedig a fölolvassa A Carnegie-Mellon Egyetem több projektje is foglalkozik a folyószámla állását. a beszédtechnikával. (http://www.speech.cs.cmu.edu/, http://cmusphinx.sourceforge.net/html/cmusphinx.php). Klein Eleonóra

50 Linuxvilág Dobbantó

Ügyfeleink kezelése nyílt forráskódú CRM szoftverrel Használjuk ki a nyílt forráskódú, platform független CRM szoftverek elõnyeit az üzleti életben is. © Kiskapu Kft. Minden jog fenntartva

hogyan a Linux egyre nagyobb teret hódít nem A fenti idézetek inkább hasonlítanak egy-egy reklám szöve- csak a kiszolgálók, hanem a munkaállomások gére, sem mint pontos definícióra, ez nem véletlen, hiszen területén is, így jogosan merül fel az igény olyan a CRM rendszer egyben egy marketing eszköz is, amely szoftverA termékek iránt, melyekkel kedvenc operációs rend- ezen felül javítja az értékesítés és az ügyfélszolgálat haté- szerünket nem csak szövegszerkesztésre, levelezésre, bön- konyságát. gészésre tudjuk használni, hanem szó szerint „munkára” is foghatjuk. Sajnálatos módon jelenleg a piacon lévõ üzleti Miért lehet szükségünk a CRM rendszerekre? célú szoftverek nagy része csak egy operációs rendszert tá- Most egy pillanatra vonatkoztassunk el a fenti definícióktól mogat, így amennyiben egy másik operációs rendszert sze- és gondoljuk végig, hogy ha van egy vállalkozásunk, akkor retnénk használni, akkor szinte biztosak lehetünk abban, annak nyilván van valamiféle terméke, ez a termék lehet hogy le kell cserélni például a számlázó, vagy a raktárkész- fizikai termék, vagy szolgáltatás is. Tehát vannak ügyfele- let nyilvántartó programunkat is. Pedig ennek nem feltétle- ink, akik megveszik a mi termékünket, használják õket, nül kell így lennie. közben esetleg kérdéseik, problémáik merülnek fel. Ha elé- Ebben a cikkben most egy olyan CRM szoftverrel ismerke- gedett ügyfeleket szeretnénk, akkor az ügyfelek problémái- dünk meg, mely nem csak, hogy nyílt forrású, hanem plat- val, kérdéseivel foglalkoznunk kell, célszerû nyilvántartani form független is. Jelenleg szerintem már csak olyan válla- azt, hogy az egyes problémák megoldása folyamatban van- lati szoftverekben van jövõ, melyek több platform alatt is e, illetve, hogy azokat megoldottuk-e már. Kellemetlen tud képesek mûködni, vagy könnyen portolhatóak egyik plat- lenni egy elfelejtett, vagy idõben nem megoldott probléma. formról a másikra. Ezt úgy érzem, hogy mindenképpen Vegyük észre azt is, hogy a problémát nem feltétlenül az érdemes szem elõtt tartani, amikor olyan szoftvereket veze- a személy oldja meg, akivel az ügyfél egyeztetett, sõt lehet, tünk be, melyeket hosszú távon szeretnénk használni. Mivel hogy több ember kooperatív munkája szükséges egy prob- a CRM szoftverek hazai piaca csak most kezd kibontakozni, léma megoldásához. Tekintsünk most el a problémáktól, ezért még nem késtünk el azzal, hogy platform független, nyilván termékeink iránt mindig lesznek érdeklõdõk, cél- nyílt forráskódú szoftvert válasszunk erre a célra. szerû az érdeklõdõ ügyfelekkel történõ megbeszéléseket, tárgyalásokat is nyilvántartani, hiszen egyes érdeklõdõ Mi is az a CRM? személyek, cégek késõbb komoly üzleti partnereink lehet- A CRM, azaz Customer Relationship Management egy nek. Természetes követelmény lehet az is, hogy szeretnénk összetett fogalom, magyarul talán a legmegfelelõbb fordítá- látni beosztottjaink, kollégáink idõbeosztását is, így sokkal sa az Ügyfélkapcsolat Menedzsment lenne. Ellenben, hogy hatékonyabban tudunk elõre tervezni, láthatjuk, például ez a fogalom mit is jelent pontosan, arra úgy érzem, hogy a következõ hét fõ feladatait, így egy nagyon zsúfolt a következõ két idézet teljes mértékben rávilágít. hétre például inkább nem vállalunk el újabb munkákat, „A CRM olyan koncepció, amely a legértékesebb ügyfelek tárgyalásokat. Megfigyelhetjük kollégáink hatékonyságát azonosítására, megszerzésére és megtartására, valamint az is, illetve lehetõségünk van elõre látni lehetséges bevéte- ilyen ügyfélkör kibõvítésére szolgál, lehetõvé téve a folyama- leinket is. tos növekedést és az üzleti értékek fejlesztését.” (Atos Origin) A fent említett esetek természetesen csak példák, a CRM rendszerek ennél sokkal komplexebbek, és egy-egy CRM „A CRM olyan az egész vállalatot átfogó stratégia, melynek szoftver lehetõségeinek bemutatására sem ennek a cikknek, célja a jövedelmezõség, a bevétel és a vevõi elégedettség növe- sem pedig ennek az újságnak a terjedelme nem volna ele- lése. A CRM ezt a célt az ügyfélközpontú magatartás támoga- gendõ. Ugyanakkor megismerkedünk azokkal a minimum tásával, minden vevõcsatorna összekötésével éri el, úgy, hogy követelményekkel, mellyel minden CRM szoftvernek ren- a vállalatot az ügyfelek igényei szerint szervezi át.” delkeznie kell, és végül röviden bemutatom a SugarCRM (GartnerGroup) 2.5 OpenSource változatát.

www.linuxvilag.hu 2005. május 51 Dobbantó

Ismerkedés a CRM rendszerekkel Természetesen a CRM sem csodaszer, hiába oldjuk meg a problémákat gyorsan és hatékonyan, ha állandóan csak problémák vannak a termékünkkel, nem garantálja azt sem, hogy bevezetése után duplájára fog emelkedni a for- galom, és egyszer s mindenkorra piacvezetõvé lépünk elõ. De segítségével lehetõségünk van bizonyos folyamatok optimalizálására, szorosabb kapcsolatot tudunk kialakítani a partnereinkkel, meglévõ partnereinket nagyobb valószí- nûséggel tudjuk megtartani, és termékeinket nagyobb eséllyel tudjuk értékesíteni. Azért is választottam a SugarCRM szoftvert, mert a jelenleg elérhetõ nyílt forrású CRM szoftverek közül csak ennek volt megfelelõ magyar fordítása. Ugyanakkor szeretném megemlíteni, hogy na- gyon sok hasonló szintén szabad forráskódú CRM szoftvert lehet találni, de a cikk írása közben, és elõtte is nekem úgy 1. ábra tûnt, hogy jelenleg ez a termék fejlõdik a legdinamikusabb A kezdõlapon a legfontosabb adatainkról látunk összefoglaló képet © Kiskapu Kft. Minden jog fenntartva módon, tehát nem azért esett rá a választás, mert ez lenne az összes közül a legjobb, látni fogjuk, vannak jelenleg hiá- el. Itt a jelenlegi magyar fordításból indulok ki, még akkor is, nyosságai is. Tekintsük meg tehát, hogy mik a SugarCRM ha az néhány esetben nem pontosan fedi az angol fogalmat. 2.5 alapfunkciói: A Honlap (Home) menüpont alatt egy összefoglaló oldalt találunk az aktivitásokról, üzletekrõl, naptárról, és a teen- Ügyfélkapcsolat menedzsment: dõinkrõl, illetve hivatkozásokat tartalmaz új ügyek, ügyfe- • Felhasználók létrehozása, és kezelése. Ügyfelek hozzá- lek, feladatok felvitelére. A Honlap menüpont alatt egy rendelése a felhasználókhoz. összefoglaló nézetet látunk arról, hogy milyen eseményekre • Aktivitások listája (találkozók, hívások, feladatok, jegyze- kell koncentrálni az adott napon, a következõ napon, az tek opcionális csatolt fájl kezeléssel, és e-mailek) követése adott héten, vagy éppen a következõ héten. Az 1. ábrán kapcsolatok, ügyfelek, érdeklõdök, és üzletek esetén. a Home menüpont alatt található oldalt láthatjuk. • A felhasználókhoz Feladatok hozzárendelése, és lehe- A Saját Portál (My Portal) menüpont alatt lehetõségünk van tõség automatikus e-mail értesítésre az új feladatok megadni a kedvenc weboldalainkat, így azokat könnyen és esetén. gyorsan elérjük a SugarCRM-bõl, bár a weboldal a SugarCRM- en belül jelenik meg, ezért kisebb a látható felülete. Értékesítési támogatás: A Naptár (Calendar) menüpontban az elõre tervezett aktivi- • Összefoglaló nézet a következõ aktivitásokról, a legjobb tásokat láthatjuk többféle nézetben, illetve lehetõségünk üzletekrõl, a nyitott feladatokról, az érdeklõdõ ügyfelek- van a találkozók, feladatok, és hívások megtekintésére is. rõl, az értékesítési folyamatok vizsgálata, többféle naptár A Naptár lehetõséget biztosít arra, hogy a felhasználók nézet, új kapcsolatok gyors felvitele. megosszák egymással az idõbeosztásukat. • Érdeklõdõk létrehozása, és követése, az érdeklõdõk üzle- Az Aktivitások (Activities) menüpont alatt lehetõségünk tekké való konverziója. van felvinni új aktivitásokat, módosítani egy már meglévõ • Grafikus kimutatások készítése, az üzleti csatornák mu- aktivitást, vagy éppen keresni az aktivitások között. Az Akti- tatása, érdeklõdõk esetén az érdeklõdés forrás nyilván- vitásokat kezelhetjük a Felhasználók, Kapcsolatok, Érdeklõ- tartása, és az érdeklõdés eredményének nyilvántartása. dõk, Üzletek, vagy az Ügyek menüpontok alatt is. Ezáltal Ügyfélszolgálati támogatás: a SugarCRM lehetõséget biztosít arra, hogy hívásokat, talál- • Különbözõféle ügyek nyilvántartása, mely segíti a fel- kozókat, feladatokat, feljegyzéseket tudjunk követni annak használóknak az ügyfelek problémáinak, és döntéseinek érdekében, hogy egy komplex munkát elvégezzünk. A Fel- a követését mivel minden ügyet mint egy folyamatot adatok lehetõséget biztosítanak olyan eseményeket nyilván- tárol a rendszer. tartására, melyeknek egy bizonyos idõpontig be kell feje- • Mindegyik ügyet lehetõségünk van egy felhasználóhoz, zõdnie. A Jegyzetek segítségével feljegyzéseket tudunk ké- ügyfelekhez, feljegyzésekhez csatolni, és akár több hívás szíteni, illetve a jegyzetek mellé fájlokat is van lehetõségünk és személyes találkozó is kapcsolódhat az ügyhöz. csatolni. A Hívások segítségével a telefonhívásainak tudjuk nyilvántartani. A Tárgyalások hasonlóak a Hívásokhoz, de Közös, megosztott naptár: nyilván tudjuk tartani a tárgyalás helyszínét is. • A naptár megtekinthetõ napi, heti, havi vagy éves bon- A Kapcsolatok (Contacts) menüpont alatt lapozható listát tásban mindegyik aktivitás a hozzárendelt feladat listával látunk a kapcsolatainkról, illetve kereshetünk is közöttük. • Bepillantási lehetõség a többi felhasználó naptárába, Egy kapcsolatra kattintva rögtön megtekinthetjük annak hogy elkerüljük a konfliktusokat. fõbb tulajdonságait, egy kapcsolat rekordból linkek segít- ségével eljuthatunk a kapcsolódó Ügyfelek, Aktivitások, SugarCRM, te édes Érdeklõdõk vagy Ügyek listájához. A Kapcsolatok olyan Most ismerkedjünk meg a SugarCRM rendszer fõmenüjével, emberek, melyekkel a mi vállalatunk üzletet köt. Kapcsola- illetve, hogy az egyes menüpontnál milyen funkciót érhetünk tainkról sok hasznos információt tudunk eltárolni, például

52 Linuxvilág Dobbantó

közötti kapcsolatot teszik könnyebbé. Az Ügyek megkönnyí- tik az ügyfélszolgálat munkáját, a kérdések, és a problémák kezelhetõvé, követhetõvé válnak, mindegyik ügyhöz lehe- tõség van prioritást, és státuszt rendelni. Az ügyhöz tartozó lezárt, és nyitott Aktivitások is megjeleníthetõek.

SugarCRM: érvek és ellenérvek Minden egyes komplex szoftvertermék esetében sokféle ér- vet és ellenérvet tudunk felsorakoztatni a használat mellett, illetve ellen, most megpróbálom a szoftvert, nem mint CRM termék, hanem mint felhasználói szoftver tekinteni. Újfent szeretném kiemelni azt a tényt, hogy a SugarCRM platformfüggetlen, mind ügyfél, mind pedig kiszolgáló ol- dalon, sõt kliensként bármilyen böngészõ szoftver alkalmas arra, hogy elérjük vele az adatainkat. Mivel a SugarCRM már eleve internetböngészõn keresztül érhetõ el, ezért 2. ábra Új kapcsolat létrehozása, a felugró ablakban könnyen átlátható megfelelõ titkosítás esetén akár otthonról is képesek va- a naptárral gyunk rákapcsolódni, és ugyanolyan teljes értékû felületet © Kiskapu Kft. Minden jog fenntartva a személy beosztását, címét, vagy e-mail címét, ezeket a sze- érhetünk el, mint az irodából. A szoftver egyik elõnye mélyeket általában egy Ügyfélhez kapcsolódva tároljuk el, a platform függetlenség, ugyanakkor sajnos most meg kell de nem szükséges minden Kapcsolatot ügyfelekhez kötni. említenem, hogy a program egyelõre csak MySQL adatbá- Az 2. ábrán láthatunk egy üres kapcsolat oldalt, ahol lehetõ- zis kezelõvel képes mûködni, sajnálatos, hogy egyéb nyílt ségünk van új kapcsolatot rögzíteni. forrású adatbázis kezelõk nem támogatottak. Ha a program Az Ügyfelek (Accounts) menüpont alatt lapozható listát lá- használhatóságáról beszélünk, akkor érdemes megemlíteni, tunk az ügyfeleinkrõl, illetve kereshetünk is közöttük. Egy hogy a kezelõi felület nagyon szépen, logikusan van felépít- ügyfélre kattintva rögtön megtekinthetjük annak fõbb tulaj- ve, kimondottan a Honlap menüpont tetszik, melyen rög- donságait, egy ügyfél rekordból linkek segítségével eljutha- tön láthatjuk az adott napi teendõinket, és egyéb ügyein- tunk a kapcsolódó Kapcsolatok, Aktivitások, Érdeklõdõk ket, így szinte percek alatt újra munkába tudunk lendülni. vagy Ügyek listájához. Az Ügyfelek olyan vállalatok, me- Hiányolom, hogy a nyomtatás csak azt jelenti, hogy egy sal- lyekkel a mi vállalatunk üzletet köt. Ügyfeleinkrõl sok hasz- langoktól mentes HTML lapot kapunk, melyet kinyomtat- nos információt tudunk eltárolni, például a címét, alkalma- hatunk a böngészõvel, sokkal jobb lenne, ha mondjuk PDF zottaik számát, és tevékenységi körüket is. Lehetõségünk formátumban, vagy PS-ben is lehetõségünk lenne meg- van egy ügyfél alá több ügyfelet felvenni, ezáltal láthatjuk kapni az listákat. Ellenben CSV-be tudunk exportálni, így ügyfeleink közötti kapcsolatokat is. mondjuk például a Kapcsolatok könnyen kimenthetõek, Az Érdeklõdõk (Leads) menüpont alatt lapozható listát látha- és nyomtathatóak OpenOffice segítségével. tunk az érdeklõdõkrõl, illetve kereshetünk is közöttük. Egy A 2.5-ös verzióban megjelent a Bug Report, modul, ami sze- érdeklõdõt kiválasztva részletesen is megtekinthetjük a hoz- rintem hasznos lehet egy szoftver fejlesztõ cégnek, de más zá kapcsolódó aktivitásokat, illetve az egymás után követke- tevékenységû cégek szerintem nem használják, ezért próba- zõ aktivitások listáját. Az Érdeklõdõk olyan emberek, vagy képpen egy-pár felhasználónak kikapcsoltam a menübõl vállalatok, akikkel a saját vállalatunk elõre láthatólag üzletet ezt az opciót. A menübõl el is tûnt a hivatkozás rá, de pél- fog kötni. Asz Érdeklõdõk tipikusan a marketing osztály által dául az a Honlap menüpont alatti eszköztárban ettõl még az értékesítési osztálynak átadott lehetséges vásárlók. Az Ér- fel tudtam vinni új hibát, és szintén a Honlap menüpont deklõdõk modul úgy lett kialakítva, hogy követhetõvé válja- alatt látható volt az általam felvitt Bug-ok listája is. Szá- nak a lehetséges vásárlóval történõ elsõ lépések. Az Érdeklõ- momra ez elég furcsa volt, hogy így a modulokat nem dõk közé felvehetünk ügyfeleket automatikusan is, például tudom kikapcsolni, csak a fõmenübõl kiszedni. olyan személyeket, akik regisztrálják magukat a honlapunk. További hiányossága a szoftvernek, hogy egyelõre nincs Az Üzlet (Opportunities) menüpont alatt egy lapozható lis- megoldva benne a jogosultság kezelés, tehát a marketing tát kapunk az üzleteinkrõl, illetve kereshetünk is listában. osztályunk láthatja az ügyfélszolgálaton történõ eseménye- Egy üzletre rákattintva láthatjuk az üzlethez kapcsolódó ket, természetesen a fejlesztõk tervezik ennek a résznek nyitott aktivitások listáját, illetve az elõzményeket is. Az a teljes kidolgozását, de egyelõre még ezzel várnunk kell. Üzlet menüpont alatt lehetõségünk nyílik követni egy árú, vagy szolgáltatás értékesítési lépéseit egy potenciális vevõ- Horváth Ernõ ([email protected]) nek. Amikor egy érdeklõdõvel kezdõdnek meg az üzleti  tárgyalások, akkor már célszerû ügyfélként, vagy kapcsolat- KAPCSOLÓDÓ CÍMEK ként tovább kezelni az eseményeket. Az Ügyek menüpont alatt egy lapozható listát kapunk az  ügyekrõl, vagy éppen kereshetünk is közöttük. Egy ügyre SugarCRM: http://www.sugarcrm.com/ kattintva láthatjuk az adott ügy részleteit, ebben a nézetben SugarCRM (Sourceforge): hivatkozásokat találunk az összes kapcsolódó Aktivitásra,  http://sourceforge.net/projects/sugarcrm és Kapcsolatra. Az Ügyek az értékesítés és az ügyfélszolgálat

www.linuxvilag.hu 2005. május 53 Dobbantó

Samba Windowsban is otthon (4. rész)

A cikksorozat elõzõ részeiben az Olvasó megismerkedhetett a Samba alapvetõ használatával, azokkal a funkciókkal, amelyekkel egy Windows-os hálózatot ellátó kiszolgálót fel lehet építeni. Így az alapfunkciók tárgyalásának befejeztével rátér- nék azokra a funkciókra, amelyekkel az eddigieknél magasabb szinten tudjuk a rendszert a felmerülõ igényekhez alakítani. © Kiskapu Kft. Minden jog fenntartva

A hálózat tallózása A hálózat tartalmának tallózása egy pofon egyszerû dolog- nak tûnik. Megnyitjuk a Network neighborhood – a magyar Windows alatt Hálózatok – ablakot és ott megtalálható a há- lózatban jelenlévõ gépek listája. A listából egy tetszõleges gépet kiválasztunk, ráklikkelünk és máris tallózhatjuk az adott gép tartalmát. A mûködés bár tényleg egyszerûnek tûnik, rengeteg szolgáltatás egyidejû együttmûködését követeli meg. Elõször is a Windows kliensnek regisztrálnia kell magát a hálózatban és tudatni a rendszerrel, hogy mostantól õ is aktív résztvevõje annak. Majd ezek után a gépnek minden másik gép tudomására kell hozni a jelenlétét, hogy elérhe- tõvé váljon. Egy, vagy több gépnek a hálózatban listába kell gyûjtenie a hálózatban elérhetõ gépeket, és a belépõ mun- kaállomásnak ennél a gépnél regisztrálnia kell magát. A kli- ens gépeknek képeseknek kell lenniük arra, hogy a gépnév alapján meghatározzák egymás IP címét, hiszen egy TCP/IP alapú hálózatban a gépek címzése csak ezen a módon tör- ténhet. Végül pedig a kliens gépünk ezeken a szolgáltatáso- kon keresztül csatlakozni tud a kiszemelt célgéphez és elér- heti annak erõforrásait. A Samba rendszer nmbd komponense biztosítja, hogy a hálózat tallózása, a gépek listába gyûjtése megtörténjen. A Samba kiszolgálón, a konfigurációs állományban pedig állítható akár kézzel is, hogy melyik gép végezze a listába gyûjtést. Mivel alapesetben ezt a szerepet (úgynevezett 1. ábra Egy megosztás jogosultságai Windows alól nézve master browser) bármelyik hálózati gép megkaphatja annak terhelésétõl függõen, ezért az adott gép kiválásával elkép- kációt. A Windows kliensek hálózati kommunikációjának zelhetõ, hogy pillanatnyi fennakadás állhat elõ- Különösen egy része – így többek között a gépek felderítése – üzenet- igaz ez akkor, ha például munkaidõ végén a munkaállomá- szórással történik a hálózatban. Mivel azonban az útválasz- sok tömegesen hagyják el a hálózatot. Éppen ezért célszerû tók ezeket az úgynevezett broadcast üzeneteket nem enge- – természetesen a terhelések figyelembevételével – ezt dik át, így amennyiben nagyméretû, de legalábbis útválasz- a szerepet a kiszolgálóink valamelyikére kiosztani. tók által szabdalt hálózat esetén a Sambát úgy kell beállíta- ni, hogy unicast üzeneteket használjon. Ezen beállítások az A NetBIOS protokoll smb.conf állományban végezhetõek el. Unicast üzenetek A Samba a Windows hálózatokban használt NetBIOS proto- használata esetén a Sambát úgy kell beállítani, hogy kollon keresztüli kommunikációra is fel van készítve, ha- támogassa a WINS alapú névfeloldást. Amennyiben több sonlóan a Windows kliensekhez a Samba is képes a TCP/IP kiszolgálónk van a hálózatban, úgy lehetõségünk van fölött folytatni a NetBIOS protokollon keresztüli kommuni- a WINS kiszolgáló replikálására a hálózatban terheléselosz-

54 Linuxvilág Dobbantó

a szabványos DNS struktúrára épülve. Ebben az esetben a kliensek a hozzájuk tartozó tartományban automatikusan elvégzik a szükséges bejegyzések mó- dosítását. Active Directory használata esetén ez oly- annyira mûködik, hogy Active Directory létrehozásá- hoz szükség van egy megfelelõen beállított és mûködõ DNS kiszolgálóra. A dinamikus DNS használata több szempontból is jó dolog, egyfelõl egy szabványos, minden hálózati alkalmazás által támogatott protokollt használ, másfelõl nekünk a munka- állomásnak csak egy nevet kell adni, valamint egy DHCP által kiosztott IP címet és a cím-név összerendelés automa- tikusan megtörténik. Ez a módszer egy tökéletesen mûködõ megoldás Active Directory esetén, azonban mivel jelenleg a Samba nem mûködik Active Directory Serverként, ezért Samba tartománykiszolgáló használata esetén kénytelenek vagyunk NetBIOS-t használni. Amennyiben a Samba ki- szolgálónk egy Active Directory tagja, akkor természete- © Kiskapu Kft. Minden jog fenntartva sen a dinamikus DNS használata megoldható. (A linuxos dinamikus DNS használatához elõször tájékozódjunk a BIND9 leírásában!)

Munkacsoport tallózás beállítása Amennyiben a hálózatunkon munkacsoportokba gyûjtjük a munkaállomásokat és szeretnénk lehetõvé tenni a háló- 2. ábra Egy Debian kiszolgáló tartalma Windows alól zaton keresztüli tallózást, úgy a Samba kiszolgálónkat a hálózat úgynevezett Domain Master Browserévé kell tás és tartalékképzés céljából. Sajnos azonban jelenleg Win- tennünk. Ez nem azonos a tartományvezérlõvel, bár az dows és Samba kiszolgálók között ez a megoldás még nem elsõdleges tartományvezérlõ a hálózatban szintén ellátja támogatott, így amennyiben Samba kiszolgáló is van a háló- ezt a feladatot. A Domain Master Browser feladata, zatban és az „master browser” szerepet tölt be, úgy csak az hogy összegyûjtse a Local Master Browserektõl az adott az egy nmbd entitás futhat. alhálózatban szereplõ gépek listáját. A Domain Master Végezetül jegyezzük meg, hogy a névlisták összeállítása 15 Browser szolgáltatás hiányában a hálózatunk nem lesz perces intervallumonként automatikusan létrejövõ hálózati több, mint lokális alhálózatok csoportja, amelyek egymás- üzenetek alapján történik, így egy-egy pontos, jól mûködõ sal való kommunikációra Windows hálózat használatával lista elõállítása nagyobb hálózat esetén akár 45 percet is egyszerûen képtelenek. igénybe vehet. Egy munkacsoportos környezetben a Domain Master Nézzük meg gyorsan, hogy milyen úton is halad végig Browsernek a Samba kiszolgálót kell kijelölni és egy adott egy név feloldása egy Windows munkaállomásnál. Elõször munkacsoporthoz csak egy Domain Master Browser tartoz- a kliens megnézi a lokális hosts állományt, amely teljesen hat. Ennek a szerepnek a kiosztását a Samba konfigurációs hasonló a Linux rendszereken az /etc/hosts állományhoz, állományában tehetjük meg a domain master = yes paramé- csak ez a %SystemRoot%\System32\Drivers\etc könyvtár- ter megadásával. A Samba kiszolgálót érdemes úgy beállíta- ban található. Amennyiben a hosts állomány alapján nem ni, hogy a saját alhálózatának õ legyen a Domain és Local végezhetõ el a névfeloldás, akkor a kliens a beállított DNS Master Browsere egy személyben. Ehhez a globális beállítá- kiszolgálóhoz fordul a keresett gép IP címéért. Amennyi- sokat egészítsük ki a következõ bejegyzésekkel: ben a DNS sem tartalmaz bejegyzést a keresett géphévhez, akkor harmadik lépésben a NetBIOS cache kerül vizsgálat- [global] ra, majd pedig a beállított WINS kiszolgáló. Amennyiben domain master = yes egyik kiszolgáló sem tudott információval szolgálni, akkor local master = yes egy broadcast üzeneteken alapúló keresés indul és minden preferred master = yes gép megszólításra kerül, hátha válaszol a címzett. os level = 65 Amennyiben ez sem vezet eredményre, úgy utolsó lépés- ben a teljes LMHOSTS lekérdezésre kerül, amely alapértel- Ha ezzel megvagyunk, akkor gyõzõdjünk meg arról, hogy mezésben a %SystemRoot%\System32\Drivers\etc könyv- minden alhálózatunknak is megvan a saját Local Master tárban helyezkedik el. Browser gépe. Local Browser szerepére nem feltétlenül kell kijelölnünk egy Samba kiszolgálót, ezt a szerepet bármely Kommunikáció TCP/IP felett NetBIOS használata nélkül Windows munkaállomás betöltheti. Amennyiben azonban Az újabb Windows kliensek, mint a Windows 2000 és úgy döntünk, hogy a Samba végezze ezt a feladatot is, Windows XP már támogatják a lokális hálózat haszná- akkor a Local Master Browser gép beállításai közé vegyük latát a NetBIOS protokoll nélkül, teljes egészében fel az alábbi paramétereket:

www.linuxvilag.hu 2005. május 55 Dobbantó

[global] domain master = no local master = yes preferred master = yes os level = 65

Fontos azonban, ahogy Domain Master Browserbõl is csak egy lehet a hálózatban, Local Master Browserbõl is csak egy lehet az adott alhálózaton. Ha tehát beállítunk még egy Samba kiszolgálót erre a feladatra, akkor a két szerver csú- nyán össze fog veszni, aminek az lesz a következménye, hogy szép ki hálózati forgalmat generálnak, mellesleg nem is fognak rendesen mûködni. Ha végeztünk a hálózati struktúra kialakításával, akkor most nézzük meg, hogy miként is tudjuk a megosztásokon a hozzáférési jogokat beállítani, akár megosztásonként kü- lönbözõ módon. Erre nagy szükségünk lehet egy bonyolul- 3. ábra Egy tartomány, ahol egy Debian a kiszolgáló © Kiskapu Kft. Minden jog fenntartva tabb felhasználói struktúra esetén és az adatok biztonság érdekében nagy odafigyelést igényel. • SePrintOperatorPrivilege – Ezek a felhasználók menedzselhetik a nyomtatókat. Tartományi felhasználók és munkaállomások Amennyiben Samba kiszolgálót használunk Windows tarto- • SeAddUsersPrivilege – Ezzel a jogosultsági szinttel mány kezelésére, úgy a rendszerben természetes módon rendelkezõ felhasználók új felhasználókat és csoporto- létre kell hozunk azokat a felhasználókat, akiknek a késõb- kat adhatnak a tartományhoz. biekben tartományi elérést szeretnénk biztosítani. Ekkor a felhasználó egyfelõl bekerül a Linux passwd állományába, • SeRemoteShutdownPrivilege – Ezzel a joggal rendelke- másfelõl a Samba háttér adatbázisába. A felhasználók keze- zõ felhasználók használhatják a tartományban a távoli lése mellett szükség van továbbá azokra a munkaállomá- leállítás funkciót. sokra is, amelyeknek lehetõséget szeretnénk biztosítani a tartományi eléréshez, így ezeket a munkaállomásokat is • SeDiskOperatorPrivilege – Ezek a felhasználók pedig nyilván kell tartani. A munkaállomások nyilvántartása egy szabályozhatják a lemezeke kiosztását. helyen történik a felhasználók tárolásával, annyi különb- séggel, hogy ezek az objektumok speciális felhasználói fiók- Jogosultságok megadása a megosztásokra ként jönnek létre. A specialitás abban jelentkezik, hogy Az elõbb áttekintettük, hogy miként lehet az egyes felhasz- a felhasználói név $ karakterrel kezdõdik, valamint az alap- nálóinkhoz jogosultsági csoportokat rendelni, most pedig értelmezett munkakörnyezet a /bin/false, tehát ilyen fel- nézzük meg, hogy miként lehet az egyes megosztásokhoz használó a UNIX rendszerbe nem tud belépni, valamint a felhasználóink hozzáférését szabályozni. a saját könyvtára a /dev/null, tehát semmilyen személyes Azt szeretnénk elérni, hogy a különbözõ megosztáso- adat nem kerül tárolásra. kat a rendszerben az egyes felhasználók láthassák, A munkaállomás felhasználói fiókjának létrehozása akkor vagy éppen ne láthassák, az ott lévõ állományokat történik, amik a Windows-zal csatlakoztatjuk a munkaállo- megnyithassák olvasásra, vagy éppen írásra, továbbá mást a tartományhoz. Ezt a mûveletet minden esetben csak hasznos lenne az is, ha adott megosztásra a megosztást tartományi rendszergazda jogokkal bíró felhasználó teheti elérõ felhasználók egy adott felhasználói jogosultsággal meg – mint alapesetben a root felhasználó. végeznének munkát. Windows rendszerekben megszokott dolog, hogy bizonyos Mivel a windowsos és a UNIX-os felhasználói jogosultság felhasználói körökhöz speciális jogokat lehet rendelni, így filozófiája jelentõsen különbözik egymástól, ezért a jogo- például a tartományhoz való munkaállomás csatolást. Ilyen sultságok megfeleltetés és kialakítása nem egyszerû fel- egyedi jogkörök kialakítása jelenleg még nem támogatott, adat. Látnunk kell, hogy a két rendszer alapfelfogása kü- de a Samba 3.0.11-es verziótól kezdve folyamatosan fognak lönbözõ. Míg a UNIX rendszerekben a történelmi gyöke- ezek a funkciók is bekerülni a rendszerbe. rek, az akadémiai felhasználás miatt egy-egy dokumen- A felhasználók jogosultsági szintekhez való hozzárende- tum tulajdonosa és ezáltal a jogosultságok kiosztására lése úgy fog kinézni, hogy egyfelõl engedélyezni kell hivatott felhasználó az adott dokumentumot létrehozó majd a Samba beállításai között ezt a funkciót a enable egyén, addig a Windows rendszerekben a kereskedelmi privileges = yes paraméter beállításával, valamint struktúra miatt egy-egy dokumentum nem a létrehozó- az egyes jogosultsági szintekhez hozzá kell adni a fel- jának, hanem a rendszer felügyelõje által beállított sze- használókat. mély, vagy csoport tulajdonába kerül. Ez a szemléletbeli Jelenleg (3.0.11-es változat) a következõ öt szint létezik: különbség kis problémát jelent, ám ügyes szervezéssel könnyen áthidalható, méghozzá oly módon, hogy egyes • SeMachineAccountPrivilege – Ezek a felhasználók vélemények szerint a végén egy könnyebben átlátható gépeket csatolhatnak a tartományhoz. és karbantartható rendszert kapunk.

56 Linuxvilág Dobbantó

1. táblázat Paraméter Leírás Használat admin users Ebbe a listába felsorolt felhasználók az adott megosztásra admin users = user1, user2 rendszergazdai jogokkal rendelkeznek, így minden olyan utasítást végre tudnak hajtani, amit a super-user végrehajthat. force group Ennek a paraméternek adott érték azt a UNIX csoportot force group = users jelenti a rendszerben, amelynek tulajdonába fog kerülni minden az adott megosztáson elhelyezett állomány. force user Hasonlóan mûködik a force group-hoz, csak itt felhasználót force user = root kell megadni. guest ok Amennyiben ez a paraméter aktív, akkor az adott megosztás guest ok = yes/no elérésére jelszó és hitelesítés nélkül is lehetõség van. Érdemes a nyilvános mappák használatánál alkalmazni.

invalid users Ez egy nagyon hasznos beállítási lehetõség, felsorolhatjuk invalid users = user1, user2 © Kiskapu Kft. Minden jog fenntartva azokat a felhasználókat akiket explicit nem akarunk hozzáférési joggal felruházni. Nagyon hasznos, ha sok felhasználó esetén egy-két felhasználót kell letiltani. only user Ez szintén egy bináris kapcsoló, bekapcsolva beállíthatjuk, only user = yes/no hogy csak csak olyan felhasználókkal kezdeményezett kapcsolatok épüljenek ki, ahol a felhasználó neve szerepel a felhasználói listában. read list A read list listában felsorolt felhasználók jogosultak az read list = user1, user2 adott megosztáson olvasási joggal hozzáférni a tárolt adatokhoz. A read only paraméter beállításától teljesen függetlenül ezek a felhasználók csak olvasási joggal fognak a megosztáson rendelkezni. valid user Amennyiben implicit módon szeretnénk egy megosztásra valid user = user1, user2 definiálni azon felhasználók körét, akik hozzáféréssel rendelkeznek a megosztáshoz, akkor a valid user listába kell õket felvenni. Azok a felhasználók akik nem szerepelnek a listában hozzáférés megtagadása hibaüzenetet fognak kapni. write list A read list-hez hasonlóan ebben a listában azokat write list = user1, user2 a felhasználókat kell felsorolni, akik írási joggal is rendelkeznek a szóban forgó megosztáson.

Talán a legegyszerûbb megoldás, ha a rendszerben meglévõ Ezzel sikerült is áttekintenünk a Samba és a Windows dokumentumokat két részre bontjuk. Az egyik a minden fel- rendszerek közötti jogosultságkezelési megoldásokat, használó által elérhetõ publikus anyagok, a másik az egyes amelyek segítségével a legbonyolultabb felépítésû háló- felhasználók által használt privát, vagy bizalmas anyagok. zat kialakítása sem jelenthet problémát. Mielõtt azonban Érdemes ezek után a struktúrát oly módon kialakítani, erõbõl nekiesünk egy-egy hozzáférés kialakításának, hogy a publikus, közös anyagokat egy külön kiosztás kere- fordítsunk idõt a tervezésre, mert egy felhasználók tében oly módon tesszük közzé, hogy ahhoz minden fel- által elfogadott és programokba beállított struktúra átala- használó korlátlan módon hozzáférjen. kítása sok problémával és fejfájással járhat. Jobb az ilyet A bizalmas jellegû, vagy csak néhány felhasználó által hasz- messze elkerülni. nált anyagokat pedig olyan könyvtárstruktúrában helyez- A sorozat következõ részében folytatjuk a Samba haladó zük el, amit aztán a Linux kiszolgálón az adott felhasználó funkcióinak áttekintését, addig is mindenkit arra ösztön- személyes mappájába – a HOME kiosztásba – linkelés útján zök, hogy próbálgassa a fent leírtakat. helyezünk el. Ez a megoldás már egy egész jó jogosultságkezelést biztosít, Illés Viktor ([email protected]) ám elõfordulhat, hogy szeretnénk olyan megosztásokat 23 éves, a BME mûszaki informatikus szakának készíteni, amit egyes felhasználók csak olvashatnak, mások hallgatója, mellette weblapokkal, linuxos írhatnak, míg megint mások nem is láthatnak. Erre szolgál- és windowsos rendszerekkel foglalkozik. nak az alábbi paraméterek, amelyeket a Samba konfiguráci- Szabadidejét legszívesebben a szabadban tölti, ós állományában az adott megosztásnál kell elhelyezni. teniszezik és kerékpározik.

www.linuxvilag.hu 2005. május 57 Dobbantó

FreeBSD – a szomszéd vár (7. rész) Tûzfal készítése

A fájlrendszer megtekintése után elérkeztünk a FreeBSD igazi területéhez, a hálózat ki- szolgálásához. Ezen belül elõször egy olyan területet vizsgálunk meg, amely szinte min- den hálózati rendszer esetén alapfeladat: tûzfallal védeni egy számítógépet. Ehhez alap- vetõen szükségünk lesz egy hálózati csomagszûrõ programra, vagy tûzfal programra. © Kiskapu Kft. Minden jog fenntartva

Mi az a tûzfal? induló támadások ellen is védettek a számítógépek, és A tûzfalak két hálózatot elválasztó eszközök, bõvebb érte- a vállalaton kívüli támadásoktól is. Ebben a cikkben inkább lemben ezek teszik lehetõvé, hogy megszûrjük a rajtuk átfo- a személyes tûzfalak kialakításáról szólok, a a vállalati tûz- lyó a be-, illetve kimenõ forgalmat. Ennek értelmében a tûz- falakkal következõ részben foglalkozunk. falak feladata a belsõ (személyes) hálózat számára különféle szolgáltatások nyújtása, illetve ésszerû korlátozások alkalma- Milyen eszközeink vannak a megvalósításhoz? zása. Gondoljunk csak általánosságban arra az esetre, ami- Linux esetén minden feladatot a rendszermagba ágyazott kor egy cég a széles sávnak becézett vékonyka ADSL kap- modulokkal, és a modulokat kezelõ iptables programmal csolattal tartja a világhálóval a kapcsolatot. Az ADSL sávszé- tudunk megoldani. FreeBSD esetén a feladatok szét vannak lessége ugyanis nagyon sok mindent kibír, amíg meg nem választva, illetve több eszközt is használhatunk, ezek az jelenik a belsõ hálózaton néhány notórius (film)letöltögetõ IPFilter (IPF), az IPFirewall (IPFW) és a PacketFilter (PF). kolléga, akik miatt a többi munkatárs esetleg a munkájában Az IPFW tartalmaz sávszélesség korlátozó eszközt lesz akadályozva. Érdemes ebben az esetben egyfajta letölté- (DummyNet), amely kényelmesen használható. Az IPF ilyet si korlátozást bevezetni, így egyenlõ esélyt adni minden dol- nem tartalmaz, de használhatjuk hozzá az AltQ programot gozónak. Szolgáltatás tekintetében megfontolandó a web a ports adatbázisból. A PF az OpenBSD rendszerbõl szárma- adatforgalmát gyorstáron átvezetni, ezzel – kismértékben zik, szintén kényelmes eszköz a tûzfal elkészítéséhez. Én ugyan, de – gyorsíthatjuk a böngészést. az IPFW programot használom, így ezt fogom bemutatni, A tûzfalak fõ feladata a csomagok szûrése, s ez sok feltétel- de a többi eszköz is pont ennyire használható. tõl függhet: a feladó vagy a címzett IP címétõl, a forrás vagy cél porttól, a csomagok állapotától vagy az integritásától. Az IPFW beállítása A szûrés mindenképpen magasabb biztonságot jelent, bár A rendszermag már tartalmazza modulként a jelenlegi az túl erõteljes korlátozás a munkát is zavarhatja. FreeBSD terjesztések esetén a szükséges komponenseket, így nem kell újrafordítanunk a rendszermagot. Milyen tûzfalak vannak? A /etc/rc.conf állományhoz kell a Az elkészített tûzfalak két nagy csoportba sorolhatók: meg- firewall_enable=”YES” engedõ és tiltó. Az elõbbi csoport alapvetõen minden forgal- mat enged, és ezt tudjuk szabályokkal szûkíteni. A tiltó tûz- sort hozzáfûznünk, és a következõ induláskor már mûkö- fal mindent tilt, és szabályokkal lehet engedélyezni a meg- dik is az IPFW rendszermag modul. Természetesen nem határozott forgalmat. Az elõbbi kényelmesebb, a második kell újraindítani a kiszolgáló gépünket, mivel az ipfw nevû biztonságosabb. A másik csoportosítási mód szerint léteznek modul betöltésével azonos eredményt érünk el úgynevezett „stateful” tûzfalak, amelyek a kapcsolat kiépíté- $ kldload ipfw.ko sétõl egészen annak megszûnéséig követik az adatokat, ezzel egy sor biztonsági problémát megakadályoznak (csak így a következõ induláskor az rc.conf szerint fog a modul olyan hálózati csomagokat engednek át, amelyek egy új betöltõdni. Ellenõrizzük le, hogy mûködik-e a tûzfal prog- kapcsolatot nyitnának, illetve egy már létezõhöz tartoznak). ram, a rendszermag üzenetei között meg kell látnunk az Megkülönböztetünk személyes és vállalati tûzfalakat is. alábbi sort: Az elõbbiek egy-egy gépet védenek a „külvilágtól”, a válla- ipfw2 initialized, divert disabled, rule-based lati tûzfalak a vállalat minden számítógépét a külvilágtól. forwarding disabled, default to deny, logging Szokás a két tûzfalat kombinálni, így a belsõ hálózat felõl disabled

58 Linuxvilág Dobbantó

Különféle finomítások Gondolhatnánk, hogy ezzel megoldottunk minden szüksé- A tûzfal beállítása során a legfontosabb, hogy értesüljünk ges beállítást, azonban ez kevésnek bizonyul: a szabályok mûködésérõl, illetve a program üzeneteirõl. Eh- $ ping -c 1 10.1.1.211 hez a naplózást be kell állítani, és ideiglenesen bõbeszédû PING 10.1.1.211 (10.1.1.211): 56 data bytes naplózást is beállíthatunk. Ehhez a sysctl programmal a $ sysctl net.inet.ip.fw.verbose=1 --- 10.1.1.211 ping statistics --- 1 packets transmitted, 0 packets received, 100% parancsot kell kiadnunk (vagy ezt be is írhatjuk packet loss a /etc/sysctl.conf állományba). Az rc.conf állományban megadhatjuk a tûzfalszabályokat A hiba kiírása ugyan megszûnt, a csomagok vígan átjutnak tartalmazó állomány nevét, amely alapértelmezés szerint a tûzfalon, elérik a célként megnevezett gépet is, onnan a /etc/rc.firewall. a válaszcsomag visszaindul, a tûzfalunkon azonban fenna- firewall_script=”/etc/ipfw.rules” kad. Hozzá kell vennünk a szabályokhoz egy újabb sza- bályt, amely engedi a forgalmat a mi gépünk felé: Az ipfw program A rendszermag modulja valósítja meg a tûzfalat, illetve ke- $ ipfw add 2 allow ip from any to me zeli annak szabályait. A modul mûködését egy programmal 00002 allow ip from any to me © Kiskapu Kft. Minden jog fenntartva tudjuk, amely ipfw névre hallgat. Ha betöltöttük a modult, $ ipfw list akkor azonnal elvágtuk magunkat a külvilágtól, mivel 00001 allow ip from me to any a program minden forgalmat tilt, amely a hálózati csatolófe- 00002 allow ip from any to me lületeken át folyna. A modul betöltésétõl óvakodjunk olyan 65535 deny ip from any to any gépen, amelytõl fizikailag messze vagyunk, mivel izzasztó meglepetés érhet minket: nem férünk hozzá a géphez S már mûködik is a kommunikáció, a csomagok oda-vissza a hálózaton át. Ezt az alapvetõ viselkedést a rendszermag átjutnak a személyes tûzfalon. IPFIREWALL_DEFAULT_TO_ACCEPT opciójával tudjuk elkerül- PING 10.1.1.211 (10.1.1.211): 56 data bytes ni, de ez biztonsági megfontosálok okán nem ajánlatos. 64 bytes from 10.1.1.211: icmp_seq=0 ttl=64 Az alapértelmezett viselkedésrõl a parancs list opciójával time=0.308 ms gyõzõdhetünk meg: $ ipfw list Naplózás beállítása 65535 deny ip from any to any A napló vezetése nagyon fontos a hibakeresésnél és A 65535 szám már sejteni enged egy korlátot: a szabá- a visszakereshetõ dokumentálás okán. Általában a vissza- lyok maximális száma mindössze ennyi lehet. A számok utasított kapcsolatokat szoktuk naplóba vezetni, a legális szerint kerül ellenõrzésre az adott szabály, a tiltás tehát fogalom naplózása feleslegesen rabolja a gépidõt, illetve a legutolsó a sorban; ha lenne elõtte bármilyen másik idõrabló az elemzése is. A feladatunk mindössze annyi, szabály, akkor elõször azt értékeli ki. A tiltás ténye igen hogy a naplózni kívánt szabálynál az allow (accept, stb) látványos a programok felõl, ugyanis jogosultsági problé- kulcsszó után felvesszük a log kulcsszót is: mára panaszkodnak majd a hálózatot használni kívánó $ ipfw add 3 allow log ip from 10.1.1.211 to me programok: A fenti szabály mûködéséhez azonban az elõtte lévõ másik $ ping -c 1 10.1.1.211 szabályt át kell mozgatni e szabály utáni pozícióra, ugyanis PING 10.1.1.211 (10.1.1.211): 56 data bytes az elkapja az összes (any) beérkezõ csomagot. Ezt egy tör- ping: sendto: Permission denied léssel majd egy új hozzáadással tudjuk megtenni:

--- 10.1.1.211 ping statistics --- $ ipfw show 1 packets transmitted, 0 packets received, 100% 00001 981 77572 allow ip from me to any packet loss 00002 88 39287 allow ip from any to me 00003 577 160451 allow log ip from 10.1.1.211 to me Új szabály hozzáadása nagyon beszédes formában történik, 65535 1687 294213 deny ip from any to any az ipfw parancssora olyan, mintha angolul elmondanánk $ ipfw delete 2 a kívánságainkat: $ ipfw add 4 allow ip from any to me 00004 allow ip from any to me $ ipfw add 1 allow ip from me to any $ ipfw show 00001 allow ip from me to any 00001 1313 101607 allow ip from me to any $ ipfw list 00003 14 5486 allow log ip from 10.1.1.211 to me 00001 allow ip from me to any 00004 0 0 allow ip from any to me 65535 deny ip from any to any 65535 1879 326108 deny ip from any to any

Ezzel a szabállyal engedélyeztük a saját címrõl (me) az Ha mindent jól csináltunk, akkor a /var/log/security állo- összes másik cím (any) felé induló csomagok továbbítását. mányban megjelennek a naplózott forgalmak:

www.linuxvilag.hu 2005. május 59 Dobbantó

ipfw: 3 Accept TCP 10.1.1.211:110 10.1.1.210:63187 Ha kapcsolódni szeretne valaki, akkor errõl értesülni fogunk: in via fxp0 ipfw: 2 Unreach 0 TCP 10.1.1.211:58164 last message repeated 8 times 10.1.1.210:22 in via fxp0

Éles helyzetben jól jöhet, hogy megadhatjuk a maximális Miközben a kapcsolódni vágyó az számát a naplózott soroknak (gondoljunk csak egy jól kivi- ssh: connect to host 10.1.1.210 port 22: No route telezett DoS támadásra). Ezen sorok számát lehetõségünk to host van globálisan, illetve szabályokra lebontva meghatározni. Globálisan a üzenetet kapja. Az unreach paraméterét (net) változtatva $ sysctl net.inet.ip.fw.verbose_limit=100 szinte bármilyen „hibát” elõ tudunk állítani.

parancs állítja be ezt, s így minden egyes szabály csak 100 Tûzfal programocska sorral szaporítja a naplóállományunkat, ezzel elegendõ infor- A firewall_script paraméterében megadott állományt mációt szolgáltatva a hibákról (vagy támadásokról). Érdemes feltölthetjük a kialakított tûzfal szabályokkal, így minden rendszeresen nullázni a naplózott sorok számát, amely a rendszerinduláskor megfelelõen fog mûködni a személyes $ ipfw resetlog tûzfalunk. Az adott állomány tartalma lehet például a kö- vetkezõ pár sor: © Kiskapu Kft. Minden jog fenntartva parancs hatására fog bekövetkezni, így például minden nap tiszta lappal indulhat a naplózás. ipfw -q -f flush Egyes szabályok esetén külön megadhatjuk a naplózott ipfw add 100 allow ip from me to any sormennyiséget, egyszerûen a logamount n paramétert ipfw add 200 unreach net log ip from any to me kell megadnunk: dst-port 22 $ ipfw add 10 allow log logamount 4 ip from ipfw add 300 allow log ip from 10.1.1.211 to me 10.1.1.211 to me ipfw add 400 allow ip from any to me

Szûrés port szerint Érdemes az egyes szabályok számozását megfelelõen Személyes tûzfal esetén érdemes szûrni néhány portra, nagy különbségre hagyni, így könnyedén kettõ meglévõ így meghatározhatjuk a legális szolgáltatásokat, amelyeket szabály közé tudunk egy újabbat szûrni különösebb a helyi hálózat számára használni engedünk. A megoldás- nehézség nélkül: hoz egyszerûen csak a megadott IP címek mögé kell írni a port számát: ipfw add 200 unreach net log ip from any to me dst-port 22 $ ipfw add 2 allow log ip from any to me 22 ipfw add 250 allow log ip from 10.1.1.211 00002 allow log ip from any to me dst-port 22 to me dst-port 80 $ ipfw list ipfw add 300 allow log ip from 10.1.1.211 00001 allow ip from me to any to me 00002 allow log ip from any to me dst-port 22 00003 allow log ip from 10.1.1.211 to me További lehetõségek 00004 allow ip from any to me Az ipfw parancs többi lehetõsége a kézikönyve oldalain 65535 deny ip from any to any megtalálható, illetve a következõ részben – egy a vállalati tûzfal ismertetésével – sok más hasznos tulajdonságát A naplózást tehát kicseréljük, és csak azon csomagokat kér- ismerhetjük meg. jük a naplóba írni, amelyek a gépünk 22-es portjára (SSH) érkeznek, s a security állományban látnunk kell a kéréseket: Auth Gábor ([email protected]) ipfw: 2 Accept TCP 10.1.1.211:55978 10.1.1.210:22 Egy pécsi középiskolában informatikát és prog- in via fxp0 ramozást oktat. Tíz éve botlott elõször a UNIX rendszerekbe, 7 év Linux használat után kapta Ha naplózás és engedélyezés helyett eldobnánk a csomagot el a FreeBSD lázat, amibõl máig nem tudott (drop), vagy hibát küldenénk vissza (unreach), akkor egy kigyógyulni.

kis változtatással ez is könnyedén mehet:  KAPCSOLÓDÓ CÍMEK $ ipfw delete 2 $ ipfw add 2 unreach net log ip from any to me 22  00002 unreach net log ip from any to me dst-port 22 A FreeBSD projekt honlapja: http://www.freebsd.org $ ipfw list A magyar FreeBSD honlap:  http://www.freebsd.hu 00001 allow ip from me to any A magyar BSD honlap:  http://www.bsd.hu 00002 unreach net log ip from any to me dst-port 22 00003 allow log ip from 10.1.1.211 to me A kézikönyv magyar fordítása  00004 allow ip from any to me http://www.enaplo.hu/FreeBSD/handbook/ 65535 deny ip from any to any

60 Linuxvilág Dobbantó

Az eFltk bemutatása (2. rész)

Alapvetõ elemek és ablakok.

gy grafikus elemkészlet megismerésénél fontosnak ménykezelõ eljárásban az adatai alapján tudunk megkülön- tartom, hogy megvizsgáljuk a legtöbb elem alapját böztetni. Lássunk egy példát arra is, hogy hogyan tudjuk E © Kiskapu Kft. Minden jog fenntartva képezõ osztályokat, mint amilyen az eFltk-ban beállítani az eseménykezelõ eljárást. A példában egy gomb a Fl_Widget. Amint az késõbb is látható lesz majd, ebben az lenyomásához tartozó eljárást állítjuk be: eszközkészletben az elemek elnevezése bizonyos megszoká- sokat mutat. Mivel az eFltk õse az Fltk, így az abban megta- button1->callback((Fl_Callback*)call_back, NULL); lálható elnevezéseket követték a szerzõk, vagyis az Fl_ karakterek után következik az elem mûködésére utaló név. Vagyis látható, hogy típuskonverziót kell végeznünk, hogy Kezdjük tehát az egyik legfontosabb elemmel, hiszen ennek beállíthassuk az esemény kezeléséhez készített eljárásokat megismerése a legtöbb elem esetén használható osztály- és függvényeket. Az elemek színének beállítására szolgál függvényeket biztosít számunkra. Ez az elem az Fl_Widget a color() osztályfüggvény. Paramétereként egy Fl_Color nevet viseli. típusú értéket vár, melyet elõállíthatunk az fl_rgb_color() Az osztály létrehozására alkalmas konstruktor legkevesebb függvény segítségével. Ez utóbbi függvénynek paraméter- négy, de legfeljebb öt paramétert vár. Az elsõ kötelezõen ként a kívánt vörös, zöld és kék összetevõket kell átadni, meghatározza az elem kezdeti helyzetét és méretét, és ötö- visszatérési értéke pedig a megfelelõ típusú szín lesz. dikként megadhatjuk még az elem feliratát meghatározó Az image() és a deimage() osztályfüggvények Fl_Image karakterláncot. típust várnak, és meghatározható segítségükkel, hogy az Az elsõ néhány függvény a grafikus elem aktív állapotára elem aktív- és inaktív állapotában milyen képet jelenítsen vonatkozik (active(); active_r(); activate(); meg a grafikus elem. deactivate()). Ha egy elem aktív állapotban van, akkor A label() metódus segítségével adhatjuk meg az elem képes az események kezelésére és azokat meg is kapja az címkéjének feliratát, míg a labelcolor() (szintén Fl_Color eseménykezelõ ciklusban. Az active() és az active() típusú paraméterrel) a címke színét határozza meg. függvények a lekérdezésre szolgálnak (az _r itt a rekurzióra A show() és a hide() függvények segítségével megjelenít- utal vagyis az active_r() függvény csak akkor tér vissza hetjük vagy elrejthetjük az adott grafikus elemet, míg igaz értékkel, ha az adott elem és annak minden szülõje is a visible() és a visible_r() függvényekkel lekérdezhet- képes fogadni az eseményeket. jük a láthatóságát meghatározó információkat. Itt szintén Az elemek feliratának igazítását az align() eljárással ál- a _r változat szolgál a szülõk állapotának lekérdezésére. líthatjuk be. Ahogyan a grafikus tervezõben is láthatjuk A grafikus elem mérete és helyzete beállítható a size() és a feliratokat többféle módon igazíthatjuk a vezérlõn belül. a position() eljárások segítségével, míg ezen információk Ezeket az igazítási módokat az FL_ALIGN_ kezdetû változók lekérdezésére a w() (szélesség), a h() (magasság), x() (x- határozzák meg. koordináta) és az y() (y-koordináta) függvények alkalmasak. Az egyik legfontosabb függvény a callback() mellyel meg- A resize() eljárással a méretet és a helyzetet egyszerre ál- határozhatjuk az eseménykezelõ függvényt. Általában egy líthatjuk be, az elsõ két paraméterben átadva az új helyze- eljárásról vagyis visszatérési érték nélküli void típusú függ- tet meghatározó értékeket, majd a harmadik és a negyedik vényrõl van szó, amint az alábbi listán is látható. paraméterben az új méretet adjuk meg. A redraw() és a redraw_label() eljárások segítségével is- void call_back(Fl_Widget* w, void* data) mételten kirajzolhatjuk a grafikus elemet vagy annak cím- { kéjét, míg a damage() függvény visszaadja, hogy szükség eseménykezelõ_utasítások(); van-e újbóli kirajzolásra. Amennyiben az elemet valami el- } takarta az idõk során, akkor a damage() függvény nullától különbözõ értéket ad vissza. A függvénynek két paramétere van, az elsõben kapja meg, Fontos még megismerni a tooltip() függvényt is, hiszen hogy melyik grafikus elem hívta meg az adott eseményke- ennek segítségével hozhatjuk létre vagy kérdezhetjük le zelõ eljárást, míg a másodikban az adott elemhez tartozó a grafikus elemhez rendelt gyorstippet. Amennyiben az el- felhasználói adatokat kapjuk. Így hasonló elemeket az ese- járásnak egy karakterláncot adunk át paraméterként, akkor

www.linuxvilag.hu 2005. május 61 Dobbantó

2. ábra 1. ábra eFltk kérdezõablak eFltk többszörös választás

a gyorstipp beállításáról gondoskodik, míg ha nem adunk paramétert, akkor annak lekérdezésérõl. Ez utóbbi megol- dás a legtöbb eFltk-ban használatos osztályfüggvényre igaz. Hasznos lehet még a window() osztályfüggvény, melynek segítségével lekérdezhetjük a grafikus elemhez tartozó Fl_Window típusú objektumot. Egy valódi ablak esetében azonban ügyelni kell arra, hogy a függvény nem az adott © Kiskapu Kft. Minden jog fenntartva ablakhoz tartozó mutatót adja vissza (hiszen annak segítsé- 3. ábra eFltk beviteli ablak gével hívtuk meg), hanem az aktuális ablak szülõablakát kapjuk visszatérési értékként. A gyakorlatban majd látni fogjuk, hogy valójában az objek- tum-orientált megközelítés mennyire leegyszerûsíti a prog- ramozók dolgát. Nem kell más csak egy jó referencia és egy ábra az osztályhierarchia felépítésérõl és máris tisztában va- gyunk a lehetõségeinkkel és eldönthetjük, hogy valóban er- re az eszközkészletre van-e szükségünk. Javaslatom szerint, ahol kicsi és gyors programokra van szükség, ott minden- képpen érdemes fontolóra venni az eFltk használatát. Így röviden áttekintve a fontosabb osztályfüggvényeket, egy nagyon hasznos lehetõségre szeretném felhívni a ked- ves olvasók figyelmét. Az eFltk-ban és már az elõdjében is találkozhatunk elõre elkészített párbeszédablakokkal. Következzen ezek áttekintése, megismerése és alkalmazása. 4. ábra Az ismerkedés után már megpróbálhatjuk elkészíteni az el- Állományválasztó sõ programunkat, ami ugyan kezdetben nem csinál majd semmi hasznosat, de azt legalább felhasználói azonosító és Több lehetõséget is felajánlhatunk a kedves felhaszná- jelszó bekérése után teszi. Itt láthatjuk majd igazán az elõre lóknak a programok használata során, mégpedig az elkészített párbeszédablakok használatát. fl_choice() függvény segítségével. A függvény elsõ para- Lássuk tehát az eFltk-ban használható párbeszédablakokat métere a kérdés szövege, majd a további három paraméter szép sorjában. Ahhoz, hogy használatba vehessük ezt a le- határozza meg a választások szövegét. Így összesen három hetõséget be kell illesztenünk a megfelelõ fejléc állományt. lehetõséget ajánlhatunk fel a felhasználóknak. Az alapértel- Ezt az alábbi makró segítségével tehetjük meg: mezett választás a középsõ gomb, melyet szintén az ENTER billentyûvel választhatunk ki. Ebben az esetben a függvény #include visszatérési értéke 1 lesz. Az ESC billentyû hatására a vissza- térési érték 0, és szintén kiválasztható a jobb oldali gomb Az elsõ, és legegyszerûbb az eldöntendõ kérdések megjele- segítségével. A bal oldali gomb lenyomásával a visszaadott nítésére alkalmas IGEN/NEM párbeszédablak. Az ablakot érték 2 lesz. A 2. ábrán láthatjuk a többszörös választás meg- elõvarázsolhatjuk egy egyszerû fl_ask() hívással. A függ- jelenítésére szolgáló ablak képét. vénynek csak a kérdés szövegét kell megadnunk paramé- A következõ egyszerû párbeszédablak arra szolgál, hogy terként, majd a visszatérési érték alapján eldönthetjük, a felhasználótól adatokat kérjünk be. Itt egyszerûen szö- hogy mit választott a felhasználó. Amennyiben ez az érték veges adatokat olvashatunk be, az fl_input() függvény 1, akkor a felhasználó vagy az ENTER billentyûvel vagy a Yes segítségével. A függvény elsõ paramétere a beviteli mezõ gombra kattintva válaszolt, míg 0 visszatérési érték esetén felirata, második paramétere az alapértelmezett érték. a No gombot alkalmazta a felhasználó. Ez utóbbi eset meg- Amennyiben a felhasználó megszakítja a bevitelt, a vissza- felel az ‘ESC’ billentyû lenyomásának. Az 1. ábrán látható térési érték NULL lesz. A 3. ábrán látható egy egyszerû adat- egy ilyen párbeszédablak. beviteli párbeszédablak. A következõ ilyen párbeszédablak az fl_alert() függ- Jelszavak bevitelére alkalmas az fl_password() függvény. vény segítségével érhetõ el és egy egyszerû figyelmeztetõ Paraméterezése megegyezik az fl_input()-nál megadot- üzenet megjelenítésére alkalmas. A függvény paramétere takkal, de a felhasználó által leütött karakterek helyén * az üzenet szövege. karaktereket jelenít meg az eFltk.

62 Linuxvilág Dobbantó

tására van szükség, használhatjuk az fl_select_dir() függvényt. Elsõ paramétere a kiindulási útvonal, a máso- dikban adhatjuk meg az ablak feliratát. Amennyiben a fel- használó kiválaszt egy könyvtárat a függvény visszatérési értéke ennek elérési útja lesz. Mindegyik állomány- és könyvtár választó párbeszédablak- ról elmondható, hogy ha nem választunk ki semmit, vagyis a felhasználó az ESC billentyûvel vagy a ‘Mégsem’ gomb használatával bezárja az ablakot, akkor az elõbbi függvé- nyek NULL értékkel térnek vissza. Az állományok kiválasztására szolgáló ablakok mûködését néhány elõre definiált változóval befolyásolhatjuk. Az fc_initial_w egész érték határozza meg, hogy milyen széles legyen a párbeszédablak, míg az fc_initial_h ama- gasságot befolyásolja. A képek elõnézetének megjelenítését az fc_initial_preview logikai típusú változó megfelelõ beállításával kapcsolhatjuk be vagy ki. Most lássunk egy egyszerû példát az alkalmazásunk indí- © Kiskapu Kft. Minden jog fenntartva tása elõtti felhasználó azonosításra. Az elõzõ rész alapján a main() függvényben jelenítjük meg az alkalmazás fõ ablakát, azonban célszerû az ellenõrzést még az ablak meg- jelenítése elõtt megtenni. A korábbi példában a fõprogram 5. ábra Könyvtárválasztó így kezdõdött.

Az fl_message() megegyezik a korábban bemutatott int main (int argc, char **argv) { fl_alert() ablakkal, de ebben az esetben nem figyelmezte- tést jelzõ felkiáltójelet, hanem egy információt jelzõ ‘i’ ikont make_window(); láthatunk a párbeszédablakban. window->show(); A párbeszédablakok ikonját megváltoztathatjuk, ha az } fl_message_icon() függvény által visszaadott Fl_Widget objektumban a képet kicsréljük egy általunk beolvasott Az ellenõrzés legyen a lehetõ legegyszerûbb, lássunk képre. Ahogyan korábban már láttuk, erre szolgál az is hozzá. Elsõ lépésben ellenõrizzük a felhasználónevet Fl_Widget->image() osztályfüggvény. a make_window() elõtti sorokban, majd amennyiben Természetesen az üzenetek betûkészletének megváltoztatá- azt helyesen adja meg a felhasználó, következhet a jelszó sára is van lehetõség, mégpedig az fl_message_font() bevitele. függvénnyel. A függvény két paramétere a betûkészlet (FL_HELVETICA, FL_HELVETICA_BOLD, FL_HELVETICA_ITALIC, const char* pass=NULL; FL_TIMES, FL_TIMES_BOLD, FL_TIMES_ITALIC, FL_COURIER, const char* azon= FL_COURIER_BOLD, FL_COURIER_ITALIC) és a betûméret. fl_input((const char*)”Kerem adja meg Érdemes megjegyezni, hogy a betûkészlet és az ikonok a nevet:”,(const char*)NULL); megváltoztatása csak a változás után megjelenített párbe- if (!strcmp(azon, (const char szédablakokra van hatással. *)”rendszergazda”)) { A párbeszédablakok sorában a leginkább összetett az pass=fl_password((const char *)”A jelszot állományok kiválasztására alkalmas állományválasztó is kerem:”, “”); ablak. Megjeleníthetõ az fl_select_file() függvény if (strcmp(pass, (const char*)”jojelszo”)) { meghívásával, melynek három paramétert adhatunk át. fl_alert(“Nem jo jelszo! Kilepes!”); Az elsõ paraméter a kiindulási könyvtár, a második az abort(); állományok szûrésére alkalmas minta, a harmadik para- } méter az ablak címe. A 4. ábrán látható egy ilyen állo- } else { mányválasztó ablak, melyben éppen JPG képet keresünk fl_alert(“Nem jo azonosito! Kilepes!”); a könyvtárakban. abort(); Természetesen az eFltk készítõi nem csupán egyes állomá- } nyok kiválasztására szolgáló párbeszédablakot készítettek, hanem a meglévõ eszközök segítségével több állományt is Amint látható ismét nem túl bonyolult a megoldás, kijelölhetün. Erre szolgál az fl_select_files() függvény, köszönhetõen annak, hogy az eFltk-ban a készítõk melynek paraméterei megegyeznek az elõbbiekben bemu- nagy tapasztalattal rendelkezõ programozók, akik tisz- tatott fl_select_file() paramétereivel egyezik meg. tában vannak egy grafikus elemkészlet készítése során A függvény visszatérési értéke egy karakterlánc lista vagy felmerülõ igényekkel. NULL, amikor nem választunk ki egyetlen állományt sem. Amennyiben a felhasználói programban könyvtár kiválasz- Fábián Zoltán

www.linuxvilag.hu 2005. május 63 Dobbantó

Egy csipetnyi Swing és egy leheletnyi JFreeChart Hogyan készítsünk mutatós felhasználói felületet pillanatok alatt Javaban? Tippek és trükkök a platformfüggetlenség jegyében.

© Kiskapu Kft. Minden jog fenntartva grafikus alkalmazások a számítógéppel most is- kat, kizárólag annak a függvénye, hogy elkészült-e merkedõk számára mindig barátságosabb eszkö- már a Java Virtuális Gép (JVM, Java Virtual Machine) zöknek bizonyulnak, mint a parancssoros progra- az adott platformra. Amok. Éppen ezért, ha feltesszük, hogy a világegyenletet Nézzük tehát, mit kínál a Java. Kezdetben grafikus felhasz- megoldó szoftverünknek nem kizárólag a legszakavatot- nálói felületek létrehozására az AWT (Abstract Windowing tabb kezek alatt is jó szolgálatot kell tennie, érdemes felru- Toolkit) állt rendelkezésünkre. Az eszközkészlet absztrakt háznunk valamilyen grafikus felhasználói felülettel (GUI, jellegét az adja, hogy kizárólag olyan elemek találhatók graphical user interface). Nézzünk körül, milyen fejlesztési meg benne, amelyek minden, JVM-et futtató operációs eszközök állnak rendelkezésünkre! rendszer grafikus felületén elõfordulnak, és ezek megjelení- A Linuxvilág hûséges olvasói számos megoldást láttak már téséért a gazda rendszer felelõs. Vagyis egy nyomógomb a problémára, mind más írók, mind jómagam tollsából. Windows alatt windowsosan, Unix alatt „motifosan” néz ki. A lap hasábjain jelentek meg írások a Tk eszközkészletrõl, Ez azt is jelenti sajnos, hogy a grafikus felületek által bizto- és ennek több programozói környezetben elõforduló válto- sított grafikus elemek legszûkebb metszete érhetõ csak el zatáról, így a Perl/Tk-ról és a Tcl/Tk-ról. Olvashattunk a Qt a programozó számára. könyvtárról és a GTK-ról is, melyek C/C++-ból felhasznál- Ezt követte a Swing megjelenése. A Swing egy olyan ható függvénykönyvtárak. Természetesen a felsorolás a tel- részhalmaza a Java függvénykönyvtárnak, amelyet tel- jesség igénye nélkül készült. jesen Javaban írtak. Egyáltalán nem használja a gazda Ezen eszközkészletek egy része szkriptekbõl felhasználható. rendszer nyújtotta elemeket, ami azt jelenti, hogy min- Ezek egyik problémája, hogy nem elõfordíthatók, így a fu- dent saját maga rajzol ki. Ebbõl eredõen a Swinget tási idõ ezeknél a lehetõ legnagyobb. Léteznek kerülõutak használó Java alkalmazások minden rendszer alatt ennek kiküszöbölésére, de ezek a módszerek még nem ki- ugyanúgy néznek ki. A kinézet stílusok révén befolyá- forrottak. Az elõfordított nyelvekkel az a gond, hogy még solható, ez az úgynevezett „Look&Feel”. Ezzel jelen a forráskód szintû hordozhatóság biztosítása is nagy körül- írás nem foglalkozik, alkalmazásunk az alapértelmezett tekintést és komoly programozói gyakorlatot igényel. Léte- Metal kinézettel bír. zik ezek után megoldás? Aki használta már az AWT-t, könnyen megbarátkozik Nem tettem volna fel a költõi kérdést, ha nem igen volna a Swinggel is, mivel a régi elemek új neve csak annyiban a válasz. A megoldást pedig a Java programnyelv jelenti. változik, hogy ott áll egy „J” betû az elején. Vagyis pél- Látom lelki szemeim elõtt, ahogy most százan és ezren dául Frame helyett JFrame-et fogunk használni. A névro- húzzák fel egyszerre az orrukat. Be kell látni, a Java nem konság nem önkényes, nagyon sok elem régi metódusai egy paripa. Igen, lassabb a C++-nál, és sokkal lassabb nem változtak, és ezért ugyanúgy használhatók, mint a C-nél. Cserébe viszont bájtkód szinten hordozható korábban. Viszont néhány helyen alapvetõ változások a különbözõ operációs rendszerek között, és egy nagyon történtek, így a JFrame esetében is. Nem hívható meg kényelmesen használható, gazdag függvénykönyvtárral többek között egy JFrame-re az add() metódus egy elem bíró objektum-orientált környezet. Továbbá az elvakult hozzáadásához, mint a régi Frame esetében. Ezért mindig szkripthívõk is beláthatják, hogy a Java gyorsabb egy legyen nyitva egy böngészõablakban a Java API progra- átlagos szkriptnyelvnél. mozás közben! Fontos, hogy belássuk, a cél határozza meg az eszközt, és Jelen írás keretében egy menüvel rendelkezõ grafikus alkal- ennek mindig így kell lennie. Ha követelmény a hordozha- mazást fogunk létrehozni. A menübõl modulokat lehet kivá- tóság, kézenfekvõ megoldást jelenthet a Java. A bájtkóddá lasztani, és mindig a kiválasztott modul jelenik meg az ab- történõ fordítás természetesen nem egyetemes válasz min- lakban. Ezért a fõprogram mellett minden modul önálló osz- den kérdésre, így sebességben sohasem fogja utolérni a na- tályt fog képviselni. Lesz egy olyan modulunk, amely egy tív kódot. Ezzel szemben a Java használatával az, hogy diagrammot rajzol ki, ráadásul dinamikusan változó adat- mely operációs rendszerek képesek futtatni alkalmazásun- sorral. Vágjunk is rögtön bele, mert elég sok dolgunk van!

64 Linuxvilág Dobbantó

kilepes = new JMenuItem(“Kilépés”); A fõprogram kilepes.setAccelerator(KeyStroke.getKeyStroke  // Monitor.java (“control K”)); import java.awt.*; kilepes.addActionListener(this); import java.awt.event.*; fajlMenu.add(kilepes); import javax.swing.*; menuSor.add(fajlMenu); ablak.setJMenuBar (menuSor); public class Monitor implements ActionListener { ablakTartalom = ablak.getContentPane(); private JMenuItem kilepes; elrendezesKezelo = new CardLayout(); private JCheckBoxMenuItem altalanos, memoria, ablakTartalom.setLayout(elrendezesKezelo); nevjegy; ablakTartalom.add(new MonitorAltalanos(),  private Container ablakTartalom; ALTALANOS); private CardLayout elrendezesKezelo; ablakTartalom.add(new MonitorMemoria(), MEMORIA); private static final String ALTALANOS = ablakTartalom.add(new MonitorNevjegy(),  “Általános információk”; NEVJEGY);

private static final String MEMORIA = “Memória © Kiskapu Kft. Minden jog fenntartva használat”; ablak.setDefaultCloseOperation  private static final String NEVJEGY = “Névjegy”; (JFrame.EXIT_ON_CLOSE); ablak.setBounds(100, 100, 640, 480); public Monitor() { ablak.setVisible(true);

JFrame ablak = new JFrame(“Monitor”); }

JMenuBar menuSor = new JMenuBar(); public void actionPerformed(ActionEvent esemeny) { JMenu fajlMenu = new JMenu(“Fájl”); JMenu modulMenu = new JMenu(“Modul”); Object forras = esemeny.getSource(); ButtonGroup modulCsoport = new ButtonGroup(); altalanos = new JCheckBoxMenuItem(ALTALANOS, if (forras == altalanos) { true); elrendezesKezelo.show(ablakTartalom, ALTALANOS); altalanos.setAccelerator(KeyStroke.getKeyStroke } else if (forras == memoria) { (“control A”)); elrendezesKezelo.show(ablakTartalom,  altalanos.addActionListener(this); MEMORIA); modulCsoport.add(altalanos); } else if (forras == nevjegy) { modulMenu.add(altalanos); elrendezesKezelo.show(ablakTartalom,  memoria = new JCheckBoxMenuItem(MEMORIA); NEVJEGY); memoria.setAccelerator(KeyStroke.getKeyStroke } else if (forras == kilepes) { (“control M”)); System.exit(0); memoria.addActionListener(this); } modulCsoport.add(memoria); modulMenu.add(memoria); } nevjegy = new JCheckBoxMenuItem(NEVJEGY); nevjegy.setAccelerator(KeyStroke.getKeyStroke public static void main(String[] args) { (“control N”)); nevjegy.addActionListener(this); new Monitor(); modulCsoport.add(nevjegy); modulMenu.add(nevjegy); } fajlMenu.add(modulMenu); fajlMenu.addSeparator(); }

Bár kizárólag a Swing által biztosított eszközkészletbõl men történõ kattintás eseményének a kezelése. Három dolgozunk, vannak osztályok, amelyek kizárólag a jó öreg publikus tagfüggvénye van: a konstruktor, amely a grafikus AWT-bõl érhetõk el. Így az eseménykezeléshez használt felületet építi fel, az actionPerformed(), amely az elõbb em- ActionListener interfész, amely a java.awt.event csomag lített eseményeket dolgozza fel, illetve egy statikus main(), része, vagy a CardLayout nevû, elrendezéskezelõt osztály, melynek nincs más feladata, mint hogy létrehozzon egy pél- melyet a java.awt csomagban találunk. Ezért importáljuk dányt az alkalmazásból. Az osztály privát tagváltozóit elsõ a névtérbe a java.awt, a java.awt.event, és használatukkor, a konstruktor bemutatásánál részletezem. a javax.swing csomagok összes elemét. A konstruktor feladata a grafikus felület felépítése. Elsõ so- Monitor nevû osztályunk megvalósítja az ActionListener rában létrehoz egy JFrame objektumot, ez fogja képviselni interfészt, mivel ennek lesz a felelõssége a menüben egy ele- az ablakunkat. Az átadott paraméter az ablak címe.

www.linuxvilag.hu 2005. május 65 Dobbantó

Ezt követi egy nagyobb rész, amiben a menüt hozzuk létre. össze annyiban különbözik a Modul menü elemeitõl, hogy Egy igen egyszerû menüsort építünk fel, egyetlen Fájl me- nem rendelkezik jelölõnégyzettel, és így nem is tartozik nüvel, amiben van egy Modul lenyíló menü valamint egy a gombcsoportba. Kilépés menüpont. A Modul menübõl további menüpontok A menü létrehozását követõ rövidebb rész az ablak tartal- választhatók ki. mát építi fel. Fontos különbség az AWT-ben található Egy Swing menü a következõképpen fest: egy JMenuBar ob- Frame-hez képest, hogy a JFrame-re nem hívható meg jektum képviseli a teljes menüsort, ennek létrehozása után közvetlenül az add() metódus. Elõször le kell kérdezni kell hozzárendelni az ablakhoz annak setJMenuBar() me- az ablaktartalmat képviselõ Container objektumot és tódusával. A menüsor menükbõl áll, melyeket egy-egy ennek lehet használni az add() tagfüggvényét. Elõször JMenu objektum képvisel. Egy menü további menüket is tehát ezt kérdezzük le. Majd létrehozunk egy CardLayout tartalmazhat, ekkor ezek lenyíló menükként jelennek meg. elrendezéskezelõt. Ennek az a különlegessége, hogy Az egyes menüpontokat JMenuItem objektumok jelentik. a tartalmazott objektumok közül mindig csak egyet mutat, A JMenuItem õsosztálya az AbstractButton, emiatt van a többit háttérben tartja. Neve is onnan ered, hogy ha- addActionListener() metódusa, és eseménykezelése egy sonlítható egy kártyapaklihoz, melynek csak a legfelsõ közönséges nyomógombhoz hasonló. eleme látható. Alkalmazásunkban a Modul almenü jelölõnégyzettel ellá- Az ablaktartalom elrendezéskezelõjét beállítjuk tott menüpontokból áll, melyeket a JCheckBoxMenuItem a létrehozott objektumra a setLayout() metódussal. © Kiskapu Kft. Minden jog fenntartva osztály valósít meg. Ez a JMenuItem osztályból származik. Majd egyesével felvesszük a modulokat az add() A menüpontok közül mindig pontosan egy aktív, hiszen metódussal, mindegyiknek azt a szöveges nevet adva, a felhasználó az ablakban mindig egy modult lát, a menü amely a menüben is szerepel. Tehát a nagybetûs állan- az ezek közti váltást valósítja meg. Ezt a ButtonGroup osz- dók, az ALTALANOS, a MEMORIA, és a NEVJEGY nem csupán tály használatával értem el. Egy ButtonGroup objektum egy a JCheckBoxMenuItem létrehozásakor játszottak szerepet, gombcsoportot képvisel, melyhez az add() metódussal lehet mint a menüpontok feliratai, hanem a hozzájuk tarto- hozzávenni egy nyomógombot. Az objektum felelõssége, zó kártyalap nevei is egyben. Ezzel a névvel lehet hogy a csoportba tartozó gombok közül mindig csak az késõbb hivatkozni arra a kártyalapra, amelyet felülre egyik legyen kiválasztva. kívánunk tenni. Nem menü a menü gyorsbillentyûk nélkül. A JMenuItem Minden modulunk a JPanel osztályból ered, ezért ad- osztály, s így a JCheckBoxMenuItem osztály is, rendelkezik hattuk õket hozzá az ablaktartalomhoz ilyen egyszerûen. egy setAccelerator() metódussal. Ez egy KeyStroke A konstruktor végén még néhány egyszerûbb beállítást objektumot vár paraméterként és a megadott billentyû- találunk. Meghatározzuk az alapértelmezett mûveletet kombinációt hozzárendeli ahhoz a menüponthoz, amelyre akkor, ha az ablak bezárását kezdeményezi a felhasználó meghívták. A KeyStroke objektum létrehozása jelen eset- az ablakkezelõn keresztül. Beállítjuk az ablak méreteit, ben az osztály getKeyStroke statikus metódusának meghí- pozícióját, és végül láthatóvá tesszük. vásával történik, amely a paraméterében szövegesen meg- Az actionPerformed() metódus a menüpontok valamelyi- fogalmazott billentyûkombinációból készít egy KeyStroke kén történõ kattintáskor fut le. Elõbb meghatározzuk az objektumot. esemény forrását, majd ettõl függõen elvégezzük a szüksé- Lássuk tehát sorról sorra, mi történik a menü felépítése- ges mûveletet. Megjelenítjük a kívánt modult, vagy kilé- kor! Elsõként készítünk egy menüsort, melyet menuSor- pünk a programból. Látható, hogy a menüpontok feliratai- nak nevezünk el. Ezután létrehozunk két menüt, az val azonos nevû oldalak segítségével ez milyen egyszerûen egyiket fajlMenu-nek, a másikat modulMenu-nek ne- megvalósítható. vezzük el. Ne felejtsük el, egy menün belül található Lássuk most az „Általános információk modult”!. Ez táblá- lenyíló menü is ugyanolyan, mint az õt tartalmazó. zatos formában mutatja be a rendszertulajdonságokat leíró Ezután létrehozunk egy gombcsoportot, és mivel változókat. a Modul menü elemeit fogjuk majd egybe ezzel, modulCsoport-nak nevezzük el. import java.util.*; Ezután három, nagyon hasonló lépéssorozat következik, import java.awt.*; a Modul almenü három menüpontjának létrehozásához. import javax.swing.*; Elõbb létrehozzuk a menüpontot, mint egy import javax.swing.table.*; JCheckBoxMenuItem objektumot. Az elsõ konstruktorában jelezzük, hogy már ki van választva. A menüpontokhoz public class MonitorAltalanos extends JPanel { beállítunk egy gyorsbillentyût. Ezután jelezzük, hogy a menüpont kiválasztásához tartozó eseménykezelõt je- private class AdatModell extends len osztály tartalmazza. Hozzávesszük a gombcsoporthoz AbstractTableModel { a menüpontot. Végül hozzáadjuk a modulMenu-höz. Miután mindhárom JCheckBoxMenuItem elkészült, s ezzel private Vector adatok; feltöltöttük a modulMenu-t, a fajlMenu objektum add() metódusát meghívjuk a modulMenu-vel és így hozzávesszük public AdatModell() { a menühöz. Ezután az addSeparator() tagfüggvény segít- Properties rendszerTulajdonsagok = ségével beteszünk egy elválasztó vonalat a Modul menü System.getProperties(); alá. Végül elkészítjük a Kilépés menüpontot, amely mind- adatok = new

66 Linuxvilág Dobbantó

Vector(rendszerTulajdonsagok.size()); Az AdatModell konstruktora a System osztály Enumeration kulcsok = getProperties() metódusa segítségével lekérdezi rendszerTulajdonsagok.keys(); a rendszertulajdonságokat. Sajnos ez közvetlenül nem while (kulcsok.hasMoreElements()) { használható fel adatforrásnak, mert a benne található Object kulcs = elemek nem rendezhetõk sorba. Ezért átírjuk az összes kulcsok.nextElement(); elemét a fentebb említett Vector-ba, ami már egyértel- Vector adat = new Vector(2); mû sorrendet jelent. A lekérdezés után tehát létrehozunk adat.add(kulcs); egy akkora Vector-t, ahány eleme van adat.add(rendszerTulajdonsagok.get(kulcs)); a rendszerTulajdonsagok-nak. adatok.add(adat); Ezt követõen lekérdezzük a rendszerTulajdonsagok kul- } csait, és egy ciklusban bejárjuk õket. Minden iterációban } létrehozunk egy 2 hosszú Vector-t, amit megtöltünk adat- tal, és hozzáadjuk az adatok nevû Vector-unkhoz. public int getRowCount() { return Miután az AdatModell osztály kiterjeszti az adatok.size(); } AbstractTableModel-t, néhány metódust biztosítanunk kell. Ezek: a getRowCount(), ami a sorok számát adja vissza, public int getColumnCount() { return 2; } a getColumnCount(), ami az oszlopok számát adja meg, © Kiskapu Kft. Minden jog fenntartva illetve a getValueAt(), ami egy konkrét elem értékével public Object getValueAt(int sor, int oszlop) { szolgál. A getColumnName() nem kötelezõen megvalósítan- Vector sorVektor = (Vector) dó, de ha nem definiáljuk felül, az oszlopok címei A, B, C, adatok.get(sor); stb. lesznek. return sorVektor.get(oszlop); Lássuk most a „Memória használat” modult! Ez egy dina- } mikus diagrammon mutatja be a Java Virtuális Gép memó- riahasználatát. public String getColumnName(int sor) { if (sor == 0) return “Kulcs”; import java.awt.*; return “Érték”; import java.awt.event.*; } import javax.swing.*;

} import org.jfree.chart.*; import org.jfree.data.time.*; public MonitorAltalanos() { public class MonitorMemoria extends JPanel setLayout(new BorderLayout()); implements ActionListener { JTable tablazat = new JTable(new AdatModell()); private Runtime kornyezet; JScrollPane gorgethetoNezet = new private TimeSeries osszesMemoria, JScrollPane(tablazat); szabadMemoria; add(gorgethetoNezet, BorderLayout.CENTER); public MonitorMemoria() { } kornyezet = Runtime.getRuntime(); } osszesMemoria = new TimeSeries(“Összes A modul szép példája a JTable osztály használatának. Memória”, Millisecond.class); A feladat egy görgethetõ táblázat létrehozása. Ezt a monda- osszesMemoria.setHistoryCount(30000); tot a konstruktorban írjuk le. Beállítjuk az szabadMemoria = new TimeSeries(“Szabad elrendezéskezelõt egy BorderLayout objektumra. Ezután Memória”, Millisecond.class); létrehozunk egy táblázatot egy adatmodellel. Az adatmo- szabadMemoria.setHistoryCount(30000); dellt egy belsõ osztály írja le. Ezt követõen megalkotjuk TimeSeriesCollection adatSor = new a táblázat görgethetõ nézetét. Végül a panel közepére TimeSeriesCollection(); betesszük ezt az elemet. adatSor.addSeries(osszesMemoria); A belsõ osztály az adatmodellt írja le. Ezzel elkülönül maga adatSor.addSeries(szabadMemoria); a JTable és az adatokat tartalmazó objektum. Ez azért na- gyon hasznos, mert így az adatok ábrázolása teljes mérték- JFreeChart diagramm = ben ránk van bízva, olyan szerkezetet használunk, amilyet ChartFactory.createTimeSeriesChart( csak szeretnénk. Ebben az adatmodellben egy Vector ob- “A Java Virtuális Gép memória jektumot veszünk igénybe, amely további Vector-okat használata”, tartalmaz. Ezen Vector-ok pedig két String elembõl, “Idõ”, egy kulcsból és egy értékbõl állnak. “Memória”,

www.linuxvilag.hu 2005. május 67 Dobbantó

adatSor, Ezután létrehozzuk a diagrammot, megadva a címét, a ten- true, true, false gelyek címeit, az adatsort, és néhány apróságot. Készítünk ); a diagrammból egy panelt, beállítjuk az elrendezéskezelõt, és hozzáadjuk a panelt. Ezután készítünk egy ütemezõt, ChartPanel diagrammPanel = new amely a megadott objektum actionPerformed() metó- ChartPanel(diagramm); dusát hívja meg tizedmásodpercenként, majd elindítjuk az ütemezõt. setLayout(new BorderLayout()); Végezetül a teljesség kedvéért lássuk a névjegy panelt. add(diagrammPanel, BorderLayout.CENTER); Noha meg vagyok gyõzõdve, hogy ezek után egyetlen sora sem jelent újdonságot. Timer utemezo = new Timer(100, this); utemezo.start(); import java.awt.*; import javax.swing.*; } public class MonitorNevjegy extends JPanel { public void actionPerformed(ActionEvent esemeny) { public MonitorNevjegy() { © Kiskapu Kft. Minden jog fenntartva szabadMemoria.add(new Millisecond(), kornyezet.freeMemory()); final String sorTores = osszesMemoria.add(new Millisecond(), System.getProperty(“line.separator”); kornyezet.totalMemory()); } setLayout(new BorderLayout());

} JTextArea szoveg = new JTextArea(); szoveg.setEditable(false); Ez a modul felhasználja a JFreeChart Java csomagot, szoveg.append(“Monitor v0.1” + sorTores); melyet a http://www.jfree.org/ oldalon keresztül lehet besze- szoveg.append(“======” + sorTores + rezni. Használatához mindössze a jcommon-x.x.x.jar és sorTores); a jfreechart-x.x.x.jar állományok elérési útvonalát kell beten- szoveg.append(“Java alkalmazás a Linuxvilág ni a CLASSPATH környezeti változóba, vagy paranccsorban olvasói számára”); mind a fordítónak, mind a futtatókörnyezetnek a -cp kap- szoveg.append(sorTores + sorTores + “Fülöp csolóval átadni. A JFreeChart egy nagyon gazdag környe- Balázs” + sorTores); zet mindenféle grafikon egyszerû elõállításához és ráadásul szoveg.append(“2005.”); ingyenes is. Tehát miután importáltuk a névtérbe az org.jfree.chart add(szoveg, BorderLayout.CENTER); és az org.jfree.data.time csomagok elemeit, nézzük meg, hogyan is mûködik ez az osztály. Megvalósítja az } ActionListener interfészt, mivel az felhasznált memóriá- ra vonatkozó adatok periodikus lekérdezéséhez a Swing } Timer osztályát használjuk, és ez a megadott idõközön- ként meghívandó eljárást egy olyan osztály képében Egy közönséges szövegdobozba írom bele a névjegy tartal- várja, amely rendelkezik az actionPerformed() tag- mát. Ami talán érdekes lehet, az az, hogy a sortörést nem függvénnyel. „\n”-el oldottam meg, bár a Java intelligenciája miatt úgy Az osztály egy konstruktorból és egy actionPerformed() is mûködött volna bármely operációs rendszer alatt, hanem metódusból áll. Vannak továbbá privát tagváltozói, ezek lekérdeztem a sortörést jelentõ szövegfüzért a rendszer- a kornyezet, az osszesMemoria, és a szabadMemoria. tulajdonságok táblából. A konstruktor lekérdezi a környezetet, létrehozza Ebben az írásban elég sok kódot láthatsz, amit érdemes a diagrammot, beállítja és elindítja az idõzítõt. tanulmányozni. Ezt azért hangsúlyozom, mert kizárólag Az actionPerformed(), amely minden tizedmásodpercben a leírásból nem fogsz rájönni mindenre. Feltétlenül töltsd lefut, lekérdezi a környezettõl az összes- és a szabad memó- le a Java API-t a Sun oldaláról (http://java.sun.com/), ha riát, és ezeket az értékeket hozzáadja az osszesMemoria és még nem tetted meg, és próbálkozz! Ne csak azzal, amit a szabadMemoria adatforrásokhoz. itt látsz, hanem azzal is, amit kigondolsz! Sok örömet kívá- A konstruktor mindenek elõtt beállítja a kornyezet változót nok a Java-hoz. a Runtime osztály getRuntime() metódusa alapján. Lét- rehozunk két TimeSeries objektumot, melyek az adat- Fülöp Balázs ([email protected]) forrásokat fogják jelenteni a osszesMemoria, illetve 21 éves, imádja a Túró Rudit, a Debian Linuxot a szabadMemoria változóknak. Mindkettõnek beállítjuk, és a teheneket. Kedvenc írója Slawomir Mrozek. hogy a 30 másodpercnél régebbi adatokat ne vegye figye- Leginkább a számítógépes hálózatok biztonsága lembe. Létrehozunk továbbá egy adatSor változót, melyhez érdekli. A BME VIK mûszaki informatikus hozzáadjuk a két adatforrást. szak hallgatója.

68 Linuxvilág Dobbantó

OpenOffice.org 2.0 Újabb mérföldkövek egy jól ismert irodai programcsomag életében.

StarOffice-ból sarjadt OpenOffice az egyik legsike- resebb nyílt forrású projekt. Sikerének kulcsa az ingyenesség mellet, hogy valóban használható © Kiskapu Kft. Minden jog fenntartva dologrólA van szó: képes helyettesíteni a többi nagy irodai szoftvercsomagot, s mellette szól még, hogy az összes elter- jedt platformon futtatható. Talán pont ez a népszerûség ihlette a fejlesztõket arra, hogy teljes erõbedobással tökéletesítsék a jelenlegi 1.x-es változatot. A megfeszített munka eredménye most már egyértelmûen körvonalazódik a 2.0-s változat formájában, amelybõl ízelítõt is kaphatunk az 1.9.79-es számmal ki- adott béta változaton keresztül. Bár az alkalmazás még nem végleges, az újítások listája már teljes, ezek szerepel- nek is a már emlegetett béta programban. Új szolgáltatás tehát már nem várható a stabil csomag megjelenéséig, 1. ábra csupán a jelenlegiben elõforduló hibák javítására számít- Az Openoffice.org új adatbázis-kezelõ eszköze, a Base hatunk. Ennek következtében már most nyugodtan végig- nézhetjük, hogy mivel lett több illetve kevesebb az új OpenOffice.org.

1. mérföldkõ: telepítés Nos, a telepítés némiképp megváltozott: az újítások lis- tájában benne van, hogy az OpenOffice telepítõje ezentúl a natív módot támogatja. Ez a gyakorlatban azt jelenti, hogy a rendszerünk csomagkezelõ-rendszerére van bízva az elõre összeállított csomagok telepítése, magyarul az új OpenOffice-nak igazából nincs is telepítõje, csak csomagjai. Ez alapvetõen nem rossz dolog: a baj csak annyi, hogy a fejlesztõk építenek MSI illetve RPM csomagokat, és ezzel a lista végére is értünk. Ha tehát mi nem Windowst, illetve Redhat/SuSE terjesztést használunk, akkor bizonyos kelle- metlen nehézségebe ütközhetünk: legrosszabb esetben pél- 2. ábra A Calc PivotTables nevû adatértelmezõ bõvítménye dául abba, hogy nem fogjuk tudni telepíteni a programot. akció közben A telepítési útmutatóban az szerepel, hogy az OpenOffice a késõbbiekben sem fogja támogatni a többi terjesztést, tõvé tette, hogy bármikor, a legfrissebb változatot letöltve, mivel azokba licenszelési okokból ez vagy az nem fér bele, azt akármilyen környezetben telepíthessük. A terjesztés így minden terjesztésnek magának kell összeállítania az által rendelkezésemre bocsátott csomagokkal csak annyi OO „telepítõjét”. a baj, hogy 1-2 hónappal is akár le vannak maradva a leg- Nem kell azért megijedni, jelenleg is létezik az összes na- frissebb kiadástól (ennyivel késõbb készülnek el az adott gyobb terjesztésen belül „saját”, natív módon telepíthetõ kiadásból a csomagok). Ezentúl tehát a terjesztés összeállí- csomag, szóval ez nem lesz nagy változás: a terjesztések tóira lesz bízva, hogy mikor használhatjuk a legfrissebb a továbbiakban is el fogják ezeket készíteni, mi pedig hasz- változatot. Jeles példája ennek, hogy én Debian alatt szeret- náljuk, csak úgy, mint eddig. tem volna kipróbálni a béta változatot, és nem ment egy- Ami engem zavar, hogy ezt „újításként” említik a fejlesztõk, szerûen, szenvedni kellett érte. Elõször a egy nem hivatalos pedig igazából visszalépésrõl van szó. A régi telepítõ lehe- apt-forrás hozzáadása mellett döntöttem, ám az itt lévõ,

www.linuxvilag.hu 2005. május 69 Dobbantó

meglehetõsen régi kiadás majdnem teljesen mûködés- képtelen volt. Ez után következett az RPM csomagok aliennel történõ átalakítása DEB csomagokká, majd az imádkozás, hogy minden gond nélkül települjön. Az imám meghallgatásra talált, mert az OpenOffice elindult. Ez így elsõ hallásra nem is annyira bonyolult, de ha ehhez még hozzávesszük azt, hogy az új OpenOffice nem fér meg a régivel, akkor újra elszomorodhatunk: a régi 1.1-es vál- tozatot javasolt eltávolítani a rendszerbõl, mielõtt az újat telepítenénk, s ha esetleg a béta változat túlságosan gazdag hibákban, akkor a régi változatra történõ visszaállás is ugyanilyen körülményes. Egyszóval: aki nem szeret szen- vedni, annak bizony várnia kell – vagy átmegy Windowsba, és telepíti ott. 3. ábra 2. mérföldkõ: új, szabványos fájlformátum Az Imress prezentáció-készítõ felosztott felülete A 2.0-s változattól az OpenOffice az XML alapú, az Európai © Kiskapu Kft. Minden jog fenntartva Bizottság ajánlásában is szereplõ OASIS OpenDocument for- mátumot használja alapértelmezetten a dokumentumok tá- rolására. Ez egy terjesztés és implementáció-független for- mátum, amely a különbözõ dokumentum-kezelõ progra- mok közötti szabványos együttmûködést hivatott elõsegíte- ni. Ezt a formátumot használja egyébként a Koffice is. Ezzel együtt természetesen változnak a „kiterjesztések” is. A korábbi .SX kezdetû fájlvéget .OD kezdetûek váltják, így például a régi SXW végû szöveges dokumentum ODT végû lett, s igyekeztek következetesen kiosztani a fájlok neveit. Az OASIS OpenDocument formátumról a  http://www.oasis-open.org/committees/ tc_home.php?wg_abbrev=office oldalon olvashatunk 4. ábra bõvebben. A sokszínû körlevél-készítõ varázsló

3. mérföldkõ Az OpenOffice Windows alatt a Microsoft hitelesítési eljá- Elõtérbe került az adatbázis-kezelõ felület is: a többi al- rását használja, egyéb operációs rendszerek alatt pedig kalmazáshoz hasonlóan itt is a Fájl menü, Új menüpontjára a Mozilla/NSS (Network Security Services) függvénykönyv- kattintva lehet új adatbázist készíteni. A fejlesztõk odafi- tárat. Ez utóbbi segítségével lehetõvé válik rengeteg tanúsít- gyeltek a kezdõ vagy épp az adatbázis-kezelésben, SQL-ben vány és titkosítási forma használata (igazából minden, amit kevésbé jártas felhasználókra is. Egy új táblakészítõ varázs- az NSS megenged). Nem szerepel viszont a leírásokban ló segítségével bárki könnyedén hozhat létre adatbázisokat, sehol sem utalás arra, hogy a linuxos körökben elterjedten s utána ûrlapokat, jelentéseket, stb készíthet, ahogy azt használt GnuPG kulcsait és a bizalmi hálót tudja-e használ- már megszokhattuk Microsoft Access esetében, amelynek ni az OpenOffice. Az OpenSSL-lel természetesen képesek versenytársa kíván lenni az irodai programcsomag Base vagyunk például X.509-es tanúsítvánnyá konvertálni nevû része. Ennek megfelelõen tud is sokmindent: ûrlapo- a szükséges adatokat (amelyet az NNS könyvtárral mege- kat, jelentéseket, lekérdezéseket kezel az ott megszokott tethetünk), de ez ugye mégsem egy kényelmes módszer, formában. és elveszítjük a PGP hitelesítési mechanizmusát is – magya- Ha már itt tartunk: hasonlóan az Access-hez, itt is adatbá- rán, hogy megbízhatunk-e egy idegen kulcsban, illetve zis-dokumentumokat hozunk létre. Az új adatbázis-felület ennek leellenõrzése meglehetõsen körülményes. ugyanis a Java alapú HSQLDB adatbázis-kezelõre támasz- Sajnos a béta változatnak ezen része defektes, így azt kodik, amelynek következtében nincs szükség a háttérben nem sikerült kipróbálnom, hogy a PGP kulcskarikámon futó adatbázis-kiszolgáló használatára, a program az adato- szereplõ „tanúsítványokat” be tudja-e olvasni, s használni kat (vele együtt az ûrlapokat, jelentéseket, lekérdezéseket) a program. egy XML fájlban tárolja. Az NSS függvénykönyvtárról az alábbi címen tájékozódhat A program ezen része is természetesen a már emlegetett a téma iránt érdeklõdõ olvasó: OpenDocument XML formátumot használja. http://www.mozilla.org/projects/security/pki/nss/

4. mérföldkõ: digitális aláírások használata 5. mérföldkõ: újítások a táblázatkezelõben Lehetõség nyílik a dokumentumaink digitális aláírására, A Microsoft PivotTable-jének mintájára az OpenOffice an- illetve a mások által aláírt dokumentumok hitelességének nak idején kitalálta a DataPilot névre keresztelt adatelemzõ ellenõrzésére. Az ehhez szükséges tanúsítványokat az alkal- segédprogramot, amelynek segítségével akár külsõ adatfor- mazás a rendszer által használt tanúsítvány-tárolóból szedi. rásból , akár a táblázatban valahol szereplõ értékekbõl von-

70 Linuxvilág Dobbantó

menükben mászkálnunk. A fejlesztõk azt írják, hogy aki dolgozott már PowerPointtal, bizonyára nagyon fogja érté- kelni ezt az új felületet. Megjegyzem: tényleg jó, bár nekem az elõzõ pont az egyszerûsége miatt tetszett nagyon. Rengeteg új oldalátmeneti és animációs hatással is felvér- tezték az alkalmazást, csak hogy még jobban hasonlítson a konkurenciára, és hogy minél pontosabban tudja megjele- níteni a már említett versenytárs segítségével készített pre- zentációkat – amivel az elõzõekben voltak gondok (pontat- lan megjelenítés, szétcsúszás, stb). S ami nem látszik: nem csak a hatások gazdagodtak, de a háttérben teljesen kicserélték oldalátmenetek kezeléséért felelõs motort, s ezen túlmenõen az egész prezentáció- készítõ motor is teljesen megújult. 5. ábra A méretezhetõ, variálható úszó ablakok 7. mérföldkõ: a Writer és lehetõségei Bár a táblázatokról már beszéltünk a Calc kapcsán, most essen szó egy másik érdekességrõl: szinten fõként kom- © Kiskapu Kft. Minden jog fenntartva patibilitási okokból megoldották az egymásba ágyazott táblázatokat a Writerben. Mostantól táblázat egy cellája is tartalmazhat másik táblázatot. Közben fejlõdött a táblá- zatok tudása is: tudunk például a cellákban elhelyezett adatokra számozást alkalmazni, vagy felsorolásként ke- zelni azokat. (Természetesen egy cellában csak egy érték szerepel, azaz a felsorolás és számozás funkció kilát a cella határain túlra). Nem tûnik nagy újításnak, hogy megváltozott a szavak számára vonatkozó statisztika, s most már lehetõségünk van egy kijelölésre is lekérni a szavak és karakterek számát, mégis azt kell mondjam, hogy már nagyon vártam. Régen ezt csak úgy lehetett, ha a kijelölt szöveget vágólapra má- 6. ábra Az AutoShapes nevû vektorgrafikus ikonkészlet solva beillesztettem egy üres dokumentumba, és ott kértem szavak száma statisztikát – s pechemre, erre gyakran szük- hatunk le mindenféle következtetéseket. Külsõ adatforrás ségem volt. lehet az OpenOffice.org-ban regisztrált bármilyen (az OO Megújult a körlevél funkció (Mail Merge) is. Nem csak a le- által ismert) adatforrás. Egy ilyen létrehozásának legegy- vélküldés paramétereinek sokkal jobb beállítási lehetõségét szerûbb módja, hogy a Base segítségével csinálunk egy kaptuk, de a kezdõ felhasználók számára készült egy va- adatbázist, s mentéskor rá fog kérdezni, hogy szeretnénk-e rázsló, amely egész ügyesen végigvezeti a felhasználót cím- ezt az adatforrást regisztrálni. Ha az igenre kattintunk, jegyzék kiválasztásától egészen a dokumentum mentéséig a késõbbiek folyamán elérhetjük a DataPiloton keresztül tartó nem túl egyszerû folyamaton. A JavaMail API segítsé- (már meglévõ adatbázist annak megnyitását követõen gével nem csak körlevél-dokumentumokat készíthetünk, regisztrálhatunk). de közvetlenül e-mailben is elküldhetjük a körlevelünket, A szolgáltatás természetesen már az elõzõ változatban is megúszva egy sor felesleges munkát. szerepelt, az újítás az elérhetõ lehetõségek tárházának gaz- dagságában rejlik: létrehozhatunk csoportokat, szûrési fel- 8. mérföldkõ: Kinézet tételeket adhatunk a kijelölt adathalmazra, s mindenféle az Mostantól az ablakkezelõ-rendszerbe illeszkedõ kinézet adathalmazhoz relatív mutatókat számoltathatunk ki vele. együtt jön a programmal. Régebben is voltak hasonló bõvít- Másik fontos fejlesztés, hogy kiterjesztették a tábla sorainak mények, amelyeket telepítve az OpenOffice elkezdte az ab- méretét: mostantól az Excel-hez hasonlóan 65536 (2^16) lakkezelõnk által rendelkezésére bocsátott elemkészletet sora lehet a Calcban létrehozott tábláknak is. Ennek legin- használni. Ez nem csak azért lényeges, mert egységes a fel- kább kompatibilitási okai vannak: hogy meg tudjuk nyitni használói környezet, hanem azért is, mert számomra példá- a nagy Excel fájlokat is. ul a GTK-s elemkészlet használata sebességnövekedést és pontosabb viselkedést is eredményezett. 6. mérföldõ: Az Impress újításai A másik újdonság, hogy megoldották az eszköztárak lebeg- Bár én már eddig is egy igen használható eszköznek tartot- tetésének problémáját (úszó eszköztárak). Ez azt jelenti, tam az OpenOffice prezentáció-készítõ programját, a mosta- hogy szabadon húzgálhatjuk õket a képernyõ szélérõl, ni fejlesztések mégis nagyot löknek rajta. Egyik ilyen újítás s a már jól ismert kis ablakokban a monitor bármelyik terü- a több részre felosztott prezentáció-szerkesztõ felület, letén megjeleníthetõk, ahol épp nem zavarnak a munká- amelynek köszönhetõen minden fontos funkció megtalál- ban. Nem csak a helyváltoztatás jobb, de az ablakok átmé- ható közvetlenül a képernyõn, nem kell érte különbözõ retezhetõk, s egyszerûsödött az elemek testreszabása is.

www.linuxvilag.hu 2005. május 71 Dobbantó

XML szûrõ beállítások menüponton keresztül. Érdemes próbálkozni, hogy a helytelenül megnyitott dokumentu- mot elõször exportáljuk MS Office alatt XML formába, majd ezt az XML-t próbáljuk meg aztán OpenOffice-ból megnyitni. A Writerrel lehetõségünk nyílik a W3C XForms szabvá- nyának megfelelõ ûrlapok készítésére, amelynek segít- ségével programozási nélkül is gyerekjáték egyszerû logikát csempészni az ûrlap-kitöltés folyamatába. Ennek egyik nagy elõnye, hogy olyan ûrlapok jönnek létre, amelyek szabványosak, tehát más alkalmazások is használhatják (nincs benne VisualBasic, vagy egyéb gyártófüggõ megoldás), így egyik objektumból a másikba könnyedén átvihetõ. Az XForms egyébként egy új üdvöske, a jelenlegi HTML/XHTML ûrlapokat hivatott hosszú távon helyet- 7. ábra Így néz ki az XForms támogatás az OpenOffice-ban tesíteni, lecserélni. Egy XML alapú megoldásról van szó, © Kiskapu Kft. Minden jog fenntartva amely a tartalmat és megjelenést külön kezeli, és az ûrlap- 9. mérföldkõ: Egyéb újdonságok hoz rendelhetõ XML adatszerkezetek használatával teszi A fejlesztõk szívügyüknek érezték, hogy a Corel Word- kényelmessé és teljessé az ûrlapok használatát. Perfect szövegszerkesztõje által létrehozott fájlokat is tudjuk A témában „mélyen érintettek” a http://www.w3.org/ nyitni az OpenOffice-ba importálni illetve onnan exportálni. MarkUp/Forms/ címen olvashatnak bõvebben róla. Ehhez az nyílt forrású közösség által fejlesztett WordPerfect szûrõt használják. Továbbfejlesztették a Lotus 1-2-3 szûrõt Összegzés is, amely most már a 9.7-es változatig képes megnyitni Az itt szereplõ újítások listája természetesen a teljesség igé- a Lotus fájlokat. nye nélkül, fontossági sorrendben készült. Számtalan egyéb Az 1.1-es változatban bemutatkozott a PDF export, kényel- apró változtatás van még, amely számunkra nem annyira mesebbé téve az addigi PostScript formátumba nyomtatást, érdekes. Ilyenek például, hogy bizonyos menüpontok majd az abból PDF-be konvertálást (Sõt, Windows alatt le- máshová kerültek, néhány mûvelet során alapértelmezetté hetõvé tette, hogy egyáltalán meg tudjuk ezt csinálni egyéb váltak olyan beállítási lehetõségek, amiket régebben külön segédprogramok nélkül). A 2.0-s változat továbbfejlesztette ki kellett választani, vagy épp más lett a betûk igazításá- a PDF-generátor képességeit: megadhatjuk a beágyazott nak módja, és még sorolhatnám. Alapjaiban igaz ezekre képek tömörítésének mértékét, a kép felbontását, s az ígé- a változtatásokra, hogy a következetesség és kompatibilitás ret szerint ez már jól kezeli a hiperlinkeket és az elõnézeti jegyében történtek. oldalképeket. Hasonlóan igaz ez a fenti mérföldkövekre is, bár ott nem Ismét csak elsõdlegesen kompatibilitási okokból, az elhanyagolható az újítási szándék sem. Rengeteg új funkció OpenOffice megteremtette a CustomShapes bõvítményt, áll rendelkezésünkre, amelyek nagy része rendkívül hasz- amely a Microsoft AutoShapes megoldásának itteni nos. Más megoldások inkább csak abból a szempontból megfelelõje. Ezek „apró” vektorgrafikus „ikonok”, amelye- fontosak, hogy közeledtek a MS Office által kínált lehetõsé- ket a Draw programban használhatunk. A legfõbb vív- gekhez, amelynek itt valóban nem az utánzás volt az elsõd- mány mégis az, hogy az AutoShapes „ikonokat” jól be- leges célja, hisz a felhasználók igen jelentõs része a szolgál- olvassa és meg is jeleníti a Draw, tehát megnyithatjuk tatások felét sem használja, még az MS Office-ban sem. az AutoShapes-t használó, MS Office-szal készült doku- Ezek tényleg azért kellettek, hogy jobb együttmûködést mentumokat. biztosítsanak a konkurencia megoldásaival. Abból is lát- Szintén a nagy riválissal történõ együttmûködés elõsegíté- szik, hogy nem a konkurencia utolérése a cél, hogy az se érdekében az OpenOffice-ból megnyithatók a jelszóval OpenOffice néhány szolgáltatásával egyenesen elõzni védett MS Office fájlok, természetesen csak abban az eset- próbál. Ilyen például a beépített digitális aláírás kezelõ, ben, ha a felhasználó tudja a jelszót a dokumentumhoz. vagy a beépített PDF-készítõ. A megnyitás során automatikusan felpattan a jelszót Alapvetõen jól eltalálták a fejlesztéseket, leszámítva talán bekérõ ablak, tehát pontosan ugyanúgy mûködik, mint a telepítés körüli problémákat. S ha már ilyen jól idomult az MS Office esetében. a versenytársakhoz, õszintén remélem, hogy méltó ellenfele S ha már a globális kompatibilitási újításoknál tartunk: lesz azoknak a mindennapos felhasználás során. alapértelmezetten része az új változatnak a Microsoft Az újítások, változtatások teljes és részletes listája megtalál- XML formátumainak, a Spreadsheetml és a Wordml fájl- ható a következõ webhelyen: jainak írása és olvasása. Mint tudjuk, az MS Office-ban http://marketing.openoffice.org/2.0/featureguide.html importálhatunk, exportálhatunk XML formátumba A béta változatot dokumentumokat, amelyeket egy XSLT (XML Stylesheet a http://download.openoffice.org/2.0beta/index.html Translator) „szûrõ” alakít át a megfelelõ formába a doku- címrõl tölthetjük le. mentum újbóli megnyitás során. Mostantól ezek a mûve- letek OpenOffice-ból is elvégezhetõk az Eszközök menü Komáromi Zoltán

72 Linuxvilág Dobbantó

Hálózatok (17. rész) Forgalomirányítás mozgó gépek esetén, adatszóró, többesküldéses forgalomirányítás, torlódásvédelem A sorozatnak ebben a részében a mozgó gépekkel kapcsolatos problémákat fesze- getjük, majd megnézzük, milyen módszerek vannak arra, hogy egyszerre ne csak egy hoszt számára küldhessünk csomagokat. Ezenkívül szó lesz még a hálózatok © Kiskapu Kft. Minden jog fenntartva legnagyobb mumusaként számon tartott jelenségrõl is: a torlódásról.

Forgalomirányítás és vándorló gépek Eddig olyan forgalomirányítási mechanizmusokat tárgyal- tunk, amelyek feltételezték azt, hogy a gépek „otthonülõ életmódot” folytatnak, azaz nem vándorolnak szerte a vi- lágban. A mai mobilizálódó világban azonban ez elképzel- hetetlen, hiszen egyre több felhasználó érzi magát kellemet- lenül, ha a buszon utazva mobiltelefonjának segítségével nem nézhetné meg e-mail-jét, vagy esetleg nem léphetne be SSH-val az otthoni számítógépére. Az 1. ábrán egy nagy kiterjedésû hálózatot láthatunk. Te- 1. ábra Egy nagy kiterjedésû WAN, amelyhez MAN-ok, WAN-ok illetve gyük fel, hogy ez a hálózat az egész világot behálózza, vagy vezeték nélküli cellák kapcsolódnak legalábbis azt a területet, ahol a gépek vándorolhatnak. Ezt a hálózatot sokféle felhasználó használja. Vannak olyanok, nök azokkal a felhasználókkal foglalkozik, akik ugyan más- akik a hálózathoz réz, illetve optikai kábel segítségével csat- hol laknak, de jelenleg az ügynök körzetében tartózkodnak. lakoznak, és sohasem hagyják el az otthonukat. Olyan fel- Amikor egy felhasználó új körzetbe lép, akkor mindig fel használó is akad, aki ugyan mindenfelé bolyong a világban, kell vennie a kapcsolatot a helyi idegen ügynökkel. Elõször mégis csak úgy használja a hálózatot, hogy elõbb fizikailag tehát meg kell tudnia az ügynök címét. Ez vagy úgy törté- kapcsolódik hozzá (azaz a hálózaton tartózkodás ideje alatt nik, hogy az idegen ügynök folyamatosan küldi szét a saját nem változtatja a helyzetét). És persze vannak az „örök uta- címét, vagy arra vár, hogy az újonnan belépõ gazdagép zók” is, akik úgy szeretnének a hálózaton ügyködni, hogy megkérdezze, „van-e errefelé egy idegen ügynök?”. közben folyamatosan mozogásban vannak. A felhasználók Amint megvan a cím, a mozgó felhasználónak regisztrálnia utóbbi két csoportját együtt mozgó felhasználónak (mobile kell magát. Ez gyakorlatilag abból áll, hogy elküldi az állandó user) nevezzük. Nézzük, miként juttathatjuk célba a mozgó lakcímét, az aktuális adatkapcsolati réteg címét, illetve szük- felhasználóknak szánt csomagokat. ség szerint valamiféle hitelesítõt. Ezután az idegen ügynök Az alapötlet az, hogy minden felhasználó rendelkezik egy elküld egy csomagot a felhasználó lakcíméhez tartozó hazai állandó lakcímmel. A feladat az, hogy ha a felhasználó nem ügynöknek, amelyben közli, hogy itt van egy felhasználója. tartózkodik otthon, akkor a neki szánt csomagokat célba jut- A hazai ügynök ezután felírja az idegen ügynök címét, és tassuk, bárhol is legyen a felhasználó az adott pillanatban. elvégzi a hitelesítõ ellenõrzését, hogy megbizonyosodjon, Ehhez persze elengedhetetlen, hogy valamiképp rátaláljunk. nem hazudott-e a felhasználó a kilétével kapcsolatban. Ha ez Ehhez a behálózandó területet fel kell osztanunk körzetek- rendben van, a hazai ügynök visszaküld egy nyugtát. Amint re, vagy valamilyen más egységekre. Fontos, hogy a körze- ez visszaérkezik az idegen ügynökhöz, az tudatja a felhasz- tek egymással diszjunktak, azaz a felhasználó egyszerre nálóval, hogy a regisztráció sikeresen befejezõdött. csak egy körzetben lehet. Minden ilyen körzetben két ügy- Ezek után egy tetszõleges forrás és a mozgó felhasználó kö- nök dolgozik: a hazai (home agent) és az idegen ügynök zött a kommunikáció a (2. ábra) szerint fog zajlani. Az elsõ (foreign agent). A hazai ügynök azokat a felhasználókat tart- lépésben a forrás a felhasználónak csak az otthoni címét is- ja nyílván, akiknek az állandó lakhelyük a körzetében van, meri, így a csomagot oda küldi, amit a hazai ügynök elfog. viszont jelenleg nem tartózkodnak otthon. Az idegen ügy- A következõ lépésben az ügynök ezt a csomagot egy másik

www.linuxvilag.hu 2005. május 73 Dobbantó

csomagba ágyazza, és ezt elküldi az idegen ügynök szá- mára. (A csomagok más csomagokba való ágyazását alagút továbbításnak nevezzük. Ezzel az eljárásban a sorozat egy késõbbi részében majd részletesen is megismerkedünk). Amint ez megérkezik az idegen ügynökhöz, az kiveszi az eredeti csomagot, és átadja a felhasználó számára. Ezután az idegen ügynök felveszi a kapcsolatot a forrással, és közli vele, hogy a továbbiakban a felhasználónak szánt csomago- kat ne az otthoni címre továbbítsa, hanem inkább ágyazza be õket egy olyan csomagba, amelynek a címzettje az ide- gen ügynök. Innentõl kezdve a kommunikáció már nem a hazai ügynökön keresztül fog zajlani, hanem közvetlenül a forrás és az idegen ügynök között. 2. ábra A gyakorlatban nem ez az egyetlen megoldás a mozgó gépek Forgalomirányítás mozgó felhasználó esetén forgalomirányításának problémájára. Rengeteg ilyen proto- koll létezik, és ezek rengeteg szempontban térnek el egymás- kimenet csak akkor lesz kijelölve, ha van olyan célcíme a cso- tól. Ilyen szempont például az, hogy a munka oroszlánrészét magnak, amely felé azon a kimeneten vezet a legjobb út. © Kiskapu Kft. Minden jog fenntartva kire bízzuk: az útválasztókra, vagy a gépekre. A protokollok Ezután az útválasztó minden kijelölt port számára elõállítja különböznek még a csomagok másik címre történõ irányítá- a csomag másolatát, de úgy, hogy csak azokat a célcímeket sának mikéntjében is. Egyes protokollok például nem hasz- hagyja benne, amelyeknek az adott kimeneten kell igénybe nálják az alagút továbbítást, hanem egyszerûen csak átírják venniük. Az utolsó ugrásnál, még mielõtt a csomag a gépet a csomag célcímét. A mozgó gép protokollok közötti különb- elérné, már csak egy címet fog tartalmazni, így a gépek már ségeket sok-sok oldalon keresztül tárgyalhatnánk. csak egy közönséges, egy célcímet tartalmazó csomagot fog- nak kapni. Ha belegondolunk, ez az eljárás az elõbb említett Adatszóró forgalomirányítás favágó módszer továbbfejlesztett változata. Itt is szükség van Az adatszórás (broadcasting) fogalmával már találkozhat- ugyan a gépek címeit tartalmazó listára, viszont az egy irány- tunk a közegelérési alréteg tárgyalásakor. Ott olyan LAN- ba tartó csomagokat csak egyszer kell továbbítanunk. okkal foglalkoztunk, ahol a gépek egy közös csatornát A legjobb eredményt mégis akkor érjük el, ha az útválasz- használtak, így mindenki hallott mindenkit, de csak akkor tók az adatszórásra kijelölt csomagot csak azokon figyelt, ha az üzenet neki szólt. A hálózati rétegben is szük- a portjukon továbbítják, amely része az alhálózat valamely ség lehet adatszórásra. Tegyük fel, azt szeretnénk, hogy feszítõfájának, például az adatszórást kezdeményezõ útvá- a hálózatban lévõ összes gép órája pontosan járunk. Elme- lasztóhoz tartozó nyelõfának. (Ha visszaemlékszünk, a fe- gyünk tehát, és szerzünk egy atomórát, majd beállítjuk szítõfa az alhálózatnak egy olyan része, amelyben minden úgy, hogy bizonyos idõközönként minden gépnek elküldje router benne van, viszont nem tartalmaz hurkokat. Minden a pontos idõt. (Persze a gépek órája így sem fog teljesen útválasztóhoz csak egy út tartozik). Kivéve persze azt pontosan járni, késni fognak, mivel a csomagok továbbítása a portot, amelyen az adatszórásra ítélt csomag megérkezett. idõbe telik. Most azonban a példa kedvéért tekintsünk el Ez a módszer azonban feltételezi, hogy az összes útválasztó ettõl a problémától). ismeri legalább egy feszítõfát az alhálózatból. Távolságvek- Miként lehet azonban egy csomagot egyszerre minden gép- tor alapú forgalomirányítás esetén sajnos az útválasztók nek elküldeni? Alkalmazhatjuk például a „favágó” mód- számára nem áll rendelkezésre ilyen információ, így ott ez szert, azaz egyenként minden gép számára elküldjük a módszer nem használható. a pontos idõt tartalmazó csomagot. Ez azonban rendkívül Létezik azonban egy olyan egyszerû és hatékony algorit- sávszélesség pazarló megoldás, arról nem is beszélve, hogy mus, ahol nincs szükség arra, hogy az útválasztók ismer- az atomóránknak rendelkeznie kell egy listával, amely az jenek legalább egy feszítõfát is. Ez az eljárás visszirányú összes gép címét tartalmazza. A módszernek mégis van egy továbbítás (reverse path forwarding) néven híresült el. nagy elõnye: nem igényel semmiféle alhálózat oldali támo- Az alapötlet az, hogy ha az útválasztó egy adatszórásra ítélt gatást, tehát ez minden típusú hálózatban alkalmazható. csomagot azon a porton kap, amelyik egybeesik az adatszó- Sõt, az is lehet, hogy az adatszórás megvalósítására ez lesz rás forrása felé vezetõ legjobb úttal (vagy másképp fogal- az egyetlen járható út. Ha azonban van más megoldás is, mazva, az adatszórás forrása felé menõ csomagokat az út- akkor inkább azt válasszuk. választó erre a kimenetre irányítaná), akkor valószínûsíthe- A másik nagyon kézenfekvõ ötlet az elárasztás alkalmazása, tõ, hogy most találkozik elõször ezzel a csomaggal. Mivel azaz a csomagot az útválasztó az összes kimenetén továb- ez az elsõ példány, amit megkapott, elárasztja. Ha azonban bítja. Sajnos a probléma itt is ugyanaz mint a forgalomirá- ez a csomag egy olyan porton érkezik, amelyik nem esik nyítás esetében: a csomagok hihetetlen mértékben elszapo- egybe a forrás felé vezetõ legjobb úttal, ésszerû feltételezni, rodnak, és ez a sávszélesség rovására megy. hogy ez a csomag viszont másodpéldány, így nyugodtan Hatékonyabb megoldásnak ígérkezik a többcélú forgalomirá- megszabadulhatunk tõle. nyítás (multidestination routing), ahol egy csomagnak nem Hogy senki se kételkedhessen az algoritmus mûködésének csak egy címzettje lehet. Ha egy útválasztó egy több címzet- helyességében, bemutatunk egy egyszerû példát. A 3. ábrán tet tartalmazó csomagot kap, akkor elõször kijelöli azokat láthatunk egy alhálózatot, pontosabban annak az I szerinti a kimeneteit, amelyeken a csomagot továbbítania kell. Egy nyelõfáját. Ez a gráf azt mutatja, hogy az I-bõl miként jut-

74 Linuxvilág Dobbantó © Kiskapu Kft. Minden jog fenntartva

3. ábra Egy alhálózat I csomópont szerinti nyelõfája 4. ábra A visszirányú továbbítás algoritmusának mûködése hatunk el a többi csomópontba a lehetõ legkisebb költségû amelyekhez a csomag az I-tõl a legrövidebb úton érkezett. úton. A 4. ábra az algoritmus mûködését szemlélteti. Tegyük A következõ lépésnél már csak ezek az útválasztók végzik fel, hogy az I adatszórást kezdeményez, így összes szom- el az elárasztást. szédjának elküldi a csomagot. Ezt látjuk a 4. ábrán szereplõ Érdekes, hogy az E útválasztóhoz az adatszórásra ítélt cso- fa második sorában. Mivel az I szomszédaihoz a csomagok mag már az algoritmus harmadik lépésénél megérkezik, az a lehetõ legrövidebb úton érkeztek meg, ezért egyrészt õket E útválasztó mégsem végzi el az elárasztást, ugyanis az EH az ábrán egy nagy zöld pötty segítségével kiemeltük, más- él nem része a nyelõfának (habár része az alhálózati topoló- részt õk is elküldik minden szomszédukhoz a csomagot giának). Amikor azonban az E útválasztó az A-tól kapja (3. sor). Ezek közül megint kijelöltük azokat a pontokat, a csomagot, akkor elvégzi az elárasztást, hiszen az AE él

www.linuxvilag.hu 2005. május 75 Dobbantó

kérdezzék ki gépeiket hovatartozásukról? Bárhogy is való- suljon ez meg a gyakorlatban, az útválasztók ezt az infor- mációt közlik az alhálózat további csomópontjaival. A forgalomirányítás úgy mûködik, hogy az útválasztók kiszámítják az alhálózat egy feszítõfáját. Amikor egy többesküldésre szánt csomag megérkezik az elsõ útválasz- tóhoz, az a saját feszítõfájából eldobja azokat az utakat, amelyek olyan útválasztókhoz vezetnek, akiknek nincs olyan gépük, amelyik tagja lenne a csoportnak. A csoma- got ezután az így létrejött megcsonkított feszítõfa mentén kell továbbítani.

4. ábra Ha az alhálózaton a forgalom a kapacitás alatt van, akkor az Torlódásvédelem Egy torlódás (congestion) kialakulásánál nehezen lehet el- elküldött és a kézbesített csomagok egymással egyenesen arányosak. Ellenkezõ esetben torlódás lép fel, és a csomagok nagy többsége képzelni nagyobb katasztrófát egy alhálózat életében. Nem sosem fog célba jutni. csak arról van szó, hogy az alhálózat a csomagokat lassab- ban fogja célba juttatni, hanem az is elõfordulhat, hogy © Kiskapu Kft. Minden jog fenntartva szerepel a feszítõfában. Az algoritmus hatékonysága tehát egyszerûen képtelen lesz ellátni a feladatát, és szinte egy némileg elmarad az elõbb bemutatott, a nyelõfát pontosan csomag sem fog eljutni a rendeltetési helyére. követõ algoritmustól, viszont nem is ad sokkal rosszabb Az 5. ábrán látható grafikonon a kézbesített csomagokat eredményt. A nyelõfát követve az algoritmus 4 lépés alatt ábrázoltuk az alhálózatba beadott csomagok számának végezne, szemben a mostani 5 lépéssel. Ez ugyan jobb ered- függvényében. Ha ez a szám kisebb, mint az alhálózat ma- mény, de viszont az útválasztóknak nem kell ismerniük az ximális kapacitása, akkor a két érték között egyenes ará- alhálózat egyetlen feszítõfáját sem. Ezenkívül sokkal jobb nyosság van. Ha azonban nagyobb, akkor fellép a torlódás, megoldás, mint az észnélküli elárasztás használata, mivel és az alhálózat teljesítõképessége nagyban visszaesik. magától leáll, és nincs szükség belsõ mechanizmusra, amely Torlódást sokféle esemény kiválthat. A leggyakoribb oka az, leállítaná a végtelenig tartó csomagképzõdést. hogy egy helyen az alhálózatba hirtelen nagy mennyiségû csomag kezd beáramlani. Ha egy útválasztó hirtelen sok cso- Többesküldéses forgalomirányítás (multicasting routing) magot kap, akkor kialakul egy várakozási sor, azaz a beér- Mi a helyzet akkor, ha nem mindenkinek, hanem csak a gé- kezõ csomag elõször az útválasztó memóriájába kerül, és pek egy kisebb csoportjának szeretnénk csomagot küldeni. ott várakozik egészen addig, amíg az útválasztó fel nem Ilyesmire is gyakran szükségünk lehet, például ha egy adat- szabadul, és el nem kezdheti feldolgozni azt. Ha azonban túl bázist elosztottan szeretnénk tárolni. (Tipikusan ilyen adat- sok csomag érkezik, elõfordulhat, hogy az útválasztó memó- bázist használ a tartományneveket az IP címekkel összekap- riája betelik, és az ezután érkezõ csomagok mind elvesznek. csoló DNS is, amelyrõl sorozatunk utolsó szakaszában, az (Érdekes, hogy a probléma nem oldódna meg azzal, ha több alkalmazási réteg tárgyalásakor foglalkozunk). Ekkor az memóriát pakolnánk az útválasztóba, például végtelen adatbázis kezelését végzõ folyamatoknak idõnként szüksé- mennyiségût. Sõt, a helyzet ezzel csak rosszabbodna! Mire ge lehet arra, hogy a többi, a munkában szintén részt vevõ a router elérné a sor végi csomagokat, addig a forrás idõzítõ- folyamatoknak üzeneteket küldjenek. je már rég, minden bizonnyal többször is lejárt, így az útvá- Ha a munkában közösen résztvevõ folyamatokat futtató gé- lasztó sora már másodpéldányok sokaságát is tartalmazza. pek száma viszonylag kicsi, akkor a probléma megoldható Az útválasztó persze ezeket is továbbítani fogja, ezzel is nö- azzal, hogy a folyamatok küldhetnek egymásnak egyszerû velve a terhelést a már amúgy is teljesen lelassult hálózaton). két pont közötti üzeneteket. Ha a csoport nagy, akkor A torlódás másik gyakori oka az, hogy nincs egyensúlyban a módszer nem hatékony. Próbálkozhatunk adatszórással is, a vonalak sávszélessége és az útválasztók számítási kapacitá- kivéve ha a hálózatban szereplõ gépek száma nem elenyé- sa. Ha az útválasztók lassú CPU-val rendelkeznek, akkor úgy szõen kicsi a teljes hálózathoz viszonyítva. Ilyenkor ugyanis is kialakulhat torlódás, ha közben rendelkezésre áll szabad az üzenet a gépek legnagyobb részét nem is érdekli, az vonalkapacitás. A dolog fordítva is igaz: hiába képes az útvá- adatszórás tehát rendkívül pazarló lenne. lasztó gyorsan végezni a feladatát, ha a vonalak túl lassúak. A megoldást a többesküldésnek (multicasting) nevezett tech- Ha már egy torlódás kialakult, akkor nagyon könnyen szét- nológia jelenti, amely lehetõvé teszi, hogy csomagot küldhes- terjedhet az alhálózat többi részére is. A torlódásnak van egy sünk a gépek egy jól meghatározott csoportjának. Ehhez öngerjesztõ hatása. Ha bizonyos csomagok elvesznek, mivel persze elõször valami módon meg kell határoznunk ezeket már nincs hely az útválasztó memóriájában, az adó újra és új- a csoportokat, ez azonban a forgalomirányítás szempontjából ra megpróbálja elküldeni ugyanazt a csomagot, ezzel másod- nem túlzottan érdekes, így erre most nem térünk ki külön. példányokat zúdítva a már amúgy is leterhelt útválasztója. Ha egy folyamat belép egy csoportba, akkor azt tudatnia A torlódások elleni védekezés tehát létkérdés a hálózatok kell a gépével. A többesküldéses forgalomirányításban alap- életében. A következõ részben részletesen megvizsgáljuk, vetõen fontos, hogy minden útválasztó tudja, melyik hoszt milyen módszerek léteznek a torlódások elkerülésére. melyik csoportba tartozik. Itt rögtön fel is merül egy elvi kérdés: a gépnek kelljen-e szólni az útválasztónak, hogy Garzó András egy új csapatnak kötelezte el magát, vagy az útválasztók [email protected]

76 Linuxvilág Fogadó a Linuxhoz

A fõszakács gyûjteménye Katalogizáljuk könyveinket – vagy bármi mást – egy olyan alkalmazással, amelynek csak az ISBN-azonosítót kell megadnunk, a többi adatot önmûködõen lekérdezi. © Kiskapu Kft. Minden jog fenntartva

ha! Szóval itt van a 2005-ös borenciklopédiám! Mon Dieu, François, már mindenhol kerestem. Várj csak egy percet! Itt a párizsi szakácskönyvem, Aa toszkánai gyûjteményem és a provance-i fûszerekrõl szó- ló leírásom is! Mégis hány könyvem van itt nálad!? Nem, mon ami, semmi másra nem célozgatok, azon kívül, hogy egy ideje már keresem õket. Igen, kétségtelenül igazad van, legalább nem vesztek el. Na mindegy, inkább igyekezz, és teríts meg, mon ami, vendégeink bármelyik pillanatban betoppanhatnak. Ó, késõ, hiszen már meg is érkeztek. Üdvözöllek benne- teket, mes amis a Chez Marcelben, ahol a legfinomabb linuxos fogások a menü állandó tagjai, és a borospince a világ legjobbjai közé tartozik! Foglaljatok helyet, érez- zétek magatok otthon, François máris hozza a bort. Kérlek, mon ami, szaladj le a pince északi szárnyába, és 1. ábra A Tellico egy nagyszerû személyi könyvtárrendszer, hozd vissza azt a 2000-res bordóit, amit nemrég… khm, ráadásul jól is néz ki szóval minõségellenõrzésnek vetettünk alá. A „2010-ig nem nyitható ki” feliratú Margaux mellett van. került hozzám vissza. Akik kölcsönkérték a könyveimet, Vite, François. Mozogj! elfelejtették, hogy kitõl kapták õket, és én is elfelejtettem Amíg készséges segítõm visszaér az itallal, hadd ismer- már, hogy kinek mit adtam oda. Kivéve persze François-t. tessem mai menünket. Mint tudjátok, a Chez Marcel Róla külön listát vezetek. az elmúlt évek során már számos recepttel szolgált; A Tellico sablonok segítségével már gyûjtemények – videók, és persze borból sem kis mennyiség fogyott. Bármennyi- zenék, érmék, bélyegek stb. – rendszerezésére is használha- re is szeretnék visszaemlékezni mindenre, a valóság az, tó. Még borospincékhez is van hozzá sablon. Saját gyûjte- hogy nem megy. Éppen ezért több polcnyi a Linuxról, ményeket is létrehozhatunk alatta, továbbá a meglévõ ûrla- a fõzésrõl és a borokról szóló könyv sorakozik a kony- pokat is módosíthatjuk. Szeretném megmutatni, hogyan le- hában, a pincében és az irodában egyaránt. Innen kezdve hetséges mindez. Elõfordított csomagokat szinte minden az egész csak szervezés kérdése, éppen ezért szükségem fontosabb terjesztéshez – Fedora, SuSE, Mandrake, van egy adatbázisra. Slackware stb. – találunk. A forrást is letölthetjük (lásd az De miféle adatbázis legyen ez? Nyilván valami elképesztõ- internetes forrásokat), ekkor a megszokott öt lépésbõl álló en rugalmas, mégis könnyen kezelhetõ dolog. Például telepítési folyamatot kell végigjátszanunk: a Tellico. Robby Stephenson Tellicoja elvileg gyûjteményke- zelésre született, ám szerintem inkább egy roppant sokolda- tar -xzvf tellico-0.13.1.tar.gz lú, személyi könyvtárrendszer. Nagyszerû eszköz receptes cd tellico-0.13.1 könyveink katalogizálására, de mellettük a linuxos kiad- ./configure —prefix=/usr ványok, a tudományos-fantasztikus regények és a krimik make is kiválóan megférnek. (1. ábra) Arra is kiválóan megfelel, su -c “make install” hogy figyelemmel kövessük, barátainknak és családtagja- inknak mely könyveinket adtuk kölcsön. Nem tudom, A Tellico egy a KDE 3.1-es vagy újabb kiadása alá készült ti hogy’ vagytok vele, mes amis, de én elég sok könyvet csomag, mûködéséhez szükség van a megfelelõ Qt és KDE kölcsönadtam az elmúlt években, és jó részük bizony sose fejlesztõi könyvtárakra. Ha forrással dolgozunk, akkor

www.linuxvilag.hu 2005. május 77 Fogadó a Linuxhoz

2. ábra Könyv adatainak beírása egy gyûjteménybe

néhány további, elhagyható könyvtár lefordítását is fon- 3. ábra Internetelérés birtokában a könyvek adatainak © Kiskapu Kft. Minden jog fenntartva toljuk meg. A taglib fejlesztõi könyvtárcsoport az elsõ megadása gyerekjáték ilyen, segítségével zenei fájlokból ki tudjuk olvasni adatai- kat; errõl még lesz szó. Egy másik kiegészítõ a yaz. Ha ez- Ekkor frissül az adatbázisunk, sõt, a borító képe is belekerül. zel együtt fordítjuk le a Tellicot, akkor alóla Z39.50 keresé- A Tellico képes az intelligens, adott címre vagy címtarto- seket tudunk indítani. mányra vonatkozó keresésre is. Az adatokat a jobb oldalon Amikor elindítjuk a Tellicot – a tellico paranccsal –, ak- látható listákban szereplõ, a mezõknek megfelelõ oszlopok kor közhelyesen szólva, tiszta lappal kezdünk. Nagyítsuk hozzáadásával vagy eltávolításával kedvünk szerint érhet- kényelmes méretre az ablakot, és máris nekiláthatunk el- jük el. Ha például mindig tudni szeretnénk, hogy mi van sõ gyûjteményünk megadásának. Ha könyvgyûjteményt kölcsönadva, akkor kattintsunk az egér jobb gombjával akarunk megadni, akkor kattintsunk a Tellico menüsor a mezõsorra, és adjuk hozzá a Loaned (Kölcsönadva) mezõt. File (Fájl) parancsára, majd a New (Új) és a New Book Ekkor a kölcsönadottként megjelölt könyvek mellett egy Collection (Új könyvgyûjtemény) parancsra. Mint említet- zöld pipa jelenik meg. tem, a Tellico egy kiváló személyi könyvtárrendszer, segít- Az említettek mellett egyéb lehetõségeink is vannak ségével figyelemmel követhetjük, hogy milyen könyveink a Tellico adatbázisának feltöltésére. Nyissuk meg a File vannak, mikor és hol vásároltuk õket, valamint kinek ad- menü Import almenüjét. Itt választhatunk, hogy milyen tuk õket kölcsön. Azonban mielõtt használhatnánk ezeket formátumú fájlból akarunk adatokat beemelni: CSV, a szolgáltatásait, rögzítenünk kell gyûjteményünk tagjai- Alexandria, Bibtex stb. nak adatait. (2. ábra) Az exportálási szolgáltatás még érdekesebb – közben tér- A különféle lapokon megadhatjuk a szerzõ nevét és jünk át a jelentéskészítés témájára. Persze egy-egy bejegy- a könyv címét, de beírhatjuk a kiadót, a megjelenés dá- zést bármikor kiírathatunk, de az exportálási szolgáltatás tumát, hogy hányadik kiadásról van szó, a mûfajt, a sor- ennél jóval többre is alkalmas. A HTML exportálást választ- számot, a kiadvány állapotát, hogy dedikált példányról va például készíthetünk olyan HTML oldalt, amelyen min- van-e szó, hogy éppen kölcsönadtuk-e valakinek, vala- den könyvünkrõl szerepelnek az általunk kiválasztott ada- mint kiolvastuk-e. Rengeteg további mezõ is van, ezek tok. Megadhatjuk, hogy mi legyen a HTML fájl neve, hogy felfedezését az olvasóra hagyom; talán még a borítókép hogyan akarjuk formázni az egyes bejegyzéseket vagy me- megadásának az 1. ábrán is látható lehetõségére szeret- zõket, és így tovább. Végeredményként egy szépen formá- ném felhívni a figyelmet. Ha mindezen adatok beírása zott, letisztult HTML oldalt kapunk. (4. ábra) túlságosan hosszadalmasnak tûnik, akkor van egy másik Mielõtt továbblépnénk, szeretnék megemlíteni egy másik lehetõség is. Nem, nem arra gondolok, hogy fel kell bérel- exportálási lehetõséget, ami különösen a szívemhez nõtt. ni valakit. Mindössze internetkapcsolatra van szüksé- Ha a listáról az Export to PilotDB elemet választjuk, akkor günk, a Tellico tökéletes kényelmet biztosít. Kattintsunk PDB formátumú, Palmon is olvasható jelentést tudunk az Edit (Szerkesztés) menü Internet Search (Internetes elõállítani. A hotsync-kel másoljuk fel a dokumentumot, keresés) parancsára. és bármikor kéznél lesz a katalógusunk. Amikor az Internet Search párbeszéd megjelenik (3. ábra), Korábban említettem, hogy a Tellicohoz más gyûjte- adjuk meg a könyv címét, szerzõjét és ISBN-azonosítóját ményekhez, például zeneiekhez is léteznek sablonok. (International Standard Book Number, nemzetközi szabvá- Aki még nem rendelkezik semmilyen katalógussal, nyos könyvazonosító) vagy az általunk kiválasztott kulcs- egyszerûen válassza a File menü New Music Collection szót. A keresések az Amazon.com adatbázisa alapján történ- (Új zenegyûjtemény) parancsát. A CD-k adatainak nek, de brit, japán és német oldalakon is tudunk keresni. megadása hasonló a könyveknél látotthoz, csak a mezõk Ha ISBN-azonosító alapján akarunk keresni, akkor jó eset- különböznek. CD-gyûjteményünk katalogizálása még ben csak egy találatot fogunk kapni, míg másfajta keresése- könnyebb, ha a taglib kiterjesztések telepítve vannak ket indítva többet is. Válasszuk ki a megfelelõt, majd kat- a gépünkre. Ekkor csak tegyük be a kívánt zenei CD- tintsunk az Add Entry (Bejegyzés hozzáadása) gombra. lemezt a CD-ROM- vagy DVD-meghajtónkba, és kattint-

78 Linuxvilág Fogadó a Linuxhoz

akkor marad a gépelés. A könyvekhez hasonlóan itt is megjelölhetjük a kölcsönadott anyagokat. Ha pontosan tudjuk, milyen könyveink és zenéink vannak, és éppen hol találjuk õket, akkor garantáltan megnyugszik a lel- künk. Dõljünk hátra, lazítsunk – így még egy pohárka bor is jobban fog esni. És újra a bornál találjuk magunkat, na nem mintha ez olyan rossz téma volna. Mi van a borospincével? Hihetet- len, de a Tellico még itt is szóba jön. Ahogy könyveinket és zenéinket katalogizáltuk, úgy borgyûjteményünk adatait is összegyûjthetjük. Kattintsunk a File menü New pontjára, majd a New Wine Collection (Új borgyûjtemény) parancsra. Kattintsunk a Collection (Gyûjtemény), majd a New Entry (Új bejegyzés) parancsra, és szép egyenként meg is kezdhet- jük boraink adatainak bevitelét. (6. ábra) Sajnos nincs semmiféle varázslatos mód arra, hogy 4. ábra HTML formátumú jelentés borgyûjteményünk jellemzõit egy csapásra beillesszük az adatbázisba – minden egyes üveget kézbe kell vennünk, © Kiskapu Kft. Minden jog fenntartva és be kell gépelnünk az adatait. Persze ez legyen a legna- gyobb bajunk, hiszen ha lent lehetünk a pincében, és szöszmötölhetünk a gyûjteményünkkel, az nem is teher, hanem szórakozás. Végül, ha valaki egyedi adatbázisok kezelésére keres megoldást, ismét a Tellicot tudom ajánlani. Ha az elõre megadott sablonok egyike sem felel meg igényeinknek, hozzunk létre saját gyûjteményt. Az alapértelmezett gyûjteménymezõk ekkor rendkívül egyszerûek, csak a címre hagyatkoznak, de bátran módosítsuk õket. Miután létrehoztuk egyedi gyûjteményünket, kattintsunk a menüsor Collection (Gyûjtemény) elemére, majd vá- lasszuk a Collection fields (Gyûjteménymezõk) parancsot. Itt további mezõket is megadhatunk, ezek szövegesek, numerikusak vagy bármi egyebek lehetnek, amit csak 5. ábra A Tellico közvetlenül a CD-lemezekrõl is képes szeretnénk. beolvasni a címeket, az elõadók nevét és Most látom, mes amis, az óra mutatója bizony már a záróra a zeneszámok adatait után ballag. Most, hogy borospincénk tökéletesen napra- kész lett, François minden figyelmét rátok fordíthatja, és örömmel tölti újra poharatokat. A következõ alkalomig, mes amis, igyunk egymás egészségére! A votre santé! Bon appétit!

Linux Journal 2005. április, 132. szám

Marcel Gagné díjnyertes író, az ontarioi Mississaugában él. Legújabb, immár harmadik köny- ve a Moving to the Linux Business Desktop (ISBN 0-131-42192-1, Addison-Wesley). Hobbipilóta, Top- 40-es lemezlovas volt, tudományos-fantasztikus írá- sok szerzõje, jelenleg egy kisebb origami T-Rexen dolgozik. A [email protected] címen érhetõ el. 6. ábra Weboldalán számos további érdekességet találni, Akár borospince-adatbázist is készíthetünk többek közt kiváló boros hivatkozásokat is: www.marcelgagne.com. sunk a File menü Import, majd Import Audio CD Data  5. ábra (Zenei CD adatainak importálása) parancsára. ( ) KAPCSOLÓDÓ CÍMEK A program beolvassa a CD adatait, majd beemeli õket a katalógusba.  Ha az adatok beolvasása megtörtént, lépjünk vissza, www.periapsis.org/tellico és egészítsük ki az adatokat, ahogy kívánjuk. Természete-  www.marcelgagne.com sen, ha bakeliten vagy szalagon van a gyûjteményünk,

www.linuxvilag.hu 2005. május 79 Töprengõ

Betörések és betörési kísérletek I.

Gyakran használunk a köznapi nyelvben olyan kifejezéseket, melyeket a jogászi világ nem ismer. Például azt mondjuk: „betörés”, és a tényállás, amire gondolunk valójában „lopás, dolog elleni erõszakkal”.1 Vagy ha az elsõ kijelentést informati- kusként tesszük, akkor – bár talán nem is sejtjük – a számítástechnikai rendszer és adatok elleni bûncselekményre utaltunk. © Kiskapu Kft. Minden jog fenntartva

együk alapul a következõ szituációt: egy körülbe- • Befejezett kísérlet: az elkövetõ saját részérõl mindent V lül 100 gépbõl álló hálózat rendszergazdái va- megtett, hogy a bûncselekmény megvalósulásához gyunk, van egy remek tûzfalunk, és csak hobbiból szükséges eredmény (jelen esetben a jogosulatlan belé- gyûjtjük a betörési kísérleteket tartalmazó naplókat. pés) bekövetkezzen. Tehát tudatosan elindított egy A kísérletek alapvetõen két csoportba sorolhatóak: programot a neten, ami arra szolgál, hogy mások rend- szerébe beférkõzzön. 1. Az interneten szanaszét szóródott kíváncsiskodó prog- ramok, melyek, bezörgetnek, aztán, mikor látják, hogy • Befejezettlen a kísérlet, ha nem követett el mindent, a tûzfal nem egy „trivial joke” tovább állnak, ártani sem például megpróbálja elindítani a programot, de ne- akarnak nagyon, csak éppen ott lenni. hézségekbe ütközik (tegyük fel nem tud azon a nyel- ven, amelyiken a programot írták, és rosszul adja 2. A másik szélsõséget azok a speciálisan irányított progra- ki a parancsot). mok jelentik, amik sokkal agyafúrtabbak és „felügyelet A kísérletre fõ szabályként a befejezett bûncselek- alatt” próbálnak hozzáférkõzni a rendszerünkhöz. mény büntetési tételét kell alkalmazni, azonban kor- Konkrét céljuk van, adatot keresnek, módosítanak, vagy látlanul enyhíthetõ a büntetés, ha a kísérletet alkal- éppen tüntetnek el. Ilyen pl. mikor egy banki rendszert matlan tárgyon vagy alkalmatlan eszközzel próbálják feltörve saját számlájukra utal(tat)nak a ckrackerek. megvalósítani.

Az elkövetés módja • Alkalmatlan tárgyon: a célrendszer, amit megpróbál Lássunk egy példát az elsõ variációra! feltörni valójában nem létezik, csak a barátai ültették Egy nap egy arra leszünk figyelmesek, hogy a naplóbe- a bogarat és az ip címet a fülébe. jegyzések között egy bizonyos nyom túl gyakran szerepel. A kísérlet elsõ pillanatra nem tûnik komolynak, de a pró- • Alkalmatlan eszköz: ilyen esetben egy hálózat nélküli, bálkozások száma aggasztó. Eltelik további két nap (nyilván asztali géprõl próbálja meg futtatni a programot, amely a logokat most már gyakrabban figyeljük), a betörési kísér- nyilván nem jut ki a szobájából, sõt a gépébõl sem. letek száma nõ. Jogászi szemmel nézve az elkövetési magatartás: számítás- Nem büntethetõ kísérlet miatt, akinek elállása folytán technikai rendszer elleni bûncselekmény kísérlete. Ha való- marad el a bûncselekmény befejezése, továbbá az sem, ban sikerült volna feltörnie a rendszerünket, akkor a tényál- aki az eredmény bekövetkezését önként elhárítja. lás minden elemét megvalósítva, elköveti a vétséget (alap- Ezek az esetek még szemléletesebbek: esetben vétség, és egy évig terjedõ szabadságvesztéssel, közérdekû munkával vagy pénzbüntetéssel büntetendõ). • Elállás: Tehát a cracker az asztalánál ül, ujja az enteren, Így azonban a cselekménye a kísérlet szintjén megrekedt.2 épp készül rászabadítani a világra egy tucat vírust, ami- A kísérletnek több típusa van, lássunk ezekre vonatkozóan kor megszólal a lelkiismerete és a „start” parancs helyett egy-egy példát. a „delete” parancsot adja ki.

1 Btk. 316.§ e, 2 Btk. 16.§

80 Linuxvilág Töprengõ

• Elhárítás (meglehetõsen légbõl kapott): Miután elindí- • nagyobb, ha kétszázezer forintot meghalad, totta a programokat, eszébe jut a Btk, és gyorsan vé- de kétmillió forintot nem halad meg, gigtelefonálja a megcélzott intézményeket, mindenütt éppen véletlenül sikerül is beszélnie a rendszergazdák- • jelentõs, ha kétmillió forintot meghalad, kal, akiknek pár perc alatt (esetlegesen programsorok de ötvenmillió forintot nem halad meg, bediktálsával, vagy megküldésével) elmondja, hogyan is lehet az õ vírusait megállítani. • különösen nagy, ha ötvenmillió forintot meghalad, de ötszázmillió forintot nem halad meg, Az elsõ eset persze tovább súlyosbítható, hiszen nem csak belépni, jogosultságot túllépve vagy megsértve bent • különösen jelentõs, ha ötszázmillió forintot maradni lehet, hanem – ha már ott van – az elkövetõ meghalad.

1. jogosulatlanul megváltoztathatja, törölheti vagy A technikai intézkedések kijátszása, hozzáférhetetlenné teheti a rendszerben tárolt, és következményei feldolgozott, kezelt vagy továbbított adatot Egy másik, tényállásként rögzített bûncselekmény (pl. egy nagyobb vállalatnál a karácsonyi címlistát a „számítástechnikai rendszer védelmét biztosító tech- összekeveri, és az üdvözletek ennek hatására nikai intézkedés kijátszása.” Ez szorosan összefügg az sosem érkeznek meg) elõzõekben ismertetettel, hiszen itt a számítástechnikai © Kiskapu Kft. Minden jog fenntartva rendszer és adatok elleni bûncselekmény elkövetése 2. adat bevitelével, továbbításával, megváltoztatásá- céljából, az ehhez szükséges vagy ezt könnyítõ számí- val, törlésével, illetõleg egyéb mûvelet végzésével tástechnikai program elkészítése, a jelszó, a belépési a számítástechnikai rendszer mûködését jogosu- kód, vagy számítástechnikai rendszerbe való belépést latlanul akadályozza, (olyan méretû leveleket kül- lehetõvé tevõ adat megszerezése illetve forgalomba dözget (kitömörített kernel), hogy a teljes levelezést hozása, az azzal való kereskedés, vagy más módon lefagyasztja. hozzáférhetõvé tétel jelenti magát a cselekményt. Ezzel kapcsolatban életszerû példa az a pár éve történt Ezekben az esetekben a magatartás még mindig vétségnek eset, mikor az interneten közzétették egy szolgáltató minõsül, de a büntetési tétel felsõ határa két év, a közérde- elõfizetõi névsorát, felhasználói nevekkel, jelszavakkal kû munka illetve pénzbüntetés marad. együtt. Ez a cselekmény tehát a mai szabályozás sze- Még eggyel súlyosabban esik a latba, ha a fentebbi rint minimum vétségnek minõsülne és 2 évig terjedõ cselekedeteket jogtalan haszonszerzés végett teszi és szabadságvesztéssel, pénzbírsággal vagy közérdekû cselekedetével kárt okoz. A cselekmény ebben az eset- munkával lenne büntethetõ. ben már bûntettnek minõsül, a büntetési tétel maximu- Mentesül azonban az elkövetõ, aki még mielõtt ma pedig 3 év, de a kár nagyságának függvényében fentebbi cselekedete a hatóság (többnyire rendõrség emelkedhet: vagy nemzetbiztonsági hivatal) tudomására jutott volna tevékenységét a hatóság elõtt felfedi, és az elké- • egy évtõl öt évig terjedõ szabadságvesztés, szített dolgot a hatóságnak átadja, valamint lehetõvé ha a bûncselekmény jelentõs kárt okoz, teszi a készítésben részt vevõ más személy kilétének megállapítását. • két évtõl nyolc évig terjedõ szabadságvesztés, Mostani utolsó elemként egy szintén érdekes – talán ha a bûncselekmény különösen nagy kárt okoz, sokak szerint ismeretlen részlet: Bûncselekmény az is, ha valaki a számítástechnikai program, jelszó, belépési • öt évtõl tíz évig terjedõ szabadságvesztés, kód, vagy valamely számítástechnikai rendszerbe való ha a bûncselekmény különösen jelentõs kárt okoz. belépést lehetõvé tevõ adat készítésére vonatkozó gazda- sági, mûszaki, szervezési ismereteit másnak a rendelkezé- A kár mértéke sére bocsátja. (elkövetõvé válik például az, aki lediktálja Amint láttuk, az okozott kár nagy mértékben befolyá- valakinek a kódot, vagy elmondja, õ hogyan készítené, solja a bûncselekmény súlyát. Az összegekkel kapcso- vagy az is, ha részegen a kocsmában kifecsegi, hogy latosan a törvénykönyv maga rögzíti a határokat,3 milyen biztonsági lyukak vannak az általa épített vagy melyeken belül a bíróság csupán a büntetési tétel hatá- üzemeltetett rendszerben.) rai között mozogva veheti figyelembe, hogy az elkövetõ alig lépte át a határt, illetve, hogy 200 forint híján másik Dr. Dudás Ágnes ([email protected]) kategóriába esik. ügyvédjelölt, az FSF egyik aktivistája. 2004-ben Lássuk ezt a rendszert: végzett az ELTE Jogtudományi Karán. Szakdol- gozatát a szoftverek szerzõi jogi védelmérõl • kisebb, ha tízezer forintot meghalad, de kétszázezer írta, a 2003-as évet pedig e terület kutatásával forintot nem halad meg, a berlini Humboldt Egyetemen töltötte.

3 Btk. 138.§

www.linuxvilag.hu 2005. május 81