SZÓTÁR 6. RÉSZ artva

Nézzük, mivel bosszanthatjuk fel a lényegében olyan fájlrendszert takar, hard link  közvetlen hivatkozás hunglizmus híveit e hónapban – lega- amelyik képes „ráülni” egy másik fájl- hozzáférési pont – access point lábbis sok olvasó teljesen biztos benne, rendszerre. Azért is nehéz kérdés, mert hurokhívás – (recursion) az önhívás egy hogy valami ehhez hasonló mottó a stack mint adatszerkezet is szerepel, változata, amikor közvetve történik jegyében írom meg minden hónapban valamint a stackable mint fogalom is meg az önhívás (például két függvény- a szótároldalt. Természetesen nem az a (például a stackable router jelentése nyel kialakított önhívás). célom, hogy csökkentsem a hipotóniás tornyozható vagy halmozható útvá- illegal operation exception  érvény- t. Minden jog fennt esetek számát, és szerencsére a legtöbb lasztó – amikor több útválasztót össze telen mûveleti kivétel szakember egyetért a magyarításokkal. tudunk kötni, és azok egyetlen egység- init rendszerindítás és -beállítás Amihez – sajnos – kezdek hozzászokni, ként képesek dolgozni). A végén – ta- inode fájlleíró a fiatalok szemében látható csillogás, lán nem a legszerencsésebben – a hal- interprocess communication – folyamat- mikor szinte kéjesen mesélik, mennyire mozható fájlrendszer mellett marad- közi (folyamatok közti) kapcsolattartás vagány, mások által érthetetlen tolvaj- tunk, mondhatnók, a pocakcsapkodás Interrupt Descriptor Table  IDT, azaz © Kiskapu Kf nyelvet alakítottak ki baráti körükben módszerét alkalmazva. megszakításleíró tábla (melyrõl késõbb rendszerint kiderül, Ezúton is kérek mindenkit, ha ötlete joystick  botkormány hogy csupán az irc és az ad&d angol van az újságban lévõ szavak magyarí- kapu  port nyelvezetének egy fura, minden nyelv- tásával kapcsolatban, ossza azt meg kernel panic  magpánik tani szerkezetet nélkülözõ, eltorzult velünk! kodek – (codec) kódolást és visszafejtést változata). Szerencsére azonban idõvel Jó olvasást! is végzõ rész, ami például lejátszókban az ember rájön, hogy a nyelv milyen mint kiegészítõ modul használható. fontos – nem csupán a pontos és ért- kódoló – encoder hetõ beszéd, de az írott nyelv, sõt a access point  hozzáférési pont közvetett hivatkozás – soft, symbolic link gondolkodásra gyakorolt hatása is. És adatfolyam – data stream közvetlen hivatkozás – hard link, má- szinte természetes, hogy a nyelv fejlõ- adatsín – data bus sodbejegyzés dése során több szó „próbálja ki magát” alulcsordulás – underrun lapkakészlet – chipset egy-egy fogalom képviseletében. array  fürt listener  figyelõ Talán pont ez bosszantja leginkább az bõvítmény – plugin nyers erõ – (brute force) A nyers erõ informatikusokat. Micsoda feszültséget brute force – nyers erõ módszerének hívjuk a különleges vagy tud szülni, hogy (veszõparipámra burkoló – wrapper ügyes megoldások nélküli, egyszerû utalva) a meghatározás és a definíció bus – sín módszereket, amelyek (más megol- ugyanazt jelentik! Vagy hogy az ember carrier grade – távközlésben haszná- dásokhoz képest) komoly erõforrást külföldön megtanulja, hogy process, latos, nagy adatátvitelhez kialakított, igényelnek. és idehaza folyamatnak nevezik! Ezek távközlési önhívás – recursion egyszerû példák, mindenkinél máshol chipset – lapkakészlet patch  folt van a határvonal. Van, akinek termé- cluster  telep plugin  bõvítmény szetes, hogy útválasztókról beszél, van, code-freeze  kódfagyasztás port – kapu aki még a rendszergazda helyett is codec  kodek privileged instructions  a program administratort képes mondani. Vannak data bus – adatsín jogosulatlanul szeretne hozzáférni a olyan szavak, kifejezések, amelyek a data stream – adatfolyam magból a tárterülethez, vagy hibásan „mesgyén” vannak, egyszerûen nem decoder – visszafejtõ hajt végre kiváltságokhoz kötött tudjuk eldönteni, hogy melyik szót encoder – kódoló utasításokat. használjuk az újságban. Ilyen például érintõképernyõ – touch screen recursion – önhívás, hurokhívás az abszolút útvonal, ami helyett sok- event  esemény segmentation – szakaszolás szor a kifejtett vagy teljes, teljesértékû farm  telep segmentation fault  szakaszolási hiba útvonalat használják, vagy ott van az figyelõ – listener sín – bus I/O rövidítés, ami mindenki számára filter  szûrõ soft link  közvetett hivatkozás a be- és kimenetet jelenti, sõt elsõre folt – patch symbolic link  közvetett hivatkozás komoly kihívás az I/O magyar megfele- folyam – stream stackable filesystem  halmozható lõjének, a B/K-nak a megfejtése. force feedback – (jó ötleteket várunk!) fájlrendszer Vannak olyan szavak is, amelyekre fürt – (array) valamilyen szempontból stackable device  tornyozható eszköz nemigen találunk a szakmában „hagyo- azonos típusú eszközök együttese, structure szerkezet mányos” fordítást. Ebben a hónapban amelyet logikailag egy eszközként szakaszolás – segmentation ismét elõkerült a carrier grade, ami a kezelhetünk. Amennyiben teljes értékû szûrõ – filter „távközlésben használatos” értelemmel gépeket állítunk össze, telepekrõl telep – farm, cluster bír, mégis nehéz lefordítani, fõleg, ami- beszélünk. touch screen  érintõképernyõ kor valamelyik -változat „Carrier halmozható fájlrendszer – (stackable underrun  alulcsordulás Grade Edition” termékérõl beszélünk. filesystem) más fájlrendszerekre visszafejtõ – decoder Sokkal nagyobb gondban voltunk a ráépülni képes, további szolgáltatásokat wheel  görgõ (egérgörgõ) stackable filesystem kifejezéssel, ami biztosító kiegészítés. wrapper  burkoló artva Beköszöntõ t. Minden jog fennt

Móka és kacagás világába kukkantunk be. © Kiskapu Kf Sokan panaszkodtak, hogy Ez utóbbi témával kapcsolatban ismét keveset foglalkozunk a játé- egy nagyon nehéz magyarítással kap- kokkal, sõt egy rendszer nem csolatos kérdésbe futottunk, ez pedig is igazi rendszer, ha nem le- a stackable filesystem, de errõl részlete- het rajta jóízût játszani. Hi- sebben az elõzõ oldalon lévõ szótárol- szen már az iskolában is azt dalon írok. tanítják, hogy könnyedén, Mindig örömömre szolgál, ha valami- vidáman kell venni az élet- lyen ügyes megoldást mutathatunk be. ben elénk kerülõ akadályo- E hónapban is sikerült ilyeneket kat. Régebben egy-egy játék közzétenni. Az elsõ, ami igazából egy erejéig kitekintgettünk a külön „világ”, a mikrovezérlõk progra- „száraz” szakmai világból, de mozásával kapcsolatos, rejtelmeibe most külön csemegéket nyúj- Havránek Ferenc vezet be bennünket tunk át játékos kedvû olva- (37. oldal). De hasznos megoldást mutat sóinknak! A 74. oldaltól kez- be – igaz, egy teljesen más területrõl – Szy György dõdõen ugyanis egy egész kis mellék- Fülöp Balázs is a 64. oldalon. És egybõl a Linuxvilág fõszerkesztõje, letnek beillõ rész foglalkozik a linuxos utána következik Kolcza Péter cikke a a Kiskapu Kiadó vezetõje. játékokkal. Sõt még Marcel is kiruccan a házi multimédia könnyed megvalósí- Mindenki levelét örömmel fogadó nyugodt világából egy kis köny- tásának lehetõségeirõl. várja a következõ levélcímen: nyed fénymotorozásra (68. oldal). Sze- [email protected] rencsés egybeesés, hogy a Gentoo is Vállalatirányítási rendszerek most erõsített be a linuxos játékok A több hónapja rágcsált téma nem halt területén. el, az ötleteket továbbra is gyûjtjük! De nem csupán a kikapcsolódás oltárán E hónapban a GKM és az IHM által kiírt feláldozott idõ eltöltésének minõségi két pályázatról szóltam. Érdekes össze- színvonalával foglalkozunk e hónapban. hasonlítani, hogy a két különbözõ szem- Ahogy már megszokhattuk, találkozunk pont szerint mûködõ minisztérium több rendszergazda-nevelõ cikkel is. mennyire másként ír ki egy ilyen pályá- Nagy örömömre méltó testvért találtunk zatot. És fõleg, hogy mennyire másként dr. Büki András cikke mellé (Héj- állnak hozzá a nyílt alapú rendszerek- programozás, 2. rész, 59. oldal), ami a hez. Sajnálattal vettem tudomásul, hogy szabályos kifejezéseket mutatja be az IHM pályázati kiírásából szinte üvölt, (40. oldal). No igen, a már klasszikus hogy a pályázó nyílt rendszerekben idézet a klasszikustól: /(bb|[^b]{2})/. nem is gondolkodhat. A cikkek között a Vezérfonal e hónap- Talán abból is egyértelmûen következik ban a rendszermag, ezen a területen is ez, hogy a megpályázható rendszer sok érdekeset igyekeztünk belekana- mögött nem elég, hogy cégnek kell lazni ebbe a nyolcvanegynéhány oldal- állnia, de a cég tavalyi (rendszereladá- ba. A 21. oldalon kezdõdõ cikkében sokból befolyt) bevétele meg kell haladja Robert Love igyekszik nekünk röviden a százmillió forintot. Nos, ha jól tudom, bemutatni, hogy milyen újdonságokat pont annyi ilyen cég van jelen a hazai várhatunk a 2.6-os sorozattól, de foglal- piacon, ahány ezeréves tölgy az Asto- kozunk még a titkosító API-val (32. rián. Csendben reménykedem csupán, oldal), a magmódú programokkal (29. hogy jövõre több tucat olyan megoldás- oldal) és a 2.5-ös beállításával (26. oldal) szállító legyen szent hazánkban, akik is. A témát pedig egy érdekes kitekintés nyílt rendszerekbõl ekkora bevételt zárja, aminek révén a fájlrendszerek könyvelhettek el. Vezérfonal

artva Programvadászat

Játékok gcc-2.96 és gcc-3.2). A telepítése nagyon kat, lépjünk be a keletkezett könyvtárba. E számunktól kezdve megpróbáljuk a egyszerû, az rpm alapú rendszereken Rendszergazdaként (root) futtassuk a játékokat kedvelõ Linux-rajongóknak a megfelelõ könyvtárban adjuk ki az mozilla-installer parancsot, ha megmutatni, hogy mit is lehet kedvenc rpm -i opera_csomag_neve.rpm mindenki számára elérhetõvé akarjuk

t. Minden jog fennt operációs rendszerünk alatt játszani. parancsot, deb csomagnál ez dpkg -i tenni a programot, vagy egyszerû fel- opera_csomag_neve.deb, ekkor a használóként, ha csak mi akarjuk hasz- telepítõrendszer megvizsgálja, hogy nálni, esetleg nem rendelkezünk meg- nekünk tényleg erre a csomagra van-e felelõ jogosultságokkal a rendszeren. szükségünk. Amennyiben igen, akkor Ha felhasználóként telepítjük, meg kell egy Opera böngészõ boldog tulajdonosai változtatni a telepítési célkönyvtárat.

© Kiskapu Kf és használói lettünk. Kicsit bonyolultabb a telepítés a tar.gz fájlokból: ezeket a SuSE-frissítések fájlokat ki kell csomagolnunk, majd az Az elõzõ számunk mellékletén megje- install.sh fájlt kell a kicsomagolt lent SuSE-kiadáshoz adjuk most közre könyvtárban futtatnunk. a frissítéseket. Sok olvasónk kérdezte, A korongra feltettük a megbízható hogy honnan érhetõ el a cikkemben leírt 6.12-es Opera-változatot is azok számá- FTP-archívum, ahonnan a teljes csomag- A korongon helyet kapott a Quake játék ra, akik nem szeretik a próbaváltozatok- listát elérhetik a 8.2-es változathoz. mindhárom változata, amelyekhez kal érkezõ esetleges hibákat. A helyzet az, hogy idõben annyira elé- részletes telepítési útmutatót kaphatnak mentünk a dobozos változat megjelené- játék rovatunkból. Mozilla sének, hogy a magazin megjelenésekor Másik két játékos cikkünkhöz olvasóink 1.3 az FTP-kiszolgálókra még nem kerültek szintén a korongon találhatják meg a A legfrissebb megbízható Mozilla az ki a csomagok. Most már elérhetõ bárki programokat, ezek telepítéséhez az 1.3.1, ez mind hálózati telepítõ, mind számára, íme a kiszolgálólista: archívfájlokban találhatunk útmutatót. teljes telepítõcsomagban felkerült a  ftp://gd.tuwien.ac.at/linux/suse/ korongra. suse.com/i386/8.2/ Opera  ftp://ftp.solnet.ch/mirror/SuSE/i386/8.2/ Az Opera böngészõ fejlesztõinek révén 1.4 Sajnos magyar tükröt eddig nem talál- kirepültek a 7. sorozat elsõ fecskéi. Ezek Az 1.4-es fejlesztõi Mozilla-változat tam (bevallom, nem is nagyon kerestem, csak a kipróbálásra szánt változatok, azoknak kedvez, akik szeretik kipróbálni csak néhányat néztem meg), nincs fent úgyhogy senki se lepõdjön meg azon, az újdonságokat. Ennél a programnál is az anyag az ftp://ftp.suselinux.hu-n sem, ha valami furcsaság történik a haszná- meg kell említenem, mint ahogy tettem csak egy fájl, ami HAMAROSAN… lata közben. Én ilyet nem tapasztaltam, ezt az Opera böngészõ próbaváltozatá- névre hallgat. pedig nyüvöm egy ideje. Még mindig nál is, hogy csak azok használják, akik hihetetlenül kis helyet foglal mind a tudják, mire is vállalkoznak ezzel a Rendszermag E havi lapszámunk fõ témája a Linux- rendszermag, ezekhez a cikkekhez kapcsolódik szervesen a rendszermag- könyvtárban a legfrissebb fejlesztõi mag, ami a 2.5.69-es változatszámú. Ezen már mindenki bátran kísérletezhet, és ismer- kedhet a (reméljük!) hamarosan meg- jelenõ 2.6-os vagy 3-as megbízható rendszermag újdonságaival, változá- saival. Szükség is van az ismerkedésre, mivel a fejlesztõk rendesen átalakították néhány helyen, s ez a beállításra is lépésükkel. Itt is elõfordulhat hibás, vonatkozik. merevlemezen, mind pedig a memóriá- rendellenes mûködés, engem azonban Jó kísérletezést! ban – ennek köszönhetõen gyorsan az új dolgok hatalmas csábító erejükkel elindul még a régebbi gépeken is. CD- mindig meggyõznek arról, hogy tudom, Csontos Gyula mellékletünkön megtalálhatják a leg- mit csinálok! Így tettem a Mozillával is ([email protected]) frissebb 7.11 beta2 változatot, többféle az Opera mellett, mindig merevleme- A Linuxvilág szakmai és formátumban is. Szerepel közöttük rpm, zemre kerül a legfrissebb változat is. CD-szerkesztõje. Szabadide- deb, tar.gz, tar.bz2 és ppc.rpm fájl, kü- Telepítése mindkét esetben rendkívül jében szívesen mászik hegyet lönféle fordítókkal fordítva (gcc-2.95, egyszerû: csomagoljuk ki az archívumo- és kerékpározik.

6 Linuxvilág Hír-lelõ

Juhu! Túlcsordulás-védelem USB-s csecsebecse-rajongók, Közel két év kitartó munkájának ered- rendszermagszinten figyelem! ményeképpen megszületett az UHU- Ingo Molnár fontos linuxos biztonsági Újabb taggal bõvült az artva Linux 1.0 Office. Az elsõsorban irodai és bõvítést jelentett be május elején. Az SMC EZ Networ- otthoni felhasználásra felkészített UHU- Exec Shield rendszermagfolt feladata az, king termék- Linux az eddig nyilvánossá tett kiadás hogy megvédje a rendszert a verem, a családja: egy elõtti változatokhoz képest megújult pufferek és a függvénymutatók túlcsor- USB 2.0 felü- külsõvel és minden eddiginél frissebb dulásainak káros következményeitõl letre tartalommal kerül terjesztésre. Hazánk – amelyek az „egyszerû” adatmódosu- csatlakozó 10/100 nemzeti Linux-terjesztése élen jár a lástól egészen a rendszer feletti ellenõr- Mb/s sebességû ethernetcsatolóval. magyar nyelv támogatásában: minden zés támadó általi átvételéig terjedhet- Hasonló eszközöket eddig is lehetett idõk messze legjobb magyar helyesírás- nek. A hatékony, a rendszer számára vásárolni, ám inkább USB 1.1-es t. Minden jog fennt ellenõrzõjével – ami az OpenOffice.org- minimális többletterhelést jelentõ folt felülettel, ami a maga 12 Mb/s ban megtalálható myspell-motor tovább- mûködése a felhasználók és az alkalma- sebességével nem tette lehetõvé az et- fejlesztett változata –, a többi linuxos zások számára átlátszó, a programok hernet kínálta átviteli lehetõségek ki- terjesztéshez képest rendkívül jó Gno- újrafordítására nincs szükség. A folt használását – a szûk keresztmetszet me- és KDE-fordításokkal. bizonyos típusú hibák következményei- az USB 2.0 alkalmazásával végre eltûnt.

Kimondottan a magyar felhasználók nek elhárítására ugyan nem képes, ám Az SMC új csatolója célszerû kialakítású, © Kiskapu Kf igényeinek kielégítésére, elõre telepített a túlcsordulások miatti gondok túlnyo- apró bütyökként ékesíti használójának változatban megtalálható a MKOGY mó részét várhatóan elfeledhetjük. számítógépét, bár figyelembe véve, CompLEX CD Jogtár, valamint a Lafisoft hogy ethernetcsatoló nélkül ma már raktárkezelõ és számlázóprogram. P-sorozat a Matroxtól elég nehéz számítógépet venni, alkal- Az UHU-Linux 1.0 irodai összeállítására Két új grafikus kártyát mutatott be a mazási köre elég szûknek tûnik. Akinek méltán büszkék lehetünk – gratulálunk Matrox, P650 és P750 jelzéssel, egyben mégis jól jönne egy ilyen játékszer, a fejlesztõknek! A változat letölthetõ – a hosszú éveken át futott G-sorozat 33 dollárért szerezheti meg. vagy kereskedelmi termékként ajándé- után – életre hívva a P-sorozatot. A játé-  http://www.smc.com kokkal, könyvvel megvásárolható az kosokról már szó sincs a cég közleményé- UHU-Linux honlapján. ben, hiszen – sokak bánatára – a Matrox Sikeres az iTunes A terjesztés várhatóan a számítástech- termékei teljesítményüket tekintve jó Az Apple Computer internetes zenebolt- nikával foglalkozó üzletekre, könyves- jának megnyitását erõs kételkedés övez- boltokra és áruházakra egyaránt kiterjed. te. Sokan öltek már hatalmas összegeket  http://www.uhulinux.hu egy-egy internetes szolgáltatásba, és Gibizer Tibor nagyon sokan buktak vele hatalmasat. Nem így az Apple, amelynek új iTunes Music Store szolgáltatása elsöprõ sikert United Devices: Grid MP 4.0 aratott: nyitás után a kizárólag Apple- A United Devices, az osztott hálózati felhasználók számára elérhetõ oldalon alkalmazások piacvezetõ gyártója beje- körülbelül 275 000 zeneszámot adtak el, lentette Grid MP 4.0 termékét. Az új darabonként 99 centes, vagyis közel változat teljesen új szemléletet alkalmaz 230 forintos áron. A vásárlók letöltés az erõforrások, a ideje elmaradnak az ATi és az nVidia lap- után CD-re írhatják vagy iPod készülék- felhasználók és a káira épülõ kártyák mögött. A teljesít- re tölthetik át a zeneszámokat, az Apple házirendek virtu- mény azonban nem minden; legendásan tehát egyben saját hordozható lejátszója ális kezelésében, üzenettovábbító felü- jó képminõségének köszönhetõen a Mat- iránt is erõsítheti a keresletet, mindent letének köszönhetõen pedig a koráb- rox biztos piacra lel a grafikusok, tervezõk átfogó szolgáltatást nyújtva ügyfeleinek. binál jóval több alkalmazást lehet – akár körében, akik két-három kijelzõvel felsze- A szolgáltatás kiterjesztését év végére módosítás nélkül – lazán összekapcsolt relkezve a korábbinál jóval hatékonyab- tervezik, ami ekkor várhatóan már csomópontokból álló hálózaton futtatni. ban tudják végezni munkájukat. PC-rõl is elérhetõ lesz. Szintén újdonság a Linux alapú alkal- Mindkét kártya Parhelia-LX lapka köré Az iTunes sikerét jelentõs részben az mazások windowsos futtatásának lehe- épül, 8× AGP felületre csatlakozik és magyarázza, hogy míg CD-n 16–18 dol- tõsége, aminek révén a felsõbb kategó- 64 MB DDR RAM-ot tartalmaz. A P650 lár egy album, addig letöltve mindössze riás gépekrõl kilépve jelentõs, korábban két megjelenítõ vezérlésére képes – ezek 10 dollárt kell fizetni érte. A lemezkia- vélhetõen kihasználatlan számítási hagyományos monitorok, analóg és digi- dók is nyilván jól járnak, és miután teljesítményt lehet az adott vállalat tális TFT-panelek egyaránt lehetnek, illet- hosszú éveken harcoltak a zeneszámok szolgálatába állítani. ve a második kimenetre tévé is csatlakoz- internetes terjesztése ellen, végre hasz- A United Devices megoldása adja a tatható. A P750 ennél is többet tud, bizo- not húzhatnak a hálózati eladásokból. grid.org szervezet hátterét is. Aki rák-, nyos korlátozások révén akár három kijel- Amennyiben az Apple szolgáltatása antrax- vagy himlõkutatási célokra zõvel is elboldogul. A P650 ára körülbelül hosszú távon is életképesnek bizonyul, szeretné felajánlani számítógépének 38 ezer forint lesz, a P750 pedig 54 ezer illetve elérhetõségét kiterjesztik, végre felesleges processzoridejét, az ügyfél- forint körül lesz megszerezhetõ. Lapzár- megkezdõdhet az a változás a zeneszá- programot a  http://www.grid.org tánk idején mindkét kártya elõrendelése mok kereskedelmében, amire hosszú oldalról töltheti le. lehetséges már a Matrox oldaláról. ideje várunk.  http://www.ud.com  http://www.matrox.com  http://www.ipod.com/music/store/

www.linuxvilag.hu 2003. június 7 Hír-lelõ

Nosztalgiázó Verbatim Linuxos kiszolgálók Magát az eszközt a koreai IMRI fejlesz- A Verbatim új „vinil” CD-lemezeire – ame- Opteron processzorokkal tette, operációs rendszerét pedig a lyek a régi bakelitlemezek világát idézik – Az AMD új, 64 bitesprocesz- Pekingi Mûszaki Egyetemen állították artva tintasugaras nyomtatóval is nyomtatha- szoraitól hangos a fél szak- össze. Hasonló játékszert a Sony is kínál, tunk. Nosztalgialemezeket eddig is mai ám kisebb tudással és drágábban. A kö- gyártott a Verbatim, ám a lemezek felü- világ, rülbelül 560 dolláros árú készülék ope- letére – erre alkalmas felület, címke hiá- a különféle cégek egymás sarkát taposva rációs rendszerét egy nonprofit szer- nyában – eddig nem jelentik be, hogy támogatják az Opteron vezet segítségével nyilvánosan is lehetett nyomtatni. lapkák használatát. A kifejezetten Linux elérhetõvé fogják tenni. A 80 perces CD-ket, alapú megoldásokat szállító Penguin amelyek Computing sem marad ki a sorból, Altus Újabb IP-telefonok a

t. Minden jog fennt minden te- 1000E kiszolgálóival az AMD legújabb Cisco kínálatában kintetben termékének sikerébõl próbálja kihasítani A Cisco Systems új IP- a régi leme- a maga hasznát. Az állványba szerelhetõ telefonokat – szám sze- zeket idézik gépeket kifejezetten fürtökben való rint hármat – jelentett – még barázdákat használatra kínálják, erre utalnak az be. A Cisco 7920-as is találunk a felületü- összeállítás adatai is. Az 1 egység magas jelzésû mobil telefon-

© Kiskapu Kf kön –, elsõsorban azoknak ajánlják, akik gépházba kettõ 200-as sorozatú Opteron készülék 802.11b szab- régi felvételeiket korszerûbb, a lejátszások processzor és legfeljebb 16 GB DDR vány szerinti vezeték alkalmával nem sérülõ adathordozóra RAM kerülhet. A gépeket lemezek nélkül nélküli hozzáférési szeretnék másolni. A nem csak zene is lehet rendelni, kettõs gigabit ethernet- pontokon keresztül tárolására alkalmas lemezek nyomtatható csatolóval bírnak, esetleges bõvítésüket továbbítja a beszélgetéseket, címkéjüknek köszönhetõen egyedi meg- pedig PCI-X foglalat segíti. A cég három- így elsõsorban olyan helyeken tehet jó jelenéssel ruházhatók fel, és jól felhasz- éves garanciával kínálja kiszolgálóit, szolgálatot, ahol a munkatársak egy- nálhatók céges anyagok, egyedi összeállí- amelyekre elõtelepítik a SuSE Enterprise mástól távol, szétszórtan végzik a tások, bemutatók terjesztésére is. A Ver- Server 8 64-bites változatát. munkájukat. batim normál lézerlemezeihez hasonlóan  http://www.penguincomputing.com A 7902G és 7912G készülékek asztali ellenállnak az UV-sugárzásnak, a karcolá- használatra készültek. Szabványos soktól pedig kettõs védõréteg óvja õket. Játékra fel! ethernethálózathoz csatlakoznak, és Az élettartam-garanciával kapható leme- A Lycoris és a TransGaming összefogá- minden olyan szolgáltatást biztosítani zek ára – 50-es csomagban – 50 dollár. sának eredményeként a játékosoknak tudnak, amit egy általános irodai tele-  http://www.digitalvinylcdr.com többé nem kell ráfanyalodniuk a Win- fontól a használója elvár: hívásismétlés, dowsra – állítja a két cég. A közösen hívásátadás, hívásvárakoztatás, konfe- Ínyenceknek: PlexWriter Premium megjelentetett GamePak egyrészt öt renciahívás stb. Mindkét készülék egy A Plextorra nem jellemzõ, hogy naponta nyílt forrású, kifejezetten a Desktop/LX telefonszámot kezel, beállításaik TFTP- jelentetne meg újabb és újabb terméket, operációs rendszerhez igazított, új han- protokollon keresztül frissíthetõk, vala- ám az ilyen ritka pillanatok annál több gokkal és grafikával mint a DHCP-protokollt is támogatják. érdekességet tartogatnak. Nincs ez más- feljavított játékot, A Cisco ugyanakkor további telefonos és képp a legújabb PlexWriter Premium másrészt egy hónap- egyéb terméket, bõvítést, alkalmazást is CD-íróval sem, ami 52×-es írásra, 32×-es nyi WineX-elõfizetést bejelentett. újraírásra és 52×-es olvasásra képes. foglal magában.  http://www.cisco.com A meghajtóhoz mellékelt PlexTools se- A szintén most meg- gédprogrammal különleges, a Plextor jelent WineX 3.0 révén Windows helyett CrossOver meghajtóját egyedivé varázsoló lehetõ- több mint 250 win- A CodeWeavers lassan új nevet is ségek egész sorát aknázhatjuk ki. dowsos játék futtatható Linux alatt is, kereshet a 2.0-sá érett CrossOver Office- • SecuRec: a lemezek jelszóval köztük olyan sikeres programok is, mint nak. A Linux–Microsoft-barátságot védhetõk. a Battlefield 1942, Medal of Honor vagy – több fontos windowsos alkalmazásnak • GigaRec: egy 700 MB-os lemezre a SimCity 4 – természetesen ezeket már Linux alatt is futtat- 1 GB anyagot lehet rögzíteni. külön kell megvásárolni. hatóvá való tételével • Q-Check: írás után ellenõrzi a lemez  http://www.lycoris.com – szorgalmasan ápoló minõségét és esetleges hibáit.  http://www.transgaming.com program ugyanis a • Silent Mode: a tálca mozgatásának, Microsoft Office XP a lemez felpörgetésének és olvasá- Újabb linuxos PDA összetevõi mellett sának sebessége – és ezzel zajossága Mindentudó linuxos zsebtitkárt mutatott (az Outlookot kivéve) is – szabályozható. be a japán PalmNet. A készüléket állító- már az Adobe Photo- • VariRec: a lézersugár energiája lag cégeknek fejlesztették, amit további shop 7-es változatát és az Accesst is állítható, így a zenei felvételek is szolgáltatásokkal kiegészítve és testre- támogatja. Az új változat immár a japán, kiváló minõségben rögzíthetõk. szabva majd a saját nevük alatt dobhat- kínai és koreai nyelvû alkalmazásokat is A meghajtó ATAPI-felületre illeszkedik, nak piacra. A tenyérnyi mindenes nem- futtatja, újabb hatalmas piacokat nyitva a gyorstár-alulcsordulások ellen 8 MB csak elektronikus noteszként, de mobil- meg a CodeWeavers elõtt. Az új változat memóriával védekezik. Ára 30 ezer telefonként és digitális kameraként is az összes nagyobb terjesztést támogatja, forint körül alakul majd. használható, illetve vezeték nélküli ára 55 dollár.  http://www.plextor.com hálózati kapcsolatot is képes teremteni.  http://www.codeweavers.com

8 Linuxvilág Hír-lelõ

IBM Linux-központ nyílt Londonban Blu-ray Az IBM új, elsõsorban a pénzügyi szakma A Sony bemutatta a világ elsõ Blu-ray igényeit kielégíteni hivatott Linux-tanács- Disc elõírások szerint mûködõ optikai artva adó központot nyitott Londonban. A köz- meghajtóját. A DVD utódjának szánt pont feladata az, hogy a gyakorlatban is Blu-ray – kék lézert használó – formá- kipróbálhatóvá tegye azokat a Linux ala- tum fejlesztésekor az volt a cél, hogy pú megoldásokat, amelyeket az IBM kínál HDTV minõségû mozgóképet lehessen ügyfeleinek, és ilyen módon a Linuxra rögzíteni az újfajta lemezekre – igaz, való áttérésre buzdítsa a bankokat, pénz- ez a lehetõség megfelelõ mûsorszolgál- ügyi intézményeket. A központban kü- tatás hiányában hazánkban inkább csak lönféle kiszolgálók és Linuxot futtató asz- vágyálom marad. A fejlesztés befejezett- tali gépek is találhatók, így akár tovább- nek egyelõre közel sem mondható, t. Minden jog fennt képzések tartására is alkalmas. mûszaki gondok – és a lehetõ leghama- rabbi megjelenésre való törekvés – miatt SuSE Linux a távközlésnek a meghajtó az eredetileg eltervezetnél Megjelent a SuSE Linux Enterprise szûkebb szolgáltatáskészletet nyújt, és Server Carrier-Grade Linux (CGL) a költségek csökkentése érdekében szá-

Edition változata. A UnitedLinux alapo- mos CD- és DVD-meghajtókból átvett © Kiskapu Kf kon, a HP, az IBM és az Intel közremû- részegységet tartalmaz. A hazánkban ködésével fejlesztett valószínûleg jó ideig még amúgy sem változat egyelõre Intel beszerezhetõ készülék megvásárlását alapú gépekhez készült érdemes elhalasztani – a Sony gõzerõ- el. A Carrier-Grade vel dolgozik a különféle formátumok Linux tervezet olyan támogatásán, a meghajtót újabb Linux-változatok össze- szolgáltatásokkal és egységekkel fogja állítását célozza, ame- bõvíteni, fejleszteni. Annyit azonban lyek megfelelnek a táv- érdemes tudni róla, hogy 23,3 GB-ot közlési ipar sajátos elvárásainak, és ame- tud tárolni lemezenként, folyamatos lyek segítségével szabványokon alapuló, átviteli sebessége 9 MB/másodperc, és moduláris távközlési rendszerek, szol- várhatóan Ultra160 SCSI felülettel is gáltatások és termékek vezethetõk be. meg lehet majd vásárolni. Ezt az elgondolást követi az új SuSE-vál- tozat, ami felügyeleti és üzleti támoga- Adatbázisok apróságoknak tási rendszerekben, átjárókban, jelkezelõ A Solid Information Technology bemu- berendezésekben, hang- és adatkezelõ tatta a Solid BoostEngine 4.0-t. A Boost- rendszerekben és vezeték nélküli meg- Engine egy magas rendelkezésre oldásokban egyaránt szerephez juthat. állású – a Carrier-Grade Linux köve- A SuSE Linux CGL Edition fontosabb telményeket teljesítõ – relációs adat- jellemzõi: bázis-kezelõ rendszer, amit elsõsorban • magas rendelkezésre állást biztosító beágyazott készülékekbe, például szolgáltatások, hibakeresési és -javítá- útválasztókba, hálózati kapcsolókba, si, illetve terhelésátvételi lehetõségek; átjárókba szánnak. • IPv6 és mobil IPv6 RFC-k támogatása; A Solid megoldása valójában két, egy- • programból megoldott valós idejû mással szorosan együttmûködõ részbõl mûködés, alacsony válaszidõk; épül fel, egy adatbázismotorból és • RAID 0-támogatás; egy adatbázis-összehangoló modulból. • alkalmazások elõtöltése, aminél a Az utóbbi segítségével másolatot lehet rendszer még a futtatás megkezdése fenntartani a kérdéses készüléken futó elõtt lefoglalja a megfelelõ memória- adatbázisról, majd a másolat felhasz- területeket az alkalmazások számára; nálásával azonnali feladatátvételt vagy A SuSE Linux CGL Edition ingyenesen, terheléselosztást lehet végezni, így javítócsomag formájában érhetõ el szinte bármilyen környezetben rendkí- mindazok számára, akik már rendelkez- vül jó rendelkezésre állást lehet nek a SuSE Linux Enterprise Server biztosítani. 8-változattal.  http://www.solidtech.com A Carrier Grade Linux munkacsoport az Open Source Development Labs egyik csoportja. Az OSDL Linux alapú Medgyesi Zoltán megoldások fejlesztését ösztönzõ szer- ([email protected]) vezet, ami gyártóktól függetlenül, non- A Linuxvilág hírszerkesztõje. profit alapon végzi tevékenységét. Szabadidejét legszívesebben  http://www.osdl.org a barátnõjével tölti, szeret  http://www.suse.com autózni és bográcsban fõzni.

www.linuxvilag.hu 2003. június 9 Láttuk-hallottuk

Vállalatirányítási rendszerek kicsiben is…

artva Milyen szerepet vállalnak a minisztériumok? el, milyen rendszer jó a számára, de utána legalább öt évig üzemeltesse is! Manapság a középvállalatok számára egyre fontosabb Az IHM pályázata nagyobb teret enged (legfeljebb kérdés az informatika. Nemcsak azért, mert a szerve- 15 MFt), ebbõl következik, hogy olyan bevezetések pá- zetet szinte csak ennek segítségével ellenõrizhetik a lyázását is várják, amelyek összértékben 30 MFt fölé vezetõk, de olyan segítséget is ad, amivel lényegesen rúgnak. Ezzel szemben a GKM által kiírt pályázat ötmillió gyorsabban és hatékonyabban képesek részt venni a forintos felsõ határa lényegesen kisebb bevezetésekre piacon. Az EU-csatlakozás kapcsán több fórumon és enged következtetni. Ha tehát a pályázni kívánó cég több szempontból elõtérbe került a vállalati informatika, t. Minden jog fennt összköltsége (pontosabban a megpályázható elemek ezen belül is a vállalatirányítási rendszerek (VIR). Az összköltsége) nem haladja meg a tízmillió forintos kere- idehaza felmerülõ igényt a minisztériumokban is érzéke- tet, mindenképpen a GKM pályázatán érdemes elindulni, lik, olyannyira, hogy mind a Gazdasági és Közlekedési figyelembe véve a tágabb lehetõségeket, valamint a Minisztérium, mind az Informatikai és Hírközlési Minisz- másik pályázatban a programmal és a szállítóval támasz- térium pályázattal kíván javítani a jelenlegi helyzeten. tott rendkívüli követelményeket. Amennyiben pedig

© Kiskapu Kf Ha a célokat nézzük, mindkét pályázat lényege, hogy ötven fõ fölötti cégnél vagyunk, és valamelyik – minõ- a pályázó az egész vállalatot átfogni képes rendszert ségbiztosítási rendszerrel is rendelkezõ – óriásrendszerét vásároljon, mindkét pályázatra azonos keret (négyszáz- kívánjuk megvásárolni, akkor nagy segítség lehet az millió forint) áll rendelkezésre, valamint mindkét minisz- IHM pályázata. térium a több területet lefedni kívánó pályázatokat része- Mindkét esetben fontos a rendszer hosszú távú költsé- síti elõnyben. Mindkét minisztérium azonban a saját geit is figyelembe venni. Itt jönnek a varázslatos rövidí- szempontjait szem elõtt tartva igyekezett kiírni a pályá- tések, például a TCO. Ugyanis elõfordulhat, hogy támo- zatát, ezért a két VIR-pályázat sok mindenben különbözik gatással együtt csupán tízmillió forintba kerül számunkra egymástól. Míg a GKM saját bevallása szerint is elsõsor- egy négymodulos rendszer bevezetése, de az elkövet- ban gazdaságilag megfontolt döntést vár a pályázótól, kezõ években „üzembentartás” címszó alatt holmi pár- az IHM nagyon komoly szakmai követelményrendszert milliós éves költséggel számolhatunk. A másik érdekes állított fel a termék beszállítójával szemben. A pályázók kérdés, hogy a fejlesztõ (szállító) mennyiért hajlandó szemszögébõl vajon melyik a jobb pályázat? továbbfejleszteni a rendszerünket? Ebbõl a szempontból Nézzünk meg egy-két alapvetõ különbséget. Talán a az IHM pályázata elõrelátóan kiköti, hogy a bevezetendõ legfontosabb, hogy a GKM által kiírt pályázat a pályázó rendszer kapcsán a szállítónak be kell mutatnia, hogy alkalmazottjainak számát kilencnél, míg az IHM 49-nél lehetõség van a további bõvítésre. Azt viszont nem hatá- többen határozza meg. Gondolom, nem egyedül vagyok rozza meg, hogy ezt milyen árszínvonalon kell megtenni. olyan, aki úgy gondolja, hogy pont a tíz és ötven fõ A „röghöz kötés” tehát mindkét esetben komoly közötti létszámmal dolgozó társaságok számára jelent veszélynek tûnik. rendkívüli nehézséget egy VIR beszerzése és üzemelte-  Egy további érdekes kérdés, hogy miként viszonyul a két tése. A tíz fõ alatti cégek pályázat a nyílt rendszerekhez. A GKM elmondása alap- nagyjából átláthatók, ötven KAPCSOLÓDÓ CÍMEK ján, amennyiben a szállító be tud mutatni egy használ- fõ fölött pedig fura egy ható rendszert, annak alacsony költségei még elõnyként cég az, amelyik nem képes is szerepelnek az elbírálás során. Az IHM pályázata saj- A Gazdasági és Közlekedési kitermelni egy rendszer nos a szigorú megkötések kapcsán (magyar támogatás, Minisztérium pályázatai költségét. Valahogy olyan  magyar program, a szállítóval szemben támasztott igé- http://www.gkm.hu/gk/index_.paly érzésem támadt, hogy az nyek stb.) kifejezetten a nyílt megoldások ellen szól. Az Informatikai és Hírközlési IHM által kiírt pályázat Igaz, minél nagyobb a vállalat, annál könnyebben fizet Minisztérium VIR-pályázata kifejezetten megkívánja,  meg egy óriásrendszert. De annál kisebb szüksége van http://www.ihm.hu/tarsadalom/ hogy a beszállító valamelyik külsõ segítségre egy ilyen rendszer megvásárlásához! palyazatok/ihm/ihm_20030508_1.html „nagyhal” legyen. Akárhogy is, örömmel fogadom mindkét minisztérium Ugyanezt támasztja alá az pályázatát, hiszen azt mutatják, hogy „odafent” is látják, IHM által a szállítóval szemben megkövetelt rendkívül tudják, hogy szükség van segítségre, valamint azt is, sok tulajdonság – hogy ne keressünk sokáig: hány hogy a lehetõségek keretein belül meg is kívánják adni beszállító mondhatja el magáról, hogy a tavalyi év ezt a segítséget. folyamán összértékben több mint százmillió forintban forgalmazott, telepített rendszereket? Vagy hogy fel tud mutatni legalább öt céget, ahol a rendszer már mûködik Szy György ([email protected]) (ebbõl három cégnek legalább 50 fõsnek kell lennie)? Nap mint nap saját bõrén érzi, A további szigorú feltételekkel is nyilván a szakmai igé- hogy mennyire fontos az informatika nyesség jegyében szigorítja az IHM a kiírást, bár nem egy vállalatnál tudom, mennyire válik ez a pályázatok elõnyére. Vala- hogy jobban tetszik a GKM hozzáállása: a vállalat döntse

10 Linuxvilág Láttuk-hallottuk

Vállalatirányítási rendszer GKM módra artva A Gazdasági és Közlekedési Minisztériumon belül a M. Sz. K.: Mint mondtam, fontosnak tartjuk, hogy a vállalatoknál használandó vállalatirányítási rendszerek vállalat komolyan átgondolja, milyen rendszert kíván (VIR) kapcsán elsõsorban nem a számítástechnikai kér- használni – ez a saját érdeke is, hiszen a költség na- dések a fontosak. A Minisztérium célját – a pályázó vál- gyobbik részét õ állja. Ennek fényében, ha egy vállalat lalatok hatékonyságának növelését – a pályázóval együtt nyílt rendszer használata mellett dönt, és a választott kívánja elérni, sõt megbízik a vállalat programválasztá- rendszer ugyanúgy kielégíti a vele szemben támasztott sában, hiszen minden vállalat más és más igényeket követelményeket, ez nem befolyásolja a pályázat elbírá- támaszt egy vállalatirányítási rendszerrel szemben. lását. Sõt például a frissítési, illetve követési díjak mér- A Gazdasági és Közlekedési Minisztérium összértékben téke esetleg egy nyílt rendszer felé is billentheti a t. Minden jog fennt 400 millió forintot szánt a vállalatirányítási rendszerek mérleg nyelvét. beszerzésének, üzembe helyezésének támogatására. Magyarné dr. Szabó Krisztinát, a GKM Kis- és Közép- vállalkozás-stratégiai és Pályázati Fõosztályának fõosz- tályvezetõjét kérdeztem a Széchenyi Vállalkozásfejlesz- © Kiskapu Kf tési Program „A kis- és középvállalkozások részére a korszerû vállalatirányítási rendszerek támogatására (SZVP-2003-2)” címen kiírt pályázatával kapcsolatban. Szy György: Milyen megfontolások alapján döntött úgy a minisztérium, hogy külön pályázatot ír ki a vállalat- irányítási rendszerek támogatására, és mit nyerhetnek a pályázók? Magyarné dr. Szabó Krisztina: A minisztérium számára nagyon fontos, hogy a megcélzott kis–közép blokkban Sz. Gy.: Hogyan történik egy-egy pályázat elbírálása? minél hatékonyabb és egységesebb informatikai rend- M. Sz. K.: A pályázatokat egy bizottság bírálja el, ame- szerek mûködjenek. Ez rendkívül fontos a mai kiélezett lyet független szakemberekbõl állítottunk össze. Az elbí- piaci helyzetben, és különösen nagy szerepet kap az rálás során a pályázatnak egy adott pontozás alapján el elkövetkezõ években. A pályázat kiírásánál külön fontos- kell érnie legalább az ötven százalékot. Természetesen nak tartottuk, hogy ne az informatikai piac néhány sze- a pályázat elbírálásához tartozó ponttáblázat nyilvános, replõjét támogassuk, hanem anyagi segítséget adjunk ez alapján látható, hogy a pályázat akkor is kaphat az egységes rendszert használni kívánó vállalatok számá- támogatást, ha a bizottság nem ad teljes pontértéket ra. Pályázatokat tehát a rendszert vásárolni kívánó válla- például a projekt kidolgozottságára. latoktól várunk. Emellett fontosnak tartjuk, hogy a válla- Sz. Gy.: Tehát ha jól értem, jó eséllyel indulhat a pályá- lat saját maga döntse el, hogy milyen rendszer felel meg zaton egy külsõ cég által bevezetendõ termékre alapo- a céljainak, hiszen ahány tevékenységi kör, annyi külön- zott projekt, akkor is, ha a termék nyílt forráskódú? bözõ igény. Megfontolt döntésre ösztönöz a negyven Például egy teljes csomag keretében, ahol a csomagba százalékos támogatási korlát, valamint az is, hogy a a helyzetfelméréstõl kezdve a bevezetésen és betanítá- bevezetett rendszert a támogatás lezárása után öt évig son át egészen az éles rendszer elindításáig minden üzemben (és szinten) kell tartani. beletartozik? Sz. Gy.: Mely részét támogatják pontosan egy ilyen M. Sz. K.: Igen, természetesen. A mi célunk, hogy a tervezeten belül? Gondolok itt arra, hogy a helyzetfel- vállalatot segítsük saját üzletmenetének javításában, mérésre, a bevezetésre vagy az üzembentartáshoz is így nem a döntést kívánjuk meghozni helyette. Bízunk pályázható-e támogatás? Gyakran egy-egy vállalat benne, hogy a pályázó képes megítélni, hogy az általa igénye oly sajátos, hogy a vállalatok maguk készítik választott termék biztosítani tudja-e számára hosszú a rendszerüket. Támogatják-e a belsõ fejlesztéseket? távon a hatékony mûködést. M. Sz. K.: Teljes bevezetéseket, sõt teljes csomagokat Sz. Gy.: Hova fordulhatnak további kérdéseikkel az is lehet pályáztatni, a helyzetfelméréstõl a bevezetésig érdeklõdõk? (az üzembentartásra a pályázat nem vonatkozik), így a M. Sz. K.: Lehetõség nyílik az érdeklõdõk számára, csomagba akár egyéb kapcsolódó költségek is beletar- hogy a benyújtandó pályázat kapcsán munkatársainkkal tozhatnak. Fontos kiemelni azonban, hogy a pályázatnak a 06-40-630-530-as kék számon konzultáljanak. Emellett nem elsõdleges célja, hogy annak révén a vállalatok kérdéseikkel a Minisztérium weboldaláról letölthetõ belsõ bérköltségeit vagy például a gépparkfejlesztését anyagokon túl a Magyar Vállalkozásfejlesztési KHT-t is támogassuk. Elsõsorban külsõ cég által szállított rend- felkereshetik. szer használatát támogatjuk, ezt a számlaalapú elszá- Sz. Gy.: Köszönöm a tájékoztatást. molási rendszer is mutatja. Sz. Gy.: Hogyan viszonyulnak a nyílt rendszerekhez? Szy György ([email protected]) Van-e megkötés a pályázott termékek szállítója kapcsán?

www.linuxvilag.hu 2003. június 11 Láttuk-hallottuk

A minisztériumi pályázatok rövid összevetése

artva Intézmény GKM IHM Pályázat célja Egységes VIR, Korszerû VIR, a létezõ korszerûsítése. modulok összekötése. Pályázható elemek Vásárlás, bevezetés – gép, Vásárlás, bevezetés – legalább három modul program, rendszerdíj. bevezetése. Ezen belül: beszerzés, fejlesztési Elbírálás alapján teljes csomag is! díj, licensz, know-how, tanácsadás, rendszerterv, oktatás, telepítés, üzembe állítás, tesztelés. Nem támogatandó Tanácsadás, elõkészítés, A költséghatékonyság elvét megszegõ t. Minden jog fennt dokumentációs költségek, tevékenységek, a piacon általánosan reprezentációs költségek, elfogadottnál nagyobb összegek. saját alkalmazott bére, közterhek. Pályázók köre Gazdasági társaságok, Gazdasági társaságok. szövetkezetek, egyéni vállalkozók. Létszámmegkötés 9 és 250 fõ között. 49 és 250 fõ között. © Kiskapu Kf Pénzügyi megkötés Nettó árbevétel < 4 Mrd Ft Nettó árbevétel < 4 Mrd Ft, de > 700 M Ft. Mérlegfõösszeg < 2,7 Mrd Ft Mérlegfõösszeg < 2,7 Mrd Ft, de > 500 MFt Szükséges önerõ, Legalább 25% önerõ kell Legalább 25% önerõ szükséges biztosíték (nem hitel és nem tagi kölcsön!). (ami nem hitel és nem tagi kölcsön!). Biztosíték nem feltétel. Kizáró ok Mezõgazdasági tevékenység, veszteséges gazdálkodó vagy negatív tõke. Pályázati díj Az igényelt támogatás 0,2%-a, Egyszeri 30 000 Ft. de legalább 1000 Ft. Benyújtandó különleges Nincs. Teljes tevékenységre kiterjedõ vállalati üzleti terv dokumentumok legalább 3 évre elõre, ágazati elemzés, részletes elemzés a jelenlegi rendszerrõl. A rendszer szállítójával A vállalkozó tevékenységét, A rendszer szállítójának be kell nyújtania legalább szembeni követelmények illetve területét segítse öt referencialevelet hazai vállalatoktól (ebbõl (bizottság dönt). háromnak a pályázatban feltüntetett feltételeknek meg kell felelnie). Rendelkeznie kell felkészült szakembergárdával. Az általa az elmúlt három év során leszállított rendszerek összértékének el kell érnie a > 100 MFt értéket. Színvonalas szakmai szolgáltatás, bõvítési, követési lehetõségek bizonyítása. Minõségbiztosítási rendszerrel szükséges rendelkeznie. Egyéb szakmai Nincs. 4GL, relációs adatbázis, modularitás, azonnali követelmények adatfeldolgozás, bõvíthetõség, kiszolgálóalapú vagy webes felépítés. Operációs rendszer: Linux, MS vagy UNIX, magyar változat, magyar dokumentáció, magyar támogatás, mûködõ referenciák. Minden modullal szemben részletes elvárási lista. Beadási határidõ Szeptember 30-ig Közleményig (elsõ elbírálási kör: június 30-ig, vagy közleményig. beadottak július 31-ig). Nyertesek várható száma 100–110 Rendelkezésre álló keret 400 MFt 400 MFt. Támogatás lehetséges 40%, de legfeljebb 5 MFt 50%, de legfeljebb 15 MFt. mértéke (h. h. megyékben 50%, 6,25 MFt). Elbírálás Bírálóbizottság, nyilvános Bírálóbizottság. Elemzett területek: a kínált pontrendszer alapján. szolgáltatások, a benyújtott referenciák, a pályázó piaci helyzete, a rendszer várható hatása. Megvalósítási idõszak Két éven belül A lehetõ legrövidebb idõn belül, de legfeljebb 10 hónapon belül. Üzembentartás Megvalósítás után Három évig. legalább öt évig.

12 Linuxvilág Láttuk-hallottuk

A programszabadalmakról artva Híradások számoltak be róla, hogy a szabad progra- és a nagy multinacionális programkészítõ óriások jár- mokat preferáló szervezetek egy nyolcfõs küldött- nának jól, mert akkora készletük van a szabadalmakból, séget menesztettek Brüsszelbe, ami egy meghallga- hogy mindig találhatnak egy szabadalmat, amivel bepe- táson vett részt az Európai Parlamentben. Aki jól relhetnék a versenytársaikat, és díjakat szedhetnének figyelt, még a meghallgatás szervezõjének köszöne- tõlük, amint feltûnnek a porondon. tét is láthatta, aki sikeresnek értékelte azt. A kérdés Említettem, hogy a programok fejlesztése gyakorlatilag már csak az, hogy a programszabadalmak ellen lehetetlen anélkül, hogy valamilyen már szabadalmaz- miért kell tiltakozni? tatott ötletet megsértenénk. Felmerülhet a kérdés, hogy t. Minden jog fennt ennek mi az oka. A programok sokkal összetettebb A szabadalmaknak bizonyos területeken van létjogosult- alkotások, mint más, a szabadalmak hatálya alá tartozó ságuk. A gyógyszerek esetén például lehetõvé teszik a területek. Lássunk egy példát ennek megértésére! cégek számára, hogy a kutatásra és fejlesztésre költött Mi történt volna akkor, ha Európa királyai az 1700-as hatalmas összegeket ismét visszaszerezhessék. Szintén években úgy döntenek, hogy a zene fejlõdését elõsegí- alkalmas arra, hogy az új módszereket közzétehessük,

tendõ, a zenei ötletekre szabadalmakat lehet bejegyezni? © Kiskapu Kf anélkül, hogy valaki ellopná õket. A szabadalmak a bo- Valószínûleg ma szegényebbek lennénk nagyon sok ze- nyolult kutatások eredményeinek egyszerû használatától nemûvel, például Beethoven szimfóniáival is. Egy zene- védik meg a fejlesztõt. A versenytárs számára egyszerû szerzõ a komponálás során nemcsak a saját zenei ötle- ismert orvosságokat elõállítani, a nehéz a dologban a teit használja fel, hanem a már meglévõkbõl is válogat. recept kifejlesztése. A zene nem légüres térbõl születik, hanem az emberi A programoknál ennek az ellenkezõje igaz: a „kutatások” kultúrára épít. Beethovennek, ahhoz hogy a saját zenei egyszerûek, de a végeredmény lemásolása nehéz. Egy- ötleteibõl nagyszerû szimfóniákat alkosson, építenie kel- szerû ötleteket kitalálni a továbbfejlesztésre, vagy arra, lett az elõtte járó zeneszerzõk által felhalmozott zeneel- hogy a számítógépet hogyan használjuk újfajta módokon, méleti tudásra. Pontosan ezt akadályozták volna meg ezt bárki meg tudja tenni. A neheze a programok tényle- számára a szabadalmak. Mindig is léteztek kísérleti ze- ges megírása. Csaknem olyan nehéz lemásolni egy neszerzõk, akik kizárólag a saját ötleteiket használták fel; program mûködését (nem a programot magát), mint az az általuk írt zenét nagyon kevesen képesek meghallgatni.

eredetit megírni. Ezért elegendõ a programok védelmére  Egy szimfónia a szerzõi jog. A szerzõi jog azt védi, aminek az elõállítása bonyolult szerkezet, a legtöbb idõt, energiát és elkötelezettséget igényli. és csak akkor szól KAPCSOLÓDÓ CÍMEK Minden program egyszerû szövegbõl áll, valamilyen teljes pompájában, programozási nyelven megírva. Ezt a szöveget – amit ha minden a he- Az FSF.hu kapcsolódó oldala forráskódnak nevezünk – egy fordítóprogram segítsé- lyén van. A prog-  http://www.fsf.hu/index.php/szabadalmak gével alakítjuk át gépi kódra. Ezt egy egyszerû ember ramoknál ugyanez Néhány bejegyzett szabadalom minden különösebb erõforrás nélkül meg tudja tenni. a helyzet. Ma bár-  http://www.linux.hu/article.php?id=1695 A program egy olyan termék, amelyik tudásból, képze- mely bonyolultabb Szervezeteink legutóbbi közleménye letbõl és elkötelezettségbõl készül, hasonlóképpen, mint program több be-  http://www.linux.hu/article.php?id=1733 egy festmény vagy bármely mûalkotás. Amikor szaba- jegyzett program- Az EuroLinux néhány kapcsolódó elemzése dalmaztatunk, a tudás közkinccsé válik az egyes felhasz- szabadalomban  http://swpat.ffii.org/papers/ nálók, az iskolák és a társadalom hasznára. A programok leírt ötletet is fel- eubsa-swpat0202/pref/ esetében ez nem lehetséges ugyanolyan módon, hiszen használ. Európá- index.en.html a tervrajz a forráskód. A program önmagát tükrözi, a ban a program-  http://swpat.ffii.org/papers/ leírása saját maga. A forráskód közzététele ugyanaz, szabadalmak tör- eubsa-swpat0202/esse/index.en.html mint magának a programnak a továbbadása, az olvasó- vénytelenek. Még Ellenjavaslat nak csak le kell másolnia a szöveget és a saját számító- az a negyvenezer  http://swpat.ffii.org/papers/eubsa-swpat0202/ gépén használnia. is, amelyeket az kern/index.en.html Az algoritmusok, matematikai formulák és programöt- Európai Szabadal- letek szabadalmazása az innováció szempontjából mi Hivatal már bejegyzett. Legalábbis egyelõre. butaság, nem segíti elõ a fejlõdést. Éppen ellenkezõleg, Jó, jó, mondhatjuk, hogy hiszen az Egyesült Államokban lehetetlenné teszi a programfejlesztést anélkül, hogy már régóta vannak programszabadalmak és mégsem a fejlesztõ meg ne sértsen valami már szabadalmazott omlott össze a gazdaságuk, mi félnivalónk van nekünk ötletet, ráadásul a tudtán kívül téve ezt. A fejlesztõk a szabadalmaktól? számára csaknem lehetetlen újat létrehozni, anélkül, Csupán elgondolkodásra ajánljuk: az amerikai cégek hogy valami már szabadalmazott dolgot újra fel ne talál- a szabadalmaikat csak ritkán alkalmazzák. Ez igaz is. nának. Ha valaki ezzel komolyan próbálkozna, annyira De egy hibás szabály meghozatalára nem indok az, különös és szokatlan programokat kellene írnia, hogy hogy hátha nem fognak visszaélni vele. senki sem akarná használni õket. A programszabadalmakkal csak a szabadalmi jogászok Magosány Árpád ([email protected])

www.linuxvilag.hu 2003. június 13 Láttuk-hallottuk

Az Ericsson közzétette a TIPC forráskódját

Az Ericsson 2003. február 3-án a GNU GPL szerint közzé- • Teljesítmény: a TIPC a rövid (< 1 KB) üzeneteket a tette a TIPC (Telecom Inter-Process Communication TCP/IP-nél 25–35 százalékkal nagyobb, a hosszab- – Adatátviteli Folyamatközi Kapcsolattartás) forráskódját bakat pedig összemérhetõ sebességgel szállítja a a nyílt forrás közössége számára. A TIPC egy, a telepe- processzorok között, a processzoron belüli kézbesí- ken belüli kapcsolattartásra külön megtervezett protokoll, tés pedig 75 százalékkal gyorsabb. Ezen túlmenõen amit az Ericsson termékek részeként évek óta szerte a az egyszerûsített kapcsolódást használva egy tranz- világon telephelyek százainál használnak. Most elkészült akció legkevesebb két üzenetváltással megvalósít- a linuxos változat is, mégpedig betölthetõ magmodul ható, szemben a TCP/IP-vel, ahol legalább kilencre

artva formájában. A TIPC hasznos eszköztár bárki számára, aki Carrie-Gra- de Linux-telepeket kíván fejleszteni vagy használni. A te- lep, a hálózat és a rendszer irányításához szükséges hát- teret adja. A felhasznált címzési módszer egyedülállónak tûnik az indexelési szolgáltatások és a gyors kapcsolat- teremtés terén. Elõnye továbbá, hogy a jelzésváltás megvalósítása bármilyen hordozón teljes terhelésmeg- osztást és megbízható hibatûrést biztosít. t. Minden jog fennt A TIPC jellemzõi: • Öntanuló helymeghatározás: a TIPC olyan címzési  http://www.osdl.org/projects/cgl módszerrel bír, ami a telep fizikai felépítését minden tekintetben elrejti az alkalmazások elõl. A felhasznált és a fizikai címek összerendelése öntanuló módon

© Kiskapu Kf zajlik, mûködés közben egy osztott belsõ fordítótáblát használ. • Egyszerûsített, „fürge” kapcsolatteremtés: az egy tranzakción belüli üzenetváltás – beleértve a kapcso- latlétesítést, a rövid adatátvitelt és a leállítást – test- reszabható, így még hatékonyabbá tehetõ, ráadásul rejtett protokollüzenetek nélkül. Egy már létrejött kapcsolat visszajelez, és bármilyen szolgáltatási hibáról jelentést készít az alkalmazásnak.  http://tipc.sourceforge.net • Általános, alkalmazkodóképes, jelzéskapcsolati pro- tokoll: olyan, jellegzetesen a szállítási rétegen meg- szükség van. Emiatt a távközlésben használatos valósított feladatok, mint az adásismétlés, a szaka- rövid tranzakciók a megfelelõ TCP-tranzakciók tört szolás (segmentation), a csomagkészítés és a foly- része alatt elvégezhetõk. tonosság-ellenõrzés lekerült a jelzéskapcsolati • Szolgáltatásminõség: a sorrendi, veszteségmentes rétegre. Emiatt ez a réteg ugyan összetettebbé válik, üzenettovábbítás kapcsolatközpontú és kapcsolat- viszont jobb erõforrás-kihasználást tesz lehetõvé, nélküli módban egyaránt szavatolt. A célállomás és sokkal hatékonyabb veremkezelést eredményez. elérhetetlensége esetében a nem kézbesített üzene- A jelzéskapcsolatok állítható frekvenciájú folytonos- tek egy hibakóddal együtt visszakerülnek a küldõhöz, sági ellenõrzés szigorú felügyelete alatt állnak, emel- ez a kód utal a hiba okára. lett képesek megállapítani és közölni a jelzéshibákat • Indexelési lehetõség: az alkalmazások sorszámoz- egy másik kapcsolat részeként. A fölösleges kapcso- hatják a felhasznált és a fizikai címek elérhetõségét, latok hibatûrése ilyen esetekben öntanuló módon és illetve elérhetetlenségét. Ez azt jelenti, hogy a tele- zavarmentesen zajlik. A jelzéskapcsolatok önbeál- pen történt mûködési vagy felépítési változások lítók, lehetõség szerint üzenetszórásos, illetve cso- nyomon követése egyszerû, akárcsak az osztott portos üzenetszórásos szomszédfelismeréses pro- alkalmazások indításának összehangolása. tokollt használnak.  Azt tervezzük, hogy az elkövetkezõ hónapokban teljes mûszaki leírást készítünk a TIPC-rõl a Linux Journalba; KAPCSOLÓDÓ CÍMEK addig is írjanak bátran Jon Maloynak ([email protected]), hogy bármilyen, a TIPC-t Carrier Grade Working Group érintõ kérdést megvitathassunk.  http://www.osdl.org/projects/cgl Jon Maloy és Ibrahim Haddad Open Source Development Lab  http://www.osdl.org  TIPC és SourceForge oldal http://tipc.sourceforge.net Linux Journal 2003. május, 109. szám

14 Linuxvilág Láttuk-hallottuk

Oktatás, támogatás, dokumentáció artva Beszélgetés az ULX Kft., a SuSE Linux AG magyaror- Cs. Gy.: Az oktatást csak ti végzitek vagy partnereitek szági irodájának munkatársával, Hilzinger Marcellal. is vannak? H. M.: Jelenleg országszerte tíz hivatalos oktatási part- Csontos Gyula: Az elsõ kérdésem az lenne, hogy mióta nerünk van. Oktatással foglalkozó partnereinknek igen dolgozol a Linux népszerûsítésén e cég keretein belül, és magas követelményrendszernek kell megfelelniük. Meg- mik a feladataid? Mesélj magadról néhány mondatot! felelõ gépteremmel, projektorral és egyéb felszereléssel Hilzinger Marcel: A zürichi tudományegyetemen végez- kell rendelkezniük ahhoz, hogy a minõségi oktatást meg tem 1999-ben. Itt szereztem német nyelv és irodalom- tudják valósítani. ból, politológiából és kelet-európai történelembõl okle- t. Minden jog fennt Cs. Gy.: Csak a ti és partnereitek oktatási bázisán végez- velet. Az iroda megalakulása óta dolgozom itt, a felada- tek oktatást, vagy kihelyezett tanfolyamokra is van példa? taim röviden: a dokumentáció karbantartása, ami a H. M.: Természetesen, ha egy ügyfél azt szeretné, fordítást, a frissítést, az összehangolást is magában fog- kihelyezett oktatást is vállalunk, amit akár az ügyfél lalja. Másik két nagy feladatköröm az oktatás és telephelyén is meg tudunk tartani. a terméktámogatás megszervezése.

Cs. Gy.: A vizsgáztatás hol és milyen nyelven folyik? © Kiskapu Kf Cs. Gy.: Mesélj a feladataidról egy kicsit bõvebben, H. M.: Minden elvégzett tanfolyamról kiállítunk egy kezdjük elõször az általad említett dokumentációval. hivatalos magyar nyelvû tanúsítványt. Az LPI- és a H. M.: A SuSE dobozos változatához adott kézikönyvek UnitedLinux-vizsgákat a hivatalosan elismert VUE fordításával kezdõdött minden. Az elsõ fordításoknál kö- központokban lehet rülbelül ötven–ötven százalékos arányban fordítottuk kül- letenni, angol nyelven. sõ segítséggel a könyveket, most már 95 százalékban Cs. Gy.: Milyen a tá- saját fordításokról van szó. A könyvek fordításának na- mogatási rendszeretek? gyobbik része az eredeti német nyelvû dokumentációból H. M.: Minden közvetlen fordítással kerül ki, a kisebbik része pedig angol termékünkhöz jár a 30 fordításokból érkezik, a munkatársak közül mindenki részt napos telepítési segítség vesz a dokumentáció létrehozásában. Az anyag LaTeX- faxon, telefonon és elek- ben készül, de a magyar nyelvi sajátosságok miatt elõbb tronikus levélben. Ez, mint egy foltot kellett készíteni a Linuxban szereplõ LaTeX a neve is mutatja, csak a rendszerhez, ami már belekerült a LaTeX hivatalos forrás- rendszer telepítéséhez fájába is. A dokumentációkat jelenleg Magyarországon nyújt segítséget. Ezen készítjük és gyártjuk, ellentétben a régebbi gyakorlattal, kívül jár egy év aktív programkarbantartás is. Mivel na- amikor mindent Németországban nyomtattak. gyon sok kérés érkezik be hozzánk, ennek felügyeletét Cs. Gy.: A dokumentációkat az üzleti termékekhez is egy központi rendszeren végezzük, itt nyomon követ- elkészítitek? Egyáltalán, mennyire várják el az üzleti hetõ, hogy ki, mikor és mit válaszolt egy támogatási felhasználók a magyar nyelvû kézikönyveket? kérdésre. Az emberek is nagyon sokfélék, a gondjaik H. M.: Egyenlõre még nincs minden üzleti termékhez teljes pedig még sokszínûbbek, mint azt elsõre el tudnánk magyar nyelvû dokumentáció, azonban dologzunk rajta. képzelni, ezért szükség van egy házirend felállítására és Minden Magyarországon forgalmazott termékhez szüksé- betartására. Van, aki kevesli ezt a támogatást, azonban ges magyar nyelvû „használati utasítást” adni, az indíttatás az általunk nyújtott segítség sok ponton túlmegy a mégsem ez volt arra, hogy üzleti termékeinket is ellássuk hivatalos telepítési segítségen. magyar nyelvû kézikönyvvel, hanem az, hogy a felhasz- Cs. Gy.: Mi a helyzet a üzleti termékeitekkel, azokhoz nálóink igenis igénylik és el is várják az efféle szolgáltatást. milyen támogatást adtok? Cs. Gy.: Milyen egyéb feladatokat ró rád, rátok a doku- H. M.: Ezekhez a termékekhez alapból szintén a 30 na- mentáció karbantartása? pos telepítési támogatás jár, illetve szintén vásárolható H. M.: Azokról a programokról, amelyekrõl úgy gondol- hozzájuk külön támogatás. Továbbá egyéves támogatást, juk, hogy érdemes részletesebb leírást készíteni, a doku- öt év programkarbantartást, ami a különféle program- mentációt mi magunk készítjük el, és a dobozban talál- hibák javításait is magában foglalja, valamint pluszban ható könyvek szerves részeként, fejezeteként vagy a már jelszavas hozzáféréssel ellátott terméktámogatási adat- meglévõ fejezetrészként jelentetjük meg. bázist is nyújtunk hozzájuk. Cs. Gy.: Említetted a beszélgetés elején az oktatást; Cs. Gy.: Hogy a munkán kívül másról is szó essen, mivel milyen képzéseket, tanfolyamokat tartotok? töltöd a szabadidõdet a legszívesebben? H. M.: Tanfolyamaink honosított, hivatalos SuSE Linux- H. M.: Hasznos multimédiás programokat magyarítok, tanfolyamok. Jelenleg a tanfolyamok szerkezetében bakelit meselemezeket digitalizálok a most három változások várhatók (a mellékelt ábrán áttekinthetõ e hónapos kisfiamnak késõbbi felhasználásra, és részt felépítés), mint látható, nagymértékben épít a világon vettem az OpenOffice.org magyarításában is. mindenhol ismert és elfogadott LPI-tanfolyamok Cs. Gy.: Köszönöm a beszélgetést! anyagaira, természetesen kiegészítve ezt a United- Linuxhoz tartozó anyagokkal. Csontos Gyula

www.linuxvilag.hu 2003. június 15 Láttuk-hallottuk

Opera magyarul

Rövid internetes pályafutásom alatt sikerült néhány folyamatosan küldték a hibajelentéseket. Eközben böngészõt kipróbálnom. Mint általában a kezdõk, én is vetette fel valaki, hogy nem ártana a Súgót és a Nap az Internet Explorer idõszerû változatával kezdtem, tippjét is lefordítani. Mivel úgyis „benne voltam” a azután jött a Netscape 4.x-es sorozata. Amikor Linuxra dologban, belevágtam. Ennek eredményeként készült el váltottam, meglévõ tapasztalataim folytán szintén a a teljes szövegnek édes anyanyelvünkre történõ átülte- Netscape-et használtam, majd következett a Mozilla és tése. Mire ez az írás megjelenik, reményeim szerint már a Konqueror. Mindegyiknek voltak jó és rossz tulajdon- az összes hibát sikerült kijavítani, és tökéletes változatot ságai, mindet másért szerettem. Mégis úgy éreztem, adunk közre. hogy valami mindegyikbõl hiányzik. Amikor feltettem Természetesen egy ilyen munkát csaknem lehetetlen artva az Opera legfrissebb változatát, néhány órás állítgatás egyedül elvégezni, nekem is sokan segítettek a hibake- és ismerkedés után azt mondtam: ez az, ezt kerestem! resésben és a javításban. Saját ízlésünk szerint átszabhatjuk a felületét, saját bõrö- Köszönetnyilvánítás ket és gombokat készíthetünk hozzá, egyszerre több Ezúton is szeretnék köszönetet mondani mindenkinek lapon is böngészhetünk (mint a Mozillában), és szinte a segítségért, különösen Sallai András-nak, aki a gyors- minden szolgáltatáshoz létezik gyorsbillentyû. A legin- billentyûk ismétlõdéseit vadászta, Fazakas Albert-nek, kább megragadó számomra mégis az egérhez rendelhetõ aki a legtöbb elgépelést és vesszõhibát felfedezte, a számtalan szolgáltatás volt: „kisbetû” becenevû ismeretlennek, aki a nyelvtani és t. Minden jog fennt • elõre- és hátralépkedhetünk a lapok között, stilisztikai hibákat gyomlálta, Lakos Imré-nek, Kõ László- • ablakokat csukhatunk le, nyithatunk fel és nak, Rátonyi Gábor Tamás-nak és Szabó Zoltán-nak, akik csukhatunk be, a terjesztésben segítettek. • szövegeket nagyíthatunk és kicsinyíthetünk stb. A fordítás zipfájlban a következõ címekrõl tölthetõ le: Egyetlen gond volt csak a programmal: nem beszélt  http://linuxace.freeweb.hu

© Kiskapu Kf magyarul. Az Opera honlapján 12 támogatott nyelvet  http://www.mylinux.hu találtam, sajnos a miénk nem volt a listán. Viszont  http://www.hwsw.hu letölthetõ volt az eredeti üzeneteket tartalmazó fájl, amit  http://www.osb.hu/tech/forditasok/Opera le lehet fordítani. Innen már „csak” egy kis gépelés és  http://www.linuxportal.hu/letoltes/Opera.zip szótárforgatás volt hátra, és elkészült a próbaváltozat. Ezt nagyjából 10–15 érdeklõdõ kezdte el használni, akik Mlatilik Zsolt ([email protected])

Linux-tábor

2003. június 29. és július 12. között idén harmadjára számos lehetõséget kínálnak a szórakozásra. A szá- kerül megrendezésre a Linux-tábor. A 2001 nyarán életre mítógépüktõl elszakadni nem tudók beülhetnek a kollé- hívott, hagyományosan Szerencsen tartott tábor szer- gium internetkapcsolattal is rendelkezõ géptermébe. vezõi két fõ célt tûztek maguk elé: a Linux-tudás gyara- Újdonság idén, hogy a Magyar BSD Egyesület jóvol- pítását és kellemes pihenést nyújtani a résztvevõknek. tából délutánonként a BSD operációs rendszerrel ismer- A tábor székhelye idén, mint az elõzõ két évben is, kedhetnek az érdeklõdõk. Akik ekkor nem informatikai a Szerencsi Középiskolai Kollégium, ahol a szállást és programra vágynak, szervezetten látogathatják majd az ellátást kapják a résztvevõk, míg a tanfolyam a kollé- meg a szerencsi vár múzeumát, illetve lehetõség lesz gium szomszédságában lévõ gimnáziumban zajlik. csoportos kirándulásokra, és strandot is találunk Sze- Az oktatás három, igény szerint különbözõ (általában encs közelében. Az esti program pincelátogatás, ahol kezdõ, haladó és profi) szinten folyik. Az oktatók (akik egy helyi szõlõgazda mutatja be borait, azaz a Tokaj- ingyen vállalják a tanfolyamok megtartását a táborban) hegyvidék nedûit. Az i-re a pontot az egyik este pince- Magyarország legjobb linuxos szakemberei közül kerül- vacsora, majd az utolsó esti bográcsozás teszi fel. nek ki. A 2001-es elsõ táborban három 15 fõs csoport- A tábort szervezõi önköltségi alapon rendezik, így igen ban folyt az oktatás, míg idén a tavalyihoz hasonlóan olcsón lehet részt venni rajta. A hatnapos turnus napi három 20 fõs csoportban. A szervezõk 2002-ben próbál- háromszori étkezéssel, tanfolyami részvétellel, borkós- koztak meg elõször két önálló turnus szervezésével, és tolással, pincevacsorával felnõtteknek mindössze a nagy sikert látva idén is két hét áll a jelentkezõk ren- 24 000 forint, amibõl az LME tagjai 2000 forintos ked- delkezésére. Az oktatás a gimnázium számítógépter- vezményt kapnak. Ugyanez 16 éves korig csak 18 000 meiben folyik, így minden hallgató önálló számítógép forintba kerül. A táborról tájékoztatás és jelentkezési mellett gyakorolhat. Emellett lehetõség nyílik saját gép lap a  http://linuxtabor.hu weboldalon érhetõ el, használatára is, amire a szakemberek segítenek felte- a szervezõkkel pedig a [email protected] címen lepíteni a Linuxot. A délelõtti oktatás után délután léphetünk kapcsolatba.

16 Linuxvilág Láttuk-hallottuk

Linux-index diff -u: rendszermagfejlesztési hírek artva 1. Legkevesebb ennyi ezer dollár az ára Richard Gooch mûve, a devfs fájlrendszer valószínûleg kimarad az SGI új csúcstermékének, a Linuxot a rendszermagból. 2002. december végén Adam J. Richter beje- futtató SGI Altix 3000 kiszolgálónak: 30 lentett egy javítófájlt, ami egy, a RamFS fájlrendszeren alapuló új 2. Ennyi millió dollár az ára a legdrágább mechanizmussal váltaná fel a devfs-t. Az új rendszer több téren is SGI Altix 3000-es Linux-kiszolgálónak: 1 utánozni próbálta a devfs viselkedését, habár Adam nem akarta a 3. Ennyi régi SGI-gépet cseréltek le devfs összes szolgáltatását megvalósítani a RamFS rendszerben. Linuxot futtató Dell-gépekre a Sony Programját részben a devfs-felület letisztult változatának szánta, Pictures Imageworks vállalatnál: 600 hogy azokat a szolgáltatásokat, amiket alig pár rendszer használt, 4. A Sams Club webáruházban eladásra más módszerekkel lehessen helyettesíteni. A szerkezeti változta- t. Minden jog fennt kínált asztali Linux-rendszerek száma: 1 tások eredményeképpen az eredeti kód méretét a negyedére 5. A Sams Club webáruházban kapható sikerült csökkentenie. A devfs fájlrendszer mindig is vitatott volt, asztali Linux-rendszer ára: 297,95 dollár Linus Torvalds döntése pedig, amellyel bevette a devfs-t a hiva- 6. A Wal-Mart webáruházban eladásra talos fába, még több vitát kavart. kínált különbözõ (Microtel) Linux-rend- A sysfs fájlrendszer várhatóan felváltja a /proc fájlrendszert és © Kiskapu Kf szerek száma: 33 a többi olyan módszert, amivel a rendszerinformációk lekérdezhe- 7. Lindows alapú rendszerek száma: 15 tõk. A sysfs eredetileg a vezérlõprogramok íróinak eszköze volt, 8. Mandrake alapú rendszerek száma: 9 2002-ben azonban a rendszermag más részeire is kiterjedt a 9. Lycoris alapú rendszerek száma: 9 használata. Azóta számos más felületrõl folyamatosan próbálnak 10. Ennyibe kerül a legolcsóbb (Lindows) áttérni a sysfs-re. 2003 januárjában éppen a /proc/cpufreq fejlesz- Linux-rendszer a Wal-Mart tésén dolgoztak, amikor Dominik Brodowski érvénytelennek nyilvá- webáruházban: 199,98 dollár nította azt, s helyette a sysfs felületet vette be a cpufreq kód- 11. Ennyibe kerül a legdrágább (Mandrake) jába. Patrick Mochel ugyancsak közremûködött a kód átfésülé- Linux-rendszer a Wal-Mart webáruház- sében, ellenõrizve, hogy Dominik munkája összhangban legyen ban: 648 dollár a sysfs újabb szolgáltatásaival. Valamivel késõbb, de még ugyan- 12. A japán kormány tervei szerint ennyi ebben a hónapban Stanley Wang kódot küldött Greg Kroah-Hart- ezer dollárt költ a következõ pénzügyi man-nak – ez a kód a sysfs-felülettel váltja fel a pcihpfs-t. évben annak tanulmányozására, Ebben az esetben azonban a sysfs még nem volt alkalmas a hogyan térhet át Linuxra a saját szá- feladatra, mivel a szükséges, a gyorscserét lehetõvé tevõ kód még mítógépein: 416 nem készült el teljesen. Sebaj, Greg kódolta a hiányzó sysfs- 13. Ennyiedik helyen áll a Running Linux szolgáltatást, és elküldte Patricknak. az O'Reilly kiadó könyvsikereinek 2003 januárjában egy szép napon Alan Cox megemlítette, hogy a listáján: 1 tty kódja a 2.5-ös fában nagyon rosszul mûködik, és igazából már 14. Ennyi példány kelt el a Running Linux jó ideje olyan, amilyen, elsõsorban azért, mert a rendszermag címû könyvbõl: 200 000 kódjában megváltozott a zárolás. Ez sokakat meglepett, és voltak, 15. Jelenleg legkevesebb ekkora a Linux- akik csodálkoztak, hogy miért csak most hallanak errõl, amikor a kiszolgálók eladási aránya a Meta 2.5-ös fa bõvítését már befagyasztották, és a 2.6-os vagy a 3.0-s Group szerint: 15% változat következik. Greg Kroah-Hartman megvizsgálta a hibát, és 16. Jelenleg legfeljebb ekkora a Linux- szörnyû dolgokat tapasztalt. Azt mondta, hogy a kódot nem lesz kiszolgálók eladási aránya a Meta könnyû kijavítani, és valószínûleg csak a következõ fa fejlesztése- Group szerint: 20% ként kerülhet rá sor. Alan erre azt válaszolta, hogy ezt nem tehetik, 17. A Linux részesedése a kiszolgálóela- mivel a tty kódja rossz, és még a következõ megbízható kiadás dásban 2006-ra vagy 2007-re a Meta elõtt ki kell javítani. Group szerint: 45% A Linux-rendszermag hagyományosan csakis a GNU C fordítóprog- rammal mûködött együtt, és még így is gyakran elõfordult, hogy a rendszermag egyes részeit csak a fordítóprogram egy bizonyos Források változatával lehetett lefordítani. A rendszermag mindig a GCC 1–3.: Los Angeles Times bõvítéseire támaszkodott, s a mag és a fordítóprogram sorsa 4–5.:  http://samsclub.com úgy egybefonódott, mint egy idõs házaspáré. Így aztán sokakat 6–11.:  http://walmart.com megdöbbentett a hír, hogy a rendszermag fordításához az Intel 12.: Associated Press C++-fordítóját, az icc-t is használni lehet. Úgy tûnik, az Intel már 13-14.: Russel J. T. Dyer Running Linux in jó ideje célul tûzte ki, sõt javítófájlokat küldött Linusnak pusztán a New World annak érdekében, hogy a fordítóprogramjuk kezelni tudja a rend-  http://www.linuxjournal.com/article/6617 szermag forrásfáját. 15–17.: Meta Group, Inc. Zack Brown

Linux Journal 2003. május, 109. szám Linux Journal 2003. május, 109. szám

www.linuxvilag.hu 2003. június 17 Láttuk-hallottuk

A hónap szakmai tanácsai

Az új Dell kiszolgáló lefagy Hogyan lehet rendszerindításkor Munkahelyemen az elsõ linuxos webkiszolgáló telepíté- elindítani az XDM-et? sére készülünk, és ez örömmel tölt el. Gondjaim vannak Nem tudom rávenni a Linuxot (Red Hat 7.2), hogy az viszont a kiszolgálókkal, remélem, tudtok segíteni. A fej- X-es GUI-t indítsa el. Ehelyett szöveges bejelentkezési lesztésre használt kiszolgálóink Dell 2550-es gépek, az képernyõt kapok. Hogyan szerkeszthetem az alapértel- éles kiszolgálók Dell 2650-esek. Red Hat 8.0-t futtatunk a mezett init szintet? vasakon, ami jórészt gond nélkül megy. Ugyanakkor meg- Keith Raposo, [email protected] magyarázhatatlan lefagyások történnek az összes kiszol- Ellenõrizd, hogy az X megfelelõen van-e telepítve, gálón, amikor a konzol lefagy és a gépet újra kell indítani. ehhez írd be, hogy startx. Ha ez mûködik, akkor a A lefagyás oka nem jelenik meg a rendszernaplóban. /etc/inittab állományban az elsõ nem megjegyzéssort A Dell és a Red Hat fórumain találtam némi segítséget. A Linux Journal honlapján változtasd meg erre: A lényeg annyi, hogy a grub.conf állományban a rend- id:5:initdefault: számtalan gond megoldá- szermagnak át kell adni a noapic kapcsolót. Ezután a Usman S. Ansari, [email protected] sához találhattok további gépek szemmel láthatóan jól mûködnek. Mi a noapic segítséget. A Sunsite kapcsoló hatása egy SMP-rendszeren? Tapasztalta más A /etc/inittab állományban van egy sor, ami tüköroldalait, a gyakori is ezt a hibát Dell 2550, illetve 2650-es gépeken? id:SZ`M:initdefault: alakú. A számot változtasd kérdéseket és az egyéb Doug Farrell, [email protected] a kívánt init szintre, ez az XDM bejelentkezõ képer- útmutatásokat a nyõje esetén 5.  Az APIC (fejlett programozható megszakításvezérlõ) a www.linuxjournal.com Christopher Wingert, [email protected] honlapon olvashatjátok el. szabványos, külsõ megszakításvezérlõt egy processzo- További segítség az A rovatban közzétett ron belüli megoldással váltja fel. Ez bizonyos ügyes SSH-val kapcsolatos kérdéshez válaszokat Linux-szakértõk trükköket tesz lehetõvé, ilyenek például a teljesítmény- A 2003. áprilisi számban szerepelt egy kérdés, ami egyre kis csapata készítette el. számlálók és a figyelõszolgáltatások. Szokásos esetben gyakrabban elõkerül, mert az emberek (és a terjesztések További kérdéseiteket ez a támogatás nem ütközik az olyan rendszerekkel, is) a nagyobb biztonságot választják alapértelmezettként szívesen fogadják amelyekben nincs APIC. Bizonyos esetekben viszont az noapic vagy választható lehetõségként. Ha a felhasználó nem (angol nyelven) a általad is tapasztalt lefagyásokhoz vezethet. A tud SSH-n keresztül csatlakozni, az a /etc/hosts.allow és www.linuxjournal.com/ módban történõ futtatás legfõbb következménye a tel- a /etc/hosts.deny állományok miatt is lehet. A hosts.allow lj-issues/techsup.html jesítménycsökkenés, mert a megszakításokat a rendszer állományban állítsuk be az sshd: ALL értéket, vagy címen, ahol csak egy nem a leghatékonyabb módon kezeli. Az olyan rendsze- még jobb, ha ismerve azokat a gépeket, amelyekrõl kérdõívet kell kitöltenetek, reknél, ahol sok a megszakítás (sajnos a nagy hálózati ssh-zni kívánunk, csak ezeket soroljuk fel. de a [email protected] címre forgalmat bonyolító gépek – például a webkiszolgálók – Benjamin Judson levelet is írhattok. A levél ilyenek), ez a teljesítménycsökkenés észrevehetõ mér- tárgyában szerepeljen tékû is lehet. Mindazonáltal az SMP elõnyei gyakorlatilag Csatlakozás az MSN-hez a „BTS” kulcsszó. mindig ellensúlyozzák ezt a hatást. Végezz terheléspró- Modemem a KInternet programhoz van beállítva, ezt a bát, hogy megtudd, mekkora a legnagyobb felhasználói programot használom a KDE munkaasztalon SuSE 8.0 terhelés, amit a rendszer még elvisel. alatt. A modem rendben elindul, hívja az internetszol- Chad Robinson, [email protected] gáltatóm (MSN) kiszolgálóját, majd ezt követõen meg- Belkin vezeték nélküli kártya: hal. Az eseménynaplóban a következõ hibaüzeneteket támogatott? találtam: Failed Authentication with peer Hordozható gépemrõl Belkin márkájú vezeték nélküli Possible Bad Account or Bad Password PCMCIA-kártyámmal a vezeték nélküli elérési ponthoz próbálok csatlakozni. Érdekelne, hogy milyen modult kell Elképzelhetõ, hogy az MSN más bejelentkezési folyama- tot kíván, mint ami a KInternet alatt be van állítva? artva használnom a PCMCIA-kártyához. Charles R. Fuller, [email protected] Chris, [email protected] Egy másik Linux-felhasználó volt olyan kedves, és Megpróbálhatsz más hitelesítési módokat is, ilyen megosztotta velünk a Belkin vezeték nélküli alkatré- például a PAP, illetve a CHAP. szeivel kapcsolatos tapasztalatait a honlapján. Ez a Christopher Wingert, [email protected]  honlap neked is segíthet: http://www.jacked-in.org/ Bizonyos felhasználók arról számoltak be a levelezési linux/belkin_wireless.php. listákon, hogy sikeresen beléptek, miután az MSN/ Chad Robinson, [email protected] elõtagot a felhasználónevük elé illesztették. Ha tehát a t. Minden jog fennt A Belkin kártyája ugyanazt a lapkakészletet használja, mint felhasználóneved joe, akkor a KInternetben az MSN/joe az Orinoco kártya. Egyszerûen a /etc/modules.conf állo- felhasználónevet állítsd be. mányban orinoco_cs néven hozz létre egy álnevet a veze- Don Marti, [email protected] ték nélküli eszközhöz. Ha ez nem mûködik, a cardctl ident segítségével többet is megtudhatsz a lapkakészletrõl. Linux Journal 2003. május, 109. szám Christopher Wingert, [email protected] © Kiskapu Kf

18 Linuxvilág Láttuk-hallottuk

Új termékek

S3C2500-RGP Adatok: Biscom, Inc., GSX Server 2.5 Az Arcturus Networks és a Sam- 321 Billerica Road, Chelmsford, Megjelent a VMware GSX Server sung Electronics közös munkájának Massachusetts 01824, legújabb változata, a 2.5-ös. A nagy- eredményeként megszületett az telefon: 800-477-2472, vállalati szintû virtuálisgép-progra- S3C2500-RGP rendszer, ami otthoni e-mail: [email protected], mot adatközpontok átjárók, SOHO-hálózatok, internetre  http:// www.biscom.com üzleti szempontból kötött eszközök és összevonó beren- SNAP Ultimate I/O lényeges alkalma- dezések tervezéséhez szolgáltathat Learning Center zásaihoz és egyéb támpontot. A rendszer tartalmazza A SNAP Ultimate I/O Learning Center nagy forgalmat az alapgépet, amit modulokkal lehet egy olyan önálló rendszer, ami a fel- igénylõ feladatok- kiegészíteni, a Linux operációs rend- használók számára lehetõvé teszi, hoz tervezték. szert és választható gyári program- hogy az Opto 22 SNAP Ultimate I/O A GSX Server biz- készleteket, amelyek bõvítik a ter- rendszerével tanuljanak és gyakorol- tonságos és egysé- mék tudását és felgyorsítják a janak. A Learning Center egy SNAP ges felületet bizto- tervezést. A termék a Samsung Ultimate processzort, válogatott B/K- sít a kiszolgálók ARM940 S3C2500 processzorára modulokat, egy SNAP keretet, táp- összevonásához vagy felosztásához, épül, és a µClinux mûködteti. A egységet, betöltõpanelt és vezeté- hogy az erõforrások kihasználása és rendszer kiépítése: 4 MB Flash kezelése a leghatékonyabb lehessen.

keket, valamint a kézikönyveket és artva ROM, 8 MB SDRAM, egy 100BaseT programokat tartalmaz, amelyek a Több operációs rendszert és azok ethernetkapu, négy 100BaseT ether- felhasználókat segítik a valós idejû alkalmazásait is képes egy idõben net LAN-kapcsoló, egy lapkába ipari automatizálási és befogási–szál- futtatni egy egyedülálló Intel alapú épített titkosítási gyorsító, két soros lítási alkalmazások elkészítésében. rendszeren. A 2.5-ös változat új kapu, PCMCIA- támogatás és I2C A Learning Center segítségével a képessége a legfeljebb 64 GB-os soros EPROM. Lehetséges a WiFi, gyakorlatban kipróbálható a B/K- memória, továbbá 32 processzor WiFi/WAP, többkapus DSP hang kapuk beállítása, az egyszerû vezér- és 64 virtuális gép támogatása. és SmartCardos VPN-hitelesítés lési stratégiák írása és grafikus fel- Adatok: VMware, Inc., 3145 Porter t. Minden jog fennt támogatása is. használói felület építése. Drive, Palo Alto, California 94304, Adatok: Arcturus Networks, Inc., Adatok: Opto 22, Inc., 43044 telefon: 877-486-9273, 116 Spadina Avenue, Suite 100, e-mail: [email protected], Business Park Drive, Temecula,  Toronto, Ontario M5V 2K6, Canada, California 92590, 800-321-OPTO, http:// www.vmware.com telefon: 416-621-0125,  http:// www.opto22.com Mobile DiskOnChip G3 e-mail: [email protected],

Az M-Systems bejelentette a © Kiskapu Kf  http://www.arcturusnetworks.com Quicknet VoIP Linuxra A Quicknet Technologies bejelentette 64 MB-os Mobile DiskOnChip G3 FAXCOM Server on Linux Linux Special Edition nevû termékét, megjelentetését, amit a Toshibával A FAXCOM Server on Linux a menet ami a GnomeMeeting programmal közösen fejlesztettek ki sokoldalú közbeni dokumentumátalakítás hasz- és a Quicknet MicroTelco VoIP szol- mobileszközökhöz, például tenyérgé- nálatával több eltérõ csatolt doku- gáltatásával együtt telefonbeszélge- pekhez vagy a 2.5G és 3G vezeték mentum támogatására képes, és tések kezdeményezésére és fogadá- nélküli eszközökhöz. A G3 flashlemez legfeljebb 96 kaput támogat a fax- sára használható – az Interneten többszintû cellán (MLC) és NAND kiszolgálón. A beérkezett faxokat keresztül hagyományos telefonkészü- Flash flashmemórián alapul, ami kiterjesztett faxközvetítõ lehetõségek lékkel. A Special Edition termékben a szilíciumlapka méretét felére segítségével osztályozhatjuk, többek megtalálható az internetes Phone- csökkenti, mivel cellánként nem egy, között a faxkapu, a tárcsázott fax- JACK-PCI, LineJACK-ISA és Phone- hanem két bitet tárol. A G3 az MLC szám, a küldõ TSID-je és a hívóazo- CARD-PCMCIA bõvítõkártya, ami NAND teljesítményszintjét a bináris nosító szerint. Ha szükséges, az a minõségi hangátvitelt biztosítja. NAND Flash értékei közelébe emeli. adott faxot több célba is eljuttathat- A kártyákhoz való nyílt forrású illesz- A G3 más kapcsolt és beágyazott juk, például több nyomtatóra. tõprogramok a rendszermag részei, eszközökhöz 7×10×1,2 mm FBGA A FAXCOM Server on Linux egy szû- ez a Quicknet VoIP szolgáltatásával, (Fine-Pitch Ball Grid Array) tokozás- rõt tartalmaz a kéretlen faxok kiszû- az OpenH323 protokollokkal és a ban és TSOP-I alakban érhetõ el. résére, ami a bejövõ faxok közül GnomeMeeting programmal kiegé- Adatok: M-Systems, Inc., 8371 kiválogatja a szemetet, és egy kije- szítve olcsó, internetalapú telefoná- Central Avenue, Suite A, Newark, lölt könyvtárba különíti el õket. lást tesz lehetõvé. California 94560, A FAXCOM Server on Linux tartal- Adatok: Quicknet Technologies, Inc., telefon: 510-494-2090, mazza a kötegelt faxfeladás lehe- e-mail: [email protected], 520 Townsend Street, San  tõségét is, ami lehetõvé teszi, hogy Francisco, California 94103, http:// www.m-sys.com a felhasználó egy hívással több faxot telefon: 415-864-5225, Linux Journal 2003, 109. szám küldjön ugyanarra a telefonszámra.  http:// www.quicknet.net

www.linuxvilag.hu 2003. június 19 Töprengõ

artva A jót tenni kell, a rosszat pedig megakadályozni Helye van a rágalmak és a hátrányos jogi megkülönböztetések elleni küzdelemnek, de a Linuxszal végzett hasznos munkának is.

arminc évvel ezelõtt a hanfordi sítménnyel éppen csúcsidõben üzemel- De van egy másik lehetõség: az, hogy

t. Minden jog fennt nukleáris telepen dolgoztam. nek. A törvényt akarták használni a hi- egyszerûen csak haladunk a Linux útján Munkakörömbe elsõsorban a bák következményeinek a kiküszöbölé- – megkeressük a helyeket, ahol a Linux Hrendszerprogramozás tartozott, de végül sére, úgy, hogy a visszatápláló rendsze- megold egy feladatot, és megvalósítjuk rámragadt valami a környezetembõl. rekkel fizettették meg az atomerõmûvek a megoldást. Olyan sok helyen alkalmaz- Sokat tanultam az atomenergiáról és veszélyeinek ártalmatlanítási költségeit. nak idõrabló, nem önmûködõ megoldá- annak antiszociálisabb oldalairól, és fel- Most térjünk vissza a programok világá- sokat vagy gyengén kivitelezett nem-li-

© Kiskapu Kf ismertem néhány mélyen gyökerezõ ba. Amikor elõször találkoztam a Linux- nuxos rendszereket, hogy könnyû érvé- gondot. Megszámlálhatatlan kérdés me- szal, pusztán „valódi” Unix-rendszerek nyesülni a linuxos feladatmegoldással. rült fel, az elsõ három: a mûködési koc- alternatíváját kerestem. A Linux-mozgalomnak mindkettõre kázat, a nukleáris hulladék kezelése és Úgy éreztem, hogy a Linux nagyon ígé- szüksége van. Valakinek foglalkoznia a teljes élettartamra vetített költség. Azt retesnek mutatkozik, ezért irányt váltot- kell a rágalmakkal, és valakinek új he- biztosan tudtam, hogy az atomenergia tunk, és unixos cégbõl linuxos céggé ala- lyekre kell eljuttatnia a Linuxot. nem lesz – Eisenhower elnök húsz évvel kultunk. Most, hogy a Linux Journal több Ami engem illet, kivettem a részemet a korábbi szavaival élve – „olcsóbb annál, mint száz kiadását tudhatjuk magunk rágalmak elleni küzdelembõl. Legtöbb- hogy mérni kelljen”. mögött, úgy érzem, jól határoztunk. ször ez szórakoztató munka volt, de Azt akartam, hogy mindenki megtudja Kezdetben sok energiát fektettem abba, mára szinte teljesen az „egyszerûen csak az atomenergiáról mindazt, amit én. De hogy a Linux erényeirõl beszéljek az oldjuk meg Linuxszal” táborba álltam át. azt is szerettem volna, hogy mindenki embereknek. Hasonlóan ahhoz a gondo- Inkább megmutatom a megoldást, és megtudja, amit az olyan megújuló ener- lathoz, hogy az atomenergia túl sokba felkínálom a döntési lehetõséget valaki- giaforrásokról tudtam meg, mint a kerül, kezdetben ezt is nehéz volt el- nek, minthogy a linuxellenes propagan- napenergia, a biomassza és a szélenergia. adni. Az emberek nem voltak fogéko- da leküzdésére pazaroljam az idõmet. Hamar rájöttem, hogy nem foglalkozha- nyak arra a gondolatra, hogy a Linux Több mint egy éve Costa Ricába költöz- tok mindkét üggyel. A megújuló energia jobb választás lehet, mint amivel éppen tem. A legnagyobb különbség, amit ott megismerése és ezeknek az ismere- dolgoztak. tapasztaltam, az az volt, hogy az embe- teknek a tanítása nagy feladat, csakúgy, Hol vannak már azok az idõk, amikor rek itt nyitottabbak a megoldásokra. Itt mint az atomenergia hibáinak a bemuta- arról kellett meggyõzni az embereket, kevesebb az elköltésre váró pénz, mint tása. Tehát választottam. Mindazok után, hogy a Linux komoly kihívó az operá- az Államokban, és kevesebb a Linux amit Hanfordban megtanultam, úgy ciós rendszerek piacán! Mégha nem is elleni rágalom is. Ezért itt könnyebben éreztem, jobban fel vagyok készülve Linux van a felhasználó gépén, nehezen megtörténhet, hogy meghallgatom arra, hogy az atomenergia elõállításával képzelhetõ el, hogy webböngészés köz- a gondot, Linux alapú megoldást aján- kapcsolatos gondokról beszéljek. ben ne kerülne kapcsolatba valamilyen lok, és azt el is fogadják. Könnyebben Ez a döntés a „rossz megakadályozása” linuxos kiszolgálóval. hiszi el az ember, amit Linus a világura- mellett szólt. Minél több ismeretet sike- A gond az, hogy éppen úgy, ahogyan lomról mondott – csak lehet, hogy az rül átadnom, annál nagyobb az esélye, a háztetõn lévõ napelempanelek fenye- USA lesz az utolsó ország, amelyik kiak- hogy a többség megértse a helyzetet, getést jelentenek az atomenergia-üz- názza a Linuxban rejlõ lehetõségeket. szerepet vállaljon és – hosszabb távon – letre, a Linux is fenyegetést jelent az Egyébként amellett, hogy Costa Rica megakadályozza, hogy az Egyesült operációs rendszerek status quójára Linux-barát, az ország teljes elektromos Államok és a világ még mélyebbre nézve. Sok idõt és energiát lehet a rágal- ellátását megújuló energiaforrások szol- süllyedjen a nukleáris mocsárban. mak elleni küzdelemre fordítani. gáltatják, beleértve a víz-, a geotermikus, Sajnos idõközben újabb „rossz” jelent Ahogy a Linux egyre értékesebb válasz- a szél- és a napenergiát. Ez a két ügy ta- meg. Ahogy a napelemek egyre olcsób- tási lehetõséggé válik, ugyanolyan „mû- lán szorosabban összefügg, mint bak lettek, az áramszolgáltatók azért ködik, de itt nem használhatod” típusú gondoltam. kezdtek lobbizni, hogy a fogyasztóknak érvek jelennek meg, mint az elektromos nehezebb legyen a hálózatra visszatáp- hálózatra visszatáplált választható ener- Linux Journal 2003. május, 109. szám lált áramot eladni. Amikor bebizonyo- giával szemben. Éppen úgy, mint az sodott, hogy a visszatápláló rendszerek atomenergia és a napenergia kapcsán, biztonságosak és hatékonyak, az áram- szép dolog a verseny, a tapasztalat azon- Phil Hughes szolgáltatók az árakat úgy határozták ban azt mutatja, hogy az ígéretes új A Linux Journal kiadója. meg, hogy a fogyasztók által visszatáp- lehetõségeket a jogrendszer segítségével lált áram olcsóbb legyen, mint amit õk hozzák hátrányba. adnak el a fogyasztóknak, noha a nap- Ezt a „rossz megakadályozása” érdeké- elemes rendszerek a legnagyobb telje- ben végzett munkát is el kell végezni.

20 Linuxvilág Vezérfonal

Ismerjük meg a 2.6-os rendszermagot! artva Az új ütemezõ és hangalrendszer mindössze kettõ a felfedezendõ képességek közül, ami csak ránk vár, amint a 2.5-ös fejlesztõi változat végre 2.6-ra vált. Hallgassuk meg, mit gondol errõl egy magprogramozó!

• rendszermag hosszú fejlõdésen ment keresztül, újratervezett blokkréteg, t. Minden jog fennt amióta Linus 2001. november 22-én a 2.4.15 változat- • jobb VM alrendszer, ból kiemelve létrehozta a 2.5.0-t. Ezután beindult a • jobb száltámogatás, fejlesztés,A aminek eredményeképpen egy teljesen más, jóval • új hangréteg. többre képes rendszermag jött létre. Ebben a cikkben az érde- kesebb, fontosabb képességeket emeljük ki, illetve megnézzük, Ebben a cikkben számos új módszerrõl és tervezetrõl fogok

hogy ezek milyen hatással vannak a Linux teljesítményére és majd beszélni, amelyek bekerültek a 2.5-ös rendszermagba, és © Kiskapu Kf megbízhatóságára. a 2.6-ban jelennek majd meg. A fejlesztés sok ember kemény munkájának az eredménye. Tartózkodni fogok a nevektõl, A 2.5-ös változat története napjainkig hiszen ha elkezdenék köszöntet nyilvánítani, elkerülhetetlenül A linuxos hagyományoknak megfelelõen a rendszermag kiseb- megfeledkeznék néhány emberrõl, így inkább semmilyen listát bik változatszámából mindig kiolvashatjuk, hogy az adott sem írok, mintsem hiányos, netán hibás felsorolást adjak közre. rendszermag a fejlesztõi vagy az üzembiztos sorozatba tar- Ha kíváncsiak vagyunk rá, hogy melyik rész kinek a mûve, a tozik-e. Az üzembiztos rendszermagokat páros kis változat- Linux Kernel Mailing List archívuma nagyon jó kiindulási számok jelölik, a fejlesztõi változatok pedig páratlan változat- alapot kínál hozzá. számot kapnak. Amikor már a fejlesztõi változat teljesen kifor- rott, és megbízhatónak minõsítik, kis változatszámát a követ- O(1) ütemezõ kezõ páros számra növelik. Például, a 2.4-es megbízható mag- A folyamatütemezõ (vagy egyszerûen csak ütemezõ) a rend- sorozat a 2.3-as fejlesztõi rendszermagból született. szermagnak az az alrendszere, amelyik a processzoridõ fogla- A jelenlegi fejlesztõi mag változatszáma 2.5. A fejlesztõi lásáért felelõs. Ez a rész dönti el, hogy mikor melyik folyamat sorozat kezdeti munkái általában igen élénken indulnak, és fog futni. Ez korántsem mindig olyan egyszerû: az ütemezõnek számos új képesség és fejlesztés kerül bele ilyenkor a rend- akár egy hosszú listából is ki kell tudnia választani a futtatandó szermagba. Ha Linus és a magfejlesztõk elégedettek az új legértékesebb folyamatot. Amikor nagy számú futtatható folya- képességkészlettel, bejelentik a képességbefagyasztást matunk van, a legjobb folyamat kiválasztása idõbe telhet; a (feature-freeze), ennek célja a fejlesztés ütemének lassítása. többprocesszoros gépek pedig további kihívást jelentenek. Az utolsó képességbefagyasztás 2002. október 31-én volt. A szükséges módosítások listáján az ütemezõ igen elõkelõ helyet Eszményi esetben a képességbefagyasztást követõen Linus foglalt el. A fejlesztõknek három fõ céljuk volt, részletesebben: már nem fogad el újabb képességeket – kizárólag a már meg- • Az ütemezõnek teljes körû O(1) ütemezést kell nyújtania. lévõ munkarészek bõvítését. Amikor a kiválasztott képességek Az ütemezõ minden algoritmusa állandó idõ alatt végez- elkészültek és csaknem teljesen stabilak, kihirdetik a kód- zen, a futó folyamatok számától függetlenül. befagyasztást (code-freeze). A kódbefagyasztás ideje alatt • Az ütemezõnek kifogástalan SMP-méretezhetõséggel kell kizárólag a hibajavításokat fogadják el, hogy a rendszermag rendelkeznie. Eszményi esetben minden egyes processzor- végre megérhesse a megbízható kiadást. nak külön zárolási rendszere és futtatási sora lenne. A fut- Amikor a fejlesztõi kiadás elkészül, Linus bejelenti az üzem- tatási sor a folyamatoknak az a listája, amibõl az ütemezõ biztos változatot. A jelenlegi üzembiztos rendszermag nagy választhat. valószínûséggel a 2.6.0 változatnevet viseli majd. Bár a hivata- • Az ütemezõnek jobb SMP-képességekre van szüksége. los kiadás idõpontját akkor tudjuk meg, „amikor elkészült” Képesnek kell lennie csoportosítani folyamatokat az egyik a rendszermag, 2003 harmadik vagy negyedik negyede központi egységre, és ott lefuttatni õket. A futtatási sorok viszonylag jó becslésnek tûnik. hosszának kiegyensúlyozatlanságait feloldandó lehetõséget 2001 márciusában, majd 2002 júniusában a rendszermag vezetõ kell adni, hogy a folyamatok az egyik processzorról a fejlesztõi a Kernel Summits keretében találkoztak és vitatták másikra kerülhessenek. meg a feladatokat. A 2.5-ös elsõdleges célja az elöregedõ blokk- rendszernek (a rendszermag e része felelõs a blokkeszközökért, Az új ütemezõ valamennyi fenti célt megvalósította. Az elsõ például a merevlemezért) a XXI. századi követelményeknek cél a teljes O(1) ütemezés volt. Az O(1) olyan algoritmust jelöl, megfelelõ korszerûsítése volt. A további célok közt találjuk a ami állandó (konstans) idõ alatt hajtódik végre. A rendszeren méretezhetõséget, a válaszidõ és a virtuális memória (VM) futó folyamatok száma – vagy bármilyen más változó – nincs fejlesztését. A rendszermagírók el is érték valamennyi felsorolt hatással az ütemezõ egyik részének végrehajtási idejére sem. – és sok egyéb – célt. Az alábbiakban felsoroltuk a fontosabb új Képzeljünk el egy algoritmust, amelyik eldönti, hogy melyik képességeket: folyamat fog következõ lépésben futni. Meg kell találunk a leg- • O(1) ütemezõ, nagyobb prioritású futtatható folyamatot, ami még maradék • idõosztásos rendszermag, idõszelettel rendelkezik. A korábbi ütemezõben az algoritmus • lappangási fejlesztések, szerkezete a következõ volt:

www.linuxvilag.hu 2003. június 21 Vezérfonal

for (minden futtathat folyamatra) { keresd a folyamat ØrtØkessØgØt if (ha ez a legØrtØkesebb folyamat artva közös futtatási sor (fs) fs 0 fs 1 eddig) { emlØkezz rÆ } } futtasd a legØrtØkesebb folyamatot

A fenti algoritmus alapján minden egyes folyamat értékét le cpu 0 cpu 1 cpu 0 cpu 1 kell ellenõriznünk. Ennek megfelelõen az algoritmus n elem

t. Minden jog fennt esetén n-szer ismétel. Így O(n) algoritmusnak nevezzük, hiszen végrehajtási ideje a folyamatok számának növekedésével 1. ábra Bal oldalt a 2.4-es futtatási sora; jobb oldalon a 2.5-ös, lineárisan növekszik. illetve a 2.6-os futtatási sora Ezzel szemben az új ütemezõ a folyamatok számát nézve állandó végrehajtási idejû; azaz teljesen mindegy számára, elõfordul, hogy a folyamatokat át kell tenni egyik processzorról hogy öt vagy 5000 futtatható folyamat van a rendszeren. a másikra, például ha a processzorokon futtatott folyamatok

© Kiskapu Kf Mindig pontosan ugyanannyi idõre van szüksége a folyamat száma nincs egyensúlyban. Ilyen esetekben a különleges, kiválasztására és végrehajtására: terhelés-egyensúlyozó módszer kiszedheti a folyamatokat • Kérd le a legmagasabb prioritást, amihez folyamatok a sorokból. Ez a mûvelet viszonylag ritkán fordul elõ, így tartoznak. az SMP-affinitás megmarad. • Kérd le az adott prioritási szint listájának az elsõ tagját. Az új ütemezõ sokkal többre képes, mint gondolnánk. • Futtasd ezt a folyamatot. A 3. táblázatban az új ütemezõ teljesítménypróbáit adjuk közre.

Ezzel az algoritmussal megoldhatók a „kérd le a legmagasabb Idõosztásos rendszermag prioritást” és a „kérd le a lista elsõ tagját” mûveletek, mivel A rendszermag-idõosztás feladata a lappangási idõ csökken- ezeket az értékeket az ütemezõ folyamatosan nyilvántartja tése. Az eredmény: gyorsabb rendszerválaszidõ és kellemesebb – keresés helyett egyszerûen csak le kell kérdeznie õket. Ered- interaktív élmény lesz. A Linux-rendszermag a 2.5.4 változattól ményképpen az új ütemezõ a folyamatok végignézése nélkül kezdve vált idõosztásossá (preemptív), korábban együttmû- is képes a legmagasabb prioritású folyamatot kiválasztani. ködõ módon hajtódott végre. Ez annyit jelent, hogy a folya- A második cél a tökéletes SMP-méretezhetõség elérése volt. matok (legyenek akár valós idejûek) a rendszermag rendszer- Ide tartozik, hogy az ütemezõ teljesítménye egy adott pro- hívásaiban nem tudtak más folyamatokat elõreengedni. cesszoron akkor is azonos marad, ha újabb processzorokat Ennek eredményeképpen az alacsony prioritású folyamatok adunk a rendszerhez. A korábbi ütemezõben ez nem így volt: a magasabb rendûek elé kerülhetnek, megakadályozva, hogy az ütemezõ teljesítménye a zárolási verseny következtében azok igényeik szerint érjék el a processzort. Mégha az alacso- a folyamatok számának növekedésével egyre csökkent. Az nyabb rendû folyamat idõszelete le is járt, tovább folytathatja ütemezõnek és adatszerkezeteinek a karbantartása meglehetõ- a futását, amíg a rendszermagon belül be nem fejezte az elkez- sen költséges, s ennek legnagyobb részét a futtatási sor keze- dett feladatot, vagy önként vissza nem adja az irányítást. Ha lése tette ki. Egy zárolásnak nevezett mûveletet használunk a várakozó magasabb rendû folyamat például egy szövegszer- annak érdekében, hogy egyszerre csak egy processzor tudjon kesztõ, amibe a felhasználó éppen gépelni szeretne, vagy változtatni a futtatási soron. Ez lényegében azt jelenti, hogy MP3-lejátszó, ami a hangvermét újra szeretné tölteni, az az ütemezõt egyszerre csak egy processzor futtathatja. eredmény gyenge interaktív teljesítmény lesz. Ha viszont a Ezt a problémát orvosolandó az új ütemezõ egyetlen közös magasabb rendû folyamat valamilyen különleges valós idejû futtatási sor helyett minden processzorhoz külön sort használ. folyamat, az eredmény egyenesen végzetes is lehet. Ezt a megvalósítást gyakran többsoros ütemezõnek is nevezik. De miért nem volt már a kezdetektõl fogva idõosztásos a Minden egyes processzor futtatási sorában külön folyamatlista rendszermag? Azért, mert idõosztásos rendszermagot készíteni várakozik a végrehajtásra. Amikor egy adott processzor végre- sokkal több munkát jelent. Ha a rendszermagban futó felada- hajtja az ütemezõt, csak a saját futtatási sorából választ. Ennek következtében a futtatási sorban sokkal kisebb lesz a versengés, 1. táblázat és a teljesítmény a rendszer processzorszámának növekedé- A pingponghatás legrosszabb esete sével nem csökken. Az 1. ábrán láthatjuk a közös futtatási sorral CPU idõ 1 idõ 2 idõ 3 idõ 4 idõ 5 és egyedi futtatási sorokkal rendelkezõ kétprocesszoros gépet. A harmadik és egyben utolsó cél a fejlettebb SMP-affinitás A folyamat CPU 0 CPU 1 CPU 0 CPU 1 CPU 0 elérése volt. A korábbi Linux-ütemezõ rendelkezett egy nem- B folyamat CPU 1 CPU 0 CPU 1 CPU 0 CPU 1 kívánatos jellemzõvel, nevezetesen: a folyamatokat pattogtatta a processzorok között. A fejlesztõk ezt a viselkedést pingpong- 1. táblázat hatásnak nevezték el. Az a legrosszabb ilyen esetet 2. táblázat mutatja be. Az új ütemezõ megõrzi a processzorirányultságot Az új ütemezõ a processzoronkénti külön futtatási soroknak CPU idõ 1 idõ 2 idõ 3 idõ 4 idõ 5 köszönhetõen képes feloldani ezt a nehézséget. Mivel minden processzor saját listával rendelkezik a futtatható folyamatokról, A folyamat CPU 0 CPU 0 CPU 0 CPU 0 CPU 0 a folyamatok azonos processzoron maradnak. A 2. táblázat ezt B folyamat CPU 1 CPU 1 CPU 1 CPU 1 CPU 1 a fejlettebb mûködési elvet mutatja be. Természetesen néha

22 Linuxvilág Vezérfonal

A merevlemezek meglehetõsen összetett alkatrészek, amelyek bármelyik érvényes blokkjához az operációs rendszernek írási és olvasási hozzáférést kell biztosítania. Mivel a keresés artva költséges, az elérési idõ mérséklése érdekében az operációs felsõ memória rendszernek okosan kell kezelnie valamint besorolnia a blokkos eszközkéréseket. A Linux blokkrétegére már nagyon ráfért az újratervezés. Szerencsére a 2.5.1-gyel megkezdõdött a réteg kipofozása. alsó memória A munkába bevont legérdekesebb részek a blokkos I/O-kérel- meknek megfeleltetett új, rugalmas és általános szerkezet beve- zetése, a pattintóvermek (bounce buffers) eltüntetése, és az

I/O-folyamatoknak közvetlenül a magas memóriában történõ t. Minden jog fennt támogatása, valamint a várakozási soronként létrehozott io_request_lock és az új I/O-ütemezõ. A 2.5-ös változat elõtt a blokkos eszköz az I/O-kérelmek leírá- merevlemez sára a buffer_head szerkezetet használta. Ez a módszer több okból sem volt hatékony, de a legkomolyabb érv ezek közül az,

hogy a blokkos rétegnek az adatszerkezetet gyakran kisebb © Kiskapu Kf darabokra kellett törnie, majd az I/O-ütemezõben késõbb újra 2. ábra 2.4-es rendszermag pattintóveremmel össze kellett állítania. A 2.5-ös rendszermag az I/O-mûveletek tárolására új adatszerkezetet használ, a bioszerkezetet (bio tok bármikor újraidõzíthetõek, védelmet kell beépíteni, hogy struct). Ez a szerkezet egyszerûbb, a nyers és átmeneti megakadályozzuk az osztott adatok egyidejû elérését. Szeren- „tárazott” I/O-mûveletekhez egyaránt felhasználható, a magas csére az idõosztásos rendszermag gondjai éppen azonosak az memóriában is mûködik, ráadásul könnyedén szétszedhetõ, SMP (symmetrical multiprocessing) esetében korábban fel- illetve összerakható. A blokkos réteg egységesen az új bioszer- merült gondokkal. Így aztán azt a módszert, ami eredetileg kezetet használja, így a kód tisztább és hatékonyabb lesz. SMP alatt nyújtott védelmet, a rendszermag idõosztási gond- A következõ feladat a magas memóriában végzett I/O-mûvele- jainak megoldásához is könnyedén át lehetett ültetni. A rend- tekhez használt pattintóverem kiiktatása volt. A 2.4-es rend- szermag egyszerûen az SMP forgózárait (spinlocks) használja szermagban minden, a blokkos eszközökrõl a magas memóriá- az idõosztás jelzésére. Amikor a kódban zárolásra van szükség, ba irányuló I/O-átvitel kényszermegállót volt kénytelen beik- az idõosztás szintén kikapcsolódik. Minden más esetben a tatni. A magas memória olyan, nem állandóan belapolt memó- jelenlegi folyamat megelõzése teljesen biztonságos. riarész, amihez a rendszermagnak különleges támogatást kell nyújtania. Az Intel x86 gépein az összes 1 GB feletti rész ilyen A lappangási idõvel kapcsolatos fejlesztések típusú. A magas memóriába irányuló minden I/O-kérelem Valószínûleg már látjuk is a következõ szûk keresztmetszetet. (például a merevlemezrõl beolvasni egy fájlt valamely 1 GB Az idõosztásos rendszermag az idõzítés lappangási idejét feletti címre) kénytelen az alacsony memóriában található a rendszermag végrehajtási idejérõl a forgózár végrehajtási különleges pattintóvermet használni. A gyakorlat azt mutatja, idejére csökkenti. Ez egyértelmûen gyorsabb, de még mindig hogy néhány eszköz képtelen megérteni a magas memória- lehetséges hibaforrás. Szerencsére a zárolási idõ, vagyis az címeket. Ennek megfelelõen az eszközöknek mindig alacsony az idõszak, amíg a rendszermag idõosztásos módja ki van címen kell az I/O-átvitelt elvégezniük. Amennyiben a célterület kapcsolva, csökkenthetõ. valójában a magas memóriában található, a blokkos eszköz A rendszermagfejlesztõk az alacsony lappangási idõt szem adatait csak az alacsony memórián keresztül, „pattintva” lehet elõtt tartva hatékonnyá tették a rendszermag algoritmusait. a magas memóriába juttatni (lásd a 2. ábrát). Ez a további máso- Elsõsorban a VM és a VFS (Virtual FileSystem) feladataira lás sok felesleges munkát jelent. A 2.5-ös rendszermag már összpontosítottak, ennek eredményképpen a zárolás ideje önmûködõen támogatja a közvetlen magas memóriaátvitelt, jelentõsen csökkent. Végeredményül kitûnõ válaszidõt kaptak. és az erre képes eszközök esetében megszünteti a pattintó- A felhasználók a 2.5-ös alatt még közepes gépeken sem tapasz- verem-logikát. taltak 500 nanosecundumnál rosszabb idõzítési lappangási idõt. A következõ szûk keresztmetszet, amivel a fejlesztõk szembe- találkoztak, a teljes körû I/O-kérelemzár volt. Minden blokkos Újratervezett blokkréteg eszközhöz egy kérelemsor tartozik, ami a blokkok I/O-kérel- A blokkréteg a rendszermagnak az a része, ami a blokkos meit, azaz az egyes blokkok írását és olvasását jelzõ egyedi eszközök kezeléséért felelõs. A hagyományos Unix-eszközök bioszerkezeteket tárolja. A rendszermag – ahogy a meghajtók kétfajta alkatrészt támogatnak: a karakteres és a blokkos esz- felveszik vagy törlik a kérelmeket – folyamatosan frissíti a közöket. A karakteres eszközök, például a soros kapuk és a bil- sorokat. Az egyidejû módosítástól a sorokat az lentyûzet, egyesével karakterek vagy bájtok folyamaként értel- io_request_lock védelmezi – a kód csak akkor módosít- mezik az adatokat. Ezzel szemben a blokkos eszközök elõre hatja a sort, ha birtokolja a zárat. A 2.5 elõtti rendszermagok- megadott méretû adagonként kezelik az adatokat (ezeket ban egyetlen teljes körû zár oltalmazta a rendszer összes nevezzük blokknak). A blokkos eszközök nem csupán fogadják kérelmét. A teljes körû zár az összes sor egyidejû elérését és küldik az adatfolyamokat; bármikor bármelyik blokkjuk megakadályozta, holott a zárnak pusztán az egyetlen soron elérhetõ. Az egyik blokkról a másikra történõ ugrást keresésnek belüli egyidejû eléréseket kellene megakadályoznia. A 2.5-ös hívják (seeking). Blokkos eszközre példa a CD-ROM-meghajtó, alatt a teljes körû zárat külön sorokhoz rendelt finom felbon- a merevlemez és a szalagos egység. tású zárrendszerrel helyettesítették (3. ábra). Ennek megfele- A blokkos eszközök kezelése egyáltalán nem magától értetõdõ. lõen a rendszermag egy idõben több sort is képes kezelni.

www.linuxvilag.hu 2003. június 23 Vezérfonal

zár hivatkozáslista a megfelelõ artva zár zár virtuális lapokra

zár fizikai lap

3. ábra A 2.5-ös rendszermagban 4. ábra A fordított térképezés egy fizikai lapot megjelenik a kérelemsoronkénti külön zár egy vagy több virtuális laphoz rendelhet

t. Minden jog fennt Végül az új I/O-ütemezõ kiküszöbölte a blokkos réteg mara- sen idõigényes. A fordított térképezéses VM virtuális címekbõl dék, kevésbé hatékony megoldását is. Az I/O-ütemezõ felelõs fizikai címekre mutató térképeket is tartalmaz. a blokkok összerakásáért és fizikai eszközre történõ küldéséért. Mivel a keresés költséges, az I/O-ütemezõ jobban szeret folya- for (minden tÆblabejgyzØsre) matos kérelmeket teljesíteni, ezért a beérkezett kérelmeket if (ez a fizikai c m sz ksØges) szektorok szerint rendezi. Ez a képesség a lemezek teljesít- megtalÆltuk a megfelelı c met

© Kiskapu Kf ménye és élettartama szempontjából egyaránt hasznos. A gond csak az, hogy a folyamatos szektorokra irányuló ismételt I/O- az rmap VM egy mutatót követve egyszerûen kikeresheti a kérelmek megakadályozhatják egy nem ide tartozó szektor virtuális címet. Ez a módszer sokkal gyorsabb, különösen kérelmének a kiszolgálását. Az új I/O-ütemezõ úgy oldja meg nagyobb VM-terhelés alatt. A 4. ábra a fordított térképezés ezt a nehézséget, hogy határidõt vezet be az I/O-kérelmekhez. diagramját ábrázolja. Az I/O-ütemezõ csak a határidõ lejártáig várakoztathatja a Ezenkívül a VM programozói a VM több algoritmusát újrater- kérelmet, azután már mindenképpen ki kell szolgálnia, és nem vezték és továbbfejlesztették, szem elõtt tartva az egyszerûsí- folytathatja a jelenlegi szektorhoz tartozó kérelmek összeállí- tést, az általános esetekben elérendõ nagy teljesítményt és a tását. Az új ütemezõ egyben az írás–várakozás–olvasás kérdést szélsõséges körülmények között szükséges legalább elfogad- is megoldja azáltal, hogy az olvasási mûveleteknek elõnyt ad ható teljesítményt. Az eredményül kapott VM egyszerûbb, az írással szemben. Ez a változtatás nagymértékben javítja az mégis szívósabb lett. olvasási lappangási idõt. Végül, de nem utolsó sorban, a kérelemsor mostantól egyszerû lista helyett vörös, illetve fekete 3. táblázat fa alakú, ami igen könnyen kereshetõ adatszerkezet. A csevegõkiszolgáló-teljesítménypróba nagyszámú folyamat közötti üzenetváltást mér. Fejlettebb VM alrendszer Az eredmények üzenet/másodperc mértékegységben értendõk A 2.5-ös változat alatt a VM végre magára talált. A VM alrend- Ütemezõ 1. futás 2. futás 3. futás szer a rendszermagnak az a része, amelyik az összes folyamat virtuális címterületéért felelõs. Ide értendõ a memóriakezelési 2.4 ütemezõje 79723 82210 94803 módszer, a lapkilakoltatási stratégia (mit cseréljünk le, ha kevés 2.5 ütemezõje 612320 620880 609420 a memória) és a belapolási stratégia (mikor cseréljük vissza a dolgokat). A VM gyakran okozott nehézségeket Linux alatt. A bizonyos terhelés alatt mért jó VM-teljesítmény gyakran 4. táblázat okoz gyenge teljesítményt más részeken. Az igazságos, egysze- A szálkészítés és kilépés próbaeredménye: a teszt tíz kezdeti szál teljesítményét méri, amelyek mindegyike rû, jól felépített VM mindig is elérhetetlennek látszott – egé- egy, öt vagy tíz párhuzamos szálat készít és zár be szen mostanáig. Az új VM-ben végzett három nagyobb változ- tatás eredménye: pthread könyvtár 1 5 10 • fordított térképezéses (reverse-mapping avagy rmap) VM; LinuxThreads 140 µs 150 µs 170 µs • újratervezett, okosabb, egyszerûbb algoritmusok; • szorosabb együttmûködés a VFS-réteggel. NGPT 75 µs 80 µs 90 µs NPTL 20 µs 20 µs 20 µs A végeredményül kapott VM általános esetekben különlegesen jó teljesítményt nyújt, de szélsõséges esetekben sem hullik darabjaira. Lássuk mindhárom változást! Végül sokat fejlõdött a VM és a VFS közötti együttmûködés. Minden virtuálismemória-rendszer rendelkezik fizikai címekkel Ez létfontosságú, mivel a két alrendszer igen bensõséges (a fizikai RAM-lapkák tényleges lapcímeivel) és virtuális viszonyban áll egymással. Egyszerûsödtek a fájl- és lapvissza- címekkel (az alkalmazások számára nyújtott logikai címekkel). írások, az elõreolvasás és a gyorstárkezelés. A bdflush rend- A memóriakezelési egységekbõl (Memory Management Unit, szermagszálat a pdflush szálcsoport váltotta fel. Az új szálak azaz MMU-ból) álló szerkezetekkel kényelmesen kikereshetjük sokkal jobb lemeztelítettség elérésére képesek; egy fejlesztõ a virtuális címekhez tartozó fizikai címeket. Ez kívánatos is, szerint a kód egy idõben hatvan lemezfolyamatot tud telített mivel a programok folyamatosan használják a virtuális memó- állapotban tartani. riacímeket, és ezt az eszköznek kell fizikai címmé alakítania. Ugyanakkor fordított irányban haladni egyáltalán nem olyan Szálak fejlesztése könnyû. Amennyiben fizikai címbõl szeretnénk virtuális címet Linux alatt a szálkezelés mindig utólag beleszõtt gondolatnak létrehozni, a rendszermagnak minden táblabejegyzést végig tûnt. A szálasított modell nem igazán illeszkedik a hagyomá- kell néznie és ki kell keresnie a kívánt címet, de ez meglehetõ- nyos Unix-folyamatmodellbe, ennek megfelelõen a Linux-

24 Linuxvilág Vezérfonal

rendszermagról sem mondható el, hogy elkényeztetné a szála- fejlesztést tartalmaz az elõzõ hangréteg, az Open Sound Sytem kat. A felhasználói térben futó pthread programkönyvtár (OSS) rendszerhez képest. Mind közül a legfontosabb, hogy az (közismertebb nevén a LinuxThreads), ami a glibc (a GNU C ALSA sokkal erõsebb és gazdagabb API-t nyújt, mint az OSS. artva könyvtár) része, nemigen kap nagy segítséget a rendszermag- Az ALSA-meghajtók és a hozzájuk tartozó programkönyvtár tól, ennek eredményképpen a szálak teljesítménye sem éppen (alsa-lib) segítségével kevesebb erõfeszítéssel tudunk fejlett csillagászati. Rengeteg lehetõség kínálkozott a fejlesztésre, de audioalkalmazásokat készíteni. ezt csak úgy lehetett kivitelezni, ha a rendszermag és a glibc Az ALSA rengeteg hangeszközt támogat, továbbá visszafelé programozói együtt tudnak mûködni. együttmûködõ OSS-csatolófelülete is létezik. Nagyon valószínû Örvendezzünk, mert képesek voltak erre, következésképpen azonban, hogy az OSS-meghajtók a 2.6-osban is megmaradnak a rendszermag száltámogatási képessége jelentõs mértékben azok kedvéért, akiknek továbbra is OSS-re van szükségük, megnõtt; és Native Posix Threading Library (NPTL) néven lét- esetleg jobban kedvelik.

rejött egy új, felhasználói térben használható pthread könyvtár, t. Minden jog fennt ami majd a LinuxThreads helyére léphet. Az NPTL, akárcsak a Jövõkép LinuxThreads, 1:1 arányú szálasító modellt használ. Ez annyit Egy kicsit talán felelõtlen dolog a 2.6-os jövõjét boncolgatni, jelent, hogy minden felhasználói térben létezõ szálhoz pontosan hiszen még meg sem jelent. Ugyanakkor érdekes elgondol- egy rendszermagszál tartozik. Lenyûgözõ, hogy a fejlesztõk kodni azon, milyen is lesz a 2.7-es fejlesztõi rendszermag anélkül voltak képesek kitûnõ teljesítményt elérni, hogy átálltak (vagy legalábbis milyet szeretnénk). Ha szerencsénk van,

volna az M:N modellre (ahol rendszerszálak száma dinamikusan most a régóta várt tty-réteg (terminál) újraírása következik. © Kiskapu Kf kevesebb is lehet, mint a felhasználói térben futó szálak száma). A tty-réteg mostanra ugyanis hatalmasra duzzadt, és eléggé A magváltozások és az NPTL együtt növekvõ teljesítményt és zavarossá vált. szabályosságot hozott. Egy kis ízelítõ az újdonságokból: Mindenki kívánságlistáján szintén az elsõ helyezettek között • a szálak helyi tárolástámogatása, áll a SCSI-réteg újraírása. Jelenleg a SCSI-réteg túlságosan buta, • O(1) exit() rendszerhívás, a meghajtók pedig túl okosak. Sõt az IDE- és SCSI-rétegeket • fejlettebb PID-foglaló rendszer, is egyesíteni lehetne, akár egyetlen általános lemezrétegben! • a clone() rendszerhívás szálasító bõvítése, De akárhogy is legyen, a SCSI-rétegnek mindenképpen • szálérzékeny kódkiíró- (dump) támogatás, szüksége van egy kis tisztogatásra. • szálasított jelzés- (signal) fejlesztések, A fentieken kívül minden más elég bizonytalan. Kockázatos • új, gyors, felhasználói térben futó zárolási primitívek lenne találgatásokba bocsátkozni; az eddig felsoroltak is (ezeket futexnek nevezzük). inkább csak a jelenlegi igények egyszerû megfigyelése alapján születtek. Mint mindig, a 2.7-es tényleges munkái is – akárcsak Az eredmény önmagáért beszél. Egy adott gépen 2.5-ös rend- a vakaródzás – attól függnek majd, hogy hol viszket a szermag és az NPTL alkalmazásával százezer szál egyidejû fejlesztõknek. létrehozása és törlése kevesebb mint két másodpercig tart. A jövõtõl függetlenül a 2.6-os rendszermag nagyszerûnek Ugyanitt a rendszermag-változtatások és az NPTL nélkül tûnik – kiváló méretezhetõség, fürge munkafelületi válaszidõ, ugyanez a próba körülbelül 15 percet vesz igénybe. fejlettebb igazságosság, illetve boldogan együttmûködõ VM A 4. ábrán láthatjuk a szálkészítõ és szálkilépõ és VFS-réteg jellemzi. próbateljesítmény eredményeit, az NPTL, NGPT (az IBM M:N arányú Next Generation POSIX Threads nevû pthread könyv- Linux Journal 2003. május, 109. szám tára) és a LinuxThreads rendszerek felhasználásával. Ez a próba szintén százezer szálat készít, de sokkal kisebb párhu- zamos lépésekkel. Ha még ez sem nyûgözött le, akkor igazán Robert Love ([email protected]) keményfejû vagy. Matematika és számítógépes tudományok szakos hallgató a Floridai Egyetemen. Amikor éppen nem Új hangréteg Linuxot elemez, autóversenyzik, thai ételeket eszik A Linux sound architecture (ALSA) régóta várt beillesztése vagy punk zenét hallgat. a 2.5.5-ös változatban kezdõdött meg. Az ALSA rengeteg

www.linuxvilag.hu 2003. június 25 Vezérfonal

artva A rendszermag beállításai és fordítása A 2.5-ös sorozat esetében a korábbinál sokkal egyszerûbb saját rendszermagot készíteni vagy illesztõprogrammal bõvíteni a rendszerünket.

rendszermagfordítás mûvelete két részbõl áll: elõ-

t. Minden jog fennt ször meg kell adni a megfelelõ beállításokat, majd ezekkel a beállításokkal el kell végezni magát a fordí- tást.A A 2.5-ös elõtti magváltozatoknál a beállítások a Config.in nevû állományokba kerültek, ilyen minden alkönyvtárban volt; súgóként pedig egy központi leírás, a Documentation/ Configure.help fájl szolgált. A fordítási folyamat leírására szol-

© Kiskapu Kf gáló nyelv parancssori jelleget öltött, és a felhasználónak fel- kínálandó beállításokat az éppen megjelenített beállításoktól függõen választotta ki. A dolog viszonylag jól mûködött, ám idõvel túl sok külön- féle beállítás terhelte le ezt a nyelvet, ami már nem tudta megfelelõen kezelni õket. A 2.5.45-ös változat megjelenésekor Roman Zippel újraírta a beállítónyelvet, és új beállítóprog- ramok kerültek a fõ rendszermagfába is. Az új beállítónyelv 1. kép A rendszermag beállításainak megadása a make config segítségével rugalmasságát és tudását tekintve egyaránt felülmúlja elõdjét. A súgó szövegét is egyesíti a beállításokat vezérlõ részekkel, így az illesztõprogramok foltjainak telepítése is könnyebb, és nem kell a központi Configuration.help fájllal való ütközé- sek miatt aggódni. A 2.5-ös sorozatban Kai Germaschewski és további kbuild-fej- lesztõk lassan átdolgozták a rendszermag Makefile rend- szerét, így a rendszermagnak a kiválasztott beállításokkal való lefordítása is egyszerûbb lett. Írásomban a 2.5-ös rendszermag- ban szereplõ Makefile és beállítófájlok formátumát, illetve az illesztõprogramok hozzáadásának és a rendszermag lefordí- tásának a módját ismertetem.

A rendszermag beállításai A rendszermag beállításait szöveges vagy grafikus beállítóprog- rammal adhatjuk meg. A szöveges beállítóprogram a make 2. kép A make menuconfig használatakor könnyebb config paranccsal indítható; a beállítási lehetõségeket sorban visszalépni és kijavítani a hibákat egymás után kínálja fel a felhasználónak (1. kép). Az ugyancsak szöveges ncurses és változat jóval népszerûbb, indításához a source "sound/isa/Kconfig" make menuconfig parancsot kell kiadni (2. kép). A Qt alapú source "sound/pci/Kconfig" grafikus beállítóprogram a make xconfig paranccsal vehetõ source "sound/ppc/Kconfig" használatba (3. kép). source "sound/arm/Kconfig" A rendszermag beállításait kezelõ program indításkor kiolvassa source "sound/usb/Kconfig" a fõ beállítófájl – i386 alapú gépeknél az arch/i386/Kconfig – tartalmát. A többi géptípus is saját beállítófájlokkal bír a meg- A sound/usb/Kconfig fájl az összes olyan beállítást tartalmazza, felelõ könyvtárakban. A fõ beállítófájl további állományokat is ami az ALSA USB illesztõprogrammal kapcsolatos: magába olvaszt a rendszermag könyvtárfájában lévõ különféle alkönyvtárakból. Ezek a fájlok hasonló módon további állomá- # ALSA USB drivers nyokat foglalhatnak magukba. Az arch/i386/Kconfig fájlban például az alábbi sor szerepel: menu "ALSA USB devices" depends on SND!=n && USB!=n source "sound/Kconfig" config SND_USB_AUDIO Vagyis beillesztjük a fenti állomány tartalmát. A sound/Kconfig tristate "USB Audio/MIDI driver" fájl ugyanakkor több más állományt is magában foglal: depends on SND && USB help source "sound/core/Kconfig" Say ·Y· or ·M· to include support for source "sound/drivers/Kconfig" USB audio and USB MIDI devices

26 Linuxvilág Vezérfonal artva t. Minden jog fennt

4. kép Az újonnan hozzáadott FooBar USB hangszóró

3. kép A Qt alapú make xconfig

modulnak állítjuk be, akkor a CONFIG_SND_USB_AUDIO © Kiskapu Kf beállítás is modulértéket vesz fel. Ha mindkét vezérlõbeállítás endmenu le van tiltva (vagyis n értéket kaptak), a függõ beállítási lehetõ- A Kconfig-fájlokban megjegyzéseinket a kettõs kereszt karakter ség nem jelenik meg. Ha mindkettõnek y értéket adunk, a (#) után írhatjuk be. A mögötte, azonos sorban található szö- függõ beállítás n, y vagy m értéket kaphat. Ezt a viselkedést vegrészeket a beállítóprogram nem olvassa be. egyetlen sor írja elõ: A menu és endmenu parancsok a beállítóprogramot arra utasítják, hogy újabb menüszintet vagy képernyõt nyisson depends on SND && USB meg. A menu sorban a menü nevét idézõjelek közé szúrva kell megadni. A fenti fájlban a menü neve a következõ: A rendszermag kódjából a beállítási érték látható lesz (jelen "ALSA USB devices". esetben a CONFIG_SND_USB_AUDIO), így a kód ennek és A menük és a beállítási lehetõségek esetében megadható, hogy bármely beállítási értéknek a meglétét ellenõrizni tudja. Meg megjelenjenek-e a képernyõn vagy sem. A fenti példában az kell jegyezni, hogy a #ifdef-nek az egy .c fájlon belül vala- USB-beállítások menüje csak akkor jelenik meg, ha a milyen beállítási érték ellenõrzésére történõ használata ellen- CONFIG_SND és a CONFIG_USB beállítást is kiválasztottuk; kezik a rendszermagra vonatkozó programozási stílusbeli a függést a depends on SND!=n && USB!=n sor adja meg. alapelvekkel. Ezzel már korábban is foglalkoztam egy cikkem- A szükséges gépelés mennyiségének csökkentése értekében ben, lásd „Proper Linux Kernel Coding Style” (Linux Journal, minden beállítási lehetõség a CONFIG kulcsszóval kezdõdik, 2002. július,  http://www.linuxjournal.com/article/5780). amit a beállítónyelv nem használ. A beállításoknak a következõ Az #ifdef parancsokat csak a .h fájlokban használjuk, a .c értékek adhatók meg: fájlok maradjanak tiszták és könnyen olvashatók. A súgó szövege korábban egyetlen nagy Configuration.help • y – a beállítás engedélyezve van, fájlba került. Most a leírás a Kconfig állományban, közvetlenül • n – a beállítás nincs engedélyezve, a depends sor után található. Egy help vagy ---help--- • m – az adott dolog modulként kerül lefordításra. tartalmú sorral kezdõdik, ezt további sorok követik, a help sorhoz képest két szóközzel beljebb. Ha a CONFIG_SND és a CONFIG_USB beállítások nincsenek n értékre állítva (vagyis belefordítjuk õket a rendszermagba, Új beállítási lehetõség hozzáadása vagy modulok lesznek), a CONFIG_SND_USB_AUDIO beállítás Ha új beállítási lehetõséget kívánunk hozzáadni, a meglévõ jelenik meg a felhasználó elõtt. A beállítás a három lehetséges Kconfig fájlt csupán a kívánt helyen a megfelelõ sorokkal kell érték közül egyet vehet fel, vagyis „háromállású” kapcsolóként bõvítenünk. Ha például új USB illesztõprogram készül az viselkedik. A felhasználó a következõ szöveget látja: „USB ALSA hangrendszerhez, akkor az a sound/usb könyvtárba fog Audio/MIDI driver:” kerülni, és egy sound/usb/Kconfig fájlt kell hozzáadni. Az alábbi illesztõprogram a képzeletbeli FooBar USB-s hangszóró A háromállású USB Audio/MIDI driver beállítás vezérlését végzi. A CONFIG_SND és a CONFIG_USB beállítások A beállítási lehetõségek megadásakor az alábbi típusok közül engedélyezésétõl, továbbá a CONFIG_SND_USB_AUDIO választhatunk: beállítástól függ, ugyanis az új illesztõprogram felhasználja ennek az illesztõprogramnak bizonyos szolgáltatásait. Az új • bool – a változó az y és az n (igen, illetve nem) beállítási lehetõség az SND_USB_AUDIO pont után kap helyet, értéket veheti fel. de még a záró endmenu parancs elõtt, valahogy így: • tristate – a változó y, n vagy m értéket kaphat. • int – a változó bármilyen számértéket felvehet. config SND_USB_FOOBAR tristate "USB FooBar hangsz r Ezt a beállítási lehetõséget egy depends logikai sor szabá- illesztıprogramja" lyozza, ami a menüpontokéval azonos logika szerint mûködik. depends SND_USB_AUDIO A CONFIG_SND_USB_AUDIO lehetõség a CONFIG_SND és a help CONFIG_USB beállításoktól függ, vagyis ha ezek valamelyikét `ll tsd Y ØrtØkre, ha FooBar USB

www.linuxvilag.hu 2003. június 27 Vezérfonal

hangsz r t szeretnØl hasznÆlni. speedtch-objs := speedtouch.o atmsar.o

A k d modulkØnt is hasznÆlhat . Az elsõ sor adja meg, hogy a speedtch modul létrejöjjön-e. artva (= Ilyenkor sz ksØg szerint Ha igen, a sor jelzi, hogy a rendszermagba kerül-e vagy modul illeszthetı lesz. A második sor tudatja, hogy a speedtouch.c és az atmsar.c a fut rendszermaghoz, illetve fájlok .o fájlokba fordítandók, és összekapcsolva fogják alkotni eltÆvol that .) a speedtch.o modult. A modul a k vetkezı nevet kapja: A régebbi rendszermagoknál, ha egy fájl szimbólumokat is usbfoobar.o közzétett, akkor közvetlenül is szerepelnie kellett a rendszermag Makefile állományaiban. A 2.5-ös és újabb A beállítási lehetõség akkor jelenik meg, ha az rendszermagoknál ez a kötelezettség már nem áll fenn.

t. Minden jog fennt SND_USB_AUDIO beállítást választottuk ki (4. kép). Új illesztõprogram hozzáadása a fordítási folyamathoz A rendszermag fordítása Ha új illesztõprogrammal szeretnénk bõvíteni a rendszermag A rendszermag fordítása különálló Makefile állományok fordításának folyamatát, és az illesztõprogram egyetlen fájlban alapján történik, ezek összekapcsolása fordítás közben található, akkor mindössze egy sorra van szükségünk. történik meg, így egy nagyméretû Makefile jön létre. A FooBar USB hangszóró példájára utalva az

© Kiskapu Kf A különálló Makefile állományok a megszokottól eltérõ, kifejezetten a rendszermag fordítási folyamatára jellemzõ obj-$(CONFIG_SND_USB_FOOBAR) += usbfoobar.o formátumot követnek. A Makefile feladatköre a szükséges fájlok – a megadott beállításoktól függõ, megfelelõ formá- sort kell hozzáadni a sound/usb/Makefile állományhoz. tumú, vagyis az eredmény vagy modul lesz, vagy beépül Ha az illesztõprogram két fájlban található, például a foobar1.c a rendszermagba – létrehozatalára korlátozódik. Például és a foobar2.c fájlban, akkor egy további sorra is szükség van: a 2.5.59-es rendszermagbeli drivers/usb/misc/Makefile állomány így néz ki: usbfoobar-objs := foobar1.o foobar2.o

# Összegzés # Makefile for the rest of the USB drivers A 2.5-ös rendszermagnál a beállítások megadásának, illetve a # (the ones that don·t fit into any other fordításnak a folyamata jelentõsen leegyszerûsödött és rugal- # categories) masabbá vált a korábbi változatokhoz képest. Roman Zippel és # Kai Germaschewski munkájának hála a rendszermag fejlesztõi több figyelmet fordíthatnak magára a programozásra, és keve- obj-$(CONFIG_USB_AUERSWALD) += auerswald.o sebbet kell törõdniük a rendszermag fordításának bonyolult obj-$(CONFIG_USB_BRLVGER) += brlvger.o folyamatával. obj-$(CONFIG_USB_EMI26) += emi26.o A Kbuild folyamatról további tudnivalókat Sam Ravnborg obj-$(CONFIG_USB_LCD) += usblcd.o kiváló írásában találhatunk, amely a obj-$(CONFIG_USB_RIO500) += rio500.o  http://marc.theaimsgroup.com/?l=linux-kernel&m= obj-$(CONFIG_USB_SPEEDTOUCH) += speedtch.o 104162417329638 címen érhetõ el. obj-$(CONFIG_USB_TEST) += usbtest.o obj-$(CONFIG_USB_TIGL) += tiglusb.o Linux Journal 2003. május, 109. szám obj-$(CONFIG_USB_USS720) += uss720.o

Greg Kroah-Hartman ([email protected]) speedtch-objs := speedtouch.o atmsar.o Jelenleg a Linux USB és a PCI Hot Plug rendszermag felelõse. Az IBM-nél dolgozik, ahol Amennyiben a CONFIG_USB_LCD beállítás m értéket kapott, számos, a Linux rendszermagjával kapcsolatos az usblcd.c modulba történõ fordításáról az alábbi sor gondoskodik: kérdéssel foglalkozik.

obj-$(CONFIG_USB_LCD) += usblcd.o 

Egyéb esetben, ha a beállítás y értéket kapott, a kódrészlet KAPCSOLÓDÓ CÍMEK közvetlenül a rendszermagba épül. Ha a megfelelõ modul egyetlen .c fájlból jön létre, akkor mindössze ennyi kell ahhoz, A Linux-rendszermag otthona hogy új rendszermag Makefile-t hozzunk létre.  http://www.kernel.org Ha az illesztõprogram több .c állományból épül össze, az A 2.5-ös fejlesztõi rendszermag letöltési helye állományok neveit különálló sorokban kell felsorolni, az illesz-  ftp://ftp.kernel.org/pub/linux/kernel/v2.5/ tõprogram, avagy a modul nevével párosítva. Az elõbbi példá- ban a fájlok és az illesztõprogramnevek listája a következõ- Rendszermag-levelezési lista képpen alakul:  http://www.cs.helsinki.fi/linux/linux-kernel/ 2.5-ös rendszermag-beállítási tippek obj-$(CONFIG_USB_SPEEDTOUCH) += speedtch.o  http://www.linux-sxs.org/administration/25xconf.html

és a másik a

28 Linuxvilág Vezérfonal

A magmódú Linux artva Modulkészítés nélküli programfuttatás a magtérben.

Kernel Mode Linux (KML) olyan módszer, ami az módszer támogatja ezt a programalapú védelmi megközelítést, egyszerû felhasználói térben futó programok számára többek között a Java bytecode, a .NET CIL, a O'Caml, a Typed

lehetõvé teszi, hogy a magtérben fussanak. Írásunk Assembly Language és a Proof-Carrying Code. t. Minden jog fennt Aennek a hátterét világítja meg. A hagyományos rendszermagok a processzor beépített szolgál- KML: felhasználói folyamatok végrehajtása magmódban tatásai révén védik magukat. A Linux-rendszermag például A rendszermag által védett program megalkotásához tett elsõ a saját védelmére a processzor legkiváltságosabb szintjét és lépésként kidolgoztam a KML-t. A KML tulajdonképpen a memóriavédelmi szolgáltatásait használja. A rendszermag saját felhasználói folyamatokat magmódban futtató módosított mag,

magának a legkiváltságosabb szintet tartja fenn: a magmódot. amit azután a magmódú felhasználói folyamatok hívnak meg. © Kiskapu Kf Ezzel szemben a felhasználói folyamatok a legkevésbé kivált- A magmódú felhasználói folyamatok közvetlen kölcsönhatás- ságos szinten, felhasználói üzemmódban futnak. Ilyeténkép- ban állnak a rendszermaggal. Emiatt a rendszerhívásokkal pen maga a processzor védi a rendszermagot, minthogy a kapcsolatos többletráfordítás elhanyagolható. felhasználói módban végrehajtott programok nem férhetnek A KML az eredeti Linux-rendszermaghoz foltként áll rendelke- hozzá olyan tárterületekhez, amelyek a magmódban végre- zésre, emiatt a rendszermagot újra össze kell építeni. A KML hajtott programokhoz tartoznak. használatához szükséges a folt, valamint a rendszermag beállítá- Mivel a felhasználói folyamatok nem képesek rendszerhívá- sakor be kell kapcsolni a Kernel Mode Linuxot (KML). Építsük sokat kiadni a rendszermagban, ezért e nehézség feloldásához újra a rendszermagot, majd telepítsük, ezt követõen indítsuk a hagyományos rendszermagok a korszerû processzorok nyúj- újra a gépet. A KML-folt a  http://www.yl.is.s.u-tokyo.ac.jp/ totta szolgáltatásokat aknázzák ki, biztonságosan, de korlá- ~tosh/kml címrõl tölthetõ le, illetve megtalálható a 48. CD tozott mértékben növelve a rendszer kiváltságos üzemmód- Magazin/Magmod könyvtárában. jának a szintjét. Vegyük példaként az IA-32 felület számára A legfrissebb KML-ben a /trusted könyvtárban található készült Linux-rendszermag programvezérelt megszakításke- programok magmódú felhasználói folyamatokként futnak; zelõ (software interrupt) eljárását. maga a rendszermag nem végez semmiféle biztonsági A programvezérelt megszakítás különleges ugróutasításnak ellenõrzést. Vegyük például az alábbi parancsot: tekintendõ, aminek a célcímét a rendszermag korlátozza. A kezdeti értékadás során a programvezérelt megszakítás cél- % cp /bin/bash /trusted/bin && címét a rendszerhívásokat kezelõ különleges eljárás címére /trusted/bin/bash állítja be. Rendszerhívások igénybevételéhez a felhasználói program egy különleges utasítást, az int 0x80-at hajtja végre, Ez a bash parancsértelmezõt magmódban futtatja. ekkor a rendszermagban lévõ rendszerhívásokat kezelõ eljárás magmódban lesz végrehajtva. Az eljárás környezetet vált, azaz Mire képesek a magmódú felhasználói folyamatok? menti a felhasználói program regisztereinek tartalmát. Végül A magmódú felhasználói folyamatok egyszerû felhasználói fo- meghívja azt a magszolgáltatást, ami a felhasználói program lyamatok, kivéve természetesen a kiváltsági szintjüket (privilege által kért rendszerszolgáltatást kivitelezi. level). Éppen ezért ezek mindent meg tudnak tenni, amire az Egy mostani Pentium 4-es gépen a programvezérelt megsza- egyszerû felhasználói folyamatok képesek, például valamennyi kításkezelés és környezetváltás mintegy 132-szer lassabb, mint rendszerhívásfajtát igénybe tudják venni, még a fork-ot (elá- egy puszta függvényhívás. gazás), a clone-t és az mmap-et is. Ezenkívül ha a legfrissebb Mellesleg az IA-32 számára készült, 2.5.53 és nagyobb változat- GNU C könyvtárat – ezen a 2.3.2-es vagy ennél frissebb válto- számú Linux-rendszermagok néhány különleges utasítást zatot vagy a CVS-bõl származó fejlesztõi változatot kell érteni használnak a rendszerhívásokhoz: a sysenter-t és a – a magmódú felhasználói programokban a rendszerhívások sysexit-et. Ez azonban még mindig 36-szor lassabb, mint önmûködõen függvényhívásokká alakítják, akkor akad néhány egy egyszerû függvényhívás. kivétel is, ilyen a clone. Ezért a felhasználói programodban levõ A rendszerhívások felgyorsításának kézenfekvõ módja a fel- rendszerhívásokból eredõ többletráfordítás úgy lett felszámolva, használói folyamatok magmódban történõ végrehajtása. Ekkor hogy magát a programot nem is kellett hozzá módosítani. a rendszerhívások kezelése felgyorsul, hiszen a programvezérelt A lapozási eljárás az egyszerû felhasználói folyamatokkal mege- megszakítások és környezetváltások szükségtelenek. Ezek ettõl gyezõ módon mûködik, vagyis a magmódú felhasználói folyama- kezdve már nem többek egyszerû függvényhívásoknál, mert tok mindegyike saját címterülettel rendelkezik. Azon kívül, ha a a felhasználói program most már közvetlenül hozzáfér a rend- magmódú felhasználói folyamatok feleslegesen sok memóriát fog- szermaghoz. Úgy tûnik, hogy ez a megközelítés biztonsági lalnának is le, a rendszermag önmûködõen kilapozza a tárból, aho- réshez vezet: a magmódban végrehajtott felhasználói progra- gyan ezt az egyszerû felhasználói folyamatok esetében is tenné. mok a rendszermag tetszõleges részéhez hozzáférhetnek. A kivételek, tehát a szakaszolási hibák (segmentation faults), A statikus programelemzés területén elért eredmények, például érvénytelen mûveleti kivételek (illegal operation exceptions) a típuselmélet (type theory) felhasználhatók a rendszermag a felhasználói folyamatokkal megegyezõ módon kezelhetõk, felhasználói programokkal szembeni védelmére. Számos hacsak a program nem jogosulatlanul szeretne hozzáférni a

www.linuxvilag.hu 2003. június 29 Vezérfonal

ciklusba kerül, az elõjogait érvényesíti a folyamaton (leállítja), 1. táblázat Kísérleti környezet és más folyamatokat hajt végre. Talán már észre is vetted, hogy a rendszer továbbra is rendesen mûködik, még a példában levõ artva Processzor Pentium 4 2,533 GHz (L2 gyorstár 512 KB) végtelen ciklus ellenére is. Tár 1 GB (PC 2100 DDR SDRAM) Merevlemez 80 GB Milyen feladatok elvégzésére Operációs rendszer Linux-rendszermag 2.5.59 (KML_2.5.59_001) képtelenek a magmódú felhasználói folyamatok? Libc alfaváltozat glibc-2.3.2 a CVS-fából Annak ellenére, hogy a magmódú felhasználói folyamatok egyszerû felhasználói folyamatok, akad néhány õket érintõ korlátozás is. Ha a magmódú felhasználói folyamatok megsér- tik ezeket a korlátozásokat, a rendszer meghatározatlan álla- 2. táblázat t. Minden jog fennt A rendszerhívások várakozási ideje potba kerül. Ez a legrosszabb forgatókönyv szerint rendszer- (processzorciklusokban kifejezve) összeomlást jelent. Lássuk az elsõ korlátot! Ne módosítsd a CS, DS, SS és FS szakaszregiszterek tartalmát. Eredeti Linux Magmódú Linux (KML) Az IA-32 számára készült KML feltételezi, hogy ezeket a regisz- getpid 432 12 tereket a magmódú felhasználói folyamatok nem módosítják; gettimeofday 820 404 belül használja õket. A második korlát pedig az, hogy kivált-

© Kiskapu Kf sághoz kötött mûveleteket (privileged actions) ne hajts végre helytelen módon. Magmódban a programoknak bármilyen 3. táblázat kivételezett mûveletet jogukban áll végrehajtani. Abban az Az újraolvasás átviteli sebessége: az átmeneti tár mérete = 8 KB esetben azonban, ha ez a mûvelet az adott rendszermaggal nincs engedélyezve, a rendszer meghatározatlan állapotba Áll. méret (KB) Eredeti Linux Magmódú Linux kerül. Erre az esetre mutat példát a következõ magmódú fel- (sysenterrel) (KML) használói folyamat: 16 2675 3223 int main(int argc, char* argv[]) 32 2918 3188 { 64 3056 3365 /* disable hardware interrupts */ 128 2906 3205 __asm__ __volatile__ ("cli"); 256 2327 2486 for (;;); (iozone -S 512 k -s 16 k -s 32 k -s 64 k -s 128 k -s 256 k -r 8 k ) (Egység: MB/sec) return 0; magból a tárterülethez, vagy hibásan hajt végre kiváltságokhoz } kötött utasításokat (privileged instructions). A példa kedvéért végezzük el a következõ program összeépí- Ekkor a rendszer mûködése megakad. Tapasztalatom szerint tését, és hajtsuk végre magmódú folyamatként: csak kevés alkalmazás sérti meg ezeket a korlátokat. A korlátok megsértõi között találjuk a WINE-t és a VMware-t is. Ezek a int main(int argc, char* argv[]) korlátok csak a magmódú felhasználói folyamatok számára { állnak fenn. Az egyszerû felhasználói folyamatokat sohasem *(int*)0 = 1; sújtják ezek a korlátok, még akkor sem, ha KML-képes rendszermagot futtatunk. return 0; } KML-belügyek Az IA-32 processzorokban a futó program kiváltsági szintjét A folyamat végrehajtása szakaszolási hibával zárul, ez azonban annak a kódrészletnek a kiváltsági szintje határozza meg, ahol nem jár együtt magpánikkal (kernel panic). Ez a példa egyúttal a program végrehajtódik. Emlékezzünk csak vissza, hogy az azt is megmutatja, hogy a jelzõ eljárás mûködik. A második IA-32 processzorok egyrészt egy szakaszból állnak, amelyet a példánkban építsük össze az alábbi programot és hajtsuk végre CS elnevezésû szakaszregiszter jelöl ki, másrészt a szakaszba magmódú felhasználói folyamatként: mutató eltolásból (offset), amit az EIP regiszter határoz meg. A kódszakasz kiváltsági szintjét tehát a szakaszleíró határozza int main(int argc, char* argv[]) meg. A szakaszleírónak van egy mezõje, ami a szakasz kivált- { sági szintjét határozza meg. for (;;); A Linux-rendszermag alapvetõen két szakaszt hoz létre: a rendszermag kódszakaszát és a felhasználói kódszakaszt. return 0; A rendszermagkódszakaszt maga a rendszermag használja, } kiváltsági szintje pedig magmódra (kernel mode) van állítva. A felhasználói kódszakasz egyszerû felhasználói folyamatok- Használjuk a CTRL-C billentyûket a folyamatnak való SIGINT nak van fenntartva, kiváltsági szintje pedig felhasználói módra küldéséhez. Figyeljük meg, hogy a folyamat meg is kapja a je- van beállítva (user mode). Amikor az execve-t felhasználói let, és rendesen befejezõdik a végrehajtása. A második példánk folyamat futtatására használjuk, az eredeti Linux-rendszermag azt szemlélteti, hogy a folyamatütemezés mûködik – vagyis a szakaszregisztert a felhasználói kódszakaszra állítja be. Így még akkor is, ha egy magmódú felhasználói folyamat végtelen aztán a felhasználói folyamat valódi felhasználói üzemmódban

30 Linuxvilág Vezérfonal

lesz végrehajtva. Ahhoz viszont, hogy a felhasználói folyama- rammal kezeljük, akkor a magmódú felhasználói folyamat képes tot magmódú felhasználói folyamatként hajthassuk végre, biztonságosan elérni a tárvermet. Ha viszont az összes lapozási a KML a folyamathoz tartozó CS regisztert – a felhasználói hibát ezzel a szolgáltatással kezeljük, akkor romlik a rendszer artva kódszakasz helyett – rendszermag kódszakaszra állítja. mûködõképessége, mivel a feladatalapú megszakításkezelés Ezután a folyamat magmódban hajtódik végre. A KML egy- lassabb, mint az egyszerû megszakításkezelés. Ezért csak a kettõs szerû megközelítése miatt a magmódú felhasználói folyamat kivétel hibákat kezeljük ilyen módon, más szóval kizárólag a átlagos felhasználói folyamat lehet. tárverem hiányból adódó hibák kezelését végzi ez a szolgáltatás. Tapasztalatom szerint a tárvermek csak ritkán okoznak lapozási A vereméhséghiba és megoldása hibákat, és a mûködéscsökkenés is elhanyagolható. A KML alapvetõ megközelítése egyszerû, a benne rejlõ legnagyobb hibát vereméhségnek nevezik. Mindenekelõtt azt A mûködés mérése

fejtem ki, hogy az eredeti Linux-rendszermag miként kezeli a A mûködés javulásának mérésére két kísérletet végeztem. t. Minden jog fennt kivételeket – a lapozási hibákat és a megszakításokat idõzítõ Mindkét mérés az eredeti és KML rendszermag mûködését megszakításokat – az IA 32 processzorokon. Ezt követõen vette össze. Az eredeti Linux-rendszermag mûködésének méré- ismertetem a vereméhséget, végül pedig az általam kidolgozott sére a sysenter/sysexit módszert választottam a 0x80-as megoldást mutatom be. Az eredeti Linux-rendszermagban a utasítás helyett. A kísérleti környezet az 1. táblázatban látható. megszakításkezelést a megszakításleíró táblában (Interrupt Az elsõ kísérletben a getpid és gettimeofday rendszerhí-

Descriptor Table, azaz IDT) kapuként meghatározott megsza- vások várakozási idejét mértem, a rendszerhívásokat a felhasz- © Kiskapu Kf kításkezelõ eljárások végzik. Ha megszakítási kérelem érkezik, nálói programok közvetlenül kezdeményezték a mérésekben, az IA-32 felfüggeszti a program futását, menti a program a libc nélkül. A várakozási idõt az rdtsc utasítással mértem, végrehajtási környezetét, és végrehajtja a megszakításkezelõ az eredményeket pedig a 2. táblázatban foglaltam össze. eljárást. A program kiváltsági szintjétõl függ, hogy az IA-32 a A végeredmény azt tükrözi, hogy a getpid a KML-ben 36-szor megszakítások érkezésekor milyen módon menti a futó prog- volt gyorsabb, mint az eredeti Linux-rendszermagban; a ram végrehajtási környezetét. Ha az IA-32 a programot felhasz- gettimeofday pedig kétszer olyan gyors volt a KML-ben, nálói módban hajtja végre, a memória vermét önmûködõen mint az eredeti Linux-magban. átkapcsolja a magveremre, azután a végrehajtási környezetet A második kísérlet állomány B/K-mérés volt, amit az Iozone menti a magverembe. Amennyiben a program végrehajtása állományrendszer-mérõvel folytattam le. A be- és kivitelt négy magmódban történik, az IA-32 processzor nem kapcsol át a fájlmûvelettípusra nézve vizsgáltam meg: írás, újraírás, olvasás saját tárvermére és nem menti a környezetet (az EIP, EFLAGS, és újraolvasás. A mérést különbözõ méretû állományokkal ESP, és az SS regiszter tartalmát) a futó program tárvermébe. végeztem, aminek a mérete 16 KB-tól 256-KB-ig terjedt, az De vajon mi történik akkor, ha a KML magmódú felhasználói átmeneti tár méretét pedig 8 KB-ban rögzítettem. folyamata hozzáfér a tárveremhez, amit a processzor laptáblái A rendszer hátterét az ext3 állományrendszer adta. Minden még ki sem osztottak? Elõször laphiba keletkezik, ekkor a pro- egyes Iozone-mérést harmincszor hajtottam végre, és a legjobb cesszor megpróbálja megszakítani a folyamatot, majd megkí- átviteli eredményt választottam. sérel elugrani az IDT-ben meghatározott hibakezelõhöz. Ezt Az újraolvasás átviteli teljesítménye a 3. táblázatban található. a feladatot azonban képtelen végrehajtani, hiszen nincs verem, Helyhiány miatt az írás, újraírás, olvasás és újraolvasás rész- ahová a végrehajtási környezetet menteni tudná, ugyanis a letes eredményeinek bemutatásától eltekintünk. folyamat végrehajtása magmódban történt, így a processzor Az eredmény azt mutatja, hogy KML-ben az újraolvasás sebes- sohasem képes a tárverembõl a magverembe kapcsolni. A pro- sége 6,8–21 százalékkal javult. Ezenkívül az írás 0,6–3,2%-kal, cesszor e végzetes hiba jelzésére egy különleges védelmi hibát az újraírás 3,3–5,3%-kal és az olvasás 3,1–15%-kal lett gyorsabb. próbál meg létrehozni, az úgynevezett kettõs hibát. Újra csak Ezek a kísérleti eredmények azt jelzik, hogy a KML képes javí- a régi hibával állunk szemben: a processzor nem tud kettõs tani a rendszerhívásokat gyakran igénybevevõ alkalmazások védelmi hibát létrehozni, mert nincs verem, ahová a futó folya- mûködésén, amik kisebb állományokat olvasnak vagy írnak. mat végrehajtási környezetét menthetné. Végül a processzor Például a webkiszolgálók, adatbázisok hatékonyan üzemel- feladja, és újraindítja a gépet. tethetõk KML-ben. A vereméhség megoldásához a KML az IA-32 processzor fela- A megelõzõ kísérletekbõl érdemes megemlíteni, hogy KML ki- datkezelõ szolgáltatását használja. A szolgáltatás használatával iktatta a rendszerhívásokkal járó többletterhet. Az alkalmazá- a mag egyetlen utasítás segítségével képes váltogatni a folya- son végzett kevés finomítással a KML további teljesítményja- matok között. A jelenlegi rendszermagok azonban már nem vulást mutathat. Például a magmódú felhasználói folyamatok használják ezt a szolgáltatást, mert a kizárólag programvezérelt a további javulás érdekében képesek lesznek közvetlenül megoldásoknál lassabb, így szinte feledésbe merült. hozzáférni az átmeneti tárakhoz. Az IA-32 processzorok esetében e szolgáltatás ereje abban rejlik, hogy a megszakítások és a kivételek kezelésére egyaránt A kapcsolódó címek megtalálhatóak a 48. CD Magazin/Magmod használható. Az IA-32 processzor által kezelt feladatokat be könyvtárában. lehet állítani az IDT-re. Amikor megszakítás keletkezik, egy feladat rendelõdik hozzá, ez kezeli a megszakítást – a procesz- Linux Journal 2003. május, 109. szám szor a megszakított program végrehajtási környezetét a tárver- mek helyett elõször a feladat adatszerkezetébe menti. Ezt köve- Toshiyuki Maeda tõen a processzor az IDT-ben meghatározott feladat-adatszer- A Tokiói Egyetemen számítógéptudományból ké- kezetbõl helyreállítja a környezetet. szül PhD fokozatot szerezni. Kedvenc képregényei A legfontosabb az, hogyha a feladatkezelõ szolgáltatást használ- a Hikaru no GO (Hikaru go-játéka), Jojo no Kimio juk a megszakítások kezelésére, akkor a tárveremben nincs na Boken (Jojo bizarr kalandja), és Runatikku szükség kapcsolgatásokra, vagyis ha a laphibákat ezzel a prog- Zatsugidan (Bolondos akrobata-színtársulat).

www.linuxvilag.hu 2003. június 31 Vezérfonal

artva A Linux-rendszermag titkosító API-ja Új általános keretrendszerben érhetõk el a titkosító szolgáltatások a rendszermag minden része számára.

rásunkban a rendszermag új titko- pont volt, ami általában is mindig jó, de azonos kimenetet. A lehetséges alkal-

t. Minden jog fennt sító API-ját mutatjuk be röviden. különösen a rendszermag és a bizton- mazási területek között van az adatok Mindenkihez szólunk, akit izgat a sági szolgáltatások kódjánál lényeges. sértetlenségének ellenõrzése és üzenet- ÍLinux mûködése, például rendszergazda A rugalmas használhatóság is a célkitû- hitelesítõ kódok létrehozása hálózati vagy olyan érdeklõdõ személy, aki sze- zések között szerepelt. Például az API protokollokhoz. Kivonatoló algoritmu- retne bepillantani az API tervezésébe, rugalmasan kezeli az algoritmusokat: sokra példa az MD5 és az SHA1. megvalósításába és alkalmazásaiba. ezek magmodulként szükség szerint A HMAC nevû üzenethitelesítõ séma

© Kiskapu Kf A rendszermag mûködésének ismerete betölthetõk, az API-nak semmit nem (RFC2104) beépült az API-ba, és ez elõnyt jelent, de ez nem szükséges kell róluk elõzetesen tudnia. minden szabványos kivonatoló ahhoz, hogy az API-t nagy vonalakban A jövõben a következõket szeretnék algoritmussal mûködik. Jelenleg az megértsük. még megvalósítani: IPSec-csomagok hitelesítési adatainak Ez az API csak rövid ideje létezik. Nem • Titkosításgyorsító kártyák és az elõállítására használják. sokkal azután, hogy 2002 õszén a rend- IPSec-es hálózati kártyák képessé- 2. Titkosítók – ezek az algoritmusok szermagot lezárták, vagyis az új szol- geinek a kihasználása. szimmetrikus kulcsú titkosítást valósí- gáltatásokat megvalósító kód beépítése • A felhasználó által elõnyben része- tanak meg, ahol az üzenetet egy kulcs nem volt lehetséges, a Dave Miller és sített algoritmus kiválasztása, ha több segítségével alakítják át titkosított Alekszej Kuznyecov által fejlesztett lehetséges megvalósítás közül lehet üzenetté. Általában ugyanez a kulcs IPSec-megvalósítást jelölték a 2.6-os választani (például hatékony gépi szolgál a titkosított üzenet visszafej- rendszermagba való beépítésre. Az kódú megvalósítások vagy külön- tésére is. Követelménye, hogy az üze- IPSec a rendszermagon belül igényli bözõ alkatrészszintû megvalósítások). netek titkosítása és visszafejtése a a titkosítási szolgáltatásokat, és ez a • Az aszimmetrikus titkosítás (RSA) kulcs birtoklása esetén könnyû legyen rendszermag titkosító szolgáltatásaira támogatása, amire a csoportszórásos (amit viszont titokban kell tartani), való egyre növekvõ általános igény IPSec és a magmodulok aláírása elle- anélkül viszont nehéz. A lehetséges mellett arra késztette a fejlesztõket, nõrzésének rendszermagbeli támoga- alkalmazási területek között szerepel hogy új titkosító API-t fejlesszenek. tásához lehet szükség. Ezen a terüle- az adattitkosítás és az üzenethitelesítõ ten sok vita várható, mert az aszim- kódok létrehozása. Titkosító algorit- Tervezés metrikus titkosítás általában lassú és musokra példa a TripleDES, és Bár eredetileg az IPSec támogatása volt bonyolult – bármelyik a kettõ közül a Blowfish, valamint az AES. a cél, az API-t általános célú szolgálta- elég okot ad arra, hogy kimaradjon Kétféle titkosító létezik: a tömbtitko- tásnak tervezték, amit a jövõbeli alkal- a rendszermagból. sítók adott hosszúságú adattömbökkel mazások is kihasználhatnak, például • Egységes API a felhasználói progra- dolgoznak (például 16 bájt), a folyam- az állománytitkosítók, a titkosított állo- mok számára, amik az elérhetõ titko- titkosítók kulcsfolyamot használnak, mányrendszerek, az állományrendsze- sítóeszközöket kívánják hasznosí- ami az adat egyetlen bitjén dolgozik rek sértetlenségét felügyelõ alkalma- tani, például SSL, IPSec-kulcscsere, egy lépésben. A titkosítók számos zások, a véletlenszám-elõállító eszköz biztonságos útválasztó protokoll és üzemmódban mûködhetnek, például (/dev/random), a hálózati állományrend- DNSSEC. ECB (Electronic Codebook) módban, szerek biztonsága (például a CIFS) és • Az API memóriafoglalásának további amiben az üzenet minden tömbje egyéb hálózati szolgáltatások a rendszer- csökkentése, hogy beágyazott esz- egyszerûen van titkosítva a kulccsal, magban, amelyek igénylik a titkosítást. közökben is használható legyen. vagy CBC (Cipher Block Chaining) Az API tervezésekor kifejezetten szem- módban, amiben az elõzõleg titkosí- pont volt, hogy közvetlenül a lapvek- Algoritmusok tott tömb a következõ tömb titkosítá- torokon mûködjön. A lap a rendszermag Jelenleg az API az alábbi háromféle algo- sában kerül felhasználásra. által kezelt memória alapegysége. A lap- ritmust támogatja: 3. Tömörítés – gyakran használják együtt vektorokon alapuló API lehetõvé teszi 1. Kivonatolók (egyirányú hasítófügg- a titkosítással, hogy nehezebb legyen a mély beépülést a rendszermag alszer- vények) – ezek bemenete tetszõleges kihasználni az eredeti üzenet gyenge- kezeteibe, például a VFS-be vagy a háló- üzenet, kimenete rövid, adott méretû ségeit, és hogy gyorsabb legyen a zati verembe, valamint a szétszórás- üzenetkivonat. Az egyirányúsághoz az titkosítás (ugyanis a tömörített üzene- összegyûjtés típusú mûveletet is. Az szükséges, hogy a kimenet egyszerûen tek rövidebbek). A titkosított adatot IPSec esetében a titkosítási mûveletek elõállítható legyen, de az eredeti üze- lényegébõl adódóan nem nagyon közvetlenül a hálózati csomagoknak netet ne lehessen könnyen visszaállí- lehet tömöríteni, és ez hátrányosan megfeleltetett nem folytonos memória- tani belõle. A titkosítási célokra olyan befolyásolja a teljesítményt az olyan lapokra alkalmazhatók. hasítófüggvények felelnek meg, amik átviteli csatornák esetében, amelyek Az egyszerûség fontos tervezési szem- különbözõ bemenetekre ritkán adnak kihasználják a tömörítést. Ha az ada-

32 Linuxvilág Vezérfonal

tokat még a titkosítás elõtt tömörítik, • Átalakítók – objektumok, amik hetõ algoritmusokat. Ezt elsõsorban a sok esetben elkerülhetõ a teljesít- példányosítják az algoritmusokat, kulcstárgyalási protokollokhoz, például ménycsökkenés. Tömörítõ algoritmu- kezelik a belsõ állapotot és a közös az ISAKMP/IKE-hez tervezték használni. artva sokra példa az LZS és a Deflate. megvalósítási logikát. Az átalakítókat Végül az algoritmusbejegyzõ felület a Eddig a jól ismert forrásokból szárma- a crypto_alloc_tfm() és a modulok számára lehetõvé teszi, hogy zó algoritmusokat tették alkalmassá crypto_free_tfm() segítségével egy vagy több algoritmust jegyezzenek az API-val való használatra, mivel kezelhetjük. Az API-hoz tartozó bur- be – különféle tulajdonságokat, mint pél- ezeket valószínûleg jobban átnézték kolók segítségével leegyszerûsödik dául az algoritmus nevét, tömbméretét, és többen próbálták ki. A rendszer- az átalakítók használata, és lehetõvé a legkisebb és legnagyobb kulcshosszt mag fõágába általában csak olyan válik az átalakító alatt meghúzódó megadva. Az adott pillanatban bejegyzett algoritmus kerülhet be, ami nem áll algoritmus tulajdonságainak a algoritmusok és tulajdonságaik a /proc/

szabadalmi oltalom alatt (azaz az lekérdezése. crypto könyvtárban tekinthetõk meg. t. Minden jog fennt IDEA 2011-ig nem kerülhet be), nyílt A következõ példakód az átalakító jellem- és elismert szabványokon alapul, zõ használatát mutatja be, ez a Blowfish- Összegzés és kipróbálására tesztcsomag áll kódolóval ECB módban bizonyos rend- A titkosító API még fiatal, de lehet belõle rendelkezésre. szermagkód adatokat szeretne titkosítani: valami, fõleg ha a felsorolt jövõbeli tervezési célok egy részét megvalósítják.

Lapvektorok tfm = © Kiskapu Kf Mielõtt az API szerkezetének tárgyalá- crypto_alloc_tfm("blowfish", Köszönetnyilvánítás sába kezdenénk, röviden tekintsük át a CRYPTO_TFM_MODE_ECB); Köszönöm David Miller és Nancy Chan memórialapok és a lapvektorok témakö- crypto_cipher_setkey(tfm, segítségét, akik átnézték ezt a cikket. rét. Mint az fentebb említettük, a lap a key, keylength); rendszermag által kezelt memória alap- crypto_cipher_encrypt(tfm, Linux Journal 2003. április, 108. szám egysége (i386-on a lapok mérete 4 KB). &scatterlist, numlists); crypto_free_tfm(tfm); Képzeljünk el egy tárolót, amiben James Morris mondjuk 1460 bájt felhasználói adat Programfejlesztõ – a Netfilter, az LSM, van. Ez a rendszermag adott lapjához Az ábrán (48. CD Magazin/Crypt könyv- az SELinux és a Linux-rendszermag- tartozik, a lap kezdetétõl számított tár) látható, hogy az API réteges felé- titkosító API-projektekben dolgozik. bizonyos eltolási értéktõl kezdõdik, és pítésû, azaz a mag a titkosítás felhasználói Sydneyben független tanácsadó. 1460 bájt hosszú. Ezt a tárolót a követ- és az algoritmusok megvalósítói elõl kezõ lapalapú szerkezet írja le: rejtve van. Ez a mag tartalmazza az { lap, eltolÆs, hossz }. általános átalakítókezelést, a szórási lista A lapokkal közvetlenül dolgozó csatoló- kezelését és az algoritmusok elvonatkoz- nak, például a titkosító API-nak ezzel a tatását. Még lejjebb az algoritmustípus szerkezettel, más néven a lapvektorral szerinti logika – például a titkosítók fel- kell foglalkoznia. A megvalósítás egy már dolgozási üzemmódja és a kivonatok meglévõ rendszermagbeli adatszerkeze- használata az üzenethitelesítõ kódok tet, az úgynevezett szórási listát használja. elõállítására – található. A szórási listában lapvektorok vannak, és Az algoritmuskezelõ réteg tartalmazza általában szétszórásos–összegyûjtéses az algoritmusok megvalósításait felku- közvetlen memória-hozzáférési mûvele- tató, betöltõ és a rájuk való hivatkozást teknél használatos. számláló logikát. Az utóbbi azért szük- A titkosító API arra használja a szórási séges, hogy elkerüljük csúnya dolgok listát, hogy nem folytonos lapvektoro- bekövetkezését, amik akkor történné- kon végezzen mûveleteket. A rendszer- nek, ha egy használatban levõ algorit- magban a szétszórás–összegyûjtés elsõd- musmodult törölnénk a memóriából. leges célja az adatok felesleges másolá- Létezik egy futásidejû algoritmuslekér- sának elkerülése. A tapasztalat szerint dezõ felület is, amin keresztül a hívó ettõl a forráskód is áttekinthetõbb lesz. kód meghatározhatja a rendszeren elér- Számos olvasónak ismerõs lehet a szét- szórásos–összegyûjtéses I/O a readv() és a writev() rendszerhívások formá- Adatok jában. A rendszermag titkosító API-ja A 2.5-ös rendszermagfában lásd: ugyanezt az általános elvet használja fel, • Documentation/crypto/ de egyszerû memóriaterületek helyett • lapokon mûködik. include/linux/crypto.h • crypto/  Az API szerkezete A http://samba.org/~jamesm/ Az API két elsõdleges objektummal crypto címen található weboldal foglalkozik: további tudnivalókat tartalmaz • Algoritmusmegvalósítások – mag- a fejlesztõk számára, például modulok, amik a szükséges algo- a tennivalók listáját. ritmusok kódját tartalmazzák.

www.linuxvilag.hu 2003. június 33 Vezérfonal

artva Halmozható fájlrendszerek készítése Mostantól újraírás nélkül is új képességekkel bõvíthetjük kedvenc fájlrendszerünket.

ájlrendszert, de egyáltalán bármilyen rendszermagkódot használhat. A VFS általában ezeket a függvényeket hívogatja, írni meglehetõsen nehéz feladat. A rendszermag összetett mit sem sejtve arról, hogy pontosan milyen fájlrendszerek

t. Minden jog fennt környezet, ahol egyetlen apró hiba is végzetes adatvesz- függvényei rejlenek a mutatók mögött. Például az unlink Ftéshez vezethet. A fájlrendszerek a felhasználói alkalmazások rendszerhívás a sys_unlink szolgáltatáshívássá alakul, és szemszögébõl nézve átlátszó, egyszerû adatelérési felületet kínál- meghívja a vfs_unlink VFS-függvényt, ez azután a feltele- nak, így a fejlesztõk állandóan új képességekkel szeretnék bõví- pített mutató alapján elindítja a fájlrendszerfüggõ függvény- teni a fájlrendszereket. E cikkben gyors útmutatást adunk, ami mutatót: ext2 esetében ez az ext2_unlink lesz, NFS eseté- alapján bárki anélkül adhat hozzá új képességeket meglévõ fájl- ben az nfs_unlink, más fájlrendszerek esetében pedig a

© Kiskapu Kf rendszeréhez, hogy rendszermag vagy fájlrendszertudor lenne. számukra megfelelõ függvényt. Ebben a cikkben a fájlrendszer függvénymutatókat a -> jellel fogjuk jelölni, a következõ Szóval szeretnél fájlrendszerfejlesztõ lenni? formában: ->unlink(). A Linux több hasonló fájlrendszertípust is támogat: lemezes fájlrendszerek, hálózati fájlrendszerek stb. Egy hatékony és megbízható fájlrendszer kifejlesztése éveket vesz igénybe, és Felhasználói ha egyszer végre üzembiztosan fut, nem szívesen tennénk folyamat tönkre új szolgáltatások beiktatásával. Ezenkívül a fájlrendsze- write() Felhasználó rek karbantartói igen ritkán fogadnak el új képességeket vagy fejlesztési foltokat üzembiztos fájlrendszerükhöz. Így aztán vfs_write() egyáltalán nem meglepõ, hogy a jelenleg használatos legnép- szerûbb fájlrendszerek évek óta szinte semmit nem változtak. Virtuális fájlrendszer (VFS) Tegyük fel, hogy egy egyszerû titkosító fájlrendszert szeret- cryptfs_write() nénk készíteni, ami valamilyen elõre megadott kulccsal titko- sítja az adatot. A különféle kódolásokhoz könnyedén megsze- CryptFS rezhetjük a hordozható C-kódot. Ezután a rendszerbe kell Rendszermag illesztenünk az adatvermet kódoló és dekódoló hívásokat. ext2fs_write() Elméletileg a feladat egyszerû: az írási rendszerhívásokból ér- kezõ összes adatot – mielõtt a lemezre írnánk – titkosítjuk, a ext2FS lemezrõl érkezõ adatokat pedig visszafejtjük, még mielõtt a rendszerhívást kiadó folyamatnak visszaadnánk. 1. ábra Példa a halmozható titkosító fájlrendszerre Ha módosításról van szó, az ember elsõ gondolata az, hogy lemásolja az ext2 5000+ soros forráskódját, áttanulmányozza, Mivel mi a titkosító fájlrendszerünket gyorsan szeretnénk majd beilleszti a kódolórészeket. De inkább álljunk ellen a fejleszteni, a következõ szállóigét alkalmazzuk: „A számítás- késztetésnek, és ne másoljunk le egy egész fájlrendszert. Igaz technikában egy újabb közvetítõ szint felvételével minden ugyan, hogy mindössze 5000+ sorból áll, de a rendszermagkó- feladat megoldható.” Szerencsére a Linux VFS lehetõvé teszi, dot legalább egy nagyságrenddel bonyolultabb fejleszteni, mint hogy a VFS és egy másik fájlrendszer közé újabb fájlrendszert a felhasználói szintû programokat. Mégha végül sikerül is kó- szúrjunk be. Az 1. ábra egy ilyen, CryptFS nevû halmozható doló eljárásainkat beilleszteni a megfelelõ helyre, rá kell ébred- (stackable) titkosító fájlrendszert mutat be. A CryptFS-t azért nünk, hogy idõnk nagy részét tanulmányozással töltöttük, s nevezzük halmozhatónak, mert egy másik fájlrendszer (ext2) végül csak néhány helyen szúrtunk be pár sornyi kódot. És mit tetejére pakoljuk rá. A VFS réteg a CryptFS ->write() függ- kaptunk eredményül? Egyetlen, titkosítással kibõvített ext2 vénymutatóját (cryptfs_write) hívja meg; a CryptFS titko- fájlrendszert. Mi történik, ha a titkosítót inkább NFS fájlrend- sítja a felhasználói adatokat, fogadja, majd továbbadja az alatta szerrel vagy valamely másik rendszer alatt szeretnénk hasz- elhelyezkedõ ->write() függvénymutatónak (ext2_write). nálni a számtalan Linux-fájlrendszer közül? A halmozható fájlrendszerek általában önmagukban is állhat- nak, és bármilyen már létezõ fájlrendszert hordozó befûzési Egymásra épülõ fájlrendszerfejlesztés pont fölé felrakhatók; ez annyit jelent, hogy (halmozható) fájl- A Linux, akárcsak a legtöbb operációs rendszer, két részre rendszerünket csak egyszer kell kifejlesztenünk, és az vala- bontja a fájlrendszerkódot: vannak belsõ részei (ext2, NFS mennyi helyi (alacsonyszintû) fájlrendszeren (ext2, NFS stb.) stb.), és van egy általános célú rétege, amit virtuális fájlrend- mûködni fog. Továbbá a Linux 2.4.20-astól kezdve, a halmoz- szernek neveznek (VFS). A VFS réteg a rendszerhívások és a ható fájlrendszerek távoli NFS-ügyfelekre is biztonságosan belsõ fájlrendszerek között helyezkedik el. A VFS célja egysé- átvihetõk (az nfs-utils-1.0 vagy újabb változat segítségével). ges elérést biztosítani a különbözõ fájlrendszerekhez, elrejtve azok pontos részleteit. Amikor a fájlrendszerek betöltõdnek Hogyan mûködik a halmozható fájlrendszer? a rendszermagba, beállítanak néhány függvénymutatót A halmozható fájlrendszer alapszolgáltatása mûveletet és (OO-szóhasználat szerint metódust), amiket azután a VFS értékeket átadni a lejjebb található fájlrendszernek. Az alábbi

34 Linuxvilág Vezérfonal

kódkivonatban bemutatjuk, hogyan kezeli a WrapFS nevû, Nekirugaszkodás egyszerû, valóságos feladatnélküli adattovábbító fájlrendszer Most már világos, hogyan mûködik a halmozás, de mi a követ- az ->unlink() mûveletet: kezõ lépés? Elõször is keressük meg azokat a helyeket a artva WrapFS-ben, ahová a saját kódunkat beilleszthetjük. Az imént int wrapfs_unlink(struct inode *dir, bemutatott wrapfs_unlink kódhoz visszatérve három ilyen struct dentry *dentry) helyet találunk, az alsóbb szintû ->unlink() függvénymu- { tató elõtt, után vagy helyett. int err = 0; struct inode *lower_dir; 1. Elõhívás: kódunkat beilleszthetjük az alacsonyabb szintû struct dentry *lower_dentry; ->unlink() hívás elé. Például ellenõrizhetjük, hogy a felhasználó fontos fájlt akar-e törölni, és ha igen, megakadá-

lower_dir = get_lower_inode(dir); lyozhatjuk: t. Minden jog fennt lower_dentry = get_lower_dentry(dentry); if (strcmp(dentry->d_name.name, "vmlinuz") == 0) /* pre-call code can go here */ return -EACCES; err = lower_dir->i_op->unlink(lower_dir, 2. Hívás: az egész hívást is helyettesíthetjük. Például a fájl lower_dentry); törlése helyett esetleg csak át akarjuk nevezni valamilyen

/* post-call code can go here */ egyszerû kis visszafordítható (undo) fájlrendszer részeként © Kiskapu Kf (valószínûleg mindannyian találkoztunk már a véletlenül return err; kiadott rm -f parancsok hatásával). } 3. Hívás után: itt az alsóbb fájlrendszerbõl visszatérõ fõmûvelet után tudunk egyéb mûveleteket végrehajtani. Tegyük fel, hogy Amikor a VFS szeretne letörölni egy fájlt a WrapFS fájlrend- egy rossz szándékú felhasználó törölni akarja a /etc/passwd szerrõl, meghívja a wrapfs_unlink függvényt, és átadja fájlt, de a Unix jogosultsági rendszere ezt megakadályozza. a törlendõ fájlt tartalmazó könyvtár fájlleíró (inode) adatát A rendszergazda naplózni szeretné (a syslogd segítségével) (dir), valamint a törlendõ bejegyzés nevét (a dentry belse- az ilyesfajta eseményeket: jében található). if (err == -EACCES && Minden egyes fájlrendszer nyilvántart néhány szükséges strcmp(dentry->d_name.name, objektumot, például fájlleíró-azonosítókat, könyvtárbejegy- "passwd") == 0) zéseket, könyvtárneveket és nyitott fájlokat. Amikor halmo- printk("uid %d tried to delete passwd", zást alkalmazunk, akár több objektum is jelölheti ugyanazt current->fsuid); az állományt – csak éppen különbözõ rétegeken. Például a ábrán látható CryptFS lehet, hogy fenntart egy könyvtárbe- A current mindig az éppen futó folyamatra mutató általános jegyzés-(dentry) objektumot a fájlnév nyílt szöveges változa- hatókörû (global) változó, az ->fsuid pedig e folyamat tával feltöltve, míg az ext2 ugyanennek a névnek a kódolt azonosítója, amit a fájlrendszerek felhasználhatnak. változatát tárolja egy másik könyvtárbejegyzésben. Amennyi- A fenti és az ezután következõ példákat némileg leegyszerû- ben a halmozható fájlrendszer igazán átlátszó akar maradni sítettük, hogy a lényegi részek jobban láthatók legyenek, és a VFS és a többi fájlrendszer számára, kénytelen minden kevesebb helyet foglaljanak. Például a d_name.name össze- szinten több objektumot is fenntartani. tevõ nem null végzõdésû (null terminated), így megfelelõ Ez az oka annak, hogy a wrapfs_unlink elsõ dolga a hosszúságú memcmp utasítást kellene használni; illetve annak megkapott értékek alapján megkeresni az adott objektumhoz ellenõrzésére, hogy a dentry által megjelölt fájl valóban a tartozó könyvtárbejegyzés fájlleíróját az egy szinttel lejjebb /etc/passwd állomány, meg kellene néznünk, hogy valóban ez befûzött fájlrendszeren. Ezek a get_lower_* függvények a fájlrendszer-e a gyökérrendszer, vagy a d_path() segítsé- lényegében a WrapFS objektumok (létrehozásakor kitöltött) gével meg kellene vizsgálnunk az abszolút elérési utat. saját mezõiben található, elõre tárolt mutatókat követik. Az A 2.4.20 alatt kipróbált teljes példákat a FiST-honlapon, illetve alsóbb objektumok beazonosítását követõen megkezdõdhet a 48-as CD Magazin/FiST könyvtárában találjuk meg a halmozás lényegi része. Meghívjuk az alacsonyabb szinten ( http://www.cs.sunysb.edu/~ezk/research/fist). található fájlrendszer ->unlink() függvénymutatóját az alacsonyabb szinten elhelyezkedõ könyvtár fájlleírója alapján, Ki felügyeli a kukkolókat? és átadjuk a két alacsonyabb szintû objektumot. A Unix megpróbálja védelmezni a fájlokat a jogosulatlan fel- A WrapFS teljes értékû nullréteg (vagy loopback) fájlrendszer, használóktól. Amikor a felhasználó olyan fájlt akar megnyitni, ami egyszerûen (és minden módosítás nélkül) csak mûvelete- amire nincs jogosultsága, a Unix azon nyomban egy „jogosult- ket és objektumokat közvetít a VFS és az alul elhelyezkedõ fájl- ság megtagadva” hibaüzenetet ad vissza. Néhány felhasználó rendszer között. Sajnos azért mégsem olyan könnyû dolog szeret mások állományai között nézelõdni, néha kifejezetten megírni a WrapFS-t, ugyanis az alsó fájlrendszerrel szemben olyan fájlokat keresve, amik véletlenül maradtak védtelenek, VFS-ként kell viselkednie, ugyanakkor a Linux igazi VFS-rétege vagy megpróbálja kitalálni az esetleg létezõ fájlneveket vala- számára alsóbb fájlrendszernek kell látszania. Ez a kettõs melyik nem kereshetõ könyvtárban. Sajnos, mégha ezek a szerep a kulcsok, hivatkozásszámlálók és a memóriafoglalás kukkolók nem is járnak sikerrel, az áldozatok többnyire nem óvatos használatát követeli meg. Szerencsére valaki volt olyan sejtik, hogy ilyen jellegû próbálkozás történt. jó, és elõre elkészítette, valamint fenntartja nekünk a WrapFS- Az egyik leggyakrabban használt fájlrendszermûvelet a réteget. A WrapFS-réteget nagyszerûen fel tudjuk használni ->lookup(), ami a rendszer minden egyes fájlnévhasználata mintaként, ha módosításokat vagy új szolgáltatásokat szeret- során meghívódik. A rendszermagnak át kell alakítani a nevet nénk megvalósítani. (a karaktersorozatot) a tényleges VFS-objektum azonosítóne-

www.linuxvilag.hu 2003. június 35 Vezérfonal

vére, vagyis inode, dentry vagy fájl alakba. Hogy kiszûrhessük még sok más képességgel is rendelkezik – mindezt elhanya- a kukkoló felhasználókat, a következõ kódot illesztettük a golható teljesítménycsökkenés árán. snoopfs_lookup vagy snoopfs_permission eljárásokba, A WrapFS a fájlnevek módosítását is kezeli két további eljárás- artva közvetlenül az alsó fájlrendszer ->lookup() hívása után: sal, amik a fájlneveket kódolják és dekódolják. Mindenképpen ügyelnünk kell arra a fájlnevek kódolásakor, hogy a fájlnevek- if ((err == -EACCES || nek a kódolás után is szabályosak maradjanak. Más szavakkal, err == -ENOENT) && nem tartalmazhatnak null értékeket vagy / (perjel) karaktert. dir->i_uid != current->fsuid && Általánosan elterjedt megoldás, hogy titkosítás után current->fsuid != 0) uuencode-oljuk a fájlneveket. printk("snoop uid=%d pid=%d file=%s", current->fsuid, current->pid, Új képességek felhasználói alkalmazásokhoz

t. Minden jog fennt dentry->d_name.name); A wrapfs_unlink példánkban azt javasoltuk, hogy a fájlt törlése helyett egyszerûen csak nevezzük át, így mentve min- Megvizsgáljuk az alsóbb fájlrendszer ->lookup() függvényétõl den törölt állomány egy másolatát. Tegyük fel, hogy rendsze- visszakapott hibakódot (err). Amennyiben EACCES (engedély rünket unrmFS-nek nevezik, ahol a törlendõ fájlokat törlés megtagadva) vagy ENOENT (nincs ilyen nevû fájl vagy könyv- helyett inkább eredeti F nevükrõl F.unrm alakúra nevezzük át. tár) állapotú és a könyvtár tulajdonosa (dir->i_uid) külön- Elég bosszantó lenne, ha az összes .unrm fájl megjelenne a

© Kiskapu Kf bözik a pillanatnyi folyamatot futtató felhasználótól (current könyvtárunkban, fõként ha ott egyáltalán nem is számítunk ->fsuid), de a jelenlegi felhasználó nem a rendszergazda fájlokra. Továbbá ezekkel a szolgáltatásokkal akár a támadót is (hiszen a rendszergazda bármit megtehet), akkor üzenetet jele- becsaphatjuk, aki megpróbálja letörölni a naplófájlokat, hogy nít meg, amiben megjelöli a kukkoló felhasználó azonosítóját. eltüntesse a nyomait. Mindehhez azonban a .unrm fájloknak Az ilyen üzenetek általában a syslogd-be íródnak. alapértelmezés szerint láthatatlanoknak és elérhetetlennek kell lenniük a felhasználó számára. Titkosítás Ha bizonyos fájlokat el akarunk rejteni fájlrendszeren, két Az eltérítõ (wrapper) módszerek különösen alkalmasak a biz- dolgot kell megtennünk. Elõször is meg kell akadályoznunk, tonsággal kapcsolatos alkalmazások fejlesztésére, ahol gyakran hogy a fájl megjelenjen a ->readdir() hívásokban. Ezt úgy sokat segíthet az eltérítés vagy a megfigyelés. Nem meglepõ, tehetjük meg, hogy a wrapfs_filldir függvénybe olyan hogy a FiST legnépszerûbb alkalmazásai éppen a titkosított kódot illesztünk, ami az összes ->filldir() híváshoz kerülõ fájlrendszerek. Ebben a példában egy egyszerû, rot13 kódolást fájlnevet ellenõrzi, és NULL értéket ad vissza azokra a fájlokra, alkalmazó titkosító fájlrendszert mutatunk be. amiket nem szeretnénk megjeleníteni. Másodszor, meg kell Rendszerünkön minden adatot a (feltételezhetõen már korábban akadályoznunk, hogy a felhasználók közvetlenül rákeressenek elkészült) rot13 nevû algoritmussal szeretnénk titkosítani, ami az állományra. Ezt úgy érhetjük el, hogy a wrapfs_lookup értékként a bemenõ és kimenõ verem címét, valamint azok hosz- elején kikeressük a .unrm fájlokat. szát kapja meg. A korábbi példáinkkal ellentétben azonban most Természetesen, ha ezeket a fájlokat mindenki elõl elrejtjük, nincsen olyan nevezetes függvénymutató, ahová a rot13() abból sok hasznunk nem származik. A jogosult felhasználók- függvényünket egyszerûen behelyezve elkódolhatnánk a fájlo- nak – bizonyos körülmények között – el kell tudniuk érni a kat. Valójában bármely fájlrendszeren legyünk is, a fájlok adatai- fájlokat. Egyszerû megoldás például, ha a hívófolyamat UID-jét val dolgozni meglehetõsen összetett dolog, hiszen több függ- ellenõrizzük, és csak bizonyos felhasználók elõl rejtjük el a vénymutatóra is ügyelnünk kell, valamint a fájl adatai kétféle- .unrm állományokat. Ennél jobb megoldás, ha minden rend- képpen, olvasási és írási rendszerhívásokkal is elérhetõk, továbbá szerhívások anyját, az ioctl hívást alkalmazzuk. A WrapFS mindennek bármilyen fájleltolással, valamint az egész lapokon rendszerhez tetszés szerinti számban határozhatunk meg új dolgozó mmap-pel is együtt kell mûködnie. A WrapFS, hogy meg- ioctl hívásokat, hogy azután apró felhasználói programokkal könnyítse a halmozható fájlrendszer-fejlesztõk életét, a fent felso- kiaknázhassuk õket. Ezt a módszert használtuk például a rolt valamennyi függvénymutatót két egyszerû függvényben titkosító fájlrendszerünkben, ahol a felhasználó titkosító kódját foglalja össze: az egyikben kódoljuk a fájladatokat, a másikban egy felhasználói szintû eszköz adja át a rendszermagnak. visszafejtjük õket, feltételezve, hogy egész laphatáron kezdõdõ Az unrmFS rendszerünkben tehát készíthetünk egy visszaállító adatokat használnak (például az IA-32 rendszereken ez 4 KB-ot ioctl hívást, ami a visszaállítandó F fájlnevet várja bemenet- jelent). A WrapFS-mintát használva az egyetlen dolog, amit ként, és ellenõrzi, hogy létezik-e F.unrm nevû állomány. Ameny- nekünk kell megírnunk, a rot13 alapú titkosító fájlrendszer. nyiben igen, az F.unrm fájlt visszanevezi F-re, ismét megjele- (A példa a 48. CD Magazin/FiST/1lista.txt-ben található.) nítve az unrmFS-ben. (A példa a 48. CD Magazin/FiST/ A WrapFS már eleve tartalmazza a kevert olvasásokat, írásokat 2lista.txt-ben található.) és a memóriatérképes mûveleteket kezelni képes összes bonyo- A FiST programot, a leírást és a rengeteg további példát a lult kódot. A WrapFS az encode_block segítségével kódolja  http://www.cs.sunysb.edu/~ezk/research/fist címen találjuk. az adatlapokat, illetve a decode_block alkalmazásával vissza- Jó halmozást! kódolja õket (példánkban e kettõ azonos). A rot13 nem éppen legcélszerûbb kódolás, de az egyszerû Linux Journal 2003. május, 109. szám példa alapján sokkal erõsebb titkosítást használó fájlrendsze- reket is építhetünk. Ezt követtük mi is, amikor nemrégiben Erez Zadok ([email protected]) felépítettünk egy NCryptFS nevû, igen hatékony titkosító fájl- A Stony Brook Egyetem Számítástechnika karán rendszert (a CryptFS utódját). Az NCryptFS többféle kódolást dolgozik, a Linux NFS and Automounter Adminis- is ismer; egy felhasználó, folyamat vagy csoport több kulcsot is tration szerzõje, a FiST halmozható mintarendszer használhat; többféle azonosítási módszere van; a kulcsok ideje megalkotója, és az Am-utils önmûködõ befûzõ- lejárhat és visszavonhatók; kezeli az átruházott elõjogokat; és rendszer elsõ számú karbantartója.

36 Linuxvilág Szaktekintély

Linux a gyakorlatban: mikrovezérlõ-programozás

A Linux kapcsán legtöbbször vagy a számítógépes hálózati kiszolgálókról, artva vagy a felhasználói programokról esik szó.

z a tény, hogy a számítógép tam rá. Ezt az oldalt használhatjuk kiin- sõt ebben az esetben bitszélességük sem elsõsorban eszköz, eléggé hát- dulópontként a programok letöltésekor. azonos), az esetleges belsõ EEPROM térbe szorul. Az alábbiakban A legalapvetõbb programok a gputils memória, valamint az áramkör lábainak

Aegy gyakorlati feladat megoldásának ürü- csomagban találhatók. Mint kiderült, értékét, illetve állapotát. Emellett külön t. Minden jog fennt gyén mutatom be a nyílt forrású prog- ezeknek a programoknak az egyik fõ állományban meg lehet adni az úgyne- ramok használatát: egy PIC mikrovezérlõ fejlesztõje szintén Scott Dattalo. A követ- vezett stimulusokat, amik a külsõ világot program megírását, kipróbálását és esz- kezõ fõbb programok tartoznak hozzá: a hívatottak szimulálni a mikrovezérlõ közbe töltését követhetjük figyelemmel. gpasm, az assembler-fordító, gplink és számára. Ilyenek például az adatok a gplib, amik az áthelyezhetõ kódként soros vonalon, a bemenetek változása,

A feladat és az eszköz fordított programok könyvtárakba való a számláló impulzus. A lefuttatott szimu- © Kiskapu Kf Munkám során egy irányítástechnikai szervezését, majd futtathatóvá szerkesz- lációs ciklusról részletes nyomkövetõ feladat – adatgyûjtés, egyszerû folya- tését teszik lehetõvé. A fejlesztõk célja az, állományt tud elõállítani, amit utólag matvezérlés – merült fel. Általában a hogy a gpasm fordítóforráskód szintjén (mintegy offline) tanulmányozni lehet. Microchip által gyártott PIC mikrovezér- teljes egészében helyettesíteni tudja az Ezzel a programok fordítása és hibake- lõket szoktam alkalmazni, mivel sokféle eredeti Microchip programot, az mpasm-t. resése tekintetében gyakorlatilag elér- változat közül könnyen lehet az adott Mivel a forráskód szabad, tetszõleges tem azt a szintet, amit az eredeti Micro- feladathoz illõt találni. Az újakban ráa- rendszerre lefordítható, amit Linux, Mac chip programokkal, és mindezt Linux dásul flashmemória van, ami lehetõvé és Windows esetén már meg is tettek. alatt. Azonban még nem találtam meg- teszi a törlés nélküli sokszoros (legalább Eddig eljutva jó érzéssel töltött el, hogy oldást a program eszközbe (lapkába) ezer) újraprogramozást, így könnyebb a Linux alatti programfejlesztéshez is történõ írására. Nos, ilyenre is rá lehet programfejlesztés, mert az alakuló prog- léteznek programok, azonban a fent akadni a gnupic oldalon. ramot magában az eszközben is ki lehet vázolt célhoz nemigen jutottam köze- próbálni, nem csak a szimulátorban. lebb. Szerencsére mindjárt a gputils A beprogramozó Mivel kis sorozatú vagy egyedi készülék honlapján megtaláltam (amúgy a gnupic Többféle megoldást is fellelhetõ: saját esetén a lapkák közötti kisebb árkülönb- oldalon is elérhetõ) a következõ lépés- építésû programozó (nyomtatókapus és ség nem játszik jelentõs szerepet, az hez vezetõ utat: a gpsim honlapjának USB-változat), valamint nyomtatókapus egyik legnagyobb tudású mikrovezérlõt a hivatkozását. Ez tulajdonképpen nem gyári programozókhoz való program, és választottam, a 16F877-et. része a gputils csomagnak, de mivel nagy örömömre található Linux program A Microchip cég oldaláról le lehet tölteni ezt is Scott fejlesztette, nem csoda, hogy a Microchip Picstart Plus soros illesztésû egy fejlesztõrendszert az általa gyártott szervesen illeszkedik a gpsimhez. A célja programozójához is. Annak idején vásá- mikrovezérlõkhöz. Ez tartalmazza az as- az, hogy más fordítóprogramokkal és roltam is egy ilyen programozókészü- semblert, a különbözõ általuk gyártott más mikrovezérlõkkel is együtt tudjon léket az alábbi elõnyök kedvéért: vagy ajánlott programozó készülékek il- mûködni, de egyelõre a PIC-változat • viszonylag olcsó, lesztõfelületét, valamint az összes vezér- a legkidolgozottabb. Ezekbõl a legtöbb • szervesen illeszkedik a Microchip lõhöz szimulátort. Emellett a honlap- gyakran használt típust tudja szimulál- fejlesztõrendszerbe (ez Linux alatt jukon minden eszköz adatlapja (pdf for- ni, nagyrészt kifogástalanul, az összes már nem játszik szerepet), mátumban), példaprogramok és tanul- külsõ eszközzel együtt. • a Microchip honlapjáról mindig mányok is fellelhetõk. Ugyanakkor két letölthetõ a legújabb gyári program hátrányt meg kell említenem: a progra- Néhány szó a gpsimrõl (firmware), amit egy 17C44 vezér- mok csak Windows alatt mûködõ válto- A gdb hibakeresõhöz hasonlóan alapve- lõbe beprogramozva és ezt a készü- zatban léteznek, valamint az assemble- tõen parancssori mûködésû, azonban lékbe helyezve a legújabb gyártmá- ren kívül más programnyelv csak külön a gtk-extra csomagra épülve grafikus nyú lapkákhoz is mindig használ- díj ellenében szerezhetõ be. felületet készítettek hozzá (ha ezt akar- ható marad. A fentiek miatt elhatároztam, hogy meg- juk használni, X11 alatt indítsuk a prog- próbálok találni valamilyen programot, ramot). Az alapvetõ hibakeresõ szolgál- Korábban bosszankodtam, hogy a cég, eszközt, ami lehetõvé teszi a könnyebb tatások megtalálhatóak benne: léptetés, jóllehet más tekintetben nagyon meg- programfejlesztést, esetleg Linux alatt is. függvényátugrás, töréspont és futtatás. bízható és a kisfelhasználóknak is min- A mikrovezérlõ tulajdonságainak megfe- den útmutatást megad, a Picstart proto- A gputils programok és a gpsim lelõen megtekinthetjük a programme- kollját nem hozza nyilvánosságra, így A keresés nem várt gyors eredménnyel mória, az adatmemória, vagyis a regisz- linuxos meghajtóprogramját nem tud- járt, ugyanis a  http://www.gnupic.org terek (mivel ezek a vezérlõk Harvard tam (és eddig más se) megírni. Tulajdon- címen Scott Dattalo igen jó, PIC mikro- felépítésû RISC processzorokat tartal- képpen nyomós oka van annak, hogy a vezérlõkkel kapcsolatos címlistájára akad- maznak, így a kettõ teljesen különálló, cég ezt miért nem teszi meg: így nincs

www.linuxvilag.hu 2003. június 37 Szaktekintély

include libnibble.fs \ karakter --> hexa-szÆmjegyÆtalak t include piceeprom.fs \ eeprom mem ria rÆs, -olvasÆs include picflash.fs \ programmem ria-kezelØs artva include libstrings.fs \ sz vegek tÆrolÆsa Øs kezelØse

macro

: transmit-byte ( byte -- ) begin txif bit-clr? while repeat txreg ! ;

t. Minden jog fennt A gpsim futás közben : transmit-nibble ( nibble -- ) nibble>hex transmit-byte ; megkötve a keze, és a különbözõ gyári target változatoknak nem kell egymással felcserélhetõnek maradniuk: hiszen variable recv-state mindig csak a pillanatnyi mplab, illetve

© Kiskapu Kf variable recv-char mpasm-változathoz kell illeszkedniük. variable recv-dat Nos, Andrew Pines most (jórészt) meg- oldotta a feladatot, ugyanis egy külön- : receive-command ( -- ) leges soros kábelt készített, és miközben begin Windowsból használta a programozót, begin rcif bit-clr? while repeat rákötött linuxos gépével mentette az \ ’!’ vagy ’?’ parancsot vezet be, a t bbi adatokat, és ezek révén nagyon sok karaktert egyszerßen visszhangozzuk részt megfejtett a protokollból. Jelenleg rcreg @ dup dup transmit-byte adott egy olyan mûködõ program, [char] ? = if drop 1 recv-state ! recurse exit then amellyel a legtöbb programbetöltési fela- dup dat megoldható. Olykor elõfordulnak [char] ! = if drop 11 recv-state ! recurse exit then hibák, de azért használható. hex>nibble A program lefordítása egyszerû: hasz- \ elsı adat karakter nálatakor meg kell adnunk a soros recv-state @ 1 = if kaput, amihez a programozó csatlakoz- swapf-tos recv-char ! 2 recv-state ! recurse tatva van. Ügyeljünk arra, hogy sem- exit then milyen eszköz ne használja ezt. (Azért \ mÆsodik adat karakter tudom ilyen pontosan, mert mint kide- recv-state @ 2 = if rült, én elfelejtettem, hogy az egyik \ olvasÆs soros kapun a modem, a másikon egy recv-char @ or ee@ dup [char] = transmit-byte soros terminál volt beállítva. Igaz, hogy 4 rshift transmit-nibble 0f and régóta nem használtam egyiket sem, de transmit-nibble 0 recv-state ! a megfelelõ programok futottak, és $d transmit-byte recurse exit then bekavartak az eseményekbe). A progra- \ elsı c m karakter mozóban legalább a 3.00.04-es gyári recv-state @ 11 = if program szerepeljen, ha ennél régebbi swapf-tos recv-char ! 12 recv-state ! recurse van, frissíteni kell (a Chipcad Kft. hon- exit then lapján akár a felprogramozott 17C44 is \ mÆsodik c m karakter megrendelhetõ). Ha minden össze van recv-state @ 12 = if kötve, akkor a recv-char @ or recv-char ! 13 recv-state ! [char] = transmit-byte recurse exit then picp /dev/ttyS0 16f877 -v \ elsı adat karakter recv-state @ 13 = if parancsra kiírja a gyári program válto- swapf-tos recv-dat ! 14 recv-state ! recurse zatszámát. A használt soros kapunak és exit then a programozóban lévõ vezérlõnek meg- \ mÆsodik adat karakter felelõen módosítani kell a parancsot. recv-state @ 14 = if Lehetõség nyílik az eszköz program- \ rÆs memóriájának és beállítási szavának recv-dat @ or recv-char @ ee! 0 recv-state ! olvasására és írására (-wp, illetve -rp $d transmit-byte recurse exit then vagy -wc és -rc), a nem flasheszközök drop üres állapotának ellenõrzésére és a again flasheszközök törlésére. Egyelõre az ; EEPROM adatmemória írása és olvasása a lista folytatását lásd a következõ oldalon nincs megvalósítva. Az „adatlopó” prog- ram is benne rejlik a forrástárban, továb-

38 Linuxvilág Szaktekintély

zérlõ EEPROM és programmemóriájá- a lista folytatása az elõzõ oldalról nak írását, illetve olvasását megkönnyítõ szavak találhatók, valamint táblázatok és artva : print ( -- ) begin str-char dup while transmit-byte szövegek tárolását és elõhívását lehetõvé repeat drop ; tevõ segédletek. Ezenkívül egy rövid leí- : nyito ( -- ) c" PIC soros teszt v0.1 (c) rás mellett több, a forth esetén különö- Havranek Ferenc " print $d transmit-byte ; sen fontos, mûködõ (azaz kipróbált) példaprogram. A Makefile jól használ- : init ( -- ) ható, végeredményként a picp program- $06 adcon1 ! \ A/D Ætalak t tiltÆsa mal beégethetõ .hex, az assembler listát $ff trisa ! \ porta bemenet tartalmazó .disasm és a szavak címeit

0 trisb ! \ portb kimenet tartalmazó .map állományt állít elõ. t. Minden jog fennt 0 portb ! \ alacsony szint (ki) A .hex fájl a gpsim programba betölthetõ $90 rcsta ! \ RS232 engedØlyezØse, folyamatos (elõbb ki kell adni benne a processor fogadÆs pic16f877 parancsot), és ki is próbál- $24 txsta ! \ nagysebessØgß bitrÆta-lØtrehoz ható. Ez látható a képernyõn is az alábbi $0c spbrg ! \ 19200 baud 4 MHz-nØl program (egy soros vonalon keresztül

$be trisc ! \ C6 kapu TX a vezérlõ EEPROM memóriájának írását © Kiskapu Kf $07 option_reg ! és olvasását egyszerû parancsok segít- 0 recv-state ! \ kiindul Ællapot ségével megvalósító) lefordítása után, lásd listánkon. ; Már csak egyetlen dolog hiányzik: hogy ki tudjuk próbálni a programot. Ehhez main : main ( -- ) init nyito receive-command ; természetesen szükség van egy PIC kár- tyára, 16f877-tel, 4 MHz-es oszcillátorral \ LapkabeÆll tÆsok és megvalósított soros (RS232) ki- és bemenettel. Ezenkívül szükségünk lesz fosc-hs set-fosc valamire, ami nyers adatot tud küldeni false set-boden és fogadni (megjeleníteni) a soros vona- false set-wdte lon. Némi keresgélés után kiderült, hogy a Linux Programmers Guide példaprog- ramjai között akad egy egyszerû soros bá a megfelelõ kábel leírása is, így akár egy (a szóban forgó idõpontban korsze- terminálszimulátor program: a mini- magunk is megpróbálkozhatunk az rû) 486-os processzorú gép, miközben a term. Ennek forrásába be kell írni a so- utólagos felderítéssel. megvalósított tranzisztorszolgáltatások ros kapun kívánt értékeket (melyik pél- Ezzel már valóban eljutottunk arra a száma a lapkán kevesebb mint annak dául ttyS0, vagy a sebesség: 19200 baud), szintre, hogy majdnem minden olyat egytizede volt. A forth nyelv fõ jellem- majd le kell fordítani, és már futhat is! meg tudunk tenni, amit az eredeti zõje, hogy úgynevezett szavakból áll, Mint látjuk, ismét kiderült, hogy a Linux fejlesztõeszközökkel. De a célkitûzésem valamint az adatokat egy veremtáron szinte minden feladat megoldására alkal- az volt, hogy valamilyen, a program- keresztül továbbítja közöttük. Ami iga- mas, valamint arra is fény derült, hogy fejlesztést jelentõsen megkönnyítõ esz- zán széppé teszi, az az, hogy tetszõleges legyen bármilyen a program- és eszköz- közt is keressek. Nos, hála Samuel szavakat adhatunk hozzá, és a továb- eszményképünk, a világban biztosan Tardieu-nek, találtam is ilyet. biakban ugyanúgy használhatjuk õket, találunk olyan embereket, akik hozzánk mint a nyelv alapszavait (a C-függvé- hasonlóan gondolkodnak, hasonló meg- A forth fordító nyekhez hasonlóan). Mivel a forth értel- oldásokat keresnek, és sok esetben mun- Mielõtt (röviden) ismertetném a mezõ- és fordítóprogramok általában kájuk eredményét közkinccsé is teszik. programot, néhány szó a forth nyelvrõl, láncolt kódot állítanak elõ, rendkívül kis Ha valakit érdekel a mikrovezérlõ, akár mivel az utóbbi idõben – megítélésem méretû, elfogadható sebességû prog- kedvtelésbõl, egy késõbbi cikkemben szerint – érdemtelenül mellõzve van. ramot kapunk eredményül. Az ügyesen ismertetek egy olyan kártyatervezõ és A forth egy láncolt kódot elõállító értel- megírt programok még olvashatók is. szerkesztõprogramot, amivel a vezér- mezõ nyelv. Legalábbis az volt, amikor Az általam megtalált program a picforth, lõnkhöz elkészíthetjük a nyomtatott Charles Henry Moore egy csillagvizsgáló tulajdonképpen nem is program a szó áramkör tervét. Vajon hol is alkalmazhat- teleszkóp irányításának programozását ma használatos értelmében, azaz nem juk õket? Lássuk csak: hõmérsékletmé- megkönnyítendõ megalkotta az elsõ önállóan végrehajtható. Inkább parancs- résre lakásban, udvaron, számítógépház- megvalósítását. Õ egyébként azóta is lel- fájlnak nevezhetnénk, mivel a futásához ban, de akár lakásautomatizálásra is. kes híve maradt ennek az ötletnek: már szüksége van egy, a futtató gépre készült Havránek Ferenc több ilyen elven mûködõ processzort forth-értelmezõre. Ebben az esetben erre készített, részben a saját maga által alko- a célra a gforth (GNU forth) használ- Automatikamérnökként dol- tott (és szintén forthban írt) áramkörter- ható, ami az ANS forth szabvány egy gozik. Kedvtelései közé tartozik vezõ programmal. Érdekességként: az nyílt forrású megvalósítása. mindenféle kétkerekû jármûvön általa alkotott processzor az adott fela- A program lényegi része a picforth.fs való közlekedés. Szívesen tölti datot végrehajtó program futtatása ese- fájlban bújik meg. Emellett létezik még idejét programozással, nemcsak tén azonos teljesítményt nyújtott, mint néhány segédfájl, amikben a mikrove- PC-s, hanem egyéb környezetben.

www.linuxvilag.hu 2003. június 39 Szaktekintély

artva Ismerjük meg a szabályos kifejezéseket! A szövegfeldolgozás és szövegleírás terén aligha találunk a szabályos kifejezéseknél hatékonyabb eszközt.

épzeljük el, hogy ki szeretnénk keresni egy nevet a ternek számít, hanem különleges célokra van fenntartva.

t. Minden jog fennt telefonkönyvbõl, de nem emlékszünk a név pontos Például a * (csillag) arra használatos, hogy egy karaktercsoport írásmódjára. Hosszú idõt tölthetünk el az összes lehet- nulla vagy több elõfordulására illeszkedjen. A karaktercsopor- Kséges név kikeresésével, hacsak nincs egy olyan eszközünk, tot, más néven atomot olyan módon adjuk meg, hogy az amelyik kigyûjti azt a viszonylag kevés lehetõséget, ami a egyetlen egységnek kezelt karaktereket zárójelek közé zárjuk. hiányos tudásunknak megfelelõ keresési feltételre illeszkedik. A /(piano,)* szabályos kifejezés illeszkedik a példaszö- A szabályos kifejezések pontosan ilyen eszközök. vegre, mert az atomot alkotó „piano,” karaktersorozat kétszer

© Kiskapu Kf A szabályos kifejezés egy olyan karakterlánc, ami egy másik ismétlõdik. Ha az atom csak egyetlen karakterbõl áll, akkor karakterláncot vagy karakterlánccsoportot ír le. Számos alkal- a zárójel elhagyható. mazás aknázza ki ezt a lehetõséget, néhány ezek közül: Perl, A * karakter jelentése a szabályos kifejezésekben eltér a héjbeli sed, awk, egrep, sõt még az Emacs is (a cikk elolvasása után jelentésétõl. A szabályos kifejezésekben a * módosító; a bal próbáljuk ki a CTRL-ALT-% billentyûkombinációt). oldalán elhelyezkedõ atom többszöri elõfordulását írja le. Bizonyosfajta szabályos kifejezéseket valószínûleg mindany- Emiatt a „piano” karakterláncra illeszkedik a p* a héjban, de nyian használtunk már. Az ls *.pl héjparancsban a *.pl egy a /p*/ szabályos kifejezés csak a p, pp, ppp-re, illetve az üres olyan szabályos kifejezés, ami a következõ karakterláncokat írja karakterláncra illeszkedik. le: tetszõleges számú tetszõleges karakter (*), utána egy pont Az atom N és M közötti számú elõfordulásának megadásához (.), végül két adott karakter (pl). a {N,M} jelet használhatjuk. A {N} olyan karakterláncokra A szabályos kifejezések elõállításának szabályai az összes elkép- illeszkedik, amelyek az atom pontosan N darab ismétlõdését zelhetõ karakterlánc leírását lehetõvé teszik, attól függetlenül, tartalmazzák. A {N,} a legalább N darab ismétlõdésre illesz- hogy azok milyen összetettek. Sajnos a valóságban a helyzet kedik. A következõ szabályos kifejezések illeszkednek: ennél bonyolultabb, ugyanis a szabályos kifejezéseknek lega- lább kétféle változata létezik: kiterjesztett és egyszerû. Ráadá- /( piano,){0,10}/ sul nem minden alkalmazás támogatja az összes szabályt. /( piano,){1,2}/ /( piano,){2}/ Bevezetés a szabályos kifejezések használatába Akkor mondjuk, hogy egy szabályos kifejezés illeszkedik egy Az elsõ szabályos kifejezés természetesen illeszkedne a „piano, karakterláncra, ha azt helyesen írja le. Egy adott szabályos kife- piano, piano” karakterláncra is. A + és a ? metakarakterek a jezés akárhány karakterláncra illeszkedhet. Az a szokás, hogy {1,} és a {0,1} rövidítései. a szabályos kifejezéseket törtjelek közé =(/.../) írjuk. A követke- Az illeszkedõ zárójeles atomok különleges változókban tárolód- zõkben a kiterjesztett szabályos kifejezésekkel fogunk dolgozni. nak, amiket a \ (per)jelet követõ szám azonosít. A szabályos A legegyszerûbb szabályos kifejezés csak betûkbõl és számok- kifejezésben elõforduló elsõ zárójeles atom a \1 változóban, ból áll, az ilyen kifejezés az olyan összes karakterláncra illesz- a második a \2 változóban tárolódik. Például a kedik, ami tartalmazza õt részkarakterláncként. Vegyük például a következõ részletet a kedvenc Rossini-operámból: „Zitto, /Z(itto), z\1, ( piano,)\2/ zitto, piano, piano, senza strepito e rumore.” A /piano/ sza- bályos kifejezés illeszkedik a szövegre, mert ugyanazokat a illeszkedik a fent megadott idézetre (\1 = "itto"* Øs \2 karaktereket ugyanabban a sorrendben tartalmazza, mint amit **= "piano,"). a szabályos kifejezésben megadtunk. A . (pont) metakarakter bármelyik karakterre illeszkedik, emiatt A jobb megértés kedvéért játszhatunk a következõ Perl-parancs- a /.(itto),.\1/ szabályos kifejezés illeszkedik a „Zitto, fájllal. Változtassuk meg néhányszor a szabályos kifejezést: zitto” és a „zitto, zitto” karakterláncra is. Ezenkívül illeszkedik még például a „Ritto, ritto” karakterláncra is, ami már nem #!/usr/bin/perl ugyanazt jelenti. Ha a túlzott általánosítást el szeretnénk $verse = "Zitto, zitto, piano, piano, senza " kerülni, a lehetséges karaktereket szögletes zárójelek között . "strepito e rumore"; megadhatjuk /[Zz](itto), [Zz]\1/. if ($verse =~ /piano/) { A kötõjel a szögletes zárójelek között karaktertartományt jelöl. print "Illeszkedik!\n"; Például a /[a-z]/ az összes kisbetûre, a /[A-Z]/ pedig az } else { összes nagybetûre illeszkedik. A /[a-zA-Z0-9_]/ minden print "Nem illeszkedik!\n"; betû, szám és aláhúzásjel karakterbõl felépülõ karakterláncra } illeszkedik. A | (csõ) metakarakter a különbözõ lehetõségek megadására A Perl nyelvben az =~ mûveleti jel két szabályos kifejezést szolgál. Mûködése hasonló a logikai VAGY mûvelethez. hasonlít össze, és ha illeszkedést talál, „igaz” értéket ad vissza. Emiatt a /Zitto|zitto/ illeszkedik a „Zitto” és a „zitto” Néhány karakter (a nevük metakarakter) nem egyszerû karak- karakterláncra is.

40 Linuxvilág Szaktekintély

A ^ és a $ (dollárjel) metakarakterek a karakterlánc elejére tése megtörtént. A Perl hasznos jelek használatát is megengedi és végére illeszkednek. A szögletes zárójelen belül a ^ jel a az ugyanazt jelentõ Posix-megfelelõ jelek mellett, ilyen például tagadás mûvelete. Emiatt a /[^a-z]itto/ illeszkedik a a már említett \d és a \w, ami megfelel a [A-Za-z0-9_] artva „Zitto” karakterláncra, de a „zitto” karakterláncra nem, mert a kifejezésnek. További tudnivalók a Perlrõl a súgóoldalon (man [^a-z] jelentése: „tetszõleges betû, ami nem kisbetû”. Ha a perlre) olvashatók. metakaraktert közönséges karakterként szeretnénk értelmez- tetni, tegyünk elé egy fordított perjelet (\). Ekkor a szabályos Egyszerû szabályos kifejezések kifejezést értelmezõ program tudni fogja, hogy ezt egyszerû Az egyszerû szabályos kifejezéseket számos más program is karakterként kell értelmeznie. használja, például a sed vagy az egrep. Az egyszerû szabályos kifejezésekben a |, a + és ? metakarak- A szabályos kifejezések használata terek nem léteznek, és a gömbölyû, illetve kapcsos zárójeleket

Értékelni fogjuk a szabályos kifejezés erejét, ha megvizsgál- védeni kell, ha metakarakterként szeretnénk használni õket. t. Minden jog fennt juk a következõ kis Perl-parancsfájlt, ami segít a rendszer- A ^, a $ és a * metakarakterekre bonyolultabb szabály vonat- gazdáknak kiszûrni a sikertelen bejelentkezési kísérleteket. kozik (további részletekért lásd: man 7 regex). A legtöbb A következõ példákban szemléletes szabályos kifejezéseket esetben azonban kiterjesztett társaikhoz hasonlóan viselked- fogok használni a különbözõ lehetõségek bemutatása céljából. nek. Gyakran a szabályos kifejezést a kiterjesztett alakban Ugyanezeket a feladatokat egyszerûbb szabályos kifejezések- kényelmes szerkeszteni, és szükség esetén adni hozzá a

kel is megvalósíthatjuk. védõkaraktereket. © Kiskapu Kf Ha valakinek sikertelen a bejelentkezési kísérlete, a syslogd A 2. listában (48. CD Magazin/Szabalyos könyvtár) bemutatott az alábbihoz hasonló üzenetet ír a /var/log/messaged naplóál- példa böngészõprogramban megtekinthetõ, html formátumú lományba: oldalt hoz létre a rendszernapló állományából. A HTML- elemek kiírása mellett, amelyek az oldal fejlécét és a táblázatot Jul 26 16:35:25 myhost su(pam_unix)[2549]: hozzák létre, kilistázzuk egy adott könyvtár összes állományát, authentication failure; logname=verdi uid=500 és az eredményt a sed programba vezetjük, ami azt szabályos euid=0 tty= ruser=organtin rhost= user=root kifejezések segítségével átalakítja. A sed által is használt Jul 27 14:54:36 myhost login(pam_unix)[688]: szöveghelyettesítés eléggé elterjedt: authentication failure; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost= user=mozart s/kifejezØs/csere/

A bejegyzésbõl kiolvasható a bejelentkezési kísérlet idõpontja, Ebben a kifejezés szabályos kifejezés, amit le kell cserélni. a felhasználó neve, aki egy másik felhasználó nevében be akart A megadott szabályos kifejezés egy kilenc elembõl álló karak- lépni – amennyiben ez az adat rendelkezésre áll –, és a célfel- terláncot ír le. Például a [rwxds-] az elsõ elem lehetséges használó. Például a verdi felhasználó kétszer be akart lépni a karaktereit adja meg. A karakterlánc ez utáni része betûket és rendszergazdaként, míg valaki mozart felhasználónévvel számjegyeket tartalmaz, amiket perjelek tagolnak. Vegyük szeretett volna belépni a konzolról. észre, hogy ebben az esetben a (.*\/)(.*) szabályos kife- Vessünk egy pillantást az 1. listán (48. CD Magazin/Szabalyos jezést használtuk. Az elsõ csoport illeszkedik a perjelet mege- könyvtár) bemutatott Perl-parancsfájlra: az a feladata, hogy lõzõ összes karakterre, vagyis az elérési útra. A második cso- beolvassa a /var/log/messages állományt, azonosítsa az érde- port illeszkedik a többi karakterre (azaz a fájlnévre). Az elérési kesnek tûnõ sorokat, és csak a lényeges adatokat gyûjtse ki. útban tetszõleges számú perjel lehet. A szabályos kifejezések Elõször is egyedül azokat a lényegi sorokat választjuk ki, ame- (az egyszerûek és a kiterjesztettek is) mohók, azaz a lehetõ lyek illeszkednek az /authentication failure/ szabályos legtöbb karakterre próbálnak illeszkedni. kifejezésre (7. sor), minden egyebet eldobunk. Ezután minden A parancsfájl eredménye a szabályos kimenetre íródik, amit sort egy olyan szabályos kifejezéssel kezelünk (8. sor), ami a egy adott állományba átirányíthatunk (például a cron-ból következõ karakterláncra illeszkedik: a karakterlánc eleje (^) meghatározott idõközönként), hogy megjelenjen a Weben. pontosan három ({3}) betûbõl áll ([a-zA-Z]), ezt egy szóköz követi, majd legfeljebb két (+) karakter kerül sorra, amit szá- Összegzés mok (0–9, amit a Perlben a \d metakarakterrel is jelölhetnénk) A szabályos kifejezések messze a leghatékonyabb eszközök vagy egy szóköz követ. A szóköz után tetszõleges számú (*) a szövegfeldolgozási és szövegleírási feladatokra, és Linux-kör- számjegy és pontosvesszõ lehet. A karakterlánc eddig leírt nyezetben számos alkalmazás támogatja õket. Sajnos a legnép- része zárójelben van, tehát a \1 változóba kerül. Ezután tetszõ- szerûbb keresõmotorok (tudtommal) egyáltalán nem támo- leges számú karakter (.*) következhet a "logname=" karak- gatják a szabályos kifejezéseket, éppen a bonyolultságuk miatt. terlánc elõtt. Ezt a karakterláncot tetszõleges számú betû vagy Képzeljük csak el, milyen pontos lehetne a keresésünk, ha a számjegy követheti. A zárójelpár következtében ez a \2 válto- keresett weboldalt szabályos kifejezéssel írnánk le! zóban tárolódik. Végül tetszõleges számú karakter lehet a "user=" karakterlánc elõtt, amit tetszõleges számú betû és Linux Journal 2003. május, 109. szám számjegy követhet. Ez az egész a \3 változóba kerül. Ebbõl a példából megtanulhatjuk, hogyan lehet részkarakter- láncokat kivenni a karakterláncokból. Nem kell ismernünk a Giovanni Organtini ([email protected]) részkarakterláncok viszonylagos helyzetét, ha le tudjuk írni A római egyetemen tartja a „Bevezetés a a kinézetüket. számítástechnikába és a programozásba fizikusok A Perl hasznos szolgáltatása, hogy a szabályos kifejezések számára” címû óráit. Évek óta használ Linuxot, változóiból önmûködõen Perl-változókat hoz létre, amik a $1, szórakozáshoz és munkához egyaránt. $2 stb. neveken érhetõk el, miután a szabályos kifejezés illesz-

www.linuxvilag.hu 2003. június 41 Szaktekintély

artva A linuxos USB alrendszer (1. rész)

Az USB bemeneti alrendszer egyre inkább terjed a magváltozatokkal. Épp itt az ideje megérteni, hogy pontosan mi is a dolga eszközeinkkel.

linuxos USB alrendszer egyszerû, jól összehangolt az összes bemeneti eszközre kiterjesztették. Cikkünk ezen az t. Minden jog fennt A módszer minden bemeneti eszköz kezelésére. A Linux- összetett rendszeren alapul, ami a 2.6-os rendszermagokban a ban ez egy viszonylag új megközelítés, ami részben bemeneti alrendszer programozói felülete lesz. Annak ellenére, megtalálható a rendszermag 2.4-es változataiban, és teljes egé- hogy cikkünk írásakor a jelenlegi 2.4-es és 2.5-ös rendszerma- szében beépítették a rendszermag 2.5-ös fejlesztõi változataiba. gok programozói felületei valamelyest eltérnek, folyamatos Ez a cikk négy alapterületet hivatott megismertetni: leírja, mit munka folyik, hogy ezek a különbségek megszûnjenek, amit tesz pontosan a bemeneti alrendszer, bemutatja az alrendszer többnyire a 2.4-es rendszermag frissítésével érnek el.

© Kiskapu Kf rövid történeti áttekintését, elmondja, hogyan épül fel a beme- neti alrendszer a rendszermagban, valamint bemutatja a fel- Pillantás a kulisszák mögé, használói szintû API-t, vagyis az alkalmazásprogramozói felü- avagy a rendszermag mûködésének vizsgálata letet, és azt, hogy miként tudod ezt felhasználni programjaid- A bemeneti alrendszer három eleme: a bemeneti mag, az esz- ban. Az elsõ három témakörre még ebben a cikkben kitérünk, közmeghajtók és az eseménykezelõk. A köztük lévõ kapcsolat a felhasználói szintû API-t és a befejezõ témakört a következõ az ábrán látható. Amellett, hogy alapesetben az út az alacsony rész tárgyalja. szintû eszközöktõl az eszközmeghajtóig, az eszközmeghajtótól a bemeneti magig, a bemeneti magtól a kezelõig, a kezelõtõl Mi az a bemeneti alrendszer? a felhasználói területre vezet, általában létezik valamilyen A bemeneti alrendszer a Linux-rendszermagnak az a része, visszaút is. Ez a visszaút teszi lehetõvé például a billentyûzet ami a különbözõ bemeneti eszközöket kezeli (például a lámpáinak vezérlését és az erõ-visszacsatolású (force-feedback) billentyûzetet, az egeret, a botkormányt, a digitáblát és Meghajtók sok más egyéb eszközt), ezek Vezérlõk segítségével lép kapcsolatba Billentyûzet- Billentyûzet- a felhasználó a rendszermag- USB gal, a parancssorral és a grafi- kezelõ kezelõ kus felülettel. Ezek az alrend- szerek a rendszermagban Bemeneti mag Felhasználói rész találhatók, mivel elérésükhöz Egér- P/S2 (/dev/input/mouseX) kezelõ valamilyen különleges alkat- (/dev/input/mice) részcsatolót kell alkalmazni (mint például a soros kaput, a PS/2-es kaput, az Apple Botkormány- Felhasználói rész Desktop Bust és az Universal kezelõ (/dev/input/jsX) Serial Bust, vagyis az USB-t), amik nem érhetõk el közvet- Esemény- Felhasználói rész lenül, és a rendszermag Soros kezeli õket. Ezt követõen a kezelõ (/dev/input/eventX) rendszermag egy általánosan összefüggõ, az adott eszköz- nek megfelelõ felületen Kapcsolat a beviteli alrendszer részei között keresztül teszi elérhetõvé a kezelést a felhasználói programok számára, különbözõ progra- botkormányok mozgásának szabályozását. Mindkét irány mozói felületeken keresztül. ugyanazt az eseménymeghatározást alkalmazza, csak külön- bözõ típusú azonosítókkal. Hogyan jutottunk el eddig? A különbözõ részek együttmûködését események vezérlik, amik A Linux bemeneti alrendszer elsõsorban Vojtech Pavlik mun- szerkezetekként (structure) vannak meghatározva (1. lista). Az kája, aki elõször a botkormányok támogatásának elõkészíté- elsõ mezõ, a time egy egyszerû idõbélyeg, az ezt követõ mezõk sekor érezte egy rugalmas bemeneti rendszer szükségességét, már valamivel érdekesebbek. A type, vagyis típus mezõ az majd késõbb is, amikor az USB-n kezdett el dolgozni. Az elsõ esemény általános típusát jelöli, például, hogy az egéren sokrétû bemeneti alrendszer a már meglévõ botkormány- és nyomtunk-e le egy gombot vagy a billentyûzeten; de vonat- USB-meghajtókat támogatta a 2.3-as rendszermagok idején, kozhat a mozgásra is, mondjuk a botkormány esetében. A code ezt továbbvitték a 2.4-be, ahol ez a támogatás továbbra is a mezõ mondja meg, hogy melyik gombot nyomták le pontosan, botkormányokra és az USB-re korlátozódik. vagy azt, hogy az elmozdulás melyik tengely mentén történik; A 2.5-ös rendszermagban található bemeneti alrendszert már míg a value, vagyis érték mezõ azt jelzi, hogy milyen a lenyo-

42 Linuxvilág Szaktekintély

1. lista Az event-dev-struct.txt artva struct input_dev { int abs[ABS_MAX + 1]; int rep[REP_MAX + 1]; void *private; unsigned long key[NBITS(KEY_MAX)]; char *name; unsigned long led[NBITS(LED_MAX)]; char *phys; unsigned long snd[NBITS(SND_MAX)]; char *uniq; struct input_id id; int absmax[ABS_MAX + 1];

int absmin[ABS_MAX + 1]; t. Minden jog fennt unsigned long evbit[NBITS(EV_MAX)]; int absfuzz[ABS_MAX + 1]; unsigned long keybit[NBITS(KEY_MAX)]; int absflat[ABS_MAX + 1]; unsigned long relbit[NBITS(REL_MAX)]; unsigned long absbit[NBITS(ABS_MAX)]; int (*open)(struct input_dev *dev); unsigned long mscbit[NBITS(MSC_MAX)]; void (*close)(struct input_dev *dev);

unsigned long ledbit[NBITS(LED_MAX)]; int (*accept)(struct input_dev *dev, © Kiskapu Kf unsigned long sndbit[NBITS(SND_MAX)]; struct file *file); unsigned long ffbit[NBITS(FF_MAX)]; int (*flush)(struct input_dev *dev, int ff_effects_max; struct file *file); int (*event)(struct input_dev *dev, unsigned int keycodemax; unsigned int type, unsigned int keycodesize; unsigned int code, void *keycode; int value); int (*upload_effect)(struct input_dev unsigned int repeat_key; *dev, struct ff_effect *effect); struct timer_list timer; int (*erase_effect)(struct input_dev *dev, int effect_id); struct pm_dev *pm_dev; int state; struct list_head h_list; struct list_head node; int sync; }; mott egérgomb vagy billentyû állapota, vagy azt, hogy milyen csatlakozóbõvítmény (plugin) szerkezetét használja, az elmozdulásról van szó. Ha például a típus egérgomb vagy bil- input_register_device() függvénnyel vesz fel új lentyû, a kód megmondja, hogy melyik egérgomb vagy billen- eszközöket, míg az input_unregister_device() függ- tyû az pontosan; az érték mezõ pedig elárulja, hogy a gombot vénnyel távolít el meglévõ eszközöket. Ezeket a függvényeket éppen felengedték-e vagy pont lenyomták. Ehhez hasonlóan, az input_dev kapcsolóval kell meghívni, ezt az elsõ listában ha a típus valamilyen viszonylagos tengelyt jelöl, a kód elárulja, láthatjuk. Annak ellenére, hogy ez a szerkezet meglehetõsen hogy pontosan melyik tengelyrõl van szó, az érték mezõ pedig hosszúnak tûnik, a legtöbb bejegyzés arra szolgál, hogy az az elmozdulás nagyságát és irányát tartalmazza. Ha az egeret eszközmeghajtó beállíthassa, hogy az adott eszköz milyen átlósan mozgatod, miközben ezzel egyidejûleg az egér görgõjét lehetõségekkel bír, vagyis azt, hogy milyen típusú események (scrolling-wheel) is mozgatod valamelyik ujjaddal, akkor min- és kódok fogadására vagy küldésére képes. den frissítéskor három viszonylagos eseményt kapsz vissza: Azon túl, hogy a bemeneti mag kezeli az eszközmeghajtókat és egyet a függõleges mozgásból (y tengely), egyet a vízszintes a kezelõket, egy /proc fájlrendszer felületet is létrehoz, amin mozgásból (x tengely) és egyet a görgõ mozgásából adódóan. keresztül látható, hogy éppen milyen eszközmeghajtók és keze- Az eseménykezelõk szolgáltatnak felületet a felhasználói réteg- lõk mûködnek. Alább egy jellemzõ példa látható a /proc/bus/ hez, olyan módon, hogy a szabványos eseményformátumokat input/devices fájlból, ami egy USB-s egér mûködését mutatja: úgy alakítják át, hogy azt a különbözõ programozói felületek megértsék. Általában ezek a kezelõk gondoskodnak a külön- I: Bus=0003 Vendor=046d Product=c002 bözõ eszközcsomópontok (a /dev bejegyzések) kezelésérõl is. Version=0120 A legáltalánosabb kezelõ a billentyûzet kezelõje, ez az a szabvá- N: Name="Logitech USB-PS/2 Mouse M-BA47" nyos bemenet, amivel a programozók (különösen a C-progra- P: Phys=usb-00:01.2-2.2/input0 mozók) a leginkább tisztában vannak. H: Handlers=mouse0 event2 Az eszközmeghajtók általában az alacsony szintû alkatrészek- B: EV=7 kel tartják a kapcsolatot, mint például az USB-vel, a PCI-jal, a B: KEY=f0000 0 0 0 0 0 0 0 0 memóriával, a különbözõ ki- és bemeneti (I/O) területekkel és B: REL=103 a soros kapu ki- és bemeneti területeivel. Ezek alakítják át a részegység által küldött felhasználói bemenetet az általános Az I: sor tartalmazza az azonosító adatokat – a 3-as busztípus üzenet formájába, még mielõtt elküldik azt a bemeneti (ami az USB) és a gyártó, a termék és a változat adatait az egér magnak. A bemeneti mag a rendszermag szabványos USB-leíróiból. Az N: sor a nevet mutatja, amit úgyszintén az

www.linuxvilag.hu 2003. június 43 Szaktekintély

USB eszközleírói tartalmaznak. A P: sor a fizikai eszköz adatait tartalmazza, ez esetünkben az USB-vezérlõ PCI címébõl, az 2. lista A register.c USB-fából és a bemeneti eszközfájlból áll. Az input0 azt jelöli, artva hogy ez az elsõ logikai bemeneti eszköz az adott fizikai beme- #include neti eszközhöz. Néhány eszköz, mint például a multimédiás #include billentyûzetek, a fizikai eszköz egyes részeit rendelhetik az #include egyik logikai bemeneti eszközhöz, míg a fizikai eszköz más részeit egy másik bemeneti eszközhöz rendelhetik. A H: sor az MODULE_LICENSE("GPL"); eszközhöz rendelt kezelõt tartalmazza, erre késõbb még kité- rünk. Az egyes B: sorok a különbözõ bitmezõket takarják, struct input_dev ex1_dev; amelyek az eszköz képességeit írják le – ebben az esetben az

t. Minden jog fennt egyes egérgombokhoz tartozó billentyûket, a viszonylagos static int __init ex1_init(void) tengelyeket a golyóhoz és a görgõhöz. { A /proc felület nagyon jól használható egyszerû eszközmeghaj- /* k l n sen vatos indulÆs */ tók kipróbálására. Vegyük például azt az esetet, amelyben az memset(&ex1_dev, 0, sizeof(struct eszközmeghajtó befûzéskor bejegyzi magát, illetve amikor az input_dev)); eszközt eltávolítjuk, az eszközmeghajtó is eltávolítja a hoz- init_input_dev(&ex1_dev);

© Kiskapu Kf zátartozó bejegyzést (2. lista). Ehhez néhány bevezetõ mûvelet elvégzésére van szükség az init_input_dev() függvénnyel. /* le r c mkØk beÆll tÆsa */ A függvény beállítja az eszköz nevét, a fizikai és azonosító ex1_dev.name = "Example 1 device"; leíróit, és beállítja a bittömböket, hogy jelezze: az eszköz képes /* fut rendszeren a phys egyedi*/ bizonyos típusú események fogadására (az EV_KEY jelzi az ex1_dev.phys = "A/Fake/Path"; egérgombokat és a billentyûket, két különbözõ kód a KEY_A ex1_dev.id.bustype = BUS_HOST; és KEY_B jelzi a gombok címkéit). Az elõkészítõ eljárás ezt ex1_dev.id.vendor = 0x0001; követõen bejegyzi az eszközt a bemeneti magba. Ha ezt a kódot ex1_dev.id.product = 0x0001; hozzáadod a rendszermaghoz (a modprobe paranccsal), látni ex1_dev.id.version = 0x0100; fogod, hogy egy új eszköz jelenik meg a /proc/bus/input/devices fájlban, mint az az alábbiakban is látható: /* ez az eszk z kØt kulccsal rendelkezik (A Øs B) */ I: Bus=0019 Vendor=0001 Product=0001 set_bit(EV_KEY, ex1_dev.evbit); Version=0100 set_bit(KEY_B, ex1_dev.keybit); N: Name="Example 1 device" set_bit(KEY_A, ex1_dev.keybit); P: Phys=A/Fake/Path H: Handlers=kbd event3 /* vØg l pedig bejegyezz k a bemeneti magba */ B: EV=3 input_register_device(&ex1_dev); B: KEY=10000 40000000 return 0; Ha valóban üzenetet szeretnénk küldeni az eszközmeghajtónktól } a bemeneti magnak, elõtte meg kell hívnunk az input_event-et vagy valamelyik kényelmes közvetítõt, például az input_ static void __exit ex1_exit(void) report_key-t vagy az input_report_abs-t, amiket a linux/ { input.h-ban találunk meg. A 3. listában egy olyan kódot láthatunk, input_unregister_device(&ex1_dev); ami erre mutat példát. Ez a példa nagyjából ugyanazt mutatja, } mint az elõzõ, azzal a különbséggel, hogy itt egy idõzítõt adunk hozzá, ami az ex2_timeout() függvényt hívja meg. Ez az új module_init(ex1_init); programrész négy KEY_A és négy KEY_B lenyomását továbbítja. module_exit(ex1_exit); A mûvelet hatására összes 16 esemény jön létre, mivel külön események keletkeznek a billentyûk lenyomásakor és elengedé- sekor is. Ezek az események továbbítódnak a bemeneti maghoz, Vessünk egy pillantást az utolsó eszközmeghajtó példánkra, azt követõen a billentyûzetkezelõhöz, ami az „aaaabbbb” vagy az ezúttal az után vizsgálódva, hogyan jönnek létre a viszonylagos „AAAABBBB” betûsorok megjelenését eredményezni a kezelõ- adatok (4. lista). A példában egy olyan eszközmeghajtó látható, felületen vagy a parancssorban, a SHIFT billentyû állapotától füg- ami az egeret utánozza. A kezdeti beállítás szerint az eszköznek gõen. Az idõzítõ úgy állítódik be, hogy négy másodpercenként két viszonylagos tengelye van (REL_X és REL_Y) és egyetlen újra meghívódjon, egészen a végtelenségig. A négy másodperces gombja (BTN_LEFT). Csakúgy, mint az elõzõ példánkban, itt is várakozási idõ azért lett beiktatva, hogy – ha eleged van a meg- egy idõzítõt használunk, hogy meghívja az ex3_timeout() jelenõ karakterekbõl – el tudd távolítani a bõvítményt. Ha csök- függvényt. Ez az idõzítõ ezt követõen az input_report_rel-t kented a várakozási idõt, gyõzõdj meg róla, hogy más módon is hívja meg, hogy biztosítsa a viszonylagos mozgást (ötegységnyi hozzá tudsz-e férni a rendszerhez, esetleg egy másik SSH-kap- lépésekkel – a viszonylagos elmozdulás a függvény harmadik csolaton keresztül. Ne felejtsd el meghívni az input_sync függ- értéke), ami harminc jobbra lépésbõl és harminc lefelé lépésbõl, vényt sem! Ez a függvény értesíti az eseménykezelõt (esetünkben valamint harminc balra lépésbõl és harminc felfelé lépésbõl áll, a billentyûzetkezelõt), hogy az eszköz valamilyen belsõleg elõidézve az egérmutató négyzetalakban történõ mozgását. összefüggõ adathalmazt küldött. A kezelõ úgy is dönthet, hogy Hogy a mozgás érzését keltsük, az idõtúllépést 20 milliszekun- az eseményeket az input_sync meghívásáig tárolja. dumra állítjuk. Jegyezzük meg, hogy az input_sync-et

44 Linuxvilág Szaktekintély

Ez biztosítja, hogy az egér átlósan mozogjon, ne pedig 3. lista Az aaaabbbb.c oldalra, majd fel. artva struct input_dev ex2_dev; Kezelõk: a felhasználói szint Ez elõzõ szakaszban láthattuk, hogy az eszközmeghajtók az void ex2_timeout(unsigned long alkatrészek és a bemeneti mag között helyezkednek el. A rész- unused/*UNUSED*/) egység felõl érkezõ eseményeket – ez többnyire a megszakí- { tásokat jelenti – bemeneti eseményekké alakítja át. A bemeneti int x; események felhasználásához kezelõket használunk, amelyek a felhasználói szintû kapcsolódó felületet alkotják. for (x=0;x<4;x++) { A bemeneti alrendszer tartalmazza mindazokat a kezelõket,

/* a vagy A betß */ amikre szükséged lehet: billentyûzetkezelõt a parancssor t. Minden jog fennt input_report_key(&ex2_dev, KEY_A, 1); kezeléséhez, egérkezelõt az X Window System alatt futó input_sync(&ex2_dev); alkalmazásokhoz, botkormánykezelõt a játékokhoz, valamint input_report_key(&ex2_dev, KEY_A, 0); egy érintõképernyõ-kezelõt is. Létezik egy általános célú kezelõ input_sync(&ex2_dev); is, az eseménykezelõ, ami alapvetõen a felhasználói területen } futó programoknak a bemeneti eseményeit biztosítja. Ez azt

for (x=0;x<4;x++) { jelenti, hogy szinte soha nincsen szükség rendszermagi kezelõ © Kiskapu Kf /* b vagy B betß */ írására, mivel ugyanezt a célt szolgálja az eseménykezelõ és a input_report_key(&ex2_dev, KEY_B, 1); hozzá tartozó felhasználói szintû kódok. Ezt a programozói input_sync(&ex2_dev); felületet cikkünk második részében tárgyaljuk. input_report_key(&ex2_dev, KEY_B, 0); input_sync(&ex2_dev); Köszönetnyilvánítás } Szeretném megköszönni Greg Kroah-Hartman és Vojtech Pavlik segítségét, amit a cikk elsõ részének a megírásához nyújtottak. /* idız tı beÆll tÆsa nØgy mÆsodpercre */ mod_timer(&ex2_dev.timer,jiffies+4*HZ ); A listák a 48. CD Magazin/USB könyvtárában találhatóak. } Linux Journal 2003. február, 107. szám static int __init ex2_init(void) { Brad Hards ([email protected]) ... elıkØsz tØs ... A Sigma Bravo technikai igazgatója egy szakértõi szolgáltatásokat nyújtó kis cégnél, Canberrában. /* ismØtlıdı idız tı beÆll tÆsa */ A Linux mellett repülõgéprendszerek összeillesz- init_timer(&ex2_dev.timer); tésével és minõsítésével is foglalkoznak, csakúgy, ex2_dev.timer.function = ex2_timeout; mint GPS-szel és elektronikai hadieszközökkel. ex2_dev.timer.expires = jiffies + HZ;  add_timer(&ex2_dev.timer);

return 0; KAPCSOLÓDÓ CÍMEK } A Linux bemeneti alrendszer elsõsorban a 2.5-ös static void __exit ex2_exit(void) BitKeeper rendszermagban található meg. { A BitKeeper sokoldalú rendszer, de ha csak a del_timer_sync(&ex2_dev.timer); rendszermagot szeretnéd böngészni, a input_unregister_device(&ex2_dev);  http://linus.bkbits.net:8080/linux-2.5 cím hasznos } kiindulópontul szolgálhat. Létezik egy kísérleti fejlesztési fa kizárólag a bemeneti alrendszerhez, amit a  http://linux-input.bkbits. mindig meg kell hívni, így biztosítva, hogy a bemeneti kezelõk folyton összefüggõ eseményeket kapjanak. Ez a követelmény az net:8080/linux-input címen érhetsz el. elõzõ példánkban nem volt feltétlenül szükséges, de különösen Korábban a bemeneti alrendszert a fontos, ha olyan adatokat akarunk átadni a bemeneti magnak,  http://linuxconsole.sourceforge.net címen lehetett mint például a viszonylagos mozgás, mert esetenként több ten- elérni, de a rendszermaggal együtt átköltözött a gelyre is szükség lehet a mozgás meghatározásához. Ha átlósan BitKeeper alá. Bár az oldal nem tartalmaz túl sok leírást, mozgatnád az egeret, ehhez hasonlót kellene megadnod: található ott néhány hasznos folt a felhasználói szintû alkalmazásokhoz a CVS-fában. ... input_report_rel(..., REL_X, ...); Az AAAABBBB bõvítmény egyik eredeti változata a  input_report_rel(..., REL_Y, ...); http://www.wired.com/wired/5.08/linux_pr.html címen input_sync(...); található meg. ...

www.linuxvilag.hu 2003. június 45 Szaktekintély

artva A Red Hat Linux Kickstart program átalakítása Hogyan hozzuk létre az igényeinknek megfelelõ programokat tartalmazó CD-lemezt a gyors és könnyûszerrel elvégezhetõ telepítés számára?

t. Minden jog fennt Linux-rendszer telepítése viszonylag könnyû feladat. revlemezrész méretét jól kell meghatározni, körülbelül 3 GB Nemrég azonban az egymás után több gépre való tele- legyen. A merevlemezrész tényleges elhelyezése teljesen az pítés feladata várt rám, ami idõigényes tevékenység egyéni ötletekre van bízva. A mostani példánkban a helye ésAmagában hordozza a tévedések lehetõségét is. Ez a nehézség nem más, mint /RH80 . Ezen a könyvtáron belül minden egyes sújtotta a cégünket teljes egészében, sõt még azokat a cégeket is, CD-lemez számára egy alkönyvtárat készítünk: amelyek a vállalkozásunkkal valamilyen függõségi kapcsolatban

© Kiskapu Kf álltak. Emiatt kezdtem el használni a Red Hat Linux-változat mkdir -p /RH80/CD{1,2,3} Kickstart elnevezésû programját, vagyis hogy leegyszerûsítsem a telepítési folyamatot. Ez már önmagában is sokat segített, de Most nem foglalkozunk a forrásprogramcsomagokkal, ezért még bõven volt mit finomítani. Amit tulajdonképpen szerettem a CD4 és CD5 lemezeket nyugodt szívvel kihagyhatjuk. Szük- volna, az nem más, mint egy önmûködõ telepítõcsomag, ami ségünk lesz viszont a fentieken kívül egy további könyvtárra, elfér egyetlen CD-lemezen: meghatározott részekre osztja fel a amit az alábbi paranccsal hozzunk létre: merevlemezt, és képes valamennyi frissített csomagot befogadni. Szerettem volna, ha el tudom indítani a telepítést, aztán ma- mkdir /RH80/ONE_CD gára hagyhatom a gépet, és csak akkor térek vissza hozzá, amikor már a telepítés befejezõdött. Ennek a célnak az elérése ide kerülnek a késõbbiekben a kiválogatott programok. Ekkor érdekében a Kickstartot kiegészítettem a Red Hat telepítõprog- az egyes CD-lemezek tartalmát a megfelelõ névvel ellátott ramjának testre szabott változatával, az Anacondával. könyvtárba másoljuk. Csatlakoztassuk a rendszerhez az elsõ Annak ellenére, hogy ez a program nem élvez hivatalos támo- CD-lemezt, utána pedig adjuk ki a következõ parancsot: gatást, a Red Hat több fejlesztõeszközt és leírást tett számomra hozzáférhetõvé, hogy segítségemre legyen a telepítés testre- cp -a /mnt/cdrom/* /RH80/CD1/ szabásában. Ezek közül fogok bemutatni néhány módszert az alábbiakban, amelyek biztosítják az olvasó számára a kezdés- Ismételjük meg ezt a lépést a második (CD2), illetve a harma- hez szükséges információkat. dik (CD3) lemez vonatkozásában. Most pedig másoljuk a E cikkünkben az alábbi témákat fogjuk megtárgyalni: a telepí- CD-lemezeket jelzõ könyvtárak tartalmát a ONE_CD könyv- tett csomagok frissítése; a rendszertelepítés méretének csök- tárba. Sokkal helyesebb azonban, ha csak közvetlen hivatkozást kentése, hogy minden elférjen egyetlen CD-lemezen, és fel- (hard link) hozunk létre, semmint hogy ténylegesen átmásol- használóiüzenet-képernyõ létrehozása. juk az állományokat. Ilyen módon helyet takaríthatunk meg, Általában véve az olvasónak tisztában kell lennie a Linux-tele- ráadásul gyorsabban el lehet végezni ezt a mûveletet. pítés elveivel. Továbbá azt is feltételezem, hogy semmiféle különleges vasat nem használunk a telepítés során, hiszen az cd /RH80 további egyedi beállításokat igényelne. cp -al CD1/* ONE_CD/ cp -al CD{2,3}/RedHat/RPMS/* ONE_CD/RedHat/RPMS/ A mintagép (build machine) telepítése Az elsõ lépés magának a mintagépnek az elkészítése. Minthogy A képernyõn megjelenik egy kérdés, hogy a TRANS.TBL a telepítõeszközök egy adott változatra jellemzõk, mind a min- állomány felülírható-e. Nemmel is válaszolhatunk. tagépen, mind a célgép(ek)en ugyanannak a Red Hat Linux- változatnak kell mûködnie. Mostani példánkban a 8.0 változat- A csomagok kiválasztása számmal ellátott Red Hat Linux-változatot fogjuk használni. A ONE_CD könyvtár tartalmát addig nyirbáljuk, amíg fel nem A korábbi Red Hat változatok és a 8.0-s rendszer között eltéré- fér egyetlen CD-lemezre – a korong kapacitását 700 MB-osnak sek állnak fenn, ezeket tehát át kell vizsgálnod, ha valamelyik feltételezem. Nem fogom részletekbe menõen elmagyarázni, korábbi változatot használod. hogyan kell ezt a feladatot elvégezni, minthogy a Linux-ter- A kívánt Linux-változatnak a mintagépre való telepítése után jesztésbõl eltávolítandó állományok listája telepítésrõl telepí- az Anaconda programcsomagjait kell telepíteni. Ezek az elõze- tésre változik. Hadd álljon itt mégis néhány tipp, hogyan lehet tes beállításoknak megfelelõen nem lesznek telepítve, ezért egy terjesztés méretét csökkenteni: kézi kiválasztás útján kell õket felhasználni. A szóban forgó • A telepítendõ rendszerbe nem fogadjuk be a programok csomagok a hivatalos Red Hat Linux-változat második lemezén forráskódját tartalmazó RPM-eket. találhatók meg, és az anaconda, anaconda-runtime • Távolítsuk el a dosutils könyvtárat, minthogy ezek önmû- valamint az anaconda-help nevet viselik – ennek az utóbbi ködõ telepítések lesznek. csomagnak a telepítése nem kötelezõ. • A szükségtelen csomagok eltávolítása. Ez meglehetõsen A következõ lépés annak a könyvtárszerkezetnek a létrehozása, bonyolult feladat lehet, mivel biztosnak kell lennünk abban, ahová majd a telepítendõ állományok fognak kerülni. A me- hogy a függõségek továbbra is érintetlenek maradtak.

46 Linuxvilág Szaktekintély

Fel kell jegyezni, hogy milyen állományokat távolítottunk el, hátha egyre-másra vissza kell lépni a korábbi változathoz. 1. lista Kivonat a Kickstart-állományból De akkor is szükséged lesz erre a listára, ha a késõbbiekben artva a comps.xml állomány tartalmát kell szerkesztened. . A csomagok kiválasztásához a base és core csoportok összes . csomagját a függõségeikkel együtt naplóállományba írtam, . a comps.xml állományban leírtaknak megfelelõen. Ennek az # a lemezrıl mindegyik lemezrØsz let rlØse adatnak a beszerzéséhez a getGroupPkgs.py héjprogramot clearpart --all --initlabel használtam. # lemezfelosztÆsi informÆci cd /RH80/ONE_CD/RedHat/base %include /tmp/partinfo

getGroupPkgs.py comps.xml > /RH80/pkglist . t. Minden jog fennt . További csomagnevek fûzhetõk hozzá az állomány végéhez. . Amint elkészült az syncRpms.py héjprogram által készített %packages --resolvedeps listám, eltávolítottam a listán nem szereplõ csomagokat. @Core A program paramétere a csomagokat tartalmazó könyvtár; @Base

a csomagok neveit tartalmazó listát a getGroupPkgs.py © Kiskapu Kf program hozza létre. Ez a héjprogram eltávolítja a listában nem %pre szereplõ csomagokat, és kiírja a csomagok neveit. Ezt a kime- #!/bin/sh netet egy állományba irányítjuk át, úgy, hogy a mûveletrõl naplót kaphassunk. # # a lemezek felsorolÆsa a jellemzıkkel egy tt cd /RH80 # syncRpms.py ONE_CD/RedHat/RPMS/ pkglist set $(list-harddrives) > pkgs_rem let numd=$#/2

A du parancs használata révén figyelemmel kísérhetjük a # egyelıre annyit tudunk, mit kell telepítendõ rendszer méretét. A -h lehetõség földi halandók # elhelyezn nk kettınØl nem t bb meghajt n számára is érthetõ formában jeleníti meg az eredményt, a -s d1=$1 lehetõség viszont a teljes könyvtárfáról ad összegzést. d2=$3 du -hs /RH80/ONE_CD if [ $numd == "2" ] ; then

A hdlist állományok tényleges mérete újbóli létrehozásuk után echo " part /boot --fstype ext3 --size 75 csökken (lásd alább), mivel sok csomagot eltávolítottunk – ez --ondisk $d1 viszont a CD méretét csökkenti. part / --fstype ext3 --size 1 --grow A csomageltávolítás kényes része az, hogy megbonthatja a --ondisk $d1 part swap --recommended csomagfüggõségek rendszerét. Annak ellenére, hogy a --ondisk $d1 getGroupPkgs.py a comps.xml állomány alapján feloldotta part /home --fstype ext3 --size 1 a függõségeket, nincs rá garancia, hogy az valóban helytálló. -grow --ondisk $d2 Ugyanakkor további csomagok beillesztése is megbonthatja " > /tmp/partinfo a függõségeket. A függõségek helyességének ellenõrzésének egyik megbízható módja ideiglenes RPM-adatbázis létrehozása, else majd az ez alapján kiválasztott csomagok próbatelepítésének végrehajtása. echo " part /boot --fstype ext3 --size 75 cd /RH80/ONE_CD/RedHat/RPMS part swap --recommended mkdir /tmp/testdb part / --fstype ext3 --size 2048 --grow rpm --initdb --dbpath /tmp/testdb part /home --fstype ext3 --size 1024 rpm --test --dbpath /tmp/testdb -Uvh *.rpm " > /tmp/partinfo

Keressük meg a kielégítetlen függõségeket jelzõ hibaüzenete- fi ket. Ha ilyenek bukkannának fel, oldjuk fel a függõségi hibát csomagok hozzáadásával vagy akár azoknak az állományoknak az eltávolításával, amelyek a függõségi eltéréshez vezettek, Távolítsuk el a régi állományokat a telepítési könyvtárból, a fris- s utána ismételjük meg a fenti próbatelepítést. sített állományokat pedig kapcsoljuk (link) a telepítési könyvtár- Ha a függõségi gondokat sikerült ilyen módon megoldani, hoz. Végezzük el ezt a mûveletet minden egyes olyan frissített máris hozzáláthatunk a rendszerünk frissítéséhez szükséges csomagra vonatkozóan, amelyben a regi_rpm_allomany az elõzõ csomagok letöltéséhez. Helyezzük õket el egy önálló Linux-változathoz tartozó csomagot jelöli: könyvtárba: cd /RH80/ONE_CD/RedHat/RPMS/ mkdir -p /RH80/updates/RPMS/ rm regi_rpm_allomany.rpm

www.linuxvilag.hu 2003. június 47 Szaktekintély

# ... az sszes rØgi rpm eltÆvol tÆsa cd /RH80/ONE_CD/images cd /RH80/updates/RPMS/ mount -o loop -t msdos boot.img /mnt/boot cp -l uj_rpm_allomany.rpm artva /RH80/ONE_CD/RedHat/RPMS/ Ha bekukkantunk a /mnt/boot könyvtárba, ott hat üzenetállo- # ... minden egyes .rpm-csomagra vonatkoz an mányt fogunk találni: boot.msg, option.msg, general.msg, elvØgezni param.msg, rescue.msg, snake.msg. Létrehozzuk a saját üzenet- állományunkat, és a custom tetszõlegesen választott nevet Fel kell jegyezni, hogy mely csomagok lettek frissítve, hátha vala- adjuk neki. Minthogy a snake.msg állomány nincs használatban, melyik frissítést vissza kell vonni. Jó ötlet a függõségek és mére- a syslinux.cfg-én belül ezt a bejegyzést cseréljük ki custom.msg- tek újbóli ellenõrzése, hátha megváltoztak, amióta frissítve lettek. re. Szerkesszük a syslinux.cfg állományt a /mnt/boot-ban, és az Ezután ellenõrizzük minden csomag belsõ ellenõrzõösszegét F7 gombbal cseréljük ki a snake.msg-ét F7 custom.msg-re.

t. Minden jog fennt (internal checksum) az RPM csomagkezelõ -K kapcsolójával. A syslinux.cfg állományon történt még néhány további módo- Elsõként a kulcsot kell importálnunk: sítás, ezeket a 2. listában (48. CD Magazin/Kickstart könyvtár) tekinthetjük át. Az alapértelemezett bejegyzést linux-ról ks- cd /RH80/ONE_CD/RedHat/RPMS re változtattuk. Ha idõtúllépés fordul elõ vagy a felhasználó a rpm --import /usr/share/rhn/RPM-GPG-KEY parancssornál leüti az Entert, akkor a ks címke lesz felhasz- rpm -K *.rpm | grep "NOT *OK" nálva. Ezenkívül az idõtúllépés értékét 600-ról 60-ra csökken-

© Kiskapu Kf tettük, így a telepítés hamarabb megkezdõdhet, amennyiben Ez az ellenõrzés nem szigorúan kötelezõ érvényû, ám mint- nem történik felhasználói adatbevitel. hogy csomagfrissítéseket töltöttünk le, ez ellenõrzi, hogy a A képernyõbejegyzés is megváltozott. A boot.msg bejelentkezõ csomagok érvényesek-e. képernyõ – azt szerettük volna, ha a custom nevet viselõ saját képernyõnk jelenik meg. A ks címke alatti append (hozzáfû- A telepítési állományok elkészítése zés) sort két pontosítással egészítettük ki. Az egyik a text Ha már valamennyi állomány frissítve lett, újra létre kell hoz- kulcsszó, amivel lehetõvé tesszük a szövegalapú telepítést. nunk a hdlist állományokat. A csomagoknak csupán a fejlécét A másik pedig a ks kulcsszónak ks=cdrom:/ks.cfg -re tartalmazzák ezek az állományok, amelyek az Anaconda szá- történõ megváltoztatása. Ez a kiegészítés pontosan kijelöli a mára lehetõvé teszik, hogy gyorsabban jusson a fejlécadatok- Kickstart helyét, emiatt rendszerbetöltéskor a felhasználónak hoz. Minthogy csomagok frissítését végeztük el, ezeket az ezt szükségtelen megadnia a parancssorban. Ezután létrehoz- állományokat a genhdlist eszközzel ismét fel kell újítani; zuk a custom.msg üzenetállományunkat, amit a 3. listában az eszköz az anaconda-runtime csomag része: (48 CD Magazin/Kickstart könyvtár) olvasgathatunk. Az állomány tartalma színek használatával könnyebben /usr/lib/anaconda-runtime/genhdlist \ áttekinthetõvé tehetõ. Például az ^O09Custom^O02 jelsorozat /RH80/ONE_CD/ a Custom színét kékre állítja be, a ^O02 viszont visszaállítja a korábban használt betûszínt. A Kapcsolódó címeknél megtalál- A comps.xml állomány kezelésérõl sem szabad elfeledkeznünk. ható syslinux referenciából részletesebben tájékozódhatunk. Ez az állomány csomagcsoportokat és csomagfüggõségeket Ha elkészültünk a custom üzenettel, már csak le kell választani határoz meg, bár erre az utóbbira nincs százszázalékos garan- a rendszerbetöltõ képállományt (boot image). cia. Az állományszerkezet éppen a 8.0-s Red Hat Linux válto- zatban vált XML alapúvá, a korábbi változatokban csak rejtel- umount /mnt/boot mes címkéket tartalmazó közönséges szövegállomány volt fellelhetõ. Biztosítanunk kell, hogy a csoportokon belül megha- A CD-lemez felépítése tározott csomagok szerepeljenek a telepítésünkben. Ebben az Mielõtt a CD-lemezt megírnánk, hálózaton keresztül végzett esetben csak telepítendõ csoportokkal kell foglalkoznunk. telepítéssel talán ki szeretnénk próbálni az összeállítást: ennek Abban az esetben, ha csomagok hiányoznak, vagy éppen ellen- mikéntjét a RedHat Linux Kickstart-leírásából ismerheted meg. kezõleg, csomagok lettek a rendszerhez adva, a comps.xml ne- Szeretnénk, ha az összeállítás képes lenne önmûködõen telepí- vû állományt kell szerkesztenünk. teni magát, ezért a Kickstart-állományt magára a CD-lemezen Minthogy a core és base csoportnak valamennyi csomagját is fel kell írnunk. A Kickstart-állományt bármilyen szövegszer- kiválasztottuk, nincs szükség ezen állomány szerkesztésére. kesztõvel létre lehet hozni, de akár a Kickstart Configurator A Kickstart állomány %packages utasításában egyszerûen eze- nevû grafikus felhasználói felületet is használhatjuk. ket a csoportokat kell meghatároznunk. A Kickstart állományból A %pre szakaszban egy héjprogrammal ellenõrizhetjük a merev- készült kivonatot az 1. listában vehetjük szemügyre. A @Core lemezeket, és a meghajtók száma alapján dinamikusan létrehoz- és @Base csoportokat a szó szoros értelmében kihagyhatjuk, hatjuk a lemezrészadatot. Azt a tényt használjuk ki, hogy a hiszen ezek az elõre megadott értékeknek megfelelõen úgyis Kickstart a %pre szakaszt végrehajtja, utána újraolvassa a Kick- telepítve lesznek; itt kizárólag a példa kedvéért bukkantak fel. start-állományt. Amikor másodszor olvassa, akkor az értelmezés- be már befoglalja a /tmp/partinfo állományt is, ahol a %include Felhasználóiüzenet-képernyõ létrehozása utasítás található: lásd az 1. listát. A /tmp/partinfo a héjprogram Szeretnénk felhasználói üzenet képernyõt létrehozni, amin kimenete. A list-harddrives parancsot használjuk, ami fel- keresztül használati utasításokat adhatunk a felhasználó szá- sorolja a rendszer számára elérhetõ merevlemezeket azok mére- mára? Ezeket az üzeneteket a boot.img betöltési képállomány- tével együtt. Amint a lemezrész létrejön, megszabadít bennün- ban szokták tárolni, CD-ROM-on történõ telepítésnél pedig ket attól, hogy többszörösen létre kellene hoznunk a Kickstart- pontosan az images könyvtárban. Ez DOS-állományrendszer állományokat, magukban hordozva a lemezrészjellemzõket. formátumú, úgyhogy csatlakoztatni kell a rendszerhez, hogy A Kickstart-állományt létrejötte után nevezzük el ks.cfg-nek, hozzáférhessünk a tartalmához: és helyezzük el a telepítõfánk gyökérkönyvtárában, vagyis a

48 Linuxvilág Szaktekintély

Egy társeszközzel az ISO képállományhoz adott ellenõrzõ- összeget vizsgálhatjuk meg: A mkisofs által biztosított lehetõségek artva checkisomd5 /RH80/mydist.iso -r Rock Ridge kiterjesztés, együtt a következõkkel: az állomány tulajdonosának valamilyen „használható” értékre A CD-lemezt telepítés közben is ellenõrizni lehet. A CD-rõl való beállítása. való rendszerbetöltés után a felhasználó kiadhatja a parancsot: Lehet, hogy meg kellene ismerned a -R lehetõséget, mivel -r-rel azonos, de a -R nem változtatja meg az állomány linux mediacheck tulajdonosát. -T A kapcsoló a TRANS.TBL állományt minden egyes Most már a képállomány felírható a CD-lemezre. Feltételezem,

könyvtárra vonatkozóan létrehozza. A használattól függõen hogy a CD-író már telepítve van a rendszeredre. Az alábbiak- t. Minden jog fennt elképzelhetõ, hogy erre nincs is szükség. ban a cdrecord programot fogjuk használni, de ettõl eltérõ -J A Joliet-kiterjesztések hasznosak, ha a CD-t más programokhoz is nyúlhatunk. A CD-íráshoz szükséges paran- operációsrendszer-környezetben is használni szeretnénk. csot így kell kiadni: -V A CD kötetcímkéje: ez az, ami akkor jelenik meg, ha a CD-lemezt a meghajtóba helyezzük. cdrecord -v speed=4 dev=0,0,0 /RH80/mydist.iso

-b Ez a kapcsoló jelzi, hogy a rendszerbetöltõ képállományt kell © Kiskapu Kf használni, és a CD-lemezt „El Torito” típusú, A speed (sebesség) és dev (készülék) lehetõségek csupán a rend- rendszerbetöltésre alkalmas CD-ként kell elkészíteni. szeredtõl függnek. A dev-hez megadható készüléktípust a -c Az „El Torito” típusú, rendszerbetöltésre alkalmas CD-lemez- cdrecord parancs -scanbus paraméterével lehet meghatározni: nél használatos indításkatalógus (boot catalog) elhelyezke- cdrecord -scanbus désének a forrásútvonalhoz viszonyított útvonala. -o Az mkisofs parancs kimenetén megjelenõ képállomány elhelyezkedése. A kész CD-lemez használata Amint a képállomány CD-lemezre írása megtörtént, helyezd a lemezt a célgépbe, és indítsd el róla a rendszerbetöltést. A korábban készített és custom névre keresztelt saját üzenetet /RH80/ONE_CD/ könyvtárban. Egynél több Kickstart-állomány kell megkapnod. Ezen a ponton leütheted az ENTER billentyût, elkészítése és CD-lemezre írása is lehetséges. A különbözõ Kick- vagy várakozhatsz, amíg idõtúllépés nem lép fel a betöltési start-állományok szolgálhatják az „eltérõ vasra” való telepítést. folyamatban. Ha ez bekövetkezik, akkor a betöltési folyamat az Most létrehozhatjuk a képállományt. Elõzõ lépéseinknek alapértelmezés szerinti címkét használja fel, vagyis azt, amelyet köszönhetõen a telepítendõ rendszer elég kicsi lesz, és az ks-ként (Kickstart) adtunk meg. összes frissített csomagot tartalmazza. A mkisofs program Ha mindent jól végeztünk, a telepítésnek felhasználói beavat- elõállítja a képállományt, azután ezt felmásolhatjuk a CD- kozás nélkül kell mennie. Tapasztalatom szerint a telepítés lemezre. A parancs, amivel az ISO képállományt elõállíthat- körülbelül tíz percig tart, de ez a vas jellemzõitõl függõen juk, a következõ: változhat. cd /RH80/ONE_CD Összefoglalás mkisofs -r -T -J -V "My Custom Installation A Kickstarttal és a saját céljainknak megfelelõen átalakított CD" -b images/boot.img -c images/boot.cat Anacondával hatékony és rugalmas telepítés végezhetõ. Ez a -o /RH80/mydist.iso /RH80/ONE_CD telepítés nagymértékben javította a ciklusidõt és csökkentette a feladatkörömben (projekt) elõforduló hibákat. Képes voltam Vess egy pillantást a használható lehetõségeket felsorakoztató több gépet több alkalommal telepíteni, szinte erõfeszítés nélkül. táblázatra, mely a 48 CD Magazin/Kickstart könyvtárában E cikkemben érintettem néhány módját annak, hogyan lehet található. kihasználni a Kickstartot és az Anacondát, ezeken kívül azon- A mkisofs parancs utolsó jellemzõje a lemeztartalmat hor- ban még sok más lehetõség adott. Az érdeklõdõket arra szeret- dozó forráskönyvtár, amit – például a saját telepítési könyv- ném bátorítani, hogy tanulmányozzák át a Kapcsolódó címek tárunkat – be kell foglalni a képállományba. Több más kapcsoló között megadott leírást, és hogy bõvebb információkért csatla- is használható, amit esetleg szeretnénk igénybe venni, például kozzanak a Kickstart- és Anaconda-levelezõlistákhoz. a -A, -P és a -p lehetõségek kiegészítõ címkézési módot biztosítanak a képállomány számára. A -m és -x lehetõségek A cikkhez tartozó listák és címek megtalálhatóak a 48. CD révén bizonyos könyvtárak vagy állománytípusok (file pat- Magazin/Kickstart könyvtárában. terns) kizárhatók a képállományból – további tájékozódés végett olvasd el az mkisofs parancs súgóoldalát. Linux Journal 2003. április, 108. szám Ezután adjunk ellenõrzõ összeget (checksum) az ISO képállo- mányhoz. Ez a mûvelet nem kötelezõ érvényû, de a végfel- használók számára lehetõséget teremt, hogy ellenõrizzék CD- Brett Schwarz lemezük épségét. Az ISO képállományhoz ellenõrzõösszeget Seattle közelében él feleségével, fiával és a kutyá- adó eszközt implantisomd5-nak hívják. Ezt a lépést a követ- jával. A számítógépes és vezeték nélküli kezõ parancs kiadásával tehetjük meg: rendszerek szaktanácsadója. Elérhetõ a saját honlapján, a  http://www.bschwarz.com címen. implantisomd5 /RH80/mydist.iso

www.linuxvilag.hu 2003. június 49 Szaktekintély

artva Felületi mintázatok a Blenderben (5. rész)

Ebben a részben megtanuljuk, hogyan lehet valódi tükrözõ felületet létrehozni a Blender segítségével.

ezdeném talán a legegyszerûbb résszel, vagyis a a réges-régi Wolfenstein 3D program, ahol a falhoz közeledve t. Minden jog fennt K képek és animációk mintázatként való felhasználásá- a falminta nem részletesebbé, inkább élvezhetetlenebbé vált. val. Állítsuk be a tárgy anyagát, kapcsoljunk át az F6 A Rot90 kapcsolóval a mintázatként használt képet 90 fokkal billentyûvel a mintázatok létrehozására alkalmas nézetbe. Itt forgathatjuk el, míg a Movie kapcsoló segítségével közölhet- a korábbiakban még nem ismertetett Image mintázatot kell jük a Blenderrel, hogy nem egyszerû képrõl van szó, hanem választanunk, és az alábbi leírás alapján az igényeknek meg- egy animációról, ami képkockáról képkockára változik majd felelõen kell majd beállítanunk a tulajdonságokat. A mintázat a tárgyon. Amikor animációt szeretnénk felhasználni, akkor a

© Kiskapu Kf típusa alatt látható gombsorral kezdhetjük az ismerkedést. nézet közepén található Frames értékkel állíthatjuk be, hogy Az InterPol kapcsolót arra használhatjuk, hogy amikor a a kiszámított animációban mennyi képkockán keresztül kell tárgyra ráfeszítjük a mintázatot, a tárgy és a felhasznált kép ezt a mintázatot figyelembe venni, míg az alatta található mérete nem minden esetben azonos, tehát a képet a tárgy Offset értékkel azt határozzuk meg, hogy azt a Blender a teljes befedéséhez a legtöbbször nagyítani kell. Ilyen esetekben videórészlet hányadik képkockájától kezdve jelenítse meg a a kép pontjait nem lenne célszerû csupán többszörözni tárgy mintázataként. – a szebb látvány eléréséhez két képpont közé színátmenetet A Anti kapcsolóval kapcsolhatjuk be az élek finomítását, képezhetünk. Ha például egy képet a kétszeresére nagyítunk, amivel – hosszabb számítási idõért cserébe – szebb eredményt akkor egy piros és egy fehér képpont közé nem egyszerûen kaphatunk. egy újabb piros pontot helyezünk el, hanem a két pont átlagát, A fentiekben tárgyalt kapcsolók alatt találjuk az egyik legfon- vagyis egy rózsaszínû képpontot. Természetesen, ha több kép- tosabb gombot Load Image felirattal, amivel megadhatjuk a pontot kell beilleszteni, akkor a következõ képlet alapján szá- Blendernek, hogy melyik képet vagy animációt szeretnénk a míthatjuk ki a megfelelõ színt: mintázat létrehozásához felhasználni. A gomb használatával egy állománylista jelenik meg, ahol kiválaszthatjuk a megfelelõ forrás_képpont+pillanatnyi_beillesztendõ*((cél_képpont- képet, és a Load gombbal betölthetjük. Amennyiben olyan forrás_képpont) / beillesztendõ_pontok_száma) animációt adunk meg, amit a Blender nem képes betölteni, hibaüzenet figyelmeztet minket. Tapasztalataim szerint a Blen- Ezt nevezzük lineáris interpolációnak, ennek megvalósítására derrel készült animációk betölthetõk, emellett a tömörítetlen alkalmas az InterPol kapcsoló. képkockákat tartalmazó avi formátumú és a Motion JPEG tö- A következõ kapcsoló a UseAlpha, ami arra jó, hogy a mörítéssel készült avi formátumú videórészletek használhatók. Blender az átlátszóságadatokat is tartalmazó képeken figye- A kép vagy animáció betöltése után a fájl elérési útja megjele- lembe vegye ezt a tulajdonságot. Ilyen képeket könnyedén nik a gomb melletti mezõben, és az állománynév mellett talál- elõállíthatunk például a Gimppel. A képet TGA vagy PNG ható Reload gomb használatával a Blender újra beolvassa az formátumban tárolva ez az adat megmarad és használható. állományt. Ez a lehetõség akkor hasznos, amikor a pontos min- Amennyiben alkalmazni kívánt képünk nem tartalmazza ezt az tázat még nem készült el, vagyis folyamatos módosítás alatt adatot, a Blender a CalcAlpha kapcsoló alkalmazásával képes áll, és szeretnénk megtekinteni a módosítások eredményét. ezeket az értékeket kiszámítani. Az átlátszóság kiszámításához A képek betöltésére szolgáló gomb alatt találhatjuk a Filter a Blender a képpontok intenzitását használja fel, vagyis minél értéket, amivel azt határozhatjuk meg, hogy az interpolált na- világosabb egy képpont, annál kevésbé lesz átlátszó a mintázat gyítás és az elõbbiekben tárgyalt MipMap szolgáltatás haszná- az elõállításakor. A NegAlpha kapcsolóval a kiszámított vagy latakor a Blender mekkora környezetet vegyen figyelembe tárolt átlátszóságértékek inverzét használhatjuk, vagyis ebben a köztes értékek kiszámításakor. az esetben a sötétebb képpontok lesznek jobban átlátszók, míg A következõ sorban lévõ kapcsolókkal azt határozhatjuk meg, a világosabbak kevésbé. Természetesen a tárolt átlátszóság- hogyha a kép vagy animáció kisebb, mint a tárgy, akkor a adatok esetében az érték nem függ a képpont világosságától, Blender hogyan számolja ki a tárgy fényáteresztõ képességét. ott teljesen szabadon határozhatjuk meg a képpontok fényát- Az Extend kapcsolóval a kép szélén található színértékek a eresztõ képességét. tárgyra is kiterjednek majd, a Clip hatására a mintázat által le A MipMap kapcsolóval elérhetjük, hogy a Blender a képpon- nem fedett területek átlátszósága nulla lesz, a ClipCube hasz- tokat ne csupán két dimenzióban interpolálja, hanem a kame- nálatával a kép köré rajzolható kockán kívüli területek átlát- rától való távolság figyelembevételével több különbözõ felbon- szósága lesz nulla értékû, míg a Repeat alkalmazásával a kép tású képet készítsen a megadott mintázatból, és a kép kiszámí- vagy animáció átlátszóságértékei is megismétlõdnek a tárgyon. tása során használja õket. Ennek az lehet az elõnye, hogyha E kapcsolók alatti XRepeat és YRepeat értékekkel állíthatjuk egy tárgy messzebb áll a kamerától, akkor nem kell akkora be, hogy a mintázat a tárgyon a vízszintes és a függõleges képpel számolni a megjelenítés során, vagyis gyorsabban kiszá- tengely mentén hányszor ismétlõdjön. A képek mintázatként mítható a végeredmény. Viszont ahogy a tárgy közelebb kerül, való felhasználásakor még azt is fontos meghatároznunk, hogy a Blender a nagyobb felbontású mintát használja, tehát a tárgy a Blender mekkora területet vegyen figyelembe a tárgy mintá- mintázatának részletei is megjelennek. Ennek jó ellenpéldája zataként. Erre szolgál a MinX, MinY, MaxX és MaxY érték,

50 Linuxvilág Szaktekintély

ezekkel pontosan beállíthatjuk a mintázat határait, és ezzel a kell ellentétes elõjellel alkalmazni. Ez a megoldás akkor mûkö- megoldással elérhetjük azt is, hogy egy képen több tárgy dõképes, ha a síklapot Z irányban nem mozgattuk el. Ameny- mintázatát is megrajzolhassuk. nyiben elmozdítottuk, akkor a térbeli pont és a kamera közötti artva Nos, ennyi talán elegendõ ahhoz, hogy tetszõleges képet he- függõleges távolság felénél kell lennie, tehát a pont vagy a lyezhessünk el egy tárgyon, meglehetõsen pontosan és válto- kamera magasságát ennek figyelembe vételével újra kell szá- zatosan. Most ismerkedjünk meg azokkal a lehetõségekkel, molni. Feltételezve, hogy a síklapot nem mozdítottuk el, jelöl- amelyek segítenek a tükrözõ felületek elõállításában. Azoknak, jük ki a tükrözõdés számításához szükséges pontot, majd akik figyelemmel kísérték a sorozat korábbi részeit, talán fel- aSHIFT-N billentyûkombinációval állítsuk be a térbeli helyét. tûnt, hogy a mintázatok tárgyalásából kimaradt az EnvMap Az X és Y koordinátáknak meg kell egyezniük a kamera X és Y típusú felületi mintázat. Itt az alkalom, hogy ezt a hiányt pó- koordinátáival, a Z koordináta pedig legyen ugyanakkora, mint toljam, és megismertessem olvasóimat ezzel a lehetõséggel a kamera és a síklap távolsága, de azzal ellentétes elõjelû (az

értéke alapesetben megegyezik a ka- t. Minden jog fennt mera Z koordinátájával, az elõjele azon- ban negatív). Ezek után már csak azt kell a program tudtára adni, hogy ezen a tárgyon valóban használni is szeret- nénk a tükrözõdéshez kiszámított

mintázatot, tehát jelöljük ki a síklapot, © Kiskapu Kf kapcsoljunk át az anyagszerkesztõ nézetbe (F5 billentyû), és a nézet köze- pén kapcsoljuk be a Refl kapcsolót. Nézzük meg, mire jutottunk eddig: az F12-vel számíttassuk ki a képet. Láthat- juk, hogy a síklapon nem jelent meg a tükrözõdõ gömb. Ez azért történhetett 1. kép Egyszeres tükrözõdés 2. kép Többszörös tükrözõdés így, mert amikor a program a fentebb említett hat képet kiszámította, a tükrö- és az eredményül kapott kép látványának nagyszerûségével. zõdés kiszámításához használt nézõpontból a síklap eltakarta Az érthetõség kedvéért itt is az egyszerûbb látvánnyal kezdem. a gombunkat. Természetesen erre is létezik megoldás. Kapcsol- Amikor a Blendert elindítjuk, a jelenetben alapértelmezetten junk vissza a mintázatokhoz, ahol a Don't render layer: felirat találunk egy tárgyat, használjuk fel ezt a tanulás során. Hama- alatti gombsoron beállíthatjuk, hogy a program a számítások rosan ez a síkfelület lesz a tükrözõ felületünk. Hozzunk létre során milyen rétegeket hagyjon figyelmen kívül. Itt kapcsoljuk egy lámpát és egy gömböt, hogy legyen valami, ami tükrözõ- be a második réteget, hiszen a jelenet létrehozásakor a síklapot dik a síkon. A síklapot az ALT-M hatására megjelenõ gombsor erre a rétegre helyeztük át. Ha most a végeredményt egysze- segítségével helyezzük át a második rétegre, majd mindkét rûen újból kiszámítanánk, az nem változna semmit, mert a réteget tegyük láthatóvá. Ezután jelöljük ki a síkot, és hozzunk szükséges képeket a program már az elõbbi számolás során létre egy új anyagot és egy új mintázatot is. A mintázat típusa- elõállította. A korábban kiszámított adatokat töröljük a Free ként az EnvMap kapcsolót kell használnunk. Ez az a pont, Data gomb használatával, és számoljuk ki újra a végered- amikor meg kell értenünk, hogy a Blender mi módon képezi le ményt. Ebben az esetben, ha mindent jól csináltunk, a síklapon a környezetét visszatükrözõ tárgy mintázatát. Amikor egy ilyen meg kell jelennie a gömb tükörképének, ami azt jelenti, hogy mintázatot létrehozunk, a Blender egy virtuális kamerát helyez továbbléphetünk a következõ látvány megalkotásához. el a megadott ponton, és mindhárom tengellyel párhuzamosan Célunk most az lesz, hogy a síklapon két gömb tükörképét két-két képet számít ki a jelenetrõl. Hármat pozitív irány felé lehessen látni, s ezek közül az egyiken a másik gömb is vissza- nézõ kamerával, további hármat negatív irányba tekintõ kame- tükrözõdjön. Hozzunk létre egy újabb gömböt a kamera látó- rával. A késõbbiekben ezeket a képeket fogja használni mintá- terén belül, és a térbeli kurzor áthelyezése nélkül adjunk meg zatként, mégpedig olyan módon, mintha egy kockába zártuk egy üres objektumot is. Az új gömböt helyezzük át a harmadik volna a tárgyat, aminek oldalain ezek a számított képek látha- rétegre, és ezt is jelenítsük meg. A gömbnek adjunk anyagot, tóak. Az elõbbiek alapján már látható, hogy a képek elkészí- és mintázatként állítsuk be az EnvMap típust. Az anyagtulaj- téséhez meg kell adni egy térbeli pontot, itt fogja a program donságok között ne felejtsük el bekapcsolni a Refl kapcsolót. elhelyezi a virtuális kamerát. Amikor a EnvMap kapcsolóval Tekintettel arra, hogy „Empty”nevû objektum már szerepel meghatároztuk a mintázat típusát, a nézetben megjelent egy a jelenetben, ezt a nevet már nem adhatjuk meg kiindulási OB: mezõ, amiben meg kell adni azt a tárgyat, ami ezt a pontot pontként a tükrözõdés számításához. Jelöljük ki az utoljára meghatározza. Azért, hogy e térbeli hely ne befolyásolja majd elhelyezett üres tárgyat (ez most a gömb belsejében található), az összképet, a Fõmenü/Add/Empty menüpontok kiválasztásá- és az F9 billentyûvel kapcsoljunk át a tárgyszerkesztõ nézetbe. val célszerû egy üres objektumot létrehozni. Ebbõl a pontból Itt a fejlécrõl leolvashatjuk a tárgy nevét (az eddigi lépéseket számítja ki tehát a program a képeket, ezért az elõbbi OB: me- követve ez Empty.001 lesz), amit az újabb gömb mintázatának zõbe írjuk be a látszólagos tárgy nevét (a tárgy neve „Empty”). kiindulási tárgyaként be kell írnunk az OB: mezõbe. Utolsó A kamera elhelyezése után nyomjuk meg a SHIFT-N billentyû- lépésként már csak azt kell megadnunk, hogy a Blender milyen ket, aminek a hatására megjelennek a kiválasztott tárgy tulaj- rétegeket hagyjon figyelmen kívül a számítások során. Kapcsol- donságai (ebben az esetben a kamera legyen a kiválasztott juk be a harmadik réteget, amin az új gömb található, hiszen tárgy). Jegyezzük meg (írjuk fel) ezeket az értékeket, mert a az nem átlátszó – a tükrözõdés számításához használt képeken helyes tükörkép elõállításához a referenciaobjektumot ponto- a gömb belseje jelenne meg. Ezek után a programmal számít- san a kamera alatt kell majd elhelyezni, csak a Z koordinátát tassuk ki a végeredményt.

www.linuxvilag.hu 2003. június 51 Szaktekintély

készülnek, azaz nem túl szépek. Természetesen a Blender erre SHIFT-N Helyi koordináták és elfordulásértékek is kínál megoldást, tekintsük csak meg a mintázatszerkesztõ CubeRes értékét. Ennek alapbeállítása 100, ami nem túl nagy. artva ALT-M Tárgy áthelyezése másik rétegre F5 Anyagtulajdonságok Elõfordulhat, hogy a tárgy–kamera-távolság olyan nagy, hogy a kis felbontású számítások is kielégítõ eredményt adnak, de F6 Mintázatok ha mégsem, akkor ezt az értéket szívünk és igényeink szerint F9 Tárgyszerkeszõ nézet legfeljebb 1000-re növelhetjük. Ezzel azt határozzuk meg, hogy F12 Kép kiszámítása a környezet leképezésekor használt kocka egy-egy oldalát alkotó kép milyen méretû legyen. Ez az érték képpontokban értendõ. Amennyiben egy teljes animáció során szeretnénk a környezet Láthatjuk, hogy ugyan a síklapon mindkét gömb tükörképe leképezését alkalmazni (vagyis tükrözõdõ felületeket számol-

t. Minden jog fennt megjelent, a második gömbön szintén látható az elsõ tükör- tatni a programmal), a mintázat nézetében található Static képe, de mintha valami még nem lenne tökéletes. A képet kapcsolót kapcsoljuk át a mellette látható Anim elnevezésûre. jobban szemügyre véve feltûnik, hogy a második gömb tükör- Így a Blender minden képkocka kiszámítása elõtt létrehozza képén nem tükrözõdik az elsõ gömb. Ennek az az oka, hogy a majd a környezet mintázatát. Blender a számítások során nem használ sugárkövetést, vagyis Végezetül a táblázatban láthatók a használt billentyûkombi- elsõ lépésben nem számítja ki az egynél többszöri tükrözõdé- nációk, az újak és a már ismertek egy része egyaránt.

© Kiskapu Kf seket. Ezt láthatjuk az 1. képen. E nehézség megoldására „trük- A CD-mellékleten (48. CD Magazin/Blender) található példá- közõdést”használunk. Miután ezt a kissé hibás képet kiszámí- kat tanulmányozva a Blender és a tükrözõdõ felületek kap- tottuk, még egy lépést meg kell tennünk: töröljük a síklap csolata remélhetõleg könnyen érthetõ. Természetesen legjobb kiszámított adatait – F6  Free Data –, majd számítsuk õket tudásom szerint szívesen válaszolok levélben feltett kérdé- újra. Így a második gömbrõl készülõ képen már látható az elsõ sekre is. Legfontosabb tanácsom: továbbra se mulasszuk el gömb képe, vagyis a kívánt végeredményt kapjuk meg, ezt folyamatos gyakorlást. láthatjuk a 2. képen. További tükörtrükköket az ismertetett két módszer használatával készíthetünk. Ne feledjük el megadni Fábián Zoltán ([email protected], [email protected]) a megfelelõ kiindulási tárgyat, sem a megfelelõ tárgyakon 27 éves, jelenleg programozóként dolgozik. kétszer kiszámítani a környezetrõl készülõ képeket, továbbá Szabadidejében szívesen kirándul, túrázik. Emellett az anyagtulajdonságoknál bekapcsolni a Refl kapcsolót. szeret rajzolni, érdekli a 3D grafika és a Linuxszal A gyakorlás során biztosan hamar feltûnik nekünk, hogy a kapcsolatban minden olyan program és program- tükörképek, bizony, meglehetõsen alacsony felbontásban nyelv, amit még nem ismer vagy nem próbált ki.

52 Linuxvilág Szaktekintély

artva Irányítsunk mindent egy helyrõl a Synergyvel! Kapcsoljuk a gépeket egymáshoz és önmagukhoz – KM kapcsolódobozok helyett – programmal!

it is jelent a Synergy? A szó- Itt az X.Y.Z a változatszámot jelenti. egy-egy meghatározást tartalmazhat a

t. Minden jog fennt tár a következõ meghatáro- Az oldalon szintén elérhetõ, elõre össze- következõ kulcsszavak közül: left (bal), zást adja: „különálló elemek állított RPM-változatot is telepíthetjük, right (jobb), up (fel) és down (le). A szá- Melõnyös együttmûködése”. A Synergy ha kívánjuk. A végrehajtható állomá- mítógép saját magára is hivatkozhat; a eszköz ezt az együttmûködést olyan nyok a /usr/local/bin könyvtárba kerül- fenti példában a guava felsõ részén kilép- módon éri el, hogy két vagy több gép nek, hacsak más könyvtárat nem adunk ve az egér a guava alján jelenik meg újra. között TCP/IP-hálózaton keresztül képes meg a configure-nak. Ismételjük meg A befûzések nem lesznek önmûködõen

© Kiskapu Kf egyetlen billentyûzetet és egeret átlátszó ezeket a lépéseket minden gépen, vagy szimmetrikusak. Ha a mangóra akarunk módon megosztani. Ezen felül a Synergy a bináris állományokat (synergyc és ugrani, kölcsönösen be kell állítanunk, akár a kiválasztott szöveget és a vágó- synergys) egyszerûen másoljuk át. hogy a guava a mango bal oldalán talál- laptartalmat is képes megosztani az ható. Ez a lehetõség akkor igazán hasz- ICCCM (Inter-Client Communication A kiszolgáló beállítása nos, ha egyszerre több mint két gépet Conventions Manual) elvárásainak meg- Válasszuk ki a kiszolgálót, azt a rend- akarunk kezelni. Például legyen a harma- felelõen, Unicode-támogatással. A sor- szert, amihez az egér és a billentyûzet dik gépünk neve banan, ami a guava és a elemeléseket önmûködõen alakítja át a fizikailag kapcsolódik. Ezen a rendsze- mango felett helyezkedik el, de a bananról Unix és Windows formátumok közt, így ren készítenünk kell egy Synergy-beállí- csak az egyikükre lehet lefele jönni. a rendszerek közti vágás és másolás tásfájlt, amiben megnevezzük a kiszol- Az aliases nevû harmadik szakasz elhagy- éppoly egyszerûvé válik, mintha egyet- gálót, a kapcsolódásra jogosult számító- ható. Az ügyfelek csatlakozáskor megad- len rendszeren dolgoznánk. Továbbá gépeket (az ügyfeleket) és ezek virtuális ják a gépnevüket (vagy a parancssorban képes rávenni a képernyõvédõket, hogy képernyõkiosztását. Egyszerû szöveges megadott nevüket) a kiszolgálónak, így a egyetértésben induljanak és álljanak le. állományról van szó, ami két kötelezõ és kiszolgáló meg tudja õket keresni a beál- Röviden minden számítógép a saját egy elhagyható szakaszból áll. Nézzünk lításfájlban. Hálózati beállítástól függõen megjelenítõjét használja, nekünk csak egy példát a beállításfájlra: némelyik rendszer teljes értékû tarto- az egeret kell a képernyõ széléhez vin- mánynevet ad vissza, mások viszont csak nünk, és máris átugrottunk a másikra. section: screens a gépnevüket. Az alias (álnév) szakasz- Az egész csaknem olyan érzés, mintha guava: ban, mint a neve is sugallja, felsorolhat- több számítógépen egyszerre egyetlen mango: juk, hogy milyen neveken ismerjük a hatalmas munkafelületünk lenne. end számítógépeket. A fenti beállítás szerint A Synergy tulajdonképpen a billentyû- section: links a mango egyaránt kapcsolódhat mango zet, illetve az egér kapcsolódobozok guava: vagy mango.tropical-fruit.com néven is. programmal megvalósított megfelelõje. right = mango A kiszolgáló saját neve megállapításakor Jelenleg Linuxon és Windowson fut, up = guava is végignézi az álneveket. illetve elõzetes változata a Solarist is mango: Bizonyára feltûnt, hogy a beállításfájl támogatja. Ezek a felületek bármilyen left = guava nem határozza meg, hogy a guava vagy összetételben használhatók. Ebbõl a end a mango legyen-e a kiszolgáló. Erre cikkbõl azt tudhatjuk meg, hogyan tele- section: aliases ugyanis semmi szükség – ez a beállítás píthetjük a Synergy rendszert két (vagy guava: változtatás nélkül mûködik, bármelyik több) linuxos gépre. A beállítás általában guava.tropical-fruit.org gép legyen is a kiszolgáló. Legyen csak néhány percet vesz igénybe. mango: mondjuk a guava gép a kiszolgálónk. mango.tropical-fruit.org Készítsük el saját beállításainkat a fenti Elõkészítés és telepítés end példa alapján, majd mentsük a Elõször is töltsük le a Synergy legutóbbi $HOME/.synergy.conf fájlba. üzembiztos változatát a SourceForge ol- A screens (képernyõ) szakasz egyszerûen dalról (a sourceforge.net/projects/synergy2 felsorolja a kiszolgáló és az összes kapcso- Az ügyfelek és kiszolgáló kipróbálása címrõl, vagy a 48-as CD Magazin/ lódásra jogosult gép nevét. A links (kap- Indítsuk el a Synergy kiszolgálót: Synergy könytárából). Azután kövessük csolatok) szakasz a gépek képzeletbeli a megszokott módszert: egymásmellettiségét adja meg. Például synergys -f -1 guava meghatározása szerint mango a tar xzf synergy-X.Y.Z.tar.gz jobb oldalán található, így amikor az egér (Hamarosan a kapcsolók jelentését is cd synergy-X.Y.Z kiszalad a guava képernyõjének jobb megmagyarázzuk.) A kiszolgáló néhány ./configure peremén, a mango képernyõjének ellen- üzenetet ír ki a héjprogram ablakába, és make kezõ (jelen esetben a bal) oldalán jelenik ha minden jól megy, készen várja a kap- su -c ·make install· meg újra. Minden számítógép legfeljebb csolatokat. A kiszolgálón belüli, önma-

54 Linuxvilág Szaktekintély

gára mutató hivatkozások máris mûköd- juk, nem fog mûködni. A legegyszerûbb kiszolgáló elõtt is elindíthatjuk. Ezt a ké- nek. A guava gépen az egeret a képernyõ módszer a Synergy önmûködõ elindítá- pességet a laptopgépeken ki is használ- tetejének tolva annak alulra kell ugrania. sára, ha egy újabb sorral bõvítjük a hatjuk: folyamatosan futtassuk az ügyfe- artva Minthogy a kiszolgálónk már fut, ké- $HOME/.xsession állományunkat vagy let. Amikor rákötjük az otthoni hálóza- szen állunk az ügyfelek csatlakoztatásá- az annak megfelelõ X-folyamatot indító tunkra, 60 másodpercen belül rákapcsoló- ra. Indítsuk el az ügyfelet a másik rend- parancsfájlt. Általában az .xsession fájl- dik Synergy kiszolgálónkra. Ettõl kezdve szerünkön (ebben a példánkban a ból kapcsoló nélkül indíthatjuk el a a kiszolgáló billentyûzetét és egerét hasz- mango gépen): Synergy-kiszolgálót, az ügyfelek egyet- nálhatjuk a laptop eszközei helyett is. len kapcsolója pedig a kiszolgáló neve Végül egy fontos megjegyzés a bizton- synergyc -f -1 --no-camp lesz. A programok a háttérben fognak sággal kapcsolatban. Az írás születésé- guava futni és maguk is kilépnek, amint az nek pillanatában a Synergy még nincs

X-kiszolgáló kilép vagy újraindul. semmilyen azonosító- vagy titkosító- t. Minden jog fennt A guava nevet a saját kiszolgálónk nevé- Ezzel a beállítással csak az a gond, hogy képességgel felvértezve. Mivel az összes vel vagy hálózati címével kell helyettesí- a Synergy az xdm (vagy az ennek megfe- egér- és billentyûzetbementet továbbítja, tenünk. Az ügyfél szintén megjelenít lelõ kdm vagy gdm) által futtatott beje- beleértve a jelszavakat is, ne használjuk néhány üzenetet, aztán vagy kapcsoló- lentkezõ képernyõn sajnos nem fog olyan hálózatokon, amikben nem bí- dik a kiszolgálóra, vagy hibával kilép. futni. Ha rendelkezünk a szükséges jogo- zunk meg. A Synergy jövõbeli változa-

Ha sikeresen csatlakozott, máris mind- sultságokkal, megjelenítéskezelõnket taiban hamarosan ezt a nehézséget is © Kiskapu Kf két rendszerünkön használhatjuk az átállíthatjuk, hogy az X indításakor felszámolják. egeret, a billentyûzetet és a vágólapot. a Synergy rendszert is indítsa el. Elõször Ugyanígy próbáljuk csatlakoztatni a is a $HOME/.synergy.conf állományt má- Linux Journal 2003. április, 108. szám többi ügyfelet is. soljuk a /etc/synergy.conf helyre (a máso- Amennyiben a parancssori kapcsolók dik elején nincsen pont), hogy a megje- Chris Schoeneman érvénytelenek vagy a beállításfájl hibás, lenítéskezelõ megtalálhassa. Azután szer- ([email protected]) a Synergy hibaüzenetet jelenít meg a kesszük át az Xsetup parancsfájlt; a kü- Grafikus programmérnökként héjprogramban, majd kilép. Ha a kiszol- lönféle terjesztések különféle helyeken dolgozik a Pixar Animációs gáló- vagy az ügyfélkapcsolat valami- tartják ezt az állományt, úgyhogy ma- Stúdióban. A Synergyn kívül lyen más okból kifolyólag sikertelen, gunknak kell megkeresnünk. A parancs- õ alkotta a bzflaget is. akkor a hibát röviden ismertetõ ERROR fájl vége felé, de még bármilyen kilépés- California államban, Berkeleyben él. vagy FATAL kezdetû naplóbejegyzést (exit) hívás elé szúrjunk be két sort. Két fogunk látni. Sajnos itt nincs hely arra, lehetõség között választhatunk. Azon a hogy valamennyi hibalehetõséget végig- gépen, ahol az ügyfelet szeretnénk indí- nézzük, de az üzenet remélhetõleg ele- tani, írjuk be a következõ sorokat: gendõnek fog bizonyulni, hogy megta- láljuk a hiba okát. /usr/bin/killall synergyc A fent használt parancssoros kapcsolók /usr/local/bin/synergyc guava azt jelentették, hogy az ügyfél és a ki- szolgáló az elõtérben futhat és az üzene- A guava szót helyettesítenünk kell a teket a héjprogramban jelenítsék meg kiszolgálónk nevével. A kiszolgáló indí- (-f), valamint – ha nem állandó hibaje- tásához csak ennyit kell beírnunk: lenség bukkanna fel (-1) – a rendszer lépjen ki. Alapértelmezés szerint az /usr/bin/killall synergys ügyfél és a kiszolgáló is a háttérben fut, /usr/local/bin/synergys az üzenetek a syslog-ba íródnak, nem állandó hibák esetén pedig néhány .Xsession fájlunkból ne felejtsük el eltá- másodperces várakozás után a rendszer volítani a Synergyt indító valamennyi újra próbálkozik. A --no-camp kapcsoló bejegyzést. Néhány megjelenítéskezelõ azt tudatja az ügyféllel, hogy lépjen ki, biztonsági okokból lefoglalja a billen- amennyiben a kiszolgáló az egyik kap- tyûzetet, és a felhasználó bejelentkezé- csolatot szándékosan lezárja. Egyébként séig nem is ereszti el (ilyen az xdm és az ügyfél egy kis tisztogatás után újra kdm, a gdm viszont nem). A Synergy megpróbál kapcsolódni; errõl az aláb- kiszolgáló így bejelentkezés elõtt nem biakban még ejtünk néhány szót. Léte- képes megosztani az egeret és a billen- zik néhány további lehetõség is, a teljes tyûzetet. Azt azonban nem akadályozza lista megtekintéséhez adjuk ki a meg, hogy a Synergy ügyfél értelmezze --help parancsot. az egér- és billentyûzetbemenetet; je- lentkezzünk be a kiszolgálóra, majd a A Synergy önmûködõ indítása Synergy segítségével jelentkezzünk be Ha egyszer kipróbáltuk a kiszolgálót és az az ügyfélre is. ügyfeleket, valószínûleg azt szeretnénk, A --no-camp kapcsoló nélkül indítva ha a jövõben maguktól is elindulnának. ügyfelünk 60 másodpercenként megpró- A Synergynek szüksége van az X-kiszol- bál kapcsolódni a kiszolgálóra, amíg siker- gálóra, ezért ha az X felállása elõtt indít- rel nem jár, úgyhogy az ügyfelet a

www.linuxvilag.hu 2003. június 55 Szaktekintély

artva Az rsync (2. rész) Az rsync-modulok fájlrendszerszintû beállításai és kapcsolatok létrehozása.

z elõzõ alkalommal névtelen felhasználók számára érhetõ el, egy meglehetõsen komoly, 128-bites, MD5 alapú helyeztünk üzembe egy rsync-kiszolgálót. Az elsõ kihívás-válaszadás jellegû eljárást használ. Ez két okból is

t. Minden jog fennt kódrészlet – a múlt hónapban is mintaként használt jobb a normál FTP-hitelesítésnél. Egyrészt a rendszer nem rsyncd.conA f állomány – néhány biztonsági szempontból hasz- továbbítja a jelszavakat a hálózaton keresztül, így nem lehet nos beállítást szemléltet. Példánkhoz visszatérve most ejtsünk õket lehallgatni. Ettõl még – elméletileg – nyers erõvel néhány szót az rsync-modulok (könyvtárak) fájlrendszerszintû (brute force), kivonatokkal kivitelezett támadást lehet beállításairól. A fõ elvek ebben az esetben is megegyeznek indítani a kiszolgáló ellen! a névtelen FTP chroot-környezetekben használtakkal. A kül- Másrészt az rsync nem használja a rendszer hitelesítõ adatait,

© Kiskapu Kf önbség mindössze annyi, hogy a chroot használatához nem a felhasználónév–jelszó párosokat saját állományban tárolja. kell futtatható vagy beállítófájlokat bemásolni, mint azt néhány Ezt az állományt kizárólag az rsync használja, semmilyen kap- FTP-kiszolgálónál látni. csolatban nincs a /etc/passwd vagy a /etc/shadow állománnyal. Az rsync beállítóállományában csak apróbb módosításokat kell Ha tehát valaki eredményesen támadja az rsyncet, a felhasz- végrehajtani az elérési útvonalak és engedélyezett állomások nálók rendszerazonosítói nem kerülnek közvetlen veszélybe, között, és máris a névtelen felhasználók rendelkezésére állha- hacsak valaki nem végzetesen rosszul állította be az rsync tunk. Ez még elég soványka dolog. Hogyan tudjuk fogadni a könyvtárhozzáféréseit vagy az adott könyvtárakra vonatkozó névtelen feltöltéseket, illetve miként hozhatunk létre külön jogosultságokat. modult a hitelesített felhasználók számára? A második kódrész- Maguk az adatátvitelek az FTP-hez hasonlóan titkosítás nélkül let mindkét kérdésre megadja a választ. folynak – tehát igaz, hogy az rsync ellenõrzi a felhasználók Elõször szükségünk lesz egy bejövõ (a továbbiakban bejovo) adatait, ám az adatok épségét nem biztosítja, illetve bizalmas- nevû modulra, aminek az elérési útvonala /home/bejovo. Most ságukat sem védi a hallgatózóktól. Ilyen elvárások esetén SSH is a nyilvánosan írható könyvtárak esetében (lásd „Tips for vagy Stunnel felett kell futtatni. Securing Anonymous FTP” a „Building Secure Servers with A secrets file beállítás adja meg az rsync felhasználónév- Linux” címû mûben) alkalmazott elvek jutnak érvényre, egyet- jelszó párosokat tároló állományának nevét. Ez hagyományo- len fontos különbséggel: a névtelen rsync szolgáltatás esetében san a /etc/rsyncd.secrets, de gyakorlatilag bárhol, tetszõleges a kérdéses könyvtárra mindenkinek futtatási és írási jogot kell névvel elhelyezhetõ, és a .secrets végzõdés sem kötelezõ. adni, vagyis 0733-as módot kell beállítani. Ha ezt elmulasztjuk, Ennek a beállításnak nincs alapértelmezett értéke. Ha az auth a feltöltések anélkül lesznek sikertelenek, hogy a felhasználó users beállítást engedélyezed, akkor a secrets file értékét errõl bármiféle hibaüzenetet kapna, vagy a kiszolgáló napló- is meg kell adnod. Az alábbi részlet egy secrets file jába bejegyzés kerülne. tartalmát szemlélteti: Ebben az esetben is érdemes megfogadni néhány, az FTP-ki- szolgálókra is érvényes tanácsot: a könyvtár tartalmának vál- watt:shyneePAT3 tozását mindig kövessük figyelemmel, nehogy visszaéljenek bell:d1ngplunkB00M! a szolgáltatásunkkal, és a tartalma soha ne legyen bárki által olvasható. A feltöltött fájlokat a lehetõ leghamarabb – célsze- A /etc/rsyncd.secrets mintaállomány tartalma rûen a cron-ból – mozgassuk át egy nyilvánosan el nem A második kódrészlet auth users beállítása adja meg, érhetõ könyvtárba. hogy a secrets file-ban szereplõ felhasználók közül A [bejovo] csoportban az egyetlen új beállítás az átvitelek kik jogosultak a modul elérésére. Minden olyan ügyfélnek, naplózása. Ezzel arra utasítható az rsync, hogy egy kicsit aki ehhez a modulhoz próbál csatlakozni – feltéve, hogy részletesebb naplót készítsen a fájlátviteli próbálkozásokról. átjutott a hosts allow és a hosts deny hozzáférés-vezér- Alapértelmezett esetben a beállítás értéke: no (nem). Emellett lési listák révén emelt akadályokon –, meg kell adnia nevét a már ismert read-only beállítás is no értéket kapott, felülbí- és jelszavát. Ne feledd pontosan megadni az érintett fájlokra rálva ezzel az átfogó beállítások között szereplõ yes-t (igen). és könyvtárakra vonatkozó jogosultságokat, ugyanis ezek Nincs hasonló eszköz arra, hogy az rsync tudomására hozzuk szabják meg, hogy csatlakozás után a hitelesített felhasználók a könyvtár írható voltát. A lehetõségeket a könyvtárra meg- mit mûvelhetnek. Ha az auth users beállításnak nem adsz adott engedélyek szabják meg. értéket, akkor a rendszer nem követeli meg a felhasználók A példa második része egy korlátozott elérhetõségû, hitelesítését, és a modul névtelen rsync-hozzáféréssel is Zenebolondok nevû modult ad meg. Ebben három új beállí- elérhetõ lesz. Démonmódban ez az rsync alapértelmezett tással ismerkedhetünk meg. Az elsõ a list, ez adja meg, hogy viselkedése. a modul megjelenjen-e, amikor a távoli felhasználók a kiszol- Nagyjából ez az, amit egy névtelen és hitelesített felhasználók gálón elérhetõ modulok listáját kérdezik le. Alapértelmezett által egyaránt elérhetõ rsync-szolgáltatás beindításához tudnod értéke yes. kell. A parancssori és a beállítófájlban található további beál- A másik két beállítás, az auth users és a secrets file lításokról – köztük az itt nem tárgyalt, a naplóüzenetek testre- szabja meg a csatlakozó ügyfelek hitelesítésének módját. szabására használhatókról – az rsync(8) és az rsyncd.conf(5) Az rsync hitelesítési összetevõje, ami csak démonmódban súgóoldalak szolgáltatnak bõvebb tájékoztatást.

56 Linuxvilág Szaktekintély

(Korántsem véletlen, hogy a modulok neve így alakul, a pél- 1. lista Egy rsyncd.conf mintafájl dákban is ezeket állítottuk be. Természetesen a Zenebolondok modul neve sem véletlenül nem jelenik meg a listában.) artva # kizÆr lag Ætfog hat k rrel megadhat A keresett könyvtár neve public. Ezek után az alábbi parancs- # beÆll tÆsok csal tudod az aktuális munkakönyvtáradba másolni az syslog facility = local5 ujcuccok.tg fájlt:

# Ætfog jellegß, de a moduloknÆl is [yodeldiva@helyi ~]# rsync # megadhat beÆll tÆsok tavoli::public/ujcuccok.tgz use chroot = yes uid = nobody A kétszeres kettõspont és az elérési útvonal formátuma is eltér

gid = nobody az SSH-módnál megismerttõl. Míg az SSH abszolút elérési t. Minden jog fennt max connections = 20 útvonalat vár a kettõspont mögött, az rsync démon egy timeout = 600 modulnevet keres, ami a fájl elérési útjának gyökereként read only = yes szolgál. Csak a példa kedvéért lássuk ugyanezt a parancsot SSH-módban: # pØldamodul:

[public]: [yodeldiva@helyi ~]# rsync -e ssh © Kiskapu Kf path = /home/public_rsync tavoli:/home/public_rsync/ujcuccok.tgz comment = NyilvÆnos fÆjlok hosts allow = helyi.valami.org, A két parancs természetesen nem teljesen egyenértékû, hiszen 10.18.3.12 a távoli gép rsync démonfolyamatát a könyvtár tartalmának ignore nonreadable = yes névtelen – vagyis hitelesítést nem végzõ – felhasználók szá- refuse options = checksum mára való elérhetõvé tételére állítottuk be, az SSH viszont dont compress = * minden alkalommal megköveteli a hitelesítést (igaz, ezt önmû- ködõvé is lehet tenni, ha nulla hosszúságú RSA vagy DSA kulcsot alkalmazunk; lásd a „Building Secure Servers with Linux” negyedik fejezetét). Nem is ez volt a lényeg, hanem az, hogy megmutassam az elérési útvonalak kezelésében jelent- 2. lista További rsyncd.conf modulok kezõ különbséget.

[bejovo] Az rsync bújtatása Stunnel segítségével path = /home/bejovo Az utolsó rsync használati mód, amirõl szót ejtek, a démon- comment = Ide rhatsz, de nem olvashatod módban futó rsync és az Stunnel párosítása. Az Stunnel read only = no olyan általános célú TLS- vagy SSL-burkoló, ami bármelyik ignore nonreadable = yes egyszerû TCP alapú átvitel titkosítással – és választható mó- transfer logging = yes don X.509 tanúsítvánnyal – védett beágyazására használható. Igaz, hogy SSH-módban futtatva az rsync titkosítással ruház- [Zenebolondok] ható fel, ám elveszti démonmódban elérhetõ szolgáltatásait, path = /home/cvs amik közül a névtelen hozzáférés lehetõségét emelném ki. comment = Zenebolondok CVS-tÆr Az Stunnel segítségével legalább olyan jó titkosítás érhetõ el, list = no mint SSH-val, de megtartható a névtelen kapcsolatok auth users = watt,bell támogatása is. secrets file = /etc/rsyncd.secrets Mi a helyzet az önhívással (recursio)?

Az rsync használata távoli rsync-kiszolgáló elérésére Azzal kezdtem, hogy az rsync mennyire hasznos, ha nagyobb Nehogy elfeledjem: még nem mondtam el, hogy rsync-kiszol- adatmennyiségeket – programarchívumokat, CVS-fákat – kell gálóhoz hogyan kell ügyfélként kapcsolódni. Az írásmód roppant egyszerû, a távoli állomás nevének beírásakor egy másolni, de összes példámban csak egy-egy állomány máso- helyett két kettõspontot kell használni, és a kívánt modulhoz lásáról volt szó. Ennek oka az, hogy elsõsorban az rsync biztonsá- abszolút helyett relatív elérési útvonalat kell megadni. gos használatát akartam bemutatni. Példaként vegyük elõ az elõzõ hónap felállását, amiben a helyi A rengeteg ügyféloldali (parancssori) rsync-kapcsoló felfedezésé- gépet helyinek, a távolit pedig távolinak hívtuk, és tegyük fel, nek örömét meghagytam neked, kedves olvasó. Mindenre kiter- hogy az ujcuccok.tgz fájlt szeretnénk letölteni, illetve a távoli jedõ leírást az rsync(8) súgóoldalon találsz. Különösen figyelemre gépen démonmódban fut az rsync. Emellett azt is feltesszük, méltó a -a (vagy --archive) kapcsoló, ami a -rlptgoD hogy nem emlékszünk már rá, hogy a távoli gépen milyen rövidítése, és a legtöbb fájltípusra – eszközökre és közvetett nevû modul alatt találhatók az új állományok. Elõször tehát le kell kérdezni az elérhetõ modulok listáját: hivatkozásokra is – vonatkozóan önhívó mûködést ír elõ; illetve a -C (vagy --cvs-exclude), ami az rsyncet CVS stílusú [root@helyi darthelm ]# rsync tavoli:: fájlkihagyási szabályok használatára utasítja a másolandó fájlok public NyilvÆnos fÆjlok kiválasztásakor. bejovo Ide rhatsz, de nem olvashatod

www.linuxvilag.hu 2003. június 57 Szaktekintély

Az Stunnelrõl részletesen is olvashatsz a „Building Secure magjaidat a távoli Stunnel-folyamat felé továbbítja. A távoli Servers with Linux” 5. fejezetében, ahol sok példában az Stunnel-folyamat visszafejti az általad küldött rsync-csoma- rsyncet is viszontláthatod. Akadhatnak olyanok is, akik szá- gokat, és átadja õket a távoli rsync-démonnak. A válaszcso- artva mára újdonság következik: magok természetesen ugyanezen a titkosított kapcsolaton keresztül érkeznek. Ebben az esetben az alábbi lépéseket kell a kiszolgálóoldalon végrehajtani Mint látható, maga az rsync most is nagyon hasonló beállítá- 1. Az rsyncd.conf beállításait a megszokott módon kell megadni. sokat használ, mint a névtelen csatlakozások esetében – a 2. Az rsyncet a --port kapcsolóval kell meghívni, és 873-tól munka túlnyomó része az Stunnel-továbbítók beállításával eltérõ kapuszámot kell megadni, például: kapcsolatos. rsync -daemon --port=8730

t. Minden jog fennt 3. Egy Stunnel-figyelõt (listener) kell életre hívni a 873-as TCP- Linux Journal 2003. április, 108. szám kapun, ami minden, ezen a kapun érkezõ bejövõ kapcsolatot az elõzõ lépésben megadott kapura fog irányítani. Mick Bauer ([email protected]) 4. Ha nem akarod, hogy bárki kedvére kapcsolódhasson a Hálózati biztonsági tanácsadó az Upstream géphez, a hosts.allow állományban tiltsd le a 2. lépésben Solutions Inc.-nél Minneapolisban (Minnesota). megadott kapura vonatkozó nem helyi kapcsolatokat. Mick a szerzõje a hamarosan megjelenõ

© Kiskapu Kf Emellett (vagy ehelyett) az IP Tables beállításait is hasonlóan új O'Reilly könyvnek, amelynek címe módosíthatod. „Building Secure With Linux”.  Az ügyféloldalon az alábbiak szerint alakulnak a dolgok 1. Lépj be rendszergazdaként, állíts be egy Stunnel-figyelõt a KAPCSOLÓDÓ CÍMEK 873-mas TCP-kapura (feltéve, hogy nincs rsync-kiszolgáló a helyi gépen, ami már használja ezt a kaput), ez az összes erre  a kapura érkezõ bejövõ kapcsolatot a távoli kiszolgáló 873- http://www.rsync.org/  mas TCP-kapujára fogja irányítani. http://samba.anu.edu.au/rsync  2. Amikor kapcsolódni akarsz a távoli kiszolgálóhoz, a távoli http://sunsite.dk/info/guides/rsync/rsync-mirroring.html  kiszolgáló neveként localhost-ot kell megadnod. A helyi http://freshmeat.net/projects/rsync/ Stunnel-folyamat csatlakozik a kiszolgálóhoz, és rsync-cso- Linux KapuLinux a világábavilágába

Ár: 3220 Ft Ár: 4900 Ft Ár: 2660 Ft Ár: 6440 Ft Ár: 2660 Ft Ár: 2660 Ft 281 oldal 397 oldal 256 oldal 672 oldal 256 oldal 256 oldal felhasználói szint: felhasználói szint: felhasználói szint: felhasználói szint: felhasználói szint: felhasználói szint: kezdõ, haladó kezdõ, haladó kezdõ–haladó kezdõ–profi kezdõ kezdõ melléklet: CD melléklet: CD www.kiskapu.hu Dobbantó

Héjprogramozás Linux alatt (2. rész)

Ismerkedjünk meg a héjváltozókkal, artva a parancssori kapcsolókkal és a feltételes utasításokkal!

ikksorozatunk elõzõ részében egy egyszerû héjprog- dent szövegnek tekint. A héjváltozóknak tehát nincs a hagyo- ramot kezdtünk el fejleszteni, ami a pillanatnyi mányos értelemben vett típusuk. Értékadásnál a szóközöket is könyvtár bejegyzései közül képes volt kiválogatni tartalmazó karakterláncot kettõs idézõjelek közé kell zárni. Caz alkönyvtárak neveit. A fejlesztés következõ lépéseként azt kellene megvalósítanunk, t. Minden jog fennt A forráskódja valahogy így festett: hogy programunk ne csak a pillanatnyi könyvtárban mûköd- jön, hanem parancssori kapcsolóként elfogadjon egy tetszõ- 1: #!/bin/sh leges könyvtárnevet. Héjprogramokban a parancssori kapcso- 2: ls -l | grep ^d lókra a $1, $2 stb. szimbólumokkal hivatkozhatunk; a parancs- 3: echo " sszesen"‘ls -l | grep ^d | wc -l‘" sorban az egyes kapcsolók tartalmát egy vagy több szóköz

alk nyvtÆr." választja el egymástól. Ha szóközt is tartalmazó karakterláncot © Kiskapu Kf akarunk egyetlen kapcsolóként megadni, akkor azt kettõs A harmadik sorban látható parancsbehelyettesítés hajszálpon- idézõjelek közé kell zárnunk. Programunkban – legalábbis elsõ tosan ugyanezt a mûveletet tartalmazza, pusztán azért, mert megközelítésben – csupán a második sort kell módosítani: a bejegyzéseket meg is akarjuk számolni. Nyilván az olvasó is érzi, hogy kétszer csinálni meg valamit ugyanabban a prog- 2: lista=‘ls -l $1 | grep ^d‘ ramban nem valami elegáns megoldás. Mennyivel szebb lenne, ha a második sor kimenetét átmenetileg tárolnánk valahol, és A dolog csaknem tökéletes, sõt új programunk még akkor is a harmadikban már csak fölhasználnánk! Nos, ezzel el is érkez- helyesen mûködik, ha elfelejtünk neki könyvtárnevet megadni. tünk a változók használatához. Ilyenkor „hagyományos módon” a pillanatnyi könyvtárral A héjprogramokban – akárcsak más programnyelvekben – gya- dolgozik. (Ebben ugyebár semmi természetfölötti nincs, hiszen korlatilag tetszõleges számú változót használhatunk. Ezeket a kapcsolók nélkül meghívott ls parancs is pontosan ezt teszi.) nem kell külön megadnunk, mivel abban a pillanatban, amikor Egyéb, különleges helyzetekkel próbálkozva azonban hamar értéket adunk nekik, önmûködõen létrejönnek. Elõzõ példánk rájövünk, hogy akad még két apró gond. Ha a megadott „elegánsabb kivitelben” a következõképpen fest: könyvtárból egyáltalán nem nyílnak alkönyvtárak, progra- munk az összesítésnél akkor is azt állítja, hogy azok száma 1; 1: #!/bin/sh ha pedig véletlenül nem létezõ könyvtárat adunk meg neki, 2: lista=‘ls -l | grep ^d‘ akkor az ls parancs szabványos hibaüzenete jelenik meg, de 3: echo "$lista" a program az összesítést ilyenkor is elvégzi. Az utóbbi csak 4: echo " sszesen"‘echo "$lista" | wc -l‘" csúnya, az elõbbi azonban kifejezetten hiba. alk nyvtÆr." A téves összegzés okára kezdõ héjprogramozók igen nehezen szoktak rájönni, és ez nem véletlen. Józanul gondolkodó ember A második sor kimenete most egy lista nevû változóba kerül. ugyanis azt hinné, hogyha egy változóban nincs semmi, akkor Ezt a tartalmat a következõ sorban egy echo paranccsal rögtön az echo kimenetén is „semmi” fog megjelenni – ez azonban a képernyõre küldjük, a rákövetkezõben pedig ugyanezt a csak majdnem igaz. Az echo ugyanis alapértelmezésként parancsot használva megszámoljuk és kiíratjuk, hogy a tartal- akkor is kiküld egy újsor karaktert, ha semmi dolga nem lenne. ma hány soros. Ezt pedig a wc boldogan megszámolja, hiszen számára az üres Figyeljük meg, hogy az új változót minden különösebb teke- sor is sor. Az echo alapértelmezett viselkedését a -n kapcso- tória nélkül vezettük be, egyszerûen a rá vonatkozó értékadás- lóval a 4. sorban lehet letiltani: sal (2. sor). Amikor azonban a tartalmához akarunk hozzáférni, a $ dollárjelet kell közvetlenül a neve elé írni (3. és 4. sor). 4: echo " sszesen"‘echo -n "$lista" | wc -l‘" Szintén érdemes megjegyezni, hogy a 4. sorban alkalmazott alk nyvtÆr." parancsbehelyettesítés szemmel láthatóan nem gátolja a válto- zó tartalmára való hivatkozást. Ugyanakkor mindkét érték A hibás kapcsolók kezeléshez természetesen egy logikai elága- szerinti hivatkozást kettõs idézõjelek közé zártuk – erre csak zást fogunk beiktatni, ami aszerint mûködik, hogy a parancs- akkor van szükség, ha a változó tartalmában valamilyen sori kapcsolóként megadott néven létezik-e könyvtár. Ez azon- különleges karakter (jelen esetben új sor) is található. A kettõs ban már sorozatunk következõ részének a témája lesz. idézõjel megakadályozza, hogy a héj értelmezze ezeket a Büki András karaktereket. Esetünkben, ha megszüntetjük az idézõjelezést, ([email protected]) akkor az echo egyetlen hosszú sorként jeleníti meg a változó Körülbelül kilenc éve dolgozik Linux valójában többsoros tartalmát, és a wc is csak egy sort fog operációs rendszerrel. Állandó szerzõtársa érzékelni (próbáljuk ki!). Prof. Dr. H. V. Kuksinak, akivel a Duna vagy a Egy héjváltozóban bármit (karaktert, egy- vagy többsoros Tisza partján szoktak az élet és a tudomány szöveget, számot) elhelyezhetünk, maga a héj azonban min- viselt dolgairól töprengeni.

www.linuxvilag.hu 2003. június 59 Dobbantó

artva Operációs rendszerek (12. rész) Írásunkban a Unix, illetve a Linux memóriakezelõnek a rendszerhívásokkal való kapcsolatát tárgyaljuk, valamint a jelek, a fork és az exec használatát mutatjuk be.

z idáig memóriakezeléssel foglalkoztunk, pontosabban már mindenki találkozott. Ami viszont magyarázatra szorulhat,

t. Minden jog fennt bemutattuk, hogyan mûködik a virtuális memória. az az, hogy mi is voltaképpen az az euid és az egid, azaz a tény- Szó volt ennek gyakorlati megvalósításáról is, méghozzá leges (effektív) felhasználó-, illetve csoportazonosító. Ez az Eéles rendszereken bemutatva. A memóriakezelõ feladata azonosító az, amelyik ténylegesen számít egy feladat elvégzé- azonban még nem ér véget ezen a ponton – például kezelnie sekor. Gondoljunk a SETUID-os programokra! Lényegtelen, kell a rendszerhívásokat és a jelekkel is foglalkoznia kell. hogy ki indítja el, a program akkor is megteheti mindazt, amit Folyamatstrukturált rendszerekben a memóriakezelõt az esz- a tulajdonosa is megtehet. Ha tehát egy futtatható állomány

© Kiskapu Kf közközeli rendszermagvilág és a felhasználói réteg közötti a rendszergazda tulajdonában van, és rendelkezik a SETUID határként is felfoghatjuk. (Ez részben a monolitikus rendsze- bittel, akkor a tényleges jogosultsága meg fog egyezni a rend- rekrõl is elmondható, de ott az effajta rétegzõdés nem ennyire szergazdai jogosultságokkal. (Ha a tényleges jogosultságok nyilvánvaló). A memóriakezelõ szorosan együttdolgozik a fogalma egy kicsit homályos, ne bánkódjunk, a következõ maggal, de nem foglalkozik az eszközök alacsony szintû hasz- részben a fájlrendszer kapcsán sokat fogunk vele foglalkozni.) nálatával: a felhasználói folyamatokkal törõdik. Az utolsó fogalom, amire szükség lesz, a tgrp-id, más néven Ezért a memóriakezelõ életében nagyon fontos szerepet tölte- terminál-csoportazonosító. Ennek az értéke annak a folya- nek be a rendszerhívások. Emlékezzünk vissza sorozatunk elsõ matnak a PID-jével egyezik meg, amelyik az adott folyamat- részére, ahol azt mondtuk, hogy a rendszerhívásokkal érhetjük hoz tartozó terminál eszközfájlját legelõször megnyitotta. el az operációs rendszer szolgáltatásait. Ezeket a felhasználótól (ez az esetek többségében nem más, mint a jelszóparancsfájl). érkezõ rendszerhívásokat valakinek értelmeznie kell, a kívánt Most, hogy már mindent elsoroltunk, vágjunk is bele a közepébe! feladatot végre kell hajtania (vagy egy alacsonyabb szinten lévõ alrendszerrrel el kell végeztetnie), majd a végeredményt A jelek vissza kell juttatnia a rendszerhívást végrehajtó számára. Erre A jelekre már sokszor hivatkoztunk, arról azonban, hogy pon- a feladatra valóban a memóriakezelõ a legalkalmasabb. tosan mik ezek és mire is valók, aligha beszéltünk részletesen. A rendszerhívásokat egyébként két részre oszthatjuk fel: Most változtatunk a helyzeten, és elmesélünk mindent, amit azokra, amiket a memóriakezelõ szolgál ki, és azokra, amiket a a jelekrõl tudni érdemes. fájlrendszer. Az elõbbi csoportba nemcsak azok a szolgáltatások Sorozatunk harmadik részében, amikor az IPC-vel (a folya- tartoznak, amelyek egy-egy memóriablokk lefoglalását, illetve matok közötti kapcsolattartással) foglalkoztunk, több olyan felszabadítását teszik lehetõvé, hanem olyanok is, mint például nehézséget is bemutattunk, amelyeknek a feloldásához elen- egy gyermekfolyamat létrehozása, egy alkalmazás elindítása gedhetetlen, hogy két folyamat egymással „beszélni” tudjon. vagy például egy jel elküldése. Sorozatunk mostani részében Ezekben a példákban az volt a közös, hogy amikor egy folya- ezekkel a rendszerhívásokkal foglalkozunk, a fájlrendszerrel mat már nem tudott tovább dolgozni (például az étkezõ pedig a következõ hónaptól kezdve ismerkedünk meg részle- filozófusok esetében nem állt rendelkezésre mind a két villa), tesebben is. Mindenekelõtt elevenítsünk fel pár fogalmat! akkor a folyamat blokkolt, és egészen addig várt, amíg valaki fel nem ébresztette. Néhány alapvetõ fogalom Az elõzõ mondat kulcsszava a „várt”. A gond ott van, hogy A továbbiakban néhány olyan alapvetõ unixos fogalommal jó lenne, ha egy folyamattal akkor is tudnánk adatot közölni, fogunk dobálózni, amelynek az egyik részérõl már szóltunk, amikor dolgozik, azaz éppen semmiféle bemenetre nem számít. a másik részérõl még nem – az a közös bennük, hogy nem árt Erre találták ki a jeleket – segítségükkel bármelyik idõpil- tisztában lenni a jelentésükkel. lanatban jelezhetünk bizonyos dolgokat az éppen futó folyama- Az elsõ ilyen fogalom a folyamatazonosító, vagyis a PID (Process toknak, tekintet nélkül arra, hogy az éppen min munkálkodik. ID). Egy olyan természetes számról van szó, amibõl minden (Az már más kérdés, hogy az adott folyamat mit csinál a beér- folyamat birtokol egyet, ugyanis a rendszer csak ennek alapján kezõ jelzéssel, az is elõfordulhat, hogy figyelmen kívül hagyja.) azonosítja magát a folyamatot. Talán felesleges megjegyeznünk, A jelek csak elsõ hallásra tûnhetnek valamiféle titokzatos hogy két folyamatnak egyidejûleg nem lehet ugyanaz az azono- dolognak. Valójában teljesen hétköznapi dolgok a rendszer sítója. Sõt, ha a rendszer egy azonosítót egyszer már kiosztott, életében, sõt minden bizonnyal mindenki küldött már jelet azt soha többé nem osztja ki újból (pontosabban addig, ameddig egy folyamatnak. Gondoljunk csak arra, mit csinálunk, ha újra nem indítjuk). egy alkalmazás lefagyott. Vannak rendszerek, amikor a Reset Nemcsak a felhasználók, de a folyamatok is csoportokba szer- gomb megnyomása az egyetlen kiút, de a Linux nem tartozik vezhetõk. Minden folyamat rendelkezik egy folyamat-csoport- közéjük. Elegendõ, ha egy SIGTERM, súlyosabb esetekben egy azonosítóval is. Ilyen módon lehetõvé válik, hogy nemcsak egy SIGKILL nevû jelet küldünk az adott folyamatnak, ami ennek folyamatnak, hanem egy egész folyamatcsoportnak jeleket hatására az fejvesztve menekül a memóriából. (A Unixban a küldhessünk (lásd késõbb). jelek küldésére a kill utasítás szolgál. Sokan úgy gondolják, A felhasználókat és a (felhasználói) csoportokat szintén számok- hogy ezt a parancsot egy folyamat megsemmisítésére találták kal azonosítjuk, ez az uid és a gid, velük valószínûleg ki, pedig eredeti feladata a jelküldés. Az más kérdés, hogy

60 Linuxvilág Dobbantó

szinte minden esetben a SIGTERM és a SIGKILL jel elküldé- Ha érvényben van, akkor fel kell jegyezni, hogy milyen jelet sére használják, de bármi mást is továbbíthatunk a segítségé- kapott, és – amint a blokkolás megszûnik – ismételten el kell vel. A jelekrõl listát a kill -l utasítással kaphatunk.) küldenie a memóriakezelõnek (természetesen a SIGTERM jelre artva Hogy egy alkalmazás mit tesz a beérkezõ jelekkel, az kizárólag a blokkolás nem vonatkozik). a programozón múlik. Mindenesetre a jelek kezelése meglehe- Ha a blokkolás érvénytelen, akkor két eset lehetséges: a folya- tõsen kényelmes feladat: csupán annyi a feladatunk, hogy a mat vagy foglalkozik az adott jellel, vagy figyelmen kívül program indulásakor a SIGACTION nevû rendszerhívás segít- hagyja. Elõször nézzük meg az elõbbi esetet! Ilyenkor a ségével átadjuk annak az eljárásnak a címét, amelyik majd a jel kezeléséért felelõs lesz. Például a SIGTERM jelhez is rendel- hetünk egy ilyen eljárást, ami nem csinál mást, mint lezárja az összes megnyitott állományt, ezután visszaadja a folyamat által foglalt memóriát. Ennek köszönhetõen, ha véletlenül végtelen t. Minden jog fennt ciklusba kerül a folyamat, a SIGTERM jel hatására ki fog lépni. Ugyanennek a rendszerhívásnak a segítségével lehetõségünk nyílik a beérkezõ jelek figyelmen kívül hagyására is. Ilyenkor hiába küldözgetünk lázasan jeleket, semmi sem fog történni. A jeleket blokkolhatjuk is, ez a folyamat annyiban különbözik

az elõzõtõl, hogy a beérkezõ jelek tárolva lesznek, és a folyamat © Kiskapu Kf csak a blokkolás megszüntetése után kapja meg õket. Ha nem készítünk ilyen eljárást, akkor az adott folyamat figyel- mem kívül fogja hagyni a beérkezõ jeleket, még a SIGTERM-et is. (Pontosabban, ha egy folyamat a SIGACTION rendszerhívás segítségével nem rendel jelkezelõ eljárást egy jelhez, akkor az adott jel beérkezésekor a memóriakezelõ egy alapértelmezett tevékenységet fog elvégezni. Hogy ez pontosan mi is, az az adott jeltõl függ, de általában két dolgot jelenthet: vagy nem memóriakezelõnek ki kell számítania, hogy a címzett folyamat történik semmi, vagy kilövi a folyamatot.) pontosan hol is helyezkedik el a memóriában, továbbá meg Létezik azonban egy jel, amit egyetlen folyamat sem vehet kell hívnia a jelkezelõ eljárást. Ez azonban nem egyszerû semmibe: ez pedig a SIGKILL. Ezt a jelet ugyanis nem a folya- mûvelet, ugyanis elõbb mentenie kell a folyamat pillanatnyi matnak kell kezelnie, hanem a memóriakezelõnek. A folyamat állapotát (erre azért van szükség, hogy a folyamat ugyanon- nem is tud róla, hogy neki SIGKILL-t küldtek, és esélye sincs nan folytathassa munkáját, ahol a jel beérkezése elõtt tartott). védekezni ellene. Ilyen jelre nyilvánvalóan szükség van, mert Erre a folyamat vermét szokás használni. Ezzel az a gond, enélkül lehetetlen lenne megszabadulni az olyan lefagyott hogy korántsem biztos, hogy a veremben elegendõ szabad alkalmazásoktól, amik nem válaszolnak a SIGTERM-re. Viszont hely van az összes adat mentésére, ezért még mielõtt bármi érdemes a beragadt programok ellen bevethetõ legeslegutolsó érdemlegeset cselekednénk, ellenõrizni kell, hogy valóban „fegyvernek” meghagyni, ugyanis ilyenkor nincs lehetõsége elfér-e minden a veremben. Ha nincs elég szabad hely, akkor a memóriában lévõ adatokat a lemezre írni, míg a SIGTERM baj van, mert a rendszer nem tehet mást, minthogy kilövi a esetében ezt még megteheti. folyamatot (szerencsére ma már elég ritkán fordul elõ, hogy a folyamat verme megtelik). A folyamat állapotának mentését A jelek és a memóriakezelõ kapcsolata a memóriakezelõ nem tudja elvégezni, ezért az alacsonyabb Most már tudjuk, mi történik akkor, ha egy folyamathoz jel szinten lévõ rendszermaghoz fordul. A jelkezelõ eljárás csak érkezik. Az azonban még mindig homályos folt számunkra, ezután kerül meghívásra. Miután a folyamat a szükséges hogy miként juttatja õket a rendszer célba. teendõket elvégezte, meghívja a SIGRETURN rendszerhívást, A jelek alapvetõen kétféleképpen keletkezhetnek: vagy egy aminek hatására a verembõl visszaállítódik a régi állapot folyamat által, a kill rendszerhívás segítségével (ez az eset (ezt is a mag végzi). megegyezik azzal, amikor a felhasználó kiadja a kill utasí- Ha viszont a folyamat nem rendelkezik jelkezelõ eljárással, tást), vagy maga a rendszermag hívja életre õket. A rendszer akkor a memóriakezelõ az adott jelhez tartozó „alapértelmezett számára lényegtelen, miképpen is keletkezett az adott jel, tevékenységet” fogja elvégezni. Ez két dolgot jelenthet: vagy a célbajuttatás módja minden esetben megegyezik. nem fog történni semmi (azaz a memóriakezelõ figyelmen Elõször is meg kell állapítanunk, hogy ki kinek küldte az adott kívül hagyja a jelet), vagy kilövi a folyamatot. Az utóbbi eset- jelet, és van-e hozzá jogosultsága. A jogosultság ellenõrzésekor ben mindig készül egy úgynevezett core dump állomány, ami az az alapelv, hogy egy rendszergazdai folyamat mindenkinek az adott folyamat memóriatérképét tartalmazza (ehhez a fájl- küldhet jelet, viszont mindenki más csak azoknak, akiknek a rendszer közremûködése is szükséges). felhasználói azonosítói megegyeznek az sajátjáéval. Például minden általunk elindított alkalmazásnak küldhetünk Amikor egy folyamat elindul… SIGKILL-t, de más felhasználó folyamatait ilyen módon nem A Unixban kétféleképpen keletkezhet új folyamat. Létrejöhet tudjuk kiiktatni. A rendszergazdára ilyen megkötés nem vonat- úgy, hogy egy – már létezõ – folyamat szétágazik, azaz a kozik, õ bárkinek a folyamatát leállíthatja. A dolog azért nem fork rendszerhívás segítségével gyermekfolyamatot hoz ilyen egyszerû: a memóriakezelõnek olyasmire is figyelnie kell, létre. De megszülethet olyan módon is, hogy egy folyamat hogy a címzett véletlenül nem zombifolyamat-e (mert ilyennek egy másik programot indít el maga helyett. Erre az exec nincs értelme jelet küldeni). nevû rendszerhívás alkalmas. A két rendszerhívás tehát Ezután ellenõrizni kell, hogy a címzett folyamat az adott jelet teljesen másra használható és másképpen is mûködik, azon- figyelembe veszi-e, illetve érvényben van-e a jelek blokkolása. ban van bennük két közös dolog: mindkettõ új folyamatot

www.linuxvilag.hu 2003. június 61 Dobbantó

1. lista Példa egy gyermekfolyamat létrehozására 2. lista

artva Példa az exec rendszerhívás végrehajtására az execle() result = fork(); // gyermekfolyamat könyvtári függvény segítségével. Ez a sor a /bin/ls program lØtrehozÆsa meghívását eredményezi – ugyanaz, mintha a if (result < 0) // ha a visszatØrØsi parancsfájlban kiadtuk volna az „ls -l claudia.jpg” utasítást. // ØrtØk negat v ... { r=execle( /bin/ls","ls","-l", // hiba zenetet "claudia.jpg",(char *)0, envp); } else { if (result == 0) Az elsı ØrtØk a binÆris ÆllomÆny nevØt

t. Minden jog fennt { tartalmazza. A k vetkezı ØrtØk magÆnak a // ezt fogja csinÆlni a parancsnak a neve (ez egyØbkØnt elhagyhat ), // gyermekfolyamat a harmadik Øs a negyedik ØrtØkkel a } vØgrehajtand parancs kapcsol it adhatjuk else meg. Mivel t bb ØrtØket is meg lehet adni, { sz ksØg van rÆ, hogy jelezni tudjuk, mikor

© Kiskapu Kf // ezt pedig a sz lı Ør vØget a felsorolÆs. Erre szolgÆl a } (char *)0. Az utols ØrtØk az œj programnak Ætadand parancsfÆjlvÆltoz kra mutat.

hoz létre és memóriafoglalást hajt végre. A továbbiakban mind a kettõvel megismerkedünk. 3. lista Példa az exec és a fork rendszerhívások ötvözésére Gyermekfolyamatok Egy folyamatnak tehát a FORK rendszerhívás segítségével int result; gyermekfolyamatok létrehozására nyílik lehetõsége. A gyer- if (fork() == 0) mekfolyamat csaknem pontos másolata lesz a szülõfolyamat- { execle("/bin/ls","ls","-l",(char nak: ugyanannyi memóriát foglal el és ugyanazt a kódot is *)0,envp); } használja. A gyermek azonban egy különálló folyamat, azaz else { a szülõvel (és a többi folyamattal) párhuzamosan fog futni. wait(&result); } Hogy megértsük, mit is jelent ez a gyakorlatban, vessük egy pil- lantást az 1. listára, ahol egy gyermekfolyamat létrehozására lát- hatunk példát. Azok kedvéért, akik nem jártasak a C programo- A jogosultságokon kívül a munkakönyvtárban és a jelkezelõ zási nyelvben, röviden elmeséljük, mi történik. Elõször is meg- eljárásokban sincs különbség a gyermek és a szülõ között. hívjuk a fork rendszerhívást (pontosabban a fork() könyvtári A gyermek ugyanakkor az ütemezõ számára független folya- eljárást, ami majd intézkedik, hogy a fork rendszerhívás vég- mat, így egyedi folyamatazonosítóval (PID-del) kell rendel- rehajtódjon). A mûvelet végeredménye egy szám lesz (amit a keznie. Akad még pár dolog, amibõl a gyermekfolyamat saját- result nevû változóban tárolunk). Ha az értéke negatív, akkor tal bír, ilyenek például a fájlleírók, de errõl majd a fájlrendszer nem jártunk sikerrel, például azért, mert nem volt elég szabad tárgyalásakor beszélünk részletesen. memória. Ilyenkor nincs más teendõnk, mint egy hibaüzenetet kiíratni és kilépni. Ha azonban a result értéke 0 vagy nagyobb, Az exec rendszerhívás akkor a gyermekfolyamat megszületett. Ne felejtsük el, hogy a A fork rendszerhívást abban az esetben használhatjuk, ha gyermek és a szülõ kódja ugyanaz, tehát innentõl kezdve a a gyermeknek valamilyen a szülõfolyamathoz hasonló fela- gyermek is ezt a kódot hajtja végre! A különbség csupán annyi, datot kell ellátnia. A gyakorlatban azonban ilyesmi viszonylag hogy a gyermek esetében a változó értéke 0, míg a szülõnél a ritkán fordul elõ. A helyzet az, hogy legtöbbször valamiféle létrejött gyermek folyamatazonosítóját (PID-jét) tartalmazza. a szülõfolyamattól teljesen független dolgot kell tennie. Ilyen módon lehetõség nyílik annak eldöntésére, hogy az adott Sõt van olyan eset is, amikor csak a folyamat futása közben kódot most a szülõ- vagy a gyermekfolyamat hajtja-e végre. dõl el, hogy pontosan mi is lesz a feladata. (Gondoljunk a Meg kell jegyeznünk, hogy a fork rendszerhívást „gonosz” parancsértelmezõre, amiben egy – a felhasználó által meg- dolgokra is fel lehet használni, például arra, hogy egy folyamat adott – állományban lévõ kódot kell végrehajtatni.) Ilyenkor nagyon sok példányban elõállíthassa magát, leterhelve ezáltal mindig az exec rendszerhívást kell alkalmazni, ami mind a processzort és „felzabálva” a szabad memóriát. Az ilyen prog- közül a legbonyolultabb. ramokat forkbombáknak nevezzük. Hatékonyan védekezni (A fork és az exec közötti különbséget a legkönnyebben úgy ellenük csak az erõforrások használatának korlátozásával lehet, érthetjük meg, hogy a fork-ot úgy képzeljük el, mint a saját de a jelenlegi Linux-terjesztések szerencsére már alapból programunk szétágaztatását, azaz a különbözõ részfeladatokat védettek az efféle támadások ellen. egymással párhuzamosan, külön folyamatként végeztetjük el. A gyermekfolyamat nemcsak a szülõ kódját, hanem a jogo- Az exec esetében viszont egy, a miénktõl teljesen független sultságait is örökli. Ha nagyon pontosak szeretnénk lenni, programot hívunk meg. Fontos, hogy az ilyenkor nem a mi akkor ezt valahogy úgy lehetne megfogalmazni, hogy a gyer- folyamatunkkal párhuzamosan, hanem ahelyett fut. A mi mekfolyamatok öröklik a szülõt futtató felhasználó- és cso- programunk csak akkor folytatódik, ha az exec-kel indított portazonosítót, továbbá a tényleges felhasználó- és csoport- alkalmazás már lefutott.) azonosítókat is. Az exec rendszerhívásnak nemcsak a megvalósítása nehéz,

62 Linuxvilág Dobbantó

hanem a meghívása is egy kissé bonyodalmas. Ráadásul káját, akkor meg kell hívnia az exit nevû rendszerhívást. nemcsak egy, hanem többféle könyvtári eljárás is létezik az Ennek a rendszerhívásnak egy értéket is át kell adnia, még- exec rendszerhívás végrehajtására. Leggyakrabban az pedig egy 0 és 255 közé esõ számot. Ez az úgynevezett kilépési artva execle()-t szokás használni, aminek használatára – érde- helyzet (exit-status), ami arra szolgál, hogy a szülõfolyamat kesség gyanánt – a 2. listán láthatunk példát. értesülhessen róla, hogy a gyermeke milyen eredménnyel Az esetek többségében a fork-ot és az exec rendszerhívást végezte el feladatát. (Ha például a gyermek 0-s státusszal tér a 3. listán látható módon egyszerre szokás használni. Az elv vissza, akkor sikeresen, ha valami mással, akkor sikertelenül.) nagyon egyszerû: a fork-kal egy gyermekfolyamatot hozunk A gyermekfolyamat végleges megszûnéséhez azonban egy létre, ami nem tesz mást, minthogy az exec-kel elindítja a második lépésre is szükség van, mégpedig arra, hogy a szülõ megadott programot. Az ilyen módon indított alkalmazás a meghívja a wait rendszerhívást. Ez arra szolgál, hogy a szülõ szülõfolyamattal párhuzamosan képes futni. Ez az alapja a várakozhasson arra, hogy a gyermeke meghívja az EXIT-et, és

Unix-parancsértelmezõknek (például sh, bash) is. utána visszakaphassa annak kilépési helyzetét. t. Minden jog fennt Felmerülhet a kérdés, hogy miért nincs olyan rendszerhívás, Amíg azonban a szülõ nem hívja meg a wait-et (de a gyermek ami ilyen formában egyesíti a fork és az exec tulajdonságait. már végrehajtotta az exit rendszerhívást), addig a gyermek- A válasz az, hogy felesleges lenne. Ezzel csak bonyolítanánk az folyamat úgynevezett zombiállapotba kerül. Ez amolyan átme- életünket, mivel gondoskodnunk kellene a szabványos ki- és net az „élet és a halál” között, azaz már visszaadta a számára bemenet (az az eszköz, ahová a program az eredményt kiírja, lefoglalt memóriaterületet és ütemezésre sem kerül, viszont a

illetve ahonnan az adatokat bekéri) oda-visszairányításáról. folyamattáblában továbbra is jelen van. Ez az állapot általában © Kiskapu Kf Ehelyett a létrejött gyermekfolyamatnak csak le kell zárnia a csak rövid ideig tart. Ha azonban valamilyen okból kifolyólag pillanatnyi be- és kimenetet, majd egy új megnyitása után a szülõfolyamat még azelõtt megszûnik, hogy kiadta volna a meghívni az exec-et (a gyermekfolyamatok ugyanis az átirá- wait-et, a gyermekfolyamat sosem lesz képes kikerülni a zom- nyított ki- és bemenetet is öröklik). biság csapdájából. Az exec rendszerhívás megvalósítása jóval bonyolultabb a Hogy ne kísérthessenek mindenféle élõhalott folyamatok a fork-énál. Az utóbbinál „mindössze” annyi a feladat, hogy folyamattáblában, egy szülõfolyamat megszüntetésekor bizo- a folyamattáblában létre kell hozni egy új bejegyzést, majd a nyos intézkedések megtételére van szükség – szülõt kell talál- szülõ adatait be kell másolni a gyermekhez. Az exec esetében nunk az árván maradt gyerekfolyamatok számára. azonban már egy teljesen új memóriatérképet kell létrehozni, A legkézenfekvõbb „apajelölt” az init – ami az egész folya- továbbá a fájlrendszerrel is együtt kell mûködni, mivel mégis- matfa gyökerét képezi –, mivel ez a folyamat sosem fog csak a lemezrõl olvassuk be a futtatni kívánt kódot. megszûnni. Az exec rendszerhívást a gyermek hajtja végre, Amikor elindítunk egy programot (például a parancssorban így a szülõfolyamat tovább dolgozhat. Igaz, ebben a példában kiadjuk az ls utasítást, ami a /bin/ls program meghívását a szülõ csak annyit tesz, hogy vár a gyermekfolyamat eredményezi), akkor mind a memóriakezelõnek, mind a fájl- befejezõdésére. rendszernek rögtön ellenõrzést kell végrehajtania. Elõször is (Az init-rõl már volt korábban szó, amikor is a boot mûvele- meg kell állapítaniuk, hogy egyáltalán van-e jogosultságunk teket tárgyaltuk. Ez egy olyan egyszerû program, amit maga futtatni az adott állományt (ez a fájlrendszer feladata), továbbá a rendszermag indít el, miután betöltõdött a memóriába és utána kell járniuk, hogy van-e elég szabad memória (ezt pedig befûzte a gyökérlemezrészt. Az init-nek egyetlenegy feladata a memóriakezelõ intézi). Ha ezek közül egy is negatív van: minden terminál számára elindítja a login nevû bejelent- eredménnyel jár, a program indítása meghiúsul. kezõ programot. Ezután blokkolt állapotba kerül, és így is Azt, hogy pontosan mennyi memóriára is van szükségünk, a marad, amíg magát a rendszert le nem állítjuk – pontosabban bináris állomány fejlécébõl olvashatjuk ki, ami a szakaszok, az init sosem hajt végre exit rendszerhívást, de azért idõn- illetve az egész program méretét tartalmazza. Ezután következ- ként meghív egy wait-et, hogy az árván maradt zombifolya- het a memóriafoglalás. A hívó program memóriáját akár fel is matoktól megszabaduljunk.) szabadíthatjuk. A következõ lépés a kód betöltése és a tényle- A következõ részben utolsó nagy témakörünk kivesézését ges jogosultságok beállítása (ellenõrizni kell a SETUID és kezdjük meg, mégpedig a fájlrendszerét. Ez egy nagyon össze- SETGID biteket). A folyamattáblába való beírás csak ezt köve- tett alrendszer, ugyanis nemcsak hatékonyan és biztonságosan tõen mehet végbe. Utolsó lépésként a rendszermagot meg kell kell tárolnia a lemezen lévõ adatokat, de a felhasználóhitelesí- kérnünk a folyamat futtatására. tés kérdése is kulcsszerepet kap az esetében; mindemellett a memóriakezelõvel is barátkoznia kell. Élõhalottak a memóriában? Minden folyamat számára eljön egyszer a vég. Ez a vég Garzó András ([email protected]) beköszönhet egyrészt egy jel képében, amikor is a program Körülbelül három éve foglalkozik Linux- és más Unix-rendszerekkel. felszólítást kap a memóriából való távozásra. Másrészt úgy Legjobban az operációs rendszerek lelkivilága érdekli, de nyitott is vége szakadhat létezésének, ha egyszerûen az összes egyéniség. Kedvenc étele a palacsinta, és van egy Richard nevû feladatát elvégezte. Ha egy gyermekfolyamat befejezte mun- macskája. Minden észrevételt, megjegyzést, levelet szívesen fogad.

www.linuxvilag.hu 2003. június 63 Dobbantó

artva Én, a robot

Önmûködõ webes ügynök Asimov módra.

Web életünk részévé vált. A böngészés nemcsak gyors Az URI használata és egyszerû módja az információszerzésnek, hanem A liburi-perl része az URI-modul. Segítségével URI-kkal (Uni- t. Minden jog fennt A gyakran az egyedüli is. Ugyanakkor a Weben talál- form Resource Identifier) kapcsolatos mûveleteket végezhetünk. ható ismeretanyag hatalmas mérete és a mindennapi feladatok Egyszerû objektumközpontú felülettel bír, csakúgy, mint az LWP. nyomasztó sokasága miatt az adatszerzést magát jó lenne Nekünk most azért lesz rá szükségünk, mert a keresési kifejezé- önmûködõvé tenni. Ezt az igényt remekül kielégítené Asimov sünket (a fenti esetben a kutyát) a felhasználó határozza meg. beszélõ robotja, amit önálló munkákkal bízhatnánk meg. Amíg Ezért szükségünk van arra, hogy az ékezetes betûket, szóközö- azonban nem írunk 2058-at, marad a Perl. ket és egyéb hasonló különleges karaktereket szabványos, cím-

© Kiskapu Kf Ez a cikk egy olyan robot elkészítésérõl szól, ami meglátogat ben is használható formára hozzuk. Például egy címben nem egy keresõmotort, végrehajtja a keresést, a kapott eredménybõl szerepelhet szóköz, ezért a %20 kifejezés helyettesíti. E felada- kiszûri a hivatkozásokat, és kiírja õket a képernyõre. A bámu- tunkat az URI-modullal könnyedén megoldhatjuk. Mindössze latosan egyszerû példán keresztül bemutatom az LWP, URI, létrehozunk egy URI objektumot, majd az as_string elem- illetve HTML-modulok használatát. Ebbõl kiindulva már össze- függvényt meghívva megkapjuk a kívánt szabványos címet. tett ûrlapok kitöltését végzõ ügynökök is könnyedén írhatók. A puding próbája Ha keresés, akkor Google Eddigi ismereteinket összegezve lássunk egy függvényt, A  http://www.google.co.hu/-t fogjuk használni a kereséshez. ami az értékként megadott szövegre keres rá a Ahhoz, hogy megkapjuk a keresés eredményeit tartalmazó  http://www.google.co.hu-n (lásd az 1. listát). oldalt, a robotnak nem kell meglátogatnia a fõoldalt. Vessünk Fontos megjegyezni, hogy a $ua->request függvény meghí- csak egy pillantást a forrásra: vásáig semmilyen kapcsolattartás nem zajlik a hálózaton. Elsõ- ként létrehozzuk a kívánt objektumokat, majd egy függvény-

hívással felvesszük a kapcsolatot a kiszolgálóval, elküldjük a kérést, megkapjuk a választ, és lezárjuk a kapcsolatot. A függ- Majd lejjebb:

use LWP::UserAgent; use URI; Nagyjából ennyibõl áll az egész ûrlap. A fejlécben található Java- Script még beszúr néhány rejtett mezõt, amelyek a karakterkódo- sub search { lást és az ehhez hasonló feladatokat határozzák meg. Ezek most a my $page = mi szempontunkból nem érdekesek. Ha a elemnek nincs ’http://www.google.co.hu/search?q=’; method értéke, akkor alapértelmezésben GET-et használ, vagyis # amit meglÆtogatunk az ûrlap adatai a címben fognak szerepelni. Mivel a szövegbeviteli mezõ neve q, például a kutya szóra való rákeresés így történik: my $ua = LWP::UserAgent->new; # a UserAgent objektum lØtrehozÆsa http://www.google.co.hu/search?q=kutya $ua->agent("Mozilla/5.0"); # kicsi f llentØs: azt mondom, Mozilla vagyok A robotnak tehát elsõ lépésben le kell töltenie a fenti címrõl a HTML-állományt. Ebben segít az LWP. Debian alatt a libwww- my $q = URI->new(shift); perl csomag része, de természetesen a CPAN-ról is le lehet tölteni. # az ØrtØkbıl egy URI objektum

Az LWP használata my $req = HTTP::Request->new( GET => Oldalakon keresztül írhatnék az LWP korlátlan lehetõségeirõl, $page . $q->as_string ); most azonban csak néhány alapfogást mutatok be. Az LWP egy # egy kØrØsobjektum objektumközpontú felület mögé rejti a TCP/IP-s kapcsolatfel- vételt, a HTTP-protokollt és a hibakezelést. A programozónak my $res = $ua->request($req); egy oldal eléréséhez alig kell többet tudnia annak címénél. # a kØrØs vØgrehajtÆsa Elõször létre kell hozni egy úgynevezett felhasználói ügynököt (UserAgent). Ennek az objektumnak a request elemfüggvé- die $res->message . "\n" nyét kell egy HTTP-kéréshez meghívni. A függvény egy kérés- if $res->is_error; objektumot vár értékként, amit szintén egy egyszerû new utasí- # ha nem siker lt tással hozunk létre. A visszatérési érték ugyancsak objektum, return $res->content; # ha siker lt aminek különbözõ tulajdonságai tartalmazzák a válasz HTTP- } kódját, annak szöveges jelentését stb.

64 Linuxvilág Dobbantó

vényt egyszerûen kipróbálhatod, ha a program végére Még egy próba beszúrod a következõ sort: Ezek után lássuk azt a függvényt, ami egy Google találati oldal- ból kiszûri az eredmények hivatkozásait. A függvény értéke a artva print search("kutya"); HTML-oldal (lásd a 2. listát; 48 CD Magazin/Robot könyvtár). Látható, hogy a handler függvény elsõ értékében az ese- Ekkor a program lefutása után a képernyõn a kutya szóra ményhez tartozó függvényt a címével adtam meg. Lehetõség történõ keresés eredményének HTML-oldalát látod. van egyszerûen a nevével hivatkozni rá, én azonban ezt nem tartom helyes programozói módszernek. A handler második Szûrjük az eredményt! értéke egy szövegfüzér, ami tartalmazza a eseménykezelõ Most jön a feladat oroszlánrésze. Meg kell keresni az oldalban meghívása esetén a megadandó értékeket. Ha például az az eredmények hivatkozásait. Jelen esetben szabályos kifeje- értelmezõ a következõ elembe fut bele: zéseket is használhatnánk, mivel a szûrési feltételek viszonylag t. Minden jog fennt egyszerûek. Viszont egy összetettebb HTML-oldal esetén a

mintaillesztés már nem jelent megoldást, ezért lássuk, mire képes a HTML::Parser. Nem nehéz kitalálni, hogy melyik akkor a start4href függvényt három értékkel hívja meg. csomag rejtheti a számunkra értékes Perl-modult: a libhtml- Az elsõ egy egyszerû „p” szövegfüzér. A második egy asszo- parser-perl. Az utóbbi csomag több modul gyûjteménye, ciatív tömb címe, aminek egyetlen kulcs-érték párja van, neve-

mi azonban most csak a legfontosabbal foglalkozunk. zetesen a class-g. Harmadik, egyben utolsó értéke maga © Kiskapu Kf az objektum (a fenti példában a $p változó tartalma). A HTML::Parser használata Elõször a start4all függvény a nyitóelemek esemény- A modul használatához elõször létre kell hoznunk egy kezelõje. Ez egészen addig van így, amíg nem talál egy HTML::Parser-objektumot. Mivel a modul nagy múltra tekint

-t, amikor is a nyitóelemek új eseménykezelõje vissza, a megfelelõség megtartása érdekében két változatát is a start4href. Ez az elsõ találatnál kiírja a href értékét, elérhetjük a new függvény segítségével. A legújabb, azaz a hár- majd ismét a start4all-t teszi meg eseménykezelõnek. mas változatot fogjuk használni – ezt azért fontos hangsúlyozni, mert nem mûködik együtt a korábbi, kettes változattal. Egy A kész program HTML-oldal tényleges vizsgálata során az értelmezõ minden Ahhoz, hogy a fenti két függvénybõl mûködõ alkalmazást egyes elemnél megáll. Ha olyan elemet talál, amihez esemény- varázsoljunk, csupán egymás után meg kell hívnunk õket: kezelõ tartozik, meghívja a megadott függvényt, ha nem, az alapértelmezett eljárás szerint jár el. Ilyen elemek az egyszerû my $content = search(shift); szöveg, a nyitóelemek (

), a záróelemek (
), filter($content); az oldalak elején gyakori meghatározások (), a megjegyzések () stb. Az objektum létrehozása Egyszerûen átadhatod parancssorban a keresési kifejezést, és után a handler tagfüggvény segítségével adhatunk meg a program máris tíz találat hivatkozásával gazdagítja a képer- különbözõ eseménykezelõket. Ezeknek a megadását követõen nyõdet. Azok számára, akik nem szeretnek sokat gépelni, a meghívhatjuk a parse függvényt, értékként átadva a HTML- program a CD-mellékleten is megtalálható. oldalt. Ami igazán kellemes a HTML::Parser használatában, az az, hogy egy eseménykezelõ függvény is létrehozhat, töröl- Felhívás egy táncra het, illetve módosíthat más eseménykezelõket, így nagy bonyo- Szeretném elõre leszögezni, hogy egy ilyen robot nem arra lultságú elemzések is végezhetõk. való, hogy százezerszer leadja a szavazatodat kedvenc vagy éppen gyûlölt figurádra valamelyik valóságshowból. Sem Szûrés a Google esetében arra, hogy a történelemtanárod levélcímét felhasználva hat- Vizsgáljuk most meg a Google találati oldalát! A kutya szóra száz pornóoldalon jegyeztesd be az illetõt, és eláraszd velük történõ keresés eredményének az a részlete, ahol az elsõ találat a postafiókját. Ezekkel a támadásokkal szemben meglehetõsen szerepel: kevés mód van a védekezésre. Éppen ezért övön aluli ütésnek számít kihasználni az ehhez hasonló lehetõségeket. Hiszem,

hogy ennek a folyóiratnak a közönsége van olyan érett, hogy ha választhat a pusztítás és az építés között, akkor az utóbbi A fejléc