diff --git a/hu_HU.ISO8859-2/books/faq/book.sgml b/hu_HU.ISO8859-2/books/faq/book.sgml index 6dabfb0514..04a59d1361 100644 --- a/hu_HU.ISO8859-2/books/faq/book.sgml +++ b/hu_HU.ISO8859-2/books/faq/book.sgml @@ -1,15411 +1,15426 @@ %books.ent; ]> Gyakran Ismételt Kérdések a &os; 6.<replaceable>X</replaceable>, 7.<replaceable>X</replaceable> és 8.<replaceable>X</replaceable> változatairól A &os; Dokumentációs Projekt $FreeBSD$ 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 A &os; Dokumentációs Projekt &bookinfo.legalnotice; &tm-attrib.freebsd; &tm-attrib.3com; &tm-attrib.adobe; &tm-attrib.creative; &tm-attrib.cvsup; &tm-attrib.ibm; &tm-attrib.ieee; &tm-attrib.intel; &tm-attrib.iomega; &tm-attrib.linux; &tm-attrib.microsoft; &tm-attrib.mips; &tm-attrib.netscape; &tm-attrib.opengroup; &tm-attrib.oracle; &tm-attrib.sgi; &tm-attrib.sparc; &tm-attrib.sun; &tm-attrib.usrobotics; &tm-attrib.xfree86; &tm-attrib.general; Ezek a gyakran ismételt kérdések a &os; 6.X, 7.X és 8.X változataira vonatkoznak. Az összes bejegyzés a &os; 6.X vagy annál újabb változataira vonatkozik, hacsak azt külön nem jelezzük. Ha szeretnénk segíteni a projektnek, akkor küldjünk egy levelet a &a.doc; címére! Ennek a dokumentumnak a legfrissebb változata mindig elérhetõ a &os; World Wide Web szerverérõl. HTTP-n keresztül letölthetõ egyetlen nagy HTML állományként, vagy a &os; FTP szerverérõl szöveges, &postscript; PDF stb. formátumban. Továbbá keresni is tudunk a GYIK-ban. Fordította és a fordítást karbantartja: &a.hu.pgj; Bevezetés Üdvözöljük a &os; 6.X-8.X Gyakran Ismételt Kérdéseiben! Hasonlóan a Usenetes GYIK-okhoz, ennek a dokumentumnak is az a célja, hogy a &os; operációs rendszerrel kapcsolatban feltegye a legyakrabban ismételt kérdéseket (és persze megválaszolja ezeket!). Habár eredetileg azért íródott, hogy megspórolja a feleslegesen elvesztegetett sávszélességet és hogy megelõzze a régóta ismert kérdések újbóli feltételét, a GYIK idõközben egy értékes információforrássá is vált. Igyekeztünk minden megtenni annak érdekében, hogy a GYIK a lehetõ legtöbb információt szolgáltassa. Ha szeretnénk javaslatokat tenni a továbbfejlesztésére, írjunk bátran a &a.doc; címére! Mi az a &os;? Ha tömören akarjuk összefoglalni, akkor a &os; egy AMD64, &intel; EM64T, &i386;, PC-98, IA-64, &arm;, &powerpc; és &ultrasparc; platformokra fejlesztett &unix;-szerû operációs rendszer, amely a Kaliforniai Egyetem (Berkeley) rendszerének 4.4BSD-Lite kiadására épül, valamint a 4.4BSD-Lite2 kiadásból tartalmaz még néhány továbbfejlesztést. Továbbá közvetett módon még felhasználja a Berkeley Net/2 kiadásának &i386; architektúrára készített portját, a 386BSD forrásait is, amit annak idején William Jolitz készített, noha ebbõl ténylegesen már csak nagyon kevés található a rendszerben. A &os; részletesebb bemutatása és annak tulajdonságai a &os; honlapján találhatóak. A &os;-t munkához, oktatáshoz és szórakozáshoz rengeteg cég, internetszolgáltató, kutató, informatikus, diák és otthoni felhasználó használja a világ minden táján. A &os; bõvebb bemutatásához olvassuk el a &os; kézikönyvet. Mi a &os; Projekt célja? A &os; Projektnek az a célja, hogy olyan szoftvereket állítson elõ, amelyek tetszõlegesen felhasználhatóak, mindenféle kötöttségek nélkül. A fejlesztõk közül sokan nagyon sok idõt és munkát fektetnek a forráskódba (és így a Projektbe), ami nyilván megérdemelne némi anyagi ellensúlyozást olykor, de egyáltalán nem ragaszkodunk hozzá. Úgy érezzük, mindenek elõtt az a küldetésünk, hogy feltétel nélkül segítsünk mindenkit a munkánkkal, függetlenül annak szándékaitól, így a munkánk a lehetõ legnagyobb körben kerül felhasználására és így nyújtja a lehetõ legtöbb hasznot. Véleményünk szerint ez az egyik legalapvetõbb célja a szabad szoftvereknek és ezt a hozzáállást támogatjuk a leginkább. A forrásaink között található, GNU General Public License (GPL) vagy a GNU Library General Public License (LGPL) licencelésû munkák azonban már valamivel több kötöttséggel járnak, habár ezek inkább a közzétételükre vonatkoznak, nem pedig annak ellenkezõjére, ahogy azt általában megszokhattuk. A GPL licencû szoftverek kereskedelmi célú felhasználásának további esetleges nehézségei miatt azonban lehetõségeink szerint igyekszünk ezeket olyan szoftverekkel felváltani, amelyek a kevésbé szigorúbb &os; licencet alkalmazzák. A &os; licenc tartalmaz valamilyen megszorítást? Igen. Ezek a megszorítások azonban nem az adott munka felhasználását szabályozzák, hanem csupán azt, hogy miként viszonyuljunk a &os; Projekthez. Ha komoly kétségeink lennének a licenceléssel kapcsolatban, olvassuk a jelenleg érvényes licencet (angolul). Az egyszerû kíváncsiskodók kedvéért nagyjából így tudnánk összefoglalni a licencet: Ne állítsuk, hogy mi készítettük. Ne pereljük a Projektet, ha nem mûködik. A &os; képes kiváltani a jelenleg használt operációs rendszerünket? A legtöbb ember számára igen. A kérdés megválaszolása azonban természetesen nem ennyire egyértelmû. Sokan nem is magát az operációs rendszert, hanem inkább az alkalmazásokat használják. Valójában pedig maguk az alkalmazások azok, amelyek az operációs rendszert használják. A &os;-t úgy alakították ki, hogy az alkalmazások számára egy szilárd és mindentudó környezetet nyújtson. Támogatja a böngészõk, irodai programcsomagok, levelezõ programok, grafikus programok, programozási környezetek, hálózati szerverek széles választékát, és szinte minden mást, amire csak szükségünk lehet. Az ilyen alkalmazások legnagyobb része elérhetõ a Portgyûjteményen keresztül. Ha viszont olyan alkalmazást kívánunk használni, amely csak bizonyos operációs rendszereken érhetõ el, nem tudjuk magát az operációs rendszert egyszerûen lecserélni alatta. Bizonyos esetekben azonban elõfordulhat, hogy &os; alatt is találunk hozzá hasonló alkalmazásokat. Amikor egy stabil irodai vagy internet szerverre van szükségünk, esetleg egy megbízható munkaállomásra, vagy egyszerûen csak megszakítások nélkül szeretnénk végezni a munkánkat, a &os;-ben igényeinkhez mérten szinte minden megtalálhatunk. A világon rengeteg felhasználó, beleértve a kezdõket és a tapasztalt &unix; rendszergazdákat egyaránt, asztali operációs rendszerként is a &os;-t használja. Ha egy másik &unix; környezetrõl akarunk &os;-re váltani, akkor a legtöbb dolog már ismerõs lehet számunkra. Amennyiben viszont valamilyen grafikus operációs rendszerrõl, például &windows;-ról vagy a &macos; valamelyik régebbi változatáról szándékozunk átállni, minden bizonnyal idõt kell majd szánnunk a feladatok &unix; stílusú megvalósításának megismerésére. Ez a GYIK és a &os; kézikönyv ehhez tökéletes kiindulási alapot biztosít. Miért hívják &os;-nek? Szabadon (mint free) felhasználható, akár kereskedelmi célokra is. Az operációs rendszer teljes forráskódja bárki által szabadon elérhetõ, minimális megkötésekkel arra vonatkozóan, hogy miként használható és más (kereskedelmi vagy nem kereskedelmi) munkák részeként miként építhetõ be, terjeszthetõ. Bárki, akinek fejlesztési vagy hibajavítási javaslata van a rendszerrel kapcsolatban, szabadon benyújthatja azt, amely aztán bekerül a források közé (egy-két nyilvánvaló ellenõrzést követõen). Érdemes valamint rámutatni, hogy a szabad szót az imént két értelemben is használtuk: az egyik jelentése szerint költségek nélkül, míg a másik jelentése szerint tetszés szerint. Egy-két tiltott dologtól, például azt állítjuk, hogy mi írtuk, eltekintve tényleg bármit csinálhatunk vele. Mi a különbség a &os;, a NetBSD, OpenBSD és a többi nyílt forráskódú BSD operációs rendszerek között? James Howard The BSD Family Tree címmel (angolul) készített egy alapos leírást a különbözõ projektek közti eltérések bemutatására. Melyik a &os; legújabb változata? Jelen pillanatban a &os; fejlesztése két párhuzamos ágon folyik, és mind a kettõbõl készülnek kiadások. A 7.X sorozat kiadásai a 7-STABLE ágból, míg a 8.X sorozat kiadásai a 8-STABLE ágból készülnek. A 8.0-s kiadás megjelenéséig a 7.X sorozat volt a -STABLE. A 8.0 kiadás megjelenésével azonban a 7.X ág meghosszabbított támogatást kapott, és már csak a nagyobb hibákat, például a biztonsági hibákat javítják benne. Az 7-STABLE ágból még várhatóak további kiadások is, azonban ezt jelenleg már örökségi ágnak tekintjük, és a legtöbb munka már a 8-STABLE részeként jelenik meg. A &rel.current; változat a 8-STABLE ág legfrissebb kiadása, amely &rel.current.date;ban jelent meg. Az 7-STABLE ágból a &rel2.current; a legfrissebb kiadás, amely &rel2.current.date;ban jelent meg. Ha röviden össze akarjuk foglalni, akkor a -STABLE változatokat elsõsorban az internet-szolgáltatók, vállalkozások számára ajánljuk, illetve minden olyan felhasználó számára, aki a legújabb (és minden bizonnyal még instabil) -CURRENT pillanatkiadásokhoz viszonyítottan a legkevesebb változtatással kívánnak egy megbízható, stabil verziót használni a rendszerbõl. Ugyan bármelyik ágból készülhetnek, azonban a -CURRENT esetében meglehetõsen sok változásra kell felkészülnünk (a -STABLE ághoz képest) az egyes kiadások között. A kiadások néhány havonta készülnek. Mivel a legtöbben ennél pontosabban követik a &os; forrásait (lásd a &os.current; és &os.stable; változatokra vonatkozó kérdéseket), ennél valamire többre van szükségünk, hiszen a források folyamatosan változnak. A &os; egyes kiadásairól a Kiadások megjelentetését összefoglaló oldalon tájékozódhatunk a &os; honlapján. Mi az a &os;-CURRENT? A &os.current; az operációs rendszer aktív fejlesztés alatt álló változata, amely idõvel az új &os.stable; ággá válik. Ez a változat tulajdonképpen csak a rendszeren dolgozó fejlesztõk és a megátalkodott hobbifelhasználók számára érdekes. A kézikönyv erre vonatkozó szakaszában olvashatunk részletesebben a -CURRENT használatáról. Ha nem mozgunk otthonosan az operációs rendszerek világában, vagy ha nem tudjuk megmondani a különbséget egy valódi és egy ideiglenes probléma között, akkor nem javasoljuk a &os.current; használatát. Ez a fejlesztési vonal nagyon gyorsan fejlõdik és néha lefordíthatatlan állapotba kerül. A &os.current; változat használóitól elvárjuk, hogy képesek legyenek felmérni a felbukkanó problémákat, és közülük csak azokat jelenteni, amelyek valóban hibákat takarnak és nem pedig csak apró bökkenõk. Ezért a &a.current; olvasói általában A make world parancs valami csoportra panaszkodik típusú kérdéseket általában figyelembe se veszik. A -CURRENT és -STABLE ágak aktuális állapotáról minden hónapban pillanatkiadások készülnek. Célunk ezzel: A telepítõ legfrissebb változatának tesztelése. Idõt és sávszélességet szeretnénk megspórolni a -CURRENT vagy -STABLE változatok azon felhasználóinak, akik az iméntiek hiányából fakadóan nem tudják naponta frissíteni a rendszerüket. Kiindulási pontokat rögzítünk a kód aktuális állapota alapján, ha késõbb netalán valamilyen szörnyûség történne. (Noha a CVS általában védelmet nyújt az ilyen rémisztõ dolgok bekövetkezése ellen.) Az összes tesztelendõ újítást és javítást ezen a módon kívánjuk a lehetõ legszélesebb körben elérhetõvé tenni. Egyik -CURRENT pillanatkiadás sem tekinthetõ hétköznapi felhasználásra alkalmasnak. Ha egy megbízható és széles körben tesztelt rendszerre van szükségünk, akkor vagy maradjunk a kiadásoknál vagy használjuk a -STABLE vonalból készült pillanatkiadásokat. A pillanatkiadások innen érhetõek el. Minden aktívan fejlesztett ághoz havonta készülnek hivatalos pillanatkiadások. A népszerûbb &arch.i386; és &arch.amd64; ágakból azonban napi kiadások is elérhetõek a a címen. Mit takar a &os;-STABLE? Amikor a &os; 2.0.5 megjelent, a &os; fejlesztése kettévált. Az egyik ág neve -STABLE, a másiké pedig -CURRENT lett. A &os;-STABLE az olyan internet-szolgáltatók és egyéb vállalkozások számára készült, ahol a fejlesztés alatt álló újítások vagy a hirtelen váltások által okozott problémák gyakran nem engedhetõek meg. Ide csak olyan hibajavítások és kisebb módosítások kerülnek, amelyeket alaposan leteszteltek. A &os;-CURRENT ezzel szemben a 2.0 megjelenése óta egyetlen, szakadásmentes fejlesztési vonalat képvisel, amely a &rel.current;-RELEASE és az azon túli kiadások felé halad. Ha többet szeretnénk megtudni a jelenlegi ágak állapotáról és a következõ kiadások ütemezésérõl, akkor ezzel kapcsolatban olvassuk el a &os; Release Engineering címû cikk kiadások leágaztatásáról szóló részét (angolul). Az ágak jelenlegi állapota és a jövõbeni kiadások ütemterve a Kiadások információk oldalán található (angolul). A 2.2-STABLE ág a 2.2.8 megjelenésével nyugdíjba vonult. A 3-STABLE ág a 3.5.1 mint az utolsó 3.X kiadás megjelenésével ért véget. A 4-STABLE ág a 4.11 mint az utolsó 4.X kiadással fejezõdött be. Ezekbe az ágakban a legtöbb esetben már csak biztonsági javításokat végeznek. Az 5-STABLE ág fejlesztése az utolsó 5.X kiadás, az 5.5 megjelenésével lezárult. A 6-STABLE ág fejlesztése még folytatódik valameddig, de ez alatt leginkább már csak a biztonsági rések és egyéb komoly problémák javításait kell érteni. A &rel.current;-STABLE a jelenleg fejlesztett -STABLE ág. A &rel.current;-STABLE ágból megjelent legfrissebb kiadás a &rel.current;-RELEASE, amely &rel.current.date;ban jelent meg. A 9-CURRENT a -CURRENT ág legfrissebb változata, és ez a &os; következõ generációja. Errõl az ágról a Mi az a &os;-CURRENT? kérdésnél szolgálunk részletesebb információkkal. Mikor készülnek &os; kiadások? A &a.re; átlagosan a &os; egy újabb nagyobb változatát 18 havonta, míg egy kisebb kiadását 8 havonta jelenteti meg. A kiadások dátumát elõre kihirdetik, így a rendszeren dolgozó emberek pontosan tudják, hogy mikorra kell befejezniük a munkájukat és letesztelni azt. Minden kiadást egy tesztelési idõszak elõz meg, ahol megbizonyosodnak róla, hogy az elkészült újítások nem veszélyeztetik az új kiadás megbízhatóságát. A legtöbb felhasználó pontosan ezt a típusú elõvigyázatosságot szereti legjobban a &os;-ben, még annak árán is, hogy a legújabb finomságok bekerülésére még a -STABLE ág esetén gyakran sokat kell várni. A kiadások szerkesztésérõl (valamint a soronkövetkezõ kiadások ütemezésérõl) a &os; honlapján belül ezen az oldalon olvashatunk részletesebben (angolul). Akik egy kicsivel több izgalomra vágynak, azok részére az elõbb említett, naponta készített bináris pillanatkiadásokat ajánljuk. Ki felel a &os;-ért? A &os; Projektre vonatkozó fontosabb döntéseket, mint például a Projekt haladási irányát vagy hogy vehet részt a forráskód fejlesztésében, egy 9 fõs irányító csoport hozza. Rajtuk kívül még egy több mint 350 fõs fejlesztõi csapat jogosult közvetlenül módosítani a &os; forrásait. A legtöbb bonyolultabb változtatást általában azonban a megfelelõ levelezési listákon is megvitatják, amiben bárki különösebb korlátozás nélkül részt vehet. Honnan lehet a &os;-t beszerezni? A &os; összes fontosabb kiadása elérhetõ anonim FTP-n keresztül a &os; FTP oldaláról: A legfrissebb 8-STABLE kiadás, a &rel.current;-RELEASE ebbõl a könyvtárból érhetõ el. Havonta készülnek pillanatkiadások a -CURRENT és a -STABLE ágakból, de ezek leginkább a legújabb változatot tesztelõk és a fejlesztõk számára fontosak. A legfrissebb 7-STABLE kiadás, a &rel2.current;-RELEASE ebbõl a könyvtárból érhetõ el. Ha a &os;-t CD-n, DVD-n vagy más egyéb telepítõeszközön szeretnénk megkapni, akkor ezzel kapcsolatban nézzük meg a kézikönyvet. Hogyan lehet elérni a hibajelentések adatbázisát? A felhasználók kéréseit tartalmazó hibajelentések adatbázisát a honlap webes hibajelentésekkel foglalkozó felületén keresztül érhetjük el. A &man.send-pr.1; parancs segítségével tudunk e-mailen keresztül hibajelentéseket és egyéb változtatási kéréseket küldeni. Emellett még böngészõ segítségével is tudunk hibajelentéseket küldeni a honlap webes hibabejelentõ felületén. Mielõtt beküldenénk egy hibajelentést, olvassuk el a Writing &os; Problem Reports címû cikket (angolul), amelybõl megtudhatjuk, hogyan készítsünk jól hasznosítható hibajelentéseket. Honnan tudhatunk meg még többet? Nézzük meg a &os; Projekt honlapjáról elérhetõ dokumentációkat. Dokumentációs és támogatás Milyen jó könyvek szólnak a &os;-rõl? A Projekt igen széles körû dokumentációval rendelkezik, amely a következõ linkrõl érhetõ el: . Emellett a GYIK végén szereplõ, valamint a kézikönyvben található irodalomjegyzék tartalmazza az ajánlott könyveket. A dokumentáció elérhetõ más formátumokban is, például szöveges (ASCII) állományban vagy &postscript;-ben? Igen. A dokumentáció több különbözõ állomány- és tömörítési formátumban elérhetõ az &os; FTP oldalán belül a /pub/FreeBSD/doc/ könyvtárból. A dokumentációt több különbözõ módon osztályozhatjuk. Többek közt: A dokumentum neve alapján, például faq (GYIK), vagy handbook (kézikönyv). A dokumentum nyelv és karakterkódolása alapján. Ezeket a &os; rendszerekben, a /usr/share/locale könyvtárban megtalálható nyelvi beállítások nevei szerint adjuk meg. Jelenleg a következõ nyelveken és kódolásokban érhetõ el a dokumentáció: Név Leírás en_US.ISO8859-1 Angol (Egyesült Államok) bn_BD.ISO10646-1 Bengáli vagy bangla (Banglades) da_DK.ISO8859-1 Dán (Dánia) de_DE.ISO8859-1 Német (Németország) el_GR.ISO8859-7 Görög (Görögország) es_ES.ISO8859-1 Spanyol (Spanyolország) fr_FR.ISO8859-1 Francia (Franciaország) hu_HU.ISO8859-2 Magyar (Magyarország) it_IT.ISO8859-15 Olasz (Olaszország) ja_JP.eucJP Japán (Japán, EUC kódolás) mn_MN.UTF-8 Mongol (Mongólia, UTF-8 kódolás) nl_NL.ISO8859-1 Holland (Hollandia) no_NO.ISO8859-1 Norvég (Norvégia) pl_PL.ISO8859-2 Lengyel (Lengyelország) pt_BR.ISO8859-1 Portugál (Brazília) ru_RU.KOI8-R Orosz (Oroszország, KOI8-R kódolás) sr_YU.ISO8859-2 Szerb (Szerbia) tr_TR.ISO8859-9 Török (Törökország) zh_CN.GB2312 Egyszerûsített kínai (Kína, GB2312 kódolás) zh_TW.Big5 Hagyományos kínai (Tajvan, Big5 kódolás) Nem mindegyik dokumentum érthetõ el mindegyik nyelven. A dokumentum formátuma alapján. A dokumentumok több különbözõ formátumban állnak rendelkezésre. Mindegyik formátum használatának megvannak az elõnyei és hátrányai. Egyes formátumok inkább az interneten keresztüli olvasgatásra megfelelõek, mások pedig nyomtatott formában nyújtanak esztétikus hatást. A több különbözõ formátumnak köszönhetõen az olvasók igényeik szerint el tudják olvasni a dokumentáció különbözõ részeit akár a képernyõn, akár papíron. Jelenleg a következõ formátumokban érhetõek el a dokumentumok: Formátum Leírás html-split Kis méretû, hiperhivatkozásokkal ellátott HTML állományok gyûjteménye html Egyetlen óriási, az egész dokumentumot tartalmazó HTML állomány pdb A Palm Pilot adatbázisának formátuma, amelyet az iSilo segítségével tudunk olvasni pdf Az Adobe-féle Portable Document Format ps &postscript; rtf A Microsoft Rich Text formátuma txt Egyszerû szöveges állomány Amikor egy ilyen dokumentumot betöltünk a Wordbe, akkor az oldalszámok maguktól nem frissülnek. Ehhez a dokumentum betöltése után nyomjuk le a CtrlA, CtrlEnd, F9 billentyûket. A tömörítés és csomagolás típusa alapján. Ezek közül jelenleg hármat használunk. Ahol a formátum html-split, ott az állományokat a &man.tar.1; segítségével csomagoltuk össze. Az így keletkezõ .tar állományt ezek után az alábbi részben szereplõ tömörítési megoldásokkal tömörítettük. Az összes többi formátum esetén csak egyetlen állomány keletkezik, amelynek a neve típus.formátum (tehát például article.pdf, book.html és így tovább). Ezeket az állományokat azután két tömörítési eljárással tömörítjük. Eljárás Leírás zip A zip formátum. &os; alatt ezt úgy tudjuk kitömöríteni, ha elõször telepítjük a archivers/unzip portot. bz2 A bzip2 formátum. Nem olyan elterjedt, mint a zip, de általában kisebb méretû állományokat készít. Ilyen állományokat akkor tudunk kitömöríteni, ha telepítjük a archivers/bzip2 portot. Ennek megfelelõen tehát a kézikönyv bzip2-vel tömörített &postscript; változata a handbook/ könyvtáron belül book.ps.bz2 néven található. Miután kiválasztottuk a számunkra megfelelõ letöltendõ formátumot és tömörítési módszert, magunknak kell letölteni a kiválasztott tömörített állományokat, majd kibontani ezeket és átmásolni a megfelelõ helyre. Például, ha a GYIK fejezetekre darabolt, &man.bzip2.1; segítségével tömörített változata a doc/en_US.ISO8859-1/books/faq/book.html-split.tar.bz2 állományban található meg. A letöltéséhez és kibontásához a következõket kell tennünk: &prompt.root; fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/en_US.ISO8859-1/books/faq/book.html-split.tar.bz2 &prompt.root; bzip2 -d book.html-split.tar.bz2 &prompt.root; tar xvf book.html-split.tar A mûvelet befejezõdésével kapunk néhány .html kiterjesztésû állományt. Ezek közül az egyik neve index.html, ebben található a tartalomjegyzék, a bevezetés és a dokumentum többi részére mutató hivatkozások. Ezeket az állományokat kell szükség szerint átmásolnunk vagy átmozgatnunk a megfelelõ helyre. Hol található információ a &os; levelezési listáiról? Az összes velük kapcsolatos információt a kézikönyv levelezési listákról szóló részében találjuk. Milyen &os; hírcsoportok léteznek? Az összes rájuk vonatkozó információt a kézikönyv hírcsoportokról szóló részében találjuk meg. Vannak &os;-s IRC (Internet Relay Chat) csatornák? Igen, a legtöbb nagyobb IRC hálózaton található &os;-vel foglalkozó csatorna: Az EFNet hálózaton található #FreeBSD csatorna lényegében egy &os;-vel foglalkozó fórum, de itt ne nagyon próbálkozzunk segítséget kérni a többiektõl, ha netalán lusták lennénk elolvasni a man oldalakat vagy éppen kutatunk valamit. Ez a hely elsõsorban csevegésre szolgál, ahol mindenféle téma felmerül, a szextõl kezdve a sportokon keresztül a nukleáris fegyverekig éppen úgy, ahogy a &os;-rõl is. Mi szóltunk elõre! A szerver a irc.efnet.org címen érhetõ el. Az EFNet hálózaton található #FreeBSDhelp csatorna kifejezetten a &os; felhasználók megsegítését veszi célba. Az itt levõk sokkal szívesebben válaszolnak a kérdéseinkre, mint a #FreeBSD csatornán. A Freenode hálózaton található ##FreeBSD csatornán mindig sokan vannak, itt bármilyen témában kérhetünk segítséget. A beszélgetések idõnként ugyan kifutnak a szigorú szakmai témákból, de a &os;-vel kapcsolatos kérdések itt mindig elsõbbséget élveznek. Szívesen segítünk bárkinek, és lehetõség szerint igyekszünk a kézikönyv megfelelõ részeire hivatkozni, vagy adni valamilyen útmutatást arra vonatkozóan, hogy merre tájékozódhatunk részletesebben a problémánkkal kapcsolatban. Ez alapvetõen egy angol nyelvû csatorna, habár a világ minden tájáról érkeznek tagjaink. Ha az anyanyelvünkön szeretnénk inkább csevegni, akkor elõször tegyük fel a kérdésünket angolul, aztán próbálkozzunk a megfelelõ ##freebsd-nyelv csatornán. A DALNET hálózaton található #FreeBSD csatorna az Egyesült Államokból a irc.dal.net szerveren, Európából pedig az irc.eu.dal.net szerveren keresztül érhetõ el. A DALNET hálózaton található #FreeBSDHelp csatorna az Egyesült Államokból a irc.dal.net szerveren, Európából pedig a irc.eu.dal.net szerveren keresztül érhetõ el. Az UNDERNET hálózaton található #FreeBSD csatorna az Egyesült Államokból a us.undernet.org, Európából pedig a eu.undernet.org szerveren keresztül érhetõ el. Mivel ez a csatornát leginkább segítségnyújtásra tartjuk fenn, készüljünk fel arra, hogy a hivatkozott dokumentumokat is el kell olvasnunk. A RUSNET hálózaton található #FreeBSD csatorna az oroszul beszélõ &os; felhasználók számára igyekszik segítséget nyújtani. Emellett viszont remek hely a nem szakmai jellegû témák megvitatásához is. A Freenode hálózaton található #bsdchat csatorna a hagyományos kínai (UTF-8 kódolású) nyelvet beszélõ &os; felhasználókat igyekszik segíteni. A nem szakmai jellegû témák részére is egy remek hely. Az említett csatornák mindegyike egymástól független, és nem állnak egymással kapcsolatban. Sõt, még a csevegési stílusuk is eltérõ, ezért érdemes a saját stílusunkhoz leginkább illeszkedõt megkeresni. Mint ahogy az összes IRC csatorna esetében elõfordul, itt is könnyedén érhetnek bennünket személyes sértések vagy egyszerûen csak sok szóbeli sárdobálást láthatunk (mivel jóval több az ilyen helyeken a balga ifjú, mint a higgadtabb idõs) — ezekkel ne is törõdjünk! Hol kaphatok kereskedelmi szintû &os; tréninget és támogatást? A DaemonNews nyújt kereskedelmi szintû támogatást és tréninget a &os;-hez. Errõl részletesebb információkat a BSD Mall honlapján kaphatunk. A &os; Mall is nyújt keresdelmi támogatást a &os;-hez. Errõl a honlapjunkon tudhatunk meg többet. A BSD Certification Group, Inc. DragonFly BSD, &os;, NetBSD és OpenBSD rendszerekhez ad rendszergazdai képesítéseket. Amennyiben érdekel minket, látogassunk el a honlapjukra. Kérünk minden olyan további szervezetet, amely tréninget vagy támogatást kíván nyújtani a Projektnek, hogy jelentkezzenek és felvesszük õket a listánkra! Nik Clayton
nik@FreeBSD.org
Telepítés Milyen állományokat kell letöltenünk a &os; telepítéséhez? Ehhez a következõ három floppy image-re lesz alapvetõen szükségünk: floppies/boot.flp, floppies/kern1.flp és floppies/kern2.flp. Ezeket az image-eket az fdimage vagy &man.dd.1; segédprogramokkal kell rámásolnunk lemezekre. Ha magukat a terjesztéseket akarjuk letölteni (mert például egy DOS típusú állományrendszerrõl akarunk telepíteni), akkor az alábbi terjesztéseket kell beszereznünk: base/ manpages/ compat*/ doc/ src/ssys.* A teljes folyamatot, valamint a telepítéssel kapcsolatos általános tudnivalókat valamivel bõvebben a kézikönyv &os; telepítésével foglalkozó részébõl ismerhetjük meg. Mit tegyünk, ha a floppy image-ek nem férnek rá egyetlen lemezre? Egy 3,5 colos (1,44 MB kapacitású) lemezen 1 474 560 byte-nyi adat fér el. A rendszerindításhoz használt image mérete is pontosan 1 474 560 byte. A rendszerindító lemezek elõkészítése során elkövetett hibák általában a következõk: Amikor az image-eket FTP-n keresztül töltjük le, elfelejtünk bináris (binary) átviteli módot használni. Egyes FTP kliensek alapértelmezés szerint szöveges (ascii) módban viszik át az állományokat, és ennek során megpróbálják a sorvége karaktereket az adott operációs rendszer konvenciói szerint átalakítani. Ilyenkor szinte kétségtelen, hogy ezzel tönkreteszik az image-et. Ezért ne felejtsük el ellenõrizni a letöltött image-eket: ha a méretük nem egyezik meg pontosan a szerveren levõ változatukéval, akkor gyaníthatóan a letöltés közben történt velük valami. Megoldás: miután csatlakoztunk a szerverhez, de még mielõtt elkezdük volna a letöltést, az FTP kliens parancssorában gépeljük be, hogy binary. Az image lemezre másolása a DOS copy parancsának (vagy hasonló grafikus eszközök) használatával. A copy és a hozzá hasonló programok nem használhatóak erre a célra, mivel az image-eket közvetlenül a rendszeindításhoz hozták létre. Ennek megfelelõen az egyes image-ek a lemezek teljes tartalmát sávról sávra tartalmazzák, és így nem hétköznapi állományként kell velük bánni. Ezeket a floppykra alacsonyszintû eszközök (például az fdimage vagy rawrite) segítségével, nyers módban kell felvinni, ahogy azt a &os; telepítését leíró útmutatóban is olvashatjuk. Hol található leírás a &os; telepítésérõl? A telepítés részletes leírása a kézikönyv &os; telepítésérõl szóló részében olvasható. Mire van szükség a &os; használatához? A &os; használatához egy 486-os vagy jobb processzorral rendelkezõ számítógépre, 24 MB vagy annál több memóriára, és legalább 150 MB tárhelyre lesz szükségünk. A &os; összes változata képes futni szinte bármilyen olcsó MDA típusú grafikus kártyával, de az &xorg; használatához már VGA vagy annál jobb videokártya szükségeltetik. Lásd . Hogyan lehet saját telepítõfloppyt készíteni? Jelen pillanatban ennek nincs egyszerû módja. Minden egyes kiadáshoz tartoznak telepítõfloppyk, használjuk ezeket. Ha egy módosított kiadást akarunk készíteni, kövessük a(z angol nyelvû) Release Engineering cikk útmutatásait. A számítógépre lehet egynél több operációs rendszert is telepíteni? Olvassuk el a A &os; telepítése és használata más operációs rendszerekkel együtt címû cikket. &windows; mellé is telepíhetõ &os;? Elõször telepítsük a &windows;t, majd a &os;-t. A &os; boot managere ekkor képes lesz a &windows; és a &os; indítására is. Vigyázzunk, mert ha a &windows;t telepítjük fel másodikként, akkor az minden figyelmeztetés nélkül durván felülírja az aktuális boot managert. Ha ezt tapasztaljuk, akkor olvassuk el a következõ szakaszt. A &windows; letörölte a boot managert! Hogyan lehet visszaállítani? A &os;-hez tartozó boot managert háromféleképpen tudjuk újratelepíteni: Indítsuk el a DOS-t, lépjünk be a &os; terjesztéshez tartozó tools könyvtárba és keressük meg a bootinst.exe nevû állományt. Indítsuk el a következõ módon: ...\TOOLS> bootinst.exe boot.bin Ekkor a boot manager visszakerül a helyére. Használjuk a &os;-hez létrehozott rendszerindító lemezeket, és a telepítõben válasszuk a Custom (Egyéni telepítés) menüpontot, majd azon belül válasszuk a Partition (Partíció) pontot. Itt válasszuk ki azt a meghajtót, ahol korábban a boot managerünk volt (ez valószínûleg a felsorolásban az elsõ lesz) és amikor belépünk a partíciószerkesztõbe, akkor egybõl válasszuk a Write (W) opciót (tehát ne változtassunk semmit). Ez megerõsítést fog kérni, amire válasszuk a &gui.yes; gombot, és amikor a boot manager kiválasztása rész jelenik meg, válasszuk a FreeBSD Boot Manager pontot. Ezzel a boot manager újra a lemezre íródik. Miután ezzel végeztünk, lépjünk ki a telepítõbõl és indítsuk újra a rendszerünket a megszokott módon. Indítsuk a rendszerünket a &os; rendszerindító lemezérõl (vagy CD-jérõl), majd válasszuk a telepítõben a Fixit (Javítás) menüpontot. Ezután válasszuk a javítófloppy vagy a(z élõ állományrendszerrel rendelkezõ) 2. CD használatát, majd lépjünk be a javításhoz elindított parancsértelmezõbe. Ezt követõen adjuk ki az alábbi parancsot: Fixit# fdisk -B -b /boot/boot0 eszköz A parancsban az eszköz helyére annak az eszköznek a nevét adjuk meg, amelyrõl a rendszert szoktuk indítani, például ad0 (az elsõ IDE-lemez), ad4 (az elsõ IDE-lemez valamelyik vezérlõn), da0 (az elsõ SCSI-lemez) stb. Az A, T és X sorozatú IBM Thinkpad laptopok lefagynak a &os; telepítése utáni elsõ indulásuk során. Hogy lehet ezen segíteni? Ezeken a gépeken az IBM BIOS-ának egy korai hibás változata található, amely a &os; által használt partíciókat tévesen suspend-to-disk típusú partícióknak tekinti. Ennek következtében amikor a BIOS megpróbálja értelmezni a &os; által létrehozott partíciót, megakad. Az IBM Ahogy Keith Frechette (kfrechet@us.ibm.com) írta levelében. szerint az alábbi típus/BIOS változatokban található meg ez a hiba. Típus BIOS T20 IYET49WW vagy késõbbi T21 KZET22WW vagy késõbbi A20p IVET62WW vagy késõbbi A20m IWET54WW vagy késõbbi A21p KYET27WW vagy késõbbi A21m KXET24WW vagy késõbbi A21e KUET30WW Úgy értesültünk, hogy az IBM BIOS-ok késõbbi változataiban ismét felbukkant ez a típusú hiba. Ebben az üzenetben &a.nectar; a &a.mobile; tagjainak egy olyan módszert mutat be, ami segíthet, ha az újabb típusú IBM laptopunk nem tudja elindítani a &os;-t, és így váltani tudunk a BIOS elõzõ vagy következõ verziójára. Ha régebbi típusú BIOS-szal rendelkezünk és a frissítés nem megoldható, akkor a &os;-t telepíthetjük úgy is, hogy megváltoztatjuk a &os; által használt partíció azonosítóját és egy olyan rendszerindító blokkot telepítünk, amelyik képes ezt kezelni. Ehhez elõször is a gépet egy olyan állapotba kell visszahoznunk, ahol már túl tudunk jutni a rendszerindító képernyõn. Ezt úgy tudjuk elérni, ha nem engedjük, hogy a gép indulása közben észrevegye az elsõdleges lemezen található &os; partíciót. Erre az egyik lehetséges megoldás, ha a gépbõl ideiglenesen eltávolítjuk a merevlemezt és átrakjuk egy régebbi ThinkPadba (például egy ThinkPad 600-as típusba) vagy a megfelelõ átalakító használatával az asztali számítógépünkbe. Miután ezzel megvagyunk, töröljük le a &os; partícióját és tegyük vissza a lemezt. Ekkor a ThinkPad újból mûködõképes lesz. Ezt követõen az alábbi utasításokat követve tudjuk telepíteni a &os;-t: Töltsük le a boot1 és boot2 állományokat a címrõl. Olyan helyre tegyük ezeket, ahol késõbb is még el tudjuk érni. A megszokott módon telepítsük a &os;-t a ThinkPadre. Ilyenkor ne használjuk a Veszélyesen dedikált (Dangerously Dedicated) módot. A telepítés befejezése után ne indítsuk újra a gépet. Váltsunk át a vészhelyzetekben használatos parancsértelmezõre (Emergency Holographic Shell, Alt F4) vagy indítsuk el egy javításhoz használt (fixit) parancsértelmezõt. Az &man.fdisk.8; segítségével változtassuk meg a &os;-s partíció azonosítóját a 165 értékrõl a 166 értékre (ezt a típust az OpenBSD használja). Másoljuk át az imént letöltött boot1 és boot2 állományokat a helyi állományrendszerre. A &man.disklabel.8; segítségével rögzítsük a boot1 és boot2 tartalmát a &os; slice-unkra. &prompt.root; disklabel -B -b boot1 -s boot2 ad0sn ahol az n annak a slice-nak a sorszáma, ahová a &os;-t telepítettük. Indítsuk újra a gépet. A rendszerindító parancssorban ekkora megjelenik az OpenBSD indításának lehetõsége. Ezen keresztül tudjuk a &os;-t elindítani. A kedves Olvasónak meghagytuk azt az esetet, amikor ugyanezen a konfiguráción OpenBSD és &os; rendszereket akarunk egyszerre használni. Lehet telepíteni hibás szektorokat tartalmazó lemezre is? Igen, ez lehetséges, de egyáltalán nem ajánlott. Manapság ha egy IDE-meghajtón hibás szektorokat találunk, akkor az arra utal, hogy hamarosan tönkremegy (a meghajtó belsõ átképezõ funkciói már képesek megbirkózni a rossz szektorok növekvõ számával, ami arra enged következtetni, hogy a lemez felülete jelentõs mértékben sérült). Ezért inkább egy új merevlemezes meghajtó vásárlását javasoljuk. Ha hibás SCSI-meghajtónk van, ezt a választ olvassuk el. Furcsa dolgok történnek a telepítõfloppy használata közben! Mi okozhatja? Ha olyan furcsa dolgokkal találkozunk a telepítõfloppy használata során, mint például a lemez állandó darálása vagy a rendszer váratlan újraindulása, akkor a következõ három kérdést érdemes feltennünk magunknak: Biztos, hogy új, frissen formázott, teljesen hibamentes floppykat használunk (tehát olyanokat, amelyeket egy frissen bontott dobozból vettünk ki, és nem olyanokat, amelyeket valamelyik magazin mellékletébõl szedtük ki vagy éppen három évig az ágy alatt tároltunk)? Biztos, hogy bináris (vagy image) módban töltöttük le a lemezek image-eit? (Ne szégyelljük, mindenki életében legalább egyszer töltött már le véletlenül bináris állományt szöveges formátumban!) &windows; 95 vagy &windows; 98 alatt DOS módban használtuk az fdimage vagy rawrite parancsot? Ezek az operációs rendszerek általában nem férnek össze az olyan programokkal, amelyek közvetlenül a hardverrel akarnak kommunikálni, amire a lemezek írásához is szükség van. Ez a probléma leginkább akkor merülhet fel, amikor a grafikus felületen belül egy DOS ablakban futtatjuk ezeket a programokat. Kaptunk olyan visszajelzést is, hogy gondjaink lehetnek, ha &netscape;-pel töltjük le a rendszerindító lemezeket, ezért lehetõség szerint igyekezzünk más FTP klienst használni. ATAPI CD-meghajtóról indult a rendszer, de a telepítõ szerint nem található semmilyen CD-meghajtó. Hova tûnt? Ezt a problémát általában egy rosszul beállított CD-meghajtó okozza. A CD-meghajtó rengeteg számítógépben a másodlagos IDE-vezérlõ slave (szolga) portján található, a master (mester) port használata nélkül. Ez az ATAPI specifikációi szerint nem szabályos, de a &windows; ezzel különösebben nem törõdik, a BIOS pedig egyszerûen figyelmen kívül hagyja a rendszer indítása során. Ezért képes a BIOS ilyenkor látni a CD-meghajtót, és ezért nem képes a &os; teljes telepítésnél használni. Ezen úgy tudunk segíteni, ha a CD-meghajtónkat az IDE-vezérlõn átállítjuk masterre, vagy arra az IDE-vezérlõre teszünk egy master eszközt. PLIP (Parallel Line IP) használatával lehet laptopra telepíteni? Igen. Ehhez csupán egy szabványos Laplink-kábel kell. Amennyiben szükséges, a párhuzamos vonali hálózatkezelés beállításához olvassuk el kézikönyv PLIP-rõl szóló részét. A lemezmeghajtók esetében milyen geometriai beállításokat érdemes használni? A lemez geometriája alatt a lemezen található cilinderek, fejek és a sávonkénti szektorok számát értjük. Ezt a továbbiakban csak CHS-értéknek nevezzük (mint Cylinder/Head/Sector). Ebbõl állapítja meg a PC-s BIOS, hogy a lemezen honnan kell olvasnia és hova kell írnia. Ez rengeteg félreértést okoz az újdonsült rendszergazdák számára. Elõször is megemlítenénk, hogy egy SCSI-lemez fizikai geometriája ebben az esetben teljesen lényegtelen, mivel a &os; lemezblokkokban gondolkozik. Igazából nem létezik a fizikai geometria fogalma, ugyanis a szektorok sûrûsége a lemezen felületén belül sem állandó. Amit a gyártók általában fizikai geometriának hívnak, az általában az a geometria, amely a legkevesebb helyveszteséggel jár. Az IDE-lemezek esetében a &os; ugyan CHS-értékekkel dolgozik, de ezt minden modernebb meghajtó legbelül blokkhivatkozásokká alakítja. Egyedül tehát a logikai geometria számít. Ez a válasz, amikor a BIOS megkérdezi a meghajtónkat: Mik a geometriai beállításaid?, és ennek felhasználásával kommunikál vele a késõbbiekben. Mivel a &os; is ezt az értéket használja fel a rendszer indításánál, fontos, hogy jól adjuk meg. Ez különösen abban az esetben számít, amikor több operációs rendszer is található a lemezen, hiszen mindegyiküknek azonos geometriai beállításokat kell használniuk. Ellenkezõ esetben komoly gondok léphetnek fel a rendszer indítása során! A SCSI-lemezek esetében a beállítandó geometria értéke attól függ, hogy a vezérlõn használjuk-e a bõvített fordítás támogatását (extended translation support, amelyet gyakran csak úgy neveznek, hogy Support for DOS disks >1GB vagy ehhez hasonlóan). Ha ezt letiltottuk, akkor használjuk az N cilinder, 64 fej és 32 szektor sávonkénti felírást, ahol N a lemez MB-okban számított mérete. Így például egy 2 GB méretû lemez geometriai beállítása 2048 cilinder, 64 fej és 32 szektor sávonként. Ha viszont engedélyeztük (ami gyakran elõfordul, mivel így lehet az &ms-dos; bizonyos korlátozásait megkerülni) és a lemez kapacitása 1 GB-nál több, adjunk meg M cilindert, 255 fejet, 63 (és nem 64) szektort sávonként, ahol az M a lemez MB-okban mért kapacitása osztva 7,844238-al (!). Tehát az iménti példában is említett 2 GB-os meghajtó esetében 261 cilindert, 255 fejet és sávonként 63 szektort kapunk. Ha nem lennénk benne biztosak, vagy a &os;-nek a telepítés közben nem sikerül megállapítania a lemez geometriai beállításait, mi magunk is könnyen meg tudjuk határozni, ha készítünk egy kis méretû DOS partíciót a lemezen. A BIOS ekkor észlelni fogja a megfelelõ geometriai beállításokat, és ha már nincs rá tovább szükségünk, akkor a partíciószerkesztõben nyugodtan törölhetjük. Hálózati kártyák és hasonló hardverek programozásához azonban még a késõbbiekben hasznos lehet. Használhatjuk viszont a &os;-hez mellékelt pfdisk.exe segédprogramot is. Ezt a &os; CD vagy a &os; FTP oldalainak tools könyvtárában találhatjuk meg. Ennek a programnak a segítségével ki tudjuk deríteni, hogy a lemezen levõ többi operációs rendszer milyen geometriai beállításokat használ. Az így kapott értékeket fel tudjuk használni a partíciószerkesztõben. Van valamilyen korlátozás a lemezek felosztására vonatkozóan? Igen. A rendszerindításhoz használt (gyökér)partíciónak az 1024. cilinder alatt kell kezdõdnie, mivel a BIOS csak így képes betölteni onnan a rendszermagot. (Ez a korlátozás a PC-s BIOS-ok miatt van, nem a &os; miatt.) A SCSI-lemezek esetében ez általában azt jelenti, hogy rendszerindításhoz használt partíciónak az elsõ 1024 MB alatt kell kezdõdnie (vagy az elsõ 4096 MB alatt, ha a bõvített fordítást is engedélyeztük — lásd az elõzõ kérdést). Az IDE-lemezek esetében ez 504 MB-nak felel meg. A &os; kompatibilis valamilyen disk managerrel? A &os; felismeri az Ontrack Disk Managert és figyelembe veszi. A többi disk managert nem támogatja. Ha egyedül csak a &os;-t akarjuk használni, akkor nincs szükségünk disk managerre. Egyszerûen csak állítsunk be egy akkora méretû lemezt, amivel a BIOS képes még megbirkózni (a határ általában 504 MB) és majd a &os; kideríti, hogy valójában mennyi hely áll a rendelkezésére. Ha régebbi gyártmányú merevlemezünk van MFM-vezérlõvel, akkor a &os;-nek konkrétan meg kell mondanunk, hogy mennyi cilindert használhat. Ha a &os; mellett más operációs rendszereket akarunk használni, akkor ezt disk manager nélkül is megtehetjük. Egyedül arra kell vigyáznunk, hogy a &os; indításához használt partíció és a másik operációs rendszer slice-a az elsõ 1024 cilinder alatt kezdõdjön. Ha nagyon körültekintõek akarunk lenni, akkor erre a célra egy 20 MB méretû rendszerindító partíció tökéletesen megfelel. Amikor a &os;-t telepítése után elõször elindul, akkor egy Hiányzó operációs rendszer vagy egy Missing Operating System hiba jelenik meg. Mi történt? Ez általában akkor fordul elõ, amikor a &os; és a DOS vagy más operációs rendszerek nem értenek egyet a lemez geometriai beállításaiban. Telepítsük újra a &os;-t és ezúttal figyelmesen kövessük a fentebb adott utasításokat! Miért nem lehet továbblépni a boot manager F? menüjénél? Ez az elõbbi kérdéssel kapcsolatos probléma egy másik tünete: a BIOS és a &os; által használt geometriai beállítások nem egyeznek! Amennyiben a vezérlõ vagy a BIOS támogatja a cilinderek fordítását (amelyet gyakran >1GB driver support néven találhatunk meg), akkor próbáljuk meg átállítani és így újratelepíteni a &os;-t. Az összes forrást telepíteni kell? Alapvetõen nem. Ettõl függetlenül azonban javasoljuk legalább a base források telepítését, ahol számos olyan állomány megtalálható, amelyekre a késõbbiekben még hivatkozni fogunk, valamint a sys (rendszermag) források telepítését, amelyben a rendszermag forrásai találhatóak. A rendszeren belül azonban a mûködéshez semmi sem igényli közvetlenül a források jelenlétét, egyedül talán a rendszermag beállítását végzõ &man.config.8; program. A rendszermag forrásainak kivételével a rendszerben a fordítás menetét úgy építettük fel, hogy akár egy írásvédett módon csatlakoztatott NFS állományrendszerrõl is képes legyen dolgozni (a rendszermag forrásaira vonatkozó megszorítások miatt azonban azt javasoljuk, hogy ezt közvetlenül ne a /usr/src könyvtárba csatlakoztassuk, hanem egy másik helyre, ahol aztán szimbolikus linkek segítségével másoljuk le a forráskód könyvtárszerkezetének legfelsõ szintjét). Ha kéznél vannak a források és tisztában vagyunk a rendszerfordítás folyamatával, akkor a késõbbiekben sokkal könnyebben tudjuk a &os; rendszerünket frissíteni. A források egyes részeinek kiválasztásához lépjünk be a telepítõprogram Custom (Egyéni telepítés), majd a Distributions (Terjesztések) menübe. Kell rendszermagot fordítani? Egy új rendszermag fordítása korábban fontos része volt a &os; telepítésének, de a legújabb kiadások már kihasználják a rendszermag beállításának sokkal baratságosabb módszereit is. A &os; 5.X és az azt követõ változatokban már a betöltõbõl könnyen be tudjuk állítani a rendszermagot a beépített hints (eszközökre vonatkozó útmutatások) módszere által felkínált rugalmasabb lehetõségeknek köszönhetõen. Egy új rendszermag készítése viszont olyan esetekben még továbbra is hasznos lehet, amikor csak azokat a meghajtókat akarjuk megtartani benne, amelyekre ténylegesen szükségünk van. Ezzel többnyire memóriát tudunk megspórolni, habár a legtöbb rendszer esetében erre igazából nincs szükségünk. A jelszavak tárolására használható-e DES, Blowfish vagy MD5, és ha igen, akkor hogyan lehet megadni? A &os; alapértelmezés szerint MD5-alapú jelszavakat használ. Ezeket a DES algoritmuson alapuló hagyományos &unix;-os jelszavaknál sokkal megbízhatóbbnak tartják. A DES formátum természetesen továbbra is elérhetõ olyan esetekben, amikor a kevésbé biztonságos jelszavakat használó régi operációs rendszerekkel akarunk együttmûködni. Emellett a &os;-ben lehetõségünk van a sokkal biztonságosabb Blowfish jelszóformátum használatára is. Az új jelszavak formátumát az /etc/login.conf állományban található passwd_format bejelentkezési tulajdonság adja meg, amelynek értéke des, blf (amennyiben elérhetõ), illetve md5 lehet. A bejelentkezési tulajdonságokkal kapcsolatban a &man.login.conf.5; man oldalt érdemes elolvasni. A rendszerindító lemez elõször elindul, de aztán miért akad meg a Probing Devices... képernyõn? Ha a rendszerünkhöz IDE-s &iomegazip; vagy &jaz; meghajtót csatlakoztattunk, akkor próbálkozzunk újra az eltávolítása után. A rendszerindító floppy ugyanis hajlamos összekeverni a meghajtókat. A rendszer telepítése után természetesen újra csatlakoztathatjuk a meghajtót. Ezt remélhetõleg egy következõ verzióban már kijavítják. A rendszer telepítését követõ újraindítás után miért jelenik meg a panic: can't mount root hibaüzenet? Ez a hiba a rendszerindító blokk és a rendszermag közti félreértésbõl, a lemezes eszközök helytelen kezelésébõl fakad. Ilyen hibát általában olyan rendszerekben kapunk, ahol két masternek beállított IDE-lemez található vagy ha az egyes IDE-vezérlõkre csak egy-egy eszközt csatlakoztattunk és a &os;-t a másodlagos IDE-vezérlõre kapcsolódó lemezre telepítettük. Ekkor a rendszerindító blokk szerint a rendszert az ad0 (de a BIOS-ban a második) lemezre telepítettük, miközben a rendszermag szerint ez a másodlagos IDE-vezérlõn elhelyezkedõ elsõ lemez, az ad2. Az eszközök felkutatása után a rendszermag megpróbálja a rendszerindító blokk által nyilvántartott eszközrõl, az ad0 lemezrõl csatlakoztatni a rendszerindító partíciót, ami viszont számára a ad2 eszköz lesz, így ez a próbálkozása meghiúsul. Ezt a félreértést a következõ módokon lehet helyretenni: Indítsuk újra a rendszert és nyomjuk le az Enter billentyût, amikor a Booting kernel in 10 seconds; hit [Enter] to interrupt szöveg megjelenik. Ezzel a rendszerbetöltõ parancssorába kerülünk. Ezután gépeljük be a set root_disk_unit="lemezszám" sort. Itt a lemezszám értéke 0 lesz, ha a &os;-t az elsõdleges IDE-vezérlõ master portján levõ merevlemezre telepítettük, 1, ha az elsõdleges IDE-vezérlõ slave portjára, 2, ha a másodlagos IDE-vezérlõ master portjára, és végül 3, ha a másodlagos IDE-vezérlõ slave portjára. Most már begépelhetjük, hogy boot, és így a rendszernek el is kell indulnia. Ha ezt a változtatást véglegesíteni akarjuk (vagyis nem akarjuk ugyanezt eljátszani a &os; minden egyes indítása során), akkor a /boot/loader.conf.local állományba vegyünk fel a root_disk_unit="lemezszám" sort. Tegyük át a &os;-t tartalmazó lemezt az elsõdleges IDE-vezérlõre, és ezzel megszûnik az iménti félreértés. Mennyi memóriát tudunk használni? A memóriára vonatkozó korlátozások platformonként változnak. Egy szabványos &i386; telepítés esetén például ez a határ 4 GB, de &man.pae.4; segítségével akár még ennél több is elérhetõ. Ehhez olvassuk el az &i386; platformon 4 GB-nál több memória használatára vonatkozó utasításokat. A &os;/pc98 esetén a korlát szintén 4 GB, azonban itt a PAE nem használható. A &os; által támogatott összes többi architektúra elméletileg ennél több memóriát képes kezelni (több terabyte-ot). Mik az FFS állományrendszerek korlátai? Az FFS állományrendszerek méretének elméleti határa 8 TB (2 milliárd blokk), illetve az alapértelmezett 8 KB-os blokkméret esetén 16 TB. A gyakorlatban azonban szoftveresen ebbõl 1 TB használható ki, de kisebb módosításokkal akár 4 TB-os állományrendszer is használható (és létezik). Egyetlen FFS állományrendszerbeli állomány mérete megközelítõleg legfeljebb 1 milliárd blokk lehet, ami 4 KB-os blokkmérettel számolva 4 TB-ot jelent. Az állományok maximális mérete Blokkméret Gyakorlatban Elméletben 4 KB > 4 GB 4 TB - 1 8 KB > 32 GB 32 TB - 1 16 KB > 128 GB 32 TB - 1 32 KB > 512 GB 64 TB - 1 64 KB > 2048 GB 128 TB - 1
4 KB-os blokkméret esetén a háromszoros indirekcióval származtatott blokkok a gyakorlatban is kihasználhatóak, és az egészet elméletben egyedül csak az állományrendszerben így ábrázolható blokkok maximális száma korlátozná (ami kb. 10243 + 10242 + 1024), azonban a gyakorlatban ezt az állományrendszeri blokkokra vonatkozó 1 GB - 1 méretû (rossz) határ korlátozza. Az állományrendszeri blokkok számát ugyanis ki kellene terjeszteni a 2 GB - 1 méretig. 2 GB - 1 számú blokk használata körül jelentkezik ugyan néhány hiba, de ezek 4 KB-os blokkméret esetén nem is érhetõek el. A 8 KB-nál nagyobb blokkméretek esetén mindenre a blokkok 2 GB - 1 maximális mennyisége érvényes, de a gyakorlatban ezt a blokkok számának 1 GB - 1 határa korlátozza. Az eredeti 2 GB - 1 mennyiségû blokk használata gondokat okozhat.
Egy új rendszermag fordítása után miért jelenik meg a archsw.readin.failed hibaüzenet az indítás során? Mert a rendszermag és a felhasználói programok verziója eltér. A rendszermag frissítésekor feltétlenül használjuk a make buildworld és a make buildkernel parancsokat is! A rendszerindítás második fokozatában közvetlenül meg tudjuk adni a betöltendõ rendszermagot, ha a betöltõ indítása elõtt, a | jel megjelenésekor lenyomunk egy billentyût. A telepítés megszakad a rendszer indítása közben, mit lehet ezzel kezdeni? Próbáljuk meg letiltani az ACPI támogatást. Ezt úgy tudjuk megtenni, hogy amikor a rendszertöltõ elindul, lenyomjuk a Szóköz billentyût. Ekkor a következõt kapjuk: OK Itt gépeljük be az alábbi parancsot: unset acpi_load Majd ezt: boot
Hardverkompatibilitás Általános kérdések A &os; rendszerükhöz szeretnénk hardvert vásárolni. Melyik gyártmány/márka/típus a legjobb? Ez állandó téma a &os; levelezési listákon. Mivel a hardverek gyorsan változnak, nem is számíthatunk másra. Továbbra is határozottan javasoljuk, hogy olvassuk át figyelmesen a &os; &rel.current; vagy &rel2.current; változatához tartozó hardverjegyzéket (Hardware Notes) és nézzünk után a levelezési listák archívumában mielõtt bármire is rákérdeznéünk a legfrissebb és legjobb hardverek ügyében. Könnyen elõfordulhat, hogy éppen a múlt héten esett szó arról a típusú eszközrõl, amirõl éppen érdeklõdni szeretnénk. Ha laptoppal kapcsolatban lenne kérdésünk, akkor nézzük meg a &a.mobile; archívumát. Minden más esetben érdemes inkább a &a.questions; archívumait megnézni vagy az adott hardverhez tartozó levelezési listát böngészni. Memória A &os; képes 4 GB-nál, 16 GB-nál vagy akár 48 GB-nál több memóriát (RAM-ot) támogatni? Igen. A &os; operációs rendszerként képes az adott platformon kihasználni az összes rendelkezésre álló fizikai memóriát. Ne felejtsük el azonban, hogy az egyes platformokon ennek határa eltér. Például az &i386; platformon a PAE használata nélkül legfeljebb csak 4 GB memóriát tudunk elérni (amely azonban a PCI számára fenntartott címtér miatt a valóságban némileg kevesebb), illetve a PAE használatával legfeljebb 64 GB memóriát. Az AMD64 platformokon viszont már egészen 1 TB memóriáig is elmehetünk. A &os; miért jelez 4 GB-nál kevesebb memóriát &i386; architektúrájú számítógépeken? Az &i386; platformon a címtér 32 bites, ami azt jelenti, hogy itt legfeljebb 4 GB memória címezhetõ meg (és érhetõ el). Ráadásul a címtér bizonyos tartományait a hardvereszközök számára tartják fenn különbözõ célokra, például a PCI eszközök mûködtetésére és vezérlésére, a videomemória hozzáférésére stb. Ennélfogva az operációs rendszer és annak rendszermagja által felhasználható teljes memória mérete jelentõsen kevesebb, mint 4 GB. Ezen a típusú konfigurációkon általában 3,2 GB és 3,7 GB között mozog a maximálisan kihasználható fizikai memória mérete. Ha mégis 3,2  vagy 3,7 GB-nál több memóriát szeretnénk elérni (4 GB-ot vagy akár annál is többet), akkor ahhoz a PAE nevû speciális módosításra lesz szükségünk. A PAE a Physical Address Extension (Fizikai címkiterjesztés) rövidítése, és egy olyan módszerre utal, amellyel a 32 bites x86 típusú processzorokon tudunk 4 GB-nál több memóriát címezni. Lényegében nem csinál mást, csak 4 GB-os határ felé képezi le azokat a memóriaterületeket, amelyeket egyébként a hardverek részére tartanak fenn, ezzel kiegészíti a fizikai memóriát (&man.pae.4;). A PAE használatának számos hátránya van: ebben a módban a megszokottnál (vagyis PAE nélkül) némileg lassabb a memória elérése, illetve ilyenkor a betölthetõ rendszermag-modulok (lásd &man.kld.4;) sem támogatottak. Emiatt az összes meghajtót bele kell fordítanunk a rendszermagba. A PAE használatát általában a PAE nevû, a rendszermaghoz gyárilag mellékelt konfigurációs állománnyal engedélyezhetjük. Ezt eleve úgy állították össze, hogy gond nélkül készíteni tudjuk egy ilyen rendszermagot. Érdemes azonban megemlíteni, hogy a konfigurációs állomány bizonyos tekintetben egy kissé konzervatív, mivel egyes PAE esetén használhatatlannak megjelölt meghajtók valójában mégis minden gond nélkül hozzáadhatóak a konfigurációhoz. Ezzel kapcsolatban azt javasoljuk, hogy ha az adott meghajtó használható valamelyik 64 bites architektúrán (például AMD64-en), akkor nagy valószínûséggel PAE-vel is mûködni fog. Amennyiben saját magunk szeretnénk egy PAE-rendszermagot készíteni, akkor a következõ sort tegyük bele a konfigurációs állományba: options PAE A PAE alkalmazása napjainkban annyira már nem jellemzõ, mivel az újabb x86 hardverek mindegyike képes 64 bites (AMD64 vagy &intel; 64) módban futni. Ebben az esetben már lényegesen nagyobb címtér használatára nyílik lehetõségünk, így nincs szükségünk további trükkökre. A &os; támogatja az AMD64 architektúrát, így ha 4 GB-nál több memóriát szeretnénk elérni, akkor inkább a &os; ezen változatát érdemes alkalmazni. Architektúrák és processzorok A &os; az x86-on kívül támogat más architektúrájú rendszereket is? Igen. A &os; jelenleg az Intel x86 és az AMD64 architektúrákon mûködik. A Az Intel EM64T, IA-64, &arm;, &powerpc;, sun4v és &sparc64; architektúrák is támogatottak. A további tervezett platformok között van még a &mips; és az &s390;, a &mips; aktuális állapotáról és &a.mips; segítségével értesülhetünk. Az újabb architektúrákhoz kapcsolódó általános jellegû megbeszéléseket a &a.platforms; foglalja össze. Amennyiben a számítógépünk architektúrája nem szerepel a jelenleg támogatottak között, és valamilyen gyors megoldásra lenne szükségünk, akkor javasoljuk a NetBSD vagy az OpenBSD használatát. A &os; támogatja a szimmetrikus többprocesszoros (SMP) rendszereket? A &os; általánosságban véve támogatja a többprocesszoros rendszereket, noha egyes esetekben a BIOS vagy az alaplap hibájából fakadóan problémáink adódhatnak. A &a.smp; átolvasása segíthet tisztázni ezeket. A &os; képes kihasználni az Intel processzorai által felkínált HyperThreading (HTT) támogatás elõnyeit. Az options SMP beállítással fordított rendszermagok alapból maguktól felismerik a rendszerünkben található logikai processzorokat. A &os; alapértelmezett ütemezõje ezeket a logikai processzorokat a többivel teljesen egyenrangúnak tekinti, vagyis semmilyen ütemezési kérdés eldöntésénél nem fogja figyelembevenni az egy processzoron belül elhelyezkedõ logikai processzorokat. Ezen naív ütemezési felfogás miatt bizonyos esetekben a rendszerünk teljesítménye nem tökéletesen optimális, ezért adódhatnak olyan helyzetek, amikor a machdep.hlt_logical_cpus sysctl-változó segítségével szükséges lehet a logikai processzorok használatának letiltása. Ezenkívül még a machdep.hlt_logical_cpus sysctl-változón keresztül lehetõségünk van leállítani az üresjáratban mûködõ processzorokat. Ennek részleteirõl bõvebben a &man.smp.4; man oldalon olvashatunk. Merevlemezes, szalagos, CD- és DVD-meghajtók A &os; milyen típusú merevlemezes meghajtókat ismer? A &os; ismeri az EIDE-, SATA-, SCSI- és SAS-meghajtókat (és a velük kompatibilis vezérlõket, errõl bõvebben lásd a következõ szakaszt), valamint az összes olyan meghajtót, amely az eredeti Western Digital (MFM, RLL, ESDI és természetesen az IDE) interfészt használja. Néhány egyedi fejlesztésû ESDI vezérlõ nem fog mûködni, ezért lehetõleg maradjunk a WD1002/3/6/7 interfészeknél és azok másolatainál. Milyen SCSI- vagy SAS-vezérlõket ismer? A teljes listát a &os; hardverjegyzékében találhatjuk meg a &rel.current; vagy &rel2.current; kiadásban. Milyen szalagos meghajtókat ismer? A &os; a SCSI és QIC-36 (QIC-02 interfésszel) szabványokat ismeri. Ezek közé értendõek a 8 mm-es (más néven Exabyte) és DAT-meghajtók is. Bizonyos régebbi 8 mm-es meghajtók nem egészen kompatibilisek a SCSI-2 szabvánnyal, ezért a &os;-vel sem feltétlenül képesek együttmûködni. A &os; támogatja a szalagok cseréjét? A &os; &man.ch.4; eszközön és a &man.chio.1; parancson keresztül támogatja a SCSI szabványú szalagcserélõket. A használat pontos részleteirõl a &man.chio.1; man oldalán olvashatunk részletesebben. Ha nem az AMANDA vagy a hozzá hasonló programokat használjuk, amelyek alapból ismerik a szalagcserélés lehetõségét, akkor ne feledkezzünk meg arról, hogy a szalagot csak az egyik helyrõl a másikra tudjuk mozgatni, ezért nekünk kell figyelnünk arra, hogy melyik rekeszben vannak szalagok és a meghajtónak ezek közül melyiket kell használnia. A &os; milyen CD-meghajtókat ismer? Bármilyen támogatott SCSI-vezérlõhöz csatlakoztatható SCSI-meghajtót ismer. Ezenkívül még az alábbi CD-interfészek ismertek: Mitsumi LU002 (8 bites), LU005 (16 bites) és FX001D (16 bites, dupla sebességû). Sony CDU 31/33A Sound Blaster nem-SCSI CD-meghajtók Matsushita/Panasonic CD-meghajtók ATAPI kompatibilis IDE CD-meghajtók Az összes ismert nem-SCSI kártya nagyon lassan mûködik a SCSI-meghajtókhoz képest, és bizonyos ATAPI CD-meghajtók nem használhatóak. A Daemon News-tól és a &os; Mall-tól rendelhetõ hivatalos &os; CD-krõl akár közvetlenül el is tudjuk indítani a rendszert. A &os; milyen CD-RW meghajtókat ismer? A &os; bármilyen ATAPI-kompatibilis IDE CD-R vagy CD-RW meghajtót ismer. Ennek részleteit lásd a &man.burncd.8; man oldalán. A &os; ezeken kívül még tetszõleges SCSI CD-R vagy CD-RW meghajtót támogat. A használatukhoz telepítsük a cdrecord programot a portok vagy csomagok közül, és gondoskodjunk róla, hogy a pass eszköz támogatása benne legyen a rendszermagban. A &os; ismeri az &iomegazip; meghajtókat? A &os; alapból ismeri a SCSI és ATAPI (IDE) interfészen kommunikáló &iomegazip; meghajtókat. A SCSI ZIP-meghajtók ugyan egyedül az 5 és 6 target ID-krõl hajlandóak mûködni, de ha a SCSI-kártyánk BIOS-a támogatja, akkor még a rendszert is el tudjuk indítani róluk. Egyelõre nem tisztázott, hogy milyen kártyák képesek a 0 és 1 ID-ken kívül máshonnan is rendszert indítani, ezért ennek a hozzá tartozó dokumentációben érdemes utánajárnunk. A &os; ezenkívül még a párhuzamos porton csatlakoztatható ZIP-meghajtókat is ismeri. Ehhez ellenõrizzük, hogy a rendszermagunkban megtalálhatóak az scbus0, da0, ppbus0 és vp0 meghajtók (a GENERIC rendszermagban a vp0 kivételével mindegyik szerepel). Segítségükkel a párhuzamos vonalon csatlakozó meghajtó a da0s4 eszközön keresztül érhetõ el. Ennek megfelelõen az állományrendszerek a mount /dev/da0s4 /mnt vagy (DOS esetén) a mount -t msdosfs /dev/da0s4 /mnt parancs kiadásával csatlakoztathatóak. Emellett még érdemes a GYIK cserélhetõ lemezes meghajtókról szóló részét is elolvasnunk ebben a fejezetben, valamint a formázásról szóló megjegyzést az adminisztrációról szóló fejezetben. A &os; ismeri a &jaz;, EZ és a többi cserélhetõ lemezes meghajtót? Használhatóak. Ezek többsége SCSI eszköz, ezért a &os; SCSI-lemezként látja, az IDE csatolós EZ pedig IDE-meghajtóként érhetõ el. A rendszer indítása elõtt ne felejtsük el bekapcsolni a külsõ egységeket. Ha tárolóeszközt akarunk cserélni a rendszer mûködése közben, olvassuk el a &man.mount.8;, &man.umount.8; és (SCSI eszközök esetén) a &man.camcontrol.8; vagy (IDE eszközök esetén) a &man.atacontrol.8; man oldalakat, valamint a GYIK egy késõbbi részében található részt a cserélhetõ lemezes meghajtókról. Egér és billentyûzet A &os; ismeri az USB billentyûzeket? A &os; alapból ismeri az USB billentyûzeket. Miután engedélyeztük rendszerünkben az USB billentyûzet támogatását, az AT billentyûzet /dev/kbd0 lesz és az USB billentyûzet pedig /dev/kbd1, már amennyiben mind a kettõt csatlakoztattuk a számítógépünkhöz. Ha viszont csak USB billentyûzetünk van, akkor az a /dev/ukbd0 lesz. Ha az USB billentyûzetet konzolban akarjuk használni, akkor erre figyelmeztetnünk kell a konzolos meghajtót. Ezt úgy tudjuk megtenni, ha a következõ parancsot lefuttatjuk a rendszer indítása közben: &prompt.root; kbdcontrol -k /dev/kbd1 < /dev/console > /dev/null Amikor viszont csak USB billentyûzetünk van, akkor az /dev/ukbd0 eszközön keresztül tudjuk elérni, ezért a parancsnak ilyenkor így kell kinéznie: &prompt.root; kbdcontrol -k /dev/ukbd0 < /dev/console > /dev/null Ha véglegesíteni akarjuk ezt a beállítást, akkor tegyük a keyboard="/dev/ukbd0" sort az /etc/rc.conf állományba. Miután ezt megcsináltuk, az USB billentyûzet X alatt is mûködni fog minden további beállítás nélkül. Ezzel a paranccsal tudunk visszaváltani az alapértelmezett billentyûzetre: &prompt.root; kbdcontrol -k /dev/kbd0 > /dev/null A &man.kbdmux.4; meghajtón keresztül az alábbi parancsok kiadásával engedélyezhetjük az elsõdleges AT billentyûzet és a másodlagos USB billentyûzet párhuzamos használatát a konzolon: &prompt.root; kbdcontrol -K < /dev/console > /dev/null &prompt.root; kbdcontrol -a atkbd0 < /dev/kbdmux0 > /dev/null &prompt.root; kbdcontrol -a ukbd1 < /dev/kbdmux0 > /dev/null &prompt.root; kbdcontrol -k /dev/kbdmux0 < /dev/console > /dev/null Részletesebb információkat az &man.ukbd.4;, &man.kbdcontrol.1; és &man.kbdmux.4; man oldalakon találhatunk. Az USB billentyûzet menet közbeni csatlakoztatása és leválasztása nem feltétlenül fog mûködni. Ezért a problémák elkerülése érdekében azt javasoljuk, hogy a rendszer indítása elõtt mindenképpen csatlakoztassuk a billentyûzetet és hagyjuk egészen úgy, amíg le nem állítottuk. A nem szabványos buszos egereket hogyan lehet beállítani? A &os; ismeri a buszos, illetve a Microsoft, Logitech és az ATI által gyártott InPort buszos egereket. A GENERIC rendszermag azonban ehhez nem tartalmaz meghajtót. A rendszermag konfigurációs állományába a következõ sort kell megadni, ha egy buszos egereket támogató rendszermagot akarunk készíteni: device mse0 at isa? port 0x23c irq5 A buszos egerekhez általában saját interfészkártya is tartozik. Ezeket a kártyákat a fentitõl eltérõ portcímre és IRQ megszakításra is beállíthatjuk. Részletesebb információkat az egerünk man oldalán és a &man.mse.4; man oldalon olvashatunk. Hogyan lehet PS/2 (egérportos vagy billentyûzetes) egeret használni? Az PS/2 egereket alapból támogatjuk. Az ehhez szükséges psm meghajtó megtalálható a rendszermagban. Ha a saját magunk által összeállított rendszermagunk nem tartalmazza ezt a meghajtót, akkor a következõ sort kell felvennünk a konfigurációs állományba: device psm0 at atkbdc? irq 12 Miután a rendszermag a rendszer indítása során helyesen észlelte a psm0 eszközt, magától létrejön. Az egeret az X Window Systemen kívül is lehet valamilyen módon használni? Ha az alapértelmezett konzolos &man.syscons.4; meghajtót használjuk, akkor a szöveges felületû konzolokon az egérmutató segítségével tudunk szövegrészeket kijelölni és másolni. Ehhez nem kell mást tennünk, csupán elindítani a &man.moused.8; egérdémont és engedélyezni az egérmutatót a virtuális konzolokon: &prompt.root; moused -p /dev/xxxx -t yyyy &prompt.root; vidcontrol -m on Itt az xxxx az egeret leképezõ eszköz neve és az yyyy az egérhez használt protokoll típusa. Az egérdémon a legtöbb egér esetén képes magától megállapítani az alkalmazott protokoll típusát, kivéve a régebbi soros egereket. Az auto érték megadásával tudjuk aktiválni ezt az automatikus felderítést. Amennyiben ez nem mûködik, a &man.moused.8; man oldalán nézhetünk után a támogatott protokolloknak. Ha PS/2 egerünk van, akkor egyszerûen csak vegyük fel a moused_enable="YES" sor az /etc/rc.conf állományba, és az egérdémon elindul a rendszer indítása közben. Valamint hogy ha az egérdémont a konzol helyett az összes virtuális konzolon is használni akarjuk, akkor az /etc/rc.conf állományba tegyük bele a allscreens_flags="-m on" sort. Miután az egérdémon elindult, valamilyen módon koordinálni kell az egér hozzáférését az egérdémon és az összes többi program, például az X Window System között. Errõl a problémáról a GYIK Miért nem mûködik X alatt az egér? kérdésében olvashatunk részletesebb. Hogyan lehet szöveget kijelölni és másolni a szöveges konzolban? Ahogy sikerült elindítanunk az egérdémont (lásd az elõzõ szakaszt), tartsuk lenyomva az egér elsõ (bal oldali) gombját és az egér mozgatásával jelöljük ki a szöveget. Ezután nyomjuk le a második (középsõ) gombját, amivel a kurzor mellett megjelenik az imént kijelölt szöveg. A harmadik (jobb oldali) gomb segítségével a szöveg kijelölését tudjuk kiterjeszteni. Amennyiben az egerünkön nem található középsõ gomb, az egérdémon beállításainak segítségével megpróbálkozhatunk emulálni vagy áthelyezni a vele kapcsolatos funkciókat egy másik gombra. A &man.moused.8; man oldalán olvashatunk errõl részletesebben. Az egéren van mindenféle görgõ és gomb. Ki lehet ezeket valahogy használni &os; alatt is? A válaszunk erre sajnos csupán annyi, hogy Attól függ. A különbözõ kiegészítõkkel rendelkezõ egerekhez általában egy külön meghajtó szükségeltetik. Hacsak az egér meghajtóprogramja vagy a hozzá tartozó felhasználói program nem nyújt valamilyen támogatást, az eszköz egyszerûen csak egy szabványos két- vagy háromgombos egérként fog funkcionálni. Ha az X Window környezetben akarunk görgõket használni, esetleg ezt a szakaszt érdemes elolvasnunk. A laptopokon megtalálható egér/trackball/touchpad hogyan használható? Olvassuk el az elõzõ kérdésre adott választ. A Delete billentyû hogyan használható a sh és csh parancsértelmezõkben? A Bourne Shell esetében az alábbi sorokat kell megadnunk az .shrc állományunkban. Lásd &man.sh.1; és &man.editrc.5;. bind ^? ed-delete-next-char # a konzolhoz bind ^[[3~ ed-delete-next-char # az xtermhez A C Shell esetében a következõ soroknak kell az .cshrc állományba kerülnie. Lásd &man.csh.1;. bindkey ^? delete-char # a konzolhoz bindkey ^[[3~ delete-char # az xtermhez További információkat ezen az oldalon találhatunk. Hálózati és soros eszközök A &os; milyen hálózati kártyákat ismer? Ezek teljes listáját a &os; egyes kiadásaihoz tartozó hardverjegyzékben találjuk meg. A &os; ismer szoftveres modemeket, például winmodemeket? A &os; különbözõ kiegészítõ szoftvereken keresztül több szoftveres modemet is támogat. A comms/ltmdm port például a szélesebb körben elterjedt Lucent LT chipsetes modemekhez ad támogatást. A &os; azonban nem telepíthetõ szoftveres modemen keresztül. A hozzá tartozó szoftvert csak az operációs rendszer telepítése után tudjuk telepíteni. Van natív meghajtó a Broadcom 43xx típusú kártyákhoz? Nem, és valószínûleg nem is lesz. A Broadcom nem hajlandó nyilvánossá tenni azokat az információkat, amik az általuk gyártott vezeték nélküli chipsetek programozásához lennének szükségesek, mivel szoftveresen vezérelt rádiót használnak. Az alkatrészeik FCC szintû engedélyeztetéséhez ugyanis valamilyen módon gondoskodniuk kell róla, hogy a felhasználók nem képesek bizonyos dolgokat módosítani vele kapcsolatban, például a mûködési frekvenciát, a modulációs paramétereket vagy a kimenõ teljesítményt. A chipsetek programozásának ismerete nélkül azonban szinte lehetetlen elkészíteni hozzájuk a megfelelõ meghajtót. A &os; milyen többportos soros vonali kártyákat ismer? Ezek listáját a kézikönyv Soros vonali kommunikációról szóló része tartalmazza. Bizonyos névtelen másolatok is használhatók, különösen azok, amelyek magukat AST-kompatibilisnek nevezik. Az ilyen kártyák beállításáról a &man.sio.4; man oldalon olvashatunk részletesebben. Hogyan lehet a boot: parancssort elõhozni soros vonali konzolon? Olvassuk el a kézikönyvben ezt a fejezetet. Hang A &os; milyen hangkártyákat ismer? A &os; rengeteg hangkártyát ismer, (ennek részleteit lásd a &os; kiadásait tartalmazó honlapon és a &man.snd.4; man oldalon). Korlátozott módon az MPU-401 és a vele kompatibilis MIDI-kártyákat is támogatja. A µsoft; Sound System specifikációinak megfelelõ kártyákat tudjuk használni. Ez azonban csak a hangra vonatkozik! Ez a meghajtó a &soundblaster; kivételével nem támogatja a kártyákon található CD-, SCSI- és joystick csatlakozásokat. A &soundblaster; SCSI csatlakozása és bizonyos nem-SCSI CD-meghajtókat ugyan támogat, de rendszert például nem tudunk róluk indítani. Miért nincs hang a &man.pcm.4; által támogatott hangkártyán? Egyes hangkártyák esetében a hangerõ minden indításkor nullára állítódik. Ezért ilyenkor mindig ki kell adni a következõ parancsot: &prompt.root; mixer pcm 100 vol 100 cd 100 Egyéb eszközök Képes a &os; kihasználni az energiagazdálkodási lehetõségeket egy laptopon? A &os; bizonyos gépeken képes az APM használatára. Errõl az &man.apm.4; man oldalon találunk pontosabb leírást. A &os; ezenkívül még a legújabb hardverekben megtalálható ACPI lehetõségeit is igyekezik kihasználni. Errõl részletesebben az &man.acpi.4; man oldalon olvashatunk. Amennyiben a rendszerünk egyaránt tartalmazza az APM és az ACPI támogatását, bármelyiket használhatjuk. Ilyen esetben javasoljuk mind a kettõ kipróbálását és az igényeinkhez leginkább illeszkedõ megoldás kiválasztását. Hogy lehet letiltani az ACPI támogatását? Tegyük bele az alábbi sort az /boot/device.hints állományba: hint.acpi.0.disabled="1" Miért fagynak le a Micron típusú rendszerek indulás közben? Egyes Micron gyártmányú alaplapokon olyan PCI BIOS található, amely nem felel meg az szabványoknak, és ezért a &os; nem tud elindulni, mivel a PCI eszközök nem jelentik le az általuk használt címeket. Ezt a problémát úgy tudjuk megoldani, ha a BIOS-ban kikapcsoljuk (Disabled értékûre állítjuk) a Plug and Play Operating System beállítást. A rendszerindító lemez nem képes az ASUS K7V alaplapokkal mûködni. Hogyan lehet ezt orvosolni? Menjünk be a BIOS-ba és kapcsoljuk ki (állítsuk Disabled értékre) a Boot Virus Protection beállítást. Miért nem mûködnek a &tm.3com; PCI hálózati kártyák a Micron típusú számítógépekben? Nézzük meg az elõzõ választ. Hibaelhárítás Miért állapítja meg rosszul a &os; a memória mennyiségét &i386; hardveren? A válasz nagy valószínûséggel a fizikai és virtuális memóriacímek közti különbségben rejlik. A legtöbb PC-s hardvereszköz megegyezés szerint a 3,5 GB és 4 GB közti memóriaterületet speciális célokra tartja fenn (általában a PCI számára). Ezen a címterületen keresztül éri a PCI eszközöket. Ennek egyik következménye, hogy a fizikai memória ezen a részen nem érhetõ el. Hogy pontosan mi történik az itt elhelyezkedõ memóriával, teljesen a hardvertõl függ. Sajnálatos módon bizonyos eszközök semmilyen megoldást nem nyújtanak a problémára, és így lényegében az utolsó 500 MB-nyi memória elveszik. Szerencsére a legtöbb eszköz azonban képes ezt a területet egy felsõbb címre leképezni, így ki tudjuk használni. Ilyenkor azonban tapasztalhatunk némi félreértést, amikor megnézzük a rendszerindítás közben megjelenõ üzeneteket. A &os; 32 bites változata esetén ez a memóriaterület elveszik, mivel a címe a 4 GB-os határ felé kerül, amelyet a 32 bites módban futó rendszermag már nem képes elérni. Ezen egy PAE támogatással rendelkezõ rendszermag használatával segíthetünk. A GYIK-on belül ebben a bejegyzésben olvashatunk bõvebben a memóriakorlátokról, valamint ebben a részben láthatjuk a különbözõ platformokra vonatkozó memóriakorlátozásokat. A &os; 64 bites változata vagy a PAE használata esetén azonban a &os; rendesen felismeri és leképezi a fennmaradó memóriaterületeket, így azok használhatóvá válnak. A rendszerindítás során azonban az elõbb említett leképezés miatt látszólag úgy fog tûnni, mintha a &os; több memóriát észlelne, mint amennyivel valójában rendelkezünk. Ez teljesen normálisnak tekinthetõ és a ténylegesen elérhetõ memória mennyisége a folyamat végén be fog állítódni. Mit tegyünk, ha meghibásodott szektorokat találunk a merevlemezünkön? A SCSI-meghajtók esetében a meghajtó általában képes önmagától átképezni az ilyen szektorokat. A legtöbb meghajtóban ez a lehetõség viszont alapból nem engedélyezett. A hibás szektorok átképezéséhez az eszköz elsõ lapmódját kell átírnunk, amelyet (root felhasználóként) így tehetünk meg: &prompt.root; camcontrol modepage sd0 -m 1 -e -P 3 Változtassuk meg az AWRE (az írás automatikus átképzése) és ARRE (az olvasás automatikus átképzése) beállítások értékeit 0-ról 1-re: AWRE (Auto Write Reallocation Enbld): 1 ARRE (Auto Read Reallocation Enbld): 1 A modernebb IDE-meghajtók is képesek a vezérlõjükkel nyilvántartani az idõközben meghibásodott szektorokat, és ezt általában alapból engdélyezik. Ha rossz szektorokra figyelmeztetõ hibaüzeneteket látunk (akármilyen típusú meghajtónk is legyen), az kétségtelenül arra utal, hogy ideje lecserélnünk a hardvert. A hibás szektorok használatát esetleg a gyártó saját diagnosztikai programjával le tudjuk tiltani, de hosszabb távon mindenképpen az lesz a legjobb, ha veszünk egy újat. A &os; miért nem találja meg a HP Netserver SCSI-vezérlõjét? Ez tulajdonképpen egy ismert probléma. A HP Netserver gépekben egy integrált EISA buszos SCSI-vezérlõ található, amely a 11-es EISA bõvítõhelyen található, ezért az összes valódi EISA bõvítõhely ez elõtt helyezkedik el. Sajnos a 10 feletti EISA bõvítõhelyek címei ütköznek a PCI eszközök számára kiosztott címekkel, ezért a &os; önmagától nem tudja valami jól kezelni az ilyen helyzeteket. Ezért a legjobban akkor járunk, ha egyszerûen letagadjuk a címterek ütközését :) Ezt úgy tudjuk megtenni, ha a rendszermag EISA_SLOTS nevû beállítását a 12 értékre állítjuk. Ezután már csak be kell konfigurálunk és újra kell fordítanunk a rendszermagot, ahogy azt a kézikönyv megfelelõ része is tárgyalja. Természetesen, amikor egy ilyen gépre akarunk telepíteni, a helyzet tovább bonyolódik. A telepítést úgy tudjuk megoldani, ha a UserConfig programon belül alkalmazunk egy apró trükköt. Most ne a vizuális felületét használjuk, hanem a parancssoros részt. Gépeljük be, majd a megszokottak szerint telepítsük a rendszert: eisa 12 quit Ettõl függetlenül természetesen továbbra is javasolt egy, az elõbbiek szerint módosított rendszermagot fordítanunk és telepítenünk. A következõ verziókban remélhetõleg már lesz valamilyen megoldás erre a problémára. A HP Netserver esetén nem tudunk a lemezeken Veszélyesen dedikált (Dangerously Dedicated) módot használni. Errõl itt olvashatunk bõvebben. Állandóan ed1: timeout és ahhoz hasonló üzenetek jelennek meg. Mi lehet velük kezdeni? Ezt a hibát általában a megszakítások ütközése okozza (például két kártya ugyanazt a megszakítást akarja használni). Indítsuk a rendszerünket a beállítás használatával és az ed0/de0/... bejegyzéseket változtassuk meg a kártyáknak megfelelõen. Ha a hálózati kártyánkon BNC típusú csatlakozó található, akkor még elõfordulhat, hogy azért látunk ilyen hibaüzeneteket, mert nem jól zártuk le a csatlakozást. Ezt úgy tudjuk könnyen ellenõrizni, ha a lezárót közvetlenül a kártyára dugjuk rá (kábel nélkül) és figyeljük, hogy továbbra is jönnek-e a hibaüzenetek. Egyes NE2000-kompatibilis kártyák akkor adják ezt a hibát, ha az UTP portjukon nincs aktív összeköttetés vagy nem dugtuk be a kábelt. Miért állnak le a &tm.3com; 3C509 kártyák minden különösebb ok nélkül? Az ilyen típusú kártyák néha hajlamosak elfelejteni a beállításaikat. Frissítsük a kártya beállításait a 3c5x9.exe program segítségével. A párhuzamos nyomtató nevetségesen lassú. Mi lehet ezzel kezdeni? Ha csupán annyi a problémánk, hogy a nyomtató irdatlanul lassan mûködik, akkor próbáljuk meg a kézikönyv nyomtatásról szóló részében leírtakhoz hasonlóan átállítani a nyomtató portkezelését. A programok miért állnak le idõnként Signal 11 hibákkal? Ezek a hibák akkor keletkeznek, amikor a futó programok olyan memóriaterülethez próbálnak meg hozzáférni, amihez eredetileg nem lenne szabad. Ha valami ehhez hasonló történik a rendszerünkben látszólag teljesen véletlenszerûen, akkor nagyon óvatosan kezdjünk el vizsgálódni. A lehetséges okok az alábbiak lehetnek: Ha csak olyan alkalmazások esetében jelentkezik ez a hiba, amelyeket mi magunk fejlesztünk, akkor az valószínûleg arra utal, hogy valamelyik része hibásan mûködik. Ha a &os; alaprendszerének valamelyik részében tapasztalunk ilyen hibákat, akkor azt szintén okozhatja hibás kód, de az ilyen hibákat általában hamarabb meg szokták találni és ki szokták javítani, mint ahogy a GYIK-ot olvasók többsége találkozna velük (a -CURRENT ág pontosan ezt a célt szolgálja). Elõfordulhat, hogy ez egy olyan furcsaság eredménye, amely nem a &os; hibája: például ugyanazon program fordításakor mindig mást csinál a fordítóprogram. Például tegyük fel, hogy a make buildworld parancsot futtatjuk, és a fordítás félbeszakad, amikor az ls.c állományból el akarja készíteni az ls.o állományt. Ha ezután megint megpróbáljuk kiadni a make buildworld parancsot, akkor a fordítás ugyanazon a helyen újból meghiúsul — valószínûleg hibás a forráskód, frissítsük a forrásainkat és próbáljuk meg ismét. Ha viszont a fordítás ilyenkor már egy másik helyen akad el, akkor szinte biztos, hogy hardverhibával akadtunk össze. Amit ilyenkor tenni tudunk: Az elsõ esetben egy nyomkövetõ, például a &man.gdb.1; segítségével keressük meg a program azon pontját, ahol rossz memóriaterülethez próbál meg hozzáférni és javítsuk ki. A második esetben ellenõrizzük, hogy nem a hardver a hibás. Ennek okai többek közt a következõk lehetnek: Túlmelegednek a merevlemezeink: ellenõrizzük, hogy a gépben található ventillátorok rendesen mûködnek-e (persze elõfordulhat, hogy más eszközök melegednek túl). A processzor túlmelegedett: lehet, hogy mert túlságosan nagy órajelen járatjuk, vagy mert egyszerûen leállt a hûtése. Akármelyik eset is következett be, legalább a hiba felderítéséig állítsuk vissza a hivatalos sebességére. Ha feltétlenül ragaszkodunk a rendszerünk tuningolásához, akkor érdemes elgondolkoznunk azon, hogy egy lassabb rendszerrel jobban járunk, mint egy állandóan cserélendõ, ropogósra sült rendszerrel. Az emberek általában nem is nagyon szeretik az ilyen rendszereket, független attól, hogy szerintünk érdemes-e ilyet csinálni vagy sem. Hibás memóriamodulok: ha több SIMM és DIMM modul is található a gépünkben, akkor vegyük ki az összeset és próbáljuk ki mindegyiket egyesével, ezzel is leszûkíthetjük a probléma felderítését a hibás DIMM/SIMM modulokra vagy azok kombinációjára. Az alaplap túlbecslõ értékei: a BIOS beállításai között vagy az alaplapon található jumperekkel szabályozni tudjuk a különbözõ idõzítéseket, ahol általában az alapértelmezett értékek megfelelnek, de néha elõfordulhat, hogy a memóriamodulok késleltetését lassúra, vagy éppen turbó sebességre állítják (RAM Speed: Turbo vagy ehhez hasonló néven keressük a BIOS-ban), ami szintén okozhat furcsa viselkedést. Próbáljuk meg visszaállítani az BIOS alapértelmezett értékeit, de elõtte érdemes lejegyezni az aktuális beállításainkat. Az alaplap zajos vagy kevés áramot kap: ha vannak használaton kívüli I/O kártyáink, merevlemezeink, CD-meghajtóink a rendszerünkben, akkor próbáljuk meg ideiglenesen eltávolítani ezeket vagy egyszerûen csak lehúzni róluk a tápkábelt. Ezzel tudjuk vizsgálni, hogy a számítógépünk tápegysége képes-e megbirkózni a kisebb terheléssel. Esetleg kipróbálhatunk egy másik tápegységet is, lehetõleg egy kicsivel erõsebbet (például ha a jelenlegi tápegységünk teljesítménye 250 watt, akkor használjunk helyette egy 300 wattosat). Továbbá érdemes lehet még elolvasnunk a SIG11 GYIK-ot (lásd lentebb), ahol mindezeket a problémákat részletesen kifejtik, noha a &linux; nézõpontjából. Arról is olvashatunk benne, hogy egy hibás memóriát miért nem képesek észlelni a szoftveres vagy hardveres tesztelõeszközök. Végezetül, ha az egyik javaslat sem segített a probléma megoldásában, akkor valószínûleg sikerült hibát találnunk a &os; kódjában, amirõl nyugodtan írhatunk a fejlesztõknek egy hibajelentést. A problémáról minden részletre kiterjedõ módon A SIG11-es probléma GYIK-ja írásban olvashatunk (angolul). A rendszer összeomlik vagy egy Fatal trap 12: page fault in kernel mode vagy pedig valamilyen panic: hibaüzenettel és egy halom számot ír ki. Mit tegyünk? A &os; fejlesztõi nagyon kíváncsiak az ilyen hibákra, de a felderítéséhez sajnos jóval több információra van szükségük, mint amennyit láthattunk. Másoljuk le az összeomláshoz tartozó teljes üzenetet. Ezután nézzük meg a GYIK-nak azt a részét, amely a rendszermag összeomlásáról szól, készítsünk egy nyomkövetési információkkal ellátott rendszermagot és kérjük le a hívási láncot. Ez elsõre talán bonyolultnak hangzik, de ehhez igazából nem igényel semmilyen programozási tudást, egyszerûen csak a megadott utasításokat kell követnünk. A rendszer indulása közben miért sötétül a képernyõ és megy el rajta a kép? Ez az ATI Mach 64 videokártyák esetében jelentkezõ probléma. Ilyenkor az a gond, hogy a kártya a 0x2e8 címet használja, akárcsak a negyedik soros port. A &man.sio.4; meghajtóban levõ hiba (vagy netalán beállítás?) miatt azonban a negyedik soros portot még akkor is használni fogja, ha kikapcsoljuk a sio3 (a negyedik soros port) eszközt. A hibát kijavításáig így kerülhetjük meg: A betöltõ parancssorában adjuk meg a paramétert. (Így elõ tudjuk hozni a rendszermag konfigurációs módját.) Kapcsoljuk ki a sio0, sio1, sio2 és sio3 eszközöket (tehát mindegyiket). Emiatt a &man.sio.4; meghajtó nem indul el, és így nem okoz problémát. Lépjünk ki és folytassuk a rendszer indítását. Ha a soros portokat is használni akarjuk, akkor következõ módosításokkal készítsünk egy új rendszermagot: a /usr/src/sys/dev/sio/sio.c (vagy pc98 esetén a /usr/src/sys/pc98/cbus/sio.c) állományban keressük meg a 0x2e8 karakterláncot és az azt megelõzõ vesszõt távolítsuk el (de az utána következõt tartsuk meg). Miután végrehajtottuk ezt a módosítást, a megszokott módon fordítsuk újra a rendszermagot. A &os; miért csak 64 MB memóriát használ, amikor 128 MB van a gépben? Mivel &os; a BIOS-tól próbálja megtudni a rendelkezésre álló memória méretét, ezért csak 16 biten képes lekérdezni a KB-okban (vagyis 65 535 KByte = 64 MB, vagy még ennél is kevesebb, mivel egyes BIOS-ok legfeljebb 16 MB memóriát engednek látni). Tehát ha 64 MB-nál több memóriával rendelkezünk, akkor a &os; ugyan megpróbálja azt felderíteni, de nem feltétlenül fog sikerülni. Ezt úgy tudjuk megoldani, ha a rendszermag alábbi beállítását használjuk. Alapvetõen ugyanis létezik egy módszer, amivel le lehet kérdezni a memória teljes méretét a BIOS-tól, de a hozzá tartozó rutin nem fért el a rendszerindító blokkban. Ha egyszer majd sikerül neki helyet csinálni, akkor a rendszer képes lesz kizárólag ezzel a módszerrel dolgozni. Amíg viszont ez nem így van, addig kénytelenek leszünk a most következõ megoldást választani: options MAXMEM=N ahol N a memória Kilobyte-okban megadott mérete. Tehát egy 128 MB memóriával rendelkezõ számítógép esetén ez 131072. A számítógépben több mint 1 GB memória van, de mégis kmem_map too small üzenetek jelennek meg. Mi a gond? A &os; általában a rendszermag néhány fontos paraméterét, mint például az egyszerre megnyitható állományok maximális számát a számítógépben található memória méretébõl származtatja. Az 1 GB memóriánál több esetén azonban elképzelhetõ, hogy ez az automatikus méretezés túlságosan is nagy értékeket választ. Így a rendszer indításakor a rendszermag olyan nagy méretû táblázatokat és egyéb struktúrákat foglal le, amelyek betöltik a rendelkezésére bocsátott terület nagy részét. Késõbb, a rendszer futása közben pedig a rendszermag szépen lassan kifogy a dinamikus memóriaterületekbõl és összeomlik. Készítsünk egy olyan saját rendszermagot, ahol a beállítást megnöveljük egészen a maximális 400 MB-os értékig (). 400 MB használata valószínûleg elég lesz egészen 6 GB memóriáig. A számítógépben nincs 1 GB memória, a &os; mégis kmem_map too small hibával leáll! Ez a hibaüzenet arra utal, hogy a rendszer kifogyott a hálózati pufferek (különösen az mbuf klaszterek) számára kiosztott virtuális memóriából. Az mbuf klaszterek részére fenntartott virtuális memória méretének beállításáról a kézikönyv Hálózati korlátozások címû szakaszában olvashatunk. Miért jelenik meg a kernel: proc: table is full hibaüzenet? A &os; rendszermagja egyszerre csak bizonyos számú programot enged futni. Ezek konkrét száma a kern.maxusers &man.sysctl.8;-változótól függ. A kern.maxusers ezenkívül még hatással van más belsõ korlátokra is, például a hálózati pufferekre (lásd ezt a korábbi kérdést). Ha a számítógépünk túlságosan leterhelt, akkor érdemes megpróbálkoznunk a kern.maxusers értékének növelésével. Ennek átállítása a rendszerben egyszerre futtatható maximális programok számával együtt sok más rendszerszintû korlátozást is finomít. A kern.maxusers értékének beállításához nézzük meg a kézikönyv Az állományok és futó programok korlátozásairól szóló szakaszát. (Miközben ez a rész a megnyitható állományok maximális számáról szól, addig ugyanez érvényes a futó programokra is.) Ha viszont a számítógépünk nem éri akkora terhelés, de mégis szeretnénk egyszerre nagyobb számú programot is futtatni rajta, akkor ehhez elegendõ csak kern.maxproc változót átállítanunk. Ezt úgy tudjuk megtenni, ha felvesszük a /boot/loader.conf állományba. Ez az érték természetesen addig nem beállítódni, amíg a rendszerünket újra nem indítjuk. Ezekrõl a változókról a &man.loader.conf.5; és &man.sysctl.conf.5; man oldalakon tájékozódhatunk részletesebben. Ha az összes programot egyetlen felhasználóval akarjuk futtatni, akkor a kern.maxprocperuid változót értékét is át kell állítanunk, méghozzá a kern.maxproc új értékénél eggyel kisebbre. (Ezért kell így csinálni, mert egy rendszerprogram, az &man.init.8; mindig fut.) A sysctl változók beállításait úgy is tudjuk véglegesíteni, ha felvesszük ezeket az /etc/sysctl.conf állományba. A kézikönyv A rendszermag korlátainak finomhangolása címû szakaszában részletesebb is olvashatunk róla, hogy miként állítsuk be a rendszerünket. Az új rendszermag indításakor miért keletkezik CMAP busy hibaüzenet? Az elavult /var/db/kvm_*.db állományokat összegyûjtõ rutin idõnként nem mûködik megfelelõen, és a nem egyezõ állományok esetén össze is omolhat. Amikor ilyen történik, indítsuk újra a rendszert egyfelhasználós módban és gépeljük be: &prompt.root; rm /var/db/kvm_*.db Mit jelent az ahc0: brkadrint, Illegal Host Access at seqaddr 0x0 üzenet? Ez az Ultrastor SCSI vezérlõkártya ütközésére utal. A rendszerindítás közben lépjünk be a rendszermag konfigurációs menüjébe és tiltsuk le a gondot okozó uha0 eszközt. Amikor elindul a rendszer, egy ahc0: illegal cable configuration hibaüzenet jelenik meg. A kábelek bekötésével semmilyen gond nincs. Mégis akkor mi a baj? Az alaplapon nem található olyan áramkör, amely támogatja az automatikus lezárást (automatic termination). A SCSI BIOS-ban az automatikus lezárás helyett adjuk meg a megfelelõ lezárást. Az &man.ahc.4; meghajtója nem képes rendesen érzékelni a kábeleket, ha az alaplapon van ilyen érzékelés (és így automatikus lezárás). A meghajtó egyszerûen annyit feltételez, hogy ennek támogatása csak akkor érhetõ el, ha az EEPROM-ban megadtuk az automatic termination beállítást. A megfelelõ kábeldetektáló eszköz nélkül a meghajtó gyakran rosszul állapítja meg a lezárást, ami pedig így veszélyezteti a SCSI busz megbízhatóságát. Miért küld a sendmail mail loops back to myself hibaüzenetet? Errõl részletesebben a kézikönyvben olvashatunk. A távoli gépeken miért viselkednek olyan furcsán a teljes képernyõs alkalmazások? Elõfordulhat, hogy az adott távoli gépen a terminál típusa nem cons25, amire viszont a &os; konzolnak a megfelelõ mûködéshez szüksége lenne. Ezt a problémát többféle módon is meg tudjuk kerülni: Mikor bejelentkezünk a távoli gépre, állítsuk a TERM környezeti változót az ansi vagy sco értékre, amibõl kiderül, hogy egyáltalán ismeri ezeket a termináltípusokat. A &os; konzolban használjunk VT100 emulátort, például a screen alkalmazást. A screen segítségével egyetlen terminálról egyszerre több munkamenetet is tudunk indítani, de egyébként is egy nagyon jó program. Minden screen által létrehozott ablak VT100-as terminálként mûködik, ezért a távoli gépen a TERM környezeti változó nyugodtan beállítható a vt100 értékre. Tegyük hozzá a cons25 bejegyzést a távoli gép terminálokat tároló adatbázisához. Ez pontos módszere jelentõs mértékben függ az adott gépen található operációs rendszertõl. Ebben leginkább az adott gépen található man oldalak tudnak segíteni. Indítsunk el a &os; rendszert futtató gépen egy X szervert és a távoli géprõl egy X rendszerre íródott terminálemulátorral, például az xterm vagy az rxvt programmal jelentkezzük be. A távoli gépen ekkor a TERM változó értéke vagy xterm, vagy pedig vt100 lesz. A Plug and Play kártyákat miért nem találja meg (vagy unknown típusúként látja) a &os;? Ennek az okait a következõ levélben fejtette ki &a.peter; a &a.questions; tagjainak, amelyben arra válaszolt, hogy egy belsõ modemet miért nem észlel a rendszer miután frissítették &os; 4.X-re (az érthetõség kedvéért szögletes zárójelek között hozzáadtunk néhány kiegészítést is). Az eredeti szövegbõl készült idézetet frissítettük.
A PNP BIOS beállította [a modemet] és magára hagyta valahol a portok számára fenntartott címtérben, így az ISA eszközök régi típusú [3.X-ben levõ] eszközpróbálgatásai ott találták meg. A 4.0 esetében azonban az ISA eszközöket kezelõ kód már sokkal inkább a PnP támogatására koncentrál. Korábban [a 3.X verziókban] elõfordulhatott az is, hogy az ISA eszközök keresése során a rendszer egy kóbor eszközt talált, majd ugyanazt megtalálta PnP eszközként és ütköztek az így duplán lefoglalni kívánt erõforrások. Ennek kivédésére elõször tehát letiltjuk a programozható kártyák felderítését, így ez a típusú kettõs detektálás nem történhet meg. Ez továbbá azt is jelenti, hogy a támogatott PnP hardverek azonosítóit elõre ismerni kell. Ennek hangolhatóságát már tervbevettük.
Tehát egy ilyen eszköz mûködtetéséhez szükségünk lesz a PnP azonosítójára, valamint arra, hogy felvegyük a felderítendõ PnP eszközök ISA eszközök közé. Ezt a &man.pnpinfo.8; segítségével kérhetjük le, amely például egy belsõ modem esetén a következõ kimenetet fogja adni: &prompt.root; pnpinfo Checking for Plug-n-Play devices... Card assigned CSN #1 Vendor ID PMC2430 (0x3024a341), Serial Number 0xffffffff PnP Version 1.0, Vendor Version 0 Device Description: Pace 56 Voice Internal Plug & Play Modem Logical Device ID: PMC2430 0x3024a341 #0 Device supports I/O Range Check TAG Start DF I/O Range 0x3f8 .. 0x3f8, alignment 0x8, len 0x8 [16-bit addr] IRQ: 4 - only one type (true/edge) [a többi részt kihagytuk] TAG End DF End Tag Successfully got 31 resources, 1 logical fdevs -- card select # 0x0001 CSN PMC2430 (0x3024a341), Serial Number 0xffffffff Logical device #0 IO: 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 IRQ 5 0 DMA 4 0 IO range check 0x00 activate 0x01 Innen a Vendor ID kezdetû sorra lesz szükségünk. A zárójelek között szereplõ hexadecimális szám (ami a példában a 0x3024a341) lesz az eszköz PnP azonosítója, valamint a közvetlenül ez elõtt szereplõ karakterlánc az egyedi ASCII azonosítója (PMC2430). Ha a &man.pnpinfo.8; lefuttatásának eredményeképpen megjelenõ lista nem tartalmazza a kérdéses eszközt, akkor helyette a &man.pciconf.8; használatával is próbálkozhatunk. Íme a pciconf -vl parancs kimenete egy integrált hangkártya esetében: &prompt.root; pciconf -vl chip1@pci0:31:5: class=0x040100 card=0x00931028 chip=0x24158086 rev=0x02 hdr=0x00 vendor = 'Intel Corporation' device = '82801AA 8xx Chipset AC'97 Audio Controller' class = multimedia subclass = audio Ebbõl a chip változót, vagyis a 0x24158086 értéket kell felhasználnunk. Ezt az információt (a Vendor ID vagy a chip értékét) ezután a /usr/src/sys/dev/sio/sio_isa.c állományba kell felvennünk. Ehhez elõször is készítsünk egy biztonsági másolatát a sio_isa.c állományról arra az esetre, ha véletlenül valami rossz történne. Ez azért is hasznunkra fog válni, mert így tudunk egy javítást mellékelni a hibajelentésünk mellé (mert ugye írni fogunk róla hibajelentést, ugye?). Szóval, keressük meg a sio_isa.c állományban a következõ sort: static struct isa_pnp_id sio_ids[] = { Menjük lentebb egészen addig, amíg nem találunk egy helyet, ahova be tudunk szúrni egy bejegyzést az eszközünkhöz. A bejegyzések megadásának módja lentebb látható, és a jobb oldalt megjegyzésbe tett ASCII Vendor ID szerint rendezettek, amelyek mellett még megtalálható (amennyiben kifér) a &man.pnpinfo.8; Device Description kimenetében kapott érték is: {0x0f804f3f, NULL}, /* OZO800f - Zoom 2812 (56k Modem) */ {0x39804f3f, NULL}, /* OZO8039 - Zoom 56k flex */ {0x3024a341, NULL}, /* PMC2430 - Pace 56 Voice Internal Modem */ {0x1000eb49, NULL}, /* ROK0010 - Rockwell ? */ {0x5002734a, NULL}, /* RSS0250 - 5614Jx3(G) Internal Modem */ A megfelelõ helyre ezután vegyük fel az eszközünkhöz tartozó hexadecimális Vendor ID értéket, mentsük el az állományt, fordítsuk újra a rendszermagot és indítsuk újra vele a rendszerünket. Ha mindent jól csináltunk, akkor az eszköz sio eszközként fog megjelenni.
Miért keletkezik nlist failed hiba például a top vagy systat parancsok futtatásakor? A gondot alapvetõen az okozza, hogy a kérdéses alkalmazás valamiért egy olyan rendszermagbeli szimbólumot keres, amit nem talál. Ez a típusú hiba a következõkbõl eredhet: A rendszermag és a hozzá tartozó programok nincsenek szinkronban (vagyis fordítottunk egy új rendszermagot, de nem volt installworld vagy fordítva) és emiatt a szimbólumokat tároló táblázat nem teljesen úgy épül fel, ahogy azt az alkalmazás gondolja. Ha errõl lenne szó, akkor egyszerûen nincs más teendõnk, mint befejezni a frissítést (ennek pontos részleteit lásd a /usr/src/UPDATING állományban). Nem a /boot/loader, hanem közvetlenül a boot2 (lásd &man.boot.8;) segítségével töltjük be a rendszermagot. Noha alapvetõen semmilyen problémát nem nem okoz a /boot/loader kihagyása, általánosságban véve azért mégis jobban elérhetõvé tudja tenni a rendszermagban található szimbólumokat a felhasználói programok felé. Miért tart olyan sokáig ssh vagy telnet használatával csatlakozni a számítógéphez? A tünet: nagyon sok idõ telik aközött, amíg a TCP kapcsolat felépül és a kliens bekéri a jelszót (vagy a &man.telnet.1; esetében amíg a bejelentkezõ képernyõ megjelenik). A betegség: nagyon valószínû, hogy a késlekedést az okozza, amikor a szerver megpróbálja a kliens IP-címét feloldani hálózati névvé. Sok szerver, köztük a &os;-ben is megtalálható Telnet és SSH szerver is ezt csinálja, többek közt azért, hogy a rendszergazda számára el tudja tárolni egy naplóban ezt a hálózati nevet. Az orvosság: ha az említett jelenség minden olyan esetben jelentkezik, amikor a számítógéprõl (mint kliensrõl) valamilyen szerverhez csatlakozni akarunk, akkor a kliens oldalán lesz a gond. Ehhez hasonlóan, ha csak egy adott szervernél tapasztaljuk, akkor azzal a számítógéppel történhetett valami. Amennyiben a problémákat a kliens okozza, nem tehetünk mást, a névoldáson kell úgy javítanunk, hogy a szerver normálisan fel tudja oldani. Ha helyi hálózaton tapasztaljuk mindezt, akkor ez már a szerver problémája és olvassunk tovább. Ellenkezõ esetben az internet a felelõs, ezért nagyon valószínû, hogy fel kell vennünk a kapcsolatot az internet-szolgáltatónkkal és segítséget kérni tõlük a hiba elhárításában. Ha a problémát viszont a helyi hálózaton található szerver okozza, akkor úgy kell azt beállítanunk, hogy a helyi neveket képes legyen rendesen feloldani. Ezzel kapcsolatban a &man.hosts.5; és &man.named.8; man oldalakat érdemes elolvasnunk. Ha a probléma viszont az interneten jelenik meg, akkor valószínû, hogy a szerver névfeloldása nem üzemel rendesen. Nézzünk meg egy másik gépet — például a www.yahoo.com címet. Ha ez sem mûködik, akkor nálunk van a gond. A &os; friss telepítését követõen az is elképzelhetõ, hogy egyszerûen csak hiányoznak a tartományokkal és névszerverekkel kapcsolatos megfelelõ adatok az /etc/resolv.conf állományból. Ez gyakran okoz késlekedést az SSH mûködésében, mivel az /etc/ssh könyvtárban található sshd_config állományban alapértelmezés szerint a UseDNS beállítás értéke yes (tehát a névfeloldás használata engedélyezett). Ha valóban ez okozza a problémát, akkor a pótoljuk az /etc/resolv.conf állományból hiányzó adatokat vagy az sshd_config állományban a UseDNS értéke ideiglenesen legyen no. Mire utal a stray IRQ (kóbor megszakítási kérés) üzenet? A kóbor megszakítási kéréseket jelzõ üzenetek általában a hardveres megszakítási kérések egyenletlenségeire utalnak, ezen belül is leginkább olyan esetekre, amikor az eszköz egy megszakítási kérés nyugtázása közepén eltávolítja az adott kérést. Három dolgot tehetünk ezzel kapcsolatban: Elviseljük ezeket a figyelmeztetéseket. Megszakítási kérésenként az elsõ öt üzenet után amúgy sem jelez többet a rendszer. Ha platformunkhoz (mint például &i386;) tartozó intr_machdep.c állományban található MAX_STRAY_LOG értékét átírjuk 5-rõl 0-ra és így újrafordítjuk a rendszermagot, akkor ezzel teljesen letilthatjuk a figyelmeztetéseket. Megszüntetjük az üzeneteket úgy, hogy csatlakoztatunk a rendszerhez egy olyan párhuzamos vonali eszközt, amely a 7-es IRQ-t használja, és rakunk fel hozzá egy PPP meghajtót (a legtöbb helyen egyébként ezzel lesz a gond), valamint a 15-ös IRQ-ra pedig rakunk egy IDE-meghajtót vagy más hasonló eszközt és telepítjük hozzá a megfelelõ meghajtót. Miért jelenik meg folyamatosan a file: table is full üzenet a rendszernaplóban? Ha ilyen hibaüzenetet látunk, akkor az arra utal, hogy kifogytunk a rendszerünkben egyszerre használható állományleírókból. A probléma leírásával és megoldásával kapcsolatban olvassuk el a kézikönyvben a kern.maxfiles változóról szóló részt A rendszermag korlátainak finomhangolása címû szakaszban. Miért árasztják el calcru: negative runtime vagy calcru: runtime went backwards üzenetek a konzolt? Ismert egy olyan probléma, hogy a BIOS-ban engedélyezzük az &intel; Enhanced SpeedStep technológiáját, akkor a rendszermag ehhez hasonló calcru üzeneteket kezd el küldözgetni: calcru: runtime went backwards from 6 usec to 3 usec for pid 37 (pagezero) calcru: runtime went backwards from 6 usec to 3 usec for pid 36 (vmdaemon) calcru: runtime went backwards from 170 usec to 138 usec for pid 35 (pagedaemon) calcru: runtime went backwards from 553 usec to 291 usec for pid 15 (swi6: task queue) calcru: runtime went backwards from 15521 usec to 10366 usec for pid 2 (g_event) calcru: runtime went backwards from 25 usec to 12 usec for pid 11 (swi1: net) calcru: runtime went backwards from 4417 usec to 3960 usec for pid 1 (init) calcru: runtime went backwards from 2084385 usec to 1793542 usec for pid 1 (init) calcru: runtime went backwards from 408 usec to 204 usec for pid 0 (swapper) Ennek oka, hogy az &intel; SpeedStep (EIST) egyes alaplapokkal nem kompatibilis. Megoldás: Tiltsuk le a BIOS-ban az EIST használatát. Ekkor még az ACPI-alapú processzorfrekvencia-szabályozás továbbra is elérhetõ a &man.powerd.8; használatán keresztül. Miért jár rosszul az óra a számítógépen? A számítógépnek kettõ vagy több idõmérõ eszköze van, és a &os; pont a rosszabbikat választotta. Adjuk ki a &man.dmesg.8; parancsot és vizsgáljuk meg a Timecounter kezdetû sorokat. Ezek közül a &os; a legnagyobb quality értékkel rendelkezõt választotta. &prompt.root; dmesg | grep Timecounter Timecounter "i8254" frequency 1193182 Hz quality 0 Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000 Timecounter "TSC" frequency 2998570050 Hz quality 800 Timecounters tick every 1.000 msec Errõl a kern.timecounter.hardware &man.sysctl.3; változó lekérdezésével tudunk ténylegesen megbizonyosodni: &prompt.root; sysctl kern.timecounter.hardware kern.timecounter.hardware: ACPI-fast Elõfordulhat, hogy az ACPI-idõzítõ hibás. Ilyenkor az a legegyszerûbb, ha az /etc/loader.conf állományban letiltjuk az ACPI-idõzítõ használatát: debug.acpi.disabled="timer" Vagy a BIOS is tudja módosítani a TSC idõzítõt — például azért, hogy csökkentse a processzor sebességét, amikor merül az akkumulátor vagy energiatakarékos módra vált. A &os; sajnos nem figyel ezekre a változtatásokra és elcsúszik az idõméréssel. Ahogy viszont az iménti példában is látható, itt még az i8254 idõzítõ is használható, méghozzá úgy, hogy a kern.timecounter.hardware &man.sysctl.8; változó értékét átállítjuk erre az értékre: &prompt.root; sysctl -w kern.timecounter.hardware=i8254 kern.timecounter.hardware: TSC -> i8254 Innentõl kezdve a számítógépünk már sokkal pontosabban mutatja az idõt. Ezt a változtatást úgy tudjuk minden rendszerindítás során automatikusan megtenni, ha felvesszük a következõ sort az /etc/sysctl.conf állományba: kern.timecounter.hardware=i8254 A rendszer laptopon miért nem tudja rendesen megtalálni a PC-kártyákat? Ez a probléma gyakran megjelenik olyan laptopokon, amelyek egynél több operációs rendszert is futtatnak, egyes nem-BSD típusú rendszerek ugyanis hajlamosak a hardvert inkonzisztens állapotban hagyni. Emiatt a &man.pccardd.8; parancs az adott kártyát "(null)""(null)" néven észleli a valós típusa helyett. A hardvert innen teljesen csak úgy tudjuk alapállapotába hozni, ha a PC-kártya foglalatát áramtalanítjuk. Ehhez ki kell kapcsolnunk a laptopot. (Tehát ne tegyük se készenléti, se pedig hibernált állapotba — teljesen ki kell kapcsolni.) A PC-kártya ezután várhatóan már mûködni fog. Némely laptopok hazudnak arról, hogy rendesen ki vannak-e kapcsolva. Amennyiben az elõbbi módszer nem válna be, próbáljuk meg úgy, hogy kikapcsoljuk a gépet, kivesszük az akkumulátort, várunk egy keveset, visszarakjuk és újra bekapcsoljuk. Miért ad a &os; rendszertöltõje Read error hibát és áll meg a BIOS képernyõn? A &os; rendszertöltõje rosszul ismerte fel a merevlemez geometriáját. Ezt a &os; slice-ok létrehozásakor és módosításakor külön meg kell adni az &man.fdisk.8; használatakor. A meghajtóhoz tartozó megfelelõ geometriai beállítások a számítógép BIOS-ában találhatóak. Keressük meg az adott meghajtó cilinder-fej-szektor (Cylinder/Head/Sector) értékét. A &man.sysinstall.8; partíciószerkesztõjében a G billentyû lenyomásával tudjuk beállítani ezt. Ekkor egy párbeszédablak jelenik meg, ahol meg tudjuk adni a cilinderek, fejek és a sávonkénti szektorok számát. Ide perjelekkel elválasztva gépeljük e a BIOS-ban talált értékeket. Például ha a merevlemez geometriája 5000 cilinder, 250 fej és sávonként 60 szektor, akkor a 5000/250/60 értéket kell megadnunk. Az Enter billentyû lenyomására ezek az értékek beállítódnak, és a W lenyomására pedig az új partíciós tábla kiíródik a lemezre. Egy másik operációs rendszer letörölte a boot managert. Hogyan lehet visszaállítani? Indítsuk el a &man.sysinstall.8; programot, majd válasszuk a Configure és Fdisk menüpontokat. A partíciószerkesztõben a Space billentyûvel tudjuk kiválasztani azt a partíciót, amelyen korábban a boot manager volt. Ezután az W billentyû lenyomásával tudjuk a változtatásainkat lemezre menteni. Ekkor egy menü jelenik meg, ahol a telepíteni kívánt rendszertöltõt választhatjuk ki. Adjuk meg és ekkor visszakerül a helyére. Mit jelent a swap_pager: indefinite wait buffer: hibaüzenet? Ez arra utal, hogy egy futó program megpróbált kiírni egy lapot a memóriából a lemezre, azonban 20 másodperce már nem tudott hozzáférni a lemezhez. Ezt okozhatják hibás szektorok a lemezen, a lemez hibás kábelezése vagy esetleg valamilyen lemezmûveletekkel kapcsolatos hardver meghibásodása. Amennyiben maga a meghajtó a rossz, akkor az ilyen hibaüzenetek mellett még más, a lemez hibás mûködésére utaló üzenetet is látnunk kell a /var/log/messages állományban vagy a dmesg kimenetében. Minden más esetben érdemes a meghajtó csatlakozásait és kábelezését ellenõrizni. Mik azok a UDMA ICRC hibák és hogyan lehet ellenük tenni valamit? A &man.ata.4; meghajtó jelenti ezeket a UDMA ICRC hibákat olyan esetekben, amikor a merevlemezre vagy a merevlemezrõl érkezõ DMA átvitel hibás. A meghajtó ilyenkor még párszor megpróbálja megismételni a mûveletet. Amennyiben ezek a mûveletek is meghiúsulnak, a DMA átvitel helyett a lassabb PIO átviteli módra állítja át a merevlemez felé irányuló kommunikációt. Ezt a problémát több tényezõ is okozhatja, habár ennek a leggyakoribb oka a hibás vagy rossz kábelezés. Ilyenkor mindig ellenõrizzük, hogy a merevlemezhez csatlakozó ATA-kábelek sértetlenek és a használni kívánt Ultra DMA átviteli módra alkalmasak. Ha cserélhetõ lemezes meghajtót használunk, akkor kompatibilisnek is kell lenniük. Ez a gond akkor jelentkezhet, amikor ugyanarra az ATA-csatornára egy Ultra DMA 66-os (vagy annál is gyorsabb) és egy régebbi meghajtót csatlakoztatunk. Végezetül ezek a hibaüzenetek arra is utalhatnak, hogy a meghajtó meghibásodott. A legtöbb gyártó külön szoftver ajánl fel ennek vizsgálatára, ezért ilyenkor érdemes letesztelnünk az érintett meghajtót, illetve amennyiben szükséges, biztonsági másolatot készíteni az adatainkról és kicserélni az eszközt. Az &man.atacontrol.8; segédprogram használatával ellenõrizni tudjuk, hogy jelenleg az egyes ATA-eszközök milyen DMA vagy PIO módban mûködnek. Erre a célra különösen az atacontrol mode csatorna parancsot javasoljuk, amivel képesek vagyünk megnézni az adott ATA-csatornára csatlakozó eszközök átviteli módjait. Itt a csatorna értéke nullától indul. Mi az a lock order reversal? Erre a kérdésre a választ a &os;-s szakkifejezések gyûjteményében találjuk meg a LOR címszó alatt. Mit jelent a Called ... with the following non-sleepable locks held üzenet? Ez az üzenet arra utalhat, hogy egy függvény lepihent miközben nála volt egy mutex (vagy más, nem pihentethetõ) típusú zárolás. Azért keletkezik ilyen hiba, mert a mutexeket nem úgy tervezték, hogy hosszabb ideig is meg lehessen tartani, kizárólag csak rövid idõtartamra vonatkozó szinkronizációt lehet velük végezni. Ez a programozói megegyezés lehetõvé teszi az eszközmeghajtók számára, hogy a megszakítások közben mutexek segítségével képesek legyenek szinkronizálni a rendszermag többi részével. A megszakítások (&os; alatt) pedig nem pihenhetnek. Ezért a rendszermagon belül semmilyen olyan alrendszer nem blokkolódhat huzamosabb ideig, amelyik mutexet tart magánál. Ezeket a hibákat úgy tudjuk elcsípni, ha olyan ellenõrzéseket teszünk a rendszermagba, amelyek jeleznek a &man.witness.4; alrendszernek, hogy küldjön figyelmeztetést vagy akár végzetes hibát (a rendszer konfigurációjától függõen) azokban a helyzetekben, amikor egy sejthetõen hosszabb ideig blokkolt hívás tart magánál egy mutexet. Röviden úgy foglalhatnánk össze, hogy ezek a hibák alapvetõen nem végzetesek, de egy kis balszerencsével az egyszerû kis megakadásoktól kezdve a teljes lefagyásig szinte bármilyen hibáért felelõsek lehetnek. A buildworld/installworld miért áll le touch: not found hibával? Ez a hibaüzenet nem azt jelenti, hogy a &man.touch.1; segédprogram nem található, hanem inkább azt, hogy az érintett állományok dátuma a jövõre állítódott be. Ha a CMOS óránkat a helyi idõ szerint állítottuk be, akkor egyfelhasználós módban indítsuk újra a rendszert és a adjkerntz -i parancs kiadásával állítsuk be a rendszermag óráját.
Kereskedelmi alkalmazások Ez a fejezet még nagyon rövid, de természetesen reméljük, hogy a különbözõ cégek hamarosan bõvíteni fogják! :) A &os; fejlesztõinek ezzel kapcsolatban semmilyen anyagi érdekük nincs, csupán szeretnék felsorolni a nyilvánosan is elérhetõ szolgáltatásokat (de úgy érezzük, hogy a &os; kereskedelmi irányú megközelítése a &os; fejlõdésére is jó hatással lehet hosszabb távon). Javasoljuk minden kereskedelmi fejlesztõnek, hogy küldjék be ide is a saját kérdéseiket. A gyártók honlapján olvashatjuk a teljes listájukat. Honnan lehet a &os;-hez irodai programcsomagokat szerezni? A nyílt forráskódú OpenOffice.org irodai programcsomag &os; alatt natívan is futtatható. StarOffice linuxos változata, amely az OpenOffice.org zárt forráskódú, továbbfejlesztett változata, szintén mûködik &os; alatt. A &os; ezeken kívül még számos szövegszerkesztõt, táblázatkezelõt és rajzprogramot is tartalmaz a Portgyûjteményében. Honnan lehet a &motif;-ot szerezni a &os;-hez? A The Open Group kiadta a &motif; 2.2.2 változatának forráskódját. Ez az x11-toolkits/open-motif csomagból vagy portból érhetõ el. A telepítésével kapcsolatban olvassuk el a kézikönyv portokról szóló részét. Az Open &motif; kizárólag csak nyílt forráskódú operációs rendszereken terjeszthetõ. Ezenkívül még használhatóak a &motif; kereskedelmi változatai is. Ezek viszont már nem ingyenesek, de a licencük megengedi azt, hogy zárt forráskódú szoftverekben is felhasználhassuk. Az Apps2gonál érdeklõdjünk a &os;-re elérhetõ legolcsóbb &motif; 2.1.20 ELF (&i386;) típusú terjesztésekkel kapcsolatban. Kétfajta terjesztés létezik, a fejlesztõi változat és a futásidejû változat (valamivel olcsóbb). Az egyes terjesztésekben a következõk találhatóak: OSF/&motif; manager, xmbind, panner, wsm Fejlesztõi készlet: uil, mrm, xm, xmcxx, include és Imake állományok Statikus és dinamikus ELF könyvtárak Példa alkalmazások A megrendelés során ne felejtsük el megadni, hogy a &motif; melyik &os; verzióhoz készített változatát kérjük (valamint az architektúrát se)! Az Apps2go NetBSD és OpenBSD rendszerekkel is foglalkozik, ezeket a változatokat jelenleg csak FTP-n keresztül lehet elérni. További információk Az Apps2go honlapja illetve sales@apps2go.com vagy support@apps2go.com vagy telefonon: (817) 431 8775 és +1 817 431-8775 Honnan lehet &os;-re CDE-t szerezni? A Xi Graphics korábban kínált fel CDE-t &os;-hez, de manapság már nem foglalkoznak ezzel. A KDE a CDE-hez nagyon sok tekintetben hasonló nyílt forráskódú X11 munkakörnyezet, de érdemes pillanatást vetnünk az xfce-re is. A KDE és az xfce egyaránt megtalalálható a portok között. Használhatóak adatbázisrendszerek &os; alatt? Igen! A &os; hivatalos honlapján megtaláljuk ezeket a kereskedelmi gyártók között. Érdemes még megnéznünk a Portgyûjteményeben a adatbázisokat tartalmazó szekciót. Az &oracle; fut &os; alatt? Igen. A következõ oldalakon találunk arról információt, hogyan telepíthetjük &os;-re az &oracle; &linux; változatát: http://www.unixcities.com/oracle/index.html http://www.shadowcom.net/freebsd-oracle9i/ Felhasználói alkalmazások Hol vannak a felhasználói programok? Nézzünk szét a portok között és láthatjuk, hogy milyen szoftvereket portoltak eddig &os;-re. A listában pillanatnyilag &os.numports; port található és naponta növekszik, ezért érdemes folyamatosan figyelni vagy az új portokról úgy is értesülhetünk rendszeresen, ha feliratkozunk a &a.announce; címére. A legtöbb portnak mûködnie kell a 6.X, 7.X és 8.X ágak használata esetén is. Mindegyik &os; kiadás elkészítésekor készül egy pillanatfelvétel a portokat tartalmazó könyvtárról és bekerül a ports/ könyvtárba. Ezenkívül még csomagok is rendelkezésünkre állnak, amelyek lényegében egy tömörített bináris terjesztési formát takarnak, némi plusz információval kiegészítve az egyéni telepítésekhez elvégzéséhez. A csomagok könnyen telepíthetõek és eltávolíthatóak anélkül, hogy pontosan ismernénk a benne található állományok összes apró részletét. A különbözõ csomagokat a &man.sysinstall.8; programban (a Configure menün belül) található Packages menüpontban tudjuk telepíteni, vagy meghívjuk meg a &man.pkg.add.1; parancsot. A csomagokat leginkább .tbz kiterjesztésükrõl lehet megismerni, valamint a telepítõ CD-ken a packages/All könyvtárban találhatóak. Az interneten keresztül is le tudjuk tölteni ezek közül a &os; különbözõ verzióihoz tartozó változatukat a hozzánk legközelebbi tükrözésekrõl: 6.X-RELEASE/6-STABLE esetén: ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-6-stable/ 7.X-RELEASE/7-STABLE esetén: ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-7-stable 8.X-RELEASE/8-STABLE esetén: ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-8-stable 9-CURRENT esetén: ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-9-current Nem mindegyik port érhetõ el csomagként, mivel folyamatosan készülnek az újabbak. Ezért mindig érdemes bizonyos idõközönként ellenõrizni a központi ftp.FreeBSD.org oldalon található csomagokat. Hogyan tudjuk beállítani az INN (Internet News) szolgáltatást a gépünkön? Telepítsük az news/inn csomagot vagy portot és utána kiindulásképpen nézzük meg Dave Barr INN oldalát, ahol (angolul) találhatunk egy INN GYIK-ot. A &os; rendelkezik &java; támogatással? Igen. Látogassunk el a http://www.FreeBSD.org/java/ oldalra. Miért nem fordul egy port a 6.X-STABLE, 7.X-STABLE vagy 8.X-STABLE változatot futtató gépeken? Ha olyan &os; verziónk van, amely egy kicsit lemaradt az aktuális -CURRENT vagy -STABLE ágak mögött, akkor valószínûleg frissítenünk kell a Portgyûjteményünket. Ennek részleteirõl a Porterek kézikönyvében, a Keeping Up címû részben olvashatunk (angolul). Ha viszont rendszerünkben minden a lehetõ legfrissebb, akkor elõfordulhat, hogy valaki olyan változtatást rakott fel a porthoz, amely a -CURRENT esetén mûködik, de a -STABLE változatban már nem. Ilyenkor feltétlenül küldjünk egy hibajelentést a &man.send-pr.1; paranccsal, hiszen a Portgyûjteménynek a -CURRENT és -STABLE ágak esetén egyaránt mûködnie kell. A make index paranccsal nem sikerült létrehozni az INDEX állomyánt. Mi a gond? Elsõként mindig ellenõrizzük, hogy a Portgyûjteményünk a lehetõ legfrissebb. A legfrissebb változatnál jelentkezõ INDEX készítési hibák mindig szem elõtt vannak, ezért általában gyorsan megjavulnak. Ha viszont egy friss verzióval rendelkezünk, akkor elképzelhetõ, hogy egy másik hibával kerültünk szembe. A make index parancsnak van egy olyan hibája, amely miatt nem képes a Portgyûjtemény hiányos példányával dolgozni. Feltételezi ugyanis, hogy az összes olyan port megtalálható a rendszerünkben, amely telepítése szükséges az adott porthoz. Ennek megértéséhez most képzeljük el, hogy megvan az ize/mize port a lemezen, amely függ az aze/maze porttól, és emiatt az aze/maze portnak és függõségeinek is rajta kell lennie a lemezünkön. Minden más esetben a make index nem tud összegyûjteni elegendõ információt ahhoz, hogy létre tudja hozni a függõségi gráfot. Ez különösen olyan &os; felhasználókkal fordul elõ, akik a &man.cvsup.1; (vagy &man.csup.1;) használatával frissítik a Portgyûjteményüket, de a refuse állományokban kizártak néhány kategóriát. Elméletben természetesen ki lehet zárni akármilyen kategóriát, azonban a gyakorlat azt mutatja, hogy ez szinte lehetetlen, mivel túlságosan sok port függ más kategóriákban található portoktól. Amíg valaki meg nem oldja ezt a problémát, addig fogadjuk el általános szabálynak, hogy az INDEX létrehozásához a teljes Portgyûjteménnyel rendelkeznünk kell. Néhány ritka esetben még elõfordulhat, hogy az INDEX azért nem jön létre, mert a make.conf állományban megadtunk valamilyen WITH_* vagy WITHOUT_* változót. Ha úgy érezzük, hogy ez okozhatja a problémát, akkor próbáljuk meg elõször ezen változók nélkül létrehozatni az INDEX állományt és csak utána jelenteni a hibát a &a.ports; címére. A CVSup miért nincs a &os; forrásai között? A &os; alaprendszerét úgy állították össze, hogy saját magát legyen képes legyen lefordítani, vagyis az egész operációs rendszer elõállítható legyen néhány alapvetõ eszköz használatával. Ezért a források között leginkább csak az található meg, ami feltétlenül kell a források lefordításához. Ilyen például a C fordító (&man.gcc.1;), a &man.make.1;, &man.awk.1; és a többi. Mivel a CVSup a Modula-3 programozási nyelven íródott, csak úgy tudnánk beletenni a &os; alaprendszerbe, ha hozzávennénk és karbantartanánk egy Modula-3 fordítót is. Ezzel együtt viszont növekedne a &os; forrása, amelyet aztán karban is kellene tartani. Ezért mind a fejlesztõk, mind pedig a felhasználók számára egyszerûbb, ha a CVSup egy külön portként érhetõ el a rendszerhez. Ez viszont gyorsan telepíthetõ a &os; telepítõ CD-ken található csomagokból. Azonban a &os; 6.2-RELEASE megjelenésétõl kezdve a &os; felhasználók nem maradnak integrált CVSup kliens nélkül. &a.mux; munkájának köszönhetõen a CVSup alkalmazásnak elkészült a C nyelven újraírt változata, a &man.csup.1;, amely most már az alaprendszer része. Noha jelenleg nem még nem képes mindarra, amire a CVSup, elegendõ (és nagyon gyors!) ahhoz, hogy a forrásainkat frissen tartsuk. A 6.2 elõtt kiadott rendszerek esetében ezt portból vagy csomagból is felrakhatjuk (lásd net/csup). A forrásokon kívül a telepített portokat is lehet valahogy frissíteni? A &os; alaprendszere ehhez nem kínál fel semmilyen eszközt, de léteznek olyan segédeszközök, amelyekkel valamennyire meg tudjuk könnyíteni a frissítés folyamatát. További segédprogramok telepítésével pedig a portok kezelését tudjuk tovább egyszerûsíteni, amirõl a &os; kézikönyv A portok frissítése címû szakaszában olvashatunk bõvebben. Minden nagyobb verziófrissítésnél újra kell fordítani az összes telepített portot a rendszeren? Mindenképpen! Noha látszólag a frissített rendszeren is remekül futnak a korábbi verzióra telepített alkalmazások, könnyen elõfordulhat, hogy az újabb portok telepítésékor vagy a meglevõek frissítésekor véletlenszerû összeomlásokat vagy egyéb hibákat tapasztalunk. Ne felejtsük el, hogy a rendszer frissítésekor a különféle osztott könyvtárak, betölthetõ modulok és a rendszer egyéb komponensei is lecserélõdnek. Ezért a régebbi változataikhoz fordított alkalmazások egyáltalán nem fognak elindulni vagy nem mûködnek rendesen. Ezzel kapcsolatban olvassuk el a &os; kézikönyvének frissítérõl szóló szakaszát. Minden kisebb verziófrissítésnél újra kell fordítani az összes telepített portot a rendszeren? Általánosságban véve nem. A &os; fejlesztõi ugyanis mindent megtesznek azért, hogy ugyanazon a fõ fejlesztési ágon belüli verziók között megmaradjon a bináris szintû kompatibilitás. Az esetleges kivételeket pedig dokumentálni szokták a kiadásokhoz tartozó jegyzetekben, ahol többnyire megadják az adott változtatáshoz tartozóan a követendõ tanácsokat. A /bin/sh miért ilyen egyszerû? A &os;-ben miért nincs bash vagy valamilyen más rendes parancsértelmezõ? Mert a &posix; szerint lennie kell egy ilyen parancsértelmezõnek. A valamivel bonyolultabb válasz: sokan szeretnének olyan szkripteket írni, amelyek több rendszer közt is átvihetõek. Ezért a &posix; a parancsértelmezõkre és a segédprogramokra vonatkozó parancsokat igen részletesen tárgyalja. A legtöbb ilyen szkriptet a Bourne-féle parancsértelmezõben készítik, és több fontos programozói felület (&man.make.1;, &man.system.3;, &man.popen.3; és ezek magasabb szintû, például Perl és Tcl nyelvi megfelelõi) a Bourne-parancsértelmezõ használatán alapszik. Mivel a Bourne-parancsértelmezõ használata ilyen széles körben elterjedt, fontos, hogy gyorsan induljon, elõre megjósolható legyen a mûködése és ne foglaljon túlságosan sok memóriát. A jelenlegi implementáció igyekszik ezek közül az elvárások közül egyszerre a lehetõ legtöbbet teljesíteni. A /bin/sh programot csak úgy tudjuk a megfelelõ méreten tartani, ha nem tesszük bele az összes többi parancsértelmezõben megtalálható kényelmi funkciót. Pontosan ezért találhatjuk meg viszont a Portgyûjteményben a többi, például a bash, scsh, tcsh és zsh parancsértelmezõket. (Ezek konkrét memóriahasználatát össze is tudjuk vetni, ha a ps parancs kimenetének VSZ és RSS oszlopait megnézzük.) A &netscape; és az Opera indítása miért tart olyan sokáig? Erre az az általános válasz, hogy a névfeloldás valószínûleg rosszul mûködik a rendszerünkön. A &netscape; és az Opera is ellenõrzi a névfeloldást az indulásakor. Ezért a böngészõ egészen addig nem jelenik meg az asztalon, amíg választ nem kap vagy rá nem jön, hogy nincs aktív hálózati kapcsolat. Ha a CVSup használatával frissítjük a Portgyûjteményt, akkor sok port nem fordul le mindenféle rejtélyes hibaüzenet kíséretében! Valami nagy baj van a Portgyûjteménnyel? Ha úgy korábban úgy frissítettük a CVSup használatával a Portgyûjteményt, hogy nem adtuk meg a ports-all CVSup algyûjteményt, akkor a ports-base algyûjteményt is mindig frissítenünk kell! Ennek okairól a kézikönyvben olvashatunk. Hogyan lehet MIDI állományokból audio CD-t készíteni? Ha MIDI állományokból akarunk audio CD-t készíteni, akkor elõször telepítsük fel a Portgyûjteménybõl a audio/timidity++ portot, majd kézzel tegyük hozzá Eric A. Welsh GUS patch-eit, melyek a címrõl tölthetõek le. Miután a TiMidity++ sikeresen felkerült a rendszerünkre, a MIDI állományokat a következõ paranccsal tudjuk átkonvertálni WAV állományokra: &prompt.user; timidity -Ow -s 44100 -o /tmp/juke/01.wav 01.mid A WAV állományok ezek után tetszõleges formátumba konvertálhatóak tovább vagy készíthetõ belõlük egy audio CD, ahogy azt a &os; kézikönyvben is olvashatjuk. A rendszermag beállítása Nehéz testreszabni a rendszermagot? Egyáltalán nem! Ezzel kapcsolatban olvassuk el a &os; kézikönyv rendszermag beállításairól szóló részét. Az új kernel állomány a hozzá tartozó modulokkal együtt a /boot/kernel könyvtárba települ, míg a rendszermag korábbi változata és a moduljai a /boot/kernel.old könyvtárba kerül át, így ha netalán valamit elrontottunk volna, akkor a rendszermag korábbi változatának betöltésével lehetõségünk lesz kijavítani a hibát. A rendszermag nem fordul le, mert a _hw_float nem található. Hogyan lehet megoldani ezt a problémát? Ez valószínûleg azért következett be, mert eltávolítottuk az npx0 (lásd &man.npx.4;) támogatást a rendszermag beállításai közül, mert a rendszerünkben nincs matematikai társprocesszor. Az npx0 eszköz jelenléte azonban kötelezõ. Valahol a gépünkben lennie kell olyan eszköznek, amely a lebegõpontos számok hardveres kezelését végzi, annak ellenére, hogy nem egy különálló eszköz, ahogy régen a 386-osoknál volt. A rendszermagban szerepelnie kell az npx0 eszköznek. Ha netalán még sikerülne is npx0 támogatás nélkül fordítanunk egy rendszermagot, akkor sem tud elindulni. Miért ilyen nagy a rendszermag mérete (közel 10 MB)? Nagyon valószínû, hogy a rendszermagunk debug módban készült el. A debug módú rendszermagokban rengeteg olyan szimbólum található, amely hasznos lehet a hibák keresése és a rendszer vizsgálata során, ezért emiatt jelentõs mértékben növekszik a mérete. Emiatt nem kell aggódnunk, mert egy hibakeresésre felkészített rendszermag egyáltalán nem vagy csak egy kicsivel lassabb, mint a hagyományos változat, illetve a rendszer összeomlásakor mindig mindig szükségünk lehet ezekre a debug információkra. Ha viszont kevés a lemezterület vagy egyszerûen csak nem akarunk debug módú rendszermagot akarunk futtatni, akkor a következõkre kell figyelnünk: Vegyük ki a rendszermag konfigurációs állományából a következõ sort: makeoptions DEBUG=-g A &man.config.8; használata során ne használjuk a beállítást. A fentiek közül akármelyiket is választjuk, a rendszermagunk debug módban jön létre. Ha azonban sikerült betartani a fentebb javasolt lépéseket, akkor egy normál rendszermagot kapunk, amely mérete ilyenkor jelentõs mértékben visszaesik: a legtöbbjük olyan 1,5 és 2 MB körül van. Miért ütköznek a megszakítások, amikor többportos soros vonali kártyákat akarunk használni? Ha a rendszermagot a többportos soros vonali kártyák támogatásával fordítjuk le, akkor a rendszertõl azt az üzenetet kapjuk, hogy csak az elsõ megszakítást fogja használni, a többit pedig ütközés miatt (interrupt conflict) kihagyja. Hogyan lehet ezen javítani? A gondot alapvetõen az okozza, hogy a &os; a rendszermagban fixen letárolja ezeket, nehogy valamilyen hardveres vagy szoftveres ütközés miatt elkallódjanak. Ezen úgy tudunk segíteni, ha egyetlen IRQ vonal kivételével az összes többi beállítását szabadon hagyjuk. Íme erre egy példa: # # Többportos nagysebességû soros vonali eszközök - 16550 UART # device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr Miért nem lehet lefordítani a rendszermagot, még a GENERIC beállításaival sem? Ennek több oka is lehet. Ezek közül néhány, de nem feltétlenül ebben a sorrendben: Nem a make buildkernel és make installkernel parancsokat használtuk és valószínûleg a forrásaink sem egyeznek meg a jelenleg futó rendszerével (például egy &rel.current;-RELEASE rendszert akarunk fordítani egy &rel2.current;-RELEASE rendszeren). Ha frissíteni akarunk, akkor olvassuk el a /usr/src/UPDATING állományt, különös tekintettel a végén található COMMON ITEMS címû szakaszra. A make buildkernel és make installkernel parancsokat használtuk, de elõtte nem futott le rendesen a make buildworld parancs. A make buildkernel parancs ugyanis erõsen támaszkodik a make buildworld által végzett munkára. Gyakran a &os;-STABLE változat használata esetén is elõfordulhat, hogy olyan pillanatban töltöttük le a forrásokat, amikor módosítás alatt voltak vagy valamiért nem mûködtek rendesen. Kizárólag a kiadások esetén tudjuk szavatolni a hibátlan fordítást, noha a &os;-STABLE verzióból készült változatok is többnyire megfelelõek. Próbáljuk meg újra letölteni a forrásokat, ha eddig még nem próbálkoztunk volna vele, és nézzük meg, hogy ez segít-e megoldani a problémát. Keressük másik szervert, ha gondjaink vannak a frissítéssel. Honnan tudhatjuk meg milyen ütemezõvel dolgozik a rendszerünk? Nézzük meg, hogy a rendszerünkben elérhetõ-e a kern.sched.quantum változó. Ha van ilyenünk, akkor valami ilyesmit kell tapasztalnunk: &prompt.user; sysctl kern.sched.quantum kern.sched.quantum: 99960 Ha létezik a kern.sched.quantum nevû sysctl változó, akkor a 4BSD ütemezõ fut (lásd &man.sched.4bsd.4;). Ha nem, akkor egy ilyen hibát kapunk a &man.sysctl.8; parancstól (ezt nyugodtan figyelmen kívül hagyhatjuk): &prompt.user; sysctl kern.sched.quantum sysctl: unknown oid 'kern.sched.quantum' Az aktuálisan használt ütemezõ neve közvetlenül elérhetõ a kern.sched.name sysctl változó lekérdezésén keresztül: &prompt.user; sysctl kern.sched.name kern.sched.name: 4BSD Mi az a kern.sched.quantum? A kern.sched.quantum értéke határozza meg, hogy egy futó program legfeljebb mennyi órajelet futhat egyszerre, megszakítás nélkül. Ezt az értéket a 4BSD ütemezõ használja, ezért a jelenlétébõl vagy hiányából következtetni tudunk a pillanatnyilag használatban levõ ütemezõre. Lemezek, állományrendszerek és rendszertöltõk Hogyan adjunk lemezeket a &os; rendszerünkhöz? Ezzel kapcsolatban olvassuk el a lemezek hozzáadásáról szóló részt a &os; kézikönyvben. Hogyan lehet átteni a rendszert egy nagyobb lemezre? Ezt legegyszerûbben úgy tudjuk megcsinálni, ha újratelepítjük az operációs rendszert az új lemezre és külön áttesszük a felhasználói adatokat. Ez különösen ajánlott abban az esetben, ha már több kiadás óta követjük a -STABLE változatot, vagy ha korábban már frissítettük a kiadásunkat. A &man.boot0cfg.8; segítségével fel tudjuk rakni a booteasyt mind a két lemezre és így egészen addig váltogatni tudjuk a kettõt, amíg teljesen át nem álltunk. Ugorjuk át a következõ bekezdést, és olvassuk el, hogy rakjuk át az adatokat. Úgy is dönthetünk, hogy nem telepítjük újra a rendszert. Ekkor vagy a &man.sysinstall.8;, vagy pedig a &man.fdisk.8; és a &man.disklabel.8; használatával osszuk fel és címkézzük meg az új lemezt. Érdemes még a &man.boot0cfg.8; segítségével felraknunk a booteasyt mind a két lemezre, így miután átmásoltuk a régi rendszerünket az új lemezre, ennek megtartásával ki tudjuk próbálni az új rendszert. A lemezek formázásáról szóló cikkben olvashatunk ennek pontosabb részleteirõl. Most, miután sikeresen beállítottuk az új lemezt, készen állunk az adatok átmásolására. Sajnos nem lehet csak úgy vakon átmásolni ezeket egyik lemezrõl a másikra. Ilyenkor ugyanis bizonyos dolgok (például a /dev könyvtárban található eszközleírók, az állományjelzõk és a linkek stb.) hajlamosak elromlani. Ezért ehhez olyan eszközökre lesz szükségünk, amelyek ismerik ezeket a dolgokat, mint például a &man.dump.8;. Továbbá javasoljuk, hogy egyfelhasználós módban végezzük el az átvitelt, noha ez nem feltétlenül szükséges. A rendszerindító állományrendszer átmozgatásához egyedül a &man.dump.8; és &man.restore.8; segédprogramokra lesz szükségünk. Esetleg a &man.tar.1; parancs is használható, de nem minden esetben. A &man.dump.8; és &man.restore.8; páros akkor is remekül használható, ha egy partíció tartalmát egy üres partícióra akarjuk átvinni. A következõ lépések szükségesek ahhoz, hogy a dump parancs segítségével átvigyük egyik partícióról a másikra az adatokat: Hozzunk létre egy új partíciót. Ideiglenesen csatlakoztassuk egy könyvtárba. Lépjünk be abba a könyvtárba. Mentsük le a régi partíciót és az eredményt küldjük át az újra. Például, ha a /mnt könyvtárba csatlakoztatott /dev/ad1s1a eszközrõl akarjuk átvinni a jelenlegi gyökérpartíciónkat, akkor ezeket a parancsokat kell kiadnunk: &prompt.root; newfs /dev/ad1s1a &prompt.root; mount /dev/ad1s1a /mnt &prompt.root; cd /mnt &prompt.root; dump 0af - / | restore rf - További munkát igényel, ha a dump parancs segítségével a partícióinkat is át akarjuk szervezni. Például a /var partíciót úgy tudjuk beleolvasztani a tövébe, ha létrehozunk egy olyan partíciót, amely mind a kettõ számára elegendõ nagy, majd a fentebb leírt módszerrel elõször átmozgatjuk a tövét, utána pedig átmozgatjuk az alpartíció tartalmát az elsõ mozgatás során létrejött egyik üres könyvtárba: &prompt.root; newfs /dev/ad1s1a &prompt.root; mount /dev/ad1s1a /mnt &prompt.root; cd /mnt &prompt.root; dump 0af - / | restore rf - &prompt.root; cd var &prompt.root; dump 0af - /var | restore rf - Egy könyvtárat, például /var tartalmát pedig úgy tudunk leválasztani a tövérõl, vagyis átrakni egy korábban nem létezõ partícióra, ha elõször létrehozzuk mind a két partíciót, csatlakoztatjuk a leendõ alpartíciót az ideiglenes csatlakozási ponton belül a megfelelõ könyvtárba és mindkettõre átmozgatjuk a régi partíció teljes tartalmát: &prompt.root; newfs /dev/ad1s1a &prompt.root; newfs /dev/ad1s1d &prompt.root; mount /dev/ad1s1a /mnt &prompt.root; mkdir /mnt/var &prompt.root; mount /dev/ad1s1d /mnt/var &prompt.root; cd /mnt &prompt.root; dump 0af - / | restore rf - A felhasználói adatok esetén a &man.cpio.1;, &man.pax.1;, &man.tar.1; és &man.dump.8; eszközöket ajánljuk. Az írás pillanatában még úgy tudjuk, hogy nem tartják meg az állományjelzõkkel kapcsolatos információkat, ezért csak óvatosan használjuk ezeket! A Veszélyesen dedikált (Dangerously Dedicated) lemezek veszélyesek a felhasználóra? A telepítés során két különbözõ módon tudjuk partícionálni a lemezeinket. Alapértelmezés szerint a rendszer igyekszik kompatbilis maradni a gépünkön található többi operációs rendszerrel. Ilyenkor normális partíciós táblabeli bejegyzéseket készít (amelyeket &os; alatt slice-oknak hívnak), és egy ilyen slice-ba teszi az összes saját partícióját. Emellé még telepíteni tudjuk az operációs rendszerek választásának lehetõségét is a rendszer indításakor. A másik lehetõség választása esetén azonban a &os; teljesen kisajátítja a lemezt és nem is próbál meg kompatibilis maradni a többi operációs rendszerrel. Miért is nevezzük ezt veszélyesnek? A lemez ebben az esetben nem tartalmaz semmi olyat, amelyet a hétköznapi programok partíciós táblaként tudnának beazonosítani. Attól függõen, hogy mennyire illedelmes, egy ilyen program panaszkodni fog, amikor megpróbálja értelmezni a lemez tartalmát, de rosszabb esetben anélkül felülírja a rendszerbetöltõt, hogy bármit is jelzett volna. Ráadásul a veszélyesen dedikált módon kiosztott lemezek még bizonyos BIOS-okat is képesek megzavarni, többek közt az Award (például amelyek a HP NetServer, Micronics és hasonló rendszerekben találhatóak) vagy Symbios/NCR (népszerû 53C8xx SCSI-vezérlõk) típusúak esetén találkozhatunk ezzel a problémával. Ez a lista persze nem teljes, más gyártók termékeivel is gondok akadhatnak. Ennek a hibának jellemzõ tünete a read error hibaüzenet, amely arra utal, hogy a &os; betöltõje nem találja saját magát a lemezen, vagy éppen az egész rendszer megáll a rendszer indítása közben. Akkor mégis mi értelme van ennek? Csak néhány kilobyte-tot spórolunk vele, miközben komoly gondokat okozhat egy frissen telepített rendszer esetében. A veszélyesen dedikált mód eredetileg az új &os; telepítõket veszélyeztetõ egyik komoly hibát szeretné kiküszöbölni: a merevlemezek BIOS és lemez önmaga által ismert geometriai beállításainak egyeztetése. A lemezgeometria fogalma tulajdonképpen már egy elavult fogalom, de a PC-k BIOS-a legbelül még mind a mai napig így kommunikál a lemezekkel. Amikor a &os; telepítõjével slice-okat hozunk létre, olyan módon kell rögzítenünk a lemezre ezek pozícióját, hogy a BIOS képes legyen megtalálni. Ha ez nem sikerül, akkor nem tudjuk elindítani a rendszert. A veszélyesen dedikált mód ezt a problémát az egyszerûsítésén keresztül próbálja megoldani, és néha sikerül is neki. Ezt azonban csak akkor javasoljuk, ha semmi más nem mûködik, hiszen az esetek túlnyomó részében más megoldás is létezik. Hogy tudjuk tehát akkor elkerülni a veszélyesen dedikált mód használatát a telepítés során? Jegyezzük fel, hogy mik a BIOS szerint a merevlemezünk geometriai beállításai. Ezt a rendszerindítás közben a rendszermagtól is megkérdezhetjük úgy, hogy a boot: paranccsorába megadjuk a beállítást, vagy a betöltõben a boot -v parancsot használjuk. Így pontosan a telepítõ indítása elõtt a rendszermag ki fogja írni a BIOS által ismert geometriai beállításokat. Ne essünk pánikba, várjuk meg, amíg a telepítõ elindul, tekerjünk vissza a számokhoz és olvassuk le ezeket. A lemezek általában a BIOS sorrendjében jelennek meg, tehát elõször az IDE aztán a SCSI típusúak. A lemez partícionálásakor ellenõrizzük, hogy az FDISK képernyõjén megjelenõ geometriai beállítások megfelelõek (tehát egyeznek a BIOS által ismert értékekkel). Ha eltérést tapasztalunk, akkor a G billentyû lenyomásával tudjuk átjavítani. Erre leginkább akkor lesz szükségünk, ha a lemez teljesen üres, vagy ha a lemezt egy másik rendszerbõl hoztuk át. Ez egyébként csak azoknál a lemezeknél okoz gondot, amelyekrõl a rendszert akarjuk indítani, a &os; a többi lemezzel már remekül elboldogul. Miután sikerült egyeztetnünk a BIOS és a &os; geometriai beállításait, szinte biztos, hogy nem kell már emiatt aggódnunk, így a veszélyesen dedikált módra sincs szükségünk. Ha viszont mégis egy read error hibaüzenetet kapnánk a rendszer indítása közben, akkor tegyünk egy próbát. Semmit sem veszíthetünk. Ha a veszélyesen dedikált mód használatáról szeretnénk visszatérni a megszokottra, akkor két lehetõségünk van. Elõször is teljesen le kell nulláznunk az MBR-t, így biztosra vehetjük, hogy az ezután következõ telepítések során egy teljesen üres lemezt látunk. Ezt például így lehet megtenni: &prompt.root; dd if=/dev/zero of=/dev/rda0 count=15 A másik módszer egy hivatalosan nem dokumentált DOS-os lehetõség használata: C:\> fdisk /mbr Ezzel egy új Master Boot Recordot tudunk telepíteni, ami ezzel együtt felülírja a BSD rendszertöltõjét is. Milyen partíciókon lehet Soft Updatest használni? A Soft Updates állítólag nem mûködik rendesen a gyökérpartíció esetén. A rövid válasz: A Soft Updates bármelyik partíción minden további nélkül használható. A hosszabb válasz: Korábban voltak bizonyos kétségek afelõl, hogy a Soft Updates jól mûködik a rendszerindító partíciókon is. Ez alapvetõen a Soft Updates két jellemzõjére vezethetõ vissza. Elõször is, a Soft Updatest alkalmazó partíciók esetén elõfordulhat, hogy a rendszerösszeomlás során elveszik valamennyi adat (maga a partíció nem lesz hibás, csupán némi adat tûnik el), illetve a Soft Updates ideiglenesen kifogyhat a tárhelybõl. A Soft Updates használata során a rendszermag legfeljebb harminc másodperc múlva írja ki fizikailag a változtatásokat a lemezre. Tehát amikor egy nagyobb állományt törlünk, akkor ez az állomány egészen addig a lemezen marad, amíg a rendszermag ténylegesen el nem végzi ezt a törlést. Ezzel viszont nagyon egyszerûen létrehozható egy ütközés (race condition) az állományrendszeren. Tegyük fel, hogy letörlünk egy nagyobb állományt és utána közvetlenül létrehozunk egy másik nagyobb állományt. Mivel az elsõ állomány ilyenkor még nem törlõdik le valójában a lemezrõl, ezért a második számára már nem lesz elegendõ helyünk. A rendszer ekkor egy hibaüzenetben fog figyelmeztetni minket, miközben pontosan az imént töröltünk le egy óriási állományt! Ha néhány másodperccel késõbb újra megpróbáljuk létrehozni ezt az állományt, akkor már minden a megfelelõ módon fog zajlani. Ezt régebben sok &os; felhasználó nem tudta mire vélni. Ha a rendszerünk olyankor omlik össze, amikor a rendszermag már elkezdte egy nagyobb mennyiségû adat kiírását a lemezre, de még nem fejezõdött be, akkor könnyen elõfordulhat, hogy ez az adat elveszik vagy meghibásodik. Ennek kockázata nagyon kicsi, és általában kezelhetõ, viszont az IDE-meghajtókban található írási gyorsítótár használata jelentõsen növeli ezt. Ezért a Soft Updates alkalmazása során nem javasoljuk ennek használatát. Ezek a problémák az összes Soft Updates partíciót veszélyeztetik. Mennyiben vonatkoznak viszont ezek a gyökérpartícióra? A gyökérpartíción nagyon ritkán változnak fontos információk. A /boot/kernel/kernel és az /etc egyedül a rendszer karbantartása során frissül, vagy például amikor a felhasználók jelszót változtatnak. Ha a rendszer egy ilyen változtatás harminc másodperces idején belül omlik össze, akkor megvan rá az esélyünk, hogy elvesznek az adataink. Ez a kockázat a legtöbb alkalmazás számára elfogadható, de semmiképpen sem szabad figyelmen kívül hagynunk. Ha a rendszerünk nem képes vállalni még ennyi kockázatot sem, akkor a rendszerindító partíción tiltsuk le a Soft Updates használatát! A gyökérpartíció hagyományosan az egyik legkisebb partíció. Ha viszont az ideiglenes állományok tárolására szánt /tmp könyvtárat is ezen belülre tesszük és gyakran használjuk, akkor ebbõl idõszakosan tárhelyproblémáink adódhatnak. Könnyen megoldhatjuk azonban ezt a problémát, ha a /tmp könyvtárhoz létrehoznunk egy szimbolikus linket a /var/tmp könyvtárra. Mi történt a &man.ccd.4; eszközzel? A hibajelenség: &prompt.root; ccdconfig -C ccdconfig: ioctl (CCDIOCSET): /dev/ccd0c: Inappropriate file type or format Ez általában olyankor történik, amikor olyan c partíciókat próbálunk meg összefûzni, amelyek alapértelmezés szerint unused (nem használt) típusúak. A &man.ccd.4; meghajtó azonban megköveteli, hogy az érintett partíciók FS_BSDFFS típusúak legyenek. Szerkesszük át a lemezeken található címkéket és változtassuk meg a partíciók típusát a 4.2BSD értékre. Miért nem lehet a &man.ccd.4; eszköz lemezcímkéjét szerkeszteni? A hibajelenség: &prompt.root; disklabel ccd0 (itt valami gondot ír ki, ezért megpróbáljuk szerkeszteni a címkét) &prompt.root; disklabel -e ccd0 (edit, save, quit) disklabel: ioctl DIOCWDINFO: No disk label on disk; use "disklabel -r" to install initial label Ezt általában azért kapjuk, mert a &man.ccd.4; által visszaadott lemezcímke valójában nem létezik a lemezen. Ezen úgy tudunk segíteni, ha explicit módon visszaírjuk, valahogy így: &prompt.root; disklabel ccd0 > /tmp/lemezcimke.tmp &prompt.root; disklabel -Rr ccd0 /tmp/lemezcimke.tmp &prompt.root; disklabel -e ccd0 (most már mûködni fog) Lehet más operációs rendszerek állományrendszerét is csatlakoztatni &os; alatt? A &os; több más állományrendszert is ismer. UFS Az UFS formátumú CD-k &os; alatt közvetlenül csatlakoztathatóak. A Digital UNIX és más rendszerek UFS partícióit nem már annyira könnyû csatlakoztatni, ez leginkább a kérdéses operációs rendszer partícionálási megoldásaitól függ. ext2/ext3 A &os; támogatja az ext2fs és ext3fs partíciókat. Errõl bõvebben lásd a &man.mount.ext2fs.8; man oldalt. NTFS A &os; csak olvasni képes az NTFS partíciókat. Ezzel kapcsolatban a &man.mount.ntfs.8; man oldalán találunk részletesebb információkat. Az írhatóság használatához az ntfs-3g portolt változatát javasoljuk (lásd sysutils/fusefs-ntfs). FAT A &os; egyaránt képes írni és olvasni a FAT típusú partíciókat. Errõl a &man.mount.msdosfs.8; man oldalán tudhatunk meg többet. ReiserFS A &os; tudja olvasni a ReiserFS partíciókat. Ezt a &man.mount.reiserfs.8; man oldalon olvashatjuk. ZFS A &os; jelen pillanatban a &sun; ZFS meghajtójának átiratát is tartalmazza. Jelenleg azonban csak elegendõ memóriával rendelkezõ &arch.amd64; platformokon javasoljuk a használatát. Részletesebb információkért lásd a &man.zfs.8; man oldalt. A &os; hálózati állományrendszereket is támogat, többek közt az NFS-t (lásd &man.mount.nfs.8;), a NetWare-t (lásd &man.mount.nwfs.8;), és Microsoft-féle SMB állományrendszereket (lásd &man.mount.smbfs.8;). Más egyéb FUSE-alapú állományrendszer (sysutils/fusefs-kmod) támogatását is megtalálhatjuk a portok között. Hogyan lehet másodlagos (logikai) DOS partíciókat csatlakoztatni? A logikai DOS partíciók az elsõdleges partíciók után találhatóak. Például, ha van egy E betûjelû logikai partíciónk a második SCSI-meghajtónkon, akkor lennie kell egy ötödik slice-nak a /dev könyvtárban, amelyet majd csatlakoztatni tudunk: &prompt.root; mount -t msdosfs /dev/da1s5 /dos/e Használható titkosított állományrendszer &os; alatt? Igen. Erre a célra a &man.gbde.8; és a &man.geli.8; is tökéletesen alkalmas. A részleteket lásd a &os; kézikönyv A lemezpartíciók titkosítása címû fejezetében. A &windowsnt; rendszertöltõjével is el lehet indítani a &os;-t? Ehhez tulajdonképpen csak annyit kell csinálnunk, hogy átmásoljuk a &os; rendszerindító partíciójának az elsõ szektorát egy állományba a DOS/&windowsnt; partíción belül. Legyen ez például a C:\BOOTSECT.BSD állomány (a C:\BOOTSECT.DOS mintájára), amelyhez aztán így igazítjuk a c:\boot.ini állományt: [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows NT" C:\BOOTSECT.BSD="&os;" C:\="DOS" Ha a &os; ugyanazon a lemezen található, ahonnan a &windowsnt; is indul, akkor egyszerûen csak másoljuk át a /boot/boot1 állományt C:\BOOTSECT.BSD néven. Ha viszont a &os; egy másik lemezen található, akkor a /boot/boot1 önmagában már nem elegendõ, hanem helyette a /boot/boot0 állományra lesz szükségünk. A /boot/boot0 állományt a &man.sysinstall.8; használatával kell telepíteni abból a menübõl, ahol a &os; boot managerét kell kiválasztani. Erre azért van szükség, mert a /boot/boot0 állományon belül a partíciós tábla teljesen üres, azonban a &man.sysinstall.8; át fogja másolni a partíciós táblát mielõtt a /boot/boot0 állományt az MBR-be tenné. Ne másoljunk át csak úgy egyszerûen a /boot/boot0 állományt a /boot/boot1 helyett! Ezzel felülíródik a partíciós táblánk és így a számítógépet nem tudjuk elindítani! Amikor a &os; boot managere lefut, az utoljára indított operációs rendszert a partíciós táblában aktívként jelöli meg (ezzel lényegében megjegyzi), majd ezután beírja magát az MBR-be. Emiatt, hogy ha csak egyszerûen átmásoljuk a /boot/boot0 állományt a C:\BOOTSECT.BSD állományba, akkor csak egy egyetlen aktív bejegyzést tartalmazó üres partíciós táblát fog visszaírni az MBR-be. A LILO-ból hogyan lehet &os;-t és Linuxot is indítani? Ha a &os; és a &linux; is ugyanazon a lemezen helyezkedik el, akkor nincs más teendõnk, mint követni a LILO telepítési útmutatójában a nem-&linux; típusú operációs rendszerek indítására vonatkozó utasításokat. Ezek röviden összefoglalva a következõk: Indítsuk el a Linuxot és vegyük fel a következõ sort az /etc/lilo.conf állományba: other=/dev/hda2 table=/dev/hda label=&os; (A fentiekben feltételeztük, hogy a &os;-t tartalmazó slice a &linux; számára /dev/hda2 néven érhetõ el. Ez természetesen a saját konfigurációnkhoz kell szabni.) Ezután egyszerûen csak futtassuk le a lilo parancsot root felhasználóként és már készen is vagyunk. Ha a &os; egy másik lemezen található, akkor a loader=/boot/chain.b LILO-bejegyzést kell használnunk. Például: other=/dev/dab4 table=/dev/dab loader=/boot/chain.b label=&os; Bizonyos helyzetekben elõfordulhat, hogy a &os; rendszertöltõjének át kell adnunk a meghajtó BIOS szerinti sorszámát, mert csak így tudjuk rendesen elindítani a második lemezrõl. Például, ha a &os; szerint a SCSI-lemezünk a BIOS-ban az 1-es lemez, akkor ezt kell megadnunk a &os; rendszertöltõjének: Boot: 1:da(0,a)/boot/kernel/kernel A &man.boot.8; beállítható úgy, hogy a rendszer indításakor automatikusan mindig ezt a beállítást használja. A &os; és &linux; együttes használatáról további részleteket a &linux;+&os; mini-HOWTO címû írásból tudhatunk meg. Hogyan lehet a GRUB használatával &os;-t és Linuxot is indítani? A &os;-t nagyon könnyû elindítani a GRUB segítségével. Ehhez csupán annyit kell tennünk, hogy felvesszük a következõ sorokat a GRUB konfigurációs állományába (/boot/grub/menu.lst, vagy bizonyos, például Red Hat-típusú rendszerekben a /boot/grub/grub.conf): title &os; 6.1 root (hd0,a) kernel /boot/loader Itt a hd0,a az elsõ lemezen található rendszerindító partícióra mutat. Ha a lemezen belül a slice számát is szeretnénk megadni, akkor írhatjuk így is: (hd0,2,a). Ha ezt nem adjuk meg, akkor a GRUB alapértelmezés szerint a lemezen levõ elsõ a partícióval rendelkezõ slice-ot keresi meg. Hogyan lehet a BootEasy használatával elindítani a &os;-t és a Linuxot? A LILO-t ne a Master Boot Recordba, hanem a linuxos partíciónk elejére telepítsük. Ezután a BootEasybõl már el tudjuk indítani a LILO-t. Abban az esetben is ezt javasoljuk, ha &windows; és &linux; is van a gépünkön, mivel így szintén egyszerûbb lesz elindítani a Linuxot, ha netalán valamikor újra kellene telepíteni a &windows;-t (ami viszont egy irigy operációs rendszer, mert nem tûr meg semmilyen más operációs rendszert maga mellett a Master Boot Recordban). A rendszerindításkor látható ??? hogyan írható át valami értelmesre? Ez az szabványos boot managerrel csak úgy lehet megoldani, ha újratelepítjük. A portok között viszont a sysutils kategóriában rengeteg olyan más boot managert találhatunk, amely tud ilyet is. Cserélhetõ lemezes meghajtókat hogyan lehet használni? Legyen az akár egy &iomegazip;, EZ drive meghajtó (esetleg egy floppy, ha így akarjuk használni), vagy éppen egy új merevlemez, miután már telepítettük és felismerte a rendszert, illetve behelyeztük a lemezt, kártyát vagy akármit, minden esetben szinte ugyanaz a teendõ. (Ez a válasz leginkább Mark Mayo ZIP GYIK címû írásán alapszik.) Ha tehát egy ZIP meghajtóról vagy floppylemezrõl beszélünk, amelyen egy DOS-os állományrendszer található, akkor azt parancssorból így érhetjük el, ha floppy: &prompt.root; mount -t msdosfs /dev/fd0c /floppy vagy így, ha egy gyári beállításokkal rendelkezõ ZIP-lemez: &prompt.root; mount -t msdosfs /dev/da2s4 /zip A többi lemez esetén a &man.fdisk.8; vagy a &man.sysinstall.8; segítségével nézzük meg, hogy milyen partíciók és hogyan találhatóak meg rajtuk. A következõ példákban egy da2 eszközként, vagyis egy harmadik SCSI-lemezként megjelenõ ZIP-meghajtót fogunk használni. Hacsak nem floppyval van dolgunk, illetve nem tervezzük másoknak is odaadni a cserélhetõ médiumot, akkor érdemes inkább BSD típusú állományrendszert telepíteni rá. Így támogatottak lesznek a hosszú állománynevek, és legalább egy kétszer gyorsabb és egy sokkal megbízhatóbb megoldást kapunk. Ehhez elõször is le kell szednünk a DOS-szintû partíciókat és állományrendszereket. Erre a célra egyaránt megfelel a &man.fdisk.8; vagy a &man.sysinstall.8;, illetve kisebb lemezek esetén valószínûleg nem is lesz szükségünk több operációs rendszer támogatására, így aztán közvetlenül is törülhetjük ezeket: &prompt.root; dd if=/dev/zero of=/dev/rda2 count=2 &prompt.root; disklabel -Brw da2 auto A &man.disklabel.8; vagy a &man.sysinstall.8; használatával ezután létre tudunk hozni BSD típusú partíciókat. Valószínûleg erre lesz szükségünk, ha lapozóállományt is tenni akarunk a lemezre, noha ennek nem sok értelme van például egy ZIP-meghajtó esetén. Végezetül hozzunk létre egy új állományrendszert. Itt most ez egész ZIP-lemezen egyetlen partíció lesz: &prompt.root; newfs /dev/rda2c Csatlakoztassuk: &prompt.root; mount /dev/da2c /zip Emellett még hasznos lehet felvenni hozzá egy sort az /etc/fstab állományba is (lásd &man.fstab.5;), így a jövõben elegendõ csak a mount /zip parancsot kiadnunk a csatlakoztatásához: /dev/da2c /zip ffs rw,noauto 0 0 Miért ad a rendszer Incorrect super block hibát CD-k csatlakoztatásánál? Fel kell világosítanunk a &man.mount.8; parancsot a csatlakoztatandó eszköz típusáról. Errõl a kézikönyv lézeres tárolóeszközökrõl szóló részében olvashatunk, innen is különösen a Adat CD-k használata címû szakaszt ajánljuk. Miért ad a rendszer Device not configured hibaüzenetet CD-k csatlakoztatásakor? Ez általában arra utal, hogy nincs CD a meghajtóban, vagy a meghajtó nem érhetõ el a buszon. Ezzel kapcsolatban a kézikönyv Adat CD-k használata címû szakaszát javasoljuk elolvasásra. Miért jelenik meg az összes nemzeti karakter helyén ?, amikor &os; alatt csatlakoztatunk egy CD-t? A CD-n valószínûleg a Joliet kiterjesztés használatával tárolják az állományok és könyvtárak adatait. Erre vonatkozóan a kézikönyvben a Lézeres tárolóeszközök (CD-k) létrehozása és használata címû rész elolvasását javasoljuk, különös tekintettel az Adat CD-k használata címû szakaszra. A &os; alatt készített CD-ket nem lehet más operációs rendszerekkel olvasni. Miért nem? Ez minden bizonnyal abból fakad, hogy nem egy ISO 9660 állományrendszert vettük fel rá, hanem közvetlenül maguk az állományokat. Olvassuk el a kézikönyvben a Lézeres tárolóeszközök (CD-k) létrehozása és használata címû fejezetet, de különösen a Nyers adat CD-k írása címû részt. Hogyan lehet lementeni egy adat CD tartalmát a merevlemezre? Errõl a kézikönyvben találunk hasznos információkat, azon belül is az Adat CD-k másolása címû szakaszban. A CD-kkel végezhetõ további mûveletekrõl a kézikönyv Lézeres tárolóeszközök (CD-k) létrehozása és használata címû részében találhatunk részletes útmutatásokat. Miért nem lehet audio CD-ket csatlakoztatni a mount paranccsal? Ha zenei CD-ket próbálunk meg csatlakoztatni, akkor például egy cd9660: /dev/acd0c: Invalid argument hibát fogunk kapni a rendszertõl. Ez azért történik, mert a mount parancs csak állományrendszerekkel használható. A zenei CD-ken viszont semmilyen állományrendszer nincs, egyszerûen csak maga az adat. Az olvasásukhoz olyan programra lesz szükségünk, amely képes zenei CD-kkel dolgozni, mint például az audio/xmcd port. Hogyan lehet többmenetes (multisession) CD-ket csatlakoztatni a mount paranccsal? A &man.mount.8; alapértelmezés szerint az CD-n található utolsó adatsávot (menetet, vagy sessiont) próbálja meg olvasni. Ha viszont egy korábbi menetet szeretnénk vele betöltetni, akkor erre használjuk a paranccsori paramétert. Erre a &man.mount.cd9660.8; man oldalon találhatunk különbözõ példákat. Hogyan képesek az egyszerû felhasználók floppykat, CD-ket és más egyéb cserélhetõ lemezes eszközöket használni? A normál felhasználók számára engedélyezni tudjuk az eszközök csatlakoztatását. Íme: root felhasználóként állítsuk be a vfs.usermount sysctl változót az 1 értékre: &prompt.root; sysctl -w vfs.usermount=1 A cserélhetõ eszközöket képviselõ eszközleírókra állítsuk be root felhasználóként a megfelelõ engedélyeket. Például a felhasználóknak így tudjuk engedélyezni az elsõ floppymeghajtó használatát: &prompt.root; chmod 666 /dev/fd0 Az operator csoportban levõ felhasználók pedig így fognak tudni CD-ket csatlakoztatni: &prompt.root; chgrp operator /dev/acd0c &prompt.root; chmod 640 /dev/acd0c Fel kell vennünk ezeket a módosításokat az /etc/devfs.conf állományba is, mivel csak így maradnak meg a következõ rendszerindítás után. Ehhez root felhasználóként a vegyük fel a megfelelõ sorokat az /etc/devfs.conf állományba. Például, ha a felhasználóknak engedélyezni akarjuk az elsõ floppymeghajtó használatát, akkor: # Bármelyik felhasználó képes floppykat csatlakoztatni. own /dev/fd0 root:operator perm /dev/fd0 0666 Így engedélyezhetjük az operator csoport tagjainak a CD-k csatlakoztatását: # Az operator csoport tagjai csatlakoztathatnak CD-ket. own /dev/acd0 root:operator perm /dev/acd0 0660 Végezetül tegyük a vfs.usermount=1 sort az /etc/sysctl.conf állományba, így a rendszer következõ indításakor is megmarad ez a beállítás. Most már mindegyik felhasználó képes csatlakoztatni a /dev/fd0 eszközleírón keresztül elérhetõ lemezt a saját könyvtárába: &prompt.user; mkdir ~/az-én-csatlakozási-pontom &prompt.user; mount -t msdosfs /dev/fd0 ~/az-én-csatlakozási-pontom A operator csoport tagjai is képesek most már az /dev/acd0c eszközleírón keresztül elérhetõ CD-ket csatlakoztatni a saját könyvtárukba: &prompt.user; mkdir ~/az-én-csatlakozási-pontom &prompt.user; mount -t cd9660 /dev/acd0c ~/az-én-csatlakozási-pontom Az eszközök leválasztása is hasonlóan egyszerû: &prompt.user; umount ~/az-én-csatlakozási-pontom A vfs.usermount engedélyezésével azonban együttjár némi biztonsági kockázat is. Az &ms-dos; formátumú lemezek csatlakoztatására ezért inkább a Portgyûjteményben található emulators/mtools csomagot javasoljuk. A példákban használt eszközneveket természetesen a konfigurációnknak megfelelõen meg kell változtatnunk. A du és a df parancsok eltérõ mennyiségû szabad helyet mutatnak. Mi okozza ezt? A válaszhoz meg kell értenünk a du és a df mûködését. A du végigmegy a könyvtárszerkezeten és megnézi, hogy mekkorák az egyes állományok, majd megjeleníti a végösszegüket. A df ezzel szemben egyszerûen csak lekérdezi az állományrendszertõl, hogy mennyi szabad hely maradt rajta. Ezek látszólag ugyanazt a módszer fedik, azonban miközben a könyvtár nélkül állományok befolyásolják a df parancsot, addig a du parancsot nem. Amikor egy program használ egy olyan állományt, amelyet eközben letörlünk, egészen addig létezni fog, amíg a program be nem fejezi a használatát. Ettõl függetlenül viszont az állomány azonnal eltûnik a könyvtárból. Ezt nagyon könnyen ki is tudjuk próbálni egy olyan programmal, mint például a more. Tegyük fel, hogy van akkora állományunk, amely elég nagy ahhoz, hogy feltûnjön a du és a df kimenetében. (Mivel manapság már nagyok a tárolóeszközök, ennek egy igen nagy állománynak kell lennie!) Ha letöröljük ezt az állományt, miközben a more paranccsal még használjuk, a more nem fog rögtön leállni és panaszkodni az állomány hiányára. Egyedül csak az állományhoz tartozó bejegyzés tûnik el a könyvtárból, így más program már nem tud hozzáférni. A du erre már azt mondja, hogy nem létezik — bejárta a könyvtárat és nem találta. A df szerint azonban még mindig ott van, hiszen az állományrendszer tudja, hogy a more parancsnak még szüksége van rá. Ahogy a more befejezte a dolgát, a du és a df által mutatott értékek ismét egyezni fognak. Azt sem szabad elfelejtenünk, hogy a Soft Updates használata esetén akár 30 másodpercet is várnunk kell, hogy a változtatásaink láthatóvá váljanak! Ez a helyzet nagyon gyakori webszerverek esetén. Sokan úgy állítanak be a &os; rendszerükön webszervert, hogy elfelejtik beállítani hozzá a naplók archiválását és váltását. Ilyenkor a hozzáférések naplózása gyorsan meg tudja tölteni a /var könyvtárat. Ekkor a rendszergazda törli az adott állományt, de a rendszer még mindig panaszkodik a szabad hely hiánya miatt. A webszerver leállítása és újraindítása ekkor segít felszabadítani az állományt, így az állományrendszerrõl is törlõdhet. Ennek megelõzésére használjuk a &man.newsyslog.8; programot. Hogyan lehet növelni a lapozóterületet? A kézikönyv Beállítás és finomhangolás címû fejezetében található egyik szakaszban olvashatunk errõl. A &os; miért látja kisebbnek a lemezeket mint amekkorának a gyártó mondja ezeket? A merevlemezek gyártói általában a gigabyte-okat egy milliárd byte-ként számolják, miközben a &os; pedig 1 073 741 824 byte-nak. Ez remekül megmagyarázza, hogy a &os; rendszerüzenetei között egy elméletileg 80 GB méretû lemez miért 76 319 MB-osnak jelenik meg. Emellett érdemes még tisztában lennünk azzal is, hogy a &os; (alapértelmezés szerint) fenntartja a lemezterület 8 százalékát. Hogyan lehet egy partíció 100 százaléknál is jobban megtelt? Az UFS partíciók egy részét (amely alapértelmezés szerint a teljes kapacitás 8 százaléka) az operációs rendszer fenntartja a saját és a root felhasználó számára. A &man.df.1; ezt a területet nem számolja a Capacity oszlopban megjelenõ értékhez, ezért tudja átlépni a 100 százalékos arányt. Sõt még azt is láthatjuk, hogy a blokkok számát jelzõ Blocks oszlopban megjelenõ érték mindig, általában pontosan 8 százalékkal nagyobb, mint a használt blokkokat jelzõ Used és a rendelkezésre álló blokkokat jelzõ Avail oszlopokban szereplõ értékek összege. A részleteket a &man.tunefs.8; man oldalon belül a opció bemutatásánál olvashatjuk. Rendszeradminisztráció Hol vannak a rendszerindítás beállításáért felelõs állományok? Az ezzel kapcsolatos beállítások elsõsorban az /etc/defaults/rc.conf állományban találhatóak (lásd &man.rc.conf.5;). A rendszer indításáért felelõs szkriptek, mint például az /etc/rc vagy az /etc/rc.d könyvtár tartalma (lásd &man.rc.8;) ezt használja. Ezt az állományt tilos közvetlenül szerkeszteni! Ha valamit meg akarunk változtatni az /etc/defaults/rc.conf állományban szereplõ beállítások közül, akkor ehelyett egyszerûen csak másoljuk le az /etc/rc.conf állományba és állítsuk be ott az értékét. Például, ha el akarjuk indítani a beépített névfeloldó szolgáltatást, a &man.named.8; démont, akkor ennyit kell tennünk: &prompt.root; echo named_enable="YES" >> /etc/rc.conf Ha helyi szolgáltatásokat akarunk futtatni, akkor tegyük a hozzá tartozó szkripteket az /usr/local/etc/rc.d könyvtárba. Ezek a szkriptek legyenek végrehajthatóak és az alapértelmezett állománymóduk legyen 555. Hogyan lehet felhasználókat egyszerûen létrehozni? Használjuk a &man.adduser.8;, vagy bonyolultabb esetekben a &man.pw.8; parancsot. Felhasználókat törölni a &man.rmuser.8;, vagy amennyiben szükséges, a &man.pw.8; paranccsal tudunk. A crontab szerkesztése után miért jelennek meg a root: not found és a hozzá hasonló hibaüzenetek? Ilyen általában olyankor történik, amikor a rendszerszintû crontab állományt módosítjuk (/etc/crontab), majd a &man.crontab.1; használatával megpróbáljuk telepíteni: &prompt.root; crontab /etc/crontab Ezt nem így kell megoldani. A rendszerszintû crontab felépítése eltér a felhasználókhoz tartozó crontab állományokétól (a &man.crontab.5; man oldal szemlélteti részletesebben ezeket az eltéréseket), amelyet a &man.crontab.1; próbál meg ilyenkor telepíteni. Ha így csináltuk, akkor a crontab nem lesz több, mint az /etc/crontab hibás formátumú változata. Töröljük le: &prompt.root; crontab -r Legközelebb, amikor az /etc/crontab állományt módosítjuk, nem kell értesítenünk a &man.cron.8; démont, mivel magától észre fogja venni az elvégzett változtatásokat. Ha valamit napi, heti vagy havi rendszerességgel akarunk futtatni, akkor ehelyett inkább másoljuk be az /usr/local/etc/periodic könyvtárba, és hagyjuk, hogy a cron hívja meg a &man.periodic.8; parancson keresztül az összes többi rendszeresen elvégzendõ feladattal együtt. Ez a hiba egyébként onnan jön, hogy rendszerszintû crontab állomány esetén van még egy további mezõ, amely megadja, hogy az adott parancsot melyik felhasználóval kell futtatni. Az alapértelmezett rendszerszintû crontab állomány esetén ez mindenhol a root. Amikor ezt a crontab állományt a root crontab állományaként használjuk (amely nem ugyanaz, mint a rendszerszintû crontab), akkor a &man.cron.8; a root szót a végrehajtandó parancs részének fogja tekinteni, amely viszont nem létezik. Miért jelenik meg a you are not in the correct group to su root hibaüzenet, amikor a su paranccsal át akarunk váltani a root felhasználóra? Ez egy biztonsági megszorítás. Csak úgy tudunk átváltani a root felhasználóra (vagy bármilyen más olyan hozzáférésre, amely rendszeradminisztrátori jogosultságokkal rendelkezik), ha a wheel csoport tagjai vagyunk. Ha nem létezne ez a korlátozás, akkor a rendszerben szinte bárki képes lenne rendszeradminisztrátori jogosultságokat szerezni csupán úgy, hogy ha megszerzi valahogy a root jelszavát. Ennek a korlátozásnak köszönhetõen ez viszont már nem lesz feltétlenül helytálló. A &man.su.1; még a jelszót sem engedi megadni azoknak, akik nem tagjai a wheel csoportnak. Ha engedélyezni akarjuk valakinek a root felhasználóra váltást, akkor nincs más teendõnk, mint egyszerûen a hozzáadni a wheel csoporthoz. Az rc.conf állományban vagy valamelyik másik konfigurációs állományban rosszul adtuk meg a beállításokat, és nem lehet módosítani ezeket, mert így írásvédett lett az állományrendszer. Mi a megoldás? Indítsuk újra a rendszert és a rendszertöltõ parancssorában adjuk ki a boot -s parancsot, amivel így egyfelhasználós módba váltunk. Amikor meg kell adnunk a használni kívánt parancsértelmezõ nevét, egyszerûen csak nyomjuk le az Enter billentyût, majd a mount -urw / parancs kiadásával csatlakoztassuk újra írható módban rendszerindító állományrendszert. Emellett még valószínûleg a mount -a -t ufs paranccsal azokat az állományrendszereket is érdemes lesz csatlakoztatnunk, ahol a kedvenc szövegszerkesztõnk található. Amennyiben az érintett szövegszerkesztõ egy hálózati állományrendszeren található, akkor helyette használjunk egy helyben elérhetõ szövegszerkesztõt, például az &man.ed.1; programot, vagy manuálisan állítsuk be a hálózat elérését a hálózati állományrendszerek csatlakoztatásához. Ha a &man.vi.1; vagy &man.emacs.1; programokhoz hasonló teljes képernyõs szövegszerkesztõt akarunk használni, akkor elõtte nem árt a export TERM=cons25 parancsot sem kiadnunk, így a &man.termcap.5; adatbázisból elérhetõvé válnak az ehhez szükséges adatok. Miután megtettük ezeket a lépéseket, már a szokásos módon át tudjuk szerkeszteni az /etc/rc.conf állományt. A rendszermag indulása után közvetlenül megjelenõ üzenetekben találhatjuk meg azon sorok számait, amelyeket a rendszer nem tudott értelmezni. Miért nem sikerül beállítani a nyomtatót? Olvassuk el a kézikönyv nyomtatókkal foglalkozó részét, minden bizonnyal választ ad a legtöbb kérdésünkre. Bizonyos nyomtatókat azonban akkor tudunk használni, ha van hozzá meghajtónk. Ezeket gyakran csak WinPrinter néven emlegetik, amelyeket viszont a &os; nem támogat. Ha a nyomtatónk nem használható DOS vagy &windows; alatt, akkor valószínûleg egy ilyen WinPrinterrel van dolgunk. Ebben az esetben egyedül abban reménykedhetünk, hogy a print/pnm2ppa port támogatja. Hogyan lehet módosítani a rendszerünkhöz tartozó billentyûkiosztást? Olvassuk el a kézikönyv honosításssal foglalkozó részét, különös tekintettel a konzol beállításaira. Miért jelenik meg az unknown: <PNP0303> can't assign resources hibaüzenet a rendszer indulásakor? Erre a &a.current; címére postázott egyik levél adja meg a választ:
&a.wollman;, 2001. április 24. A can't assign resources üzenetek rendszerünkben olyan ISA eszközök jelenlétére utalnak, amelyekhez a rendszermagban PnP támogatást nem tartalmazó meghajtók tartoznak. Ilyenek többek közt a billentyûzetvezérlõk, a programozható megszakítás-vezérlõ chip és sok más alapvetõ elem a gépünkben. Ezek az erõforrások nem oszthatóak ki, mivel már valamelyik meghajtó használatba vette ezeket.
Miért nem mûködnek rendesen a kvóták? Elõfordulhat, hogy a rendszermag nem támogatja a kvóták használatát. Ha errõl lenne szó, akkor vegyük fel az alábbi sort a rendszermag konfigurációs állományába és fordítsuk újra: options QUOTA Ennek részleteit a kézikönyv kvótákkal foglalkozó részében találjuk. Az / állományrendszeren ne engedélyezzük a kvóták használatát. Tegyünk kvótaállományokat azokra az állományrendszerekre, ahol be akarjuk vezetni a használatukat, például: Állományrendszer Kvótaállomány /usr /usr/admin/quotas /home /home/admin/quotas A &os; tartalmazza a System V IPC alapeszközeit? Igen, a &os; a GENERIC típusú rendszermagban támogatja a System V típusú IPC megoldást, beleértve az osztott memória, az üzenetek és a szemaforok használatát. Ha saját rendszermagunk van, akkor az alábbi beállítások használatával engedélyezhetjük a használatukat: options SYSVSHM # az osztott memória engedélyezése options SYSVSEM # a szemaforok engedélyeze options SYSVMSG # az üzenetek kezelése Fordítsuk és telepítsük újra a rendszermagot. A sendmail helyett milyen más levelezõ szerver használható még? A sendmail a &os;-ben található alapértelmezett levelezõ szerver, de könnyen le tudjuk cserélni másikra (például amelyet a portok közül telepítettünk). A Portgyûjteményben több különbözõ levelezõ szerver is megtalálható, amelyek közül a mail/exim, mail/postfix, mail/qmail és a mail/zmailer portok a leginkább népszerûek. Szép dolog, hogy lehet válogatni a különbözõ megoldások között és hogy ilyen sok levelezõ szerver használható. Ezért lehetõleg a levelezési listákon ne kérdezzünk senkitõl olyat, hogy De a sendmail akkor most miért jobb, mint a qmail? Ha ilyen kérdéseink vannak, akkor elõször inkább olvassuk át az archívumokat. Szinte biztos, hogy már szinte az összes levelezõ szerver elõnyét és hátrányát kivesézték jó néhányszor. Elveszett a root felhasználó jelszava! Mit tegyünk? Ne essünk kétségbe! Indítsuk újra a rendszerünket egyfelhasználós módban. Ehhez gépeljük be a boot -s parancsot a rendszertöltõ Boot: parancssorában. Amikor a parancsértelmezõt kell megadnunk, egyszerûen csak nyomjuk le az Enter billentyût. Ekkor kapunk egy &prompt.root; parancssort. A mount -urw / parancs begépelésével csatlakoztassuk újra a rendszerindító partíciónkat írható módban, majd a mount -a paranccsal csatlakoztassuk az összes többi állományrendszert. Ezt követõen a passwd root parancs kiadásával változtassuk meg a root felhasználó jelszavát és a &man.exit.1; futtatásával folytassuk a rendszer indítását. Ha az egyfelhasználós módra váltás során a rendszer a root felhasználó jelszavát kérné, akkor az arra utal, hogy a konzol (/dev/console) az /etc/ttys állomány szerint insecure (nem biztonságos) típusú. Ebben az esetben szereznünk kell egy &os; telepítõlemezt, elindítanunk róla a rendszert, majd a &man.sysinstall.8; programban a Fixit menüponton keresztül indított parancsértelmezõben kiadni az elõbb említett parancsokat. Ha egyfelhasználós módban nem tudjuk csatlakoztatni a rendszerindító partíciót, akkor ennek könnyen az lehet az oka, hogy a partíciókat titkosították, ezért a megfelelõ kulcsok nélkül nem tudjuk elérni ezeket. Ez leginkább adott implementációtól függ. A &os;-ben elõforduló lemeztitkosításokkal kapcsolatban a kézikönyv ad bõvebb útmutatást. Hogyan akadályozható meg, hogy a ControlAltDelete billentyûkombináció újraindítsa a rendszert? Ha a &man.syscons.4; (vagyis az alapértelmezett) konzolt használjuk, akkor ehhez a következõ beállításokkal kell fordítanunk és telepítenünk egy rendszermagot: options SC_DISABLE_REBOOT Mindezt a rendszermag újrafordítása és a újraindítása nélkül is le tudjuk tiltani, ha beállítjuk az alábbi &man.sysctl.8;-változót: &prompt.root; sysctl hw.syscons.kbd_reboot=0 Az elõbb említett két módszer kizárja egymást. A &man.sysctl.8; változó nem létezik, ha a rendszermagot a SC_DISABLE_REBOOT beállítással fordítjuk újra. Ha viszont a &man.pcvt.4; konzolt használjuk, akkor a következõ konfigurációs beállítást kell megadnunk a rendszermag újrafordításakor: options PCVT_CTRL_ALT_DEL Hogyan lehet szöveges DOS állományokat &unix; formátumúra alakítani? Használjuk a következõ &man.perl.1; parancsot: &prompt.user; perl -i.bak -npe 's/\r\n/\n/g' állományok ahol az állományok az átalakítandó állományok. A konverzió helyben történik, illetve az eredeti állományokról .bak kiterjesztéssel létrejön egy biztonsági mentés. Erre a célra viszont ugyanígy megfelel a &man.tr.1; parancs is: &prompt.user; tr -d '\r' < dos-szöveges-állomány > unix-szöveges-állomány Ekkor a dos-szöveges-állomány lesz a DOS formátumú szöveges állomány, miközben a unix-szöveges-állomány fogja az eredményt tartalmazni. Ez valamivel gyorsabb a perl megoldásánál. Ez említett megoldásokon kívül a DOS szöveges állományait a Portgyûjteményben található converters/dosunix porttal is könnyedén át tudjuk alakítani. Ennek részleteit a hozzá tartozó dokumentációból tudjuk meg. Hogyan lehet futó programokat név szerint leállítani? Lásd &man.killall.1;. A &man.su.1; miért írja folyton, hogy a felhasználó nincs a root ACL-jében? Ezt a hibát az elosztott hitelesítést végzõ Kerberos rendszer adja. Maga a probléma nem végzetes, viszont annál inkább idegesítõ. Ilyenkor vagy a kapcsolóval kell futtatni a &man.su.1; programot, vagy a következõ kérdésben megadottak szerint el kell távolítani a Kerberos alkalmazást. Hogyan távolítható el a Kerberos? A Kerberos úgy távolítható el a rendszerbõl, ha újratelepítjük a base terjesztés tartalmát. Ha CD-rõl telepítettük a rendszert, akkor csatlakoztassuk (most tegyük fel, hogy a /cdrom könyvtárba) és futassuk a következõ parancsot: &prompt.root; cd /cdrom/base &prompt.root; ./install.sh Másik lehetõség, ha hozzáadjuk a NO_KERBEROS beállítást a /etc/make.conf állományhoz és újrafordítjuk az alaprendszert. Mi történt a /dev/MAKEDEV állománnyal? A &os; 5.X és a késõbbi változatok már a &man.devfs.8; által felkínált automatikus megoldást alkalmazzák. Ilyenkor az eszközmeghajtók igény szerint hoznak létre eszközleírókat, és ezzel lényegében szükségtelenné teszik a /dev/MAKEDEV használatát. Hogyan lehet még több pszeudoterminált létrehozni? Ha sok telnet, ssh, X esetleg screen felhasználónk van, akkor könnyen elõfordulhat, hogy kifogyunk a pszeudoterminálokból. A &os; 6.2 és az azt megelõzõ változatokban alapértelmezés szerint 256 pszeudoterminál, a &os; 6.3 és késõbbi változatokban pedig 512 pszeudoterminál áll rendelkezésünkre. Szükség esetén további pszeudoterminálok is hozzáadhatóak a rendszerhez. Ehhez azonban módosítanunk kell a szabványos C függvénykönyvtárakat, a rendszermagot és az /etc/ttys állományt. Például a 1152 pszeudoterminál használatát teszi lehetõvé. Ez a konkrét javítás viszont csak a &os; 6.3 és késõbbi változatok esetén alkalmazható zökkenõmentesen. Hogyan lehet újraindítás nélkül az /etc/rc.conf tartalmát újraolvastatni és újraindítani az /etc/rc szkriptet? Váltsunk egyfelhasználós módba, majd vissza többfelhasználós módba. Konzolon ez így oldható meg: &prompt.root; shutdown now (Megjegyzés: nincs -r vagy -h!) &prompt.root; return &prompt.root; exit A -STABLE rendszer frissítésekor -BETAx, -RC vagy -PRERELEASE verzió jelenik meg! Mi történt? Röviden: Ez csak egy elnevezés. Az RC jelentése Release Candidate, vagyis kiadásra jelölt. Ez egy küszöbön álló kiadásra utal. A &os;-ben a -PRERELEASE elnevezés általában egyenlõ a kiadások elõtt bekövetkezõ kódfagyasztással. (Bizonyos kiadások esetén pedig a -BETA címkét a -PRERELEASE megjelöléshez hasonlóan használják.) Valamivel bõvebben: A &os; fejlesztésében a kiadások általában két helyrõl származnak. A nagyobb, ún. nullás kiadások, mint például 7.0-RELEASE és 8.0-RELEASE, a fejlesztési ág legfrissebb állapotából készülnek, amelyet gyakran csak -CURRENT néven emlegetnek. A kisebb kiadások, mint például a 6.3-RELEASE vagy az 5.2-RELEASE, az aktív -STABLE ágból származnak. A 4.3-RELEASE kiadástól kezdõdõen mindegyik kiadás saját ággal rendelkezik, amelyet elsõsorban olyanoknak ajánlunk, akiknek csak nagyon visszafogott változtatásokra van szükségük a rendszerben (ezek általában csak különbözõ biztonsági javításokat takarnak). Amikor a fejlesztõk készíteni akarnak egy újabb kiadást, az alapjául szolgáló fejlesztési ágon elvégeznek bizonyos mûveleteket. Ennek egy része a források befagyasztása. Amikor ez megkezdõdik, az ág neve megváltozik, és ezzel jelzik, hogy hamarosan kiadás készül belõle. Például, ha egy ág a 6.2-STABLE nevet viseli, akkor a 6.3-PRERELEASE névre vált arra az idõszakra, amíg tart a kódfagyasztás és lezajlik a kiadások megjelentetéséhez szükség további tesztelés. Hibajavítások ekkor továbbra is rakhatóak bele. Ahogy a források elérik a kiadáshoz szükséges szintet, az ág neve 6.3-RC-re vált, és ezzel jelzik, hogy a kiadás elõkészítése hamarosan befejezõdik. Az RC állapotban csak a legfontosabb hibákat keresik meg és javítják. Miután a kiadás (jelen esetünkben a 6.3-RELEASE kiadás) és a hozzá tartozó ág elkészült, az ág neve ismét 6.3-STABLE lesz. A verziószámokról és a CVS-ben található különbözõ ágakról a Release Engineering címû cikkben olvashatunk (angolul). Az új rendszermag telepítése során a &man.chflags.1; program hibát jelez. Hogyan javítható ez a hiba? Rövid válasz: A rendszerünk valószínûleg nullánál nagyobb biztonsági szinten fut. Indítsuk újra a rendszerünket egyfelhasználós módban és úgy telepítsük a rendszermagot. A hosszabb válasz: A &os; nem engedi megváltoztatni a rendszerszintû állományjelzõket nullától a nagyobb biztonsági szinteken. A jelenleg érvényben levõ biztonsági szintet a következõ paranccsal lehet lekérdezni: &prompt.root; sysctl kern.securelevel A biztonsági szintet nem lehet csökkenteni. A rendszert egyfelhasználós módban kell újraindítani, mert csak úgy tudjuk újratelepíteni a rendszermagot. Másik lehetõségünk, ha átállítjuk a biztonsági szintet az /etc/rc.conf állományban és úgy indítjuk újra a rendszerünket. Az &man.init.8; man oldalán olvashatunk bõvebben a biztonsági szintek (securelevel) beállításáról, az rc.conf használatáról pedig az /etc/defaults/rc.conf állományból és a &man.rc.conf.5; man oldalon tudhatunk meg többet. A rendszeren nem lehet egyszerre egy másodpercnél többel megváltoztatni az idõt! Hogyan lehet megkerülni ezt a korlátozást? A rövid válasz: A rendszerünkben a biztonsági szintet (securelevel) minden bizonnyal egynél nagyobbra állították. Indítsuk újra a rendszert egyfelhasználós módban és változtassuk meg a dátumot. Egy hosszabb válasz: A &os; nem engedi egy másodpercnél többel megváltoztatni az idõt, ha az aktuális biztonsági szint értéke egy felett van. Ezt a következõ parancs kiadásával tudjuk ellenõrizni: &prompt.root; sysctl kern.securelevel A biztonsági szint futás közben nem csökkenthetõ. A dátum megváltoztatásához ezért a rendszert egyfelhasználós módban kell indítanunk, vagy az /etc/rc.conf állományban csökkentenünk kell a biztonsági szintet. Az &man.init.8; man oldalon olvashatunk részletesebben a biztonsági szintek mûködésérõl, illetve az /etc/defaults/rc.conf állományból és az &man.rc.conf.5; man oldalról tudhatunk meg többet az rc.conf mûködésérõl. Az rpc.statd parancsnak miért kell 256 MB memória? Nem, itt szó sincs semmiféle memóriaszivárgásról, és egyébként sem használ 256 MB memóriát. Az rpc.statd parancs egyszerûen csak kényelmi megfontolásokból iszonyatos mennyiségû memóriát képez le a címterébe. Ebben technikailag semmi kivetnivaló nincsen, ezzel egyedül a &man.top.1;, &man.ps.1; és a hozzá hasonló programokat zavarja meg egy kicsit. A &man.rpc.statd.8; tehát leképezi az állapotát rögzítõ állományt (amely a /var könyvtárban található a címterébe. Ilyenkor igyekszik egy kicsit elõre gondolkodni és felkészülni a megnövekedésére, ezért viszonylag nagy méretben hozza létre ezt a leképezést. Ezt nagyon jól megfigyelhetjük a forráskódjából is, ahol látszik, hogy a &man.mmap.2; függvényt a 0x10000000 értékkel hívja meg, tehát az 32 bites Intel architektúrán megcímezhetõ memória egytizenhatod részével, ami pontosan 256 MB. Miért nem törölhetõ az schg állományjelzõ? Rendszerünkben a biztonsági szint (securelevel) nagyobb nullánál. Próbáljuk meg csökkenteni az értékét és próbálkozzunk ismét. Ezzel kapcsolatban részletesebb információkat a a biztonsági szintekrõl szóló kérdésbõl vagy az &man.init.8; man oldalról tudhatunk meg. Az .shosts állományon keresztül alapértelmezés szerint miért enged hitelesíteni a legújabb &os; verziókban megtalálható SSH? A legújabb &os; verziókban azért nem tudjuk az .shosts állományon keresztül hitelesíteni magunkat, mert az &man.ssh.1; alapértelmezés szerint rendszeradminisztrátori jogok nélkül kerül telepítésre. Ezt a hibát többféle módon ki tudjuk javítani: Ha tartós megoldásra van szükségünk, akkor az /etc/make.conf állományban állítsuk az ENABLE_SUID_SSH változót a true értékre, majd fordítsuk újra az &man.ssh.1; programot (vagy futtassuk le a make world parancsot). Ha ideiglenesen akarjuk csak javítani, akkor az /usr/bin/ssh állomány engedélyeit root felhasználóként állítsuk a 4555 értékre a chmod 4555 /usr/bin/ssh parancs kiadásával. Ezután vegyük fel az ENABLE_SUID_SSH= true sort az /etc/make.conf állományt, így ez a változtatás a make world következõ futtatásakor is megmarad. Mi az a vnlru? A vnlru törli és szabadítja fel a rendszerben keringõ vnode-okat, amikor a rendszermagban elérik a kern.maxvnodes változó által beállított határt. Ez a rendszermagban futó szál többnyire csak tétlenül ül a háttérben, és csak olyankor lép mûködésben, amikor rengeteg memóriát használunk és éppen több tízezernyi apró állományhoz akarunk egyszerre hozzáférni. Mit jelentenek top parancs által megjelenített különbözõ memóriaállapotok? Active (Aktív): az utóbbi idõben használt lapok. Inactive (Inaktív): az utóbbi idõben nem használt lapok. Cache (Tárazott): (leginkább) azok a lapok, amelyeket még használnak, de gyakran azonnal újrafelhasználódnak (akár a régi, akár egy új hozzárendelésben). Egyes lapok az active állapotból közvetlenül a cache állapotba váltanak, ha tiszták (nem módosították), de ez az átmenet függ a házirendtõl, vagyis a VM alrendszer karbantartója által kiválasztott algoritmustól. Free (Szabad): effektív tartalom nélküli lapok, amelyek akár közvetlenül fel is használhatóak olyan esetekben, amikor a tárazott lapok erre nem alkalmasak. A szabad lapokat megszakításokban és a futó programokban is felhasználhatjuk. Wired (Rögzített): olyan lapok, amelyek a memória egy rögzített pontján foglalnak helyet. Ezeket többnyire a rendszermag használja, de speciális esetekben a programoknak is szükségük lehet rá. A lapok általában akkor kerülnek ki a lemezre (valamilyen VM alrendszerbeli szinkronizáció során), amikor inaktív állapotban vannak, de akár az aktív lapok is szinkronizálhatóak. Ez attól függ, hogy a processzor képes-e nyomkövetni a lapok módosítását, és némely helyzetekben elõnyös lehet a rendszer számára, ha annak megfelelõen szinkronizálja a VM lapjait, hogy azok aktívak vagy inaktívak. A legtöbb esetben itt egyszerûen csak egy olyan sort kell elképzelni, ahol a program számára viszonylag inaktív lapok találhatóak, amelyeket a rendszer tetszõlegesen a lemezre írhat. A tárazott lapok általában már eleve szinkronizáltak, nem leképzettek, közvetlenül a programok régi és új hozzárendelései használják ezeket. A szabad lapokat akár a megszakítások szintjén is lehet használni, miközben a tárazott vagy szabad lapokat a futó programokban érthetjük el. A tárazott lapok zárolása nem megfelelõ ahhoz, hogy megszakításokban is el lehessen érni ezeket. Vannak még bizonyos jelzések (például a foglaltságot vagy foglaltság mértékét jelzõ értékek), amelyek még hatással vannak a fentebb leírt szabályokra. Mekkora a rendelkezésre álló memória mérete? A rendelkezésre álló memóriának rengeteg típusa létezik. Ezek közül egyik az a memória, amely közvetlenül anélkül elérhetõ, hogy bármi mást ki kellene hozzá lapoznunk. Ennek a mérete nagyjából a tárazott és a szabad lapokat tároló sorok hosszával arányos (amelyet még a rendszer beállításaitól függõ további tényezõk is módosíthatnak). A rendelkezésre álló memória másik típusa a teljes VM terület mérete. Ezt nem olyan könnyû meghatározni, de leginkább a lapozóterület és a fizikai memória méretétõl függ. A rendelkezésre álló memória több más lehetséges megfogalmazása is létezik, de szinte teljesen felesleges beszélni róluk. Egyedül az a fontos, hogy a igyekezzünk mérsékelni a lapozást és mindig legyen elegendõ lapozóterületünk. Mi az a /var/empty? Nem lehet letörölni! A /var/empty könyvtárat az &man.sshd.8; program használja a privilégiumok elkülönítéséhez. A /var/empty könyvtárnak üresnek kell lennie, legyen a root tulajdonában és legyen rajta a schg állományjelzõ. Noha semmiképpen sem javasoljuk a könyvtár törlését, úgy tudjuk elvégezni, ha elõször az schg állományjelzõt töröljük róla. A &man.chflags.1; man oldalán olvashatunk ezzel kapcsolatban részletesebb információkat (azonban ne felejtsük el számításba venni az esetleges nehézségeket).
Az X Window System és a virtuális konzolok használata Mi az X Window System? Az X Window System (vagy gyakran csak X11) a &unix; és &unix;-szerû operációs rendszereken, így többek közt a &os;-n is az egyik leginkább elterjedt ablakozórendszer. A The X.Org Foundation felügyeli az X protokoll szabványait, azok aktuális referencia implementációival együtt. Ezek hivatalos megnevezése Version 11 Release &xorg.version;, de ezt gyakran csak X11 néven rövidítik. Számos implementációja is elérhetõ több különbözõ architektúrára és operációs rendszerre. A protokoll szerver oldali funkcióit megvalósító programokat hivatalosan X szervereknek nevezik. &os; alatt milyen X implementációk használhatóak? Kezdetben a &os; alapértelmezett X implementációja az &xfree86; volt, amelyet a The XFree86 Project, Inc. tartott karban. Ez a változat volt használatban alapértelmezés szerint egészen a &os; 4.10 és 5.2 verziójáig. Habár eközben az &xorg; maga is karbantartotta a saját változatát, kizárólag csak referencia célokat használt és az évek során teljesen leromlott az állapota. 2004 elején azonban az XFree86 néhány korábbi fejlesztõje elhagyta a projektjüket, mivel nem értettek egyet bizonyos kérdésekben, például a forráskód ütemét, a jövõbeni irányokat és egyéb személyes konfliktusokat illetõen, és helyette közvetlenül az &xorg; kódját kezdték el fejleszteni. Ekkor az &xorg; hozzáigazította forrásait az utolsó &xfree86; kiadás forrásaihoz (XFree86 4.3.99.903), majd megváltoztatta a licencelését. és beolvasztott több, korábban külön karbantartott változtatást, aminek eredményeképpen végül megszületett az X11R6.7.0. Egy különálló, de velük együttmûködõ projekt, a freedesktop.org (vagy röviden csak fd.o) jelenleg is az eredeti &xfree86; források újraszervezésén dolgozik, aminek célja a napjainkban megjelenõ grafikus kártyák minél nagyobb mértékû kihasználása (és ezáltal a rendszer gyorsítása), a rendszer modularisabbá tétele (ezáltal a rendszer karbantarthatóságának javítása, ami a kiadások gyorsabb elõkészítését és könnyebb beállíthatóságát teszi lehetõvé). Az &xorg; a jövõben tervezi a freedesktop.org fejlesztéseit is átvenni. 2004 júliusától kezdõdõen a &os.current; változatban az &xfree86; helyett az &xorg; lett az alapértelmezett X implementáció. A &os;-ben azóta is alapból az &xorg; X11 implementációja található meg. A témával kapcsolatban a kézikönyv X11-rõl szóló fejezetében kaphatunk részletesebb felvilágosítást. Mégis miért vált szét a két X projekt? Ezt a kérdést ez a GYIK nem tudja megválaszolni. Ezzel kapcsolatban viszont érdemes elolvasnunk a különbözõ levelezési listák archívumait szerte az interneten. Keressünk rá a válaszra a kedvenc keresõnkben, de ezzel a kérdéssel ne a &os; levelezési listáit zavarjuk. Az is elképzelhetõ, hogy ennek a valós okait csak néhányan ismerik egész teljesen. A &os; miért az &xorg; változatát választotta alapértelmezettnek? Az &xorg; fejlesztõi azt ígérték, hogy gyorsabban fognak újabb verziókat kiadni, amelyek sokkal több újítást is fognak tartalmazni. Nos, amennyiben tényleg állják a szavukat, azzal mindenki jól jár. Emellett az õ változatuk továbbra is a hagyományos X licenc alatt érhetõ el, miközben az &xfree86; licence ettõl némileg eltér. Hogyan lehet használni az X-et? Amennyiben már egy meglévõ rendszerre szeretnénk telepíteni az X-et, úgy érdemes a x11/xorg metaportot választanunk, amely magától feltelepíti az összes szükséges komponenst, vagy egyszerûen telepítsük az &xorg; alkalmazást csomagból: &prompt.root; pkg_add -r xorg Emellett az &xorg; a &man.sysinstall.8; használatával is telepíthetõ: válasszuk a Configure (Beállítások), Distributions (Terjesztések), végül a The X.Org Distribution (Az X.Org terjesztés) menüpontokat. Az &xorg; sikeres telepítése után kövessük a kézikönyv X11 beállításával foglalkozó szakaszában leírtakat. Az X indításakor egy KDENABIO failed (Operation not permitted) hiba keletkezik, közvetlenül a startx parancs kiadása után. Mi lehet ezzel kezdeni? A rendszerünkön valószínûleg túlságosan magas a biztonsági szint (securelevel) értéke. Ilyenkor az X-et nem tudjuk elindítani, mivel a mûködéséhez szüksége van a &man.io.4; eszköz írására. Ezzel kapcsolatban az &man.init.8; man oldal ad részletesebb útmutatást. A kérdés tehát az, hogy mit kellene ezzel csinálni. Alapvetõen két lehetõségünk van: vagy visszaállítjuk a biztonsági szintet nullára (ezt általában az /etc/rc.conf állományon keresztül lehet megtenni), vagy az &man.xdm.1; programot még a rendszerindítás során elindítjuk (mielõtt a biztonsági szintet magasabbra állítanánk). A szolgál arról bõvebb információval, hogy miként tudjuk használni az &man.xdm.1; programot a rendszer indítása során. Miért nem mûködik X alatt az egér? Ha a &man.syscons.4; (vagyis az alapértelmezett konzol) meghajtót használjuk, akkor be tudjuk úgy állítani a &os;-t, hogy minden virtuális képernyõn látható legyen az egérkurzor. A &man.syscons.4; egy /dev/sysmouse nevû virtuális eszköz támogatásával igyekszik elkerülni azt, hogy összeakadjon az X-szel. A valós egértõl érkezõ összes eseményt a &man.moused.8; démon írja folyamatosan a &man.sysmouse.4; eszközre. Amennyiben az egerünket egy vagy több virtuális konzolon is használni akarjuk az X-szel együtt, akkor nézzük meg a válaszát és állítsuk be annak megfelelõen a &man.moused.8; démont. Ezt követõen nyissuk meg az /etc/X11/xorg.conf állományt és gondoskodjunk róla, hogy a következõ sorok feltétlenül szerepeljenek benne: Section "InputDevice" Option "Protocol" "SysMouse" Option "Device" "/dev/sysmouse" ..... + Az &xorg; 7.4 változatától + kezdõdõen az xorg.conf + állomány InputDevice + szekciói nem kerülnek feldolgozásra a + csatlakoztatott eszközök automatikus + érzékelése esetén. A + korábbi viselkedési mód + visszaállításához vegyük + fel a következõ sort a + ServerLayout vagy + ServerFlags szekciók + valamelyikébe: + + Option "AutoAddDevices" "false" + Néhányan inkább a /dev/mouse eszközt szeretik használni X alatt. Ha mi is így akarjuk használni, akkor a /dev/mouse eszközhöz hozzunk létre egy szimbolikus linket a /dev/sysmouse eszközre (lásd &man.sysmouse.4;). Ezt úgy tudjuk megtenni, ha az /etc/devfs.conf állományba (lásd &man.devfs.conf.5;) felvesszük a következõ sort: link sysmouse mouse A link maga közvetlenül a &man.devfs.5; újraindításával keletkezik. Ehhez (root felhasználóként) a következõ parancsot kell kiadnunk: &prompt.root; /etc/rc.d/devfs restart X alatt lehet használni görgõs egeret? Igen. Jelezni kell az X-nek, hogy ötgombos egerünk van. Ezt úgy tudjuk megcsinálni, ha az /etc/X11/xorg.conf állományba felvesszük a Buttons 5 és ZAxisMapping 4 5 sorokat az InputDevice szakaszba. Vegyük például, hogy az /etc/X11/xorg.conf állományunkban a következõ InputDevice szakasz található. Egy példa &xorg; konfigurációs állomány <quote>InputDevice</quote> szakasza görgõs egerekhez Section "InputDevice" Identifier "Mouse1" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/sysmouse" Option "Buttons" "5" Option "ZAxisMapping" "4 5" EndSection Egy egyszerû példa <quote>.emacs</quote> állomány görgõs egerek (opcionális) használatához ;; görgõs egér (global-set-key [mouse-4] 'scroll-down) (global-set-key [mouse-5] 'scroll-up) Hogyan lehet távoli X szervereket elérni? Biztonsági okokból a szerver alapértelmezés szerint nem engedélyezi, hogy egy távoli géprõl ablakot lehessen nyitni rajta. Ha szükségünk lenne erre a lehetõségre, akkor nem kell mást tennünk, mint az X-et a paraméterrel indítani: &prompt.user; startx -listen_tcp Mi az a virtuális konzol és hogyan lehet belõle többet létrehozni? A virtuális konzolok röviden szólva arra alkalmasak, hogy egyetlen gépen is több párhuzamos munkamenetben tudjunk dolgozni, hálózat vagy X beállítása nélkül. Amikor a rendszer elindul, a rendszerüzenetek után általában egy bejelentkezõ képernyõ jelenik meg. Ekkor az elsõ virtuális konzolon keresztül tudjuk megadni a felhasználói nevünket és jelszavunkat, majd nekilátni a munkának (vagy éppen a játszadozásnak). Késõbb aztán elõfordulhat, hogy egy másik munkamenetet is szeretnénk elindítani, például elõkeresni az éppen használt program dokumentációját vagy elolvasni a leveleinket, amíg FTP-n keresztül letöltünk egy állományt. Ehhez nem kell mást csinálnunk, csak le kell nyomni az AltF2 (tartsuk lenyomva az Alt billentyût miközben megnyomjuk az F2 billentyût) billentyûkombinációt és máris egy másik virtuális konzolon találjuk magunkat! Ha innen vissza szeretnénk térni az elõzõ munkamenetbe, akkor nyomjuk le az AltF1 billentyûkombinációt. A frissen telepített &os; rendszerekben alapértelmezés szerint nyolc virtuális konzol engedélyezett. Az AltF1, AltF2, AltF3, stb. lenyomásával tudunk váltogatni köztük. Ha ennél többet szeretnénk egyszerre használni, akkor nyissuk meg az /etc/ttys állományt (lásd &man.ttys.5;) és a Virtual terminals részben vegyünk még fel a ttyv8 eszköz után továbbiakat, egészen a ttyvc eszközig: # Írjuk át az eredeti ttyv8 bejegyzést az /etc/ttys # állományban és engedélyezzük. ttyv8 "/usr/libexec/getty Pc" cons25 on secure ttyv9 "/usr/libexec/getty Pc" cons25 on secure ttyva "/usr/libexec/getty Pc" cons25 on secure ttyvb "/usr/libexec/getty Pc" cons25 on secure Akármennyit használhatunk belõlük. Ne felejtsük el azonban, hogy minél több virtuális terminálunk van, annál több erõforrásra lesz hozzájuk szükségünk. Ezt leginkább akkor érdemes megfontolni, ha 8 MB memóriánál kevesebbel rendelkezünk. Emellett még érdemes a secure értéket is az insecure értékre átállítani. Ha X szervert is akarunk futtatni, akkor legalább egy virtuális konzolt szabadon (vagy kikapcsolva) kell hagynunk a számára. Így tehát, ha mind a tizenkét funkcióbillentyûre szeretnénk elindítani egy-egy virtuális konzolt, nos, akkor nincs szerencsénk — ha X szervert is akarunk használni a gépen, akkor legfeljebb csak tizenegyet használhatunk belõlük. Az egyes konzolokat legegyszerûbben úgy tudjuk letiltani, ha kikapcsoljuk ezeket. Például, ha az elõbb említettek szerint tizenkét terminálunk van, és X-et akarunk futtatni, akkor a tizenkettedik terminál beállításait meg kell változtatnunk errõl: ttyvb "/usr/libexec/getty Pc" cons25 on secure erre: ttyvb "/usr/libexec/getty Pc" cons25 off secure Amennyiben a billentyûzetünkön csak tíz funkcióbillentyû található, elengedõ ennyi is: ttyv9 "/usr/libexec/getty Pc" cons25 off secure ttyva "/usr/libexec/getty Pc" cons25 off secure ttyvb "/usr/libexec/getty Pc" cons25 off secure (Ezeket a sorokat akár ki is törölhetjük.) Ezt követõen a legegyszerûbben (és egyben a legtisztábban) úgy tudjuk aktiválni a virtuális konzolokat, ha újraindítjuk a rendszerünket. Ha viszont nem akarjuk ezt feltétlenül megtenni, akkor állítsuk le az X szervert, majd (root felhasználóként) adjuk ki az alábbi parancsot: &prompt.root; kill -HUP 1 Fontos, hogy a parancs végrehajtás elõtt teljesen leállítsuk az X szervert, amennyiben az fut. Ha nem tesszük meg, akkor könnyen elõfordulhat, hogy a kill parancs hatására lemerevedik vagy megáll a rendszerünk. Hogyan lehet elérni a virtuális konzolokat X-bõl? A virtuális konzolokra a Ctrl Alt FN billentyûkombinációval lehet visszaváltani. Ennek megfelelõen tehát a Ctrl Alt F1 kombinációval az elsõ virtuális konzolra tudunk visszaváltani. Ahogy visszajutottunk a szöveges konzolra, az Alt Fn billentyûkombinációval a megszokott módon tudunk váltani köztük. Ha innen az X szerverre akarunk visszaváltani, akkor egyszerûen csak váltsunk arra a virtuális konzolra, ahol az X fut. Ha az X-et a paranccsorból indítottuk el (például a startx paranccsal), akkor az X nem arra a virtuális konzolra kapcsolódik automatikusan, amelyen a parancsot kiadtuk, hanem az utána következõ, használatban még nem levõ konzolra. Ha nyolc aktív virtuális terminálunk van, akkor az X a kilencediken fog futni, ezért ide az Alt F9 lenyomásával tudunk visszatérni. Hogyan indítható el az XDM a rendszer indításakor? Alapvetõen kétféle megközelítés létezik az &man.xdm.1; elindításával kapcsolatban. Az egyik megközelítés szerint az xdm parancsot az /etc/ttys állományból (lásd &man.ttys.5;) tudjuk megadni a megadott példa alapján, a másikban pedig egyszerûen az rc.local állományból (lásd &man.rc.8;) vagy a /usr/local/etc/rc.d könyvtárban megadható X szkripttel. Mind a kettõ ugyanazt képviseli, de vannak bizonyos helyzetek, ahol a kettõ közül csak az egyik mûködik. Az eredmény mind a két esetben azonos, hatásukra az X egy grafikus bejelentkezõ képernyõvel jelentkezik. A &man.ttys.5; módszernek van egy olyan elõnye, hogy pontosan megadja, melyik virtuális terminálon fog futni az X és a szerver elindítását az &man.init.8; programra bízza. Az &man.rc.8; használata esetén viszont könnyû leállítani az xdm programot, ha netalán valamilyen gondunk adódna az X szerver indításakor. Ha az &man.rc.8; állományból töltöttük be, akkor az xdm futtatásához semmilyen paramétert nem kell megadni (például, hogy démonként fusson). Az &man.xdm.1; azonban csak az összes &man.getty.8; elindulása után indítható, máskülönben a két program ütközni fog és a konzol nem tud létrejönni. Ezt a legkönnyebben úgy lehet megakadályozni, ha az xdm indítása elõtt várunk kb. 10 másodpercet a szkriptben. Amennyiben az /etc/ttys állományból adjuk ki az xdm parancsot, úgy továbbra is fennáll az &man.xdm.1; és a &man.getty.8; ütközésének veszélye. Ezt például úgy tudjuk elkerülni, ha felvesszük a megfelelõ virtuális terminál sorszámát a /usr/local/lib/X11/xdm/Xservers állományba: :0 local /usr/local/bin/X vt4 A fenti példában az X szervert a /dev/ttyv3 eszközre irányitjuk. A számozást azonban eggyel el kell tolnunk, mert míg az X szerver egytõl számozza a virtuális konzolokat, addig a &os; rendszermagja nullától. Az xconsole indításakor miért jelenik meg a Couldn't open console hibaüzenet? Ha az X-et a startx paranccsal indítottuk el, akkor a /dev/console eszközre nem állítódnak be a szükséges engedélyek, ezért az xterm -C és az xconsole parancsok nem fognak mûködni. Ez a konzolok engedélyeinek alapértelmezett beállítási módjától függ. Egy többfelhasználós rendszer esetén nem feltétlenül van szükségünk arra, hogy bármelyik felhasználó kedvére írhasson a rendszerkonzolra. Az &man.fbtab.5; állomány segítségével engedélyezni tudjuk azon felhasználók számára, akik a helyi gépen, virtuális konzolon keresztül jelentkeznek be. Dióhéjban az /etc/fbtab állományban (lásd &man.fbtab.5;) kell kivennünk a következõ sort a megjegyzésbõl: /dev/ttyv0 0600 /dev/console Ennek köszönhetõen bárki, aki az /dev/ttyv0 eszközön keresztül jelentkezik be a rendszerbe, el tudja érni a konzolt. Régebben egyszerû felhasználóként is el lehetett indítani az &xfree86; szervert. Most miért kell root felhasználóként indítani? Az X szerverek csak úgy képesek közvetlenül elérni a videokártyát, ha root felhasználóként futtatjuk ezeket. Az &xfree86; régebbi (3.3.6 elõtti) változatai az összes szervert úgy telepítették fel automatikusan, hogy a root felhasználó jogaival fussanak (setuid bittel). Ennek viszont megvan a maga nyilvánvaló biztonsági kockázata, hiszen az X szerverek általában nagy és bonyolult programok. Az &xfree86; újabb változatai azonban már pontosan ebbõl kifolyólag nem állítanak be setuid root bitet a szerverekre. Értelemszerûen az a megoldás nem fogadható el és nem is annyira biztonságos, hogy az X szervert root felhasználóként futtassuk. Kétféleképpen tudjuk egyszerû felhasználóként futtatni az X-et. Használhatjuk az xdm vagy más egyéb bejelentkeztetõ képernyõ (mint például a kdm) megoldását, vagy az Xwrapper programot. Az xdm egy grafikus bejelentkeztetésért felelõs démon. Általában a rendszer indításakor aktiválódik, feladata a felhasználók hitelesítése és a hozzájuk tartozó munkamenetek elindítása. Lényegében a &man.getty.8; és a &man.login.1; grafikus megfelelõje. Az xdm démonnal kapcsolatban még az &xfree86; dokumentációját, illetve a GYIK-ban ezt a kérdést érdemes elolvasnunk. Az Xwrapper az X szerverhez tartozó burkolóprogram (wrapper). Ez egy apró segédprogram, amely lehetõvé teszi az X szerver manuális indítását miközben igyekszik ügyelni a biztonságra is. Elvégez néhány alapvetõ ellenõrzést a paramétereken, és ha megfelelõnek találja ezeket, akkor elindítja a megfelelõ X szervert. Ha valamiért nem akarunk bejelentkeztetõ képernyõt indítani, akkor ezt pontosan nekünk találták ki! Ha telepítettük a teljes Portgyûjteményt, akkor a /usr/ports/x11/wrapper portban találjuk meg. Miért viselkednek furcsán a PS/2-es egerek X alatt? Valószínûleg az egér és az egérmeghajtó kiesett a szinkronból. Nagyon ritkán elõfordul, hogy a meghajtó hibásan szinkronizációs hibát jelez, és ekkor a rendszermag a következõ üzenetet küldi: psmintr: out of sync (xxxx != yyyy) Közben természetesen azt tapasztaljuk, hogy az egerünk nem mûködik rendesen. Ha ilyen történne velünk, akkor tiltsuk le a meghajtó szinkronizáció ellenõrzéséért felelõs rutinjait. Ezt úgy tudjuk megtenni, ha a meghajtónak beállítjuk a 0x100 értéket. Ehhez a rendszertöltõ parancssorában a kapcsolóval tudjuk behozni a UserConfig részt: boot: -c Ezután a UserConfig parancssorában gépeljük be a következõt: UserConfig> flags psm0 0x100 UserConfig> quit Miért nem mûködnek a MouseSystems által gyártott PS/2-es egerek? Kaptunk néhány visszajelzést arra vonatkozóan, hogy a MouseSystems által gyártott PS/2-es egerek bizonyos típusai csak abban az esetben mûködnek rendesen, ha nagy felbontású módban használjuk ezeket. Minden más esetben az egér néha fel-felugrik a képernyõ bal felsõ sarkába. Úgy tudjuk nagy felbontású módban használni az egerünket, ha a PS/2-es egérmeghajtónak a 0x04 beállítást adjuk meg. Ehhez a rendszertöltõ parancssorában gépeljük be a kapcsolót: boot: -c Ahogy bejön a UserConfig parancssora, gépeljük be a következõt: UserConfig> flags psm0 0x04 UserConfig> quit Az elõzõ részben olvashatunk egy másik hasonló egeres problémáról. Hogyan lehet megcserélni a gombokat az egéren? Futtassuk le a xmodmap -e "pointer = 3 2 1" parancsot az .xinitrc vagy .xsession állományunkból. Hogyan lehet betöltõképet telepíteni és hol találhatóak ilyen képek? Erre a kérdésre részletes választ a &os; kézikönyv Rendszerbetöltõ képernyõk címû szakaszában kapunk. X alatt lehet használni a billentyûzeten található Windows billentyûket? Igen. Ehhez mindössze az &man.xmodmap.1; használatával meg kell adni a hozzájuk tartozó funkciót. Feltéve, hogy mindegyik Windows billentyûzet szabványos, a következõ billentyûkódok tartoznak ehhez a három plusz gombhoz: 115Windows billentyû, a bal oldali Ctrl és Alt billentyûk között 116Windows billentyû, az AltGr mellett jobbra 117Menü gomb, a jobb oldali Ctrl mellett balra Például így lehet beállítani a bal oldali Windows billentyût vesszõre: &prompt.root; xmodmap -e "keycode 115 = comma" A változatatások valószínûleg csak akkor fognak életbelépni, ha újraindítjuk az ablakkezelõnket. Ha azt szeretnénk, hogy a Windows billentyûkhöz rendelt funkciók az X indításakor automatikusan beállítódjanak, akkor tegyük az xmodmap parancs hívását az ~/.xinitrc állományunkba. Sokkal jobban járunk viszont, ha ehelyett inkább az ~/.xmodmaprc állományunkba vesszük fel az xmodmap beállításait, soronként egyesével, és a következõ sor tesszük az ~/.xinitrc állományunkba: xmodmap $HOME/.xmodmaprc Például ezeket a gombokat be lehet állítani az F13, F14 és F15 billentyûkre is. Ezekre aztán az alkalmazásokban vagy az ablakkezelõben további hasznos funkciókat tudunk beállítani. Ehhez a következõt kell megadnunk az ~/.xmodmaprc állományban: keycode 115 = F13 keycode 116 = F14 keycode 117 = F15 Ha például az x11-wm/fvwm2 ablakkezelõt használjuk, akkor az F13 gombra be tudjuk állítani a kurzor alatt álló ablak lekicsinyítésére (vagy visszanagyítására); az F14 billentyûvel az elõtérbe tudjuk hozni a kurzor alatt levõ ablakot, vagy ha már elöl van, akkor hátra tudjuk rakni; az F15 gomb elõhozza a munkakörnyezet (alkalmazás) menüjét még olyankor is, amikor a kurzor nincs is az asztalon. Ez utóbbi abban az esetben lehet hasznos, amikor az asztal egyáltalán nem látható (és a billentyûn látható rajz pontosan is ezt mutatja). A következõ beállítások valósítják meg az imént említett funkciókat az ~/.fvwmrc állományon belül: Key F13 FTIWS A Iconify Key F14 FTIWS A RaiseLower Key F15 A A Menu Workplace Nop Hogyan lehet hardveres 3D gyorsítást használni az &opengl;-hez? Az &xorg; pillanatnyilag használt verziójától és a videokártyánktól függ, hogy tudunk-e 3D gyorsítást alkalmazni. Ha nVidia kártyánk van, akkor a portok közül telepíteni tudjuk a &os;-hez készített bináris meghajtót: A legújabb nVidia-kártyákat az x11/nvidia-driver port támogatja. A GeForce2 MX/3/4 sorozatú nVidia-kártyákat a meghajtó 96XX változata támogatja, amely az x11/nvidia-driver-96xx portból telepíthetõ. Az ettõl is régebbi kártyák, például a GeForce vagy Riva TNT esetén a meghajtó 71XX változata javasolt, amely az x11/nvidia-driver-71xx porton keresztül érhetõ el. Az nVidia honlapján részletes leírást találhatunk arról, hogy melyik kártyát melyik meghajtó ismeri. Ez az információ a következõ címen érhetõ el: . A Matrox G200/G400 esetén az x11-servers/mga_hal portot érdemes megnéznünk. ATI Rage 128 és Radeon kártyák számára a &man.ati.4x;, &man.r128.4x; és &man.radeon.4x; man oldalakat ajánljuk. 3dfx Voodoo 3, 4, 5 és Banshee kártyák számára az x11-servers/driglide port áll rendelkezésre. Hálózatok Honnan lehet többet megtudni a lemez nélküli mûködésrõl? A lemez nélküli mûködés kifejezés arra utal, hogy a &os; rendszerünk hálózaton keresztül indul el, valamint a mûködéséhez szükséges állományokat nem merevlemezrõl, hanem egy szerverrõl olvassa be. Ennek részleteirõl kézikönyv lemez nélküli mûködésrõl szóló részében olvashatunk. A &os; használható kizárólag csak hálózati útválasztóként? Igen. Ezzel kapcsolatban a kézikönyv Egyéb haladó hálózati témák címû fejezetét javasoljuk elolvasásra, különös tekintettel az útválasztás és az átjárók bemutatására. &os;-n keresztül lehet &windows; operációs rendszerrel internetre csatlakozni? Ezt a kérdést általában olyanok teszik fel, akiknek két számítógépük van otthon, és ezek közül az egyiken a &os;, a másikon pedig a &windows; valamelyik változata fut. A &os; rendszer fog az internethez csatlakozni, és ezen keresztül szeretnénk a windowsos géprõl is elérni azt. Ez tulajdonképpen az elõzõ kérdés egy speciális esete, és remekül megoldható. Ha betárcsázós kapcsolattal csatlakozunk az internethez, akkor érdemes tudnunk, hogy a felhasználói módban futó &man.ppp.8; tartalmaz egy kapcsolót. A &man.ppp.8; programot úgy tudjuk a kapcsolóval futtatni, ha az /etc/rc.conf állományban a gateway_enable beállítást a YES értékre állítjuk. Ezután állítsuk be a windowsos gépünket ennek megfelelõen és minden mûködni fog. A további részletekrõl a &man.ppp.8; man oldalán vagy a kézikönyv felhasználói PPP-rõl szóló bejegyzésében olvashatunk. Amennyiben rendszerszintû PPP-t használunk vagy Ethernettel csatlakozunk az internethez, akkor a &man.natd.8; démonra lesz szükségünk. Erre vonatkozóan a kézikönyv natd démonról szóló szakaszában találhatunk részletesebb információkat. A &os; támogatja a SLIP és a PPP használatát? Igen. Érdemes elolvasnunk az &man.slattach.8;, &man.sliplogin.8;, &man.ppp.8; és &man.pppd.8; man oldalakat. A &man.ppp.8; és a &man.pppd.8; egyaránt támogatja a beérkezõ és kimenõ kapcsolatokat, miközben a &man.sliplogin.8; kizárólag csak beérkezõ kapcsolatokkal dolgozik, valamint a &man.slattach.8; pedig csak kimenõ kapcsolatokkal. Ezek pontos használatáról olvassuk el a kézikönyv PPP-rõl és a SLIP-rõl szóló fejezetét. Ha viszont csak egy shellen keresztül érjük el az internetet, akkor hasznos lehet megnéznünk a net/slirp csomagot. Segítségével a helyi géprõl (korlátozott módon) hozzá tudunk férni különbözõ FTP és HTTP szolgáltatásokhoz. A &os; támogat hálózati címfordítást (NAT) vagy maszkolást? Igen. Ha egy felhasználói PPP kapcsolat esetén szeretnénk hálózati címfordítást alkalmazni, akkor olvassuk el a kézikönyv felhasználói PPP-vel foglalkozó részét. Ha viszont más típusú hálózati kapcsolatok esetén kívánunk címfordítást használni, akkor ahhoz a kézikönyv natd démonnal kapcsolatos részét kell fellapoznunk. A PLIP segítségével hogyan tudok két &os; rendszert összekapcsolni párhuzamos porton keresztül? Ezt illetõen a kézikönyv PLIP-rõl szóló szakaszát érdemes megnéznünk. Hogyan lehet álneveket megadni az Ethernet eszközöknek? Amennyiben az álnév ugyanazon az alhálózaton található, mint a hozzá tartozó interfész, akkor egyszerûen csak adjuk meg a netmask 0xffffffff paramétert az &man.ifconfig.8; parancs meghívásakor, például így: &prompt.root; ifconfig ed0 alias 192.0.2.2 netmask 0xffffffff Minden más esetben a hagyományos módon adjunk meg egy hálózati címet és egy hálózati maszkot: &prompt.root; ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00 Errõl bõvebben a &os; kézikönyvben olvashatunk. A 3C503 kártya hogyan állítható másik hálózati portra? Ha a kártyán egy másik portot szeretnénk használni, akkor ahhoz meg kell adnunk egy további paramétert a &man.ifconfig.8; meghívásakor. Itt az alapértelmezett port a link0. Ha a BNC helyett az AUI portot akarjuk használni, akkor ennek a link2 értéket kell megadnunk. Az ilyen típusú beállítások az /etc/rc.conf állomány (lásd &man.rc.conf.5;) ifconfig_* változóival adhatóak meg. Miért okoz gondot az NFS használata &os; alatt? A személyi számítógépekben található bizonyos hálózati kártyák (szépen szólva) ügyesebbek a többieknél, ami az olyan komolyabb hálózati alkalmazások, mint például az NFS esetén gondokat okozhat. Ezzel kapcsolatban kézikönyv NFS-rõl szóló részét érdemes megnéznünk. Miért nem lehet hálózati állományrendszereket csatlakoztatni &linux; alól? A &linux; egyes változataiban található NFS kód csak bizonyos privilegizált portokról fogad el kéréseket. Próbáljuk meg a következõt: &prompt.root; mount -o -P linux:/valami /mnt Miért nem lehet hálózati állományrendszereket csatlakoztatni &sun; típusú rendszerek alól? A &sunos; 4.X változatait futtató munkaállomások csak privilegizált portokról fognak el kéréseket. Próbálkozzunk az alábbi paranccsal: &prompt.root; mount -o -P sun:/valami /mnt A mountd miért küld folyton can't change attributes hibaüzenetet és miért jelenik meg a bad exports list hibaüzenet a &os; alapú NFS szerveren? Ez leginkább azért történik, mert nem jól adtuk meg az /etc/exports állomány tartalmát. Olvassuk át a &man.exports.5; man oldalt és a kéziköny NFS-rõl szóló részét, különös tekintettel az NFS beállítására. A NeXTStep gépekkel miért nem sikerül PPP-n keresztül kommunikálni? Próbáljuk meg az /etc/rc.conf állományban (lásd &man.rc.conf.5;) kikapcsolni a TCP kiterjesztések használatát úgy, hogy az alábbi változót a NO értékre állítjuk: tcp_extensions=NO A Xylogic által gyártott Annex típusú gépek esetén is javasolt megtenni a fenti változtatást. Hogyan lehet engedélyezni a multicast használatát az IP-n belül? A &os; alapértelmezés szerint támogatja a multicast mûveleteket. Amennyiben egy multicast küldéseket közvetítõ útválasztót szeretnénk beállítani, akkor újra kell fordítanunk a rendszermagunkat a MROUTING beállítás használatával és elindítani a &man.mrouted.8; démont. Ez a démon úgy aktiválható a rendszer minden egyes indításakor, ha az /etc/rc.conf állományban az mrouted_enable változót YES értékûre állítjuk. A &os; újabb változataiban az &man.mrouted.8; multicast útválasztó démon, a &man.map-mbone.8; valamint az &man.mrinfo.8; segédprogramok már nem szerepelnek az alaprendszerben. Ezek a programok már a &os; Portgyûjteményében az net/mrouted portban találhatóak meg. Az MBONE használatához további eszközök találhatóak a külön mbone kategóriában a Portgyûjeményen belül. Ha a vic és vat nevû konferenciaszervezõ eszközöket keressük, akkor itt érdemes szétnéznünk! Milyen hálózati kártyák épülnek a DEC PCI chipkészletére? Glen Foster (gfoster@driver.nsta.org) a következõ listát állította össze róluk, amelyet kiegészítettünk még néhány további elemmel: A DEC PCI chipkészletére épülõ hálózati kártyák Gyártó Típus ASUS PCI-L101-TB Accton ENI1203 Cogent EM960PCI Compex ENET32-PCI D-Link DE-530 Dayna DP1203, DP2100 DEC DE435, DE450 Danpex EN-9400P3 JCIS Condor JC1260 Linksys EtherPCI Mylex LNP101 SMC EtherPower 10/100 (Model 9332) SMC EtherPower (Model 8432) TopWare TE-3500P Znyx (2.2.x) ZX312, ZX314, ZX342, ZX345, ZX346, ZX348 Znyx (3.x) ZX345Q, ZX346Q, ZX348Q, ZX412Q, ZX414, ZX442, ZX444, ZX474, ZX478, ZX212, ZX214 (10mbps/hd)
Miért kell teljes hálózati neveket megadni? Erre a &os; kézikönyvben találjuk meg a választ. Miért jelenik meg a Permission denied hibaüzenet minden egyes hálózati mûvelet esetén? Amennyiben a rendszermagot az IPFIREWALL beállítással fordítottuk le, akkor nem szabad elfelejtenünk, hogy ez alapértelmezés szerint minden olyan csomagot eldob, amelyet külön nem engedélyeztünk. Ha véletlenül rosszul állítottuk volna be a rendszerünkön futó tûzfalat, akkor a hálózat mûködését úgy tudjuk visszaállítani, ha root felhasználóként kiadjuk a következõ parancsot: &prompt.root; ipfw add 65534 allow all from any to any Az /etc/rc.conf állományban is megadhatjuk ehhez a firewall_type="open" sort. Ha a tûzfalak beállításáról szeretnénk többet megtudni &os; alatt, akkor olvassuk el a kézikönyv erre vonatkozó fejezetét. Az ipfw fwd szabálya miért nem irányít át más gépekre szolgáltatásokat? Valószínûleg azért, mert nem egyszerûen a csomagok továbbítására (forward) van szükségünk, hanem hálózati címfordításra. Az fwd szabály pontosan azt csinálja, amirõl a nevét kapta: csomagokat továbbít, de azokon belül semmit sem változtat meg. Tegyük fel, hogy van egy ilyen szabályunk: 01000 fwd 10.0.0.1 from any to ize 21 Amikor egy csomag az ize célcímmel megérkezik a 10.0.0.1 gépre, akkor benne a cél címe továbbra is az ize lesz! A csomag célcíme nem fog magától megváltozni a 10.0.0.1 címre. A legtöbb gép általában eldobja azokat a csomagokat, amelyeket nem egyenesen neki címeztek. Emiatt a fwd szabály használata nem minden esetben úgy mûködik, ahogy arra a felhasználó számít. Ez viszont ilyen, semmilyen hiba nincs benne. Részletesebb információkat a szolgáltatások átirányításával foglalkozó GYIK-ban, a &man.natd.8; man oldalán vagy a Portgyûjtemény valamelyik port átirányítással foglalkozó portjának dokumentációjában találhatunk. Hogyan lehet egyik géprõl a másikra szolgáltatásokat átirányítani? Az FTP (vagy más egyéb szolgáltatás-) kéréseket a Portgyûjteményen belül található sysutils/socket porttal tudunk átirányítani. Az adott szolgáltatás helyett egyszerûen csak adjuk meg a socket parancsot és annak paramétereit, valahogy így: ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.minta.com ftp ahol az ftp.minta.com az a gép, ahová át akarjuk irányítani a szolgáltatást, az ftp pedig a konkrét szolgáltatás. Hogyan lehet a sávszélességet szabályozni? &os; alatt alapvetõen három eszköz szolgál erre a célra. A &man.dummynet.4; a &os; részeként megtalálható &man.ipfw.4; egyik komponense. Az ALTQ a &os;-ben található &man.pf.4; rendszer része, az Emerging Technologies által fejlesztett Bandwith Manager pedig egy kereskedelmi termék. Miért jelenik meg a /dev/bpf0: device not configured hibaüzenet? Olyan programot akarunk futtatni, amelynek szüksége van a Berkeley Packet Filter (&man.bpf.4;) használatára, azonban a rendszermag ezt nem tartalmazza. Úgy tudjuk aktiválni, ha a rendszermag konfigurációs állományába felvesszük a következõ sort, majd fordítunk egy új rendszermagot: device bpf # Berkeley Packet Filter Hogyan lehet a hálózaton elérhetõ &windows; típusú partíciókat csatlakoztatni, mint ahogy az smbmount csinálja &linux; alatt? Erre az SMBFS eszközeit használhatjuk, amely tartalmazza az ehhez szükséges rendszermagbeli módosításokat és a hozzá tartozó felhasználói programokat. Ezek a programok és a hozzájuk tartozó &man.mount.smbfs.8; man oldal az alaprendszer részei. Mik azok az Limiting icmp/open port/closed port response üzenetek a naplókban? Ilyen üzeneteket akkor kapunk a rendszermagtól, ha valaminek a hatására több ICMP vagy TCP reset (RST) választ küld, mint amennyit kellene. Az ICMP válaszok sokszor olyankor generálódnak, amikor használaton kívüli UDP portokat akarnak elérni a rendszerünkön. A TCP reset pedig általában olyankor keletkezik, amikor meg nem nyitott TCP porthoz akarnak csatlakozni. Többek közt ilyenek okozhatják: A rendszer túlterhelését célzó, nyers erõvel indított Denial of Service (Dos) támadások (ellentétben az egycsomagos, adott sebezhetõség kihasználó támadásokkal). A portok szisztematikus letapogatása, amelynek során egyszerre nagy mennyiségû portot próbálnak meg átvizsgálni (ellentétben azzal, amikor csak néhány jól ismert portot nyitnak meg). Az üzenetben olvasható elsõ szám azt mondja meg, hogy a rendszermag mennyi csomagot küldött volna, ha nem korlátoztuk volna, a második pedig magát a határt jelzi. Ezt a net.inet.icmp.icmplim sysctl változó segítségével tudjuk beállítani, ahogy például most megnöveljük az értékét 300-ra: &prompt.root; sysctl -w net.inet.icmp.icmplim=300 Amennyiben le szeretnénk tiltani az ilyen jellegû üzeneteket a naplókban, viszont még továbbra is szükségünk lenne a válaszküldés korlátozására, a net.inet.icmp.icmplim_output sysctl változó segítségével így tudjuk ezt megtenni: &prompt.root; sysctl -w net.inet.icmp.icmplim_output=0 Végezetül, ha teljesen ki akarjuk kapcsolni a válaszküldés korlátozását, akkor állítsuk a net.inet.icmp.icmplim sysctl változót (lásd az elõbbi példában) a 0 nulla értékre. A korlát törlése azonban a fenti okok miatt egyáltalán nem ajánlott. Mik azok az arp: unknown hardware address format hibaüzenetek? Ez arra utal, hogy valamelyik gép a helyi Ethernet-alapú hálózatunkon olyan MAC-címet használ, amelynek a &os; nem ismeri a formátumát. Valószínûleg olyankor kapjuk ezt a hibaüzenetet, amikor valaki más kísérletezik az Ethernet kártyája beállításaival valahol a hálózaton. Leggyakrabban kábelmodemes hálózatokon tapasztalhatunk ilyet. Megnyugodhatunk, teljesen veszélytelen, semmilyen hatással nincs a &os; gépünk teljesítményére. Miért jelennek meg 192.168.0.10 is on fxp1 but got reply from 00:15:17:67:cf:82 on rl0 üzenetek a konzolon és hogyan lehet ezeket kikapcsolni? Ilyen üzeneteket akkor kapunk, amikor a hálózaton kívülrõl érkezik hozzánk váratlanul egy csomag. A letiltásukhoz állítsuk a net.link.ether.inet.log_arp_wrong_iface értékét 0-ra. A CVSup programot telepítése után nem lehet elindítani, mert hibákat jelez. Mi a gond? Elõször is nézzük meg, hogy az iménti hibaüzenet mellett nem látunk-e valami hasonlót: /usr/libexec/ld-elf.so.1: Shared object "libXaw.so.6" not found Az ilyen jellegû hibák általában olyankor keletkeznek, amikor olyan gépre telepítjük a net/cvsup portot, amelyen viszont nem található meg a &xorg; programcsomag. Amennyiben szükségünk lenne CVSup programhoz mellékelt grafikus felületre, akkor kénytelenek leszünk mellé az &xorg; programjait is telepíteni. Ha viszont egyszerûen csak parancssorból szeretnénk használni a CVSup lehetõségeit, töröljük le a korábban telepített csomagot, majd helyette rakjuk fel a net/cvsup-without-gui vagy a net/csup portot. A &os; újabb változataiban megpróbálkozhatunk a &man.csup.1; használatával is. Ezzel a témával részletesebban a kézikönyv CVSup használatáról szóló része foglalkozik.
Biztonság Mi az a járóka (sandbox)? A járóka alapvetõen egy biztonsági szakkifejezés. Két dolgot jelenthet: Egy virtuális falak között futó programot, melyeket azért emeltek a program köré, hogy a feltörését követõen megakadályozzák a rendszer többi részének elérését. A program csak a falon belül játszhat. Ilyenkor semmilyen olyan kódot nem képes futtatni, amellyel át tudna lépni a falakon, így a használatához nem kell elõzetesen átvizsgálni a forrásait ahhoz, hogy meg tudjuk gyõzõdni a biztonságosságáról. Ez a fal lehet például egy felhasználói azonosító. A &man.security.7; és &man.named.8; man oldalakon is ezt a definíciót találjuk meg. Vegyük például az ntalk szolgáltatást (lásd &man.inetd.8;). Ezt a szolgáltatást korábban a root felhasználó azonosítójával futtatták, de manapság viszont már a tty felhasználóval fut. A tty felhasználó lényegében egy olyan járóka, amely az ntalk szolgáltatás feltörésekor nem engedi, hogy a rendszer többi részéhez is hozzá lehessen férni. A valódi gépet utánzó rendszerben futó programot. Ez már egy sokkal kifinomultabb megoldás. Ha ilyenkor valakinek sikerül betörnie a programba, akkor könnyen azt hiheti, hogy sikerült a rendszer többi részét is elérnie, de valójában csak egy szimulált gépen van, és semmilyen valós adatot nem képes módosítani. Leggyakrabban ezt úgy szokták elérni, hogy egy könyvtárban létrehoznak egy szimulált környezetet, majd itt futtatják az adott programot a &man.chroot.8; segítségével. (Ekkor az iménti könyvtár lesz a gyökérkönyvtár az adott folyamat számára, nem pedig a rendszer igazi gyökere.) Másik szintén gyakori megoldás a használt állományrendszerek írásvédett csatlakoztatása, amely felett aztán kialakítanak a program számára egy látszólag írható réteget. Ilyenkor a program teljesen úgy érzékeli, hogy képes a rendszerben elérhetõ állományokat módosítani, azonban egyedül csak saját maga látja ezeket, a rendszerben futó többi program viszont nem feltétlenül. Ezeket a járókákat általában úgy szokták felépíteni, hogy a felhasználók (vagy a támadók) számára teljesen észrevétlenek legyenek. A &unix; két alapvetõ járókát valósít meg. Az egyik a futó programok, a másik pedig a felhasználói azonosítók szintjén mûködik. Futása közben minden &unix; program teljesen elszigetelt minden más &unix; programtól, így az egyik nem képes módosítani a másik memóriában tárolt adatait. A &windows;-tól eltérõen, ahol ugyebár az egyik program könnyedén el tudja érni egy másik memóriaterületét, ezért a program nem képesek egymásban kárt tenni. A &unix; alatt futó programok mindig egy adott felhasználóhoz tartoznak. Ha ez nem a root felhasználó, akkor azzal lényegében egy tûzfalat hozunk létre a különbözõ felhasználók által birtokolt folyamatok között. A felhasználók azonosítói emellett segítenek a lemezen tárolt adatokat is elszigetelni egymástól. Mi az a biztonsági szint (securelevel)? A biztonsági szintek egy rendszermagon belül megvalósított védelmi módszert képviselnek. A pozitív értékû biztonsági szintek esetén a rendszermag korlátoz bizonyos feladatokat, amelyeket ilyenkor még a rendszeradminisztrátor (vagyis a root felhasználó) sem képes elvégezni. Az írás pillanatában a biztonsági szintek, több más dolog mellett, a következõk szabályozására alkalmasak: a különbözõ állományjelzõk, például az schg (a system immutable jelzés) törlése; a rendszermag memóriájának elérése a /dev/mem és /dev/kmem eszközökön keresztül; a rendszermag moduljainak betöltése; a tûzfal szabályainak módosítása. A jelenleg futó rendszer biztonsági szintjét a következõ parancs segítségével lehet lekérdezni: &prompt.root; sysctl kern.securelevel A parancs eredménye az adott &man.sysctl.8; változó (vagyis esetünkben a kern.securelevel) és annak értéke lesz, amely egy szám. Ez utóbbi adja meg a biztonsági szint aktuális értékét. Amennyiben ez pozitív (vagyis nullánál nagyobb), akkor érvényben vannak a biztonsági szintekhez kapcsolódó bizonyos korlátozások. Egy mûködõ rendszer biztonsági szintjét nem lehet csökkenteni, hiszen ezzel tulajdonképpen hatástalanná tennénk. Ha olyan feladatot akarunk végrehajtani, amely nem pozitív biztonsági szintet igényel (például az alaprendszer frissítése vagy a dátum átállítása), akkor ahhoz elõször módosítanunk kell az /etc/rc.conf állományt (lásd kern_securelevel és kern_securelevel_enable változók), majd újraindítani a rendszert. A biztonsági szintekkel és rájuk vonatkozó információkkal kapcsolatban olvassuk el az &man.init.8; man oldalt. A biztonsági szintek nem feltétlenül jelentenek minden problémára tökéletes megoldást. Rentegeg ismert hátulütõvel rendelkeznek, és gyakran a biztonság hamis érzetét keltik. Ezzel kapcsolatban az egyik legnagyobb gond, hogy csak abban az esetben mûködik rendesen a rendszer, ha a rendszerindítás során a biztonsági szintek beállításáig minden állományt levédünk. Ha a támadó képes lefuttatni a saját programját még a biztonsági szint beállítása elõtt (amely viszont elég késõn történik meg, hiszen a rendszerindítás során számos olyan dolog feladat van, amely nem végezhetõ el magasabb biztonsági szinteken), akkor azzal az egész védelmi módszer hatástalanítható. Habár a rendszerindítás folyamán felhasznált állományok biztonságba helyezése technikailag egyáltalán nem lehetetlen, nehezebbé válik tõle a rendszer karbantartása, mivel ilyenkor az egész rendszert át kell állítanunk legalább egyfelhasználós módba és úgy módosítani a konfigurációs állományokat. Ezt és az ehhez hasonló problémák gyakran felmerülnek a levelezési listákon, különösen a &a.security; archívumaiban. Ezen a funkción keresztül nézhetünk után a téma részletesebb tárgyalásának. Néhányan reménykednek, hogy a biztonsági szinteket hamarosan leváltja valami sokkal finomabb beállítási lehetõségekkel rendelkezõ megoldás, azonban a dolgok még eléggé homályosak ebbõl a szempontból. Figyelmeztettünk mindenkit! A BIND (named) különféle nagyobb sorszámú portokat használ. Miért? A BIND a kimenõ kérésekhez véletlenszerûen kiválaszt egy nagyobb sorszámú portot. A legújabb változataiban már minden egyes kéréshez külön véletlenszerûen keres új UDP portot. Ez bizonyos hálózati konfigurációk esetén problémákhoz vezethet, különösen olyankor, amikor a beérkezõ UDP csomagokat egy tûzfal megállítja. A tûzfalak által blokkolt porttartományok használatát az avoid-v4-udp-ports vagy az avoid-v6-udp-ports beállítással tilthatjuk le a program számára. Ha ezt a portot (mint például az 53) az /etc/namedb/named.conf állományban a query-source vagy a query-source-v6 beállításokkal adjuk meg explicit módon, akkor a program nem fogja véletlenszerûen váltogatni a portokat. Határozottan javasoljuk, hogy ezekkel az opciókkal ne adjunk meg elõre rögzített portokat. Mindenesetre örülünk, hogy ezt is valaki megkérdezte! Hiába, nem árt néha nézegetni a &man.sockstat.1; kimenetét és észrevenni benne néhány furcsaságot. A sendmail a szabványos 25-ös port mellett az 587-es portot használja! Miért? A sendmail újabb verzióiban felfedezhetõ levélküldési lehetõségek az 587-es portot használják. Jelenleg ezt még nem sokan használják ki, de növekszik a népszerûsége. Kié az a nullás felhasználói azonosítójú toor fiók? Betörtek a gépre? Ne aggódjunk! A toor egy alternatív rendszergazdai hozzáférés (a toor a root visszafelé). Korábban csak a &man.bash.1; parancsértelmezõ telepítésekor jött létre, azonban manapság már alapértelmezés szerint létrejön. A nem szabványos parancsértelmezõk számára találták ki, így nem a root alapértelmezett parancsértelmezõjét kell megváltoztatnunk. Ez különösen olyan parancsértelmezõk esetén fontos, amelyek nem részei az alaprendszernek (például a portként vagy csomagként telepített parancsértelmezõk esetén) és ezért a /usr/local/bin könyvtárba fognak kerülni. Ez a könyvtár alapértelmezés szerint azonban egy külön állományrendszeren található. Ha a root parancsértelmezõje viszont a /usr/local/bin könyvtárban lenne, miközben a /usr (vagy bármelyik más állományrendszer, amely az imént említett könyvtárat tartalmazza) nem csatlakoztatható valamilyen oknál fogva, akkor a root nem lenne képes bejelentkezni és kijavítani a problémát. (Noha amikor újraindítjuk a rendszerünket egyfelhasználós módban, akkor a rendszer rá fog kérdezni, hogy melyik parancsértelmezõt akarjuk használni.) Egyesek nem szabványos parancsértelmezõn keresztül a toor felhasználóval végzik el a root mindennapi teendõit, így a szabványos parancsértelmezõt csak a vészhelyzetekre tartogatják. Alapértelmezés szerint a toor felhasználóval nem tudunk bejelentkezni, mivel nincs jelszava, ezért ha használni akarjuk, akkor elõször jelentkezzünk be a root felhasználóval, majd állítsunk be neki egy jelszót. A suidperl parancs miért nem mûködik rendesen? Biztonsági okokból a suidperl parancs alapértelmezés szerint nem kerül telepítésre. Ha forrásból frissítjük rendszerünket és azt szeretnénk, hogy ennek során a suidperl is leforduljon, akkor a perl fordításának megkezdése elõtt vegyük fel a ENABLE_SUIDPERL=true sort az /etc/make.conf állományba. PPP Nem mûködik a &man.ppp.8;. Mit lehet a gond? Elsõként mindenképpen olvassuk el a &man.ppp.8; man oldalt és a kézikönyv PPP-vel foglalkozó részét. A következõ paranccsal engedélyezzük a naplózást: set log Phase Chat Connect Carrier lcp ipcp ccp command Ezt a parancsot a &man.ppp.8; parancssorában vagy az /etc/ppp/ppp.conf konfigurációs állományban kell megadnunk (leginkább a default szakasz elejére érdemes betennünk). Gondoskodjunk róla, hogy az /etc/syslog.conf állomány (lásd &man.syslog.conf.5;) tartalmazza az alábbi sort, illetve az /var/log/ppp.log állomány létezzen: !ppp *.* /var/log/ppp.log A napló segítségével már több mindent ki tudunk deríteni a &man.ppp.8; mûködésérõl. Ne aggódjunk, ha nem értünk belõle semmit. Kérjünk segítséget másoktól, nekik minden bizonnyal segíteni fog a probléma felderítésében. A &man.ppp.8; miért bontja a vonalat, amikor elindul? Ilyen általában azért történik, mert nem tudta feloldani a hálózati nevet. Ezt a legkönnyebben úgy tudjuk orvosolni, ha az /etc/host.conf állományba elõre rakjuk a hosts sort, így a névfeloldó elõször az /etc/hosts állománnyal fog próbálkozni. Ezután a /etc/hosts állományba vegyük fel a helyi gépet. Ha nincs helyi hálózatunk, akkor így írjuk át a localhost sort: 127.0.0.1 ize.minta.com ize localhost Minden más esetben egyszerûen csak vegyünk fel egy újabb bejegyzést a gépünkhöz. Ennek pontosabb részleteivel kapcsolatban nézzük meg a megfelelõ man oldalakat. Ha mindent jól csináltunk, akkor a ping -c1 `hostname` parancs hiba nélkül tér vissza. A &man.ppp.8; miért nem tárcsáz -auto módban? Elõször is ellenõrizzük, hogy létezik az alapértelmezett útvonal. A netstat -rn parancs (lásd &man.netstat.1;) kiadása után nagyjából a következõ két bejegyzést kell látnunk: Destination Gateway Flags Refs Use Netif Expire default 10.0.0.2 UGSc 0 0 tun0 10.0.0.2 10.0.0.1 UH 0 0 tun0 Feltételezzük, hogy a kézikönyvbõl, a man oldalról vagy ppp.conf.sample állományból másoltuk ki ezeket a címeket. Ha nincs alapértelmezett útvonalunk, akkor annak az lehet az oka, hogy a ppp.conf állományba elfelejtettük felvenni a HISADDR kulcsszót. Az alapértelmezett útvonal hiányának másik oka lehet még, ha az /etc/rc.conf állományban (lásd &man.rc.conf.5;) beállítottunk egy alapértelmezett átjárót, de elfelejtettük az ppp.conf állományba betenni a következõ sort: delete ALL Ebben az esetben menjünk vissza a kézikönyv A rendszer végsõ beállítása címû részéhez. Mit jelent a No route to host hibaüzenet? Általában azért jelentkezik, mert az /etc/ppp/ppp.linkup állományban nem adtuk meg az alábbiakat: MYADDR: delete ALL add 0 0 HISADDR Erre csak akkor van szükségünk, ha dinamikus IP-címünk van, vagy nem ismerjük az átjáró címét. Ha az interaktív módot használjuk, akkor ehhez a következõket kell begépelni csomag módba lépés után (a csomag módot a csupa nagybetûs PPP jelzi a parancssorban): delete ALL add 0 0 HISADDR A kézikönyv A PPP és a dinamikus IP-címek címû részében olvashatunk errõl bõvebben. Miért szakad meg a kapcsolat 3 perc után? A PPP alrendszer alapértelmezett lejárati ideje 3 perc. Ezt a beállítást a következõ sor megadásával tudjuk módosítani: set timeout NNN ahol az NNN másodpercekben megadja a kapcsolat lezárása elõtti inaktivitás maximális idejét. Ha az NNN értéke nulla, akkor a kapcsolat idõtúllépés miatt soha nem fog magától megszakadni. Ezt a parancsot a ppp.conf állományba tudjuk felvenni, vagy interaktív módban a parancssorban gépelhetjük be. Emellett menet közben is állítani tudjuk ezt az értéket, ha a ppp szerverre a &man.telnet.1; vagy a &man.pppctl.8; segítségével rácsatlakozunk. Errõl a &man.ppp.8; man oldal ad részletesebb tájékoztatást. A kapcsolat miért szakad meg nagyobb terhelést alatt? Ha beállítottuk a Link Quality Reporting (LQR) használatát, akkor elõfordulhat, hogy túlságosan sok csomag veszik el a gépünk és a másik oldal között. A &man.ppp.8; ezért a vonalat rossznak érzékeli és bontja. A &os; 2.2.5 változata elõtt az LQR alapértelmezés szerint engedélyezett volt. Az LQR így tiltható le: disable lqr A kapcsolat miért szakad meg véletlenszerûen? Néha elõfordulhat, hogy a zajos telefonvonal esetén vagy a hívásvárakoztatás használatakor a modem bontja a vonalat, mivel (helytelenül) azt hiszi, hogy nincs kapcsolat. Manapság a legtöbb modemen általában be lehet valahogy állítani, hogy mennyire legyenek elnézõek a kapcsolat ideiglenes megszakadásával szemben. Például egy &usrobotics; &sportster; esetén ezt tizedmásodpercekben mérik az S10 regiszter segítségével. A modemünk ilyenkor tehát úgy tehetõ sokkal toleránsabbá, ha a következõ hívási beállítást adjuk: set dial "...... ATS10=10 OK ......" További részleteket a modem kézikönyvébõl tudhatunk meg. A kapcsolat miért fullad le véletlenszerûen? Sokan tapasztalják, hogy a kapcsolat minden különösebb magyarázat nélkül lefullad. Ilyenkor elsõként azt érdemes tisztázni, hogy az összeköttetés melyik oldalán történt a vonal bontása. Ha belsõ modemet használunk, akkor próbáljuk meg a &man.ping.8; paranccsal ellenõrizni, hogy a modem TD lámpája villog-e az adatok küldésekor. Amennyiben igen (miközben az RD lámpa viszont nem), akkor a gond a vonal másik végén lesz. Ha viszont a TD nem villog, akkor a probléma a mi oldalunkon áll fenn. A belsõ modemek esetében a ppp.conf állományban a set server parancsot is érdemes megadnunk, így amikor a kapcsolat leállását tapasztaljuk, a &man.pppctl.8; segítségével rá tudunk csatlakozni a &man.ppp.8; démonra. Ha a hálózati kapcsolat ekkor hirtelen erõre kapna (mivel rácsatlakoztunk kívülrõl) vagy egyáltalán nem tudunk csatlakozni (feltételezve, hogy a set socket parancs sikeresen lefutott az induláskor), akkor a probléma még mindig nálunk lesz. Ha viszont sikerül csatlakoznunk és a vonallal még mindig gondok vannak, akkor próbáljuk a set log local async parancs használatával engedélyezni a helyi aszinkron naplózást, majd egy másik konzolból a &man.ping.8; parancs segítségével kezdjük el használni az összeköttetést. Az aszinkron naplózás jelezni fogja, ha sikerül adatokat átvinni és fogadni a kapcsolaton keresztül. Ha ilyenkor nem látunk visszafele érkezõ adatokat, akkor az arra utal, hogy a gond a vonal távoli végén van. Miután sikeresen kiderítettük, hogy az adott probléma helyi vagy távoli, két lehetõségünk van: Amennyiben távoli, olvassuk el a válaszát. Amennyiben helyi, olvassuk el a válaszát. A vonal túlsó végérõl nem érkezik válasz. Mi lehet tenni? Ezzel szemben nagyon keveset tudunk mi, felhasználók tenni. A legtöbb internetszolgáltató egyszerûen nem hajlandó segítséget nyújtani abban az esetben, ha nem valamelyik µsoft; operációs rendszert használjuk. A ppp.conf állományunkban a enable lqr sor megadásával engedélyezni tudjuk a &man.ppp.8; számára, hogy észlelhesse a távoli hibákat és bontsa a vonalat, de ez a vizsgálat viszonylag idõigényes és ennélfogva nem túlságosan hasznos. A szolgáltatónknak pedig ne nagyon emlegessük, hogy felhasználói PPP-t futtatunk. Elõször próbáljunk meg letiltani mindenféle tömörítést a következõ sor megadásával: disable pred1 deflate deflate24 protocomp acfcomp shortseq vj deny pred1 deflate deflate24 protocomp acfcomp shortseq vj Kapcsolódjunk újra és ellenõrizzük, hogy továbbra is mûködõképes a kapcsolat. Ha ennek hatására javul a helyzet vagy a probléma teljesen megoldódik, akkor a beállítások egyenkénti próbálgatásával keressük meg, hogy melyik okozta a gondot. Ez már elegendõ lesz ahhoz, hogy komolyabban felvegyük a kapcsolatot a szolgáltatónkkal (habár ebbõl gyorsan ki fog derülni, hogy nem µsoft; terméket használunk). Mielõtt szólnánk a szolgáltatónknak, a gépünkön engedélyezzük az aszinkron naplózást és várjuk meg, amíg a kapcsolat újra megszakad. Erre nem árt felkészülnünk, mert viszonylag sok tárhelyet igényel. Innen majd a portról utoljára olvasott adat lesz a lényeges. Ez általában szöveges adat és akár a probléma konkrét okára is utalhat (Memory fault, Core dumped?). Ha segítõkész szolgáltatót választottuk, akkor a naplózást akár az õ oldalunkon is engedélyezhetjük, így amikor a vonal megszakad, az õ szemszögükbõl is képesek leszünk elemezni a problémát. Ilyen esetben nyugodtan küldjünk egy levelet &a.brian; címére vagy kérjük meg a szolgáltatónkat, hogy közvetlenül vele tárgyaljon. A &man.ppp.8; teljesen megállt. Mi lehet tenni? A legjobban úgy járunk, ha a &man.ppp.8; programot nyomkövetési információkkal fordítjuk újra, majd a &man.gdb.1; segítségével lekérünk egy hívási láncot az éppen megakadt ppp példánytól. A ppp alkalmazást a következõ parancsokkal tudjuk úgy újrafordítani, hogy tartalmazza a kívánt információkat: &prompt.root; gdb ppp `pgrep ppp` Ezt követõen a gdb parancssorában a bt és where parancsok segítségével hozzá tudunk jutni a hívási lánchoz. Mentsük el valahova a gdb által kinyert adatokat, majd a detach paranccsal váljunk le a futó programról és a quit begépelésével lépjünk ki a gdb programból. Végezetül az elmentett eredményeket küldjük el &a.brian; címére. Miért nem történik semmi a Login OK! üzenet után? A &os; 2.2.5 elõtti kiadásaiban a &man.ppp.8; az összeköttetés létrejötte után megvárta, hogy a távoli pont kezdeményezze a kapcsolatvezérlõ protokoll (Line Control Protocol, LCP) használatát. Sok szolgáltató azonban nem csinál ilyet, ehelyett inkább a klienstõl várják mindezt. Az LCP kezdeményezését így kényszeríthetjük ki a &man.ppp.8; használata során: set openmode active Általában semmilyen gond nem származik abból, ha a mind a két oldal kezdeményez, így az openmode alapértelmezés szerint active értékû. A következõ szakaszban azonban bemutatjuk mikor gondot okoz a használata. Folyamatosan Magic is same hibák jelennek meg. Ez mire utal? Csatlakozás után idõnként elõfordulhat, hogy magic is the same hibaüzeneteket látunk a naplóban. Ezek az üzenetek bizonyos esetekben teljesen ártalmatlanok, máskor viszont akár komolyabb problémákat is jelezhet. A legtöbb PPP implementáció nem él túl egy ilyen hibát, és még ha látszólag létre is jön ilyenkor a kapcsolat, folyamatosan konfigurációs kérések és válaszok jönnek-mennek a naplóban egészen addig, amíg a &man.ppp.8; végül fel nem adja és lezárja a kapcsolatot. Ez általában olyan szervereken jelenik meg, ahol nem elég gyorsak a lemezek és minden kapcsolathoz elindítanak egy &man.getty.8; és a bejelentkezéskor vagy azt következõ elindítják a &man.ppp.8; programot. Egyes visszajelzések szerint ilyen egyébként gyakran elõfordul a slirp használatakor. A problémát egyébként a &man.getty.8; és a &man.ppp.8; indítása között eltelt idõ okozza, amikor a kliens oldalán futó &man.ppp.8; elkezdi küldeni a kapcsolatvezérlõ (Line Control Protocol, LCP) csomagokat. Mivel ilyenkor az ECHO még mindig aktív a szerver adott portján, a kliens &man.ppp.8; a saját csomagjainak tükrözõdését fogja látni. Az LCP beállításának része az összeköttetés két oldalán egy-egy bûvös szám (magic number) megállapítása, amellyel ezután észlelhetõek az ilyen tükrözõdések. A protokoll szerint amikor a két pont megpróbálja ugyanazt a bûvös számot használni, akkor visszautasítja (NAK jelzést küld) és egy másikat választ. Ha ilyenkor még a szerver portján aktív az ECHO, akkor a kliens oldali &man.ppp.8; azt tapasztalja, hogy elkezd LCP csomagokat küldeni, majd mivel ugyanazt kapja vissza, erre egy NAK jelzést válaszol. Ugyanígy látja magát a NAK jelzést (aminek hatására a &man.ppp.8; megváltoztatja a bûvös számát) is. Ennek eredményeképpen hirtelen nagy mennyiségû bûvösszám-váltás keletkezik, ami pedig szépen felhalmozódik a szerver terminálpufferében. Ahogy a &man.ppp.8; végre elindul a szerveren, elönti ez a rengeteg információ, aminek alapján sikertelennek ítéli meg az LCP beállítását és feladja a további próbálkozást. Eközben a kliens számára megszûnnek a visszaverõdõ csomagok és csak annyit lát, hogy a szerver bontja a kapcsolatot. Ezt úgy tudjuk elkerülni, ha a ppp.conf állományban a távoli pontra bízzuk az beállítás kezdeményezését: set openmode passive Ennek hatására a &man.ppp.8; megvárja, hogy a szerver kezdeményezze az LCP beállítását. Egyes szerverek azonban sosem teszik meg ezt. Ilyenkor valami ilyesmit tudunk tenni: set openmode active 3 Így a &man.ppp.8; 3 másodpercig passzív marad, majd csak ezután kezd el LCP kérésket küldeni. Ha a távoli pont eközben küld valamilyen kérést, az &man.ppp.8; azonnal válaszol rá és nem várja végig a 3 másodperces idõtartamot. Az LCP beállítása egészen a kapcsolat befejezõdéséig folytatódik. Mi lehet a probléma? A &man.ppp.8; programban jelenleg van egy olyan hibásan implementált jellemzõ, ahol az LCP, CCP és IPCP válaszokat nem társítja az eredeti kérésekhez. Ennek következményeképpen, ha az egyik PPP implementáció 6 másodperccel lassabb a másik oldalnál, akkor az még két további LCP konfigurációs kérést is küld, ami viszont végzetesnek bizonyul. Vegyünk például két implementációt, az A és a B pontokat. Az A már közvetlenül a csatlakozás után LCP kéréseket kezd el küldeni, miközben a B csak 7 másodperc múlva tud elindulni. Mire végre a B pont is elindul, addigra az A már kiküldött 3 LCP kérést. Most feltételezzük, hogy nincs ECHO, máskülönben az elõzõ szakaszban leírt, bûvös számokkal kapcsolatos problémába ütköznénk. A B ekkor tehát küld egy kérést, majd nyugtázza az A ponttól kapott korábbi kérést. Ennek hatására az A pont OPENED állapotba megy át, újra küld és nyugtázza az elõzõ kérést B felé. Eközben a B további két nyugtázást küld az A pontról kapott további két kérésre, a B indulása elõttrõl. A B ekkor megkapja az A elsõ nyugtáját és átvált OPENED állapotba. Az A ekkor megkapja a második nyugtát a B ponttól és visszavált REQ-SENT állapotba, majd az RFC szerint elküld (elõre) egy újabb kérést. Ekkor megkapja a harmadik nyugtát és OPENED állapotba vált. Eközben a B megkapja elõre küldött kérést a A ponttól, amelynek hatására ACK-SENT állapotba vált vissza, és az RFC szerint ismét küld egy (második) kérést és egy nyugtázást. Az A erre megkapja a kérést, visszavált REQ-SENT állapotban és küld egy újabb kérést. Ekkor közvetlenül megkapja a rákövetkezõ nyugtázást és átvált OPENED állapotba. Ez egészen addig folytatódik, amíg az egyik oldal rá nem eszmél, hogy ennek nincs túlságosan sok értelme és feladja a próbálkozást. Ez legkönnyebben úgy kerülhetõ el, ha ilyenkor az egyik oldalt passive típusúra állítjuk, vagyis az egyik oldalon várunk egy keveset a beállítás kezdeményezésére. Ezt a következõ paranccsal lehet megoldani: set openmode passive Óvatosan bánjunk ezzel a paraméterrel! A beállítás kezdeményezésének várakoztatási idejét a következõ paraméterrel tudjuk megadni: set stopped N Használhatjuk viszont ezt a parancsot is (ahol N adja meg, hogy mennyi másodperc teljen el a beállítás megkezdése elõtt): set openmode active N Az ezzel kapcsolatos további részleteket a man oldalon olvashatjuk. Miért akad meg a &man.ppp.8;, ha egy külsõ parancsot adunk ki alatta? A shell vagy ! parancsok végrehajtásakor a &man.ppp.8; elindít egy parancsértelmezõt (illetve ha paramétereket is adtunk meg, akkor a &man.ppp.8; átadja azokat is), majd megvárja annak befejezõdését. Ha a parancs futtatása közben éppen egy PPP kapcsolatot akartunk használni, akkor erre az idõre az elõbbiek miatt látszólag meg fog állni. Ez tehát azért történik, mert a &man.ppp.8; megvárja a parancs lefutását. Ha nem akarjuk megvárni a parancs befejezõdését, akkor inkább használjuk a !bg parancsot. Ennek hatására az adott parancs a háttérben fog lefutni és a &man.ppp.8; képes lesz folyamatosan szemmel tartani az összeköttetést. A &man.ppp.8; null-modem kábel használatakor miért nem lép ki soha? A &man.ppp.8; ilyen esetekben nem képes magától megállapítani, hogy mikor bontották a vonalat. Ennek oka a tûk null-modem kábelben kiosztott szerepében keresendõ. Amikor ilyen típusú kapcsolattal dolgozunk, a következõ sor megadásával ne felejtsük el engedélyezni az LQR használatát: enable lqr Ha a távoli pont LQR csomagokat küld, akkor a &man.ppp.8; alapértelmezés szerint fogadja azokat. A &man.ppp.8; miért tárcsáz látszólag minden különösebb ok nélkül módban? Amennyiben a &man.ppp.8; szándékainkkal szemben váratlanul kezdene el tárcsázni, akkor keressük meg kiváltó okát és használjunk hívási szûrést (Dial filter, dfilter) ennek megelõzésére. A tárcsázás okát a következõ sor használatával tudjuk kideríteni: set log +tcp/ip Ennek hatására a kapcsolaton keresztüláramló összes forgalmat naplózni fogjuk. Így a legközelebb, amikor a vonal hirtelen aktív lesz, a hozzá tartozó idõbélyegek alapján könnyen elõ tudjuk keresni, hogy pontosan miért is történt. Az automatikus tárcsázást bizonyos esetekben le tudjuk tiltani. Ez általában egy olyan probléma, amely a névfeloldások miatt keletkezik. Úgy tudjuk megakadályozni, hogy a névfeloldások felépítsék a kapcsolatot (ami viszont nem gátolja abban a &man.ppp.8; programot, hogy egy már meglevõ kapcsolaton keresztül küldjön ilyen csomagokat), ha az alábbi beállításokat adjuk meg: set dfilter 1 deny udp src eq 53 set dfilter 2 deny udp dst eq 53 set dfilter 3 permit 0/0 0/0 Ezek az értékek nem minden esetben megfelelõek számunkra, hiszen ezzel együtt az igény szerinti tárcsázás kényelmét is szûkítjük, mivel a legtöbb program közvetlenül névfeloldással kezd, mielõtt komolyabb hálózati forgalmat bonyolítana le. A névfeloldás esetében igyekezzünk kideríteni, hogy pontosan melyik program is próbál hálózati neveket feloldatni. Az esetek többségében valószínûleg a &man.sendmail.8; lesz a bûnös. Amennyiben ez a helyzet, akkor az sendmail démonnak a saját konfigurációs állományában kell beállítanunk, hogy ne oldasson fel hálózati neveket. Az érintett konfigurációs állomány módosításának pontos részleteirõl a kézikönyv Levelezés betárcsázós kapcsolattal címû szakszában olvashatunk bõvebben. Továbbá az .mc állományunkba a következõ sort is érdemes felvennünk: define(`confDELIVERY_MODE', `d')dnl Ezzel a sendmail beindításáig mindent egy sorban fog eltárolni (általában a sendmail démont a paraméterekkel szokták meghívni, ami arra utasítja, hogy 30 percenként dolgozza fel a sorát) vagy amíg a sendmail parancs le nem fut (például a ppp.linkup állományból). Mit jelentenek a CCP hibák? A naplóban folyamatosan a következõ üzeneteket lehet látni: CCP: CcpSendConfigReq CCP: Received Terminate Ack (1) state = Req-Sent (6) Ilyenek azért keletkeznek, mert a &man.ppp.8; a Predictor1 tömörítési eljárást próbálja meg beállítani, azonban a távoli pont egyáltalán semmilyen tömörítést nem akar használni. Az ilyen üzenetek többnyire ártalmatlanok, de ha el akarjuk tüntetni ezeket, akkor próbáljuk meg a következõ módon kikapcsolni a Predictor1 tömörítés használatát: disable pred1 A &man.ppp.8; miért nem naplózza a kapcsolat sebességét? A modemmel végzett teljes beszélgetés szövegének rögzítéséhez a következõket kell engedélyezni: set log +connect Ennek eredményeképpen a &man.ppp.8; egészen az utolsóként lekért karakterláncig naplóz mindent. Ha PAP vagy CHAP hitelesítést használunk (ezért a CONNECT parancs kiadása után már nincs semmi mondanivalónk a hívószkriptben, tehát nincs set login szkript), és szeretnénk látni a csatlakozási sebességet, ne felejtsük el utasítani a &man.ppp.8; programot, hogy a teljes CONNECT sort kérje le, valahogy így: set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 4 \ \"\" ATZ OK-ATZ-OK ATDT\\T TIMEOUT 60 CONNECT \\c \\n" Itt most megkapjuk a CONNECT sort, ezután nem küldünk semmit, majd várunk egy soremelést, aminek hatására a &man.ppp.8; arra kényszerül, hogy a teljes CONNECT választ beolvassa. A &man.ppp.8; miért hagyja figyelmen kívül a \ karaktereket a szkriptekben? A ppp a konfigurációs állományokból minden sort külön beolvas, ezért a set phone "123 456 789" és hozzá hasonló karakterláncok esetén képes felismerni, hogy a megadott számok valójában egyetlen paramétert formáznak. A " megadásához a visszaper karaktert (\) kell használnunk. Amikor tárcsázásért felelõs értelmezõ beolvassa az egyes paramétereket, újraértelmezi ezeket olyan speciális helyettesítési szekvenciák után kutatva, mint például a \P vagy \T (részletesebben lásd a man oldalon). A kettõs elemzés miatt nekünk is a megfelelõ számban kell megadnunk ezeket a helyettesítendõ karaktereket. Ha tehát egy \ karaktert szeretnénk átküldeni a modemünknek, akkor nagyjából valami ilyesmit kellene írnunk: set dial "\"\" ATZ OK-ATZ-OK AT\\\\X OK" Ennek az eredménye a következõ lesz: ATZ OK AT\X OK Vagy: set phone 1234567 set dial "\"\" ATZ OK ATDT\\T" Ez pedig a következõ szekvenciát adja: ATZ OK ATDT1234567 A &man.ppp.8; miért küld Segmentation Fault hibát, miközben nem is keletkezik ppp.core állomány? A ppp (vagy más hasonló program) elméletileg soha nem hoz létre .core állományt. Mivel a &man.ppp.8; tulajdonképpen a nullás felhasználói azonosítóval fut, az operációs rendszer soha nem fogja a &man.ppp.8; memórialenyomatát leállítása elõtt a lemezre menteni. Ha viszont &man.ppp.8; mûködése valóban leáll egy szegmentációs hiba vagy bármilyen más .core állományt eredményezõ jelzés miatt, és valóban a legfrissebb változatát használjuk (lásd a fejezet elejét), akkor a következõt tehetjük: &prompt.root; cd /usr/src/usr.sbin/ppp &prompt.root; echo STRIP= >> /etc/make.conf &prompt.root; echo CFLAGS+= >> /etc/make.conf &prompt.root; make install clean A fenti parancsokkal telepíteni tudjuk a &man.ppp.8; egy nyomonkövethetõ változatát. A &man.ppp.8; futtatásához root felhasználónak kell lennünk, mivel minden korábbi engedélyét felülírtuk az elõbbiek során. A &man.ppp.8; indításakor ne felejtsük el megjegyezni pontosan az aktuális könyvtárat sem. Innentõl kezdve, amikor a &man.ppp.8; kap egy szegmentációs hibára vonatkozó jelzést, létre fog hozni egy ppp.core nevû állományt. Ennek birtokában a következõt kell csinálnunk: &prompt.user; su &prompt.root; gdb /usr/sbin/ppp ppp.core (gdb) bt ..... (gdb) f 0 .... (gdb) i args .... (gdb) l ..... Az így beszerzett információkat mellékelve nagyobb valószínûséggel kaphatunk választ az ezzel kapcsolatos kérdésünkre. Ha járatosak vagyunk a &man.gdb.1; használatában, akkor a .core állományban további részletek és információk utáni is kutathatunk, például mi okozta a hibát, milyen változóknak ekkor milyen értékei voltak stb. Miért nem csatlakozik soha az a program, amely a hívást kezdeményezte módban? Ez korábban egy ismert probléma volt a &man.ppp.8; használatával kapcsolatban, amikor dinamikus helyi IP-címet akart beállítani módban. Ez a hiba az újabb változatokban már nem nincs meg (a man oldalon keressünk rá az iface részre). A gondot az okozta, hogy amikor a tárcsázást elindító program meghívja a &man.connect.2; rendszerhívást, akkor a &man.tun.4; interfészhez tartozó IP-cím a végpontot képviselõ sockethez társul. A rendszermag létrehozza az elsõ kimenõ csomagot és kiírja a &man.tun.4; eszközre. A &man.ppp.8; ekkor beolvassa a csomagot és felépíti a kapcsolatot. Ha a &man.ppp.8; dinamikus IP-cím kiosztásának eredményeképpen ilyenkor az interfész címe megváltozik, akkor azzal egyidõben az eredeti socket végpont érvénytelenné válik. Így a távoli végpont felé küldött további csomagok általában eldobódnak. Ha valahogy mégis eljutnának a céljukhoz, a válasz már semmiképpen sem érkezhet meg, mivel a küldéshez használt IP-címnek már nem az adott gép a tulajdonosa. Számos elméleti megközelítés létezik az imént felvázolt probléma megoldására. A legszebb az lenne, ha a távoli pont lehetõség szerint a korábban használt IP-címet osztaná ki újra. A &man.ppp.8; jelenlegi változata pontosan ugyanezt teszi, viszont a legtöbbi implementáció már nem. Részünkrõl az bizonyulna a legegyszerûbb megoldásnak, ha a &man.tun.4; intefész IP-címe egyáltalán nem változhatna meg, hanem helyette menet közben az összes kimenõ csomag, köztük természetesen a forrás IP-címe az interfész IP-címérõl az idõközben beállított IP-címre változna. Ez lényegében az, amit a &man.ppp.8; legújabb változataiban felbukkanó iface-alias opció is csinál (a &man.libalias.3; és a &man.ppp.8; kapcsolója segítségével): karbantartja az összes korábban használt interfész címét és átfordítja ezeket az utoljára beállított címre. A másik (és valószínûleg a sokkal megbízhatóbb) lehetõség egy olyan rendszerhívás implementálása lenne, amely képes az összes használatban levõ socketet egyik IP-címrõl a másik IP-címre átállítani. A &man.ppp.8; ekkor fel tudná használni ezt arra, hogy módosítsa az összes addig futó program socketjét az új IP-cím beállításakor. Ugyanezzel a rendszerhívással a DHCP kliensek is képesek lennének átállítani a socketjeiket. Lehetõségünk van még IP-cím nélkül is létrehozni interfészeket. A kimenõ csomagok ekkor a 255.255.255.255 IP-címet használnák egészen addig, amíg az elsõ SIOCAIFADDR &man.ioctl.2; rendszerhívás le nem zajlik. A &man.ppp.8; feladata ilyenkor a forrás IP-cím megváltoztatása, de ha ez 255.255.255.255, akkor egyedül csak az IP-címnek és az ellenõrzõösszegnek kell megváltoznia. Ez viszont már valamilyen mértékben trükközést a rendszermagon belül, mivel így könnyen tudunk csomagokat küldeni egy rosszul beállított interfészre is, feltételezve, hogy valamilyen módon képesek vagyunk ilyeneket visszamenõleg helyreállítani. A legtöbb játék miért nem mûködik a kapcsoló megadásával? A játékok és a hozzájuk hasonló alkalmazások általában azért nem mûködnek, amikor a &man.libalias.3; könyvtárat használjuk, mert a távoli gép megpróbál kapcsolódni a belsõ hálózatunkon levõ géphez és kéretlen UDP csomagokat kezd el küldeni neki. A címfordítást végzõ programnak fogalma sincs róla, hogy ezeket a csomagokat egy belsõ gépnek kell továbbküldenie. Akkor lehetünk biztosak ebben, ha egyedül csak azt a szoftvert indítjuk el, amellyel gondjaink akadtak, majd a vagy az átjáró &man.tun.4; interfészét kezdjük el a &man.tcpdump.1; segítségével, vagy pedig engedélyezzük az átjárón a &man.ppp.8; TCP/IP naplózó funkcióját (set log +tcp/ip). Ahogy elindítjuk a gondokat okozó programot, látnunk kell a csomagjait, ahogy megpróbálnak keresztüljutni az átjárón. Az erre érkezõ válaszolok eldobódnak (ez jelenti a problémát). Jegyezzük fel a csomagokhoz társuló portszámokat és állítsuk el a programot. Csináljuk meg néhányszor ezt a vizsgálatot, így ellenõrizni tudjuk, hogy mindig ugyanazokat a portokat használja-e. Amennyiben úgy tapasztaljuk, hogy igen, akkor az /etc/ppp/ppp.conf állományba a következõ sort kell betenni a megfelelõ helyre a mûködés helyreállításához: nat port protokoll belsõ-gép:port port ahol a protokoll lehet tcp vagy udp, a belsõ-gép annak a gépnek a címe, ahova tovább akarjuk küldeni a csomagokat, valamint a port a csomagok célportját adja meg. A fenti parancs megváltoztatása nélkül nem tudjuk ugyanezt a szoftvert más gépeken is használni, és itt azzal most nem is foglalkozunk, hogy miként lehet két belsõ géprõl használni ugyanazt a programot. Mindenesetre annyi biztos, hogy a külvilág felé a belsõ hálózatunk csupán egyetlen gépnek fog látszani. Ha azt látjuk, hogy az alkalmazás nem mindig ugyanazt a portot használja, akkor három választási lehetõségünk van: Készítsük el a támogatását a &man.libalias.3; függvénykönyvtárhoz. A különbözõ szélsõséges esetekre a /usr/src/sys/netinet/libalias/alias_*.c állományokban találhatunk példákat (az alias_ftp.c tökéletes kiindulási alap). Ez általában annyit jelent, hogy beolvasunk bizonyos ismert kimenõ csomagokat, beazonosítjuk benne azt az utasítást, amelynek hatására a külsõ gép csatlakozni próbál a belsõ géphez egy adott (véletlenszerûen választott) porton, majd beállítunk hozzá egy útvonalat, így a rákövetkezõ csomagok már tudni fogják, hogy merre menjenek. Ez ugyan a legnehezebb megoldás, de egyben ez is a legjobb, ráadásul így a szoftver több gépen is mûködtethetõ. Proxy használata. Elõfordulhat, hogy az alkalmazás támogatja a socks5 protokollt vagy (mint ahogy a cvsup is csinálja) rendelkezik passzív móddal, és így lehetõleg igyekszik elkerülni azt, hogy a távoli géprõl kapcsolatot próbáljanak meg indítani a helyi gépre. A nat addr használatával irányítsunk át mindent a belsõ gépre. Ez viszont egy nagyon durva megközelítés. Valaki összeírta már a hasznosabb portok sorszámait? Egyelõre még nem, de szándékunkban áll összeállítani egy ilyen listát (már amennyiben igény lesz rá). Minden itt szereplõ példában az belsõ helyett mindig annak a gépnek a belsõ IP-címét írjuk, amelyrõl játszani akarunk. Asheron's Call nat port udp belsõ :65000 65000 Manuálisan változtassuk meg a játékon belül a portszámot 65000-re. Ha a belsõ hálózatunkról több gépen is szeretnénk játszni, akkor mindegyiknek adjuk meg egy egyedi portot (vagyis 65001, 65002 stb.), majd vegyünk fel mindegyikhez egy-egy nat port sort. Half Life nat port udp belsõ:27005 27015 PCAnywhere 8.0 nat port udp belsõ:5632 5632 nat port tcp belsõ:5631 5631 Quake nat port udp belsõ:6112 6112 Quake 2 nat port udp belsõ:27901 27910 nat port udp belsõ:60021 60021 nat port udp belsõ:60040 60040 Red Alert nat port udp belsõ:8675 8675 nat port udp belsõ:5009 5009 Mik azok az FCS hibák? Az FCS jelentése Frame Check Sequence, vagyis az Adatkeret ellenõrzésének sorozata. Mindegyik PPP csomaghoz tartozik egy ellenõrzõösszeg, amely arról gondoskodik, hogy ugyanaz az adat érkezzen meg, mint amit elküldtek. Amennyiben egy bejövõ csomag FCS értéke érvénytelennek minõsül, a csomag eldobódik és a HDLC FCS számláló értékkel eggyel növekszik. A HDLC hibaszámlálói a show hdlc parancs segítségével tekinthetõek meg. Ha rosszul mûködik az összeköttetés (vagy a soros vonali meghajtónk folyamatosan eldobja a csomagokat), akkor láthatunk helyenként FCS hibákat. Többnyire nem érdemes az ilyenek miatt aggódni, habár ez jelentõs mértékben lassítja a tömörítést végzõ protokollok munkáját. Ha külsõ modemünk van, akkor ne felejtsük el a megfelelõ módon leárnyékolni, mivel ebbõl is származhat a probléma. Ha a vonal a kapcsolódást követõen szinte azonnal lemerevedik és hirtelen nagy mennyiségû FCS hiba jelentkezik, akkor az arra is utalhat, hogy az összeköttetés nem tisztán 8 bites. Gondoskodjunk róla, hogy a modem ne a szoftveres forgalomirányítást (XON/XOFF) használja. Ha viszont az adatok közvetítéséhez mégis szoftveres forgalomirányítást kell használnunk, akkor a set accmap 0x000a0000 parancs kiadásával jelezzük a &man.ppp.8; felé, hogy a ^Q és ^S karaktereket helyettesítse. Nagy mennyiségû FCS hibát olyan esetekben is tapasztalhatunk, amikor a távoli pont abbahagyta a PPP üzenetek küldését. Ilyenkor javasolt engedélyezni az aszinkron naplózás használatát, aminek segítségével gyorsan meg tudjuk állapítani, hogy a beérkezõ adatok bejelentkezõ vagy shell üzeneteket. Ha a másik oldalon egy shell parancssorát kapjuk meg, akkor a &man.ppp.8; a close lcp megadásával a vonal eldobása nélkül leállítható (az utána következõ term paranccsal pedig a távoli gépen futó shellre tudunk csatlakozni). Ha a naplókban látszólag semmi sem indokolja az összeköttetés leállását, próbáljunk meg erre rákérdezni a távoli pont (talán a szolgáltató?) karbantartójánál. A &macos; és &windows; 98 alól indított kapcsolatok miért állnak le, ha PPPoE fut az átjárón? A probléma megoldását Michael Wozniak (mwozniak@netcom.ca) adta meg, valamint Dan Flemming (danflemming@mac.com) alkalmazta ugyanezt Macre: Ennek oka az ún. útválasztási fekete lyuk. A &macos; és a &windows; 98 (de valószínûleg az összes többi µsoft; operációs rendszer) olyan nagy méretû TCP csomagokat küld, amelyek már nem férnek bele egy PPPoE keretbe (amely mérete Ethernet estén 1500 byte alapértelmezés szerint) és beállítja hozzá a darabolás letiltását jelzõ (do not fragment) bitet (TCP esetén ez alapértelmezett), és a Telco útválasztó pedig nem küldi el a must fragment (darabolni kell) ICMP csomagot a letölteni kívánt oldal szolgáltatója felé. (Másik lehetõség, hogy az útválasztó ugyan küld egy ilyen ICMP csomagot, de ezt a tartalomszolgáltatónál található tûzfal eldobja.) Amikor válaszul a szolgáltató olyan kereteket kezd el küldeni, amelyek nem illeszkednek a PPPoE keresztmetszetébe, a Telco útválasztó egyszerûen eldobja ezeket és a lap nem pedig nem lesz elérhetõ (egyes képek és oldalak esetén elõfordul). Úgy tûnik, ez az alapbeállítás a legtöbb Telco PPPoE konfiguráció esetében. Ezt a hibát úgy javíthatjuk, ha a &windows; 95/98 rendszerekben megtalálható regedit segítségével felvesszük a következõ regisztrációs bejegyzést: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans\0000\MaxMTU A karakterlánc értéke legyen 1436, mivel bizonyos ADSL útválasztók állítólag nem képesek ennél nagyobb méretû csomagokat kezelni. &windows; 2000 esetén ezt a beállítást a Tcpip\Parameters\Interfaces\a hálózati kártya azonosítója\MTU helyen kell keresni és típusa duplaszó (DWORD). A &windows; MTU beállításaival kapcsolatban olvassuk el a Microsoft Knowledge Base címén található dokumentumokat: Q158474 - Windows TCPIP Registry Entries és Q120642 - TCPIP & NBT Configuration Parameters for &windowsnt; . &windows; 2000 alatt a regisztrációs adatbázisban érdemes még a Tcpip\Parameters\Interfaces\a hálózati kártya azonosítója\EnablePMTUBHDetect duplaszó értékét 1-re állítani, ahogy arra az imént említett 120642-es µsoft; dokumentum is hivatkozik. Sajnos a &macos; nem nyújt semmilyen beállítási lehetõséget a TCP/IP beállítások megváltoztatására. Léteznek viszont kereskedelmi termékek, amelyek lehetõvé teszi a felhasználók számára, hogy igényeik szerint módosítsák rendszerük TCP/IP beállításait. A hálózati címfordítást használók keressék meg az MTU beállításaikat és adják meg az 1450 értéket az eredeti 1500 helyett. A &man.ppp.8; újabb (2.3 vagy afeletti) változatai már tartalmaznak egy enable tcpmssfixup parancsot, amellyel az MSS értéke tetszõlegesen átállítható. Ez alapértelmezés szerint engedélyezett. Ha valamiért mégis a &man.ppp.8; egy korábbi változatával kellene dolgoznunk, akkor érdemes megnéznünk net/tcpmssd portot. Ezek közül egyik sem használt — segítség! Mit lehetne még tenni? Ha eddig minden más csõdött mondott, akkor próbáljuk meg elküldeni az összes beszerezhetõ információt, beleértve a konfigurációs állományokat, hogyan indítjuk el a &man.ppp.8; programot, a naplók fontosabb részeit és a netstat -rn parancs kimenetét (a csatlakozás elõtt és után) a &a.questions; címére vagy a comp.unix.bsd.freebsd.misc hírcsoportba, és valaki talán majd megmutatja a helyes irányt. Soros vonali kommunikáció Ebben a szakaszban a &os; alatti soros vonali kommunikációval kapcsolatos kérdéseket tárgyaljuk. A PPP és SLIP használatáról a Hálózatok címû részben esik szó. Honnan deríthetõ ki, hogy a &os; felismerte a soros portokat a gépben? Ahogy a &os; rendszermagja az elindulása után azokat a soros portokat fogja keresni, amelyeket a konfigurációs állományban beállítottunk. Figyeljük a rendszer indulása közben megjelenõ üzeneteket vagy adjuk ki a következõ parancsot a rendszer indulásának befejeztével: &prompt.user; dmesg | grep -E "^sio[0-9]" Íme egy példa az iménti parancs kimenetére: sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0 sio0: type 16550A sio1: <16550A-compatible COM port> port 0x2f8-0x2ff irq 3 on acpi0 sio1: type 16550A Ezen két soros portot láthatunk. Az elsõ a negyedik megszakítást és a 0x3f8 címet használja és egy 16550A típusú UART chip. A második ugyanolyan chip, de a harmadik megszakítást és a 0x2f8 címet használja. A belsõ modemeket a rendszer úgy kezeli, mintha soros portok lennének, azzal a kivétellel, hogy a modem mindig kapcsolódik az adott porthoz. A GENERIC rendszermag alapértelmezés szerint két soros portot támogat, a példában szereplõ megszakítási- és memóriaértékek felhasználásával. Ha ezek a beállítások nem felelnek meg a rendszerünk számára, esetleg modemet raktunk a gépünkbe vagy a rendszermagban több soros portot is támogatni szeretnénk, akkor nincs más teendõnk, mint ennek megfelelõen megváltoztatni a rendszermag paramétereit. A rendszermag fordításáról szóló rész tárgyalja ennek részleteit. Honnan deríthetõ ki, hogy a &os; felismerte a modemkártyát a gépben? Olvassuk el az elõzõ kérdésre adott választ. Hogyan lehet a soros portokat elérni &os; alatt? A harmadik soros port, a sio2 (lásd &man.sio.4;, DOS alatt COM3) a /dev/cuad2 eszközön keresztül érhetõ el tárcsázó eszközként, és a /dev/ttyd2 eszközön keresztül behívó eszközként. Mi a különbség a két eszközosztály között? A ttydX eszközöket behívásra használjuk. Amikor tehát a /dev/ttydX eszközt blokkoló módban nyitjuk meg, akkor a hívó program egészen addig várni fog, amíg a megfelelõ cuadX eszköz inaktívvá nem válik, majd kivárja, hogy megérkezzen a hívás fogadását tolmácsoló jelzés. Amikor megnyitjuk a cuadX eszközt, gondoskodik róla, hogy a soros portot ekkor ne használja a ttydX eszköz. Ha a port szabaddá válik, egyszerûen ellopja a ttydX eszköztõl. Sõt, a cuadX eszközt egyáltalán nem érdekli a hívás fogadása jelzés. Ezzel a megoldással és egy automata modem segítségével a távoli felhasználók bármikor be tudnak jelentkezni a rendszerünkbe, hogy közben ugyanezzel a modemmel továbbra is tudunk tárcsázni, mivel a rendszer elintézi a többit. Hogyan lehet engedélyezi a többportos soros vonali kártyák támogatását? Ismét megemlítjük, hogy a rendszermag beállításával foglalkozó részben olvashatunk bõvebben a rendszermag paraméterezésének mikéntjérõl. A többportos soros vonali kártyák esetén a kártyán található mindegyik soros porthoz vegyünk fel egy-egy &man.sio.4; bejegyzést a &man.device.hints.5; állományába. Az IRQ és vektor értékeket azonban csak az egyiknél adjuk meg, mivel a kártyán található összes port egyetlen megszakításon fog osztozni. A következetesség kedvéért az utolsó porthoz adjuk meg a megszakítást. Ne felejtsük el még megadni a rendszermag konfigurációs állományában az alábbi opciót sem: options COM_MULTIPORT Az alábbi /boot/device.hints egy AST típusú négyportos soros vonali kártyát láthatunk a tizenkettedik megszakításon: hint.sio.4.at="isa" hint.sio.4.port="0x2a0" hint.sio.4.flags="0x701" hint.sio.5.at="isa" hint.sio.5.port="0x2a8" hint.sio.5.flags="0x701" hint.sio.6.at="isa" hint.sio.6.port="0x2b0" hint.sio.6.flags="0x701" hint.sio.7.at="isa" hint.sio.7.port="0x2b8" hint.sio.7.flags="0x701" hint.sio.7.irq="12" A flags paraméterrel megadott értékek azt jelzik, hogy a fõport 7 alszámmal rendelkezik (0x700), valamint az összes port ugyanazon a megszakításon osztozik (0x001). A &os; képes több többportos soros vonali kártyát ugyanazon a megszakításon keresztül használni? Sajnos még nem. Minden kártyához másik megszakítást kell megadni. Hogyan lehet beállítani a portok alapértelmezett paramétereit? Ezzel kapcsolatban olvassuk el a &os; kézikönyv soros kommunikációt tárgyaló részét. Hogyan lehet a modemen betárcsázást beállítani? Erre vonatkozóan olvassuk el a &os; kézikönyv betárcsázós szolgáltatásokkal kapcsolatos részét. Hogyan lehet buta terminálokat &os;-re csatlakoztatni? Az ezzel kapcsolatos információkat a &os; kézikönyv terminálokról szóló részében találhatjuk meg. Miért nem indul el a tip vagy cu parancs? Elõfordulhat, hogy rendszerünkön a &man.tip.1; és &man.cu.1; programok csak az uucp felhasználón és a dialer csoporton keresztül tudnak hozzáférni a mûködésükhöz szükséges /var/spool/lock könyvtárhoz. A dialer csoport segítségével lehet szabályozni, hogy ki férhessen hozzá a modemekhez vagy a távoli rendszerekhez. Ilyenkor egyszerûen csak vegyük fel magunkat a dialer csoportba. A következõ parancs kiadásával viszont ettõl függetlenül is engedélyezhetjük a rendszerünkön belül, hogy bárki használhassa a &man.tip.1; vagy &man.cu.1; parancsokat: &prompt.root; chmod 4511 /usr/bin/cu &prompt.root; chmod 4511 /usr/bin/tip A rendszerhez csatlakozó Hayes szabványú modem támogatott — mi ilyenkor teendõ? A &os; kézikönyvben lásd ezt a választ. Hogyan adjuk meg az AT parancsokat? A &os; kézikönyvben lásd ezt a választ. A pn tulajdonságnál miért nem lehet @ jelet megadni? A &os; kézikönyvben lásd ezt a választ. Hogyan lehet telefonszámokat tárcsázni parancssorból? A &os; kézikönyvben lásd ezt a választ. Minden alkalommal meg kell adni az adatátviteli sebességet? A &os; kézikönyvben lásd ezt a választ. Terminálszerver segítségével hogyan lehet könnyen elérni egyszerre több gépet is? A &os; kézikönyvben lásd ezt a választ. A &man.tip.1; képes több vonalat is használni az egyes gépek eléréséhez? A &os; kézikönyvben lásd ezt a választ. Miért kell kétszer lenyomni a CtrlP billentyûket, hogy egyszer elküldjük ezeket? A &os; kézikönyvben lásd ezt a választ. Miért lett hirtelen minden NAGYBETÛS? A &os; kézikönyvben lásd ezt a választ. Hogyan lehet állományokat mozgatni a tip használatával? A &os; kézikönyvben lásd ezt a választ. Hogyan használható a zmodem protokoll a tip programmal? A &os; kézikönyvben lásd ezt a választ. Egyéb kérdések A &os; miért használ sokkal több lapozóállományt, mint a &linux;? A &os; csupán látszólag használ több helyet a lapozásra, mint a &linux;, valójában egyébként nem. A &os; és a &linux; közt az egyik leglényegesebb különbség, hogy a &os; valamivel elõre gondolkodik, és az összes pillanatnyilag nem használt lapot kilapozza a központi memóriából a lapozóterületre. Ezzel igyekszik minél több memóriát elõkészíteni az aktív használatra. A &linux; ezzel szemben a lapozást csak végsõ esetben használja. Ennek megfelelõen a lapozóterület gyakoribb használatát remekül ellensúlyozza a fizikai memória hatékonyabb kihasználása. Habár a &os; igyekszik ebben a tekintetben elõrelátó lenni, nem minden esetben tudja pontosan eldönteni, hogy a rendszerben mely lapokat nem használják éppen. Emiatt nem fogja az összes memóriát kilapozni, ha például egész éjszakára futni hagyjuk a gépünket. A top miért jelez kevés szabad memóriát, miközben csak néhány program fut? Röviden úgy válaszolhatnánk meg ezt a kérdést, hogy a szabad memória igazából elvesztegetett memória. A programok által szabadon hagyott memóriát a &os; rendszermagja többnyire a lemez gyorsítótárazására használja fel. A &man.top.1; kimenetében olvasható Inact, Cache és Buf értékek a lényegében különbözõ öregedési szintek szerint kategorizált tárazott adatok. A tárazás lényegében arra utal, hogy a rendszernek így nem a lassú elérésû lemezen kell a gyakran elérni kívánt adatok után kutatni, aminek köszönhetõen növekszik az összteljesítmény. A &man.top.1; kimenetében tehát Free kategória alacsony értéke alapvetõen jót jelent, feltéve, ha nem nagyon kevés. A chmod miért nem változtatja meg a szimbolikus linkek engedélyeit? A szimbolikus linkekhez alapértelmezés szerint nem tartoznak engedélyek, ezért a &man.chmod.1; ilyen esetekben az eredeti állomány engedélyeit változtatja meg. Ezért például, ha adott egy ize nevû állomány, valamint erre egy mize nevû szimbolikus link, akkor a következõ parancs mindig mûködni fog: &prompt.user; chmod g-w mize Ennek ellenére az mize engedélyei nem fognak megváltozni. Ha egy adott könyvtárszerkezetben elhelyezkedõ állományok engedélyeit akarjuk egyszerre módosítani, akkor a opció mellett a vagy opciókat is meg kell adnunk. Errõl részletesebb információkat a &man.chmod.1; és a &man.symlink.7; man oldalairól tudhatunk meg. A &man.chmod.1; opciója rekurzív mûködést tesz lehetõvé. Óvatosan bánjunk a könyvtárakkal vagy a könyvtárakra mutató szimbolikus linkekkel a &man.chmod.1; használata során. Ha egy szimbolikus link által hivatkozott könyvtár engedélyeit akarjuk megváltoztatni, akkor a &man.chmod.1; parancsnak ne adjunk meg semmilyen paramétert és a nevet zárjuk perjellel (/). Például, ha az ize a mize könyvtárra mutató szimbolikus link, és meg akarjuk változtatni az ize engedélyeit (ami valójában a mize engedélyeit jelenti), akkor valami ilyesmit kellene megadnunk: &prompt.user; chmod 555 ize/ A név végén szereplõ perjelbõl a &man.chmod.1; tudni fogja, hogy követnie kell a foo szimbolikus linket és így az általa hivatkozott könyvtár, a mize engedélyeit fogja megváltoztatni. A &os; képes DOS programokat futtatni? Igen, a Portgyûjteményben található emulators/doscmd, vagyis egy DOS emulációs program segítségével. Amennyiben a doscmd önmagában még nem lenne elegendõ, egy másik segédprogram, a emulators/pcemu segítségével emulálni tudunk egy 8088-as processzort, valamint a BIOS annyi részét, hogy futtatni tudjunk szöveges DOS alkalmazásokat. A használatához az X Window Systemre is szükségünk lesz. Érdemes ezenkívül még megpróbálnunk a &os; Portgyûjteményében található emulators/dosbox portot is. Ez az alkalmazás elsõsorban a régi DOS-os játékok futtatásához szükséges környezet emulációjára koncentrál, a helyi állományrendszerben található állományok felhasználásával. Hogyan tudjuk az anyanyelvünkre lefordítani a &os; dokumentációját? Olvassuk el a &os; Dokumentációs Projekt bevezetõjében található Fordítói GYIK-ot. A FreeBSD.org tartományon belüli e-mail címekre küldött levelek miért pattannak vissza? A FreeBSD.org levelezõrendszere a bejövõ levelekre vonatkozóan átvett néhány szigorúbb ellenõrzést a Postfix alkalmazástól, és ezért eldobja azokat a leveleket, amelyek formátuma hibás vagy feltehetõen szemét. A leveleink az alábbi okok miatt pattanhatnak vissza: A levelet olyan név- vagy IP-tartományból küldtük, ahonnan korábban levélszemetet küldtek, ezért feketelistára került. A &os; levelezõ szerverei eldobnak minden olyan levelet, amelyek feketelistás tartományokból érkeznek. Ha olyan cégen vagy tartományon keresztül akarunk küldeni, amelyik levélszemetet gyárt vagy továbbít, akkor váltsunk szolgáltatót. A levél törzse csak HTML kódot tartalmaz. A leveleinket egyszerû szöveges formátumban küldjük. Állítsuk be a levelezõ kliensünket erre. A FreeBSD.org címen üzemelõ levelezõ szerver nem tudta a csatlakozó gép IP-címét szimbolikus névre feloldani. Az ellenkezõ irányú névfeloldás sikeressége alapvetõ követelmény a levelek fogadásához. Gondoskodjunk róla, hogy a levelezõ szerverünk IP-címével mûködjön az inverz névfeloldás, Sok otthoni szolgáltatás (DSL, kábel, betárcsázós stb. kapcsolat) erre nem ad lehetõséget. Ilyenkor a leveleinket próbáljuk meg a szolgáltatónk levelezõ szerverein keresztül küldeni. Az SMTP protokoll EHLO/HELO részében megadott hálózati név nem oldható fel valós IP-címre. Egy teljes, feloldható hálózati név elegendhetetlen a levél elfogadásához szükséges SMTP párbeszéd érvényességéhez. Ha nincs hivatalosan bejegyzett hálózati nevünk, akkor a szolgáltató levelezõ szervereit kell használnunk a levél elküldéséhez. A küldött üzenet azonosítója (Message ID) végén a localhost szerepel. Egyes levelezõ kliensek rossz azonosítónak hoznak létre az üzenetekhez, ezért a rendszer nem hajlandó elfogadni ezeket. Ilyenkor vagy rávesszük valahogy a levelezõ kliensünket, hogy rendes azonosítókat készítsen, vagy úgy állítjuk be a levéltovábbítónkat, hogy érvényes azonosítókra írja át. Hogyan lehet egyszerûen &os; rendszereket elérni? Habár a &os; maga nem nyújt akárki számára hozzáférést a saját szervereihez, mások viszont kínálnak bárki által elérhetõ &unix; rendszereket. Ennek költsége és minõsége szolgáltatónként változik. Az Arbornet, Inc, vagy másik nevén M-Net 1983 óta szolgáltat nyílt hozzáférést &unix; típusú rendszerekhez. Egy System III alapokon mûködõ Altos rendszerrõl a 1991-ben BSD/OS-re váltottak, majd 2000 júliusában aztán &os;-re váltottak. Az M-Net telnet és SSH szolgáltatásokon keresztül is elérhetõ, és lényegében a &os; alatt elérhetõ összes programhoz enged egy alapvetõ hozzáférést. A hálózati hozzáférés azonban csak a tagok és a támogatók számára engedélyezett. Ez egy non-profit szervezet. Az M-Net rendelkezik üzenõfallal (bulletin board system, BBS) és interaktív csevegõrendszerrel is. A Grex az M-Net szolgáltatásához hasonlóan ugyanúgy kínál üzenõfalat és csevegési lehetõséget. Többségében azonban &sun; 4M gépeik vannak, amelyen &sunos; fut. Mi az a sup és hogyan lehet használni? A SUP mozaikszó mögött a Software Update Protocol (Szoftverfrissítési protokoll) áll, amelyet fejlesztési fák szinkronban tartására dolgoztak ki a Carnegie-Mellon Egyetemen. Régebben ennek segítségével tartották frissítették magukat a fejlesztõi források különbözõ tükrözései a &os; Projekten belül. A SUP nem kifejezetten egy sávszélesség-takarékos megoldás, és egy ideje már nyugdíjba vonult. A forrásainkat jelen pillanatban a CVSup használatával tudjuk frissíteni. Hogy hívják azt a cuki kis vörös fickót? Igazából nincs neve, mindenki egyszerûen csak BSD démonnak nevezi. Ha mégis hívni szeretnénk valahogy, akkor szólítsuk csak beastie-nek, ugyanis a beastie kiejtése megegyezik a BSD szóéval (bíeszdi). A BSD démonról a saját honlapján tudhatunk meg többet. Felhasználható a BSD démon képe? Talán. A BSD démon jogait Marshall Kirk McKusick birtokolja. A felhasználás pontos lehetõségeivel kapcsolatban olvassuk el Statement on the Use of the BSD Daemon Figure címû írást. Röviden úgy foglalhatnánk össze, hogy ízléses stílusban a saját céljainkra mindaddig nyugodtan felhasználhatjuk a képet, amíg megemlítjük az eredeti szerzõt. Ha kereskedelmi céljaink vannak, akkor írjunk &a.mckusick; címére. A pontosabb részleteket a BSD démon honlapján olvashatjuk. Található valahol felhasználható kép a BSD démonról? EPS és XFig formátumú rajzok a /usr/share/examples/BSD_daemon/ könyvtárban vannak. A levelezési listákon szerepeltek ismeretlen kifejezések vagy rövidítések. Hol lehet ezeknek utánanézni? Olvassuk el a &os; szakkifejezéseinek gyûjteményét. Miért fontos annyira a biciklitároló színe? Erre röviden úgy adhatnánk választ, hogy ezzel igazából nem kell annyira törõdnünk. Ha viszont valamivel terjedelmesebben akarunk válaszolni, akkor azt mondhatnánk, hogy azért, mert egy biciklitároló megépítése még nem tántorít el senkit sem a válaszott szín kritizálásától és az átfestésének fontolgatásától. Ez a metafora alapvetõen arról szól, hogy nem kell feltétlenül minden apró részletrõl vitatkoznunk csupán azért, mert jobban értünk hozzá. Sokak tapasztalata szerint ugyanis a változtatásokhoz kapcsolódó megjegyzések által gerjesztett zaj fordítottan arányos az adott változtatás bonyolultságával. A még hosszabb és teljesebb válasz eredetileg egy nagyon hosszú és fárasztó vita eredményeképpen keletkezett, amikor arról esett szó, hogy a &man.sleep.1; törtekkel dolgozzon-e vagy sem. Erre válaszul küldte &a.phk; az azóta híressé vált A bike shed (any color will do) on greener grass... ((Bármilyen színû) biciklitároló megfelelne egy zöldebb gyepen...) címû levelét. Ebbõl szeretnénk most idézni:
&a.phk;, &a.hackers.name;, 1999. október 2. Mirõl is szól ez a biciklitároló? — kérdezték tõlem sokan. Ez egy hosszú, vagy még inkább régi történet, amely azonban valójában meglehetõsen rövid. C. Northcote Parkinson Parkinson törvénye címmel írt egy könyvet az 1960-as évek elején, amelyben elég nagy betekintést adott a vezetés dinamikájába. [a könyv részletes bemutatását most kihagyjuk] A konkrét példában egy biciklitároló szerepel egy atomerõmûvel szemben, szóval ez is eléggé jól érzékelteti a könyv korát. Parkinson ezen keresztül bemutatja, hogyan kell egy igazgatói tanács elé járulni egy több millió vagy akár milliárd dolláros atomerõmû megépítéséhez, azonban egy egyszerû biciklitároló megépítésekor könnyen véget nem érõ vitatkozásba bonyolódhatunk. Parkinson elmagyarázza, mindez azért van, mert egy atomerõmû annyira óriási, drága és bonyolult, hogy az emberek egyszerûen nem értik meg. Ezért nem szólnak semmit és megnyugtatják magukat a feltételezéssel, hogy valaki más korábban már biztosan utánajárt a részleteknek. Richard P. Feynmann is könyveiben rengeteg érdekes és nagyon találó példát ad ezekre Los Alamossal kapcsolatban. Vegyünk ezzel szemben most egy biciklitárolót. Bárki képes egy hétvége alatt összetákolni egy ilyet és még így is marad ideje megnézni a meccset. Ezért nem számít, mennyire jól megfogalmazott, elõkészített és logikus is a javaslatunk, valaki biztosan meg fogja ragadni a lehetõséget, hogy az orrunk elõtt fitogtassa a képességeit és megmutassa magát: õ bizony itt járt. Dániában ezt mi úgy hívjuk, hogy otthagyjuk a kezünk nyomát. Ez mindössze a személyes büszkeségrõl és tekintélyrõl szól, vagyis hogy végre elmondhassuk: Ezt nézd! Én csináltam. Ez ugyan leginkább a politikusokra jellemzõ, de alapvetõen minden emberben ott él. Gondoljunk csak a friss betonban hagyott lábnyomokra.
Mókás dolgok a &os;-vel kapcsolatban Mennyire hûsít a &os;? Kérdés: Mérte már valaki, hogy a &os; futása közben mennyire melengeti meg a számítógépet? Úgy hírlik, a &linux; ebben a tekintetben sokkal jobb, mint a DOS, de &os;-rõl még nem ismert ezzel kapcsolatban semmi. Mondjuk, elég tüzesnek tûnik. Válasz: Nem, de korábban már számos tesztet végeztünk bekötött szemû önkénteseken, akiknek elõzetesen 250 mikrogram LSD-25-öt adagoltak. A tesztalanyok 35 százaléka szerint a &os; kissé narancsos ízû volt, míg a &linux; inkább a rózsaszín ködhöz hasonlított. A hõmérséklettel kapcsolatban azonban egyik csoport sem észlelt komolyabb változást. Végül aztán teljesen el kellett vetnünk a kísérlet eredményeit, mert menet közben túlságosan sok önkéntes kóborolt el, és ezzel torzították a mérések eredményeit. A legtöbb önkéntes azóta is Apple-nél van, és azóta is egy új színes, szagos grafikus felületen dolgoznak. Szép kis felfordulás! Komolyan: a &os; és a &linux; is egyaránt a processzorokban található HLT (halt) utasítást használja arra, hogy az üresjáratban levõ rendszer energiafogyasztását és ezáltal hõtermelését is valamennyire mérsékelje. Emellett még az APM (Advanced Power Management) is támogatott, így a &os; akár tetszés szerint alacsonyabb energiafogyasztású módba is tudja tenni a processzort. Mi mocorog a memóriamodulokban? Kérdés: A &os; csinál valami szokatlan a rendszermag fordítása közben, ami miatt a memóriák felõl mocorgást lehet hallani? Amikor fordítok (vagy egy rövid ideig, amikor az indításkor a rendszer keresi a floppymeghajtót) valamilyen furcsa mocorgásszerû hang jön a memóriamodulokból. Válasz: Igen! Gyakran utalnak a BSD rendszerek dokumentációiban mindenféle démonokra, és ezzel kapcsolatban a legtöbb ember nem is tudja, hogy ezek valójában apró, öntudatos, fizikailag nem létezõ lények, amelyek a rendszer indulása után megszállják a számítógépünket. A memóriából kiszûrõdõ mocorgás hangja igazából a démonok közti magas frekvenciás beszélgetésbõl ered, amikor éppen arról egyeztetnek, hogy miként birkózzanak meg a különbözõ rendszeradminisztrációs feladatokkal. Ha teljesen megõrjít minket ez a zajongás, akkor úgy tudunk tõlük megszabadulni, ha kiadjuk DOS-ból a jó öreg fdisk /mbr parancsot. Ekkor viszont ne lepõdjünk meg, ha netalán visszalõnének és próbálnak minket megállítani. Ha eközben a hangszóróinkból Bill Gates sátáni kacaja harsanna fel, akkor rohanjunk és ne is nézzünk többet vissza! A BSD démonok támogatásától mentesen a &windows; és a DOS ikerördögei ilyenkor gyakran visszaszerzik gépünk felett a teljes irányítást és ezzel örök szenvedésre kárhoztatják gyarló lelkünket. Ennek tudatában lehet, hogy mégis csak jobb lenne, ha egyszerûen csak hozzászoknánk azokhoz a furcsa hangokhoz, nem? Hány &os; fejlesztõ kell egy villanykörte kicseréléséhez? Ezeregyszázhatvankilenc: Huszonhárman panaszkodnak a -current listán, hogy már megint kiment a villany. Négyen erre azt válaszolják, hogy ez csak konfigurációs probléma, ezért ennek a -questions listán a helye. Hárman írnak róla hibajelentést, de ezek közül az egyik ráadásul tévesen a doc kategóriába kerül, és csak annyi áll benne, hogy sötét van. Erre az egyikük beszerel egy kipróbálatlan villanykörtét, amitõl nem mûködik a rendszer többi része, így öt perc múlva ki is szereli. Nyolcan leszidják a hibajelentések íróit, hogy nem mellékelték a javítást a jelentéseik mellé. Öten siránkoznak, hogy nem mûködik a rendszer. Harmincegyen erre azt válaszolják, hogy nekik minden remekül mûködik, és az érintettek minden bizonnyal pont rosszkor frissítettek. Egy küld egy új villanykörtét a -hackers listára. Erre egy rászól, hogy õ már három évvel ezelõtt megcsinálta ugyanezt, de amikor beküldte a -current listára, akkor senki sem foglalkozott vele, és egyébként sem szereti a hibajelentéseket. Emellett ráadásul az új villanykörte egyébként sem tetszik. Huszonheten nekiállnak skandálni, hogy a villanykörték nem tartoznak az alaprendszerbe, ezért a committerek a közösség megkérdezése nélkül nem csinálhatnak semmit, és különben is: Mi errõl a -core véleménye? Kétszázan eközben megvitatják, milyen színû legyen a biciklitároló. Hárman jelzik, hogy a javítás nem felel meg a &man.style.9; elõírásainak. Tizenheten megjegyzik, hogy az újonnan javasolt villanykörte GPL licenccel rendelkezik. Ötszázhatvankilencen valóságos vitaözönt indítanak a GPL, a BSD, MIT és NPL licencek elõnyeit illetõen, majd megjegyzéseket tesznek különféle meg nem nevezett FSF alapítók személyes higéniajára. Heten a vita bizonyos részeit átviszik a -chat és -advocacy listákra. Egy végül beszereli a javasolt villanykörtét, de az valamivel mintha halványabban világítani, mint az elõzõ. Ketten leszólják a szerelést, és összekapnak azon, hogy most akkor a &os; inkább maradjon sötétségben vagy érje be a halványabb világítással. Negyvenhárman rikácsolva követelik a halványan világító villanykörte kiszerelését és panaszukat megírják a -core listára. Tizenegyen egy kisebb villanykörtét kérnek, mert ha majd portolni akárják a Tamagotchijukra a rendszert, akkor ott is használható legyen. Hetvenhárman felemelik a szavukat a -hackers és -chat listákon felerõsödött zaj miatt, és tiltakozásul leiratkoznak ezekrõl a listákról. Tizenhárman erre egy leiratkozom, Hogyan kell innen leiratkozni? vagy Kérlek, vegyetek le errõl a listáról témájú levelet küldenek a megszokott stílusban. Egy eközben beszerel végre egy mûködõ villanykörtét, miközben mindenki azzal van elfoglalva, hogy szidja a másikat, így szinte észre sem veszik. Harmincegy ezután hozzáteszi, hogy az új villanykörte 0,364 százalékkal jobban világítana, ha TenDRA-val csinálták volna (akkor viszont kocka alakú lenne) és a &os;-nek ezért a GCC helyett TenDRA-t kellene használnia. Egy valaki megemlíti, hogy az új villanykörtén nincs is burkolat. Kilencen (beleértve a hibajelentések íróit) azt kérdezgetik folyton, hogy Mi az az MFC?. Ötvenheten két hét múlva kezdenek el panaszkodni, hogy a villanykörte kiment. &a.nik; hozzáteszi: Nagyon jót nevettem ezen. Közben az jutott az eszembe, hogy Várjunk csak, nem kellene valahol a felsorolásban lennie egy egy, aki pedig ledokumentálja résznek? És akkor végre megértettem :-) &a.tabthorpe; szerint: Egy sem, mert a valódi &os; fejlesztõk nem félnek a sötétben! Hova kerül a /dev/null eszközre küldött adat? A processzoron található speciális adatsüllyesztõbe kerül, majd hõvé alakul és elszállítja a felszerelt hûtõborda és ventillátor. Ezért is annyira fontos a processzor hûtése: az emberek minél gyorsabb géppel rendelkeznek, annál inkább gondatlanná válnak és annál több adat köt ki a /dev/null eszközben. Ha sikerül letörölnünk a /dev/null eszközt (amivel így lényegében letiltjuk a processzor adatsüllyesztõjét), akkor a processzorunk ugyan kevésbé fog melegedni, viszont gyorsan eldugul a sok adattól és furcsán kezd el viselkedni. Ha nagyon gyors hálózati kapcsolattal rendelkezünk, akkor úgy is le tudjuk hûteni a processzorunkat, ha folyamatosan olvassuk a /dev/random eszközt és valahova elküldjük az eredményt. Ekkor viszont vigyázzunk arra, hogy ezzel a módszerrel könnyen túlmelegedhet a hálózati kártyánk és a gyökér állományrendszerünk, valamint a szolgáltató sem fog örülni ennek, mert akkor a felesleges hõ náluk keletkezik. Általában viszont jó a hûtésük, ezért ha okosan csináljuk, akkor semmi gondunk nem származik belõle. Paul Robinson hozzáteszi: Vannak még más módszerek is. Minden jó rendszergazda tudja, hogy szokás a képernyõre is folyamatosan adatot küldeni, mert így a pixik is vidámabbak lesznek. A képernyõt formázó pixik (melyek gyakran tévesen és hibásan pixeleknek hívnak) a fejükön viselt kalapok szerint három csoportba sorolhatóak (vörös, zöld vagy kék), és annak megfelelõen bújnak elõ (illetve mutatják meg a kalapjukat), hogy kapnak-e enni. A videokártyák felelõsek azért, hogy a kapott adatokból pixiétel készüljön és hogy az eljusson a pixikhez — minél drágább a kártya, annál jobb minõségû az elõállított étel, és annál fegyelmezettebben viselkednek a pixik. Állandó cirogatásra is szükségük van — ez a képernyõvédõk feladata. Az elõbbi javaslatot azzal tudnám még kiegészíteni, hogy a /dev/random eszköztõl származó adatokat akár a konzolra is küldhetjük, így a pixiket is jól tudjuk lakatni. Ezzel együtt nem jár semmilyen hõtermelés, viszont a pixik boldogok lesznek és így könnyen meg tudunk szabadulni a felesleges adatoktól is, még úgy is, ha kissé zavarosnak tûnik közben a kép. Mellesleg mint az egyik nagy szolgáltató egykori rendszergazdája elmondhatom, hogy mivel tapasztalatom szerint a szerverszobában nehéz tartani a megfelelõ hõmérsékletet, ezért nem ajánlom senkinek a felesleges adatok átküldését a hálózaton. A csomagok közvetítésével és irányításával foglalkozó tündérek sem különösebben szoktak örülni ennek. Témák haladóknak Honnan lehet többet megtudni a &os; belsõ felépítésérõl? Jelen pillanatban csak egyetlen mû foglalkozik az operációs rendszerek felépítésével a &os; szemszögébõl, név szerint a Marshall Kirk McKusick és George V. Neville-Neil által írt The Design and Implementation of the &os; Operating System címû könyv (ISBN 0-201-70245-2), amely a &os; 5.X változatára koncentrál. Emellett a &unix; típusú rendszerek használatával kapcsolatos ismeret remekül alkalmazható a &os; esetén is. A témához tartozó többi könyvet a kézikönyv Az operációs rendszerek belsõ mûködésével foglalkozó irodalomjegyzékben találhatjuk meg. Hogyan lehet bekapcsolódni a &os; fejlesztésébe? Pontosabb tanácsokat akkor kapunk, ha elolvassuk a &os; fejlesztésérõl szóló cikket. Nagyon is számítunk mindenki segítségére! Mik azok a pillanatkiadások és kiadások? Jelenleg három aktív és félig aktív ág van a &os; CVS repositoryjában. (A korábbi ágakat már csak nagyon ritkán módosítják, ezért is csak három aktív fejlesztési ágon fejlesztenek): RELENG_7 avagy 7-STABLE RELENG_8 avagy 8-STABLE HEAD avagy -CURRENT avagy 9-CURRENT A HEAD nem olyan ág, mint a másik kettõ. Ez egyszerûen csak a jelenlegi, még el nem ágaztatott fejlesztési irány jelentéssel bír, amire pedig sokszor röviden csak -CURRENT néven hivatkoznak. Jelen pillanatban a -CURRENT a 9.X fejlesztési irányát képviseli; az 6-STABLE ág, a RELENG_6, 2005 novemberében, a 7-STABLE ág, a RELENG_7, 2008 februárjában, míg a 8-STABLE ág, a RELENG_8, 2009 novemberében vált le a -CURRENT ágból. Hogyan lehet saját kiadást készíteni? Olvassuk el a kiadások készítésérõl szóló cikket. A make world parancs miért írja felül a korábban telepített binárisokat? Mert alapvetõen ez lenne a cél: ahogy a neve is sugallja, a rendszer újrafordítása, vagyis a make world parancs feladata a rendszerben található összes bináris újrafordítása, aminek eredményeképpen egy tiszta és összefüggõ környezetet kapunk (ezért is tart ilyen sokáig). Ha a make world vagy a make install parancs futtatása elõtt megadjuk a DESTDIR környezeti változót, akkor a frissen létrehozott binárisok az általa mutatott könyvtárba fognak kerülni pontosan úgy, ahogy az eredeti rendszer. Az osztott könyvtárak bizonyos módosításai és egyes programok fordítása azonban könnyen térdre kényszerítheti a make world futását. Miért nem forgó (round robin) névfeloldással lehet elérni a CVSup szervereket és így megosztani köztük a terhelést? Habár a CVSup tükrözések óránként frissítik magukat a központi CVSup szerverrõl, maga a frissítés azonban bármikor megtörténhet. Ennek következményeképpen egyes szervereken frissebb kód található, miközben a többin még az egy órával ezelõtti állapot szerepel. Ha a cvsup.FreeBSD.org forgó névfeloldással mûködne, akkor a felhasználók mindig egy véletlenszerûen választott CVSup szervert kapnának, és ezért a CVSup egymás utáni futtatásakor könnyen elõfordulhatna, hogy a rendszer régebbi forrásait kapjuk vissza. A -CURRENT forrásait korlátozott interneteléréssel is lehet követni? Igen, ezt a CTM használatával anélkül is megtudjuk tenni, hogy le kellene töltenünk az egész forrásfát. Hogyan lehet 1392 KB-os darabokra felosztani az egyes terjesztéseket? Az újabb BSD alapú rendszerekben a &man.split.1; parancsnak már van egy paramétere, amellyel tetszõleges méretûre fel tudunk darabolni állományokat. Íme erre egy példa a /usr/src/release/Makefile állományból: ZIPNSPLIT= gzip --no-name -9 -c | split -b 1392k - Hova lehet küldeni a rendszermaghoz írt kiegészítéseket? Erre vonatkozóan vessünk egy pillantást a &os; továbbfejlesztésérõl szóló cikkre. Köszönjük, hogy gondolt ránk! A rendszer hogyan érzékeli és inicializálja a Plug and Play ISA kártyákat? Frank Durda IV (uhclem@nemesis.lonestar.org) válasza: Dióhéjban úgy tudnám ezt elmagyarázni, hogy van néhány I/O port, amelyet lekérdezve a PnP kártya képes válaszolni, hogy elérhetõ-e. Ezért a PnP eszközök keresése azzal kezdõdik, hogy a rendszer felteszi a kérdést, van-e PnP kártya a számítógépben. Erre aztán a különbözõ kártyák a típusuk megjelölésével válaszolnak, amelyet ugyanezen az I/O porton kell visszaolvasni, így ha már legalább egy bitet beállít valaki, akkor folytatható a keresés. Ezután a keresést végzõ kódrész letiltja az X alatti (a µsoft; és az &intel; által kiosztott) azonosítóval rendelkezõ kártyákat, majd ismét megnézi, hogy valaki továbbra is válaszol-e. Amennyiben a válasz 0, az arra utal, hogy már nincs aktív kártya az X azonosító felett. Ezt követõen a rendszer megpróbálkozik az X alatti azonosítók lekérdezésével. Végül folytatja az X alatti keresést az X -(korlát / 4) feletti azonosítók letiltásával, majd megismétli az iménti kérdést. Ezzel a félig-meddig bináris keresési módszerrel aztán képes 264 lépésnél jóval kevesebbõl felderíteni a rendszerünkben megtalálható PnP kártyákat. Az azonosítók két 32 bit hosszúságú mezõbõl (ezért írtunk az elõbb 264 lépést) és egy 8 bites ellenõrzõösszegbõl állnak. Az elsõ 32 bit a gyártót azonosítja. Ugyan soha nem vallják be, de úgy tûnik, hogy még ugyanannak a gyártónak is lehetnek eltérõ gyártóazonosítóval rendelkezõ kártyái. A gyártók számára fenntartott 32 bites mezõ ezért valamennyire túlzás. A második 32 bit lehet a kártya sorozatszáma vagy bárki más, amely alapján egyértelmûen beazonosítható. A gyártó ugyanazzal a 32 bites értékkel nem gyárthat egy másik kártyát, csak abban az esetben, ha a másik 32 bit is eltér. Ennek köszönhetõen egy gépen belül még az azonos típusú kártyák is el fognak térni 64 biten. Az iménti 32 bites csoportok nem lehetnek teljesen nullák, ezért lehetséges, hogy a bináris keresés során a válaszban legalább egy bit mindig aktív lesz. Miután a rendszer sikeresen beazonosította a rendelkezésre álló kártyákat, egyenként újra elindítja ezeket (ugyanazon az I/O porton keresztül), és megpróbálja kitalálni, hogy az adott eszközöknek milyen erõforrásokra van szüksége, milyen megszakítást akarnak használni stb. Az összes kártyától lekérdezi ezeket az információkat. Az így megszerzett információkat aztán még kiegészíti a merevlemezen vagy az MLB BIOS-ban található ECU állományok tartalmával. Az ECU és az MLB BIOS PnP támogatása általában viszont nem valódi, és az ilyen eszközök igazából nem is állítanak be semmit maguktól. A BIOS és az ECU átvizsgálása azonban segít a felderítést végzõ rutinnak értesíteni a tényleges PnP eszközöket, hogy ne foglaljanak el olyan erõforrásokat, amelyeket a rendszer nem tud áthelyezni. Ezután a PnP eszközöket a kód még egyszer végigjárja és átadja nekik a mûködésükhöz szükséges I/O, DMA, IRQ és memóracímek hozzárendeléseit. Az eszközök ekkor a megadott helyeken elérhetõvé válnak és úgy is maradnak a rendszer következõ indításáig, de igazából semmi sem rögzíti ezeket. Talán túlságosan is egyszerûsítettem a fentieket, de szerintem már ennyi is elegendõ az alapok megértéséhez. A µsoft; néhány elsõdleges nyomtatási állapotot jelzõ portot átrakott PnP-re, azzal a címszóval, hogy egyik kártya sem kódolta át ezeket a címeket az ellenkezõ I/O ciklusok számára. Találtam is egy eredeti IBM nyomtatókártyát, amely valóban át tudta írni az állapotjelzõ portot a PnP kezdeti változataiban, de arra a µsoft; csak annyit mondott, hogy fogós. Ezért a nyomtatási állapotot jelzõ portot a címek beállítására használja, illetve még a 0x800-as portot és egy harmadik I/O portot valahol a 0x200 és a 0x3ff környékén. Hogyan lehet fõeszközazonosítót rendelni egy általunk fejlesztett meghajtóhoz? 2003 februárja óta a &os; képes dinamikusan és önmûködõen futás közben lefoglalni fõeszközazonosítókat a meghajtóknak (lásd &man.devfs.5;), ezért erre tulajdonképpen már nincs szükség. A könyvtárakra vonatkozóan milyen más kiosztási házirendek léteznek még? A könyvtárak más fajta kiosztására vonatkozóan annyit tudok válaszolni, hogy a jelenleg is alkalmazott sémát az 1983-ban megalkotott változata óta változatlanul használjuk. Eredetileg a gyors állományrendszerhez készítettem, de soha nem ragaszkodtam hozzá. Remekül megoldja a cilindercsoportok betelésének problémáját, azonban sokan megjegyezték már, hogy a &man.find.1; esetén gyengén mûködik. A legtöbb állományrendszert mélységi bejárással hozzák létre, így a könyvtárak szétszóródnak a cilindercsoportok közt és ezzel a késõbbi mélységi keresések számára a lehetõ legrosszabb helyzetet alakítják ki. Ha valaki például tudja elõre a létrehozni kívánt könyvtárak számát, akkor ezt úgy lehet megoldani, ha a mûvelet során (összes / cilindercsoportok) mennyiségû könyvtárat hozunk létre az egyes cilindercsoportokban. Ennek meghatározására nyilvánvalóan lehet adni valamilyen heurisztikát. Már egy kisebb elõre rögzített szám, mint például a 10 kiválasztása is legalább egy nagyságrendnyi javulást jelent. Ha szeretnénk megkülönböztetni az állományrendszerek visszaállítását a hagyományos mûködéstõl (amire a jelenlegi algoritmus sokkal érzékenyebb), akkor érdemes tizes csoportokba összefogni a könyvtárakat, feltéve, hogy 10 másodpercen belül hoztuk létre ezeket. Mindenesetre elmondható, hogy ezzel nyugodtan lehet kísérletezni. &a.mckusick;, 1998 szeptembere Hogyan lehet kinyerni a legtöbb információt a rendszermag összeomlásából? Általában így néz ki a rendszermag összeomlása: Fatal trap 12: page fault while in kernel mode fault virtual address = 0x40 fault code = supervisor read, page not present instruction pointer = 0x8:0xf014a7e5 stack pointer = 0x10:0xf4ed6f24 frame pointer = 0x10:0xf4ed6f28 code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, def32 1, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 80 (mount) interrupt mask = trap number = 12 panic: page fault Amikor egy ilyen üzenetet látunk, akkor nem elegendõ újra elõcsalni a hibát és beküldeni. Az utasításszámláló (instruction pointer) értéke ugyan nagyon fontos, de sajnos konfigurációk szerint eltérhet. Más szóval úgy fogalmazhatnék, hogy ennek az értéke a használatban levõ rendszermag értékétõl függõen változhat. Ha a GENERIC rendszermagot használjuk valamelyik kiadásból, akkor viszont már elképzelhetõ, hogy valaki más is le tudja nyomozni a hibát okozó függvényt. Ha viszont egy saját beállításokkal rendelkezõ rendszermagot használunk, akkor egyedül csak mi vagyunk képesek megmondani a hiba pontos helyét. Ezért a javaslatom a következõ: Jegyezzük le az utasításszámláló értékét. A 0x8: rész ebben az esetben annyira nem fontos, egyedül csak a 0xf0xxxxxx részre van szükségünk. A rendszer újraindításakor írjuk be a következõt: &prompt.user; nm /a.hibát.okozó.rendszermag | grep f0xxxxxx ahol az f0xxxxxx az utasításszámláló értéke. Könnyen elõfordulhat, hogy ilyenkor még nem találunk egyezést, mivel a rendszermag szimbólumtáblájában csak az egyes függvények belépési pontjai találhatóak, és ha az utasításszámláló általában valamelyikük belsejébe mutat, nem az elejükre. Ha tehát nem még látunk semmit, akkor egyszerûen hagyjuk el az utolsó számjegyet és próbálkozzunk így: &prompt.user; nm /a.hibát.okozó.rendszermag | grep f0xxxxx Ha még ez sem hoz eredményt, akkor vágjunk le a végérõl egy újabb számjegyet. Egészen addig csináljuk, amíg nem kapunk valami értékelhetõ eredményt. Ilyennek tekintjük például azokat a függvényeket, amelyek a hibát okozhatták. Ez ugyan egy nem annyira pontos felderítési eszköz, viszont még ez is jobb a semminél. A legjobb viszont mégis az, amikor sikerül lementeni a hiba bekövetkezésekor a memória tartalmát, majd a &man.kgdb.1; használatával elõbányászni belõle egy hívási láncot. Ehhez többnyire a következõ módszer javasolt: A rendszermag konfigurációs állományába (/usr/src/sys/arch/conf/RENDSZERMAGKONFIG) vegyük fel a következõ sort: makeoptions DEBUG=-g # A rendszermag fordítása gdb(1) szimbólumokkal Lépjünk be a /usr/src könyvtárba: &prompt.root; cd /usr/src Fordítsuk le a rendszermagot: &prompt.root; make buildkernel KERNCONF=RENDSZERMAGKONFIG Várjuk meg, amíg a &man.make.1; befejezi a fordítást. &prompt.root; make installkernel KERNCONF=RENDSZERMAGKONFIG Indítsuk újra a gépet. A KERNCONF használata nélkül a GENERIC rendszermag fordul és telepítõdik. A &man.make.1; programnak a folyamat végeredményeként két rendszermagot kell készítenie: a /usr/obj/usr/src/sys/RENDSZERMAGKONFIG/kernel és a /usr/obj/usr/src/sys/RENDSZERMAGKONFIG/kernel.debug. Ezek közül a kernel /boot/kernel/kernel néven mentõdik el, miközben a kernel.debug használható nyomonkövetésre a &man.kgdb.1; programmal. A rendszer csak akkor fogja elmenteni összeomláskor a memória tartalmát, ha az /etc/rc.conf állományban beállítjuk a dumpdev értékét a lapozóállományt tároló partícióra (vagy az AUTO értékre). Ennek hatására az &man.rc.8; szkriptek a &man.dumpon.8; paranccsal képesek engedélyezni a memória lementését. A &man.dumpon.8; természetesen manuálisan is elindítható. Az összeomlást követõen a memória lementett tartalmához a &man.savecore.8; programmal férhetünk hozzá. Amikor viszont az /etc/rc.conf állományban megadjuk a dumpdev értékét, az &man.rc.8; szkriptek maguktól lefuttatják a &man.savecore.8; parancsot és átrakják a mentést a /var/crash könyvtárba. A &os; által létrehozott memóriamentések mérete általában a számítógépünkben levõ fizikai memória mennyiségével egyezik meg. Tehát ha 512 MB RAM van a gépünkben, akkor egy 512 MB méretû mentést fogunk kapni. Ezért gondoskodjunk róla, hogy a /var/crash könyvtárban mindig legyen elegendõ hely az állomány tárolásához. A &man.savecore.8; kézzel is lefuttathazó, és ilyenkor a memóriát akár egy másik könyvtárba is menthetjük. A mentés méretét options MAXMEM=N beállítással is korlátozhatjuk, ahol az N értéke a rendszermag által használható memória mérete KB-okban. Például, ha 1 GB RAM van a gépünkben, de a rendszermag által használható memóriát lekorlátozzuk 128 MB-ra, akkor a mentés mérete sem 1 GB lesz, hanem csak 128 MB. Ahogy sikerült hozzájutnunk a memóriamentéshez, azonnal is kérhetünk a &man.kgdb.1; használatával egy hívási láncot belõle: &prompt.user; kgdb /usr/obj/usr/sys/RENDSZERMAGKONFIG/kernel.debug /var/crash/vmcore.0 (kgdb) backtrace Elõfordulhat, hogy ilyenkor több oldalnyi információ özönlik hirtelen a képernyõre, ezért javasolt ezeket lementeni a &man.script.1; programmal. A nyomkövetési szimbólumokat is tartalmazó rendszermag esetén még akár azt a sort is megkapjuk a rendszermagon belül, ahol a hiba történt. A hívási láncot általában alulról felfelé kell olvasni, és ebbõl deríthetõ, hogy pontosan milyen események is vezettek az összeomláshoz. A &man.kgdb.1; használatával még a különbözõ változók és struktúrák értékeit is meg tudjuk vizsgálni, így még többet megtudhatunk a rendszer állapotáról az összeomlás pillanatában. Ha az iméntiek mentén nagyon fellelkesültünk volna és van egy másik számítógépünk is, akkor a &man.kgdb.1; akár távoli nyomkövetésre is beállítható, aminek köszönhetõen a &man.kgdb.1; használatával az egyik rendszeren meg tudjuk állítani a másikon futó rendszermagot, ellenõrizhetjük a viselkedését, akárcsak bármelyik más felhasználói program esetében. Ha netalán engedélyeztük volna a DDB beállítást, és a rendszermag beleáll a nyomkövetõbe, akkor a rendszert mi magunk is össze tudjuk omlasztani (és így a memóriát elmenteni) a ddb parancssorában a panic parancs kiadásával. Ilyenkor a nyomkövetõ általában még egyszer megáll az összeomláskor. Ekkor a continue paranccsal fejeztethetjük be a memória lementését. A dlsym() függvény miért nem mûködik már az ELF állományokra? Az ELF állományokhoz tartozó segédprogramok alapértelmezés szerint nem teszik láthatóvá a dinamikus linker számára a végrehajtható állományban definiált szimbólumokat. Ennek eredményeképpen a dlsym() a dlopen(NULL, flags) függvénytõl kapott információk alapján nem találja meg a keresett szimbólumokat. Ha szükségünk lenne ilyen keresésekre a dlsym() használata során a program végrehajtható állományán belül, akkor az adott programot a opció megadásával kell linkelni (lásd &man.ld.1;). Hogyan növelhetõ vagy csökkenthetõ a rendszermag címtere &i386; architektúrán? Az &i386; platformon a rendszermag címtere alapértelmezés szerint 1 GB (PAE esetén 2 GB). Ha komolyabb hálózati forgalmat bonyolító szerverünk van (például egy nagyobb FTP vagy HTTP szerver) vagy rendszerükön használni akarjuk a ZFS állományrendszert, akkor könnyen kifuthatunk a címtérbõl. A címtér méretének megváltoztatásához vegyük fel a következõ sort a rendszermag konfigurációs állományába, majd fordítsuk újra a rendszermagot: options KVA_PAGES=N Az N megfelelõ értékének megállapításához osszuk el a beállítani kívánt címtér (MB-okban megadott) méretét néggyel. (Tehát például 2 GB esetén ez 512 lesz.) Köszönetnyilvánítás Ezt a szegény kis ártatlan GYIKocskát több százan, ha nem is éppen több ezren írták, újraírták, szerkesztették, hajtogatták, tekergették, csonkítgatták, kibelezték, nézegették, összekutyulták, emlegették, felöklendezték, újraépítették, javítgatták és felpezsdítették az utóbbi években. Folyamatosan. Ezúton is szeretnénk köszönetet mondani mindazoknak, akik gondozásukba vették, és mindenkit csak bátorítani tudunk, hogy csatlakozzon hozzájuk a GYIK továbbfejlesztésében. &bibliography;
diff --git a/hu_HU.ISO8859-2/books/fdp-primer/sgml-markup/chapter.sgml b/hu_HU.ISO8859-2/books/fdp-primer/sgml-markup/chapter.sgml index 557a27ff28..47e33a568b 100644 --- a/hu_HU.ISO8859-2/books/fdp-primer/sgml-markup/chapter.sgml +++ b/hu_HU.ISO8859-2/books/fdp-primer/sgml-markup/chapter.sgml @@ -1,3428 +1,3428 @@ Az SGML alkalmazása Ebben a fejezetben a &os; Dokumentációs Projekt keretein belül két leggyakrabban elõforduló jelölõnyelvet ismerhetjük meg. Az egyes szakaszokban ezen nyelvek bemutatására, illetve jelenleg alkalmazott vagy alkalmazandó jelölési sajátosságaira térünk ki. Az itt tárgyalt jelölõnyelvek nagy számú elemet tartalmaznak, és ezért gyakorta zavarba ejtõ lehet az adott helyzetnek leginkább megfelelõ elemek kiválasztása a rengeteg kínálkozó alternatíva közül. Ebben a szakaszban ezért igyekezük érinteni az összes fontosabb elemet, valamint példákat mutatni a megfelelõ használatukra. Ez az összefoglalás természetesen nem tartalmazza mindegyik elemet, mivel ezzel lényegében a nyelv saját dokumentációját írnánk le ismételten. Ebben a szakaszban elsõsorban inkább azon elemek ismertetését tûztük ki célul, amelyek a munkánk során valószínûleg a leghasznosabbaknak fognak bizonyulni. A további különbözõ jelölési megoldásokra vonatkozóan bátran kérhetünk tanácsot a &a.doc; tagjaitól! Belsõ elemek kontra blokkok A leírás további részeiben belsõnek nevezzük azokat az elemeket, amelyek szerepelhetnek blokkelemekben és nem okoznak sortörést. Ezzel szemben viszont a blokk formátumú elemek feldolgozása sortörést (vagy egyéb feldolgozási lépéseket) eredményez. HTML A HTML, más néven HyperText Markup Language, a Világháló jelölõnyelve. Ezzel kapcsolatban részlesebb leírásokat a címen találhatunk. A HTML használata a &os; honlapján található oldalak készítésénél jelenik meg. Más dokumentációkhoz azonban (általánosságban) nem szokták alkalmazni, mivel a DocBook ennél sokkal bõségesebb eszközöket kínál fel. Ennek következményeképpen tehát többnyire csak a honlap fejlesztése során fogunk HTML oldalakkal találkozni. A HTML létrejötte óta több verzióváltáson is keresztülment már, az 1, 2, 3.0, 3.2 verziókat követõen egészen a legfrissebb 4.0 változatáig (amely egyaránt elérhetõ szigorú (strict) és enyhébb (loose) formáiban is). A HTML DTD-k a Portgyûjteménybõl a textproc/html porton keresztül érhetõek el. A textproc/docproj port ezt automatikusan telepíti. Formális publikus azonosító A HTML megfelelni kívánt verziójától (amelyet sokszor szintnek is szoktak nevezni) függõen különbözõ formális publikus azonosító (FPI) áll rendelkezésünkre. A &os; honlapján található HTML dokumentumok többsége a HTML 4.0 enyhébb változatának felel meg: PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" A dokumentum részei A HTML dokumentumok általános esetben két részre oszthatóak. Az elsõ, fejnek nevezett rész tartalmazza a dokumentumhoz tartozó metainformációkat, például a címét, a szerzõ nevét, a szülõdokumentumot és így tovább. A második, törzsnek hívott rész pedig a felhasználó részére megjelenített tartalmat foglalja magában. A dokumentum ezen részeit rendre a head (mint angolul a fej) és a body (mint angolul a törzs) elemekkel jelöljük. Ezeket az elemeket végül a legfelsõbb szinten álló html elem tartalmazza. Egy átlagos HTML dokumentum felépítése <html> <head> <title>A dokumentum címe</title> </head> <body> … </body> </html> Blokkok Fejlécek A HTML lehetõvé teszi fejlécek jelölését egészen hat különbözõ szintig. A legnagyobb és legkiemelkedõbb fejléc a h1, majd ezt követi a h2, egészen a h6 címkéig. Az elem tartalma a fejléc szövege lesz. A <sgmltag>h1</sgmltag>, <sgmltag>h2</sgmltag>, stb. elmek A használat módja: ]]>Elsõ szakasz

]]>Ez az elsõ szakasz fejléce

]]>Ez az elsõ alszakasz fejléce

]]>Ez a második szakasz fejléce ]]> A HTML oldalaknak általában rendelkezniük kell elsõ szintû fejléccel (h1). Ez tetszõleges számú második szintû fejlécet (h2) tartalmazhat, amelyek szintén tetszõleges mennyiségû harmadik szintû fejlécet. Ügyeljünk arra, hogy minden hn elem mindig a nála eggyel nagyobb szintû elemet tartalmazza, a sorszámozásban tehát nem javasolt közöket hagyni. A <sgmltag>h<replaceable>n</replaceable></sgmltag> elemek helytelen sorrendje A használati módja: ]]>Elsõ szakasz

]]>Alszakasz ]]> Bekezdések A HTML egyetlen bekezdésfajtát ismer, ez a p. A <sgmltag>p</sgmltag> elem A használat módja: ]]>Ez egy bekezdés. Szinte bármilyen más elemet tartalmazhat.]]> Idézetblokkok Az idézetblokkok más dokumentumok nagyobb részeinek idézésére használhatóak az aktuális bekezdésen túl. A <sgmltag>blockquote</sgmltag> elem A használat módja: ]]>Részlet a Szózatból:
]]>Hazádnak rendületlenûl Légy híve, oh magyar, Bölcsõd az 's majdan sírod is, Melly ápol 's eltakar. A' nagy világon e' kivûl Nincsen számodra hely, Áldjon vagy verjen sors' keze, Itt élned, halnod kell. Ez a' föld, mellyen annyiszor Apáid' vére folyt; Ez, mellyhez minden szent nevet Egy ezredév csatolt. Itt küzdtenek honért a' hõs Árpádnak hadai, Itt törtek össze rabigát Hunyadnak karjai. Szabadság! Itten hordozák Véres zászlóidat, 'S elhulltanak legjobbjaink A' hosszu harcz alatt.]]> Felsorolások A dokumentumokban háromféle felsorolást használhatunk: sorszámozott, sorszámozás nélkül és definíciós. Röviden úgy mutathatnánk be ezeket a formátumokat, hogy a sorszámozott felsorolásban az elemek elé számok kerülnek, a sorszámozás nélküli esetben pontok, a definíciós felsorolásban pedig a bejegyzések két részébõl jönnek létre az elemek. Ezek közül az elsõ részben a meghatározandó fogalom található, míg a második részben annak meghatározása. A sorszámozott felsorolásokat az ol elem jelzi, a sorszámozás nélküli felsorolásokat az ul elem, végül a definíciós felsorolásokat a dl elem. A sorszámozott és sorszámozás nélküli felsorolások a felsorolás elemeit tartalmazzák, amelyeket a li elemekkel vezetünk be. A felsorolások elemeinek szöveges tartalma lehet, vagy ha ezeket becsomagoljuk egy vagy több p elembe, további elemeket tartalmazhatnak. A definíciós felsorolások meghatározandó fogalmakat (dt) és meghatározásokat (dd) tartalmazhatnak. A meghatározandó fogalmat tartalmazó részben csak belsõ elemek szerepelhetnek. A meghatározásokban viszont további blokkok is megjelenhetnek. Az <sgmltag>ul</sgmltag> és <sgmltag>ol</sgmltag> elemek A használat módja: ]]>Egy sorszámozás nélkül felsorolás. A felsorolás elemei elõtt minden bizonnyal pontok fognak megjelenni.
  • ]]>Elsõ elem
  • ]]>Második elem
  • ]]>Harmadik elem

]]>Egy sorszámozott lista, ahol az elemek több bekezdésbõl állnak. Mindegyik elem (figyelem: nem mindegyik bekezdés) elõtt egy sorszámnak kell szerepelnie.

  1. ]]>Ez az elsõ elem. Ennek csak egy bekezdése van.

  2. ]]>Ez a második elem elsõ bekezdése.

    ]]>Ez a második elem második bekezdése.

  3. ]]>Ez az elsõ és egyetlen bekezdés a harmadik elemben.

]]>
Definíciós felsorolások a <sgmltag>dl</sgmltag> elemmel A használat módja:
]]>Elsõ fogalom

]]>Az elsõ fogalom meghatározásának elsõ bekezdése.

]]>Az elsõ fogalom meghatározásának második bekezdése.

]]>Második fogalom

]]>A második fogalom meghatározásának elsõ bekezdése.

]]>Harmadik fogalom

]]>A harmadik fogalom meghatározásának elsõ bekezdése.

]]>
Formázott szöveg Megadhatjuk, hogy a szöveg egyes részei pontosan abban a formában kerüljenek a felhasználó elé, ahogy az eredetileg szerepel. Ilyenkor általában a szöveg rögzített szélességû betûtípussal jelenik meg, az egymás mellett levõ szóközök nem vonódnak össze, a sortörések hatása fontossá válik. Mindezt a pre elemen keresztül érhetjük el. A <sgmltag>pre</sgmltag> elem A pre elem például remekül alkalmas e-mailek jelölésére: From: Gabor PALI <pgj@FreeBSD.org> To: bsd@hu.FreeBSD.org Subject: Uj FreeBSD-cikk forditas: Naplozo UFS hasznalata asztali szamitogepeken Kedves listatagok! Nemreg elkeszitettem az ``Implementing UFS Journaling on a Desktop PC'' neven szerepelo [1] FreeBSD-cikk magyar forditasat [2]. Szeretnek megkerni mindenkit, akit erdekel a honositott valtozat, hogy olvassa el, nezze at, betatesztelje es mondjon rola velemenyt. Egyelore meg csak a sajat Perforce repositorynkbol erheto el, de a megadott linken naponta egyszer automatikusan frissul a HTML valtozat a feltoltott valtoztatasok (peldaul hibajavitasok) fuggvenyeben. Elore is nagyon szepen koszonom mindenkinek a segitseget! :g [1] http://www.freebsd.org/doc/en/articles/gjournal-desktop/ [2] http://people.freebsd.org/~pgj/gjournal-desktop_hu/]]> Hasznos azonban tudnunk, hogy a < és & jelek a formázott szövegben továbbra is speciális jelentéssel bírnak. A példában ezért is használtunk &lt; egyedeket a < jelek helyett. Ugyanezért a &gt; a > helyén is látható. Ezért mindig körültekintõen bánjunk a nyers szövegbõl, például e-mailbõl vagy forráskódból bemásolt részletekkel, és ne felejtsük el átalakítani a bennük található speciális karaktereket. Táblázatok A legtöbb (Lynx-hez hasonló) szöveges módban futó böngészõ kifejezetten ügyetlen módon jeleníti meg a táblázatokat. Ha az oldalon a táblázatos felépítést választjuk, akkor a problémák elkerüléséhez érdemes egy alternatív jelölési módszert alkalmazni. A táblázatos formában megjeleníteni kívánt információt jelöljük a table elemmel. A táblázatok egy több sorból (tr mint table row) állnak, amelyek egy vagy több adatcellát (td mint table data) tartalmaznak. Mindegyik cella tartalmazhat további blokkokat, például bekezdéseket vagy listákat, de akár táblázatokat (ez a beágyazás tetszõleges mélységig folytatható). Ha a cella tartalma csak egyetlen bekezdés, akkor nincs szükség a p elem használatára. A <sgmltag>table</sgmltag> egyszerû használata A használat módja: ]]>Ez egy 2x2-es táblázat.
]]>Bal felsõ cella ]]>Jobb felsõ cella
]]>Bal alsó cella ]]>Jobb alsó cella
]]>
Egy cella több sorra vagy oszlopra is átnyúlhat. Ennek jelzéséhez a kiterjesztendõ sorokhoz a rowspan és/vagy oszlopokhoz a colspan tulajdonságot adjuk meg a megfelelõ értékkel. A <literal>rowspan</literal> tulajdonság A használat módja: ]]>Egy magas keskeny cella a bal oldalon, mellette jobbra két rövid cella.
]]>Hosszú és keskeny
]]>Felsõ cella ]]>Alsó cella
]]>
A <literal>colspan</literal> tulajdonság A használat módja: ]]>Felül egy hosszú cella, alatt két rövidebb cella.
]]>Felsõ cella
]]>Bal alsó cella ]]>Jobb alsó cella
]]>
A <literal>rowspan</literal> és <literal>colspan</literal> tulajdonságok együttes használata A használat módja: ]]>Egy 3x3-as rácson a bal felsõ blokk 2x2 egymásba olvasztott cellából áll. A többi cella normális.
]]>Bal felsõ nagy cella ]]>Jobb felsõ cella
]]>Jobb középsõ cella
]]>Bal alsó cella ]]>Bal középsõ cella ]]>Jobb alsó cella
]]>
Belsõ elemek Az információ kiemelése A HTML esetén a kiemelésnek két szintje létezik, az em és a strong. Ezek közül az em jelenti a hagyományos kiemelést és a strong az erõsebbet. Az em elem tartalma általában dõlt betûvel jelenik meg, miközben a strong elem tartalma félkövéren. Ez a megállapítás azonban nem minden esetben igaz, ezért nem szabad semmi ilyesmit feltételeznünk a használatukkor. A <sgmltag>em</sgmltag> és <sgmltag>strong</sgmltag> elemek A használat módja: ]]><em>Ezt</em> a részt kiemeltük, miközben <strong>ezt</strong> részt erõsebben kiemeltük.]]> Félkövér és dõlt formázás Mivel a HTML tartalmaz konkrétan a megjelenítésre vonatkozó jelölõket is, ezért külön jelezni tudjuk a forrásban, hogy a szöveg melyik részét szeretnénk félkövéren vagy dõlten látni. Ezeket a funkciókat a b, illetve az i elemekkel érhetjük el. A <sgmltag>b</sgmltag> és <sgmltag>i</sgmltag> elemek ]]><b>Ez</b> félkövér, <i>ez</i> pedig dõlt.]]> Írógépszerû formázás Az írógépszerûen (rögzített szélességû karakterekkel) írt szövegek formázásához a tt (mint teletype) elemet használhatjuk. A <sgmltag>tt</sgmltag> elem A használat módja: ]]>Ezt a dokumentumot eredetileg Páli Gábor fordította, és a következõ címen érhetõ el: <tt>pgj@FreeBSD.org</tt>.]]> Méretezés Elõfordulhat, hogy szeretnénk növelni vagy csökkenteni a szöveg megjelenítéséhez használt betûtípus méretét. Erre alapvetõen három lehetõség kínálkozik. Ágyazzuk az átméterezendõ szöveget big és small elemekbe. Ezeket a címkéket tetszõleges mélységig egymásba tudjuk ágyazni, tehát írható olyan, hogy <big><big>Ez már sokkal nagyobb!</big></big>. Használjuk a font elemet, és a size tulajdonságát állítsuk a +1 vagy -1 értékre. Ez hatása szerint megegyezik a big és a small elemek használatával, azonban ez a típusú megoldás már elavult. A font size tulajdonsága 1 és 7 között állítható. A betû alapértelmezett mérete 3. Ez a megközelítés már elavult. A <sgmltag>big</sgmltag>, <sgmltag>small</sgmltag> és a <sgmltag>font</sgmltag> elemek A következõ kódrészleteknek ugyanaz a hatása. ]]>Ez a szöveg <small>valamivel kisebb</small>. Ez a a szöveg viszont <big>valamivel nagyobb</big>.

]]>Ez a szöveg <font size="-1">valamivel kisebb</font>. Ez a szöveg viszont <font size="+1">valamivel nagyobb</font>.

]]>Ez a szöveg <font size="2">valamivel kisebb</font>. Ez a szöveg viszont <font size="4">valamivel nagyobb</font>.]]> Hivatkozások A hivatkozások is belsõ elemek. Hivatkozás más dokumentumokra a Világhálón A Világhálón elhelyezkedõ dokumentumokat úgy tudjuk hivatkozni, ha ismerjük a helyüket. A hivatkozást az a elemmel adhatjuk meg, amelynek a href tulajdonsága tartalmazza a hivatkozott dokumentum helyét. Az elem tartalma ekkor egy hivatkozássá változik, és a felhasználó számára is jól látható módon jelenik meg (aláhúzással, más színnel, más egérmutatóval és így tovább). Az <literal><a href="..."></literal> elem A használat módja: ]]>Erre vonatkozóan részletesebb információkat a <a href="http://www.FreeBSD.org/">&os; honlapján</a> találhatunk.]]> Ezeket a hivatkozások a felhasználót az adott dokumentum elejére irányítják. A dokumentumok más részeinek hivatkozása A dokumentumok egyéb részeire (akár ugyanazon a dokumentumon belül) csak akkor tudunk hivatkozni, ha a szerzõ elõzetesen hivatkozási pontokat helyeztünk el bennük. Hivatkozási pontokat szintén a elemekkel adhatunk meg, azonban a href tulajdonság helyett a name használatával. Az <literal><a name="..."></literal> elem A használat módja: ]]>Ez]]> a bekezdés a hivatkozásokban a ]]>bekezd1]]> névvel érhetõ el.]]> A dokumentum így megnevezett részét egy egyszerû hivatkozás készítésével tudjuk elérni, azonban a hivatkozási pont neve elé tennünk kell egy # jelet. Egy másik dokumentum nevesített részének elérése Tételezzük fel, hogy a bekezd1 példánk az ize.html állományban található. ]]>A témáról további információkat az ]]>ize.html]]> ]]>elsõ bekezdésében]]> találhatunk.]]> Ha egy hivatkozási pontra ugyanazon a dokumentumon belül szeretnénk hivatkozni, akkor nyugodtan elhagyhatjuk a dokumentum nevét, elegendõ egyszerûen magát a hivatkozási pontot megadnunk (természetesen a hozzá tartozó # jellel együtt). Ugyanazon dokumentum nevesített részének elérése Tételezzük fel, hogy a bekezd1 példa ugyanezen a dokumentumon belül helyezkedik el: ]]>A témáról további információkat az ]]>elsõ bekezdésben]]> találhatunk.]]> DocBook A DocBook jelölõnyelvet eredetileg a HaL Computer Systems és az O'Reilly & Associates dolgozta ki a mûszaki jellegû dokumentációk írásához Ennek rövid története a címen olvasható., illetve 1998 óta a DocBook Mûszaki Bizottság tartja karban. Mint ilyen nyelv, eltérõen a LinuxDoc és a HTML megoldásaitól, a DocBook erõsen olyan jelölések irányába orientálódik, amelyek nem azt írják le hogyan, hanem mit jelenítsünk meg. <literal>Formális</literal> kontra <literal>informális</literal> Bizonyos elemeknek létezik ún. formális és informális változata. A formális változat általában egy címbõl és az adott elem informális változatából áll. Az informális változat nem tartalmaz címet. A DocBook használatához szükséges DTD a Portgyûjteménybõl a textproc/docbook porton keresztül érhetõ el. Ez a textproc/docproj port részeként automatikusan telepítõdik. A &os; kiterjesztései A &os; Dokumentációs Projekt kiterjesztette a hivatalos DocBook DTD-t további elemekkel. Segítségükkel bizonyos jelölések sokkal pontosabbá tehetõek. A kizárólag a &os; esetén alkalmazott elemeket egyértelmûen jelezni fogjuk a felsorolásban. A dokumentum további részében a DocBook kifejezés a DocBook DTD &os; kiterjesztéseivel együtt értendõ. Szeretnénk megemlíteni, hogy a hozzáadott kiegészítésekben azonban semmi olyan nincs, ami kizárólag a &os;-re vonatkozna, egyszerûen csak a Projektben felmerült igények mentén szeretne alkalmazni néhány javítást. Ha más &unix; jellegû rendszerek (NetBSD, OpenBSD, Linux, stb.) fejlesztõit esetleg érdekelné a DocBook további fejlesztése, kérjük, vegyék fel velünk a kapcsolatot a &a.doceng; címén. A &os; kapcsán alkalmazott kiterjesztések (jelenleg) nem érhetõek el a Portgyûjteménybõl, hanem a &os; repositoryban találjuk meg a doc/share/sgml/freebsd.dtd helyen. Formális publikus azonosító A DocBook a testreszabott változatok formális publikus azonosítóira vonatkozó irányelvei szerint a &os; kiterjesztéseivel bõvített DocBook DTD formális publikus azonosítója a következõ lesz: PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" A dokumentum szerkezete A DocBook többféle módon kínál lehetõségeket a dokumentumok szerkezetének kialakítására. A &os; Dokumentációs Projektben a DocBook dokumentumok két alapvetõ fajtáját használjuk, a könyvet és a cikket. A könyvek fejezetekbõl (chapter) állnak, amelyek használata kötelezõ. A könyv és a fejezetek közé még további szervezési rétegként beilleszhetõek részek (part) is. Például a &os; kézikönyv szerkezetét is ennek megfelelõen alakítottuk ki. A fejezetek tartalmazhatnak (vagy sem) egy vagy több szakaszt, amelyeket sect1 elemekkel jelezhetünk. Amennyiben egy szakasz újabb szakaszt tartalmaz, akkor használjuk a sect2 elemet, és így tovább egészen a sect5 szintig. A fejezetek és a szakaszok tartalmazzák a dokumentum tartalmának fennmaradó részét. Egy cikk egy könyvnél egyszerûbb felépítésû, és nem tartalmaz fejezeteket. Helyette a cikkek tartalmát egy vagy több szakaszba szervezzük, a könyvnél már említett sect1 (sect2 és így tovább) elemek segítségével. A készítendõ dokumentációról értelemszerûen jellegének mérlegelésével tudjuk eldönteni, hogy könyvként esetleg cikk-ként érdemesebb jelölni. A cikk formátum választása leginkább olyan információk esetén célszerû, ahol nincs szükségünk külön fejezetekre. Röviden szólva tehát egy viszonylag rövid, legfeljebb 20-25 oldalas írást takar. A könyv formátum ezzel szemben leginkább olyan esetekben alkalmazható, amikor az információ fejezetekre bontható, amelyhez függelékek és hasonlók is társulhatnak. A &os;-hez készített cikkek mindegyikét cikk-ként jelöltük, miközben például ez a dokumentum, a &os; GYIK, és a &os; kézikönyv könyvként került jelölésre. Könyv írása A könyvek tartalmát egy book elemben adjuk meg. Ez a jelölõ amellett, hogy magában foglalja a könyv teljes felépítését, tovább információkat tud tárolni magáról a könyvrõl. Ez lehet akár hivatkozási célokat szolgáló metainformáció, vagy éppen a címlap elkészítéséhez szükséges egyéb leírás. A könyvre vonatkozó további információkat egy bookinfo elemen belül adhatjuk meg. Egy <sgmltag>book</sgmltag> és <sgmltag>bookinfo</sgmltag> elemek segítségével definiált könyvsablon <book> <bookinfo> <title>Ide írjuk a címet</title> <author> <surname>Vezetéknév</surname> <firstname>Keresztnév</firstname> <affiliation> <address><email>E-mail cím</email></address> </affiliation> </author> <copyright> <year>2008</year> <holder role="mailto:E-mail cím">Név</holder> </copyright> <releaseinfo>$&os;$</releaseinfo> <abstract> <para>Ide kerüljön a könyv tartalmának rövid összefoglalása.</para> </abstract> </bookinfo> … </book> Cikk írása A cikk tartalma az article elembe kerül. A dokumentum szervezésén kívül ennek az elemnek feladata lehetõséget kínálni további információk elhelyezésére. Ez lehet hivatkozási célokra alkalmas metainformáció, vagy például a címlap elõállításához szükséges egyéb adatok. A cikk-kel kapcsolatos további információk egy articleinfo elemben adhatóak meg. Egy <sgmltag>article</sgmltag> és <sgmltag>articleinfo</sgmltag> elemek segítségével definiált cikksablon <article> <articleinfo> <title>Ide írjuk a címet</title> <author> <surname>Vezetéknév</surname> <firstname>Keresztnév</firstname> <affiliation> <address><email>E-mail cím</email></address> </affiliation> </author> <copyright> <year>2008</year> <holder role="mailto:E-mail cím">Név</holder> </copyright> <releaseinfo>$&os;$</releaseinfo> <abstract> <para>Ide kerüljön a cikk tartalmának rövid összefoglalása.</para> </abstract> </articleinfo> … </article> Fejezetek készítése A chapter elem használatával tudunk fejezeteket jelölni. Minden fejezetnek kötelezõen rendelkeznie kell egy címmel, vagyis egy title elemmel. A cikkek nem tartalmazhatnak fejezeteket, kizárólag könyvek számára tartják fenn. Egy egyszerû fejezet ]]>Fejezetcím<![ CDATA [ ... ]]> A fejezetek nem lehetnek üresek, a title elem mellett még tartalmazniuk kell valamilyen másik elemet is. Az üres fejezetek készítéséhez használjunk egy üres bekezdést. Üres fejezetek ]]>Ez egy üres fejezet<![ CDATA [ ]]> Szakaszok fejezetek alatt A könyvekben a fejezetek további szakaszokra, alszakaszokra stb. bonthatóak (de nem kötelezõ). A cikkekben azonban a szakaszok az alapvetõ szervezõelemek, ezért minden cikknek legalább egy szakaszt tartalmaznia kell. A szakaszok létrehozására a sectn elemet használhatjuk, ahol az n szám adja meg a szakasz szintjét. Az elsõ ilyen sectn elem a sect1, amelybõl egy fejezetben egy vagy több is szerepelhet. Ezek egy vagy több sect2 elemet tartalmazhatnak, és így tovább egészen az sect5 szintjéig. Szakaszok fejezetekben ]]>Minta fejezet<![ CDATA [ ]]>Egy kis fejezetbeli szöveg. ]]>Elsõ szakasz (1.1)<![ CDATA [ ]]>Második szakasz (1.2)<![ CDATA [ ]]>Elsõ alszakasz (1.2.1)<![ CDATA [ ]]>Elsõ al-alszakasz (1.2.1.1)<![ CDATA [ ]]>Második alszakasz (1.2.2)<![ CDATA [ ]]> Láthatjuk, hogy ebben a példában a szakaszok neveiben megjelenik a szakaszok számozása. Ezt azonban ne írjuk bele a dokumentumainkba! A szakaszok számozását a stíluslapok végzik (errõl még késõbb szó lesz), ezekkel egyáltalán nem kell foglalkoznunk. A dokumentum felosztása <sgmltag>part</sgmltag> elemek használatával A book és chapter elemek részérõl felkínált szervezési szintek közé a part elemek alkalmazásával egy újabbat tudunk illeszteni. Erre a cikkek esetében nincs lehetõségünk. ]]>Bevezetés<![ CDATA [ ]]>Áttekintés<![ CDATA [ ... ]]>Mi a &os;?<![ CDATA [ ... ]]>Történet<![ CDATA [ ... ]]> Blokkok Bekezdések A DocBookban a bekezdések háromféle típusát találhatjuk meg: formalpara, para és simpara. Az iméntiek közül a legtöbb esetben az para elemre lesz szükségünk. A formalpara tartalmaz még egy title elemet, illetve a simpara nem engedélyezi bizonyos elemek használatát a bekezdésben. Érdemes tehát inkább következetesen a para használatánál maradni. A <sgmltag>para</sgmltag> elem A használat módja: ]]>Ez egy bekezdés. Tetszõleges egyéb elem megjelenhet benne.]]> Így jelenik meg: Ez egy bekezdés. Tetszõleges egyéb elem megjelenhet benne. Idézetblokkok Az idézetblokkok egy másik dokumentumból származó, kiterjedtebb hosszúságú idézetet jelölnek, amelyeknek az aktuális bekezdéstõl függetlenül kell megjelenniük. Erre valószínûleg csak nagyon ritkán lesz ténylegesen szükségünk. Az idézetblokkok opcionálisan címeket és szerzõt is tartalmazhatnak (de akár szerepelhetnek cím vagy szerzõ nélkül). A <sgmltag>blockquote</sgmltag> elem A használat módja: ]]>Részlet Szerb Antal <quote>A Pendragon legenda</quote> címû mûvébõl:

]]>A Pendragon legenda<![ CDATA [ ]]>Szerb Antal ]]>Minden nõben azt élveztem, hogy a szimbóluma volt valaminek. Volt nõ, akit azért szerettem, mert õ volt Svédország, volt nõ, akit azért, mert a XVIII. századra emlékeztetett törékeny Sèvres-mivolta. Volt, akiben Jeanne d'Arc-ot álmodtam, volt, akiben az ezermellû ephesusi Dianát. Cynthiát, ha megcsókoltam, úgy éreztem, most az angol szonetekkel flörtölök, ötödfeles jambusokban. Volt, akinek édes tehénszerûségében svájci, alpesi réteket élveztem.
]]>
Így jelenik meg: Részlet Szerb Antal A Pendragon legenda címû mûvébõl:
A Pendragon legenda Szerb Antal Minden nõben azt élveztem, hogy a szimbóluma volt valaminek. Volt nõ, akit azért szerettem, mert õ volt Svédország, volt nõ, akit azért, mert a XVIII. századra emlékeztetett törékeny Sèvres-mivolta. Volt, akiben Jeanne d'Arc-ot álmodtam, volt, akiben az ezermellû ephesusi Dianát. Cynthiát, ha megcsókoltam, úgy éreztem, most az angol szonetekkel flörtölök, ötödfeles jambusokban. Volt, akinek édes tehénszerûségében svájci, alpesi réteket élveztem.
Tanácsok, megjegyzések, felhívások, figyelmeztetések, fontos és mellékes információk Esetenként szükségünk lehet arra, hogy bizonyos többletinformációt közöljünk az olvasóval a szövegtõl elkülöníthetõ módon. Ez többnyire olyan metainformáció, amelyre a felhasználónak tekintettel érdemes lennie. Az adott információ jellegétõl függõen erre a célra a tip (tanács), note (megjegyzés), warning (felhívás), caution (figyelmeztetés) és important (fontos információ) elemek valamelyikét tudjuk használni. Amennyiben a közölni kívánt információ kötõdik ugyan a szöveghez, azonban az elõbbiek közül egyik kategóriába sem sorolható be, akkor használhatjuk a sidebar (mellékinformáció) elemet is. Nem teljesen tisztázott, hogy az imént felsorolt elemek közül pontosan mikor melyiket kell alkalmazni. A DocBook dokumentációja ezzel kapcsolatban a következõket javasolja: A note elemek olyan információkat jelölnek, amelyek az olvasó részérõl megszivlelendõek. Az important elemek a note elemek egyik változata. A caution elemmel olyan információt jelölnek, amelyek ismeretének hiányában adatvesztés vagy szoftveres károdás következhet be. A warning elemek olyan információkat jelölnek, amelyek ismeretének hiánya hardver károsodását, életveszélyt vagy a végtagok sérülését eredményezheti. A <sgmltag>warning</sgmltag> elem A használat módja: ]]>A &os; telepítése után könnyen elõfordulhat, hogy a Windowst teljesen le akarjuk törölni a merevlemezünkrõl. ]]> Így jelenik meg: A &os; telepítése után könnyen elõfordulhat, hogy a Windowst teljesen le akarjuk törölni a merevlemezünkrõl. Felsorolások és eljárások Gyakran adódhatnak olyan helyzetek, amikor az olvasó felé fel kell sorolnunk valamilyen információkat, vagy egy adott cél elérése érdekében be kell mutatnunk neki egy sorszámozott, egyenként végrehajtandó lépéssorozatot. Erre a célra rendelkezésünkre állnak az itemizedlist, az orderedlist, illetve a procedure elemek A felsorolások megadására a DocBook további lehetõségeket is felkínál, azonban ezekkel itt most nem foglalkozunk.. Az itemizedlist és az orderedlist elemek hasonlóak az HTML esetén már megismert megfelelõikhez, az ul és ol elemekhez. Egy vagy több listitem elembõl állnak és mindegyik listitem egy vagy több blokkot tartalmaz. A listitem elemek a HTML li elemeihez hasonlóak, azonban ebben az esetben kötelezõ megadni ezeket. A procedure elem ettõl némileg eltér. Itt step elemekbõl épül fel, amelyek további step vagy substep típusú elemeket foglalhatnak magukban. A step elemek mindegyike blokkokat tartalmaz. Az <sgmltag>itemizedlist</sgmltag>, <sgmltag>orderedlist</sgmltag> és <sgmltag>procedure</sgmltag> elemek A használat módja: ]]>Ez a felsorolás elsõ eleme. ]]>A a felsorolás második eleme. ]]>Ez az elsõ sorszámozott elem. ]]>Ez a második sorszámozott elem. ]]>Csináljuk ezt. ]]>Majd csináljuk azt. ]]>Most pedig csináljuk így. ]]> Így jelenik meg: Ez a felsorolás elsõ eleme. Ez a felsorolás második eleme. Ez az elsõ sorszámozott elem. Ez a második sorszámozott elem. Csináljuk ezt. Majd csináljuk azt. Most pedig csináljuk így. Példák állományokra Ha állományrészeket (vagy akár teljes állományokat) akarunk bemutatni az olvasónak, akkor érdemes ezeket egy programlisting elembe illeszteni. A programlisting elemeken belül alkalmazott tördelés és a sortörések helye jelentéssel bír. Ennek egyik fontos következménye, hogy a nyitócímkének az állomány tartalmának elsõ sorával együtt kell megjelennie, illetve a zárócímkének pedig az utolsó sorban, ellenkezõ esetben üres sorok fognak keletkezni a kimenetben. A <sgmltag>programlisting</sgmltag> elem A használat módja: ]]>Miután befejeztük a feladatot, a programunknak valahogy így kell majd kinéznie: #include <stdio.h> int main(void) { printf("]]>Halló mindenki!]]> Láthatjuk, hogy az #include után a relációs jeleket nem közvetlenül adtuk meg, hanem a nekik megfelelõ egyedekkel. Így jelenik meg: Miután befejeztük a feladatot, a programunknak valahogy így kell majd kinéznie: #include <stdio.h> int main(void) { printf("Halló mindenki!\n"); } Magyarázó szövegek A magyarázó szövegek használatával a szöveg egy korábbi részére vagy egy korábbi példa adott helyére tudunk visszahivatkozni anélkül, hogy a szövegen magán belül hivatkoznánk rá. Ehhez a co elem használatával jelöljük be a példa (programlisting, literallayout vagy bármi más) fontosabb részeit. Mindegyik elemhez egy egyedi azonosítót kell társítanunk. A példa után helyezzünk el egy calloutlist elemet, amelyben a megfelelõ további magyarázat megadásával együtt visszahivatkozunk a példa egyes részeire. A <sgmltag>co</sgmltag> és <sgmltag>calloutlist</sgmltag> elemek ]]>Miután befejeztük a feladatot, a programunknak valahogy így kell majd kinéznie: #include <stdio.h> int main(void) { printf("]]>Halló mindenki! } ]]>A szabványos állománymûveleteket tartalmazó header állomány. ]]>Megadjuk, hogy a <function>main()</function> függvény egy <literal>int</literal> típusú értékkel térjen vissza. ]]>A <function>printf()</function> hívással egy <literal>Halló mindenki!</literal> szöveget írunk ki a szabványos kimenetre. ]]> Így jelenik meg: Miután befejeztük a feladatot, a programunknak valahogy így kell majd kinéznie: #include <stdio.h> int main(void) { printf("Halló mindenki!\n"); } A szabványos állománymûveleteket tartalmazó header állomány. Megadjuk, hogy a main() függvény egy int típusú értékkel térjen vissza. A printf() hívással egy Halló mindenki! szöveget írunk ki a szabványos kimenetre. Táblázatok A HTML kapcsán megismertektõl eltérõen a szöveg elrendezésének befolyásolásához nem kell táblázatokat használnunk, mivel errõl majd a stíluslapok gondoskodnak helyettünk. Ehelyett egyszerûen csak akkor használjunk táblázatokat, amikor táblázatosan akarunk adatokat megadni. Általános értelemben véve (ennek további részleteit lásd a DocBook leírásában) a táblázatok (amelyek lehetnek formálisak vagy informálisak) egy table elembõl állnak. Ennek magában kell foglalnia legalább egy csoportot jelölõ tgroup elemet, amely (tulajdonságként) megadja, hogy benne mennyi oszlop található. Ezekben a csoportokban aztán a thead elemmel fejlécet adhatunk meg az egyes oszlopoknak, illetve azok törzseit pedig tbody elemek specifikálják. A tgroup és thead elemek egyaránt tartalmaznak row elemeket, amelyek pedig entry elemekre bonthatóak tovább. Mindegyik ilyen entry elem a táblázat egy celláját jelöli. Az <sgmltag>informaltable</sgmltag> elem A használat módja: ]]>Ez az elsõ oszlop fejléce ]]>Ez a második oszlop fejléce ]]>Elsõ oszlop, elsõ sor ]]>Második oszlop, elsõ sor ]]>Elsõ oszlop, második sor ]]>Második oszlop, második sor ]]> Így jelenik meg: Ez az elsõ oszlop fejléce Ez a második oszlop fejléce Elsõ oszlop, elsõ sor Második oszlop, elsõ sor Elsõ oszlop, második sor Második oszlop, második sor Az informaltable elemek esetén a pgwide tulajdonságot mindig az 1 értékkel használjuk, ellenkezõ esetben az Internet Explorer egyik hibája miatt a táblázat nem fog rendesen megjelenni. Amennyiben nem szeretnénk keretet a táblázathoz, állítsuk az informaltable elem frame tulajdonságát a none értékre (vagyis <informaltable frame="none">). A <literal>frame="none"</literal> típusú táblázat Így jelenik meg: Ez az elsõ oszlop fejléce Ez a második oszlop fejléce Elsõ oszlop, elsõ sor Második oszlop, elsõ sor Elsõ oszlop, második sor Második oszlop, második sor Példák mûveletekre Rengetegszer elõfordulhat, hogy az olvasónak valamilyen módon be kell mutatnunk miként kell egy bizonyos feladatot megoldania a rendszerben. Ezek a példák általában valamilyen párbeszédet jelentek a számítógéppel: az olvasó begépel egy parancsot, amelyre kap egy választ, majd begépel egy újabb parancsot és így tovább. Ilyen helyzetek több különbözõ elem és egyed alkalmazható. A screen elem Az olvasó a példával kapcsolatos információkat a elsõsorban képernyõrõl kapja, ennek jelölésére használjuk a screen elemet. A screen elemeken belül számít a szöveg tördelése. A prompt elem, &prompt.root; és &prompt.user; egyedek Az olvasó a képernyõn mindig valamilyen promptot is látni fog (ez lehet az operációs rendszer, a parancsértelmezõ vagy az adott alkalmazás). Ezt a prompt elemmel tudjuk jelölni. Az egyszerû felhasználó és a rendszergazda számára két külön egyed létezik a parancssori promptok jelölésére. Amikor tehát az olvasónak egy paranccsorban kell tevékenykednie, akkor a &prompt.root; vagy a &prompt.user; egyedek valamelyikét használjuk. Ezeket nem kell prompt elembe tenni. A &prompt.root; és &prompt.user; egyedek nem részei az eredeti DocBook DTD-nek, csupán a &os; kiterjesztései. A userinput elem A példában az olvasó által begépelendõ részeket tegyük userinput elemekbe. Ez az olvasó felé valószínûleg majd másképpen jelenik meg. A <sgmltag>screen</sgmltag>, <sgmltag>prompt</sgmltag> és <sgmltag>userinput</sgmltag> elemek A használat módja: &prompt.user; ls -1 ize1 ize2 ize3 &prompt.user; ls -1 | grep ize2 ize2 &prompt.user; su Password: &prompt.root; cat ize2 ]]>Ez lenne az 'ize2' nevû állomány.]]> Így jelenik meg: &prompt.user; ls -1 ize1 ize2 ize3 &prompt.user; ls -1 | grep ize2 ize2 &prompt.user; su Password: &prompt.root; cat ize2 Ez lenne az 'ize2' nevû állomány. Annak ellenére, hogy a példában szerepeltettük az ize2 állomány tartalmát, nem a programlisting elemmel jelöltük. A programlisting elemeket inkább állományrészletek jelölésében alkalmazzuk, függetlenül az olvasó részérõl várt mûveletektõl.
Belsõ elemek Az információ kiemelése Az egyes szavak vagy kifejezések kiemeléséhez alkalmazzuk az emphasis elemet. Ennek hatására a kiemelt szövegrész dõlten, esetleg félkövéren jelenik meg, illetve a különbözõ felolvasó szoftverek más hangsúlyozással mondják el. A kiemelt szövegrészek tényleges megjelenését nem tudjuk befolyásolni, nem tekinthetõ egyenlõnek a HTML b és i elemeivel. Ha fontos információt kívánunk közölni, akkor az emphasis helyett érdemesebb inkább az important elem használatát megfontolni. Az <sgmltag>emphasis</sgmltag> elem A használat módja: ]]>A &os; az Intel architektúrán kétség kívül <emphasis>a</emphasis> legjobb UNIX-szerû operációs rendszer.]]> Így jelenik meg: A &os; az Intel architektúrán kétség kívül a legjobb UNIX-szerû operációs rendszer. Idézetek Ha más dokumentumokból vagy forrásból akarunk idézni a szövegben, esetleg valamire csak képletesen szeretnénk utalni, akkor használjuk a quote elemet. A quote elemen belül a legtöbb jelölõ elérhetõ a szövegben. Idézetek A használat módja: ]]>Arra viszont ügyeljünk, hogy hogy a keresési rend ne lépje át a <quote>helyi és nyilvános adminisztráció között meghúzódó határt</quote>, ahogy azt az RFC 1535 nevezi.]]> Így jelenik meg: Arra viszont ügyeljünk, hogy hogy a keresési rend ne lépje át a helyi és nyilvános adminisztráció között meghúzódó határt, ahogy azt az RFC 1535 nevezi. Billentyûk, egérgombok és azok kombinációja A billentyûzeten egy adott billentyûre a keycap elem segítségével tudunk hivatkozni. Ugyanezt a lehetõséget az egér gombjaira vonatkozóan a mousebutton elem nyújta. A billentyûk és egérgombok együttes használatát pedig a keycombo elemmel tudjuk jelölni. A keycombo elemnek van egy action (tevékenység) nevû tulajdonsága, amely lehet click (kattintás), double-click (kettõs kattintás), other (egyéb), press (nyomva tartás), seq (egymás utáni), illetve simul (együttes használat). Az utóbbi két értékkel jelölhetjük, hogy a megadott billentyûket vagy gombokat egymás után esetleg egyszerre kell lenyomnunk. Az elemben felsorolt billentyûk és gombok nevei közé a stíluslapok automatikusan beillesztik a megfelelõ összekapcsoló szimbólumot, például a + jelet. Billentyûk, egérgombok és azok kombinációja A használat módja: ]]>A második virtuális terminálra az <keycombo action="simul"><keycap>Alt</keycap><keycap>F1</keycap></keycombo> billentyûkombinációval tudunk átváltani. ]]>A <command>vi</command> programból úgy tudunk mentés nélkül kilépni, ha begépeljük a <keycombo action="seq"><keycap>Esc</keycap><keycap>:</keycap> <keycap>q</keycap><keycap>!</keycap></keycombo> sorozatot. ]]>Az ablakkezelõt most úgy állítottuk be, hogy az <keycombo action="simul"><keycap>Alt</keycap> <mousebutton>jobb</mousebutton></keycombo> egérgomb segítségével tudjuk mozgatni az ablakokat.]]> Így jelenik meg: A második virtuális terminálra az AltF1 billentyûkombinációval tudunk átváltani. A vi programból úgy tudunk mentés nélkül kilépni, ha begépeljük az Esc: q! sorozatot. Az ablakkezelõt most úgy állítottuk be, hogy az Alt jobb egyérgomb segítségével tudjuk mozgatni az ablakokat. Alkalmazások, parancsok, kapcsolók és man hivatkozások Nem szokatlan az igény, hogy a dokumentáció írása során gyakran szeretnénk hivatkozni alkalmazásokra és parancsokra egyaránt. A két fajta elem közti különbség egyszerû: az alkalmazás az adott feladatot megvalósító programcsomag (vagy program) neve, miközben a parancs konkrétan annak a programnak a neve, amelyet az olvasó futtatni tud. Mindezek mellett alkalmanként szükségünk lehet arra, hogy a parancs által várt egy vagy több paramétert valamilyen módon felsoroljuk. Végül hozzátesszük, hogy sokszor szükségünk lehet a parancsokat a hozzájuk tartozó man oldalakkal együtt hivatkozni, a UNIX típusú kézikönyvek megszokott parancs(szám) jelölésben. Az alkalmazások neveit az application elemmel tudjuk jelölni. Ha egy parancsot a hozzá tartozó man oldallal együtt akarunk hivatkozni (amire valószínûleg az esetek nagy többségében szükségünk is lesz), akkor az ennek megfelelõ Docbook elem a citerefentry lesz. Ez további két elemet tartalmaz, ezek a refentrytitle és a manvolnum. A refentrytitle tartalma a parancs neve, illetve a manvolnum lesz a hozzá tartozó man oldal megfelelõ szekciója. Az iménti jelölések írása esetenként nehézkesnek bizonyulhat, ezért ennek megkönnyítésére létrehoztunk általános egyedeket. Az egyedek &man.man-oldal.man-szekció; alakban érhetõek el. Ezeket az egyedeket a doc/share/sgml/man-refs.ent állományban találjuk meg, amelyre a következõ formális publikus azonosító segítségével tudunk hivatkozni: PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN" Ezért tehát a dokumentumunk elején minden bizonnyal szerepelni fog egy ilyen sor: <!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [ <!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"> %man; … ]> A command elemmel a parancsok neveit tudjuk a szövegben hivatkozni közvetlenül, az olvasó által begépelendõ formában. Az option elem segítségével a parancsok számára megadható kapcsolókat jelölhetjük. Amikor többször ugyanarra a parancsra hivatkozunk egymáshoz viszonylag közel, a &man.parancs.szekció; típusú jelölést érdemes csak az elsõ hivatkozásnál alkalmazni, a többi inkább legyen egyszerûen csak command elemben. Az ebbõl készített kimenet, különösen a HTML esetében így kinézetében sokkal olvashatóbb. A jelölési megoldások közti választás ettõl függetlenül idõnként nem mindig egyértelmû, de remélhetõleg a következõ példa segít ebben. Alkalmazások, parancsok és kapcsolók A használat módja: ]]>A <application>sendmail</application> az egyik legelterjedtebb levelezõ alkalmazás UNIX rendszereken. ]]>A <application>sendmail</application> alkalmazás részei a <citerefentry> <refentrytitle>sendmail</refentrytitle> <manvolnum>8</manvolnum> </citerefentry>, &man.mailq.1; és &man.newaliases.1; programok. ]]>A <citerefentry> <refentrytitle>sendmail</refentrytitle> <manvolnum>8</manvolnum> </citerefentry> egyik kapcsolója a <option>-bp</option>, amellyel a levelezési sorban található üzenetek aktuális állapotát kérdezhetjük le. Ezt a <command>sendmail -bp</command> parancs kiadásával tehetjük meg.]]> Így jelenik meg: A sendmail az egyik legelterjedtebb levelezõ alkalmazás UNIX rendszereken. A sendmail alkalmazás részei a sendmail 8 , &man.mailq.1; és &man.newaliases.1; programok. A sendmail 8 egyik kapcsolója a , amellyel a levelezési sorban található üzenetek aktuális állapotát kérdezhetjük le. Ezt a sendmail -bp parancs kiadásával tehetjük meg. Figyeljük meg, hogy a &man.parancs.szekció; jelölés mennyivel könnyebben olvasható. Állományok, könyvtárak, kiterjesztések Amikor állományok neveire, könyvtárakra, esetleg kiterjesztésekre akarunk hivatkozni, használjunk a filename elemeket. A <sgmltag>filename</sgmltag> elem A használat módja: ]]>A kézikönyv magyar változatának SGML forrása a <filename class="directory">/usr/doc/hu_HU.ISO8859-2/books/handbook/</filename> könyvtárban található. Ebben a könyvtárban a <filename>book.sgml</filename> lesz a fõ forrásállomány. Mellette láthatunk még egy <filename>Makefile</filename> állományt és több <filename>.ent</filename> kiterjesztéssel rendelkezõ állományt.]]> Így jelenik meg: A kézikönyv magyar változatának SGML forrása a /usr/doc/hu_HU.ISO8859-2/books/handbook könyvtárban található. Ebben a könyvtárban a book.sgml lesz a fõ forrásállomány. Mellette találhatunk még egy Makefile állományt és több .ent kiterjesztéssel rendelkezõ állományt. A portok nevei A &os; kiterjesztése Ezek az elemek a &os; DocBookhoz készített kiterjesztéseinek részei, az eredeti DocBook DTD-ben nem szerepelnek. Esetenként szükségünk lehet a &os; Portgyûjteményében található bizonyos programok nevének megemlítésére a dokumentációban. Ezt a filename elem role tulajdonságának a package értékre állításával tehetjük meg. Mivel a Portgyûjtemény tetszõleges helyre telepíthetõ, ezért mindig csak a port kategóriáját és nevét adjuk meg, a /usr/ports rész elhagyásával. A <sgmltag>filename</sgmltag> elem és a <literal>package</literal> role együttes használata A használat módja: ]]>A hálózati forgalom figyeléséhez telepítsük a <filename role="package">net/ethereal</filename> portot.]]> Így jelenik meg: A hálózati forgalom figyeléséhez telepítsük a net/ethereal portot. Eszközök A &os; kiterjesztése Ezek az elemek a &os; DocBookhoz készített kiterjesztéseinek részei, az eredeti DocBook DTD-ben nem szerepelnek. Az eszközök hivatkozását két módon jelölhetjük. Az eszközre hivatkozhatunk a /dev könyvtárban megjelenõ neve szerint, vagy pedig a rendszermagbeli neve szerint. Ez utóbbi esetben használjuk a devicename jelölést. Néha elõfordulhat, hogy nincs választási lehetõségünk. Bizonyos eszközök, például a hálózati kártyákhoz nem tartozik semmilyen bejegyzés a /dev könyvtárban, esetleg az ott megjelenõ nevük teljesen eltér. A <sgmltag>devicename</sgmltag> elem A használat módja: ]]>A &os; rendszermagjában a <devicename>sio</devicename> eszközöket a soros vonali kommunikációra használjuk. A <devicename>sio</devicename> eszközök az idõk során több különbözõ alakban jelentek meg a <filename>/dev</filename> könyvtárban, például <filename>/dev/ttyd0</filename> és <filename>/dev/cuaa0</filename> néven. ]]>Ezzel szemben a hálózati eszközök, mint például az <devicename>ed0</devicename> nem jelennek meg a <filename>/dev</filename> könyvtárban. ]]>Az MS-DOS rendszerekben az elsõdleges hajlékonylemezes meghajtót az <devicename>a:</devicename> néven érhetjük el, miközben &os; alatt ennek a neve <filename>/dev/fd0</filename>.]]> Így jelenik meg: A &os; rendszermagjában a sio eszközöket a soros vonali kommunikációra használjuk. A sio eszközök az idõk során több különbözõ alakban jelentek meg a /dev könyvtárban, például /dev/ttyd0 és /dev/cuaa0 néven. Ezzel szemben a hálózati eszközök, mint például az ed0 nem jelennek meg a /dev könyvtárban. Az MS-DOS rendszerekben az elsõdleges hajlékonylemezes meghajtót az a: néven érhetjük el, miközben &os; alatt ennek a neve /dev/fd0. Hálózati nevek, tartományok, IP-címek és így tovább A &os; kiterjesztése Ezek az elemek a &os; DocBookhoz készített kiterjesztéseinek részei, az eredeti DocBook DTD-ben nem szerepelnek. A vonatkozó információ jellegétõl függõen a hálózatba kapcsolt számítógépek azonosítására szolgáló adatatokat többféle módon is jelölni tudjuk. Minden esetben a hostid elemre fogunk támaszkodni, amely role tulajdonságával tudjuk megválasztani a jelölt információ típusát. Nem szerepel a role tulajdonság vagy role="hostname" A role tulajdonság megadása nélkül (vagyis az elem hostid/hostid alakú) a jelölt információ egy hálózati név, mint például freefall vagy disznohal. Ugyanezt explicit módon a role="hostname" hozzáadásával tudjuk jelölni. role="domainname" Az elem tartalma egy tartomány nevét jelöli, mint például FreeBSD.org vagy inf.elte.hu. Ekkor nincs benne konkrét hálózati név. role="fqdn" Az elem tartalma egy teljes hálózati név, amely már tartalmaz tartománynevet és hálózati nevet. role="ipaddr" Az elem egy IP-címet jelöl, négy, pontokkal tagolt szám formájában. role="ip6addr" Az elem egy IPv6 formátumú IP-címet jelöl. role="netmask" Az elem tartalma egy hálózati maszk, amelyet megadhatunk pontokkal elválasztott számokkal, hexadecimális számjegyekkel vagy a / szimbólumot követõen egy számmal. role="mac" Az elemben egy Ethernet MAC-címet adtunk meg, kétjegyû hexadecimális számok kettõspontokkal tagolt sorozataként. A <sgmltag>hostid</sgmltag> elem és a különbözõ role értékek A használat módja: ]]>A gépünk mindig elérhetõ <hostid>localhost</hostid> néven, amelyhez a <hostid role="ipaddr">127.0.0.1</hostid> IP-cím tartozik. ]]>A <hostid role="domainname">FreeBSD.org</hostid> tartomány több különbözõ gépet foglal magában, többek közt a <hostid role="fqdn">freefall.FreeBSD.org</hostid> és <hostid role="fqdn">pointyhat.FreeBSD.org</hostid> címeket. ]]>Amikor egy interfészhez IP-álnéveket társítunk (az <command>ifconfig</command> paranccsal), akkor ehhez <emphasis>mindig</emphasis> a <hostid role="netmask">255.255.255.255</hostid> hálózati maszkot adjuk meg (amelyet <hostid role="netmask">0xffffffff</hostid> formában is írhatunk). ]]>A MAC-cím az összes létezõ hálózati eszközt egyértelmûen azonosítja. A MAC-címek általában a <hostid role="mac">08:00:20:87:ef:d0</hostid> címhez hasonlóak.]]> Így jelenik meg: A gépünk mindig elérhetõ localhost néven, amelyhez a 127.0.0.1 IP-cím tartozik. A FreeBSD.org tartomány több különbözõ gépet foglal magában, többek közt a freefall.FreeBSD.org és pointyhat.FreeBSD.org címeket. Amikor egy interfészhez IP-álnéveket társítunk (az ifconfig paranccsal), akkor ehhez mindig a 255.255.255.255 hálózati maszkot adjuk meg (amelyet 0xffffffff formában is írhatunk). A MAC-cím az összes létezõ hálózati eszközt egyértelmûen azonosítja. A MAC-címek általában a 08:00:20:87:ef:d0 címhez hasonlóak. Felhasználói nevek A &os; kiterjesztése Ezek az elemek a &os; DocBookhoz készített kiterjesztéseinek részei, az eredeti DocBook DTD-ben nem szerepelnek. Ha felhasználókra (például root vagy bin) kell hivatkoznunk a szövegben, használjuk a username elemet. A <sgmltag>username</sgmltag> elem A felhasználás módja: ]]>A rendszerünk karbantartásával kapcsolatos legtöbb feladatot kizárólag csak a <username>root</username> felhasználóval tudjuk elvégezni.]]> Így jelenik meg: A rendszerünk karbantartásával kapcsolatos legtöbb feladatot kizárólag csak a root felhasználóval tudjuk elvégezni. A <filename>Makefile</filename> állományokkal kapcsolatos jelölések A &os; kiterjesztése Ezek az elemek a &os; DocBookhoz készített kiterjesztéseinek részei, az eredeti DocBook DTD-ben nem szerepelnek. A Makefile állományok egyes részeinek jelöléséhez a maketarget és makevar elemeket tudjuk használni. A maketarget azokat a Makefile állományokban megadott fordítási célokat azonosítja, amelyeket a make paramétereként lehet használni. A makevar pedig azokat a (környezetben, a make hívásakor vagy a Makefile állományon belül definiált) változókat azonosítja, amelyekkel a fordítás folyamát lehet szabályozni. A <sgmltag>maketarget</sgmltag> és a <sgmltag>makevar</sgmltag> elemek A használat módja: ]]>A <filename>Makefile</filename> állományokban két igen gyakori cél az <maketarget>all</maketarget> és a <maketarget>clean</maketarget>. ]]>Az <maketarget>all</maketarget> megadásakor általában újrafordítjuk az alkalmazást, a <maketarget>clean</maketarget> megadásakor pedig eltávolítjuk a fordítás közben keletkezett ideiglenes állományokat (például az <filename>.o</filename> állományokat). ]]>A <maketarget>clean</maketarget> viselkedését számos változó befolyásolja, többek közt a <makevar>CLOBBER</makevar> és a <makevar>RECURSE</makevar>.]]> Így jelenik meg: A Makefile állományokban két igen gyakori cél az all és a clean. Az all megadásakor általában újrafordítjuk az alkalmazást, a clean megadásakor pedig eltávolítjuk a fordítás közben keletkezett ideiglenes állományokat (például az .o állományokat). A clean viselkedését számos változó befolyásolja, többek közt a CLOBBER és a RECURSE. Formázatlan szöveg Sokszor lehet szükségünk formázatlan szövegekre a dokumentáció írása közben. Ilyen szöveg jellemzõ módon egy valamelyik másik állományból átvett részlet, vagy amelyet magából a dokumentációból kell szó szerint átmásolni egy állományba. Néhány esetben a korábban már bemutatott programlisting pontosan elegendõ ehhez a feladathoz. Azonban ez a jelölési módszer nem minden esetben megfelelõ, különösen olyan helyzetekben, amikor az állomány egy részét magába a bekezdésbe akarjuk tenni. Ilyen alkalmakkor használjuk a literal elemet. A <sgmltag>literal</sgmltag> elem A használat módja: ]]>A rendszermag konfigurációs állományában a <literal>maxusers 10</literal> sor határozza meg különbözõ rendszerszintû táblázatok méretét, és ezáltal ad egy durva becslést arra, hogy a rendszerünk mennyi bejelentkezést lesz képes egyszerre kezelni.]]> Így jelenik meg: A rendszermag konfigurációs állományában a maxusers 10 sor határozza meg különbözõ rendszerszintû táblázatok méretét, és ezáltal ad egy durva becslést arra, hogy a rendszerünk mennyi bejelentkezést lesz képes egyszerre kezelni. Az olvasó által <emphasis>kötelezõen</emphasis> kitöltendõ részek jelölése Minden bizonnyal lesznek olyan részek a dokumentációban, ahol meg szeretnénk mutatni az olvasónak mit kell csinálnia, esetleg hivatkozni akarunk egy állomány nevére vagy egy parancsra stb., viszont nem közvetlenül a megadott nevet kell bemásolnia, hanem önmagától kell kipótolnia egy sémát. Pontosan ilyen eshetõségekre találták ki a replaceable elemet. Más elemeken belül használva olyan részeket tudunk vele megjelölni, amelyeket az olvasónak kell kitöltenie. A <sgmltag>replaceable</sgmltag> elem A használat módja: &prompt.user; man ]]>parancs]]> Így jelenik meg: &prompt.user; man parancs A replaceable több különbözõ elemen belül is alkalmazható, egyik ilyen a literal. Ebben a példában azt is megmutatjuk, hogy a replaceable elembe ténylegesen csak azt a részt kell tennünk, amelyet az olvasónak kell hozzátennie, rajta kívül semmi mást nem kell megváltoztatnia. A használat módja: ]]>A rendszermag konfigurációs állományában a <literal>maxusers <replaceable>n</replaceable></literal> sor határozza meg különbözõ rendszerszintû táblázatok méretét, és ezáltal ad egy durva becslést arra, hogy a rendszerünk mennyi bejelentkezést lesz képes egyszerre kezelni. ]]>Asztali munkaállomások esetén az n helyére írhatjuk például a <literal>32</literal> értéket.]]> Így jelenik meg: A rendszermag konfigurációs állományában a maxusers n sor határozza meg különbözõ rendszerszintû táblázatok méretét, és ezáltal ad egy durva becslést arra, hogy a rendszerünk mennyi bejelentkezést lesz képes egyszerre kezelni. Asztali munkaállomások esetén az n helyére írhatjuk például a 32 értéket. Hibaüzenetek idézése Olykor szükségünk lehet a &os; által jelzett hibák jelölésére. A hibák során keletkezõ pontos hibaüzeneteket tegyük errorname elemekbe. Az <sgmltag>errorname</sgmltag> elem A használat módja: Panic: cannot mount root]]> Így jelenik meg: Panic: cannot mount root Képek A dokumentációban a képek használatának támogatása jelen pillanatban még csak kísérleti jellegû. Az itt leírt ismeretek valószínûleg nem fognak változni, de nem szavatoljuk. A különféle képformátumok közti átalakításokhoz még telepítenünk kell a graphics/ImageMagick portot. Ez egy nagy méretû port és a legtöbb részére nincs is konkrétan szükségünk, viszont jelentõsen meg tudja könnyíteni a dolgunkat, amikor Makefile állományokkal és egyéb infrastrukturális elemekkel dolgozunk. Ez a port nem része a textproc/docproj metaportnak, külön kell egyedileg telepítenünk. A képek használatára talán a legjobb példát a doc/en_US.ISO8859-1/articles/vm-design szolgáltatja. Ha tehát nem értenénk teljesen a szakaszban leírtakat, nézzük meg ezt az állományt és a gyakorlatban is látni fogjuk hogyan kapcsolódnak össze az felhasznált elemek. Ne restelljünk kísérletezgetni a különbözõ formázási stílusokkal, így láthatjuk miként jelennek meg a jelölt képek a formázott kimenetben. Képformátumok Jelenleg kétféle képformátum támogatott. A beillesztendõ kép jellegétõl függ, hogy ezek közül ténylegesen melyiket kell majd használnunk a dokumentumban. Az alapvetõen vektoros szerkezetû képeket, mint például a hálózati kapcsolatokat bemutató diagramokat, idõvonalakat és ehhez hasonlókat Encapsulated Postscript formátumban érdemes ábrázolnunk. Gondoskodjunk róla, hogy ezek a képek .eps kiterjesztéssel rendelkezzenek. A raszteres képeket, mint például a képernyõ elmentett tartalmát Portable Network Graphic formátumban készítsük el. Figyeljünk rá, hogy az ilyen típusú képek kiterjesztése mindig .png legyen. Ezek tehát kizárólagosan azok a formátumok, amelyek bekerülhetnek a repositoryba. A képekhez mindig válasszuk a megfelelõ formátumot, teljesen elfogadott a dokumentációban az EPS és PNG formátumú képek vegyes alkalmazása. A Makefile állományok gondoskodni fognak a képek formátumuknak megfelelõ szabályos feldolgozásáról. Ugyanazt a képet a repositoryban ne tároljuk el mind a két formátumban! A Dokumentációs Projekt elõreláthatólag a jövõben majd a vektoros képek ábrázolására a Scalable Vector Graphic (SVG) formátumot fogja használni, azonban jelenleg még nem állnak rendelkezésre olyan SVG szerkesztõk, amelyek ezt a gyakorlatban is hatékonnyá tennék. Jelölések A képek jelölése viszonylag egyszerû. Elõször is készítsünk egy mediaobject elemet. A mediaobject elembe ezután további, pontosabban specifikáló objektumokat helyezhetünk el. Most két ilyen elemmel foglakozunk, ezek az imageobject és a textobject. Egy imageobject és két textobject elemet kell megadnunk. Az imageobject a beilleszteni kívánt kép nevére fog hivatkozni (kiterjesztés nélkül). A textobject elemekben olyan információ szerepel, amelyet az olvasó a kép mellett vagy éppen helyett fog látni a dokumentumban. Ilyen két esetben fordulat elõ: A dokumentum HTML változatát olvassuk. Ekkor minden képhez szükség van még egy helyettesítõ szövegre, amelyet a kép betöltõdésekor láthatunk, vagy amikor az egérmutatót a kép felé visszük. A dokumentumot nyers szöveges formátumban olvassuk. Ekkor a kép ASCII karakterekbõl kirakott változatát kellene látnia az olvasónak. Egy példán keresztül mindez valószínûleg sokkal könnyebben érthetõvé válik. Tegyük tehát most fel, hogy van egy abra1 nevû képünk, amelyet szeretnénk betenni a dokumentumba. Ez a kép egy A betût ábrázol egy téglalapban. A hozzá tartozó jelölés a következõ lesz: <mediaobject> <imageobject> <imagedata fileref="abra1"> </imageobject> <textobject> <literallayout class="monospaced">+---------------+ | A | +---------------+</literallayout> </textobject> <textobject> <phrase>Egy kép</phrase> </textobject> </mediaobject> Helyezzünk el egy imagedata elemet az imageobject elembe. A fileref tulajdonságban kell megadnunk kiterjesztés nélkül a képhez tartozó állomány nevét. A stíluslapok maguktól megállapítják a neki megfelelõ kiterjesztést. Az elsõ textobject elemben szerepelnie kell egy literallayout elemnek, ahol a class tulajdonság értéke monospaced legyen. Itt tudjuk megmutatni milyen jól tudunk ASCII karakterekkel rajzolni. Ezt a dokumentum nyers szöveges változatának elõállításakor fogjuk felhasználni. A literallayout elem belsejének elsõ és utolsó sorában megfigyelhetjük, hogy közvetlenül a szöveges ábra mellett kezdõdnek, így garantálhatjuk, hogy semmilyen további felesleges szóköz nem jelenik meg a generált változatban. A második textobject elemben egy phrase elemnek kell lennie. Ennek tartalma lesz a HTML változatban a képhez tartozó alt tulajdonság értéke. A <filename>Makefile</filename> felépítése A Makefile állományokban az IMAGES változóban kell felsorolnunk a dokumentumhoz tartozó képeket. Ebben a változóban kell megadnunk a képek forrását. Tehát például, ha van három ábránk, név szerint az abra1.eps, abra2.png és abra3.png, akkor ennek megfelelõen a Makefile állománynak a következõ sorokat kellene tartalmaznia: … IMAGES= abra1.eps abra2.png abra3.png … vagy … IMAGES= abra1.eps IMAGES+= abra2.png IMAGES+= abra3.png … A Makefile magától el fogja készíteni a dokumentum lefordításához szükséges képek teljes listáját, nekünk egyedül tehát csak azokat a képeket kell megadnunk, amelyeket mi készítettünk. Képek és fejezetek alkönyvtárakban Nem árt óvatosnak lennünk, amikor a dokumentumunkat kisebb állományokra bontjuk szét (lásd ) több különbözõ alkönyvtárban. Tegyük fel, hogy van egy három fejezetbõl álló könyvünk, ahol az egyes fejezeteket a saját könyvtáraikban tároljuk: fejezet1/fejezet.sgml, fejezet2/fejezet.sgml és fejezet3/fejezet.sgml. Ha az egyes fejezetekhez képeket akartunk társítani, akkor javasolt ezeket a fejezetek alkönyvtárába (fejezet1, fejezet2, fejezet3) tennünk. Ekkor azonban ne felejtsük el, hogy a Makefile állomány IMAGES változójában és az imagedata elemekben is a könyvtárak neveivel együtt kell hivatkoznunk a képekre. Például a fejezet1/abra.png kép esetében a fejezet1/fejezet.sgml állományban a következõt kell megadnunk: <mediaobject> <imageobject> <imagedata fileref="fejezet1/abra1"> </imageobject> … </mediaobject> A könyvtár nevét is meg kell adnunk a fileref tulajdonságban. Az ennek megfelelõ Makefile állomány tartalma: … IMAGES= fejezet1/fejezet1.png … Ezzel már minden remekül mûködik. Hivatkozások A hivatkozások is belsõ elemek. Hivatkozás ugyazon a dokumentumon belül A dokumentum belül úgy tudunk hivatkozásokat készíteni, ha egyrészt megadjuk honnan hivatkozunk (tehát szükségünk lesz egy olyan elemre, amelyre az olvasó kattinthat vagy megjelölhetõ a hivatkozás forrásaként), másrészt megadjuk hova hivatkozunk (tehát a célt). A DocBook összes eleme rendelkezik egy id tulajdonsággal, amelyben az adott elem adott példányához tudunk kapcsolni egy egyedi azonosítót. Ezt az értéket kell megadnunk a hivatkozás forrásának megjelölésekor. Általában tehát amikor fejezeteket vagy szakaszokat hivatkozunk, érdemes felvennünk hozzájuk egy id tulajdonságot. Az <literal>id</literal> tulajdonság fejezeteknél és szakaszoknál ]]>Bevezetés<![ CDATA [ ]]>Ez a bevezetés. Ebben szerepel egy szintén azonosítóval rendelkezõ alszakasz. ]]>Elsõ alszakasz<![ CDATA [ ]]>Ez az alszakasz. ]]> A dokumentáció írásakor nyilván ennél beszédesebb azonosítókat lesz majd érdemes kitalálnunk. Mindig ügyeljünk arra, hogy az azonosítóknak egyedieknek kell lenniük a dokumentumban (tehát nem csak az adott állományon, hanem a teljes dokumentum belül). Figyeljük meg hogyan képeztük a példában az alszakasz id tulajdonságát a fejezet id tulajdonságának értékébõl. Ezzel szavatoltuk az azonosító egyediségét. Ha a dokumentum valamelyik közbensõ elemére (jellemzõen egy bekezdés vagy egy példa közepére) akarunk hivatkozni, akkor használjuk az anchor elemet. Ennek az elemnek nincs tartalma, azonban rendelkezik id tulajdonsággal. Az <sgmltag>anchor</sgmltag> elem ]]>Ebben a bekezdésben elrejtettünk egy <anchor id="bekezd">hivatkozás forrását. Ez a dokumentumban nem fog látszani.]]> Ha a dokumentum egy id tulajdonsággal rendelkezõ részére szeretnénk létrehozni egy hivatkozást (amelyet például kattintással el lehet érni), akkor használjuk az xref vagy link elemeket. Mind a két imént említett elemnek van egy linkend tulajdonsága. Ennek az értéke lényegében ugyanaz lesz, amelyet a hivatkozás forrásában az id tulajdonság értékének megadtunk (nem számít, hogy ez szerepelt-e már a dokumentumban a hivatkozás helye elõtt, mert elõre és visszafele is lehet hivatkozni). Az xref elem használatakor a hivatkozás szövege magától jön létre, nem tudjuk befolyásolni. Az <sgmltag>xref</sgmltag> elem Tegyük fel, hogy felbukkan a következõ szövegrészlet valahol a dokumentumban, amely hivatkozik a korábbi id tulajdonságot bemutató példánk azonosítóira: ]]>A témával kapcsolatos részleteket az <xref linkend="fejezet1"> foglalja össze. ]]>További részleteket pedig a <xref linkend="fejezet1-szakasz1"> tár fel.]]> Ekkor tehát a hivatkozás szövege magától létrejön, így a következõ szöveget kapjuk (a kiemelt rész jelzi a hivatkozás szövegét):
A témával kapcsolatos részleteket az Elsõ fejezet foglalja össze. További részleteket pedig az Elsõ alszakasz tár fel.
Figyeljük meg hogyan képezõdött a fejezet számából vagy a szakasz címébõl a megfelelõ hivatkozás. Az iméntiekbõl következik, hogy az xref elemmel nem lehet anchor elemek id tulajdonságaira hivatkozni. Az anchor elemben nincs semmi, ezért az xref nem képes magától létrehozni hozzá a hivatkozás szövegét. Ha szeretnénk kézzel megadni a hivatkozások szövegét, akkor használjuk a link elemet, amelynek a tartalmában szerepeltethetjük ezt. A <sgmltag>link</sgmltag> elem Tegyük fel, hogy a következõ szövegrészlet jelenik meg valahol a dokumentumnkban, és az id tulajdonságot bemutató példában definiált azonosítókra hivatkozik. ]]>Errõl bõvebb tájékoztatást <link linkend="fejezet1">az elsõ fejezetben</link> kapunk. ]]>Errõl a részrõl pedig <link linkend="fejezet1-szakasz1">ebben</link> a szakaszban olvashatunk többet.]]> Ez a következõképpen jelenik meg (ahol a kiemelt szövegek jelzik a hivatkozásokat magukat):
Errõl bõvebb tájékoztatást az elsõ fejezetben kapunk. Errõl a részrõl pedig ebben a szakaszban olvashatunk többet.
Ez utóbbi nem teljesen egy jó példa. Lehetõleg ne ebben vagy itt néven hivatkozzunk, mert az olvasó így nem fogja közvetlenül látni, hogy az adott hivatkozás pontosan hova is viszi. A link elemmel már tudunk hivatkozni anchor elemek id tulajdonságaira, hiszen a link elemben már megadható a hivatkozás szövege.
A Világhálón található dokumentumok hivatkozása A külsõ dokumentumok hivatkozása valamennyivel könnyebb a belsõ hivatkozások használatánál, mivel ehhez csak annyit kell tudunk, milyen címre akarunk mutatni. Erre az ulink elem alkalmas. Rendelkezik egy url tulajdonsággal, amelyben a hivatkozni kívánt oldal címét kell megadnunk. Az elem belsejében pedig a hivatkozás olvasó felé megjelenõ szövegét adhatjuk meg. Az <sgmltag>ulink</sgmltag> elem A használat módja: ]]>Természetesen már most felhagyhatunk a dokumentum olvasásával és helyette megnézhetjük a <ulink url="&url.base;/index.html">&os; honlapját</ulink>.]]> Így jelenik meg: Természetesen már most felhagyhatunk a dokumentum olvasásával és helyette megnézhetjük a &os; honlapját.
diff --git a/hu_HU.ISO8859-2/books/fdp-primer/sgml-primer/chapter.sgml b/hu_HU.ISO8859-2/books/fdp-primer/sgml-primer/chapter.sgml index 31d81317fe..968347a277 100644 --- a/hu_HU.ISO8859-2/books/fdp-primer/sgml-primer/chapter.sgml +++ b/hu_HU.ISO8859-2/books/fdp-primer/sgml-primer/chapter.sgml @@ -1,2127 +1,2128 @@ SGML alapismeretek Az FDP keretében készített dokumentációk többsége az SGML valamilyen alkalmazásában íródik. Ebben a fejezetben részletesebben kifejtjük a mögötte álló fogalmakat, a dokumentumok alapjául szolgáló források megértését és írását, illetve a dokumentáció forrásainak tanulmányozása során elõkerülõ különféle SGML-trükköket. A bemutatás alapjául szolgáltak Mark Galassi Get Going With DocBook címû írásának egyes részei. Áttekintés A kezdeti idõkben még viszonylag könnyen el lehetett boldogulni az elektronikus formában tárolt szövegekkel. Elegendõ volt csupán annyit tudni., hogy az adott írást milyen karakterkódolással készítették (ez lehetett ASCII, EBCDIC vagy éppen valami más). A szöveg nem volt több mint egyszerû szöveg, és közvetlenül a végleges formáját adta. Semmi csel, semmi formázás, semmi hozzáadott értelem. Ezen a fokon aztán elkerülhetetlen módon tovább kellett lépni. Hiszen ha egyszer a szöveges információkat egy számítógép által kezelhetõ alakban tároljuk, akkor jogosan elvárhatjuk, hogy az képes legyen felhasználni és értelmesen feldolgozni. Szeretnénk a szöveg bizonyos részeit például kiemelni, felvenni egy szójegyzékbe, vagy éppen hivatkozással ellátni. Az állományok neveit a képernyõn írógépszerû, a nyomtatásban viszont már dõltbetûs stílusban szeretnénk látni, nem is beszélve a szöveg megjelenésének számtalan egyéb módjáról. Egy idõben a Mesterséges Intelligencia (MI) megjelenésétõl várták a megváltást ezen a területen. A számítógépünk majd szépen beolvassa az általunk írt dokumentumot és magától felismeri a fontosabb kulcsszavakat, állományneveket, a felhasználó által begépelendõ szövegeket, a példákat és így tovább. Sajnálatosan azonban a valóságban ez még egyáltalán nem valósult meg, a számítógépeknek ezért szükségünk van némi segítségre a szöveges adatok értelmes feldolgozásában. Pontosabban úgy fogalmazhatnánk, hogy segítenünk kell nekik az egyes elemek beazonosításában. Nézzük meg például ezt a szöveget:
Az &man.rm.1; parancs használatával töröljük a /tmp/ize állományt: &prompt.user; rm /tmp/ize
Emberi szemmel könnyedén fel tudjuk ismerni benne az állományneveket, a parancsokat, a man oldalak hivatkozásait és így tovább, azonban a számítógép erre önállóan nem képes. Ezért lesz szükségünk jelölõkre. A jelölõ szó eredetijét (markup) gyakran olyan értelemben használják mint haszonkulcs vagy kockázati pótlék. Kevés elvonatkoztatással ugyanez lényegében alkalmazható a szövegek esetében is. A jelölõk a dokumentumban szereplõ kiegészítõ, hasznos, az azonosítás kockázatát csökkentõ, a szöveg többi részétõl egyértelmûen megkülönböztethetõ további szöveges információkat jelentik. Ezek alapján a programok a dokumentumok feldolgozása során képesek önállóan meghozni bizonyos döntéseket. A szövegszerkesztõk el tudják rejteni ezeket a többletinformációkat az olvasók elõl, így azok egyáltalán nem zavarják õket. A jelölõkben tárolt adatok tehát növelik a dokumentumok hasznát. A jelölõk hozzáadását, a szöveg bejelölését értelemszerûen emberek végzik, hiszen ha erre a számítógépek is képesek lennének, akkor nem is lenne rájuk egyáltalán szükség. Ezzel azonban pótlékot kell nyújtanunk (vagyis további költségeket ráfordítanunk) a dokumentumok megírásához. Az elõzõ példában szereplõ szöveget ennek megfelelõen a következõ módon írjuk meg: Az &man.rm.1; parancs használatával töröljük a /tmp/ize állományt: &prompt.user; rm /tmp/ize]]> Láthatjuk, hogy a jelölõk nagyon jól elkülöníthetõek a szöveg tartalmától. A jelölõk használatához nyilvánvalóan valamilyen módon meg kell határoznunk, hogy az adott jelölõk mit jelentenek és hogyan kell azokat értelmezni. A jelölõk összefogásához tehát szükségünk van egy ún. jelölõnyelvre, amely alapján aztán jelölni fogjuk a dokumentumainkat. Ehhez természetesen egyetlen jelölõnyelv önmagában még nem feltétlenül lesz elég. A szaknyelven íródott dokumentációkhoz igazított jelölõnyelvvel szemben teljesen másak az elvárásaink, mint például a receptek leírásához használt nyelv esetében, ez pedig megint más, mint amivel verseket tudunk jelölni. Elõször tehát egy olyan nyelvet kell megfogalmaznunk, amely ilyen jelölõnyelvek elõírására használható. Ezt nevezzük a jelölõnyelvek jelölõnyelvének, vagyis a meta-jelölõnyelvnek. Az SGML, avagy Standard Generalized Markup Language (Szabványos Általánosított Jelölõnyelv) pontosan egy ilyen nyelv. Számos jelölõnyelv készült az SGML segítségével, többek közt az FDP által leginkább használt HTML és DocBook. Az egyes nyelvek részletes leírását hivatalosan dokumetumtípus-definíciónak (Documentum Type Definition, DTD) nevezik. A DTD felhasználásával adhatjuk meg a szövegben jelölõként alkalmazható elemeket, azok sorrendjét (vagy éppen egymásba ágyazhatóságának mikéntjét) és a hozzájuk kapcsolódó egyéb információkat. A DTD-ket gyakran csak úgy említik mint az SGML alkalmazásait. A DTD tartalmazza az összes felhasználható elem leírását, azok használatának sorrendjét, megadja, hogy ezek közül melyeknek kell szerepelniük, illetve melyek hagyhatóak el és így tovább. Ennek köszönhetõen készíthetõ egy olyan SGML alapján mûködõ elemzõ, amely a DTD és egy dokumentum birtokában képes megállapítani, hogy az adott dokumentum megfelel-e a DTD által meghatározott szabályoknak: a benne szereplõ elemek a megfelelõ sorrendben vannak, esetleg tartalmaznak hibákat. Ezt a lépést nevezik általában a dokumentum érvényesítésének. Az ellenõrzés folyamán egyszerûen annyi történik, hogy az elemzõ a megadott DTD alapján jóváhagyja a dokumentumban feltüntetett elemeket, azok rendezettségét és a többit. A jelölõk helyes használatát azonban nem vizsgálja. Ha éppen függvénynévként jelöljük be a szövegben megjelenõ állományok neveit, akkor az elemezõ ezt nem fogja hibának tekinteni (ekkor természetesen feltételezzük, hogy a DTD definiálja az állomány- és függvénynevek jelölésére alkalmas elemeket, illetve ezek ugyanazokon a helyeken szerepelhetnek). A Dokumentációs Projekt számára beküldött munkáinkban jó eséllyel a HTML vagy a DocBook nyelvek valamelyike szerint kell dokumentumokat megjelölnünk, és nem kell a DTD módosításával foglalkoznunk. Ennélfogva ez a leírás sem tér ki a DTD írásának részleteire.
Elemek, címkék és tulajdonságok Az SGML használatával készített dokumentumtípus-definíciók mindegyikének vannak közös jellemzõi. Ez viszont aligha lesz számunkra meglepõ, ahogy majd fokozatosan megismerkedünk az SGML kialakítása mögött álló alapvetõ gondolatokkal. Ezek közül a legkézenfekvõbbek a tartalom és az elem. A dokumentáció minden esetben (legyen az most egy normál honlap vagy éppen egy vaskos könyv) rendelkezik valamilyen tartalommal, amelyet aztán tovább (esetleg még tovább) osztunk elemekre. A jelölõk elhelyezésének ezen elemek határainak kijelölésében és elnevezésében van szerepe a feldolgozás késõbbi szakaszaiban. Ehhez példaként tekintsünk egy hagyományos könyvet. A legfelsõ szinten ez a könyv önmagában egy elemet képvisel. Ez a könyv elem aztán magától értetõdõ módon tartalmaz fejezeteket, amelyek szintén önálló elemeknek tekinthetõek. Minden ilyen fejezet további elemeket foglal magában, például bekezdéseket, idézeteket és lábjegyzeteket. Minden egyes bekezdésben találhatunk újabb elemeket, amelyek elárulják nekünk, hogy a bennük szereplõ szövegben melyik részében beszélnek egymással a szereplõk, vagy éppen hogy hívják az egyes karaktereket. Az egészet úgy képzelhetjük el mint a tartalom feldarabolását. A legfelsõ szinten adott egy darab, maga a könyv. Ahogy haladunk kicsivel lentebb, újabb darabokat találunk, a fejezeteket. Ezeket aztán tovább bomlanak bekezdésekre, lábjegyzetekre, a karakterek neveire és a többi. Meglepõ, hogy az SGML lehetõségeinek igénybevétele nélkül milyen könnyen különbséget tudunk tenni az egyes elemek közt. Ehhez valójában elegendõ a könyv nyomtatott változata, néhány különbözõ színû kiemelõ, amelyekkel aztán bejelöljük a tartalom egyes részeit. Sajnos a kiemelõknek nem létezik elektronikus változata, ezért találnunk kell valamilyen egyéb módot a tartalom egyes részeinek megjelölésére. Az SGML-ben megfogalmazott nyelvek (HTML, DocBook és társaik) ezt címkékkel oldják meg. A címkékkel mondhatjuk meg hol kezdõdnek és hol fejezõdnek be az egyes elemek. A címke nem az elem része. Mivel a DTD általában azért készül, hogy a szövegben adott típusú információkat tudjunk jelölni, adott típusú elemeket fog elfogadni, ezért ezeknek megfelelõen kell címkéket létrehoznunk. Egy elem elemhez tartozó kezdõcímke általános alakja az elem. Az hozzá tartozó zárócímke pedig az /elem. Elem (kezdõ- és zárócímkék) használata A HTML-ben a bekezdéseket a p (mint paragrafus) elemmel jelölhetjük. Ehhez az elemhez tartozik kezdõ- és zárócímke. ]]>Ez egy bekezdés. A 'p' elem kezdõcímkéjétõl indul és a 'p' zárócímkéjénél fejezdõdik be.

]]>Ez meg egy másik bekezdés. Ez viszont már rövidebb.]]> Nem mindegyik elemnél kell zárócímkét használnunk, egyes elemekhez ugyanis nem járul semmilyen tartalom. Például egy HTML állományban jelölhetjük, hogy legyen a dokumentumban egy vízszintes elválasztó. Ehhez a vonalhoz értelemszerûen nem kapcsolódik tartalom, ezért elég egy kezdõcímkét beszúrni. Elem (csak kezdõcímke) használata A HTML-ben van egy hr nevû elem, amellyel vízszintes elválasztókat (horizontal rule) jelölhetünk. Ennek az elemnek nincs tartalma, ezért csak kezdõcímkével rendelkezik. ]]>Ez itt egy bekezdés.


]]>Ez pedig egy másik bekezdés. Az elõzõ bekezdéstõl egy vízszintes vonal választja el.]]> Ha eddig még nem sejtettük volna, megemlítjük, hogy az elemek természetesen elemeket is tartalmazhatnak. A korábbi könyves példánkban a könyv elem magában foglalta az összes fejezet elemet, amelyek pedig a bekezdés elemeket és így tovább. Elemek elemekben, az <sgmltag>em</sgmltag> elem ]]>Ez egy egyszerû ]]>bekezdés]]>, amelyben néhány ]]>szót]]> szépen ]]>kiemeltünk.

]]>
A DTD pontosan tartalmazza mely elemek tartalmazhatnak további elemeket, valamint az elemek egymásba ágyazhatóságának szabályait. Az emberek gyakran összetévesztik a címkéket az általuk jelölt elemekkel, és egymás szinonímájaként használják ezeket a kifejezéseket. Ez viszont helytelen. A dokumentumokat elemekbõl építjük fel. Minden elem elõre meghatározott módon kezdõdik és fejezõdik be. Az elemek kezdetét és végét címkék jelölik. Amikor ez a dokumentum (vagy bárki, az SGML használatában járatos személy) a p címkére hivatkozik, akkor ez alatt a <, p, > karakterekbõl álló sorozatot érti. Ezzel szemben viszont a p a teljes elemre vonatkozik. Ez egy nagyon kicsi eltérés, de mindig tartsuk észben! Az elemeknek lehetnek tulajdonságaik. A tulajdonságokat nevek és értékek párosai alkotják, segítségükkel az elemhez fejthetünk ki további információkat. Ez lehet az adott elem által jelölt tartalom megjelenítésére vonatkozó utasítás, esetleg az elem valamilyen azonosítója vagy valami más. Az elemek tulajdonságait mindig az adott elem kezdõcímkéjén belül soroljuk fel, tulajdonság="érték" alakban. A HTML újabb változataiban például a p elemnek van egy align tulajdonsága, amely a HTML megjelenítése során javasolja, hogy az általa jelölt bekezdést merre igazítsuk. Ez az align tulajdonság négy elõre meghatározott érték valamelyikét kaphatja meg: left (balra zárt), center (középre zárt), right (jobbra zárt) és justify (sorkizárt). Ha nem adjuk meg a tulajdonság értékét a kezdõcímkében, akkor alapértelmezés szerint left lesz. Tulajdonság használata elemben ]]>Az 'align' tulajdonság ebben a bekezdésben igazából teljesen felesleges, hiszen alapértelmezés szerint is balra zárt lenne.]]> ]]>Ennek viszont már középre kellene kerülnie.]]> Egyes tulajdonságok csak adott értékeket vehetnek fel, mint például left vagy justify, másoknál viszont lényegében bármit megadhatunk. Ha a tulajdonság értékének megfogalmazása során idézõjeleket (") is használni akarunk, akkor az egész kifejezést tegyük egyszeres idézõjelbe. A tulajdonságok értékének megadása egyszeres idézõjellel ]]>Jobbra zárt!]]> Elõfordulhat, hogy az érték megadásakor egyáltalán nem kell semmilyen idézõjelet használni. Ennek szabályai viszont nagyon halványak, ezért sokkal egyszerûbb mindig idézõjelbe tenni a tulajdonságok értékeit. Az elemekhez, címkékhez és tulajdonságokhoz tartozó információk SGML katalógusokban kerülnek tárolásra. A Dokumentációs Projektben használt eszközök ilyen katalógusok mentén nézik át a munkánkat. A textproc/docproj csomagban a segédprogramok mellett rengeteg ilyen SGML-katalógust találhatunk. A &os; Dokumentációs Projektnek is vannak saját katalógusai. Az alkalmazott eszközöknek mind a két fajta katalógusokat ismerniük kell. Egy kis gyakorlás… A szakaszban szereplõ példák kipróbálásához telepítenünk kell bizonyos szoftvereket, illetve beállítani egy környezeti változó értékét. Töltsük le és telepítsük a textproc/docproj portot a &os; Portgyûjteményébõl. Ez portoknak a portja, tehát egy metaport, így a Dokumentációs Projektben használt összes eszköz rajta keresztül letöltõdik és telepítõdik. A parancssorunk konfigurációs állományában állítsuk be az SGML_CATALOG_FILES környezeti változó értékét. (Amennyiben nem az angol nyelvû dokumentációval dolgozunk, itt érdemes a nyelvünknek megfelelõ könyvtárakat megadni.) Minta <filename>.profile</filename> állomány &man.sh.1; és &man.bash.1; parancssorokhoz SGML_ROOT=/usr/local/share/sgml SGML_CATALOG_FILES=${SGML_ROOT}/jade/catalog SGML_CATALOG_FILES=${SGML_ROOT}/docbook/4.1/catalog:$SGML_CATALOG_FILES SGML_CATALOG_FILES=${SGML_ROOT}/html/catalog:$SGML_CATALOG_FILES SGML_CATALOG_FILES=${SGML_ROOT}/iso8879/catalog:$SGML_CATALOG_FILES SGML_CATALOG_FILES=/usr/doc/share/sgml/catalog:$SGML_CATALOG_FILES SGML_CATALOG_FILES=/usr/doc/en_US.ISO8859-1/share/sgml/catalog:$SGML_CATALOG_FILES export SGML_CATALOG_FILES Minta <filename>.cshrc</filename> állomány &man.csh.1; és &man.tcsh.1; parancssorokhoz setenv SGML_ROOT /usr/local/share/sgml setenv SGML_CATALOG_FILES ${SGML_ROOT}/jade/catalog setenv SGML_CATALOG_FILES ${SGML_ROOT}/docbook/4.1/catalog:$SGML_CATALOG_FILES setenv SGML_CATALOG_FILES ${SGML_ROOT}/html/catalog:$SGML_CATALOG_FILES setenv SGML_CATALOG_FILES ${SGML_ROOT}/iso8879/catalog:$SGML_CATALOG_FILES setenv SGML_CATALOG_FILES /usr/doc/share/sgml/catalog:$SGML_CATALOG_FILES setenv SGML_CATALOG_FILES /usr/doc/en_US.ISO8859-1/share/sgml/catalog:$SGML_CATALOG_FILES A módosítások elvégzése után vagy jelentkezzük ki majd be, vagy pedig adjuk ki a közvetlenül parancssorban az adott parancsokat. Hozzunk létre egy próba.sgml nevû állományt, és írjuk bele az alábbi szöveget: ]]>Próba HTML állomány<![ CDATA [

]]>Ebben a bekezdésben legyen valamennyi szöveg.

]]>Az utána következõ bekezdésbe is rakjunk még valamennyi szöveget.

]]>Ennek a bekezdésnek jobbra zártnak kellene lennie. ]]> Próbáljuk meg az állományt érvényesíteni valamelyik SGML elemezõvel. A textproc/docproj - csomagnak része az nsgmls + csomagnak része az onsgmls nevû érvényesítést végzõ elemezõ. - Az nsgmls beolvas egy tetszõleges + Az onsgmls beolvas egy tetszõleges SGML DTD szerint definiált elemekkel jelölt dokumentumot és ebbõl elkészíti a hozzá tartozó elemstruktúra-információs halmazt (Element Structure Information Set, ESIS, de ezzel itt most nem foglalkozunk). - Ha viszont az nsgmls parancsnak + Ha viszont az onsgmls parancsnak megadjuk a paramétert, akkor nem generál tényleges eredményt, csupán a hibaüzenetek jeleníti meg. Ennek köszönhetõen könnyen ellenõrizni tudjuk, hogy az általunk készített dokumentum érvényes vagy sem. - Az nsgmls parancs + Az onsgmls parancs használatával tehát ellenõrizzük az imént létrehozott dokumentumunk érvényességét: - &prompt.user; nsgmls -s próba.sgml + &prompt.user; onsgmls -s próba.sgml - Láthatjuk, hogy az nsgmls nem + Láthatjuk, hogy az onsgmls nem jelez semmiféle hibát, ami azt jelenti, hogy a dokumentumunk valóban érvényes. Nézzük meg mi történik akkor, ha kihagyjuk a kötelezõ elemeket. Töröljük például a title és /title címkéket, majd próbáljuk meg újra az érvényesítést. - &prompt.user; nsgmls -s próba.sgml -nsgmls:próba.sgml:5:4:E: character data is not allowed here -nsgmls:próba.sgml:6:8:E: end tag for "HEAD" which is not finished + &prompt.user; onsgmls -s próba.sgml +onsgmls:próba.sgml:5:4:E: character data is not allowed here +onsgmls:próba.sgml:6:8:E: end tag for "HEAD" which is not finished - Az nsgmls által + Az onsgmls által generált hibaüzenetek kettõspontokkal tagolt csoportokba vagy oszlopokba sorolhatóak. Oszlop Jelentés 1 A hibát jelzõ program neve. Ez - minden esetben az nsgmls. + minden esetben az onsgmls. 2 A hibát tartalmazó állomány neve. 3 A hibát tartalmazó sor száma. 4 A hibát tartalmazó oszlop száma. 5 A generált üzenet jellegét megadó egybetûs kód. Az I információt, a W figyelmeztetést, az E hibát Ez nem minden esetben az ötödik - oszlopban szerepel. Az nsgmls + oszlopban szerepel. Az onsgmls -sv például az - nsgmls:I: SP version "1.3" + onsgmls:I: "OpenSP" version "1.5.2" üzenetet adja vissza (a tényleges verziójától függõen). Ez például egy információs üzenet. , végül pedig az X a kereszthivatkozást jelez. Ebbõl megállapítható, hogy az iménti üzenetek hibákra vonatkoznak. 6 Az üzenet szövege. Egyedül a title címke elhagyásával két különbözõ hibát kaptunk. Ezek közül az elsõ jelzi, hogy az SGML elemzõ olyan helyen találkozott tartalommal (amely ebben esetben konkrétan karaktereket jelent és nem az elemet bevezetõ kezdõcímkét), ahol valami másra számított. Az elemzõ itt ugyanis valamelyik, a head elemen belül szabályosan elhelyezhetõ elem kezdõcímkéjét várja (amilyen például a title). A második hibát pedig azért kaptuk, mert a head elemeknek tartalmazniuk kell title elemet. - Az nsgmls ezt azonban nem ebben a + Az onsgmls ezt azonban nem ebben a formában közli: mivel az elemet még a befejezõdése (tehát a title megemlítése) elõtt lezártuk, szerinte egyszerûen csak nem ért véget rendesen. Tegyük vissza a title elemet. A DOCTYPE deklarációk A dokumentumok elején mindig meg kell adni annak a dokumentípus-deklarációnak a nevét, amely alapján készítjük. Ennek köszönhetõen az SGML elemzõk elõ tudják keresni a dokumentum érvényesítéséhez kellõ DTD-t. Ezt az információt általában egyetlen sorban, a DOCTYPE deklarációban adjuk meg. A HTML DTD 4.0 változatának megfelelõ dokumentumokat tehát például így vezetjük be: ]]> Ebben a sorban több különbözõ típusú alkotórészt fedezhetünk fel. <! Ez egy jelzés, amellyel jelezzük egy SGML-beli deklaráció kezdetét. Ez a sor a dokumentum típusát határozza meg. DOCTYPE A dokumentumtípus SGML-beli deklarációját vezeti be. html A dokumentumban elsõként megjelenõ elemet nevezi meg. PUBLIC "-//W3C//DTD HTML 4.0//EN" formális publikus azonosító Megadja a dokumentum DTD-jéhez tartozó formális publikus azonosítót (Formal Public Identifier, FPI). Az SGML elemzõ ennek alapján találja meg a dokumentum feldolgozása során szükséges DTD-t. A PUBLIC nem része az azonosítónak, azonban segít az SGML elemzõnek megtalálni a benne megfogalmazott DTD-t. Késõbb további módszereket is láthatunk majd erre. > A deklaráció lezárása. Formális publikus azonosítók formális publikus azonosító Ebben a szakaszban csupán kiegészítõ ismeretek szerepelnek. Ezek viszont hasznos hátteret adhatnak például olyan esetekben, amikor ki akarjuk deríteni, hogy az SGML feldolgozó miért nem éri el a megadott DTD állományokat. A formális publikus azonosítók (FPI) egy speciális felírással rendelkeznek, amely a következõ: "Tulajdonos//Kulcsszó Leírás//Nyelv" Tulajdonos Ez határozza meg kihez tartozik az FPI. Ha az értéke az ISO részlettel kezdõdik, akkor az FPI az ISO tulajdona. Például a "ISO 8879:1986//ENTITIES Greek Symbols//EN" esetén a görög szimbólumokat tartalmazó egyedkészlet tulajdonosa. Az ISO 8879:1986 az SGML szabvány ISO száma. Minden más esetben az értéke a következõ alakú lesz: -//Tulajdonos vagy +//Tulajdonos (vegyük észre, hogy a két változat csak a sor elején levõ + és - jelekben tér el). Ha az érték a - jellel kezdõdik, akkor a tulajdonos adatai nem regisztráltak, a + esetében pedig regisztráltak. Az ISO 9070:1991 szabvány definiálja a regisztrált nevek elõállítását, amelynek értelmében egy ISO publikáció, egy ISBN kód vagy az adott szervezet ISO 6523 szabványnak megfelelõ kódjának számából kell származtatni, illetve a nevek kiosztását egy erre felhatalmazott szerv végzi. Ezt a feladatot az Amerikai Nemzeti Szabványügyi Intézetre (ANSI) bízta az ISO tanácsa. Mivel a &os; Projekt nem regisztrálta magát, a hozzá tartozó érték tehát a -//&os; lesz. Látható egyébként, hogy a W3C sem regisztrálta még magát. Kulcsszó Az állományban található információ típusának megadására különbözõ kulcsszavak használhatóak. Ezek általában a DTD, ELEMENT, ENTITIES és TEXT. A DTD csak DTD állományokhoz használatos, az ELEMENT pedig olyan DTD részletekhez, amelyekeben csak egyedek vagy elemek leírásai találhatóak. A TEXT SGML tartalmat jelent (szövegeket és jelölõket). Leírás Minden egyéb adat, amit az állomány tartalmáról még meg akarunk adni. Tartalmazhat verziószámokat, vagy bármilyen számunkra értelmes és az SGML rendszer számára egyedien azonosítható rövid szöveget. Nyelv Kétkarakteres, ISO szabvány szerint megadott kód, amellyel az állomány natív nyelvét adjuk meg. Az angol esetében ez az EN. Katalógusok Az SGML feldolgozónak a dokumentum feldolgozása során valamilyen módon az így megadott formális publikus azonosítóból vissza kell tudnia fejtenie a DTD-t tartalmazó állomány nevét. Mindehhez egy katalógusra lesz szükségünk. Ezek (amelyeket általában catalog néven találhatunk meg) tartalmazzák az azonosítók és a hozzájuk tartozó állománynevek összerendeléseit. Például, ha egy katalógusban a következõ sor található: PUBLIC "-//W3C//DTD HTML 4.0//EN" "4.0/strict.dtd" Az SGML feldolgozó a catalog állományt tartalmazó könyvtár 4.0 alkönyvtárában levõ strict.dtd állományban fogja keresni az adott DTD-t. Nézzünk szét kicsit a /usr/local/share/sgml/html/catalog állományban. Ez tartalmazza a textproc/docproj portból telepített HTML DTD-kre vonatkozó állományinformációkat. Az <envar>SGML_CATALOG_FILES</envar> környezeti változó Az SGML feldolgozónak valahogy tudnia kell hol keresse a katalógusokat. Számos implementációjuk parancssori paramétereken keresztül teszi lehetõvé a feldolgozás során használni kívánt katalógus vagy katalógusok felsorolását. Emellett az SGML_CATALOG_FILES környezeti változó segítségével is megadhatóak ezek az állományok. A változó értékének a (teljes elérési útvonallal kifejtett) katalógusok vesszõvel tagolt felsorolását kell beállítani. Az esetek döntõ többségében a következõ állományokat kell ilyen módon felvennünk: /usr/local/share/sgml/docbook/4.1/catalog /usr/local/share/sgml/html/catalog /usr/local/share/sgml/iso8879/catalog /usr/local/share/sgml/jade/catalog Ezt egyébként korábban már elvégeztük. Azonosítók helyett A formális publikus azonosítók használata helyett akár közvetlenül meg is adhatjuk a dokumentum érvényességét definiáló DTD-t tartalmazó konkrét állomány nevét. Ennek felírása némileg eltér: /az/elérési/út/állomány.dtd]]> A SYSTEM kulcsszóval jelezzük, hogy az SGML feldolgozó a DTD leírását rendszerszinten keresse. Ez általában (de nem mindig) azt jelenti, hogy a DTD elérhetõségét állománynév formájában adjuk meg. Az FPI használata leginkább a hordozhatóság támogatása miatt ajánlott. Ilyenkor nem kell ugyanis a dokumentumokhoz mellékelni a DTD egy példányát, illetve ha a SYSTEM kulcsszóval adnánk meg, akkor mindig az adott helyre kellene tenni a DTD állományokat. Visszaváltás az SGML használatára Az alapismeretek tárgyalása során már korábban szóba került, hogy az SGML csak a dokumentumtípus-deklaráció leírásához használatos. Ez azonban nem tökéletesen igaz, mivel léteznek olyan SGML-beli szerkezetek, amelyeket magukban a dokumentumokban is fel tudunk használni. Például a dokumentumokba beszúrhatóak az elemzõ részérõl figyelmen kívül hagyandó megjegyzések. Ezeket az SGML szabályai szerint adjuk meg. A többi szerkezet használatára kicsivel késõbb mutatunk még példákat. Nyilvánvalóan valamilyen módon jeleznünk kell az SGML feldolgozónak, hogy a soron következõ elem tartalmát hagyja figyelmen kívül, de az elemzõ ezt alapvetõen az SGML alapján észleli. Az ilyen részeket <! … > formában jelöljük. Az elhatárolók között szabályos SGML szerkezetek szerepelhetnek, pontosan olyanok, amelyeket az DTD-k készítésénél is alkalmaznak. Az elõbb bemutatott DOCTYPE deklaráció erre éppen remek példaként szolgálhat. Megjegyzések A megjegyzések tehát SGML-beli konstrukciók, és általában csak a DTD-ben érvényes a használatuk. A ban viszont láthattuk, hogy az SGML szerkezetei akár a dokumentumokban is használhatóak. Az SGML megjegyzéseket -- szimbólumok használatával határolhatjuk el. A szimbólum elsõ elõfordulásával kezdjük a megjegyzést és a másodikkal zárjuk le. Általános SGML megjegyzés <!-- próba megjegyzés --> Most a megjegyzés belsejében vagyunk ]]> A két kötõjel használata A Postscript és PDF változatok esetén kisebb problémák jelentkeznek ennél a példánál, ugyanis bennük csak egyetlen kötõjel fog látszani a <! és > szimbólumok mellett. A forráskódban azonban két - (kötõjel) szimbólumot kell használnunk, nem pedig egyet. A Postscript és PDF változatokban az eredetileg két kötõjelet összevonják egyetlen hosszabb kötõjellé, ezáltal elrontják az iménti példát. A dokumentum HTML, szöveges és RTF változatait ez nem érinti. ]]> Ha dolgoztunk már korábban HTML kóddal, akkor elõfordulhat, hogy más meghatározást láttunk a megjegyzésekre. Ezért tévesen azt gondolhattuk, hogy a megjegyzéseket a <!-- karaktersorozat vezeti be, és csak a --> zárhatja le. Valójában viszont nem így van. Sok böngészõ hibás HTML elemzõt tartalmaz, ezért ezt érvényesnek fogadják el. A Dokumentációs Projektben használt SGML elemzõk azonban ennél sokkal szigorúbbak és az ilyen hibás dokumentumokat visszadobják. Hibás SGML megjegyzések Most egy megjegyzés belsejében vagyunk KÍVÜL VAGYUNK A MEGJEGYZÉSEN! ismét megjegyzésben vagyunk ]]> Az SGML elemzõ ezt valahogy így fogja értelmezni: <!KÍVÜL VAGYUNK A MEGJEGYZÉSEN> Ez nem szabályos SGML és ráadásul félrevezetõ hibaüzenetet eredményez. Ez nem szép dolog! ]]> A példa szövege szerint sem javasolt ilyen megjegyzéseket írni. ]]> Ez már (valamivel) értelmesebb megoldás, de még feláll a veszélye, hogy megtéveszti az SGML-ben járatlan olvasókat. Egy kis gyakorlás… Tegyünk néhány megjegyzést a korábban készített próba.sgml állományunkba, majd az - nsgmls segítségével + onsgmls segítségével ellenõrizzük, hogy közben érvényes marad. Tegyünk néhány érvénytelen megjegyzést a próba.sgml állományba, majd nézzük meg, hogy - az nsgmls milyen hibaüzeneteket ad + az onsgmls milyen hibaüzeneteket ad rájuk. Egyedek Az egyedek felhasználásával neveket tudunk rendelni a tartalom egyes darabjaihoz. Az SGML elemzõ a dokumentum feldolgozása közben ezeket az egyedeket megtalálja és helyükre beszúrja az általuk hivatkozott tartalmat. Ezzel az SGML dokumentumokban könnyedén ki tudunk alakítani újrafelhasználható, gyorsan cserélhetõ tartalmat, illetve kizárólag ezen a módon lehet jelölõkkel ellátott SGML állományokat beletenni egy másik hasonló SGML állományba. Az egyedek kétfajta típusa létezik, amelyek mindegyike eltérõ helyzetekben használható: ezek az általános egyedek és a paraméteregyedek. Általános egyedek Általános egyedeket nem lehet SGML környezetben használni (habár definiálni igen), egyedül magában a dokumentumban. Vessük össze a paraméteregyedekkel. Mindegyik általános egyed rendelkezik egy névvel. Így tudunk hivatkozni egy általános egyedre (ezáltal mindarra a szövegre, amelyet képvisel a dokumentumunkban): &egyednév;. Vegyük például, hogy van egy jelenlegi.valtozat nevû egyedünk, amely a termékünk jelenlegi verziószámát helyettesíti be a szövegbe. Ezt így fogalmaznánk meg: ]]>A termékünk jelenlegi változata a(z) ]]> Így a verziószám változásakor egyszerûen csupán az általános egyed definícióját kell megváltoztatni, majd újra feldolgozni a dokumentumot. Az általános egyedek segítségével olyan karakterek is megadhatóvá válnak, amelyeket egyébként nem tudnánk SGML dokumentumokban leírni. Például a < és a & normális esetben nem lehet része SGML dokumentumoknak. Amikor ugyanis az SGML elemzõ egy < szimbólumot észlel, feltételezi, hogy ezzel egy (kezdõ- vagy záró) címke kezdõdik, illetve amikor pedig egy & szimbólumot talál, akkor a következõ lépésben egy egyed nevét várja. Szerencsére ezek a szimbólumok a szövegben bármikor kiválthatóak az &lt; és &amp; általános egyedek használatával. Általános egyedek csak SGML környezetben definiálhatóak. Ezeket általában közvetlenül a DOCTYPE deklaráció után sorolják fel. Általános egyedek definíciója ]>]]> Figyeljük meg, hogy a DOCTYPE deklarációt a sor végén egy szögletes nyitó zárójel elhelyezésével kibõvítettük: a kiegészítésként felvett két egyedet az utána következõ két sorban definiáltuk, majd bezártuk a szögletes zárójelet és DOCTYPE deklarációt. A szögletes zárójelek szükségesek ahhoz, hogy jelezzük a DOCTYPE deklarációban megadott DTD további kiegészítéseit. Paraméteregyedek Az általános egyedekhez hasonlóan a paraméteregyedek is újrafelhasználható szövegrészek elnevezését engedik meg. Miközben azonban az általános egyedek csak a dokumentumokban alkalmazhatóak, addig a paraméteregyedek csak SGML környezetekben használhatóak. A paraméteregyedek az általános egyedekhez hasonló módon definiálhatóak, az &egyednév; felírás helyett azonban az %egyednév; alakban tudunk rájuk hivatkozni. Továbbá a definíciójukban az ENTITY kulcsszó és az egyed neve közé be kell szúrni a % (százalékjel) szimbólumot. Paraméteregyedek megadása valami szöveg más ]>]]> Ez most még nem tûnik különösebben hasznosnak. Késõbb viszont majd az lesz. Egy kis gyakorlás… Tegyük bele a próba.sgml állományunkba a következõ általános egyedet: ]> ]]>Egy minta HTML állomány<![ CDATA [

]]>Ebben a bekezdésben van egy kis szöveg.

]]>Ez a bekezdés még tartalmaz némi szöveget.

]]>Ennek a bekezdésnek jobbra zártnak kellene lennie.

]]>A dokumentum jelenlegi változata: ]]> - Az nsgmls használatával + Az onsgmls használatával vizsgáltassuk meg a dokumentum érvényességét. Töltsük be a próba.sgml állományt a böngészõnkbe (elõfordulhat, hogy másolatot kell készíteni róla próba.html néven, mert a böngészõnk csak így ismerné fel HTML dokumentumként). Hacsak a böngészõnk nem annyira fejlett, a dokumentumban a &valtozat; egyedhivatkozás nem fog lecserélõdni a verziószámra. A böngészõk többségében nagyon primitív elemzõk találhatóak, amelyek nem képesek rendesen kezelni az SGML dokumentumokat Micsoda szégyen! Képzeljük csak el, mennyi gondot és ügyeskedést (mint például a szerver oldalán beemelt állományokat) el tudnánk kerülni, ha rendesen támogatnák. . A megoldást a dokumentum normalizálása jelenti, amelyet egy SGML normalizálóval tudunk elvégezni. A normalizáló beolvas egy érvényes SGML állományt és eredményként egy szintén érvényes, de valamilyen módon átalakított SGML állományt készít. Az SGML állományok átalakításának egyik ilyen módja a dokumentumban található egyedhivatkozások helyettesítése az általuk képviselt szöveggel. - Erre a célra az sgmlnorm + Erre a célra az osgmlnorm használható. - &prompt.user; sgmlnorm próba.sgml > próba.html + &prompt.user; osgmlnorm próba.sgml > próba.html Ennek hatására próba.html néven létrejön a dokumentum normalizált (vagyis a kifejtett egyedhivatkozásokkal létrehozott) változata, és most már betölthetõ a böngészõnkbe. Ha most megnézzük az - sgmlnorm által gyártott + osgmlnorm által gyártott végeredményt, akkor tapasztalhatjuk, hogy az elején nem szerepel DOCTYPE deklaráció. Ezt a kapcsolóval tehetjük hozzá: - &prompt.user; sgmlnorm -d próba.sgml > próba.html + &prompt.user; osgmlnorm -d próba.sgml > próba.html Állományok tartalmának elérése egyedeken keresztül Az (általános és paraméter-) egyedek különösen hasznosak olyan esetekben, amikor állományok tartalmát akarjuk beilleszteni másik állományokba. Állományok tartalmának elérése általános egyedekkel Tegyük fel, hogy egy könyvön dolgozunk az SGML felhasználásával, amelyet fejezetenként állományokra bontottunk, fejezet1.sgml, fejezet2.sgml stb. néven, illetve a könyv.sgml állomány tartalmazza ezeket a fejezeket. Az állományok tartalmát a SYSTEM kulcsszó használatával tudjuk egyedek értékeként megadni. Ennek hatására az SGML elemzõ a megadott állomány tartalmát adja az egyed értékének. Állományok tartalmának elérése általános egyeddel ]> &fejezet.1; &fejezet.2; &fejezet.3; ]]> Amikor általános egyedeken keresztül illesztünk be állományokat egy másik állományba, a beillesztett állományok (amilyen például a fejezet1.sgml, fejezet2.sgml és a többi) nem kezdõdhetnek DOCTYPE deklarációval. Ez szintaktikai hibát eredményez! Állományok tartalmának elérése paraméteregyedekkel Emlékezzünk vissza, hogy a paraméteregyedek csak SGML környezetben alkalmazhatóak. Miért akarnánk állományokat beilleszteni egy SGML környezetbe? Így tudunk gondoskodni az általános egyedek újrafelhasználhatóságáról. Tegyük fel, hogy a dokumentumunkban rengeteg fejezet található és ezeket két különbözõ könyvben is felhasználtuk, azonban eltérõ stílusban. A könyvek elején fel lehetne sorolni az egyedeket, de ezzel viszont gyorsan kezelhetetlenné válnának. Ehelyett csak tegyünk az általános egyedekre vonatkozó definíciókat egyetlen állományba és a dokumentumunkban erre építve paraméteregyedek beiktatásával végezzük az adott állományok beillesztését. Állományok beillesztése paraméteregyedekkel Elõször vegyük az egyedek definícióit egy külön fejezetek.ent állományba. Ebben a következõek találhatóak: ]]> Most pedig hozunk létre egy paraméteregyedet az állomány tartalmának hivatkozására. Ezután az iménti paraméteregyeddel illesszük be az állományt a dokumentumba, így az összes általános egyed elérhetõvé válik. Innentõl már a megszokott módon használhatjuk az általános egyedeket: A fejezetekhez tartozó egyedek betöltéséhez definiálunk egy paraméteregyedet %fejezetek; ]> &fejezet.1; &fejezet.2; &fejezet.3; ]]> Egy kis gyakorlás… Állományok beillesztése általános egyedek segítségével Hozzunk létre három állományt: bekezd1.sgml, bekezd2.sgml és bekezd3.sgml. Töltsük fel ezeket valami hasonló szöveggel: ]]>Ez az elsõ bekezdés.]]> Szerkesszük át a próba.sgml állományunk tartalmát az alábbi módon: ]> ]]>Próba HTML állomány<![ CDATA [

]]>A dokumentum jelenlegi változata: &bekezd1; &bekezd2; &bekezd3; ]]> A próba.sgml normalizálásával hozzuk létre a próba.html állományt. - &prompt.user; sgmlnorm -d próba.sgml > próba.html + &prompt.user; osgmlnorm -d próba.sgml > próba.html Nyissuk meg a böngészõnkkel a próba.html állományt és ellenõrizzük, hogy a bekezdn.sgml állományok tartalma bekerült a próba.html állományba. Állományok beillesztése paraméteregyedek segítségével Ehhez elõször végezzük el az elõbbi lépéseket. Szerkesszük át a próba.sgml állományt a következõeknek megfelelõen: %egyedek; ]> ]]>Próba HTML állomány<![ CDATA [

]]>A dokumentum jelenlegi változata: &bekezd1; &bekezd2; &bekezd3; ]]> Hozzunk létre egy új állományt egyedek.sgml néven a következõ tartalommal: ]]> A próba.sgml normalizálásával állítsuk elõ a próba.html állományt: - &prompt.user; sgmlnorm -d próba.sgml > próba.html + &prompt.user; osgmlnorm -d próba.sgml > próba.html Nyissuk meg a böngészõnkben a próba.html állományt és ellenõrizzük, hogy a bekezdn.sgml állományok szerepelnek a próba.html állományban. Jelölt szakaszok Az SGML tartalmaz olyan megoldást, amellyel a dokumentum bizonyos részeit speciális feldolgozásra jelölhetjük meg. Ezeket nevezik jelölt szakaszoknak. A jelölt szakaszok felépítése <![ KULCSSZÓ [ A jelölt szakasz tartalma. ]]> A korábbiakban tapasztaltak szerint természetesen a jelölt szakaszokat az SGML részeként a <! szimbólummal vezetjük be. Ezt követõen az elsõ szögletes zárójel határolja el a jelölt szakaszt. Az elemzõ a feldolgozás során a KULCSSZÓ alapján értelmezi az adott jelölt szakaszt. A második szögletes zárójellel kezdõdik a jelölt szakasz tényleges tartalma. A jelölt szakasz az iménti két szögletes zárójel lezárásával ér véget, majd a > szimbólummal visszaváltunk az SGML környezetbõl a dokumentum környezetébe. A jelölt szakaszok kulcsszavai <literal>CDATA</literal>, <literal>RCDATA</literal> A kulcsszavakkal a jelölt szakasz tartalmi modelljét tudjuk megváltoztatni. Az SGML elemzõ a dokumentum feldolgozása során tárol egy ún. tartalmi modellt. Röviden úgy foglalhatnánk össze, hogy ez a tartalmi modell írja le az elemzõ részérõl várt információkat és azok feldolgozását. A két ilyen leghasznosabb tartalmi modell a CDATA és az RCDATA. A CDATA jelentése Character Data, vagyis karakteres adat. Az elemzõ ebben a tartalmi modellben kizárólag csak karaktereket lát. Ebben a modellben a < és & szimbólumok elveszítik különleges jelentésüket. Az RCDATA jelentése Entity references and character data, vagyis egyedhivatkozások és karakteres adatok. Ebben a tartalmi modellben az elemzõ karakterekre és egyedekre számít. A < szimbólum ilyenkor elveszíti a különleges jelentését, azonban az & továbbra is általános egyedek kezdetét fogja jelölni. Ezek használata különösen hasznos abban az esetben, amikor rengeteg < és & karaktert tartalmazó nyers szöveget akarunk beilleszteni valahova a dokumentumba. Természetesen ez megoldható úgy is, ha minden < szimbólumot &lt; karaktersorozattá, illetve minden & szimbólumot &amp; karaktersorozattá alakítunk, de sokkal könnyebb ezeket a szakaszokat CDATA típusúnak megjelölni. Az SGML elemzõk ilyenkor tehát figyelmen kívül hagyják a tartalomban talált < és & szimbólumokat. A CDATA vagy RCDATA kulcsszavakat bemutató SGML példákkal kapcsolatban megjegyezzük, hogy a CDATA szakaszok tartalma nem érvényesítõdik. Az így beillesztett SGML szöveget valamilyen más módon kell ellenõrizni. Például írjuk meg a karakteres szakasz tartalmát egy másik dokumentumban, ellenõriztessük le, majd másoljuk be a CDATA részbe. CDATA típusú jelölt szakaszok használata <para>Ebben a példában láthatjuk hogyan tudunk sok <literal>&lt;</literal> és <literal>&amp;</literal> szimbólumot tartalmazó szöveget elhelyezni a dokumentumunkban. A minta most egy HTML kódrészlet lesz, az ezt övezõ szöveg (<para>) és (<programlisting>) pedig DocBook.</para> <programlisting> <![ CDATA [ ]]>Ezzel a példával mutatjuk HTML elemek használatát a dokumentumban. Mivel elég sok relációjelet kell ilyenkor megadni, sokkal egyszerûbb azt mondani, hogy legyen az egész példa egy CDATA szakaszban, mintsem végig egyedekkel jelöljük a balra és jobb nyitó relációjeleket.

  • ]]>Ez egy listaelem
  • ]]>Ez egy másik listaelem
  • ]]>Ez már egy harmadik listaelem

]]>Itt a vége a példának.]]> ]]> </programlisting> Ha megnézzük a dokumentum forrását, láthatjuk a jelölésnél alkalmazott megoldásokat. <literal>INCLUDE</literal> és <literal>IGNORE</literal> Az INCLUDE kulcsszó megadásakor a jelölt szakasz teljes tartalma feldolgozódik. Ezzel szemben viszont az IGNORE kulcsszó esetén a jelölt szakasz tartalmát figyelmen kívül fogja hagyni az elemzõ és ezáltal nem dolgozódik fel, tehát nem jelenik meg az eredményben. Az <literal>INCLUDE</literal> és <literal>IGNORE</literal> használata jelölt szakaszokban <![ INCLUDE [ Ez a szöveg feldolgozódik és beillesztõdik. ]]> <![ IGNORE [ Ez a szöveg nem dolgozódik fel és nem is illesztõdik be. ]]> Ezek önmagukban nem túlzottan hasznosak, elvégre, ha el akarunk távolítani egy szövegrészt a dokumentumunkból, akkor vagy egyszerûen kivágjuk, vagy megjegyzésbe tesszük. Sokkal hasznosabbá válhatnak viszont a számunkra, ha észrevesszük, hogy paraméteregyedek segítségével mindez vezérelhetõ. Emlékezzünk vissza, hogy a paraméteregyedek csak SGML környezetben használhatóak, és a jelölt szakaszokhoz tartozó kulcsszavak pontosan egy ilyen SGML környezetben vannak. Például tegyük fel, hogy egy dokumentáció nyomtatott és elektronikus változatán dolgozunk egyszerre. Az elektronikus változatban szeretnénk azonban néhány olyan elemet is betenni, amelyeket nem akarunk megjelentetni nyomtatásban. Hozzunk létre egy paraméteregyedet és legyen az értéke INCLUDE. Készítsük el a dokumentumot, és jelölt szakaszokkal határoljuk el a csak az elektronikus változat megjelenõ részeket. Ezekben a jelölt szakaszokban a kulcsszavak helyére írjuk be az elõbbi paraméteregyedet. Amikor a dokumentumot nyomtatásra akarjuk elõkészíteni, akkor legyen a paraméteregyed értéke IGNORE, majd dolgozzuk fel újra az egész dokumentumot. Jelölt szakaszok vezérlése paraméteregyeddel <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % elektronikus.valtozat "INCLUDE"> ]]> ... <![ %elektronikus.valtozat [ Ez a rész csak a dokumentum elektronikus változatában fog megjelenni. ]]> A nyomtatott változat elõkészítésekor így állítsuk át az egyed értékét: <!ENTITY % elektronikus.valtozat "IGNORE"> A dokumentum újbóli feldolgozása során a jelölt szakaszok a %elektronikus.valtozat értékét fogják kulcsszóként megkapni, és így kimaradnak. Egy kis gyakorlás… A következõ szöveggel hozzunk létre egy állományt szakasz.sgml néven: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % szoveges.kimenet "INCLUDE"> ]> <html> <head> <title>Példa a jelölt szakaszok használatára</title> </head> <body> <p>Ez a bekezdés <![ CDATA [sok-sok < karaktert (< < < < <) tartalmaz, így érdemesebb CDATA szakaszba tenni]]>.</p> <![ IGNORE [ <p>Ez a bekezdés egyértelmûen nem fog látszódni az eredményben.</p> ]]> <![ [ <p>Ez a bekezdés nem fog feltétlenül megjelenni az eredményben.</p> <p>A konkrét megjelenését a paraméteregyed értéke befolyásolja.</p> ]]> </body> </html> - A &man.sgmlnorm.1; használatával - normalizáljuk ezt az állományt, majd - elemezzük az eredményt. Nézzük meg - melyik bekezdések tûntek el, melyek jelentek meg + A osgmlnorm + használatával normalizáljuk ezt az + állományt, majd elemezzük az + eredményt. Nézzük meg melyik + bekezdések tûntek el, melyek jelentek meg és mi történt a CDATA szakaszok tartalmával. A szoveges.kimenet értéke legyen INCLUDE az IGNORE helyett. Futassuk le újra így a normalizálást és vizsgáljuk meg mi változott az eredményben. Befejezés Ezzel befejeztük az SGML alapismeretek bemutatását. A helyigény, illetve a bonyolultság visszaszorítása érdekében bizonyos témákkal teljes mélységében (vagy egyáltalán) nem foglalkoztunk, azonban az iménti szakaszokban elkerült SGML ismeretek elegendõek lesznek az FDP által készített dokumentáció megértéséhez. diff --git a/hu_HU.ISO8859-2/books/handbook/disks/chapter.sgml b/hu_HU.ISO8859-2/books/handbook/disks/chapter.sgml index 4416d88b99..de73810e1f 100644 --- a/hu_HU.ISO8859-2/books/handbook/disks/chapter.sgml +++ b/hu_HU.ISO8859-2/books/handbook/disks/chapter.sgml @@ -1,5908 +1,5920 @@ Háttértárak Áttekintés Ez a fejezet arról szól, hogy miként használjuk a lemezeinket a &os;-vel. Itt többek közt szó esik a memória (alapú) lemezekrõl, a hálózaton keresztül csatlakoztatott meghajtókról, a szabványos SCSI/IDE tárolóeszközökrõl és az USB felületet használó eszközökrõl. A fejezet elolvasása során megismerjük: a &os; által alkalmazott terminológiát, amivel a fizikai lemezeken elhelyezkedõ adatokat írja le (partíciók és slice-ok); hogyan bõvítsük rendszerünket további merevlemezekkel; hogyan állítsuk be a &os;-t USB tárolóeszközök használatára; hogyan állítsunk be virtuális állományrendszereket, például memórialemezeket; hogyan használjuk a kvótákat a lemezterület használatának korlátozására; hogyan védjüket meg lemezeinket titkosítással az illetéktelenektõl; &os; alatt hogyan készítsünk és írjuk CD-ket, DVD-ket; a biztonsági mentések készítésének különbözõ lehetõségeit; hogyan használjuk a &os; alatt rendelkezésünkre álló, biztonsági mentést készítõ programokat; hogyan mentsünk floppy lemezekre; mik az állományrendszerek pillanatképei és hogyan kell ezeket hatékonyan használni. A fejezet elolvasásához ajánlott: a &os; rendszermag beállításának és telepítésének ismerete () Az eszközök elnevezései A most következõ listában felsoroljuk a &os; által ismert fizikai tárolóeszközöket és a hozzájuk tartozó elnevezéseket. A fizikai lemezek elnevezésének szabályai A meghajtó típusa A meghajtóeszköz neve IDE merevlemezek ad IDE CD-meghajtók acd SCSI merevlemezek és USB tárolóeszközök da SCSI CD-meghajtók cd Különbözõ nem szabványos CD-meghajtók mcd (Mitsumi CD-ROM) és scd (Sony CD-ROM) Floppy meghajtók fd SCSI szalagos meghajtók sa IDE szalagos meghajtók ast Flash meghajtó fla (&diskonchip; Flash eszköz) RAID meghajtók aacd (&adaptec; AdvancedRAID), mlxd és mlyd (&mylex;), amrd (AMI &megaraid;), idad (Compaq Smart RAID), twed (&tm.3ware; RAID).
David O'Brien Eredetileg írta: Lemezek hozzáadása lemezek hozzáadás Ebben a szakaszban arról lesz szó, hogy a jelenleg egyetlen meghajtót tartalmazó rendszerünket hogyan tudjuk bõvíteni egy új SCSI-lemez hozzáadásával. Ehhez elsõként kapcsoljuk ki a számítógépünket és szereljük be a helyére az új meghajtót a számítógép, a lemezvezérlõ és a meghajtó gyártójának utasításai alapján. Mivel ezt a mûveletet rengeteg módon lehet elvégezni, ezért ennek pontos részleteivel ez a leírás most nem foglalkozik. Jelentkezzünk be root felhasználóként. Miután beszereltük a meghajtót, a /var/run/dmesg.boot állomány végignézésével bizonyosodjuk meg róla, hogy a rendszer valóban megtalálta a lemezt. A példánk szerint ez a meghajtó tehát a da1 nevet fogja viselni, amelyet a /1 könyvtárba akarunk csatlakoztatni (ha IDE-meghajtót telepítünk, akkor a hozzá tartozó eszköz neve ad1 lesz). partíciók slice-ok fdisk Mivel a &os; IBM PC kompatibilis számítógépeken fut, ezért nem szabad figyelmen kívül hagynunk a PC BIOS partícióit is. Ezek eltérnek a hagyományos BSD partícióktól. Egy PC-s lemeznek négy BIOS-os partícióbejegyzése lehet. Ha egy lemezt tényleg csak a &os;-nek szánunk, akkor használhatjuk az ún. dedikált módot. Minden más esetben a &os;-nek egy PC BIOS partícióban kell elhelyezkednie. A &os; a PC BIOS partícióit slice-nak nevezi, ezzel különbözteti ezeket a hagyományos BSD partícióktól. Dedikált esetekben is használhatjuk, de elsõsorban akkor kap fontosabb szerepet, amikor a &os;-nek más operációs rendszerekkel kell megosztani a helyet. Ezzel el tudjuk kerülni, hogy a más operációs rendszerekben megtalálható, nem &os; alapú fdisk parancs megzavarodjon. A slice-ok használatakor a meghajtó /dev/da1s1e néven kerül hozzáadásra. Így kell olvasni: egyes SCSI lemezes egység (második SCSI lemez), elsõ slice (elsõ PC BIOS partíció) és e BSD partíció. A dedikált esetben a meghajtó neve viszont egyszerûen csak /dev/da1e. Mivel a &man.bsdlabel.8; 32 bites egész számokat használ a szektorok számának tárolására, ezért lemezenként csak 2^32-1 szektort tud ábrázolni, ami az esetek többségében 2 TB méretû címezhetõ területet jelent. Az &man.fdisk.8; formátuma szerint sem a kezdõszektor, sem a hossz nem lehet 2^32-1-nél több, amivel így a partíciókat 2 TB, a lemezeket pedig 4 TB méretûre korlátozza. A &man.sunlabel.8; formátuma partíciónként 2^32-1 szektort enged meg és összesen 8 partíciót, amely ezáltal 16 TB terület lefedését teszi lehetõvé. Nagyobb lemezekhez &man.gpt.8; partíciók használatosak. A &man.sysinstall.8; használatával sysinstall lemezek hozzáadása su Közlekedés a <application>sysinstall</application> programban A sysinstall könnyen használható menüinek segítségével az új lemezen pillanatok alatt létre tudunk hozni partíciókat és megcímkézni ezeket. Ehhez vagy root felhasználóként jelentkezzünk be a rendszerbe, vagy adjuk ki a su parancsot. A sysinstall parancs kiadása után lépjünk be a Configure (Beállítások) menübe. A &os; Configuration Menu menüben ezután keressük meg és válasszuk ki az Fdisk menüpontot. Az <application>fdisk</application> partíciószerkesztõ Miután eljutottunk az fdisk alkalmazáshoz, az A lenyomásával felajánlhatjuk az egész lemezt a &os; számára. Amikor elõkerül a kérdés, hogy remain cooperative with any future possible operating systems (mûködõképes maradjon-e a késõbbiekben telepítendõ operációs rendszerekkel), akkor válaszoljuk rá YES-szel (tehát igen). A W gomb lenyomásával írjuk a lemezre a most elvégzett változtatásokat. Ezután már a Q használatával ki is léphetünk az FDISK szerkesztõbõl. A következõ lépésben a Master Boot Record-ról fognak minket megkérdezni. Mivel most egy már mûködõ rendszert bõvítünk, ezért a válaszunk erre None lesz. A lemezcímkék szerkesztése BSD partíciók Most lépjünk ki a sysinstall alkalmazásból és indítsuk el újra. Kövessük az iménti útmutatásokat, de ezúttal a Label menüpontot válasszuk ki. Ezzel a Disk Label Editor-ba vagyis a lemezcímkék szerkesztõjéhez jutunk. Itt fogjuk létrehozni a hagyományos BSD partíciókat. Egy lemezen nyolc ilyen partíció lehet, a-tól h-ig. Közülük néhány partíció címkéjét megkülönböztetjük. Az a partíció jelöli a rendszer indításához használt partíciót, a gyökérpartíciót (/). Tehát a partíció csak a rendszerlemezünkön szerepelhet (tehát ahonnan indul a rendszer). A b partíció a lapozáshoz használt partíciókat jelöli és több lemezen is szerepelhet. A c partíción keresztül lehet elérni az egészt lemezt dedikált módban vagy az egész &os; slice-ot slice módban. A többi partíció tetszõlegesen felhasználható. A sysinstall címkeszerkesztõje az e betûvel szereti megjelölni a sem nem rendszerindító, sem nem lapozó partíciókat. A címkeszerkesztõben egyetlen állományrendszert a C lenyomásával lehet készíteni. Amikor erre válaszul megkérdezi a típusát (FS (állományrendszer) vagy swap (lapozóterület) legyen), akkor válasszuk az FS beállítást és adjuk meg a csatlakozási pontját (például /mnt). Amikor a lemezt telepítés után (post-install) adjuk hozzá, akkor a sysinstall valójában nem hoz létre hozzá bejegyzéseket az /etc/fstab állományban, ezért a csatlakozási pont megadása nem is feltétlenül fontos. Most már készen állunk arra, hogy rögzítsük az új címkét a lemezre és létrehozzunk vele egy állományrendszert. Ehhez nyomjuk le a W gombot. Ne foglalkozzunk vele, ha a sysinstall nem képes csatlakoztatni az új partíciót. Ha ezzel megvagyunk, akkor lépjünk ki a címkeszerkesztõbõl és a sysinstallból is. Befejezés Most már csak annyi teendõnk maradt, hogy felvegyük az /etc/fstab állományba az új lemezhez tartozó bejegyzést. Parancssoros eszközök használatával Slice módban Ezzel a beállítással a lemezünkre késõbb más operációs rendszereket is telepíthetünk, és nem okoz gondot a saját fdisk segédprogramjaik mûködésében. Az új lemezek telepítésénél ezt a módszer ajánlatos követni. A dedikált módot viszont csak abban az esetben használjuk, ha erre nyomós okunk van! &prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1 &prompt.root; fdisk -BI da1 # inicializáljuk az új lemezt &prompt.root; bsdlabel -B -w da1s1 auto # címkézzük meg &prompt.root; bsdlabel -e da1s1 # szerkeszzük át a frissen létrehozott címkét és vegyünk fel egy új partíciót &prompt.root; mkdir -p /1 &prompt.root; newfs /dev/da1s1e # ismételjük meg minden létrehozott partícióhoz &prompt.root; mount /dev/da1s1e /1 # csatlakoztassuk a partíció(ka)t &prompt.root; vi /etc/fstab # vegyük fel a megfelelõ bejegyzés(eke)t az /etc/fstab állományba IDE-lemezek esetén azad eszközt a da eszközzel helyettesítsük. Dedikált módban OS/2 Amennyiben az új meghajtót nem akarjuk megosztani egyetlen más operációs rendszerrel sem, használhatjuk a dedicated (dedikált) módot. Ne felejtsük el azonban, hogy ez képes összezavarni a Microsoft operációs rendszereit, habár ebbõl semmilyen kárunk nem fog származni. Az IBM &os2; operációs rendszere azonban kisajátít minden olyan partíciót, amelyet nem tud olvasni. &prompt.root; dd if=/dev/zero of=/dev/da1 bs=1k count=1 &prompt.root; bsdlabel -Bw da1 auto &prompt.root; bsdlabel -e da1 # létrehozzuk az `e' partíciót &prompt.root; newfs /dev/da1e &prompt.root; mkdir -p /1 &prompt.root; vi /etc/fstab # felvesszük a /dev/da1e partíciót &prompt.root; mount /1 Egy másik megoldás: &prompt.root; dd if=/dev/zero of=/dev/da1 count=2 &prompt.root; bsdlabel /dev/da1 | bsdlabel -BR da1 /dev/stdin &prompt.root; newfs /dev/da1e &prompt.root; mkdir -p /1 &prompt.root; vi /etc/fstab # felvesszük a /dev/da1e partíciót &prompt.root; mount /1 RAID Szoftveres RAID Christopher Shumway Eredetileg készítette: Jim Brown Ellenõrizte: RAIDszoftveres RAIDCCD Összefûzött lemezek beállítása A nagyobb méretû háttértárolók kiválasztásánál a legfontosabb tényezõk a sebesség, megbízhatóság és a költség. Nagyon ritkán lehet csak ezt a hármat egyensúlyba hozni: általában a gyors és megbízható tárolóeszközök sok pénzbe kerülnek, valamint a költségek megtakarításához vagy a sebességet vagy pedig a megbízhatóságot kell feláldoznunk. A továbbiakban egy olyan rendszert mutatunk be, ahol a elsõsorban a költségek, majd csak ezután a sebesség és megbízhatóság kerültek elõtérben. A rendszer adatátviteli sebességét a hálózat korlátozza. Habár emellett a megbízhatóság is nagyon fontos, a tárgyalt összefûzött meghajtó (Concenated Disk, CCD) csak adatokat szolgáltat és a teljes tartalma bármikor visszaállítható, mivel rendelkezésre áll CD-n. A feladat elvégzésére alkalmas háttértároló kiválasztásában elsõként a saját elvárásainkat kell tudnunk megfogalmazni. Ha nekünk jobban számít az árnál a sebesség vagy a megbízhatóság, akkor a mostaniaktól némileg eltérõ konfigurációt kell majd építenünk. A hardver telepítése A rendszert tartalmazó IDE-lemez mellett három darab, egyenként 30 GB-os 5400-as percenkénti fordulatszámú Western Digital gyártmányú merevlemez alkotja majd a létrehozni kívánt, kb. 90 GB összméretû összefûzött lemezt. Ideális esetben minden IDE-lemez saját külön vezérlõn és kábelen van, de a költségek csökkentése miatt nem használtunk további IDE-vezérlõket. Ehelyett inkább jumperekkel úgy állítottuk be a lemezeket, hogy minden vezérlõre egy mester (master) és egy szolga (slave) módú merevlemez kapcsolódjon. A beszerelés után beállítottuk a rendszer BIOS-át, hogy automatikusan felismerje a csatlakoztatott lemezeket. De ami még fontosabb, hogy a &os; is észlelte ezeket az indítás során: ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33 ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33 ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33 ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33 Ha a &os; nem látná az összes lemezt, akkor ellenõrizzük a jumperek helyes beállítását. Napjainkban a legtöbb IDE-meghajtón találunk egy Cable Select jumpert is. Ezzel nem a mester/szolga módot állítjuk be! A megfelelõ jumper beazonosításához olvassuk el a meghajtóhoz tartozó dokumentációt. A következõ lépésben azt vesszük nagyító alá, hogyan lehet ezeket az állományrendszer részévé tenni. Ezzel kapcsolatban a &man.vinum.8; () és a &man.ccd.4; elolvasása ajánlatos. Erre a célra itt most a &man.ccd.4; használatát választottuk. A CCD beállítása A &man.ccd.4; meghajtó segítségével több ugyanolyan lemezt tudunk összefûzni egyetlen logikai állományrendszerré. A &man.ccd.4; használatához arra is szükségünk van, hogy a &man.ccd.4; támogatása jelen legyen a rendszermagban. A következõ sor tegyük bele a rendszermag konfigurációs állományába, fordítsuk újra és telepítsük a rendszermagot: device ccd A &man.ccd.4; támogatása modulként is betölthetõ. A &man.ccd.4; beállításához elõször a &man.bsdlabel.8; programmal meg fel kell címkéznünk a lemezeket: bsdlabel -w ad1 auto bsdlabel -w ad2 auto bsdlabel -w ad3 auto Így létrejön egy-egy BSD típusú címke a ad1c, ad2c és ad3c eszközökre, amely így lefedi a lemez egész területét. Most pedig változtassuk meg a lemezcímke típusát. Ehhez használjuk ismét a &man.bsdlabel.8; programot: bsdlabel -e ad1 bsdlabel -e ad2 bsdlabel -e ad3 Az EDITOR környezeti változóban megadott szövegszerkesztõvel (ez általában a &man.vi.1;) megnyílik minden egyes lemezhez a jelenlegi lemezcímke. Egy módosítatlan lemezcímke valahogy így néz ki: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) A &man.ccd.4; számára hozzunk létre egy új e partíciót. Ezt lényegében a c partíció lemásolásával keletkezik, de nála az (az állományrendszer típusa) oszlopban mindenképpen 4.2BSD szerepeljen! A lemezcímke most már valahogy így fog kinézni: 8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597) Az állományrendszer kiépítése Most, miután felcímkéztük az összes lemezünket, lássunk neki a &man.ccd.4; kiépítésének. Ezt a &man.ccdconfig.8; meghívásával és az alábbihoz hasonló paraméterek átadásával tehetjük meg: ccdconfig ccd0 32 0 /dev/ad1e /dev/ad2e /dev/ad3e A paraméterek rövid leírása és használata: Az elsõ paraméter a létrehozandó eszköz, ami jelen esetünkben a /dev/ccd0c. A /dev/ részt nem kötelezõ megadni. A kihagyás nagysága az állományrendszerben. A kihagyás határozza meg a lemezblokkban alkalmazott csíkozás (striping) vastagságát, ami általában 512 byte. Ennek megfelelõen a 32-es kihagyás 16 384 byte-os csíkokat ad meg. A &man.ccdconfig.8; beállításai. Ha engedélyezni akarjuk a lemezek tükrözését, akkor itt megadhatjuk. Mivel ez a konfiguráció most nem nyújt tükrözést a &man.ccd.4; számára, ezért állítsuk nullára (0). A &man.ccdconfig.8; parancsnak utolsóként azokat az eszközöket kell felsorolni, amelyeket tömbbe akarunk fûzni. Minden eszközt teljes elérési úttal adjuk meg. A &man.ccdconfig.8; futtatása után a &man.ccd.4; beállítódik. Most már állományrendszert is rakhatunk rá. A &man.newfs.8; man oldalról szedjük össze a szükséges paraméterezést, vagy egyszerûen csak gépeljünk be ennyit: newfs /dev/ccd0c Az egész önmûködõvé tétele A &man.ccd.4; eszközt általában minden egyes indítás után használni akarjuk. Ennek eléréséhez elõször ezt be kell állítanunk. Az alábbi parancs kiadásával írassuk be a jelenlegi beállítasainkat tükrözõ /etc/ccd.conf állományt: ccdconfig -g > /etc/ccd.conf Az újraindítás során az /etc/rc parancs futtatja le a ccdconfig -C parancsot, ha az /etc/ccd.conf állomány létezik. Ez automatikusan beállítja a &man.ccd.4; eszközöket, így ilyenkor tudjuk csatlakoztatni is ezeket. Ha egyfelhasználós módban indítjuk a rendszert, mielõtt még a &man.mount.8; paranccsal csatlakoztatni tudnánk a &man.ccd.4; eszközt, a tömb beállításához meg kell hívnunk a következõ parancsot: ccdconfig -C Ha a rendszerindításkor automatikusan csatlakoztatni akarjuk a &man.ccd.4; eszközt, akkor az /etc/fstab állományba helyezzünk el egy hozzá tartozó bejegyzést: /dev/ccd0c /media ufs rw 2 2 A Vinum kötetkezelõ RAID szoftveres RAID Vinum A Vinum kötetkezelõ egy blokkos eszközmeghajtó, ami virtuális lemezes meghajtókat valósít meg. Elkülöníti a lemezes hardvereszközöket a blokkos eszközmeghajtók felületétõl és a kettõ között úgy képezi le az adatokat, hogy a hagyományos lemezes tárolással szemben megnövekedett rugalmasságot, teljesítményt és megbízhatóságot kapunk. A &man.vinum.8; ismeri a RAID-0, RAID-1 és RAID-5 modelleket egyaránt, melyeket önmagukban és együttesen kombinálva is használhatunk. A bõvebben ismerteti a &man.vinum.8; rendszerét. Hardveres RAID RAID hardveres A &os; rengeteg különbözõ típusú hardveres RAID-vezérlõt ismer. Ezek az eszközök a &os; külön erre a célra szánt támogatása nélkül képesek vezérelni a RAID-alrendszert. A rajta levõ BIOS segítségével a kártya a legtöbb lemezmûveletet egyedül kezeli. A következõkben egy Promise IDE RAID vezérlõt alkalmazó rendszert fogunk beállítani. Miután telepítettük a kártyát és indítjuk a rendszert, bekéri a szükséges információkat. Kövessük az utasításokat és lépjünk be a kártya beállító képernyõjére. Itt tudjuk kombinálni az összes csatlakoztatott meghajtónkat. Amikor ezzel a végeztünk, a lemezek egyetlen lemezként fognak a &os; számára viselkedni. A többi RAID-szint is ehhez hasonlóan állítható be. Az ATA RAID-1 tömbök újraszervezése A &os; lehetõséget a tömbben levõ meghibásodott eszközök menet közben elvégezhetõ cseréjére. Ehhez arra van szükségünk, hogy még újraindítás elõtt elcsípjük a hibát. Hiba esetén valami hasonlót fogunk látni a /var/log/messages állományban vagy a &man.dmesg.8; kimenetében: ad6 on monster1 suffered a hard error. ad6: READ command timeout tag=0 serv=0 - resetting ad6: trying fallback to PIO mode ata3: resetting devices .. done ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11)\\ status=59 error=40 ar0: WARNING - mirror lost További információkat az &man.atacontrol.8; programtól szerezhetünk: &prompt.root; atacontrol list ATA channel 0: Master: no device present Slave: acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0 ATA channel 1: Master: no device present Slave: no device present ATA channel 2: Master: ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present ATA channel 3: Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present &prompt.root; atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED A lemez biztonságos eltávolításához elõször válasszuk le (detach) a meghibásodott lemezhez tartozó csatornát: &prompt.root; atacontrol detach ata3 Cseréljük ki a lemezt. Csatlakoztassuk újra (attach) az ATA csatornát: &prompt.root; atacontrol attach ata3 Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present Tartalékként (spare) adjuk hozzá az új lemezt a tömbhöz: &prompt.root; atacontrol addspare ar0 ad6 Szervezzük újra (rebuild) a tömböt: &prompt.root; atacontrol rebuild ar0 A folyamat elõrehaladását a következõ parancs begépelésével tudjuk figyelni: &prompt.root; dmesg | tail -10 [a kimenet többi része] ad6: removed from configuration ad6: deleted from ar0 disk1 ad6: inserted into ar0 disk1 as spare &prompt.root; atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed Várjunk a mûvelet befejezõdéséig. Marc Fonvieille Írta: USB tárolóeszközök USB lemezek Manapság már számos külsõ tárolóeszköz az USB (Universal Serial Bus) közvetítésével csatlakozik a számítógéphez: merevlemezek, pen drive-ok, CD-írók stb. A &os; ezeket az eszközöket is ismeri. Beállítás A USB tárolóeszközöket kezelõ meghajtó, az &man.umass.4; felelõs az USB alapú tárolóeszközök támogatásáért. Ha a GENERIC rendszermagot használjuk, akkor semmit sem kell változtatnunk. Ha saját rendszermagunk van, akkor gondoskodjunk róla, hogy a következõ sorokat beraktuk a rendszermag beállításait tartalmazó állományba: device scbus device da device pass device uhci device ehci device usb device umass Az &man.umass.4; meghajtó a SCSI alrendszeren keresztül éri el az USB tárolóeszközöket, tehát az USB eszközeinket a rendszer SCSI eszközként látja. Az alaplapon található USB chipkészlet típusától függõen vagy csak a device uhci, vagy USB 1.X esetén pedig a device ohci bejegyzésre lesz szükségünk. De abból sem származik kárunk, ha mind a kettõt meghagyjuk. Az USB 2.0 szabványú vezérlõket a &man.ehci.4; meghajtó (device ehci) támogatja. Ha módosítani kellett a konfigurációs állományt, akkor ne felejtsük el újrafordítani és telepíteni sem a rendszermagot. Ha az USB eszközünk egy CD- vagy DVD-író, akkor a következõ sorral a SCSI CD-meghajtók meghajtóját, a &man.cd.4; eszközt kell beépítenünk a rendszermagba: device cd Mivel az író is SCSI eszközként látszik, ezért az &man.atapicam.4; nem szerepelhet a rendszermag beállításai között. A beállítások kipróbálása A beállításaink készen állnak a kipróbálásra: csatlakoztassuk a számítógéphez az USB eszközünket és a rendszerüzeneteket tároló pufferben (&man.dmesg.8;) hamarosan meg is jelenik a hozzá tartozó meghajtó: umass0: USB Solid state disk, rev 1.10/1.00, addr 2 GEOM: create disk da0 dp=0xc2d74850 da0 at umass-sim0 bus 0 target 0 lun 0 da0: <Generic Traveling Disk 1.11> Removable Direct Access SCSI-2 device da0: 1.000MB/s transfers da0: 126MB (258048 512 byte sectors: 64H 32S/T 126C) Természetesen a gyártóra, márkára, az eszköz leírójára (da0) és egyebekre vonatkozó részletek eltérhetnek. Mivel az USB eszköz SCSI eszközként látszik, ezért a camcontrol parancs használható a rendszerhez csatlakoztatott USB tárolóeszközök listázásához: &prompt.root; camcontrol devlist <Generic Traveling Disk 1.11> at scbus0 target 0 lun 0 (da0,pass0) Ha a meghajtón állományrendszer is található, akkor képesek vagyunk csatlakoztatni. A elolvasása segíthet az USB meghajtón partíciókat kialakítani és formázni, amennyiben szükséges. A rendszer biztonsága szempontjából nem tekinthetõ megbízhatónak, ha olyan felhasználók számára is engedélyezzük tetszõleges meghajtók csatlakoztatását (például a vfs.usermount engedelyézesével), amelyekben nem bízunk meg. A &os; által támogatott állományrendszerek döntõ többsége nem nyújt védelmet a káros szándékkal telepített eszközök ellen. Ha az eszközt normál felhasználókkal is csatlakoztathatóvá akarjuk tenni, akkor további lépések megtételére is szükségünk lesz. Elõször is a felhasználóknak valahogy el kell tudniuk érniük az USB tárolóeszköz csatlakoztatásakor keletkezõ eszközöket. Ezt úgy tudjuk megoldani, ha az érintett felhasználókat felvesszük az operator csoportba. Ebben a &man.pw.8; lehet a segítségünkre. Másodsorban amikor ezek az eszközök létrejönnek, az operator csoportnak tudniuk kell ezeket olvasniuk és írniuk. Ezt úgy tudjuk megvalósítani, ha felvesszük a következõ sorokat az /etc/devfs.rules állományba: [localrules=5] add path 'da*' mode 0660 group operator Ha viszont vannak SCSI lemezeink is rendszerben, akkor a helyzet egy kicsit megváltozik. Tehát például a rendszerben már eleve vannak da0, da1 és da2 néven lemezek, akkor a második sort ennek megfelelõen változtassuk meg: add path 'da[3-9]*' mode 0660 group operator Ezzel kizárunk minden, korábban már létezõ lemezt az operator csoportból. Emellett még az /etc/rc.conf állományban engedélyeznünk kell a saját &man.devfs.rules.5; szabályrendszerünket is: devfs_system_ruleset="usb_rules" Ezt követõen be kell állítanunk a rendszermagban, hogy a hagyományos felhasználók képesek legyenek állományrendszereket csatlakoztatni. Ezt a legkönnyebb úgy tudjuk megtenni, ha az /etc/sysctl.conf állományba felvesszük a következõ sort: vfs.usermount=1 Azonban ne felejtsük el, hogy ez csak a rendszer következõ indításától él. De a &man.sysctl.8; parancs használatával is beállíthatjuk ezt az értéket. Az utolsó lépésben hozzunk létre egy könyvtárat az állományrendszer csatlakoztatásához. Ezt a könyvtárat az a felhasználó fogja birtokolni, aki az állományrendszert csatlakoztatnia akarja. Ez például root felhasználóként úgy tudjuk megtenni, ha a felhasználónak létrehozunk egy könyvtárat /mnt/felhasználó néven (ahol a felhasználó nevet cseréljük a tényleges felhasználó nevére, a csoport nevet pedig a felhasználóhoz tartozó elsõdleges csoport nevére): &prompt.root; mkdir /mnt/felhasználó &prompt.root; chown felhasználó:csoport /mnt/felhasználó Most tegyük fel, hogy csatlakoztatnuk egy USB pen drive-ot és ennek megfelelõen megjelenik a /dev/da0s1 eszköz. Mivel az ilyen eszközökre általában gyárilag FAT állományrendszert tesznek, ezért így kell ezeket csatlakoztatni a &man.mount.8; paranccsal: &prompt.user; mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/felhasználó Ha leválasztjuk az eszközt (miután kiadtuk a &man.umount.8; parancsot), akkor a rendszerüzenetek között valami ilyesmit fogunk látni: umass0: at uhub0 port 1 (addr 2) disconnected (da0:umass-sim0:0:0:0): lost device (da0:umass-sim0:0:0:0): removing device entry GEOM: destroy disk da0 dp=0xc2d74850 umass0: detached A témáról bõvebben A Lemezek hozzáadása és az Állományrendszerek csatlakoztatása és leválasztása címû szakaszok elolvasása mellett a következõ man oldalakat is ajánljuk: &man.umass.4;, &man.camcontrol.8; és &man.usbconfig.8; &os; 8.X esetében, vagy &man.usbdevs.8; a &os; korábbi változatainál. Mike Meyer Írta: Lézeres tárolóeszközök (CD-k) létrehozása és használata CD-k létrehozása Bevezetés A CD-k számos lehetõségünkben eltérnek a hagyományos lemezektõl. Kezdetben a felhasználók nem is voltak képesek írni ezeket. Olyannak tervezték, hogy a fejek sávok közti mozgásából fakadó késleltetés nélkül lehessen folyamatosan olvasni. A szállítása a maga idejében sokkal könnyebb volt minden vele egyforma méretû eszköznél. A CD-ken is találhatunk sávokat, azonban ez csak a folyamatosan olvasható adat egy szakaszát jelenti, nem pedig a lemez fizikai tulajdonságát. Ha &os;-n akarunk CD-t készíteni, akkor ehhez elõször össze kell állítanunk a CD egyes sávjaira kerülõ adatokat és ezután rögzíteni ezeket a sávokat a CD-n. ISO 9660 állományrendszerek ISO 9660 Az ISO 9660 állományrendszert úgy tervezték, hogy megbirkózzon ezekkel az eltérésekkel. Sajnos ezzel együtt kõbe vésték az állományrendszerek akkoriban érvényes korlátozásait is. Szerencsére lehetõséget ad bõvítésre, ezáltal a helyesen megírt CD-k képesek úgy átlépni ezeket a határokat, hogy közben az általuk alkalmazott kiterjesztéseket nem ismerõ rendszerekkel is együtt tudnak mûködni. sysutils/cdrtools A sysutils/cdrtools port tartalmaz egy &man.mkisofs.8; nevû programot, amellyel létre tudunk hozni ISO 9660 típusú állományrendszert tartalmazó adatállományt. Többféle kiterjesztést is ismer, amit majd a lentebb ismertett opciókkal érhetünk el. CD-író ATAPI A CD írásához használt konkrét segédeszköz attól függ, hogy ATAPI vagy esetleg másmilyen írónk van. Az ATAPI CD-írók az alaprendszer részeként elérhetõ burncd programon keresztül használhatóak. A SCSI és USB CD-írók esetén pedig a sysutils/cdrtools portban megtalálható cdrecord programot használhatjuk. Az ATAPI/CAM modul segítségével a cdrecord és más SCSI-írókra készült programokat is tudunk használni ATAPI hardvereken. Ha a CD-író szoftverünket grafikus felhasználói felületen keresztül szeretnénk használni, akkor az X-CD-Roast vagy a K3b alkalmazásokat érdemes szemügyre vennünk. Ezek az eszközök elérhetõek csomagként vagy a sysutils/xcdroast és sysutils/k3b portokból. ATAPI hardver esetén az X-CD-Roast és a K3b alkalmazások használatához szükségünk lesz az ATAPI/CAM modulra. mkisofs A sysutils/cdrtools port részeként elérhetõ &man.mkisofs.8; program képes a &unix; típusú állományrendszer könyvtárszerkezete alapján egy ISO 9660 típusú állományrendszert tartalmazó image-et készíteni. Legegyszerûbb módon így használhatjuk: &prompt.root; mkisofs -o image.iso /az/elérési/út állományrendszerek ISO 9660 Ezzel a paranccsal egy olyan image.iso nevû állományt hozunk létre, amely /az/elérési/út által megadott helyen található könyvtárszerkezetet mintázza ISO 9660 állományrendszer formájában. A folyamat során minden olyan állományt leképez szabványos ISO 9660 állományrendszerbeli névre, amely megfelel a szabvány elvárásainak, és kihagy minden olyan állományt, amely nem jellemzõ az ISO állományrendszerekre. állományrendszerek HFS állományrendszerek Joliet Számos opció lehet segítségünkre az ilyenkor felbukkanó akadályok leküzdésében. Ezek közül különösen fontos az , amely a &unix; rendszerek számára megszokott Rock Ridge kiterjesztéseket, valamint a , amely a Microsoft rendszerekben használt Joliet kiterjesztéseit, és végül a , amely a &macos; alatt létrehozott HFS állományrendszerek kiterjesztéseit engedélyezi. A kizárólag csak &os; rendszereken használt CD-k esetében a megadásával kapcsolhatjuk ki az állománynevek mindenféle korlátozását. Az beállítás használatával olyan állományrendszer képét hozzuk létre, amely teljesen megegyezik a parancsban megadott könyvtárból induló fa tartalmával, habár több módon is sérti az ISO 9660 szabvány elõírásait. CD-k rendszerindításhoz Az utolsó általános jelleggel használható beállítás a . Ezzel lehet megadni az El Torito szabványnak megfelelõ rendszerindító CD készítéséhez szükséges rendszerindító image elérését. Ennél a beállításnál tehát meg kell adni a rendszerindításhoz használt lemez image-ét, amely a CD tartalmát magában foglaló könyvtárszerkezetben található valahol. A &man.mkisofs.8; alapértelmezés szerint egy ún. floppy emulációs módban hozza létre az ISO image-et, ezért a rendszerindításhoz használatos lemez image-ének pontosan 1200, 1440 vagy 2880 KB méretûnek kell lennie. Egyes rendszerbetöltõk, mint amilyen például a &os; terjesztéséhez használt lemezeken található, nem használják ezt az emulációt. Ilyen helyzetekben a kapcsolót kell megadni. Tehát ha a /tmp/sajátboot könyvtárban van egy indítható &os; rendszerünk, amelyben a /tmp/sajátboot/boot/cdboot a rendszerindító lemez image-e, akkor egy /tmp/indítható.iso nevû ISO 9660 formátumú állományrendszert tartalmazó image-et például így tudunk elkészíteni: &prompt.root; mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/indítható.iso /tmp/sajátboot Miután ezt megtettük, és a rendszermagunkban benne van az md eszköz támogatása, csatlakoztathatjuk is az állományrendszert: &prompt.root; mdconfig -a -t vnode -f /tmp/indítható.iso -u 0 &prompt.root; mount -t cd9660 /dev/md0 /mnt Ezután már össze tudjuk vetni az /mnt és /tmp/sajátboot könyvtárak egyezõségét. A &man.mkisofs.8; viselkedését több más opcióval tudjuk finomhangolni, mint például az ISO 9660 kiosztás módosítása vagy a Joliet és HFS lemezek készítése. A &man.mkisofs.8; man oldalon mindezekrõl bõvebben olvashatunk. burncd CD-k írása Ha ATAPI CD-írónk van, akkor a burncd paranccsal írhatjuk az ISO image-et a lemezre. A burncd az alaprendszer része, és /usr/sbin/burncd néven érhetõ el. A használata igen egyszerû, csupán pár paramétere van: &prompt.root; burncd -f eszköz data image.iso fixate Ezzel a paranccsal rámásoljuk az image.iso állományt az eszköz eszközre. Az alapértelmezett eszköz a /dev/acd0. A &man.burncd.8; man oldalán találjuk meg az írási sebességgel, a CD írás utáni kiadásával és az audio lemezek írásával kapcsolatos beállításokat. cdrecord Ha nincs ATAPI CD-írónk, akkor az íráshoz a cdrecord parancsot kell használnunk. A cdrecord nem az alaprendszer része: vagy a sysutils/cdrtools portból vagy a neki megfelelõ csomagból kell telepítenünk. Az alaprendszerben végbemenõ változások miatt a program bináris változatai hibázhatnak, aminek következtében csak poháralátéteket fogunk tudni gyártani. Ezért a rendszerrel együtt érdemes frissíteni ezt a portot is. Vagy ha a -STABLE verziót használjuk, akkor mindig érdemes a port elérhetõ legújabb verziójára frissíteni. Miközben a cdrecord számos paraméterrel rendelkezik, az alapvetõ használata mégis egyszerûbb a burncd parancsénál. Egy ISO 9660 formátumú image-et ugyanis a következõ módon tudunk felírni lemezre: &prompt.root; cdrecord dev=eszköz image.iso A cdrecord használatának trükkös része a megfelelõ eszköz megtalálása, tehát a beállítás helyes megadása. Ehhez használjuk a cdrecord paraméterét, amely az alábbihoz hasonló eredményt fog produkálni: CD-k írása &prompt.root; cdrecord -scanbus Cdrecord-Clone 2.01 (i386-unknown-freebsd7.0) Copyright (C) 1995-2004 Jörg Schilling Using libscg version 'schily-0.1' scsibus0: 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk 0,2,0 2) * 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * scsibus1: 1,0,0 100) * 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner 1,7,0 107) * Itt felsorolásra kerülnek a beállítás értékeként felhasználható eszközök. Keressük meg köztük a CD írónkat és a értékének a három vesszõvel elválasztott számot adjuk meg. Ebben az esetben a CD-író eszköz most az 1,5,0 lesz, tehát itt a helyes paraméterezés . Ezt az értékét könnyebben is meg lehet adni. Ennek részleteirõl a &man.cdrecord.1; man oldalán olvashatunk. Abban az esetben is érdemes fellapoznunk, ha az audio sávok írásáról, az írási sebesség korlátozásáról vagy más hasonló dolgokról akarunk olvasni. Audio CD-k másolása Audio CD-t úgy tudunk másolni, ha elõször állományok sorozatába mentjük a lemez tartalmát, majd ezeket az állományokat egy üres CD-re írjuk. Ennek konkrét folyamata azonban némileg eltér az ATAPI- és SCSI-meghajtók használata során. SCSI-meghajtók esetén A cdda2wav programmal mentsük le a lemez tartalmát. &prompt.user; cdda2wav -v255 -D2,0 -B -Owav A cdrecord paranccsal írjuk fel a .wav kiterjesztésû állományokat. &prompt.user; cdrecord -v dev=2,0 -dao -useinfo *.wav Gondoskodjunk róla, hogy a 2,0 értéket a nak megfelelõen helyesen állítottuk be. ATAPI-meghajtók esetén + + Az ATAPI/CAM modul + segítségével a + cdda2wav parancs ATAPI + meghajtókkal is használható. Ez a + megoldás általában kedvezõbb (a + hibák és bytesorrend ügyesebb + kezelése, stb.) a legtöbb + felhasználó számára, mint az itt + ismertetett. + + Az ATAPI CD meghajtója az egyes sávokat /dev/acddtnn néven teszi elérhetõvé, ahol a d a meghajtó sorszáma, a nn a sáv két számjeggyel kiírt sorszáma, amelyet szükség szerint balról nullával egészítenek ki. Így tehát az elsõ meghajtó elsõ sávja a /dev/acd0t01, a második a /dev/acd0t02, a harmadik a /dev/acd0t03 és így tovább. Ellenõrizzük, hogy ezek az eszközök jelen vannak a /dev könyvtárban. Amennyiben hiányoznának, kényszerítsük ki a lemez újbóli beolvasását: &prompt.root; dd if=/dev/acd0 of=/dev/null count=1 Szedjük le az egyes sávokat a &man.dd.1; használatával. A parancs kiadásakor meg kell adnunk egy blokkméretet is: &prompt.root; dd if=/dev/acd0t01 of=track1.cdr bs=2352 &prompt.root; dd if=/dev/acd0t02 of=track2.cdr bs=2352 ... A burncd használatával írjuk fel a lemezre az imént lementett állományokat. Meg kell adnunk, hogy ezek audio állományok, és hogy a burncd a munka befejeztével zárja le (fixate) a lemezt. &prompt.root; burncd -f /dev/acd0 audio track1.cdr track2.cdr ... fixate Adat CD-k másolása Az adatot tartalmazó CD-ket le tudjuk másolni egy olyan image-be, amely funkcionálisan megegyezik egy &man.mkisofs.8; által létrehozott image-dzsel és amivel le tudunk másolni bármilyen adat CD-t. Az itt megadott példa azt feltételezi, hogy a CD-meghajtónk neve acd0. Helyére a saját CD-meghajtónk nevét kell behelyettesíteni. &prompt.root; dd if=/dev/acd0 of=állomány.iso bs=2048 Most miután lementettük az image-et, írjuk fel CD-re a fentiek szerint. Adat CD-k használata Most, hogy már készítettünk egy szabványos adat CD-t, valószínûleg szeretnénk is valamilyen csatlakoztatni és elérni a rajta levõ adatokat. Alapértelmezés szerint a &man.mount.8; mindig azt feltételezi, hogy az állományrendszerek ufs típusúak. Ezért ha valami ilyesmivel próbálkozunk: &prompt.root; mount /dev/cd0 /mnt akkor egy Incorrect super block szövegû hibaüzenetet lesz a jutalmunk, és természetesen nem tudjuk csatlakoztatni a CD-t. Mivel a CD nem UFS állományrendszert tartalmaz, ezért az ilyen jellegû kísérleteink mind kudarcba fognak fulladni. Valahogy fel kell világosítanunk a &man.mount.8; parancsot arról, hogy itt most egy ISO9660 típusú állományrendszert akarunk csatlakoztatni, és akkor minden a helyére kerül. Ezt úgy tudjuk megtenni, ha a &man.mount.8; parancsnak megadjuk a paramétert. Például, ha a /dev/acd0 néven elérhetõ CD-meghajtóban levõ lemezt akarjuk a /mnt könyvtárba csatlakoztatni, akkor ezt kell begépelnünk: &prompt.root; mount -t cd9660 /dev/cd0 /mnt Vegyük észre, hogy az eszköz neve (ez ebben a példában most /dev/cd0) lehet más is attól függõen, hogy milyen csatolófelületet használ a CD-meghajtónk. Sõt, a valójában csak a &man.mount.cd9660.8; parancsot indítja el. Ennek tükrében tehát az elõbbi példát így rövidíthetjük le: &prompt.root; mount_cd9660 /dev/cd0 /mnt Ezen a módon bármilyen gyártmányú adat CD-t képesek vagyunk csatlakoztatni. Egyes ISO 9660 kiterjesztéseket használó lemezek azonban esetleg furcsán mûködhetnek. Például Joliet lemezek az összes állomány nevét kétbyte-os Unicode karakterben tárolják. A &os; rendszermagja ugyan nem beszéli a Unicode-ot, de a &os; CD9660 meghajtója képes menetközben átkonvertálni a Unicode karaktereket. Ha bizonyos nem angol karakterek kérdõjelekként jelennének meg, akkor a beállítás használatával még egy helyi kódlapot is meg kell adnunk. Ezzel kapcsolatban bõvebb tájékoztatásért forduljunk a &man.mount.cd9660.8; man oldalhoz. A beállítás segítségével csak akkor lesz képes a rendszermag elvégezni ezt az átalakítást, ha elõtte betöltjük a cd9660_iconv.ko modult. Ezt megtehetjük úgy, hogy ha felvesszük a következõ sort a loader.conf állományba: cd9660_iconv_load="YES" Indítsuk újra a számítógépünket, vagy közvetlenül töltsük be a modult a &man.kldload.8; használatával. Estenként elõfordulhat, hogy kapunk egy Device not configured hibaüzenetet a CD-k csatlakoztatásakor. Ez általában arra utal, hogy a CD-meghajtó nem érzékeli a berakott lemezt, vagy éppen a meghajtó nem látható a buszon. A CD-meghajtók esetében pár másodpercig eltarthat, amíg felismeri a berakott lemezt, ilyenkor mindig legyünk türelemmel. Néha a SCSI CD-meghajtó nem látható, mert nem volt elég ideje válaszolni busz újraindítása elõtt. Ha SCSI CD-meghajtónk van, akkor a következõ beállítást tegyük hozzá a rendszermagunk konfigurációjához és fordítsuk újra a rendszermagukat. options SCSI_DELAY=15000 Ezzel utasítjuk a SCSI buszunkat egy 15 másodperces várakozásra a rendszer indítása során, és így ezzel elég esélyt adunk arra, hogy a CD-meghajtó válaszolni tudjon a busz újraindítása elõtt. Nyers adat CD-k írása Írhatunk közvetlenül is állományokat a CD-re, ISO 9660 formátumú állományrendszer használata nélkül. Sokan így oldják meg a mentést. Ezt sokkal gyorsabban lebonyolítható egy szabványos CD esetében: &prompt.root; burncd -f /dev/acd1 -s 12 data archive.tar.gz fixate Az ezen a módon megírt CD-ket szintén nyers módon kell olvasnunk: &prompt.root; tar xzvf /dev/acd1 Az ilyen lemezeket nem tudjuk a normális CD-khez hasonlóan csatlakoztatni. Sõt, az ilyen CD-ket csak &os; alatt tudjuk olvasni. Ha csatlakoztathatóvá akarjuk tenni a lemezt, vagy más operációs rendszerek alól is szeretnénk olvasni, akkor erre a célra a fentebb bemutatott &man.mkisofs.8; parancsot kell használnunk. Marc Fonvieille Írta: CD-írók ATAPI/CAM meghajtó Az ATAPI/CAM meghajtó használata Ez a meghajtó lehetõvé teszi az ATAPI eszközök (CD-ROM, CD-RW, DVD meghajtók stb...) számára, hogy a SCSI alrendszeren keresztül legyenek elérhetõek, így esetünkben is használhatóvá válnak olyan alkalmazások, mint például sysutils/cdrdao vagy a &man.cdrecord.1;. A meghajtó használatához a következõ sort kell a /boot/loader.conf állományba illeszteni: atapicam_load="YES" Indítsuk újra a számítógépet. Amennyiben a rendszermagban az &man.atapicam.4; statikus támogatását szeretnénk használni, úgy a következõ sort kell a rendszermag konfigurációs állományába felvenni: device atapicam Továbbá a következõ sorokra lesz még szükségünk: device ata device scbus device cd device pass Ezeknek már eleve ott kell szerepelnie. Ezután fordítsuk újra és telepítsük a rendszermagot, majd indítsuk újra a számítógépet. A rendszer indulásakor az írónak ehhez hasonló módon kell megjelennie: acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4 cd0 at ata1 bus 0 target 0 lun 0 cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device cd0: 16.000MB/s transfers cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed A meghajtó most már elérhetõ a /dev/cd0 eszközön keresztül, és például ennyi begépelésével csatlakoztatni tudunk róla egy CD-t a /mnt könyvtárba: &prompt.root; mount -t cd9660 /dev/cd0 /mnt root felhasználóként a következõ paranccsal tudjuk lekérdezi az író SCSI címét: &prompt.root; camcontrol devlist <MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0) Eszerint a 1,0,0 lesz az eszköz SCSI címe, amelyet a &man.cdrecord.1; és más SCSI alkalmazások esetén adunk meg. Az ATAPI/CAM és SCSI rendszerek tekintetében olvassuk el az &man.atapicam.4; és &man.cam.4; man oldalakat. Marc Fonvieille Írta: Andy Polyakov Segítséget nyújtott benne: Lézeres tárolóeszközök (DVD-k) létrehozása és használata DVD írása Bevezetés A DVD a CD-hez képest a lézeres tárolóeszközök technológiájának újabb generációját képviseli. A DVD bármelyik CD-nél több adatot képes tárolni és napjaink ez a videók kiadásának szabványa. Öt fizikailag írható formátummal határozhatjuk meg az írható DVD fogalmát: DVD-R: Ez volt az elsõ elérhetõ írható DVD formátum. A DVD-R szabványát a DVD Fórum fektette le. Ez a formátum csak egyszer írható. DVD-RW: Ez a DVD-R szabvány újraírható változata. A DVD-RW körülbelül 1000 alkalommal írható újra. DVD-RAM: Ez is a DVD Fórum által támogatott újraírható formátum. A DVD-RAM cserélhetõ merevlemeznek látzsik. Azonban ez típusú adathordozó nem kompatibilis legtöbb DVD-ROM hajtóval és DVD-Video lejátszóval. Csupán csak néhány DVD-író ismeri a DVD-RAM formátumot. A DVD-RAM használatáról a ban találunk bõvebben információkat. DVD+RW: Ezt az újraírható formátumot a DVD+RW szövetség alkotta meg. A DVD+RW lemezek nagyjából 1000 alkalommal írhatóak újra. DVD+R: Ez a formátum a DVD+RW formátum egyszer írható változata. Az egyrétegû írható DVD-k összesen 4 700 000 000 byte-ot képesek rögzíteni, ami 4,38 GB vagy 4 485 MB (1 kilobyte itt 1024 byte). Meg kell különböztetnünk fizikai tárolóeszközt és az alkalmazást. Például a DVD-Video állományok olyan jellegû elrendezését írja elõ, ami bármelyik írható fizikai DVD eszközön megjelenhet: DVD-R, DVD+R, DVD-RW stb. Mielõtt kiválasztanánk az eszköz típusát, biztosnak kell lennünk benne, hogy az író és a DVD-Video lejátszó (ez lehet egy önálló lejátszó vagy egy számítógép DVD-ROM meghajtója) kompatibilis a szóbanforgó lemezzel. Beállítás A &man.growisofs.1; programot fogjuk a DVD rögzítésére használni. Ez a program a dvd+rw-tools segédprogramok (sysutils/dvd+rw-tools) gyûjteményének része. A dvd+rw-tools az összes DVD médium típusát ismeri. Ezek a segédprogramok a SCSI alrendszeren keresztül érik az eszközöket, ezért a használhatukhoz a rendszermagban szükségünk lesz az ATAPI/CAM támogatásra. Ha az írónk USB felületen csatlakozik, akkor mindez szükségtelen, és ehelyett a t kell elolvasnunk az USB eszközök beállításához. Engedélyeznünk kell az ATAPI eszközök DMA hozzáférését is, amit a /boot/loader.conf állományban a következõ sor hozzáadásával tudunk megtenni: hw.ata.atapi_dma="1" A dvd+rw-tools használatának megkezdése elõtt a DVD-írónkkal kapcsolatban érdemes átolvasnunk a dvd+rw-tools hardverkompatibilitási jegyzeteit (angolul). Ha grafikus felületet szeretnénk használni, akkor érdemes egy pillanatást vetnünk a K3bre (sysutils/k3b), amely egy felhasználóbarát felületet ad a &man.growisofs.1; és sok más íróprogram felé. Adat DVD-k írása A &man.growisofs.1; a mkisofs parancs elõlapja, tehát az állományrendszer létrehozásához a &man.mkisofs.8; programot fogja meghívni és ezt írja fel a DVD-re. Ez azt jelenti, hogy az írási folyamat megkezdése elõtt nem kell semmilyen image-et létrehoznunk. A /az/elérési/út könyvtárból a következõ paranccsal tudjuk kiírni az adatokat DVD+R vagy DVD-R lemezre: &prompt.root; growisofs -dvd-compat -Z /dev/cd0 -J -R /az/elérési/út A beállítások a &man.mkisofs.8; programhoz kerülnek át az állományrendszer létrehozásakor (itt most egy ISO 9660 állományrendszert hozunk létre, Joliet és Rock Ridge kiterjesztésekkel), használatának részleteit lásd &man.mkisofs.8;. A beállítást a kezdõmenetek létrehozásakor használjuk: több menetben akarjuk írni a lemezt vagy sem. A DVD eszközt, amely itt most a /dev/cd0, a saját konfigurációnknak megfelelõen kell megadni. A paraméterrel lezárjuk a lemezt, így ezután további írás már nem lehetséges. Ezért cserébe jobb kompatibilitást kapunk a DVD-ROM meghajtókkal. Elõre legyártott image-dzsel is dolgozhatunk, tehát például, ha az image.iso állományt akarjuk kiírni, akkor ezt kell lefuttatnunk: &prompt.root; growisofs -dvd-compat -Z /dev/cd0=image.iso Az írási sebességet magától beállítja a lemez és meghajtó képességeinek megfelelõen. Az írási sebesség felülbírálásához használjuk a paramétert. A paraméterek lehetõségeirõl a &man.growisofs.1; man oldaláról tudhatunk meg többet. 4,38 GB-nál több adat írásához egy hibrid UDF/ISO-9660 típusú állományrendszert kell létrehoznunk. Ezt úgy tudjuk elérni, ha &man.mkisofs.8; és a többi hasonló program (például &man.growisofs.1;) hívásakor még hozzátesszük az paramétereket. Ezekre csak lemezképek készítésekor vagy az állományok közvetlen lemezre írásakor van szükségünk. Az így létrehozott lemezeket a &man.mount.udf.8; segédprogram segítségével UDF állományrendszerként tudjuk csatlakoztatni. Ezért csak olyan operációs rendszereken használható, amelyek ismerik ezt a formátumot, ellenkezõ esetben csak hibás állományokat fogunk látni a lemezen. Példa ilyen lemezkép létrehozására: &prompt.root; growisofs -dvd-compat -udf -iso-level 3 -Z /dev/cd0 -J -R /az/új/adat/helye Ha a lemezkép már eleve nagyobb méretû állományokat tartalmaz, a lemez írásakor a &man.growisofs.1; programnak már nem kell további paramétereket átadnunk. Lehetõleg mindig a sysutils/cdrtools legfrissebb verzióját használjuk (amely a &man.mkisofs.8; programot is tartalmazza), mivel a régebbi verziók nem támogatják a nagyobb méretû állományokat. Ha problémák adódnak a programok használata során, akkor próbálkozzunk a fejlesztõi változattal (sysutils/cdrtools-devel) és olvassuk el a &man.mkisofs.8; man oldalát. DVD DVD-Video DVD-Video írása A DVD-Video az állományok speciális szervezésére utal, amely az ISO 9660 és az mikró UDF (M-UDF) specifikációkon alapszik. A DVD-Video emellett egy adott adatszerkezeti hierarchiát is takar, ezért kell egy külön programmal, például a multimedia/dvdauthor segítségével összeállítani egy DVD-t. Ha már a birtokunkban van egy DVD-Video állományrendszer képe, akkor az eddigiek szerint egyszerûen csak írjuk fel egy lemezre, ahogy azt az elõzõ szakaszban is láthattuk. Ha összeállítottuk a DVD anyagát és például a /a/videó/elérési/útja könyvtárba raktuk, akkor a következõ paranccsal írathatjuk ki a DVD-Video formátumú lemezt: &prompt.root; growisofs -Z /dev/cd0 -dvd-video /a/videó/elérési/útja A paramétert kell átadni a &man.mkisofs.8; programnak, amelynek hatására létrehoz egy DVD-Video formátumú állományrendszert. Emellett a beállítás maga után vonja a &man.growisofs.1; beállítását is. DVD DVD+RW A DVD+RW használata Eltérõen a CD-RW-tõl, egy érintetlen DVD+RW-t az elsõ használat elõtt meg kell formázni. A &man.growisofs.1; program errõl az elsõ adandó alkalommal gondoskodik, és ez az ajánlott. Azonban a DVD+RW formázására használhatjuk a dvd+rw-format parancsot is: &prompt.root; dvd+rw-format /dev/cd0 Ezt a mûveletet csak egyszer kell elvégezni, hiszen ne feledjük, hogy csak a szûz DVD+RW lemezeket kell megformázni. Ezután a DVD+RW-t a korábbi szakaszoknak megfelelõen tudjuk írni. Ha a DVD+RW-re új adatot akarunk írni (egy teljesen új állományrendszert, nem pedig adatokat hozzáfûzni), akkor nem kell üressé tenni a lemezt, egyszerûen csak elegendõ felülírni az elõzõeket (egy új kezdõmenet létrehozásával) valahogy így: &prompt.root; growisofs -Z /dev/cd0 -J -R /az/új/adat/helye A DVD+RW formátum felajánlja annak lehetõségét is, hogy könnyedén hozzá lehessen fûzni adatokat az elõzõ íráshoz. A mûvelet során az új menetet összefûzi a meglévõvel, tehát ez nem egy többmenetes írás, hanem a &man.growisofs.1; megnöveli a lemezen található ISO 9660 állományrendszert. Például, ha egy korábban megírt DVD+RW lemezen levõ adatokhoz akarunk hozzáírni, akkor a következõ parancsot kell kiadnunk: &prompt.root; growisofs -M /dev/cd0 -J -R /az/új/adat/helye A &man.mkisofs.8; beállításainál a kezõmenetnél megadottakat érdemes ismét megadni. Ha kompatibilisek akarunk maradni a többi DVD-meghajtóval, akkor adjuk meg paramétert. Ez a DVD+RW esetében annyit jelent, hogy nem tudunk további adatokat hozzáfûzni. Ha valamilyen okból mégis üressé szeretnénk tenni a lemez, akkor ír járhatunk el: &prompt.root; growisofs -Z /dev/cd0=/dev/zero DVD DVD-RW A DVD-RW használata A DVD-RW két lemezformátumot fogad el: a inkrementális soros hozzáférést és a korlátozott felülírást. Alapértelmezés szerint a DVD-RW lemezek soros elérésûek. A még fel nem használt DVD-RW lemezek közvetlenül írhatóak külön formázás nélkül, habár a korábban már soros formátumban használt DVD-RW lemezeket egy új kezdõmenet létrehozása elõtt üressé kell tenni. Soros módban így kell letörölni egy DVD-RW lemezt: &prompt.root; dvd+rw-format -blank=full /dev/cd0 A teljes törlés () egy 1x média esetén körülbelül egy órát vesz igénybe. A beállítással egy gyorsított törlés zajlik le, amennyiben a DVD-RW lemezt Disk-At-Once (DAO) módban írjuk. A DVD-RW lemezeket az alábbi paranccsal tudjuk DAO módban írni: &prompt.root; growisofs -use-the-force-luke=dao -Z /dev/cd0=image.iso A beállítást nem kötelezõ megadni, mivel a &man.growisofs.1; igyekszik a lehetõ leggyorsabban törölni a lemezt és megkezdeni a DAO módú írást. A DVD-RW esetében valójában a korlátozott felülírást lenne érdemes használnunk, mivel ez a formátum sokkal rugalmasabb az alapértelmezés szerint felkínált inkrementális soros elérésnél. A soros DVD-RW lemezekre ugyanúgy tudunk adatokat rögzíteni, mint az összes többi formátum esetében: &prompt.root; growisofs -Z /dev/cd0 -J -R /az/adat/helye Ha az elõzõ íráshoz akarunk még hozzáfûzni adatokat, akkor ehhez a &man.growisofs.1; beállítását kell használnunk. Azonban ha a DVD-RW lemezhet inkrementális soros módban adunk hozzá adatot, akkor ezzel egy új menetet hozunk létre a lemezen és így egy többmenetes lemezt kapunk. A korlátozott felülírású DVD-RW formátum használata esetén nem kell mindegyik kezdõmenet elõtt törölni a lemezt, egyszerûen csak felül kell írni a beállítással, hasonlóan a DVD+RW esetéhez. A DVD+RW beállításához hasonlóan lehetõségünk van a lemezen található ISO 9660 formátumú állományrendszer növelésére. Ennek az eredménye egy egymenetes DVD. A következõ paranccsal tudjuk a DVD-RW lemezt korlátozott felülírású módba tenni: &prompt.root; dvd+rw-format /dev/cd0 Így tudunk visszaváltani a soros formátum használatára: &prompt.root; dvd+rw-format -blank=full /dev/cd0 Több menet használata Nagyon kevés DVD-ROM meghajtó ismeri a többmenetes DVD-ket, és legtöbbször is csak általában az elsõ menetet olvassák. A DVD+R, DVD-R és DVD-RW formátumok soros formátumban képesek több mentetet is befogadni, viszont a DVD+RW és DVD-RW korlátozott felülírású formátuma esetén nem létezik több menet. Az alábbi parancs egy újabb menetet ad hozzá egy megkezdett (le nem zárt) DVD+R, DVD-R vagy DVD-RW soros formátumú lemezhez: &prompt.root; growisofs -M /dev/cd0 -J -R /az/új/adat/helye Ha ezt a parancsot egy korlátozott felülírású DVD+RW vagy DVD-RW lemez esetén adjuk ki, akkor az új adatokat úgy fûzi hozzá, hogy egy új menetet összefésüli a meglévõvel. Ezzel egy egymenetes lemez keletkezik. Ilyenkor így bõvítik a megkezdett lemezeket. A menetek kezdése és befejezése általában felhasznál valamennyi helyet a lemezen. Ezért úgy tudjuk optimalizálni a lemez helykihasználtságát, hogy kevés menetben sok adatot viszünk fel rá. A DVD+R esetén 154, a DVD-R-nél körülbelül 2000, és a dupla rétegû DVD+R lemezeknél 127 menetet tudunk létrehozni. További olvasnivalók A DVD lemezrõl részletesebb információkat a dvd+rw-mediainfo /dev/cd0 parancs kiadásával tudunk lekérdezni. A dvd+rw-tools használatáról a &man.growisofs.1; man oldalon találunk információt, valamint a dvd+rw-tools honlapján (angolul) és a cdwrite levelezési lista archívumaiban (angolul). Futassuk dvd+rw-mediainfo parancsot minden olyan esetben, amikor gondunk akad valamilyen lemez írásával. A kimenete nélkül szinte lehetetlen segítenünk bárkinek is. A DVD-RAM használata DVD DVD-RAM Beállítás A DVD-RAM írók SCSI vagy ATAPI csatolófelülettel rendelkeznek. Az ATAPI eszközök esetén engedélyezni kell a DMA elérését, amit a /boot/loader.conf állományban az alábbi sor hozzáadásával tudunk megtenni: hw.ata.atapi_dma="1" A lemez elõkészítése Ahogy arra már korábban utaltunk a fejezet bevezetésében, a DVD-RAM úgy látható, mint egy cserélhetõ merevlemez. A hagyományos merevlemezekhez hasonlóan a DVD-RAM-ot is elõ kell készíteni az elsõ használatához. Ebben a példában a lemez teljes területét egy szabványos UFS2 állományrendszerrel töltjük fel: &prompt.root; dd if=/dev/zero of=/dev/acd0 bs=2k count=1 &prompt.root; bsdlabel -Bw acd0 &prompt.root; newfs /dev/acd0 A DVD eszköz nevét, vagyis az acd0 eszközt a saját rendszerünknek megfelelõen kell módosítani. A lemez használata Miután az elõbbi mûveletet elvégeztük a DVD-RAM lemezen, már tudjuk is normális merevlemezként csatlakoztatni: &prompt.root; mount /dev/acd0 /mnt Ezt követõen a DVD-RAM egyaránt olvasható és írható. Julio Merino Eredetileg készítette: Martin Karlsson Átdolgozta: Hajlékonylemezek létrehozása és használata Néha hasznos lehet, ha az adatokat floppy lemezeken tároljuk, például olyankor, amikor más cserélhetõ tárolóeszköz már nem jöhet számításba, vagy amikor kis mennyiségû adatot kell átvinnünk az egyik számítógéprõl a másikra. Ebben a szakaszban bemutatjuk hogyan kell &os; alatt floppy lemezeket használni. Elsõsorban a 3,5 colos DOS lemezek formázásával és használatával foglalkozik, de ezek fogalmak a többi hajlékonylemezes formátum esetében is hasonlóak. A hajlékonylemezek formázása Az eszköz A floppy lemezek a többi eszközhöz hasonlóan a /dev könyvtárban érhetõek el. A nyers floppy lemezek eléréséhez egyszerûen csak használjuk a /dev/fdN hivatkozást. A formázás Használat elõtt a floppy lemezeket alacsony szinten meg kell formázni. Ezt általában maga a gyártó végzi el, de a formázás gyakran hasznos lehet a lemez sértetlenségének ellenõrzésére. A legtöbb floppy lemez hivatalos kapacitása 1440 KB, de használhatjuk nagyobb (és kisebb) méretekben is. A floppy lemezek alacsony szintû formázására az &man.fdformat.1; parancsot használhatjuk. Ez a segédprogram paraméterként az eszköz nevét várja. Figyeljünk a menetközben megjelenõ hibaüzenetekre, mivel ezek segítik eldönteni, hogy a lemez használható vagy sem. A hajlékonylemezek formázása A /dev/fdN eszközök segítségével tudunk megformázni egy floppy lemezt. Tegyünk be egy 3,5 colos floppy lemezt a meghajtóba, majd adjuk ki a következõ parancsot: &prompt.root; /usr/sbin/fdformat -f 1440 /dev/fd0 A lemez címkézése Miután alacsony szinten formáztuk a lemezt, tennünk kell rá egy lemezcímkét is. Ez a lemezcímke késõbb meg fog semmisülni, de a rendszernek szüksége van rá, hogy pontosan meg tudja állapítani a lemez méretét és geometriáját. Az új lemezcímke lefedi az egész lemezt, és tartalmazni fogja az összes információt a floppy geometriájáról. A lemezcímkék geometriaértékeit az /etc/disktab állományban találjuk meg felsorolva. Most már futtathatjuk is a &man.bsdlabel.8; parancsot: &prompt.root; /sbin/bsdlabel -B -w /dev/fd0 fd1440 Az állományrendszer A hajlékonylemez most már készen áll a magas szintû formázásra. Ennek során egy új állományrendszert teszünk rá, amelyet a &os; képes írni és olvasni. Miután létrejött ez az új állományrendszer, a lemezcímke megsemmisül, így tehát ha újra meg akarjuk formázni a lemezt, akkor újra létre kell majd hoznunk a lemezcímkét. A floppy állományrendszere lehet UFS vagy FAT. A FAT általánosságban véve jobb választás a floppy lemezek számára. Az alábbi módon tudunk új állományrendszert tenni a floppyra: &prompt.root; /sbin/newfs_msdos /dev/fd0 A lemez most már készen áll a használatra. A hajlékonylemezek használata A floppy lemezt használatához a &man.mount.msdosfs.8; paranccsal kell csatlakoztatnunk. Ugyanerre a célra használhatjuk a Portgyûjteménybõl elérhetõ emulators/mtools portot is. Szalagok létrehozása és használata szalagos adathordozó A legfontosabb szalagos adathordozók a 4 mm-es, 8 mm-es, QIC, a minikazettás és a DLT. 4 mm-es (Digitális adattároló, avagy DDS: Digital Data Storage) szalagos adathordozó (4 mm-es) DDS-szalagok szalagos adathordozó QIC-szalagok A 4 mm-es szalagok a QIC-szalagokat váltják fel a munkaállomások biztonsági mentésének eszközeként. Ez a tendencia csak tovább növekedett, ahogy a Conner felvásárolta az Archive-ot, a QIC típusú meghajtók legnagyobb gyártóját, majd leállított a QIC-meghajtók gyártását. A 4 mm-es meghajtók mérete kicsi és csendben is dolgoznak, de a megbízhatóság terén nem tudhatják maguknak mindazt a sikert, amit a 8 mm-es társaiknál könyvelhettünk el. A kazetták is sokkal olcsóbbak és kisebbek (3 x 2 x 0,5 col, ami 76 x 51 x 12 mm) a 8 mm-es kiadásénál. A 4 mm-es feje, hasonlóan a 8 mm-eséhez, valamilyen okból szintén viszonylag rövid ideig bírja, és mind a kettõ spirális pásztázást használ. Ezeknél a meghajtóknál az adatátvitel nagyjából 150 KB/mp-nél kezdõdik és 500 KB/mp-nél végzõdik. Az adattárolási képességük 1,3 GB-tól indul és 2,0 GB-ig tart. A hardveres tömörítés, ami a legtöbb ilyen típusú meghajtónál elérhetõ, közel megduplázza a kapacitást. A többmeghajtós szalagos könyvtár egységek egyetlen szekrényben 6 meghajtót képes befogadni, a szalagok automatikus cserélgetésével. Az ilyen könyvtárak kapacitása a 240 GB-ot is elérheti. A DDS-3 szabvány most már akár 12 GB (vagy tömörítve 24 GB) kapacitást is elérhetõvé tesz. A 4 mm-es meghajtók, hasonlóan a 8 mm-es meghajtókhoz, spirális pásztázást alkalmaznak. A spirális pásztázás összes elõnye és hátránya ezért egyaránt él a 4 mm-es és 8 mm-es meghajtók esetén. A szalagok 2 000 menet vagy 100 teljes mentes után kopnak el. 8 mm-es (Exabyte) szalagos adathordozó (8 mm-es) Exabyte szalagok A 8 mm-es szalagok a legelterjedtebb szalagos SCSI-meghajtók. A szalagok használatára ez a legjobb választás. Szinte mindegyik rendszerben egy 2 GB-os 8 mm-es Exabyte szalagos meghajtót használnak. A 8 mm-es meghajtók megbízhatóak, kényelmesek és csendesek. A kazetták olcsók és kicsik (4,8 x 3,3 x 0,6 col, azaz 122 x 84 x 15 mm). A 8 mm-es szalagok feje viszonylag csak rövid ideig bírja a szalag nagy mértékû oda-vissza mozgása miatt. Az adatátvitel sebessége 250 KB/mp-tõl 500 KB/mp-ig terjed, valamint a 300 MB-tól egészen 7 GB-os méretig találkozhatunk velük. A meghajtókban elérhetõ hardveres tömörítés képes közel megduplázni a kapacitást. Ezek a meghajtók önálló egységként is beszerezhetõek vagy egy 6 egységbõl álló és 120 szalagos szalagos könyvtár részeként. Ezek az egységek önállóan váltják a szalagokat. Az ilyen könyvtárak kapacitása eléri a közel 840 GB-ot. Az Exabyte Mammoth modellje szalagonként 12 GB (tömörítéssel pedig 24 GB) adatot képes tárolni, viszont a hagyományos szalagos meghajtóknál nagyjából kétszer többe kerül. Az adatok spirális pásztázással kerülnek a szalagra, és a fejek adott (nagyjából 6 fokos) szögben állnak a szalag felett. A szalag a fejeket tartó orsó köré tekeredik, körülbelül 270 fokban. Ennek eredményképpen nagyobb adatsûrûség és szorosan zárt sávok jönnek létre, ahogy ebben a szögben a fej eljut a szalag egyik élérõl a másikra. QIC szalagos adathordozó QIC-150 A QIC-150 meghajtók és szalagok talán a legelterjedtebb szalagos egységek és adathordozók. A QIC szalagos meghajtók a legolcsóbb komolynak tekinthetõ biztonsági mentésre alkalmas meghajtók. Az olcsóság azonban megköveteli a maga árát. A QIC-szalagok a 4 és 8 mm-es szalagokkal szemben akár ötször is drágábbak lehetnek gigabyte-onként. De ha megelégszünk csupán féltucat szalaggal is, akkor a QIC jó vásárnak tûnhet. A QIC a leginkább elterjedtebb szalagos meghajtó. Minden rendszerben biztonsan találunk valamilyen minõségben QIC-meghajtót. A QIC fizikailag hasonló (és gyakran azonos) felépítésû szalagokat gyárt rengeteg különbözõ adatsûrûséggel. Az ilyenkor keletkezõ súrlódások miatt a QIC-meghajtók egyáltalán nem nevezhetõek csendesnek. Az ilyen típusú meghajtók az adatok rögzítése elõtt külön hangjelenség kíséretében keresik meg a megfelelõ pozíciót és tisztán hallható, ahogy olvasnak, írnak és keresnek. A QIC-szalagok mérete 6 x 4 x 0,7 col (avagy 152 x 102 x 17 mm). Az adatátviteli sebesség nagyjából 150 KB/mp-tõl 500 KB/mp-ig terjedhet. A kapacitás szalagonként 40 MB és 15 GB között változhat. A legtöbb újabb QIC-meghajtó támogatja a hardveres tömörítést. QIC-meghajtókat azonban egyre kevésbé találhatunk, helyüket szépen lassan mindenhol átveszik a DAT-meghajtók. A szalagokra sávokban rögzítik az adatokat. Ezek a sávok szalag felületének hosszanti tengelyén futnak az egyik végétõl a másikig. A sávok száma valamint a sávok vastagsága a szalagok kapacitásától függõen változnak. Ha nem is összes legújabb, de a legtöbb meghajtó legalább olvasás szintjén kompatibilis a régebbi típusokkal (de gyakran írásban is). A QIC híresen megbízható az adatbiztonság tekintetében (a mechanikája sokkal egyszerûbb és strapabíróbb a spirális pásztázással mûködõ meghajtókénál). A szalagokat 5000 mentés után érdemes lecserélni. DLT szalagos adathordozó DLT A DLT rendelkezik a legnagyobb adatátviteli sebességgel az itt összefoglalt mezõnyben. A 1/2 colos (12,5 mm-es) szalag egy egyorsós tokban foglal helyet (mérete 4 x 4 x 1 col, azaz 100 x 100 x 25 mm). A tok egyik oldalán végig egy csúszó kapu található. A meghajtó ezt a kaput nyitja ki és ezen keresztül húzza be a szalagot. A szalag elején található egy ovális lyuk, amibe a meghajtó bele tud akaszkodni. A feszítõ orsó a szalagos meghajtóban foglal helyet. Az összes többi szalag esetén (kivéve egyedül a 9 sávos szalagokat) mind a segéd- és feszítõ orsók magában a kazettában találhatóak. Az adatátviteli sebessége megközelítõleg 1,5 MB/mp, tehát háromszor nagyobb bármelyik 4 mm-es, 8 mm-es vagy QIC-szalagos egységénél. Az adattároló képessége kazettánként 10 GB-tól 20 GB-ig terjedhet. A meghajtók egyaránt elérhetõek többkazettás, cserélgetõs és többkazettás, többmeghajtós könyvtárakban is, melyek 5 kazettától egészen 900 kazettáig, illetve 1 meghajtótól 20 meghajtóig képesek befogadni, így teljes tárterületük 50 GB-tól 9 TB-ig terjed. A DLT Type V formátum tömörítéssel közel 70 GB-os kapacitást képes elérni. A szalagra az adatok a haladási iránnyal párhuzamosan kerülnek fel (akárcsak a QIC-szalagok esetében). Egyszerre két sávot rögzít. A író/olvasó fejek élettartama viszonylag nagy. Ahogy a szalag megáll, a fej és a szalag között nincs szükség további relatív mozgásra. AIT szalagos adathordozó AIT Az AIT a Sony új formátuma, ami egészen 50 GB mennyiségû adatot képes tárolni (tömörítéssel) egyetlen szalagon. A szalagokat memóriachipekkel látják el, melyek a szalag tartalmát indexelik. Az indexek felhasználásával aztán a szalagos meghajtó villámgyorsan képes meghatározni a szalagon található állományok helyét, szemben az ilyenkor megszokott többperces mûvelettel. A SAMS:Alexandria és a hozzá hasonló szoftverek negyven vagy több AIT-szalagos könyvtárral is képesek egyszerre dolgozni, és közvetlenül a szalagok memóriájával veszik fel a kapcsolatot a tartalmuk megjelenítéséhez, a mentett állományok rendszerezéséhez, a helyes szalag megkereséséhez, betöltéséhez és visszatöltéséhez. Az ilyen könyvtárak a 20 000 dolláros (kb. 3,5 millió forintos) árkategóriába tartoznak, ami miatt csak egy kicsivel csúsznak ki a hobbi kategóriából. Az új szalagok elsõ használata Amikor az elsõ alkalommal akarunk beolvasni vagy írni egy új, teljesen üres szalagot, hibára fogunk futni. Egy ehhez hasonló konzolüzenet fog megjelenni: sa0(ncr1:4:0): NOT READY asc:4,1 sa0(ncr1:4:0): Logical unit is in process of becoming ready A szalag nem tartalmaz azonosító blokkot (Identifier Block) a nulladik blokkban. A QIC-525 szabvány átvétele óta mindegyik QIC szalagos meghajtó létrehozza ezt az azonosító blokkot. Tehát két megoldás létezik: Az mt fsf 1 paranccsal felírunk egy ilyen azonosító blokkot a szalagra. A meghajtó elõlapján található gomb segítségével dobassuk ki a szalagot. Rakjuk vissza a szalagot és hajtsunk végre rajta egy dump parancsot. A dump parancs erre egy DUMP: End of tape detected (szalag vége) hibaüzenetet ad, majd a következõ jelenik meg a konzolon: HARDWARE FAILURE info:280 asc:80,96. Tekertessük vissza a szalagot az mt rewind paranccsal. A szalag következõ mûvelete most már sikeres lesz. Biztonsági mentés hajlékonylemezekre Hajlékonylemezre is lehet biztonsági mentést készíteni? biztonsági floppyk floppy lemezek A floppy lemezek nem igazán felelnek meg biztonsági mentés készítésére, mivel: Nem megbízható adathordozók, különösen hosszabb idõre. Esetükben a mentés és visszaállítás nagyon lassú. Kapacitásuk erõsen korlátozott (annak már régen elmúlt az ideje, amikor egész merevlemezeket tudtunk lementeni egy tucat floppyra). Habár ha máshogy nem tudunk biztonsági mentést készíteni, akkor a floppy lemezekkel még mindig jobban járunk, mint nélkülük. Ha már mindenképpen floppy lemezeket kell használnunk, akkor igyekezzünk minél jobb minõségûeket beszerezni. Tehát az olyan floppyk, amik már évek óta kavarognak az irodában, erre a célra nem éppen bizonyulnak a legjobb választásnak. Ideális esetben egy megbízható gyártótól származó új floppykat használunk. Tehát akkor hogyan mentsük az adatokat hajlékonylemezre? Legegyszerûbban a &man.tar.1; (többkötetes) opciójával tudunk floppy lemezre menteni, aminek használatával több floppyra kiterjedõ mentéseket is készíthetünk. Az aktuális könyvtár és a benne levõ alkönyvtárak tartalmát (root) felhasználóként a következõ paranccsal tudjuk lementeni: &prompt.root; tar Mcvf /dev/fd0 * Amikor az elsõ floppy megtelik, a &man.tar.1; kérni fogja a következõ kötetet (volume) (mivel a &man.tar.1; adathordozótól független módon hivatkozik a kötetekre, tehát ebben a környezetben a kötet egy floppy lemezt jelent): Prepare volume #2 for /dev/fd0 and hit return: Az üzenet fordítása: Készítse elõ a 2. kötetet a /dev/fd0 eszközön és nyomja le a return billentyût A folyamat egészen addig ismétlõdik (a kötetek számának növekedésével), amíg az összes állomány lementésre nem kerül. Lehet tömöríteni a mentéseket? tar gzip tömörítés Sajnos a &man.tar.1; többkötetes mentések esetén nem engedi a beállítás használatát. Természetesen ettõl függetlenül a &man.gzip.1; segítségével még be tudjuk tömöríteni az összes állományt, a &man.tar.1; paranccsal floppyra menteni ezeket, majd a &man.gunzip.1; paranccsal kitömöríteni. Hogyan állítsuk vissza a biztonsági mentéseket? Az egész mentés visszaállításához adjuk ki a következõ parancsot: &prompt.root; tar Mxvf /dev/fd0 Két módon tudunk csak bizonyos állományokat visszaállítani. Elõször is, tegyük be a mentés elsõ lemezét és adjuk ki a következõ parancsot: &prompt.root; tar Mxvf /dev/fd0 állomány A &man.tar.1; segédprogram ezután sorban kérni fogja a többi lemezt egészen addig, amíg meg nem találja a keresett állományt. Vagy ha pontosan tudjuk, hogy melyik lemezen található a keresett állomány, akkor az iménti parancs használatát azzal a lemezzel kezdjük. Vigyázzunk, mert ha a lemezen található elsõ állomány az elõzõ lemezen kezdõdik, akkor a &man.tar.1; figyelmeztetni fog minket, hogy nem állítja vissza még akkor sem, ha erre nem is kértük! Lowell Gilbert Eredetileg készítette: Mentési stratégiák Egy biztonsági mentés kidolgozása során az elsõ követelmény gondoskodnunk az alábbi problémákról: Lemezhiba Az állományok véletlen törlése Az állományok véletlenszerû károsodása Számítógépek teljes megsemmisülése (például tûz által), belértve a közelében tárolt összes biztonsági mentést Tökéletesen megoldható, hogy egyes rendszerek a fentebb felsorolt problémák mindegyikét teljesen eltérõ technikával oldják meg. A nagyon személyes rendszerektõl és a nagyon értéktelen adatoktól eltekintve szinte egyértelmûen kizárt, hogy egyetlen technika képes lefedni az összes problémát. Kelléktárunk néhány alapvetõ eszköze: Az egész rendszer mentése, amit egy megbízható helyre elzárt, tartós adattárolóra készítünk. Ez tulajdonképpen védelmet biztosít a fentebb megemlített összes probléma esetében, de lassú és kényelmetlen róla visszaállítani az adatokat. A közelben és/vagy neten is tarthatunk errõl másolatokat, de még így is kényelmetlen az állományok visszaállítása, különösen az egyszerû felhasználók számára. Pillanatképek készítése az állományrendszerrõl. Ez valójában csak olyan esetekben lehet a segítségünkre, amikor véletlenül töröltünk állományokat, ám ilyenkor határozottan jól jön, mivel igen gyorsan és könnyen lehet vele dolgozni. Az egész állományrendszer és/vagy az összes lemez másolata (például az &man.rsync.1; idõszakos alkalmazása a komplett gépre). Az általában az egyedi igényekkel bíró hálózatok esetében eshet a kezünkre. A lemezhiba ellen védelemben ez a megoldás általában a RAID alatt áll. A véletlenül törölt állományok visszaállításának tekintetében az UFS pillanatképeivel mérhetõ össze, de ez leginkább a saját igényeinktõl függ. RAID alkalmazása. A lemezek meghibásodása esetén segíti minimalizálni vagy elkerülni a kiesést, ugyan gyakori lemezhibák árán (mivel ilyenkor több lemezt használunk) de kisebb sürgõsséggel. Az állományok ujjlenyomatának ellenõrzése. Az &man.mtree.8; segédprogram nagyon hasznos tud lenni ebben az esetben. Habár ez nem egy mentési technika, mégis segít megállapítani, hogy mikor kell nyugdíjba küldenünk a biztonsági mentéseinket. Ez különösen az aktív nem használt mentésekre vonatkozik, ezeket bizonyos idõ elteltével mindig érdemes ellenõrizni. Nagyon könnyû lenne további technikákat is felsorolni, melyek legtöbbje az iméntiek valamilyen kombinációja lenne. A speciális igények általában speciális technikákat eredményeznek (például egy éles adatbázis biztonsági mentése általában az adott adatbáziskezelõ rendszer közremûködését is elvárja). Mindig fontos tudni, hogy milyen veszélyek ellen védekezünk és hogyan kezeljük le ezeket. Alapvetõ tudnivalók a biztonsági mentésrõl A &man.dump.8;, &man.tar.1; és &man.cpio.1; a három legfontosabb biztonsági mentésekkel kapcsolatos program. Mentés és helyreállítás biztonsági mentést végzõ szoftverek mentés / helyreállítás dump restore A &unix; típusú rendszerekben a biztonsági mentést hagyományosan a dump és restore programok végzik. A meghajtókat lemezblokkok összeségeként kezelik, az állományrendszerek által létrehozott állományok, linkek és könyvtárak szintje alatt. Eltérõen más, biztonsági mentést végzõ szoftverektõl, a dump az adott eszközön egy egész állományrendszert képes lementeni. Nem képes csak az állományrendszer vagy egy több állományrendszerre kiterjedõ könyvtárszerkezet egy részét lementeni. A dump nem állományokat és könyvtárakat ír a szalagra, hanem nyers adatblokkokat, amelyek állományokat és könyvtárakat formáznak. A restore parancs az adatokat alapértelmezés szerint a /tmp könyvtárba tömöríti ki. Ha nem lenne elegendõ helyünk a /tmp könyvtárban, akkor a TMPDIR környezeti változó átállításával ehelyett megadhatunk egy olyat, ahol már kellõ mennyiségû terület áll rendelkezésre a restore akadálytalan lefutásához. Ha a dump parancsot a gyökér könyvtárban adjuk ki, akkor nem fogja lementeni a /home vagy /usr vagy bármilyen más könyvtárat, mivel ezek jellemzõ módon más állományrendszerek csatlakozási pontja vagy más állományrendszerekre mutató szimbolikus linkek. A dump parancsnak vannak olyan rigolyái, amelyek még az AT&T UNIX 6. verziójából (1975 környékérõl) maradtak vissza. Az alapértelmezett paraméterezése 9 sávos szalagokat feltételezi (6250 bpi), nem pedig a napjainkban elterjedt nagy írássûrûsségû (egészen 62 182 ftpi-s) adathordozókat. Ezek az alapértelmezések természetesen paranccsorból felülbírálhatóak, és így a manapság alkalmazott szalagos meghajtók teljes kapacitása is kihasználható vele. .rhosts Emellett az rdump és rrestore programok segítségével hálózaton keresztül is le tudjuk menteni az adatainkat egy másik számítógépre csatlakoztatott szalagos egységre. Mind a két program az &man.rcmd.3; és a &man.ruserok.3; parancsokat használja a távoli szalagos meghajtó eléréséhez. Az rdump és rrestore paramétereinek a távoli számítógép használatához kell illeszkedniük. Amikor egy &os; rendszerû számítógépet az rdump paranccsal egy Sun rendszerû, komodo nevû számítógépre mentünk, amelyhez egy Exabyte szalagos meghajtó csatlakozik, akkor ezt a írjuk be: &prompt.root; /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1 Figyelem: az .rhosts állományon keresztül hitelesítésnek megvannak a maga biztonsági kockázatai. Ne felejtsük el felmérni ezt a saját környezetünkben sem. A dump és restore parancsokat az ssh használatával még biztonságosabbá tehetjük. A <command>dump</command> használata az <application>ssh</application> alkalmazással &prompt.root; /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \ célfelhasználó@cél.gép.hu dd of=/nagyállományok/dump-usr-l0.gz Vagy az RSH környezeti változó megfelelõ beállításával használhatjuk a dump beépített módszerét: A <command>dump</command> használata az <application>ssh</application> alkalmazással, az <envar>RSH</envar> környezeti változó beállításával &prompt.root; RSH=/usr/bin/ssh /sbin/dump -0uan -f célfelhasználó@cél.gép.hu:/dev/sa0 /usr <command>tar</command> biztonsági mentést végzõ szoftverek tar A &man.tar.1; is az AT&T UNIX 6. verziójáig nyúlik vissza (tehát nagyjából 1975-ig). A tar az állományrendszerrel szoros együttmûködésben dolgozik, állományokat és könyvtárakat ír a szalagra. A tar ugyan nem ismeri a &man.cpio.1; által felkínált összes lehetõséget, de nincs is szüksége olyan szokatlan paranccsoros összekapcsolásokra, mint a cpio parancsnak. tar A &os; 5.3 vagy késõbbi változataiban a GNU tar és az alapértelmezés szerinti bsdtar egyaránt elérhetõ. A GNU változat a gtar paranccsal hívható meg. Az rdump parancshoz hasonló felírásban képes kezelni a távoli eszközöket. Tehát így tudjuk használni a tar parancsot a komodo nevû Sun számítógép Exabíte szalagos meghajtójának elérésére: &prompt.root; /usr/bin/gtar cf komodo:/dev/nsa8 . 2>&1 Ugyanez eltérhetõ a bsdtar használatával is, amikor az rsh programmal összekapcsolva küldünk át a távoli szalagos egységre. &prompt.root; tar cf - . | rsh hálózati-név dd of=szalagos-eszköz obs=20b Ha a hálózaton keresztül mentés során fontos számunkra a biztonság, akkor az rsh parancs helyett az ssh parancsot használjuk. <command>cpio</command> biztonsági mentést végzõ szoftverek cpio A &man.cpio.1; eredetileg a &unix; szalagos programjai és szalagos egységei között közvetített. A cpio parancs (többek közt) képes a byte-ok sorrendjének felcserélésére, több különbözõ archívum formátuma szerint írni és adatokat közvetíteni más programok felé. Ez utóbbi lehetõsége miatt a cpio kíválóan alkalmas a telepítõeszközök számára. A cpio nem képes bejárni a könyvtárszerkezetet, és az állományok listáját a szabványos bemeneten keresztül kell megadni neki. cpio A cpio nem támogatja a biztonsági mentés átküldését a hálózaton. Programok összekapcsolásával és az rsh használatával tudunk adatokat küldeni távoli szalagos meghajtókra. &prompt.root; for f in könyvtár_lista; do find $f >> mentési.lista done &prompt.root; cpio -v -o --format=newc < backup.list | ssh felhasználó@gép "cat > mentõeszköz" Ahol a könyvtár_lista a menteni kívánt könyvtárak listája, a felhasználó@gép a mentést végzõ gép felhasználójának és hálózati nevének együttese, valamint a mentõeszköz, ahova a mentés kerül (például /dev/nsa0). <command>pax</command> biztonsági mentést végzõ szoftverek pax pax POSIX IEEE A &man.pax.1; az IEEE/&posix; válasza a tar és cpio programokra. Az évek során a tar és a cpio különbözõ változatai egy kissé inkompatibilissé váltak. Ezért a szabványosításuk kiharcolása helyett inkább a &posix; létrehozott egy új archiváló segédprogramot. A pax megpróbálja írni és olvasni a cpio és tar formátumok legtöbb változatát, valamint emellett további saját formátumokat is kezel. A parancskészlete inkább a cpio parancséra emlékeztet, mintsem a tar parancséra. <application>Amanda</application> biztonsági mentést végzõ szoftverek Amanda Amanda Az Amanda (Advanced Maryland Network Disk Archiver) egy kliens-szerver alapú mentési rendszer, nem pedig egy önálló program. Az Amanda szerver menti tetszõleges számú számítógép adatát egyetlen szalagra, melyek az Amanda klienst futtatják és hálózaton keresztül hozzá csatlakoznak. A nagy mennyiségû és nagy kapacitású lemezekkel rendelkezõ rendszerekben közvetlenül a mentéshez szükséges idõ nem áll rendelkezésre a feladat elvégzéséhez. Az Amanda viszont képes megoldani ezt a problémát. Az Amanda képes egy saját lemez használatával egyszerre több állományrendszerrõl is biztonsági mentést készíteni. Az Amanda archívumkészleteket hoz létre: az Amanda konfigurációs állományában megadott állományrendszerekrõl készít teljes mentést egy adott idõ alatt egy adott mennyiségû szalagra. Az archívumkészlet ezenkívül még tartalmaz egy napi inkrementális (vagy különbözeti) mentést is minden egyes állományrendszerrõl. A sérült állományrendszerek visszaállításához mindig a legújabb teljes biztonsági mentésre és a hozzá tartozó inkrementális mentésekre van szükségünk. A konfigurációs állomány segítségével precíz irányítást gyakorolhatunk a létrehozott mentések és az Amanda által keltett hálózati forgalom felett. Az Amanda a fentiek közül bármelyik programmal képes az adatokat szalagra rögzíteni. Az Amanda portként vagy csomagként is elérhetõ, alapértelmezés szerint nem települ. Ne csináljunk semmit A Ne csináljunk semmit nem egy újabb számítógépes program, hanem egy igen gyakran alkalmazott mentési stratégia. Nem kell beruházni. Nem kell semmilyen biztonsági mentési rendet követni. Egyszerûen semmit se csinálunk. Ha véletlenül valami történne az adatainkkal, akkor csak mosolyogjunk és törõdjünk bele! Amennyiben az idõnk és adataink keveset vagy éppen semmit se érnek, akkor a Ne csináljunk semmit az elérhetõ legjobb biztonsági mentési megoldás számítógépünk számára. De legyünk óvatosak, mert a &unix; egy igen hasznos eszköz, és fél éven belül könnyen úgy találhatjuk magunkat, hogy mégis csak vannak értékes adataink. A Ne csináljunk semmit tökéletesen megfelelõ mentési módszer a /usr/obj és a hozzá hasonló módon a számítógépen automatikusan generált könyvtárak és állományok esetében. Ugyanilyen példa lehetne a kézikönyv HTML vagy &postscript; változata. Ezek a formátumok ugyanis az SGML források alapján keletkeznek, így a HTML vagy &postscript; állományok mentése nem életbevágó. Az SGML állományokat viszont már annál inkább mentsük! Melyik a legjobb? LISA &man.dump.8; Pont. Elizabeth D. Zwicky komolyan letesztelte az itt felsorolt összes programot. A &unix; állományrendszerek jellegzetességeinek és rajtuk az összes adatunk megõrzésének egyértelmûen a dump felel meg a legjobban. Elizabeth a minden egyes program tesztjéhez olyan állományrendszereket hozott létre, amelyek rengeteg különféle szokatlan helyzetet tartalmaztak (valamint néhány nem annyira szokatlant). Az érintett jellegzetességek: lyukas állományok, lyukas állományok és egy halom nulla, állományok érdekes karakterekkel a nevükben, olvashatatlan és írhatatlan állományok, eszközök, a mentés közben méretüket változtató állományok, a mentés közben keletkezõ és megszûnõ állományok és még sok minden más. Az eredményeit a LISA V-ben jelentette meg 1991. októberében. Lásd A biztonsági mentéshez és archiváláshoz használt programok tesztje (angolul). Az adatok helyreállítása vészhelyzetben A katasztrófa elõtt Csupán négy lépést kell megtennünk az esetleges katasztrófák bekövetkezésének esetére. bsdlabel Elõször is két példányban nyomtassuk ki az egyes lemezek lemezcímkéjét (például a bsdlabel da0 | lpr paranccsal) valamint az állományrendszerek táblázatát (az /etc/fstab állományt) és az összes rendszerindításkor megjelenõ üzenetet. helyreállító lemezek Másodsorban gondoskodjunk róla, hogy a helyreállító lemezek (boot.flp és fixit.flp) használatakor minden eszközünk látható. Ezt a legkönnyebben úgy tudjuk ellenõrizni, hogy újraindítjuk a gépet a lemezrõl és átnézzük a rendszerindítás során megjelenõ üzeneteket. Ha szerepel bennük minden eszköz és a rendszer indulása után mûködõképesek, akkor jöhet a következõ lépés. Ellenkezõ esetben létre kell hoznunk két saját rendszerindító lemezt, amelyeken a rendszermag olyan változata található, amely képes csatlakoztatni az összes lemezünket és el tudja érni a szalagos egységünket. A floppykon a következõknek kell meglennie: fdisk, bsdlabel, newfs, mount és a program, amellyel a biztonsági mentéseinket kezeljük. Az összes program legyen statikusan linkelt. Ha a dump programot használjuk, akkor a lemezekrõl ne felejtsük le a restore programot sem. A harmadik lépésben igyekezzünk minél gyakrabban szalagra menteni. Mindig gondoljuk arra, hogy a legutolsó mentés óta létrehozott változatásaink teljesen el fognak veszni. A mentéseket tartalmazó szalagokat tegyük írásvédetté. A negyedik lépésben ellenõrizzük a helyreállító lemezeket (vagy a boot.flp és fixit.flp állományokat, vagy a második lépésben készített saját lemezeinket) és mentéseket tartalmazó szalagokat. Jegyezzük le az eljárást. Ezeket a jegyzeteket is rakjuk el rendszerindító lemezekkel, a kinyomtatott adatokkal és a mentéseket tartalmazó szalagokkal együtt. Ezek a jegyzetek megvédenek minket attól, hogy a helyreállítás közbeni kétségbeesésünkben nehogy véletlenül tönkretegyük a biztonsági mentéseinket. (Hogy miként is? Például ha a tar xvf /dev/sa0 parancs helyett izgalmunkban a tar cvf /dev/sa0 parancsot gépeljük be, akkor azzal felülírjuk a biztonsági mentéseinket). A fokozott biztonság kedvéért minden alkalommal készítsünk rendszerindító lemezeket és legalább két mentést. Az egyiket valamilyen távoli helyen tároljuk. Ez a távoli hely NE ugyanannak az épületnek az alagsora legyen! Számos cég alaposan megtanulta ezt a szabályt a Világkereskedelmi központ tragédiája kapcsán. Ez a távoli hely számítógépeinkbõl és merevlemezes meghajtóinkól is fizikailag jól elkülöníthetõ, jelentõs távolságban legyen. A rendszerindító lemezek létrehozásához használható szkript /mnt/sbin/init gzip -c -best /sbin/fsck > /mnt/sbin/fsck gzip -c -best /sbin/mount > /mnt/sbin/mount gzip -c -best /sbin/halt > /mnt/sbin/halt gzip -c -best /sbin/restore > /mnt/sbin/restore gzip -c -best /bin/sh > /mnt/bin/sh gzip -c -best /bin/sync > /mnt/bin/sync cp /root/.profile /mnt/root chmod 500 /mnt/sbin/init chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt chmod 555 /mnt/bin/sh /mnt/bin/sync chmod 6555 /mnt/sbin/restore # # Egy minimális állományrendszeri táblázat létrehozása. # cat > /mnt/etc/fstab < /mnt/etc/passwd < /mnt/etc/master.passwd < A katasztrófa után Az alapvetõ kérdés: a hardver túlélte? Ha rendszeresen készítettünk biztonsági mentéseket, akkor a szoftverek miatt egyáltalán nem kell aggódnunk. Ha a hardver megsérült, akkor a számítógép használatának újból megkezdése elõtt javasolt cserélni a meghibásodott alkatrészeket. Ha a hardverrel minden rendben találtunk, akkor nézzük meg a floppykat. Ha saját rendszerindító lemezt használunk, akkor indítsuk el egyfelhasználós módban (a boot: parancssornál írjuk be, hogy -s) és ugorjuk át a következõ bekezdést. Amennyiben viszont a boot.flp és fixit.flp állományok alapján készítettük a lemezeket, olvassunk tovább. Helyezzük a boot.flp tartalmú lemezt az elsõdleges floppy meghajtóba és indítsuk el vele a számítógépet. Az eredeti telepítõmenü jelenik meg ezután a képernyõn. Innen válasszuk ki a Fixit -- Repair mode with CDROM or floppy (Helyreállítás -- A rendszer helyreállítása CD-rõl vagy floppyról) menüpontot. Amikor kéri a telepítõ, tegyük be a fixit.flp alapján készült lemezt. A restore és az összes többi számunkra fontos program a /mnt2/rescue könyvtárban található (vagy a &os; 5.2-nél korábbi változatai esetén a /mnt2/stand könyvtárban). Egyenként állítsuk vissza az egyes állományrendszereket. mount gyökér partíció bsdlabel newfs A mount paranccsal próbáljuk meg csatlakoztatni az elsõ lemezünk rendszerindító partícióját (például mount /dev/da0a /mt). Ha a lemezcímke megsérült, akkor bsdlabel alkalmazásával partícionáljuk újra a lemezt és címkézzük meg a korábban kinyomtatott címke adatainak megfelelõen. A newfs segítségével újra hozzuk létre az állományrendszereket. Írható-olvasható módban csatlakoztassuk újra a floppy rendszerinító partícióját (mount -u -o rw /mnt). A biztonság mentést végzõ program és a biztonsági mentést tartalmazó szalagok használatával állítsuk helyre az állományrendszer tartalmát (például restore vrf /dev/sa0). Válasszuk le az állományrendszert (például umount /mnt). Mindegyik sérült állományrendszerre ismételjük a folyamatot. Ahogy mûködõképessé vált a rendszerünk, mentsük az adatainkat új szalagokra. Akármi is okozta a rendszer összeomlását vagy az adatvesztést, ismét lecsaphat. Ha most áldozunk erre még egy órát, akkor azzal a késõbbiekben számos kellemetlenségtõl óvhatjuk meg magunkat. * Mit tegyek, ha nem készültem fel a katasztrófára? ]]> Marc Fonvieille Átdolgozta és feljavította: Hálózat, memória és állomány alapú állományrendszerek virtuális lemezek lemezek virtuális A számítógépünkben létezõ fizikai lemezek, például floppyk, CD-k, merevlemezek és egyebek mellett a lemezek egy másik formáját is képes megérteni a &os; — a virtuális lemezeket. NFS Coda lemezek memória A virtuális lemeznek tekinthetõek többek közt az olyan hálózati állományrendszerek, mint például a Hálózati állományrendszer (Network File System, NFS) és a Coda, valamint a memóriában és állományokban létrehozott állományrendszerek. Attól függõen, hogy a &os; melyik változatát használjuk, az állomány és memória alapú állományrendszerek létrehozásához, illetve használatához különbözõ segédprogramokra lesz szükségünk. A &man.devfs.5; a felhasználó számára láthatatlan módon hozza létre az eszközök leíróit. Állomány alapú állományrendszerek lemezek állomány alapú &os; alatt az &man.mdconfig.8; segédprogram segítségével tudunk memórialemezeket (&man.md.4;) beállítani és engedélyezni. Az &man.mdconfig.8; használatához be kell töltenünk az &man.md.4; modult vagy hozzá kell tennünk a rendszermagunk beállításait tartalmazó állományhoz: device md Az &man.mdconfig.8; parancs háromféle memória alapú virtuális lemezt ismer: a &man.malloc.9;, állományok vagy lapozóterület használatával létrehozott memórialemezeket. Így lehet például csatlakoztatni a floppyk vagy CD-k állományokban tárolt image-eit. Egy meglevõ állományrendszer image-ének csatlakoztatása: Egy meglevõ állományrendszer image-ének csatlakoztatása az <command>mdconfig</command> paranccsal &prompt.root; mdconfig -a -t vnode -f image -u 0 &prompt.root; mount /dev/md0 /mnt Új állományrendszer létrehozása az &man.mdconfig.8; használatával: Új állomány alapú lemez létrehozása az <command>mdconfig</command> paranccsal &prompt.root; dd if=/dev/zero of=új-image bs=1k count=5k 5120+0 records in 5120+0 records out &prompt.root; mdconfig -a -t vnode -f új-image -u 0 &prompt.root; bsdlabel -w md0 auto &prompt.root; newfs md0a /dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes. super-block backups (for fsck -b #) at: 160, 2720, 5280, 7840 &prompt.root; mount /dev/md0a /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0a 4710 4 4330 0% /mnt Ha az beállítással nem adjuk meg az egység számát, akkor az &man.mdconfig.8; az &man.md.4; automatikus kiosztásán keresztül fog egy használatban még nem levõ eszközt kiválasztani. Az így kiosztott egység neve az md4 névhez hasonlóan jelenik meg a szabványos kimeneten. Az &man.mdconfig.8; használatának részleteirõl olvassuk el a hozzá tartozó man oldalt. Az &man.mdconfig.8; egy nagyon sokoldalú segédeszköz, habár használatakor viszonylag sok parancsot kell kiadni egy állomány alapú állományrendszer létrehozásához. A &os; azonban alapból tartalmaz még egy &man.mdmfs.8; nevû segédprogramot is, ami az &man.md.4; lemezeket az &man.mdconfig.8; segítségével állítja be, létrehoz rajtuk egy UFS típusú állományrendszert a &man.newfs.8; segítségével és csatlakoztatja a &man.mount.8; paranccsal. Így például, ha az iménti állományrendszert akarjuk létrehozni és csatlakoztatni, akkor egyszerûen csak gépeljünk be ennyit: Állomány alapú lemezek beállítása és csatlakoztatása az <command>mdmfs</command> paranccsal &prompt.root; dd if=/dev/zero of=új-image bs=1k count=5k 5120+0 records in 5120+0 records out &prompt.root; mdmfs -F új-image -s 5m md0 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0 4718 4 4338 0% /mnt Ha az paramétert az egység száma nélkül adjuk meg, akkor &man.mdmfs.8; az &man.md.4; automatikus kiosztására támaszkodva fog egy addig még nem használt eszközt kiválasztani. A &man.mdmfs.8; használatának pontos részleteivel kapcsolatban lásd a hozzá tartozó man oldalt. Memória alapú állományrendszerek lemezek memória állományrendszer A memória alapú állományrendszerek esetében általában a lapozóállomány alapú megközelítést alkalmazzák. A lapozóállomány alapúság nem arra utal, hogy a memórialemezt alapból kilapozzák lemezre, hanem inkább arra, hogy a memórialemez olyan területen jön létre, amelyet szükség esetén lemezre lehet lapozni. Memória alapú lemezeket a (rendszermag szintû) &man.malloc.9; használatával is létre lehet hozni, de a malloc alapú memórialemezeknél, különösen a nagyon nagyok esetében, a rendszer könnyen össze tud omlani, ha kifut a rendelkezésére álló memóriából. Új memória alapú lemez létrehozása az <command>mdconfig</command> paranccsal &prompt.root; mdconfig -a -t swap -s 5m -u 1 &prompt.root; newfs -U md1 /dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes. with soft updates super-block backups (for fsck -b #) at: 160, 2752, 5344, 7936 &prompt.root; mount /dev/md1 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md1 4718 4 4338 0% /mnt Új memória alapú lemez létrehozása az <command>mdmfs</command> paranccsal &prompt.root; mdmfs -s 5m md2 /mnt &prompt.root; df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md2 4846 2 4458 0% /mnt Memórialemezek leválasztása a rendszerrõl lemezek egy memórialemez leválasztása Amikor már nem akarunk tovább használni egy memória vagy állomány alapú állományrendszert, érdemes visszaadnunk az általuk felhasznált erõforrásokat a rendszernek. Elsõként válasszuk le magát az állományrendszert, majd az &man.mdconfig.8; segítségével kapcsoljuk le a lemezt a rendszerrõl és szabadítsuk fel az általa felhasznált erõforrásokat. Például az /dev/md4 eszközt így lehet lekapcsolni és felszabadítani: &prompt.root; mdconfig -d -u 4 A beállított &man.md.4; eszközökkel kapcsolatos többi információt az mdconfig -l paranccsal tudjuk lekérdezni. Tom Rhodes Írta: Az állományrendszerek pillanatképei állományrendszerek pillanatképek A &os; a Soft Updates mellett felkínál egy másik lehetõséget: az állományrendszerekrõl készíthetõ pillanatfelvételeket. Ezek a pillanatképek lehetõvé teszik a felhasználók számára, hogy adott állományrendszerekrõl képeket hozzanak létre és azt állományként kezeljék. A pillanatképeket az adott állományrendszerben kell létrehozni, és a felhasználók állományrendszerenként húsznál többet nem hozhatnak belõlük létre. Az aktív pillanatképek a szuperblokkban kerülnek rögzítésre, ezért az állományrendszerek leválasztása és újracsatlakoztatása esetén is megmaradnak, még újraindítás után is. Amikor egy pillanatképre már nincs tovább szükségünk, egy szimpla &man.rm.1; paranccsal eltávolítható. A pillanatképek tetszõleges sorrendben eltávolíthatóak, habár ilyenkor az összes általuk lefoglalt hely nem szabadul fel, mivel más pillanatképeknek még szüksége lehet bizonyos blokkjaira. Miután az &man.mksnap.ffs.8; paranccsal létrehoztunk egy pillanatképet tartalmazó állományt, beállítódik rá a módosíthatatlanságot jelentõ állományjelzõ. Egyedül az &man.unlink.1; parancs képez ez alól kivételt, mivel segítségével a pillanatképek eltávolíthatóak. A pillanatképek a &man.mount.8; paranccsal hozhatóak létre. A következõ módon tudjuk a /var egy pillanatképét elkészíteni a /var/snapshot/snap állományban: &prompt.root; mount -u -o snapshot /var/snapshot/snap /var Vagy a &man.mksnap.ffs.8; meghívásával is készíthetünk pillanatképeket: &prompt.root; mksnap_ffs /var /var/snapshot/snap Az állományrendszeren (például /var) a pillanatképeket tartalmazó állományokat a &man.find.1; paranccsal kereshetjük meg: &prompt.root; find /var -flags snapshot Ahogy elkészítettünk egy pillanatképet, több mindenre is felhasználhatjuk: Egyes rendszergazdák a pillanatképeket biztonsági mentésekhez használják, mivel ezek gond nélkül áttehetõek CD-re vagy szalagra. Az állományrendszerek sértetlenségét ellenõrzõ program, az &man.fsck.8; is lefuttatható egy ilyen pillanatképen. Feltéve, hogy az állományrendszer csatlakoztatásakor tiszta volt, mindig egy tiszta (és változásokat nem tartalmazó) eredményt kell kapnunk. Ennek megléte elengedhetetlen a háttérben futtatható &man.fsck.8; mûködéséhez. Futassuk le a &man.dump.8; segédprogramot a pillanatképen. Az így létrehozott mentés megegyezik az állományrendszer adott pillanatban felvett állapotával. Az beállítás megadásával maga a &man.dump.8; is képes egyetlen parancsban pillanatfelvételt készíteni, ebbõl létrehozni a mentést, majd eltávolítani. A pillanatképet képesek vagyunk a &man.mount.8; paranccsal az állományrendszer befagyasztott változataként csatlakoztatni: &prompt.root; mdconfig -a -t vnode -f /var/snapshot/snap -u 4 &prompt.root; mount -r /dev/md4 /mnt Így már a /mnt könyvtárba csatlakoztatva be tudjuk járni a befagyasztott /var állományrendszert. Minden a pillanatfelvétel készítésének idõpontjának megfelelõ állapotban fog maradni. Az egyetlen kivétel talán annyi, hogy korábbi pillanatképek nulla méretû állományként fognak megjelenni. Mikor befejeztük a pillanatképek használatát, a &man.umount.8; paranccsal le tudjuk választani: &prompt.root; umount /mnt &prompt.root; mdconfig -d -u 4 A és az állományrendszerek pillanatképeinek használatával, illetve mûszaki leírásukkal kapcsolatban látogassuk meg Marshall Kirk McKusick honlapját a címen (angolul). Az állományrendszerek kvótái nyilvántartás lemezterület lemezkvóták A kvóták használata az operációs rendszerben egy olyan választható lehetõség, aminek segítségével állományrendszerenként korlátozni tudjuk az egyes felhasználók vagy csoporttagok által elhasznált lemezterület és/vagy állományok mennyiségét. Ezt leggyakrabban olyan idõosztásos rendszerekben használják ki, ahol szükség lehet az egyes felhasználókra vagy csoportokra esõ erõforrások mennyiségének szabályozására. Ezzel tudjuk megakadályozni, hogy a felhasználók vagy csoportok elfogyasszák az összes rendelkezésre álló lemezterületet. A kvóták használatának beállítása Mielõtt nekilátnánk a kvóták használatának, meg kell gyõzõdnünk róla, hogy a rendszermagunkban megvan hozzá a szükséges támogatás. A kvótákat a következõ sorral lehet engedélyezni a rendszermag beállításait tartalmazó állományban: options QUOTA A gyári GENERIC rendszermag ezt alapból nem engedélyezi, ezért ehhez mindenképpen be kell állítani, le kell fordítani és telepíteni egy kell saját rendszermagot. A saját rendszermag létrehozásához kövessük a utasításait. Ha ezzel megvagyunk, akkor a következõ sorral bõvítsük ki az /etc/rc.conf állományt: enable_quotas="YES" lemezkvóták ellenõrzése A kvótákat kezelõ rendszer indításának finomabb szabályozására létezik még egy további beállítási lehetõség is. A rendszer indítása során általában az egyes állományrendszerek kvótáját a &man.quotacheck.8; program ellenõrzi. A &man.quotacheck.8; gondoskodik róla, hogy a kvótákat tároló adatbázis ténylegesen az állományrendszeren található adatokat tükrözi. Ez egy nagyon idõigényes folyamat, ami rányomja bélyegét a rendszer elindulásához szükséges idõ mennyiségére is. Amennyiben szeretnénk megtakarítani ezt a lépést, tegyük bele az /etc/rc.conf állományba a direkt erre a célra kialakított beállítást: check_quotas="NO" Végezetül az állományrendszereken az /etc/fstab megfelelõ módosításával tudjuk egyenként engedélyezni a lemezkvóták használatát. Itt lehet bekapcsolni az állományrendszerek felhasználókra vagy csoportokra, esetleg mind a kettõjükre vonatkozó kvótáikat. Ha felhasználói szintû kvótákat akarunk engedélyezni egy állományrendszeren, akkor az /etc/fstab állományban az állományrendszer beállításai közé vegyük fel a opciót. Például így: /dev/da1s2g /home ufs rw,userquota 1 2 Ehhez hasonlóan tudjuk engedélyezni a helyett a opció használatával a csoportszintû kvótákat is. A felhasználói- és csoportszintû kvóták együttes engedélyezéséhez így kell átírni az állományrendszer bejegyzését: /dev/da1s2g /home ufs rw,userquota,groupquota 1 2 Alapértelmezés szerint az állományrendszerekhez tartozó kvóták a gyökerükben található quota.user valamint quota.group állományokban tárolódnak. Errõl részletesebben az &man.fstab.5; man oldalon olvashatunk. Noha még az &man.fstab.5; man oldala szerint is megadható más elérési út a kvótákat tároló állományokhoz, semmiképpen sem javasoljuk ezt, mert úgy tûnik, hogy a kvótákat kezelõ különbözõ segédprogramok ezzel nem képesek rendesen megbirkózni. Most kell újraindítani a rendszerünket az új rendszermaggal. Az /etc/rc magától le fogja futtatni a kezdeti kvótaállományok létrehozásához szükséges parancsokat az /etc/fstab állományban megadott állományrendszereken. Ennek megfelelõen tehát nem nekünk kell kézzel létrehoznunk ezeket az állományokat. Hétköznapi esetben egyáltalán nem kell manuális futtatnunk a &man.quotacheck.8;, &man.quotaon.8; vagy &man.quotaoff.8; parancsokat. Habár ha tisztában szeretnénk lenni a pontos mûködésükkel, akkor mindenképpen lapozzuk fel a hozzájuk tartozó man oldalakat. A kvóták beállítása lemezkvóták korlátok Ahogy sikerült beállítani a kvóták használatát, egybõl ellenõrizzük is a mûködõképességüket. Ezt legegyszerûbben a következõ paranccsal tehetjük meg: &prompt.root; quota -v Itt egy sorban összefoglalva láthatjuk a jelenlegi lemezhasználatot és az egyes állományrendszereken engedélyezett kvóták korlátait. Most már készenállunk arra, hogy az &man.edquota.8; paranccsal végre korlátokat is beállítsunk a kvótákhoz. Számos beállítás áll rendelkezésünkre a felhasználók vagy csoportok által lefoglalható lemezterület vagy a létrehozható állományok számának korlátozását illetõen. A helyfoglalást szabályozhatjuk lemezterület alapján (blokk kvóta) vagy az állományok száma szerint (állományleíró kvóta), esetleg a kettõ kombinációjával. A korlátok további két kategóriára bonthatóak: erõsre és gyengére. erõs korlát Az erõs korlátot (hard limit) nem lehet túllépni. Ahogy a felhasználó eléri a számára kiszabott erõs korlátot, semmilyen további területet nem használhat fel a kérdéses állományrendszeren. Például, ha a felhasználónak az állományrendszeren 500 kilobyte-os erõs korlátot állítottunk be, és éppen 490 kilobyte-nál tart, akkor a felhasználó innen már csak 10 kilobyte-nyi helyet foglalhat le. 11 kilobyte lefoglalása már nem fog sikerrel járni. gyenge korlát Ezzel szemben a gyenge korlátok (soft limit) egy adott ideig átléphetõek. Ezt az idõt türelmi idõnek (grace period) nevezik, ami alapértelmezés szerint egy hét. Ha a felhasználó a gyenge korláton felül marad a türelmi idõ után is, akkor ezt a gyenge korlát erõssé válik és semmilyen további helyfoglalásra nem lesz lehetõsége. Amikor a felhasználók újra a gyenge korlát alá kerül, a türelmi idõ is visszaáll a beállított értékére. A most következõ példában az &man.edquota.8; parancsot mutatjuk be. Amikor meghívjuk az &man.edquota.8; parancsot, akkor elindul az EDITOR környezeti változónak megfelelõ szövegszerkesztõ, illetve ennek hiányában a vi, és lehetõségünk nyílik a kvóta korlátainak módosítására. &prompt.root; edquota -u teszt Quotas for user teszt: /usr: kbytes in use: 65, limits (soft = 50, hard = 75) inodes in use: 7, limits (soft = 50, hard = 60) /usr/var: kbytes in use: 0, limits (soft = 50, hard = 75) inodes in use: 0, limits (soft = 50, hard = 60) Normális esetben minden kvótával rendelkezõ állományrendszerhez két sort kapunk. Közülük az egyik sorban szerepelnek a blokkok korlátai, a másikban az állományleírók korlátai. Ha valamelyiküket meg akarjuk változtatni, akkor egyszerûen csak át kell írnunk az adott korlát értékét. Például növeljük meg a felhasználók 50-es gyenge és 75-ös erõs blokk korlátját 500-as gyenge és 600-as erõs korlátra. Ehhez szerkesszük át a /usr: kbytes in use: 65, limits (soft = 50, hard = 75) sort erre: /usr: kbytes in use: 65, limits (soft = 500, hard = 600) Az új korlátok akkor fognak érvénybe lépni, miután kiléptünk a szövegszerkesztõbõl. Néha hasznos lehet a korlátokat adott felhasználói azonosítókhoz beállítani. Ezt az &man.edquota.8; parancs paraméterével tudjuk elvégezni. Elõször is állítsuk be egy felhasználónak a beállítani kívánt korlátokat, majd futtassuk le az edquota -p teszt kezdõuid-véguid parancsot. Például ha a teszt nevû felhasználónak állítottuk be a számunkra megfelelõ korlátokat, akkor a következõ paranccsal lehet a rá vonatkozó korlátokat kiterjeszteni a 10 000 és 19 999 közötti azonosítójú felhasználókra: &prompt.root; edquota -p teszt 10000-19999 Errõl bõvebben az &man.edquota.8; man oldalán kaphatunk felvilágosítást. A kvóták korlátainak és a lemezhasználat ellenõrzése lemezkvóták ellenõrzése A kvóták korlátait és a lemez jelenlegi kihasználtságát a &man.quota.1; vagy &man.repquota.8; parancsokkal is ellenõrizhetjük. A &man.quota.1; parancs segítségével ellenõrizhetõ az egyes felhasználók vagy csoportok kvótája és lemezhasználata. A felhasználók csak a saját adataikhoz férhetnek hozzá, illetve mindazon csoportokéhoz, aminek tagjai. Egyedül a rendszeradminisztrátor képes látni az összes felhasználó és csoport kvótáját. A &man.repquota.8; paranccsal kérdezhetõ le az összes kvóta és lemezhasználat rövid kimutatása minden olyan állományrendszeren, ahol azok engedélyezettek. A következõ kimenet a quota -v parancstól származik, ahol a felhasználónak két állományrendszeren is vannak kvótái: Disk quotas for user teszt (uid 1002): Filesystem usage quota limit grace files quota limit grace /usr 65* 50 75 5days 7 50 60 /usr/var 0 50 75 0 50 60 türelmi idõ A fenti példában látható, hogy a felhasználó a /usr állományrendszeren pillanatnyilag 15 kilobyte-tal van az 50 kilobyte-os gyenge korlátja felett és 5 napja van hátra a türelmi idõbõl. Vegyük észre a szám mellett levõ csillagot (*), amivel a rendszer jelzi, hogy a felhasználó túllépte a korlátját. A &man.quota.1; parancs kimenetében általában nem jelennek meg azok az állományrendszerek, amelyeken a felhasználónak ugyan vannak kvótái, de nem foglal rajtuk lemezterületet. A beállítás megadásával ezek az állományrendszerek is láthatóvá válnak, mint ahogy azt a fenti példában is megfigyelhettük a /usr/var esetében. Kvóták NFS-en keresztül NFS A kvóták az NFS szerver kvótákért felelõs alrendszerében is engedélyezhetõek. Az &man.rpc.rquotad.8; démon teszi az NFS klienseken futtatott &man.quota.1; parancsok számára elérhetõvé a kvótákkal kapcsolatos információkat, aminek köszönhetõen a felhasználók távolról is képesek lekérdezni a kvótáikat. Az rpc.rquotad aktivilásához a következõt kell beállítani az /etc/inetd.conf állományban: rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad Majd ne felejtsük el újraindítani az inetd démont sem: &prompt.root; /etc/rc.d/inetd restart Lucky Green Írta:

shamrock@cypherpunks.to
A lemezpartíciók titkosítása lemezek titkosítása A &os; kitûnõ futásközbeni védelmet ajánl fel az adatok illetéktelen hozzáférése ellen. Az állományok engedélyei és a kötelezõ hozzáférés-vezérlés (Mandatory Access Control, MAC, lásd ) segítenek megvédeni érzékeny adatainkat az illéktelenek ellen az operációs rendszer futása és a számítógép mûködése során. Azonban az operációs rendszerben kezelt engedélyek teljesen hatástalanok abban az esetben, ha a támadó fizikailag is képes hozzáférni a számítógépünkhöz, eltávolítani a merevlemezt és egy másik operációs rendszer segítségével kielemezni a rajta található fontos adatainkat. Függetlenül attól, hogy a támadó valójában miként is férkõzött hozzá a merevlemezünkhöz, vagy miként kapcsolta le a számítógépünket, a &os; megtalálható GEOM alapú lemeztitkosítás (gbde) és a geli titkosítási alrendszer egyaránt képes védelmet nyújtani a számítógépen található állományrendszerek számára az értékes adatok után kutató igen motivált betörõk ellen. A csupán egyes állományokra kiterjedõ körmönfont titkosítási módszerekkel szemben a gbde és a geli az egész állományrendszert észrevétlen módon titkosítja. Titkosítatlan adat nem is kerül a merevlemezre. A lemez titkosítása a <application>gbde</application> használatával Váljunk <username>root</username> felhasználóvá A gbde beállításához rendszeradminisztrátori jogosultságokra lesz szükségünk. &prompt.user; su - Password: Adjuk hozzá a &man.gbde.4; támogatását a rendszermag konfigurációs állományához Tegyük a következõ sort a rendszermag beállításait tartalmazó állományba: options GEOM_BDE Fordítsuk újra a rendszermagot a ben leírtak szerint. Indítsuk el a számítógépet az új rendszermaggal. A rendszermag újrafordítása helyett a kldload paranccsal is betölthetjük a &man.gbde.4; modulját: &prompt.root; kldload geom_bde A titkosított merevlemez elõkészítése A következõ példa azt feltételezi, hogy a rendszerünkhöz egy új merevlemezt adunk hozzá, amin egyetlen titkosított partíció foglal helyet. Ezt a partíciót a /private könyvtárba fogjuk csatlakoztatni. A gbde használható a /home és a /var/mail titkosítására is, de ennek megvalósítása olyan bonyolult utasításokat igényel, amelyek meghaladják ennek a bevezetésnek a kereteit. Az új merevlemez hozzáadása A ban bemutatottak szerint adjuk hozzá a rendszerünkhöz az új merevlemezt. A példában az új lemez partícióját a /dev/ad4s1c néven fogjuk tudni elérni. A /dev/ad0s1* eszközök a példában szereplõ &os; rendszer szabványos partícióit jelölik. &prompt.root; ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 Hozzunk létre egy könyvtárat a gbde zárolásainak tárolásához &prompt.root; mkdir /etc/gbde A gbdenek azért van szüksége a zárolásokat rögzítõ állományokra, hogy hozzá tudjon férni a titkosított partíciókhoz. Amennyiben ezt nem tudja megtenni, a gbde anélkül nem lesz képes visszafejteni a titkosított partíciókon tárolt adatokat, hogy az ezeket elérni akaró szoftvereknek ne kelljen jelentõsebb mértékben manuálisan beavatkoznia. Mindegyik titkosított partíció külön zároló állományt használ. A gbde partíció inicializálása A gbde által használt partíciókat használatuk elõtt inicializálni kell. Ezt a mûveletet azonban csak egyszer kell elvégezni: &prompt.root; gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock A &man.gbde.8; ekkor elindít egy szövegszerkesztõt és benne egy sablon segítségével be tudjuk állítani a különbözõ konfigurációs értékeket. Az UFS1 vagy UFS2 használata esetén állítsuk a szektorméretet 2048-ra: $FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $ # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...] A megjegyzés fordítása: A szektorméret az adatok írásának és olvasásának legkisebb egysége. Ha túlságosan kicsire választjuk meg, akkor csökken a teljesítmény és csökken a rendelkezésre álló hely. Ha viszont túlságosan nagyra hagyjuk, akkor azzal akadályozzuk az állományrendszerek munkáját. 512 a legkisebb érték, amely mindig megbízható. Az UFS esetén használjuk a fragmensek méretét. A &man.gbde.8; kétszer is rá fog kérdeni az adatok titkosítására használt jelmondatra. A jelmondatnak természetesen mind a kétszer ugyanannak kell lennie. A gbde védelmének hatékonysága teljesen mértékben az általunk választott jelmondat minõségétõl függ A könnyen megjegyezhetõ ám mégis biztonságos jelmondatok megválasztásához a Diceware Passphrase honlapján találunk egy kis segítséget (angolul). . A gbde init parancs létrehoz egy zároló állományt a gbde partícióhoz, amely ebben a példában az /etc/gbde/ad4s1c.lock néven keletkezett. A gbde zároló állományainak .lock névre kell végzõdniük, mivel az /etc/rc.d/gbde indítószkript csak ebben az esetben észleli rendesen. A gbde zároló állományait a titkosított partíciók tartalmával együtt kell lementeni. Miközben a zároló állomány törlése nem tudja megakadályozni, hogy az elszánt támadó visszafejtse a gbde által titkosított partíciót, addig a zároló állomány nélkül a jogos tulajdonos órási mennyiségû munka befektetése nélkül képtelen lesz hozzáférni a rajta levõ adatokhoz. Ez utóbbitól egyébként a &man.gbde.8; és a rendszer tervezõje is totálisan elhatárolja magát. A titkosított partíció illesztése a rendszermaghoz &prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock Ekkor a titkosított partíció illesztéséhez a rendszer kérni fogja az inicializálás során választott jelmondatot. Ezután az új titkosított eszköz megjelenik a /dev könyvtárban /dev/eszköznév.bde néven: &prompt.root; ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde Állományrendszer kialakítása egy titkosított eszközön Ahogy sikerült a titkosított eszközt illeszteni a rendszermaghoz, létre is tudunk hozni egy állományrendszert rajta. Erre a célra a &man.newfs.8; remekül használható. Mivel egy új UFS2 állományrendszerek inicializálása sokkal gyorsabb a régi UFS1 állományrendszerek inicializálásánál, ezért a &man.newfs.8; használata esetén az beállítás megadása ajánlott. &prompt.root; newfs -U -O2 /dev/ad4s1c.bde A &man.newfs.8; parancsot egy illesztett gbde partíción kell végrehajtani, amit onnan ismerhetünk meg, hogy az eszköz nevében szerepel a *.bde kiterjesztés. A titkosított partíció csatlakoztatása Hozzunk létre egy csatlakozási pontot a titkosított állományrendszer számára. &prompt.root; mkdir /privát Csatlakoztassuk a titkosított állományrendszert. &prompt.root; mount /dev/ad4s1c.bde /privát Ellenõrizzük a titkosított állományrendszer mûködõképességét A titkosított állományrendszert most már látja a &man.df.1; program és készen áll a használatra. &prompt.user; df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1037M 72M 883M 8% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 8.1G 55K 7.5G 0% /home /dev/ad0s1e 1037M 1.1M 953M 0% /tmp /dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr /dev/ad4s1c.bde 150G 4.1K 138G 0% /private Létezõ titkosított állományrendszerek csatlakoztatása A rendszer minden egyes indítása után az összes titkosított állományrendszert tényleges használata elõtt újra illeszteni kell a rendszermaghoz, ellenõrizni az épségét és csatlakoztatni. Az ehhez szükséges parancsokat root felhasználóként kell kiadni. A gbde partíció illesztése a rendszermaghoz &prompt.root; gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock A gbde partíció inicializálása során megadott jelmondatot kell megadnunk a mûvelet elvégzéséhez. Az állományrendszer épségének ellenõrzése Mivel a titkosított állományrendszerek az automatikus csatlakoztatáshoz még nem szerepeltethetõek az /etc/fstab állományban, ezért az ilyen állományrendszereket csatlakoztatásuk elõtt manuálisan ellenõriztetni kell a &man.fsck.8; lefuttatásával. &prompt.root; fsck -p -t ffs /dev/ad4s1c.bde A titkosított állományrendszer csatlakoztatása &prompt.root; mount /dev/ad4s1c.bde /privát A titkosított állományrendszer most már készen áll a használatra. A titkosított partíciók önálló csatlakoztatása Lehet írni olyan szkriptet, amely a titkosított partíciókat magától illeszti, ellenõrzi és csatlakoztatja, de biztonsági megfontolásokból semmi esetben sem szabad tartalmaznia a &man.gbde.8; jelszavát. Ehelyett azt javasoljuk, hogy az ilyen szkripteknek külön meg kelljen adni a jelszót konzolon vagy az &man.ssh.1; használatán keresztül. De használhatjuk a mellékelt rc.d szkriptet is. A szkript paramétereit az &man.rc.conf.5; állományon keresztül adhatjuk meg, például: gbde_autoattach_all="YES" gbde_devices="ad4s1c" gbde_lockdir="/etc/gbde" Ilyenkor a gbde által használt jelmondatot a rendszer indításakor kell megadni. Miután begépeltük a megfelelõ jelmondatot, a titkosított gbde partíció magától csatlakoztatásra kerül. Ez akkor lehet hasznos, ha a gbde megoldását hordozható számítógépeken alkalmazzuk. A gbde által alkalmazott titkosítási módszerek A &man.gbde.8; a szektorok tartalmát 128 bites AES használatával CBC módban titkosítja. A lemezen található minden egyes szektort eltérõ AES kulccsal kódolja. A gbde kriptográfiai felépítését, valamint mindazt, hogy az egyes szektorok kulcsai miként származtathatóak a felhasználó által megadott jelmondatból, a &man.gbde.4; man oldalán olvashatjuk. Kompatibilitási problémák A &man.sysinstall.8; nem kompatibilis a gbde által titkosított eszközökkel. A &man.sysinstall.8; indítása elõtt minden *.bde eszközt ki kell iktatni a rendszermagból, különben az eszközök keresése során össze fog omlani. A példánkban használt titkosított eszközt a következõ paranccsal kell lekapcsolni: &prompt.root; gbde detach /dev/ad4s1c Továbbá megjegyezzük azt is, hogy a &man.vinum.4; nem használja a &man.geom.4; alrendszert, ezért a gbde alkalmazása során nem használhatunk Vinum-köteteket. Daniel Gerzo Írta: A lemezek titkosítása a <command>geli</command> használatával A &os; 6.0 változatától kezdve egy új kriptográfiai GEOM osztály is a rendelkezésünkre áll, melyet pillanatnyilag &a.pjd; fejleszt. A geli segédprogram némileg különbözõ a gbde megoldásától — más lehetõségeket kínál fel és a titkosítást is egy eltérõ séma mentén valósítja meg. A &man.geli.8; legfontosabb jellemzõi a következõk: A &man.crypto.9; keretrendszerét használja — tehát ha rendelkezünk kriptográfiai hardverrel, akkor a geli automatikusan használni fogja. Több kriptográfiai algoritmust is ismer (melyek jelenleg az AES, Blowfish és a 3DES). Segítségével a rendszerindításhoz használt (gyökér) partíció is titkosítható. Ilyenkor a szükséges jelmondatot a rendszer indításakor kell megadni. Két független kulcsot (például egy kulcsot és egy céges kulcsot) is használhatunk vele. A geli gyors — egyszerûen csak szektorról szektorra titkosít. Lehetõvé teszi a mesterkulcsok mentését is visszaállítását. Ha a felhasználó véletlenül megsemmisítené a kulcsát, akkor a biztonsági mentésbõl helyreállított kulcsok segítségével vissza tudjuk szerezni az adatainkat is. Segítségével a lemezeket véletlenszerû, egyszeri jelszavakkal is illeszthetjük — ez különösen fontos lapozóterületek és ideiglenes állományrendszerek esetében. A geli által felkínált lehetõségekrõl a &man.geli.8; man oldalán találhatunk többet. A következõ lépések bemutatják, hogyan lehet a &os; rendszermagjában engedélyezni a geli támogatását, és hogyan lehet létrehozni és használni egy geli titkosítással rendelkezõ adathordozót. A geli alkalmazásához legalább a &os; 6.0-RELEASE vagy késõbbi változatára van szükségünk. Mivel a rendszermagot is módosítanunk kell, ezért rendszeradminisztrátori jogosultságok kellenek a mûveletek elvégzéséhez. A <command>geli</command> támogatásának hozzáadása a rendszermaghoz Vegyük hozzá a következõ sorokat a rendszermag beállításait tartalmazó állományhoz: options GEOM_ELI device crypto Fordítsuk újra a rendszermagot a ben leírtak szerint. Betölthetjük a geli modulját is a rendszer indításakor. Ehhez a következõ sort kell betenni a /boot/loader.conf állományba: geom_eli_load="YES" A &man.geli.8; most már használható a rendszermagban. A mesterkulcs legenerálása A most következõ példában egy kulcsot tartalmazó állomány létrehozását illusztráljuk, amit a /privát könyvtárba csatlakoztatott titkosított adathordozó mesterkulcsához fogunk használni. A kulcs állomány a mesterkulcs titkosításához felhasznált véletlenszerû adatot fogja tartalmazni, valamint rajta kívül még a mesterkulcsot egy jelmondattal is védjük. Az adathordozó szektormérete 4 kilobyte-os lesz. Emellett még bemutatjuk, hogyan kell illeszteni egy geli-adathordozót, állományrendszert létrehozni rajta, csatlakoztatni, dolgozni vele és lekapcsolni. A nagyobb teljesítmény érdekében javasolt nagyobb szektorméretet választani (mint például 4 kilobyte). A mesterkulcsot egy jelmondattal fogjuk védeni és a kulcsok készítéséhez használt adatforrás a /dev/random lesz. A /dev/da2.eli, amelyet mit csak adathordozónak fogunk csak hívni, szektorainak mérete 4 kilobyte lesz. &prompt.root; dd if=/dev/random of=/root/da2.key bs=64 count=1 &prompt.root; geli init -s 4096 -K /root/da2.key /dev/da2 Enter new passphrase: Reenter new passphrase: Nem kötelezõ egyszerre használni a jelmondatot és a kulcs állományt. A mesterkulcs elzárásának bebiztosítására bármelyik módszer alkalmas. Ha a kulcs állomány a - paraméterrel adjuk meg, akkor a szabványos bemenetrõl olvassa be a program. Ez a példa több kulcs használatát mutatja be. &prompt.root; cat kulcs1 kulcs2 kulcs3 | geli init -K - /dev/da2 Az adathordozó illesztése a generált kulccsal &prompt.root; geli attach -k /root/da2.key /dev/da2 Enter passphrase: Az új titkosítatlan eszköz neve /dev/da2.eli lesz. &prompt.root; ls /dev/da2* /dev/da2 /dev/da2.eli Az új állományrendszer kialakítása &prompt.root; dd if=/dev/random of=/dev/da2.eli bs=1m &prompt.root; newfs /dev/da2.eli &prompt.root; mount /dev/da2.eli /privát A titkosított állományrendszer most már &man.df.1; számára is látszik és használható: &prompt.root; df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 248M 89M 139M 38% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr /dev/ad0s1d 989M 1.5M 909M 0% /tmp /dev/ad0s1e 3.9G 1.3G 2.3G 35% /var /dev/da2.eli 150G 4.1K 138G 0% /private Az adathordozó leválasztása és lekapcsolása Miután befejeztük a munkát a titkosított partíción, és a /privát partícióra már nincs tovább szükségünk, érdemes leválasztanunk és kiiktatnunk a geli titkosítású partíciót a rendszermagból. &prompt.root; umount /privát &prompt.root; geli detach da2.eli A &man.geli.8; használatáról bõvebben a saját man oldalán tájékozódhatunk. A <filename>geli</filename> <filename>rc.d</filename> szkriptjének használata A geli mellett találhatunk egy saját rc.d szkriptet, amely jelentõsen leegyszerûsíti a geli használatát. A geli például így paraméterezhetõ az &man.rc.conf.5; állományon keresztül: geli_devices="da2" geli_da2_flags="-p -k /root/da2.key" Ennek segítségével a /dev/da2 eszközt geli adathordozóként állítjuk be a /root/da2.key állományban található mesterkulcs felhasználásával, de az illesztéskor a geli nem kér jelmondatot (ezt csak akkor fogja tenni, ha a geli init parancs kiadásához hozzátesszük a beállítást). A rendszer leállítása elõtt pedig a geli adathordozó így automatikusan leválasztásra kerül. Az rc.d beállításával kapcsolatos tudnivalókat a kézikönyv rc.d szkriptekrõl szóló szakaszában ismerhetjük meg.
Christian Brüffer Írta: A lapozóterület titkosítása lapozóterület titkosítása A &os;-ben a lapozóterület titkosítása nagyon könnyen beállítható és már a &os; 5.3-RELEASE változata óta elérhetõ. Attól függõen, hogy konkrétan a &os; melyik verzióját használjuk, a konfigurációhoz kapcsolódó beállítások némileg eltérhetnek. A &os; 6.0-RELEASE változatától kezdõdõen a &man.gbde.8; és a &man.geli.8; alrendszerek is használhatóak a lapozóterület titkosítására. A korábbi verziókban egyedül csak a &man.gbde.8; érhetõ el. Mind a két rendszer az encswap rc.d szkriptet használja. Az elõzõ szakaszban, vagyis a A lemezpartíciók titkosításában már röviden összefoglaltuk a különbözõ titkosítással foglalkozó alrendszereket. Miért kellene titkosítanunk a lapozóterületet? Hasonlóan a lemezpartíciók titkosításához, a lapozóterület titkosításának is az a célja, hogy védjük az érzékeny információkat. Képzeljük el, hogy egy olyan alkalmazással dolgozunk, amely jelszavakat kezel. Amíg ezek a jelszavak a memóriában maradnak, addig minden a legnagyobb rendben van. Azonban amikor az operációs rendszer nekilát a fizikai memória felszabadításához kilapozni ezeket az adatokat, a jelszavak titkosítatlanul kerülnek a lemez felületére és egy támadó számára könnyû prédává válnak. Ilyen helyzetekben csak lapozóterület titkosítása jelenthet megoldást. Elõkészületek A szakasz további részében a ad0s1b lesz a lapozásra használt partíció. Egészen mostanáig nem titkosítottuk a lapozóterületet. Így elképzelhetõ, hogy a lemezre már titkosítatlanul kikerültek jelszavak vagy bármilyen más érzékeny adatok. A csorba kiköszörülésére a lapozóterületen található összes adatot írjuk felül véletlenszerûen generált szeméttel: &prompt.root; dd if=/dev/random of=/dev/ad0s1b bs=1m A lapozóterület titkosítása a &man.gbde.8; használatával Ha a &os; 6.0-RELEASE vagy újabb változatát használjuk, akkor az /etc/fstab állományban tegyük hozzá a .bde utótagot az a lapozóterülethez tartozó eszköz nevéhez. # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b.bde none swap sw 0 0 A &os; 6.0-RELEASE elõtti kiadások esetében a következõ sort is hozzá kell tennünk az /etc/rc.conf állományhoz: gbde_swap_enable="YES" A lapozóterület titkosítása a &man.geli.8; használatával A &man.gbde.8; használatához hasonlóan a &man.geli.8; által felajánlott titkosítást is alkalmazhatjuk a lapozóterület védelmére. Ilyenkor az /etc/fstab állományban az .eli utótagot kell hozzátenni a lapozóterülethez tartozó eszköz névhez. # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b.eli none swap sw 0 0 Az &man.geli.8; az AES algoritmust alapértelmezés szerint 256 bites kulccsal használja. Ezek az alapértelmezések megváltoztathatóak az /etc/rc.conf állományban a geli_swap_flags beállítás használatával. A következõ sor arra utasítja az encswap rc.d szkriptet, hogy a &man.geli.8; és a Blowfish algoritmus használatával hozzon létre egy lapozópartíciót 128 bites kulccsal, 4 kilobyte-os szektormérettel és a detach on last close (lekapcsolás használat után) beállítással: geli_swap_flags="-e blowfish -l 128 -s 4096 -d" A &os; 6.2-RELEASE verzió elõtti rendszerekben a következõ sort kell használni: geli_swap_flags="-a blowfish -l 128 -s 4096 -d" A többi beállításhoz a &man.geli.8; man oldalán a onetime parancs leírását érdemes áttanulmányozni. Ellenõrizzük a mûködését Miután újraindítottuk a rendszert, a titkosított lapozóterület helyes mûködését a swapinfo paranccsal ellenõrizhetjük le. A &man.gbde.8; esetében: &prompt.user; swapinfo Device 1K-blocks Used Avail Capacity /dev/ad0s1b.bde 542720 0 542720 0% Valamint a &man.geli.8; esetében: &prompt.user; swapinfo Device 1K-blocks Used Avail Capacity /dev/ad0s1b.eli 542720 0 542720 0%
diff --git a/hu_HU.ISO8859-2/books/handbook/firewalls/chapter.sgml b/hu_HU.ISO8859-2/books/handbook/firewalls/chapter.sgml index 09401f52ba..383ac4b769 100644 --- a/hu_HU.ISO8859-2/books/handbook/firewalls/chapter.sgml +++ b/hu_HU.ISO8859-2/books/handbook/firewalls/chapter.sgml @@ -1,4565 +1,4565 @@ Joseph J. Barbish Írta: Brad Davis SGML formátumúra alakította és aktualizálta: Tûzfalak tûzfalak biztonság tûzfalak Bevezetés A tûzfalakkal a rendszerünkön keresztülfolyó bejövõ és kimenõ forgalmat tudjuk szûrni. A tûzfalak egy vagy több szabályrendszer alapján vizsgálják az éppen érkezõ vagy távozó hálózati csomagokat, és vagy továbbengedik ezeket vagy megállítják. A tûzfalak szabályai a csomagok egy vagy több jellemzõjét veszik szemügyre, amelyek lehetnek például a protokoll típusa, a forrás vagy cél hálózati címe, esetleg a forrás- vagy a célport. A tûzfalak jelentõs mértékben képesek gyarapítani egy gép vagy egy hálózat védelmét. Leginkább a következõkre tudjuk felhasználni: A belsõ hálózatunkban futó alkalmazások, szolgáltatások, gépek megvédésére és elszigetelésére az internetrõl érkezõ nem kívánt forgalom ellen A belsõ hálózatban levõ gépek elérését tudjuk korlátozni vagy letiltani az interneten elérhetõ szolgáltatások felé A hálózati címfordítás (Network Address Translation, NAT) beállításához, ahol a belsõ hálózatunk privát IP-címeket használnak és egy közös kapcsolaton keresztül érik el az internetet (egyetlen IP-címmel, vagy pedig automatikusan kiosztott publikus címekkel). A fejezet elolvasása során megismerjük: hogyan adjuk meg helyesen a csomagok szûrését leíró szabályokat; a &os;-be épített tûzfalak közti különbségeket; hogyan állítsuk be és használjuk az OpenBSD PF tûzfalát; hogyan állítsuk be és használjuk az IPFILTER tûzfalat; hogyan állítsuk be és használjuk az IPFW tûzfalat. A fejezet elolvasása elõtt ajánlott: a &os;-hez és az internethez kötõdõ alapvetõ fogalmak ismerete. Röviden a tûzfalakról tûzfalak szabályrendszerei A tûzfalak szabályrendszereit alapvetõen kétféleképpen tudjuk összeállítani: inkluzív, vagyis megengedõ, illetve exkluzív vagyis kizáró módon. Az exkluzív tûzfalak minden forgalmat átengednek, amirõl nem rendelkeznek a tûzfal szabályai. Az inkluzív tûzfalak ennek pontosan az ellenkezõjét teszik. Csak azt a forgalmat engedik át, amirõl van szabály és minden mást blokkolnak. Az inkluzív tûzfalak alkalmazásával sokkal jobban kezünkbentudjuk tartani a hálózatunk kimenõ forgalmát, ezért leginkább az internetes szolgáltatásokat futtató rendszerek esetében bizonyulhat jobb választásnak. Emellett az internetrõl a hálózatunk felé irányuló forgalmat is képes szabályozni. Ekkor az egyetlen szabályra sem illeszkedõ csomagokat egyszerûen eldobjuk és naplózzuk. Az inkluzív tûzfalak általában biztonságosabbak az exkluzív típusú társaiknál, mivel esetükben jelentõs mértékben visszaszorul a nem kívánatos átfolyó forgalom. Hacsak nem emeljük ki külön, a fejezet további részében minden példaként megadott szabályrendszer inkluzív tûzfalat hoz létre. Ez a típusú védelem még tovább fokozható az állapottartó tûzfalak (stateful firewall) használatával. Az ilyen típusú tûzfalak szemmel tartják a rajtuk keresztül megnyitott kapcsolatokat, és vagy csak a már meglevõ kapcsolathoz tartozó forgalmat engedik át vagy nyitnak egy újat. Az állapottartó tûzfalak hátránya, hogy a Denial of Service (DoS) típusú támadásokkal szemben sokkal sérülékenyebbek olyan helyzetekben, amikor az új kapcsolatok nagyon gyorsan jönnek létre. A legtöbb tûzfal esetében azonban tudjuk vegyíteni az állapottartó és nem állapottartó viselkedést, és ezzel egy ideális beállítást kialakítani. Tûzfalak A &os; alaprendszerébe három különbözõ tûzfalat építettek be, melyek a következõk: az IPFILTER (másik nevén IPF), az IPFIREWALL (más néven IPFW) és az OpenBSD csomagszûrõje (Packet Filter, azaz PF). A forgalom szabályozására (vagyis alapvetõen a sávszélesség kihasználtságának vezérlésére) a &os; két beépített csomagot tartalmaz: ez az &man.altq.4; és a &man.dummynet.4;. Általában a Dummynet az IPFW, míg az ALTQ a PF partnere. Az IPFILTER esetében maga az IPFILTER végzi a címfordítást és a szûrést, a sávszélességet pedig az IPFW a &man.dummynet.4; vagy a PF az ALTQ segítségével. Az IPFW és a PF szabályokkal rendelkezik a rendszerünkbe érkezõ vagy onnan távozó csomagokról, habár megoldásaik teljesen máshogy mûködnek és a szabályok megadási módja is eltér. A &os; azért tartalmaz egyszerre ennyiféle tûzfalat, mert az emberek elvárásai és igényei eltérnek. Egyikük sem tekinthetõ a legjobbnak. A szerzõ egyébként az IPFILTER megoldását részesíti elõnyben, mivel egy hálózati címfordítást alkalmazó környezetben sokkal könnyebb vele megfogalmazni az állapottartó szabályokat, valamint tartalmaz egy beépített FTP proxyt is, amivel így a kimenõ FTP kapcsolatok beállítása még tovább egyszerûsödik. Mivel az összes tûzfal a csomagok fejlécének bizonyos mezõinek alapján dolgozik, ezért a tûzfal szabályrendszerét megalkotó egyénnek teljesen tisztában kell lennie a TCP/IP mûködésével, továbbá azzal, hogy ezekben a mezõkben milyen értékek szerepelhetnek és ezeket hogyan használják egy átlagos kapcsolat alatt. Ebben a témában a címen találhatunk egy remek ismertetõt (angolul). John Ferrell Átnézte és aktualizálta: Az OpenBSD csomagszûrõje (PF) és az <acronym>ALTQ</acronym> tûzfalak PF 2003 júliusában az OpenBSD PF néven ismert csomagszûrõjét átírták &os;-re és elérhetõvé tették a &os; Portgyûjteményének részeként. A PF programot beépítetten tartalmazó elsõ kiadás pedig 2004 novemberében a &os; 5.3 volt. A PF egy teljes, mindentudó tûzfal, amely támogatja az ún. ALTQ (Alternate Queuing, vagyis a váltóbesorolás) megoldást. Az ALTQ lehetõvé teszi a sávszélesség korlátozását a szolgáltatás minõsége (Quality of Service, QoS) alapján. Az OpenBSD Projekt kiváló munkát végez a PF felhasználói útmutatójának karbantartásával. A kézikönyv ezen szakasza ezért elsõsorban azzal foglalkozik, hogyan kell a PF-et &os; alatt használni, miközben igyekszik egy általános összefoglalást adni a témáról. A részletesebb információkkal kapcsolatban azonban feltétlenül nézzük meg a felhasználói útmutatót. A címen olvashatunk többet arról (angolul), hogy a PF-et hogyan használjunk &os;-n. A PF rendszermagmodulok használata A PF modul betöltéséhez a következõ sort kell felvennünk az /etc/rc.conf állományba: pf_enable="YES" Ezt követõen futtassuk le a hozzá tartozó rendszerindító szkriptet: &prompt.root; /etc/rc.d/pf start A PF modul abban az esetben nem fog betöltõdni, ha nem találja a szabályokat tartalmazó konfigurációs állományt. Ez alapértelmezés szerint az /etc/pf.conf állomány. Ha a szabályok leírása rendszerünkön máshol található, akkor az /etc/rc.conf állományban a következõ módon adhatjuk meg annak pontos helyét: pf_rules="/elérési/út/pf.conf" A &os; 7.0 kiadással a minta pf.conf állomány az /etc könyvtárból átkerült a /usr/share/examples/pf könyvtárba. A &os; 7.0 elõtti kiadásokban alapértelmezés szerint található egy pf.conf állomány az /etc könyvtárban. A PF modul parancssorból akár kézzel is betölthetõ: &prompt.root; kldload pf.ko A PF mûködésének naplózását a pflog.ko teszi lehetõvé, amelyet az alábbi sor hozzáadásával engedélyezhetünk az /etc/rc.conf állományban: pflog_enable="YES" A modul betöltését a hozzá tartozó rendszerindító szkript segítségével kérhetjük: &prompt.root; /etc/rc.d/pflog start Ha a PF többi funkcióját is használni szeretnénk, akkor ehhez egy új rendszermagot kell fordítanunk PF támogatással. A PF rendszermagbeli beállításai a rendszermag beállításai device pf a rendszermag beállításai device pflog a rendszermag beállításai device pfsync Noha egyáltalán nem szükséges beépítenünk a PF támogatását a rendszermagba, abban az esetben mégis szükségünk lehet rá, amikor a PF olyan komolyabb lehetõségeit szeretnénk kiaknázni, amelyek már nem részei a modulnak. Ilyen például a &man.pfsync.4;, amely a PF által használt állapottáblázatok bizonyos változásainak megjelenítésére alkalmas pszeudoeszköz. A &man.carp.4; megoldásával párosítva így akár hibatûrõ tûzfalak is kialakíthatóak a PF-fel. A CARP megoldásáról a kézikönyvben bõvebb ismertetést a ad. A PF rendszermag konfigurációs beállításai a /usr/src/sys/conf/NOTES állományban találhatóak: device pf device pflog device pfsync A device pf beállítás engedélyezi a csomagszûrõ tûzfalat (&man.pf.4;). A device pflog megadásával keletkezik egy &man.pflog.4; pszeudo hálózati eszköz, amellyel egy &man.bpf.4; eszközre érkezõ forgalmat tudunk naplózni. Ezután a &man.pflogd.8; démon használható tõle származó naplózott adatok rögzítésére. A device pfsync engedélyezi a &man.pfsync.4; pszeudo hálózati eszköz létrejöttét, amely az ún. állapotváltások megfigyelésére alkalmas. Az <filename>rc.conf</filename> állományban elérhetõ beállítások A következõ &man.rc.conf.5; beállítások aktiválják a rendszerindítás során a PF és a &man.pflog.4; használatát: pf_enable="YES" # a PF engedélyezése (a modul betöltése, ha kell) pf_rules="/etc/pf.conf" # a pf szabályait tartalmazó állomány pf_flags="" # a pfctl indításához szükséges további paraméterek pflog_enable="YES" # a pflogd(8) elindítása pflog_logfile="/var/log/pflog" # hol tartsa a pflogd az naplóit pflog_flags="" # a pflogd indításához szükséges paraméterek Ha a tûzfalunk mögött egy helyi hálózat is meghúzódik, akkor az ott levõ gépek számára valamilyen módon tudnunk kell továbbítani a csomagokat vagy címfordítást kell végezni, így ez is mindenképpen kelleni fog: gateway_enable="YES" # az átjáró funkciók engedélyezése A szûrési szabályok megfogalmazása A PF a beállításait a &man.pf.conf.5; állomány tárolja (amely alapértelmezés szerint az /etc/pf.conf helyen található), és az ebben található szabályok alapján módosítja, dobja el vagy éppen engedi át a csomagokat. A &os; rendszerünkben ehhez találhatunk néhány példát a /usr/share/examples/pf/ könyvtárban. A PF által használt szabályokról minden részletre kiterjedõen a PF felhasználói útmutatójában olvashatunk. A PF felhasználói útmutatójának olvasásakor ne feledkezzünk meg róla, hogy a különbözõ &os; verziók különbözõ PF verziókat tartalmaznak. A &os; 7.X és késõbbi változatok az OpenBSD 4.1 kiadásában szereplõ PF változatot tartalmazzák. A &a.pf; remek hely a PF tûzfal beállításával és futtatásával kapcsolatos kérdésekre. A kérdezés elõtt azonban ne felejtsük el alaposan átnézni az archívumot! A PF használata A PF a &man.pfctl.8; segítségével vezérelhetõ. Az alábbiakban ezzel kapcsolatban most összefoglalunk néhány hasznos parancsot (de ne felejtsük el megnézni a &man.pfctl.8; man oldalon található többi lehetõséget sem): Parancs Leírás pfctl A PF engedélyezése pfctl A PF tiltása pfctl all /etc/pf.conf Az összes (címfordítási, szûrési, állapottartási stb.) szabály törlése, és az /etc/pf.conf állomány újratöltése pfctl [ rules | nat | state ] A szûrési (rules), címfordítási (nat) és állapottartási (state) információk lekérdezése pfctl /etc/pf.conf Az /etc/pf.conf állomány ellenõrzése a benne levõ szabályok betöltése nélkül Az <acronym>ALTQ</acronym> engedélyezése Az ALTQ kizárólag csak úgy használható, ha a konfigurációs beállításokon keresztül beépítjük a &os; rendszermagjába. Az ALTQ alkalmazását nem minden hálózati kártya meghajtója támogatja, ezért ezt a &man.altq.4; man oldalon ellenõrizzük. A következõ rendszermag konfigurációs beállításokkal engedélyezhetjük az ALTQ használatát és bõvíthetjük azt további lehetõségekkel: options ALTQ options ALTQ_CBQ # osztályozás alapú besorolás (Class Bases Queuing, CBQ) options ALTQ_RED # véletlen korai észlelés (Random Early Detection, RED) options ALTQ_RIO # RED befele/kifele options ALTQ_HFSC # hiearchikus csomagütemezõ (Hierarchical Packet Scheduler, HFSC) options ALTQ_PRIQ # prioritásos besorolás (Priority Queuing, PRIQ) options ALTQ_NOPCC # az SMP esetén kell Az options ALTQ az ALTQ rendszert engedélyezi. Az options ALTQ_CBQ engedélyezi a osztályozás alapú besorolást (Class Based Queuing, CBQ). A CBQ használatával a kapcsolatunkhoz tartozó sávszélességet különbözõ osztályokra vagy sorokra tudjuk bontani és a szûrési szabályoknak megfelelõen osztályozni segítségükkel a forgalmat. Az options ALTQ_RED a véletlen korai észlelés (Random Early Detection, RED) használatát engedélyezi. A RED a hálózati forgalomban keletkezõ torlódások elkerülésére alkalmas. A RED ezt a problémát úgy oldja meg, hogy méri a sorok hosszát és összeveti a hozzá tartozó minimális és maximális küszöbértékekkel. Ha a sor hossza meghaladja a számára elõírt maximális értéket, akkor az új csomagokat eldobja. Nevéhez hûen a RED az eldobásra ítélt csomagokat véletlenszerûen választja ki. Az options ALTQ_RIO engedélyezi a RED használatát mind a két irányba, tehát be- és kifelé. Az options ALTQ_HFSC a pártatlan hierachikus szolgáltatási görbe alapú csomagütemezõt (Hierarchical Fair Service Curve Packet Scheduler, HFSC) engedélyezi. Vele kapcsolatban a címen találhatunk bõvebben olvasnivalót (angolul). Az options ALTQ_PRIQ a prioritásos besorolást (Priority Queuing, PRIQ) teszi elérhetõvé. A PRIQ mindig elsõként a nagyobb értékû sorban levõ forgalmat továbbítja. Az options ALTQ_NOPCC az ALTQ SMP, vagyis többprocesszoros támogatását adja meg. Ilyen típusú rendszerekben ez kötelezõ. Az IPFILTER (IPF) tûzfal tûzfalak IPFILTER Az IPFILTER szerzõje Darren Reed. Az IPFILTER nem kötõdik egyik rendszerhez sem: ez egy olyan nyílt forráskódú alkalmazás, amelyet átírtak &os;, NetBSD, OpenBSD, &sunos;, HP/UX és &solaris; operációs rendszerekre. Az IPFILTER karbantartása és támogatása pillanatnyilag is aktív, folyamatosan jelennek meg újabb változatai. Az IPFILTER egy rendszermag oldalán mûködõ tûzfalazási és egy címfordítási mechanizmusra alapszik, amelyet felhasználói programokkal tudunk felügyelni és vezérelni. A tûzfal szabályai az &man.ipf.8; segédprogrammal állíthatóak be vagy törölhetõek. A hálózati címfordításra vonatkozó szabályokat az &man.ipnat.1; segédprogrammal állíthatjuk be vagy törölhetjük. Az &man.ipfstat.8; segédprogram képes futás közben statisztikákat készíteni az IPFILTER rendszermagban elhelyezkedõ részeinek viselkedésérõl. Az &man.ipmon.8; program pedig az IPFILTER cselekvéseit képes a rendszernaplókba feljegyezni. Az IPF eredetileg olyan szabályfeldolgozási módszer szerint készült, amelyben az utolsó egyezõ szabály nyer és csak állapotnélküli szabályokat ismert. Az idõ múlásával az IPF részévé vált a quick opció és a keep state opción keresztül az állapottartás is, melyek drámai mértékben korszerûsítették a szabályok feldolgozásának elvét. Az IPF hivatalos dokumentációja csak a régi szabályok létrehozását és azok feldolgozásának leírását tartalmazza. A korszerûsített funkciók csak kiegészítésképpen jelennek meg, és az általuk felkínált elõnyök megértése egy sokkal magasabb szintû és biztonságosabb tûzfal megépítését teszik lehetõvé. A szakaszban szereplõ utasításokban olyan szabályok szerepelnek, amelyek kihasználják a quick és keep state opciókat. Ezek az inkluzív tûzfalszabályok létrehozásának alapjai. A régi típusú szabályokról a és címeken olvashatunk (angolul). Az IPF gyakran ismételt kérdései a címen érhetõek el (angolul). A nyílt forrású IPFILTER levelezési lista kereshetõ archívumait a címen találjuk (angolul). Az IPF engedélyezése IPFILTER engedélyezés Az IPF megtalálható a &os; alaptelepítésében mint menet közben külön betölthetõ modul. Ha az rc.conf állományba beírjuk a ipfilter_enable="YES" sort, akkor ez a modul dinamikusan betöltõdik. A betölthetõ modul alapból naplóz és a default pass all beállítást tartalmazza. Ha helyette a block all szabályt akarjuk használni, akkor emiatt még nem kell feltétlenül újrafordítanunk a &os; rendszermagját, elég ha egyszerûen csak a szabályrendszerünk végére beszúrjuk. A rendszermag beállításai a rendszermag beállításai IPFILTER a rendszermag beállításai IPFILTER_LOG a rendszermag beállításai IPFILTER_DEFAULT_BLOCK IPFILTER a rendszermag beállításai Az IPF használatához nem kötelezõ a következõ beállításokkal újrafordítani a &os; rendszermagját, itt csupán háttérinformációként szerepel. Amikor az IPF a rendszermagba kerül, a betölhetõ modulra nem lesz szükség. Az IPF a rendszermag forrásai között található /usr/src/sys/conf/NOTES állományban megadott beállításai a következõ módon foglalhatóak össze: options IPFILTER options IPFILTER_LOG options IPFILTER_DEFAULT_BLOCK Az options IPFILTER engedélyezi az IPFILTER tûzfal támogatását. Az options IPFILTER_LOG hatására az IPF az ipl csomagnaplózó pszeudo eszközre jegyzi fel a forgalmat — minden olyan szabály esetén, ahol megjelenik a log kulcsszó. Az options IPFILTER_DEFAULT_BLOCK megváltoztatja az alapértelmezett viselkedést, tehát minden olyan csomag, amely nem illeszkedik a tûzfal valamelyik pass típusú (átengedõ) szabályára, blokkolásra kerül. Ezek a beállítások csak azt követõen érvényesülnek, ha fordítottunk és telepítettünk velük egy új rendszermagot. Az <filename>rc.conf</filename> állomány beállításai Az /etc/rc.conf állományban a következõ utasításokra lesz szükségünk az IPF mûködésbe hozására a rendszer indítása során: ipfilter_enable="YES" # az ipf tûzfal indítása ipfilter_rules="/etc/ipf.rules" # betölti a szabályokat tartalmazó szöveges állományt ipmon_enable="YES" # elindítja az IP monitor naplózását ipmon_flags="-Ds" # D = indítás démonként # s = naplózás a syslog használatával # v = a tcp ablak, ack, seq csomagok naplózása # n = az IP-címek és portok feloldása Ha olyan helyi hálózat áll meg a tûzfal mögött, amely egy fenntartott privát IP-címtartományt használ, akkor még a következõ utasításokra is szükségünk lesz a címfordítás bekapcsolásához: gateway_enable="YES" # a helyi hálózat átjárója ipnat_enable="YES" # az ipnat funkció elindítása ipnat_rules="/etc/ipnat.rules" # az ipnat mûködéséhez szükséges definíciók IPF ipf Az &man.ipf.8; parancs használható a szabályokat tartalmazó állomány betöltésére. Általában egy állományba írjuk össze a tûzfal szabályait és ezzel a paranccsal cseréljük le egyszerre a tûzfalban levõ jelenlegi szabályokat: &prompt.root; ipf -Fa -f /etc/ipf.rules Az az összes belsõ szabály törlését jelenti. Az jelzi, hogy egy állományból kell beolvasni a betöltendõ szabályokat. Ezzel mintegy lehetõségünk van változtatni a korábban összeállított szabályainkon, futtatni a fenti IPF parancsot és ezen keresztül úgy frissíteni a szabályok friss másolatával a már mûködõ tûzfalat, hogy nem is kell újraindítanunk a rendszert. Ez a módszer igen kényelmes az új szabályok kipróbálásához, mivel bármikor tetszõlegesen végrehajtható. Az &man.ipf.8; man oldala tartalmazza a parancsnak megadható további beállításokat. Az &man.ipf.8; parancs a szabályokat tároló állományt egy szabványos szöveges állománynak tekinti, semmilyen szimbolikus helyettesítést alkalmazó szkriptet nem fogad el. Lehetõségünk van azonban olyan IPF szabályokat készíteni, amelyek kiaknázzák a szkriptek szimbolikus helyettesítésének lehetõségeit. Errõl bõvebben lásd . Az IPFSTAT ipfstat IPFILTER statisztika Az &man.ipfstat.8; alapértelmezés szerint a arra használatos, hogy le tudjuk kérdezni és megjeleníteni a tûzfalhoz tartozó számlálók értékeit, amelyek a legutóbbi indítás vagy az ipf -Z parancs által kiadott lenullázásuk óta a bejövõ vagy kimenõ forgalomból a megadott szabályoknak megfelelõ csomagok alapján gyûjtenek össze statisztikákat. A parancs mûködésének részleteit az &man.ipfstat.8; man oldalon olvashatjuk. Az &man.ipfstat.8; meghívása alapból így néz ki: input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0 output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0 input packets logged: blocked 99286 passed 0 output packets logged: blocked 0 passed 0 packets logged: input 0 output 0 log failures: input 3898 output 0 fragment state(in): kept 0 lost 0 fragment state(out): kept 0 lost 0 packet state(in): kept 169364 lost 0 packet state(out): kept 431395 lost 0 ICMP replies: 0 TCP RSTs sent: 0 Result cache hits(in): 1215208 (out): 1098963 IN Pullups succeeded: 2 failed: 0 OUT Pullups succeeded: 0 failed: 0 Fastroute successes: 0 failures: 0 TCP cksum fails(in): 0 (out): 0 Packet log flags set: (0) Az mint bejövõ (inbound), vagy az mint kimenõ (outbound) forgalomra vonatkozó paraméterek megadásával a rendszermagban az adott oldalon jelenleg telepített és alkalmazott szabályokat kérhetjük le és jeleníthetjük meg. Az ipfstat -in parancs így a bejövõ forgalomra vonatkozó belsõ szabályokat mutatja a szabályok számával. Az ipfstat -on parancs a kimenõ forgalmat érintõ belsõ szabályokat mutatja a szabályok számával. Az eredmény körülbelül ilyen lesz: @1 pass out on xl0 from any to any @2 block out on dc0 from any to any @3 pass out quick on dc0 proto tcp/udp from any to any keep state Az ipfstat -ih a bejövõ forgalomhoz tartozó belsõ szabályokat mutatja és mindegyik elé odaírja, hogy eddig mennyi csomag illeszkedett rájuk. Az ipfstat -oh ugyanígy a kimentõ forgalom esetén mutatja a belsõ szabályokat és mindegyik elõtt feltünteti, hogy az adott pillanatig mennyi csomag illeszkedett rájuk. A kimenete nagyjából ilyen lesz: 2451423 pass out on xl0 from any to any 354727 block out on dc0 from any to any 430918 pass out quick on dc0 proto tcp/udp from any to any keep state Az ipfstat parancs talán egyik legfontosabb funkciója a kapcsolóval csalható elõ, melynek hatására a rendszerben aktív állapotok táblázatát mutatja meg ugyanúgy, ahogy a &man.top.1; a &os; rendszerben futó programokat. Amikor a tûzfalunk támadás alatt áll, ezzel a funkcióval tudjuk a problémát beazonosítani, leásni a mélyébe és látni a támadótól érkezõ csomagokat. A kiegészítésképpen megadható alkapcsolók megadásával kiválaszthatjuk azt a cél vagy forrás IP-címet, portot vagy protokollt, amelyet valós idõben meg akarunk figyelni. Ennek részleteit az &man.ipfstat.8; man oldalán láthatjuk. Az IPMON ipmon IPFILTER naplózás Az ipmon megfelelõ mûködéséhez be kell kapcsolnunk a rendszermag IPFILTER_LOG beállítását. Ez a parancs két különbözõ módban használható. Ha parancsot a opció nélkül gépeljük be, akkor ezek közül alapból a natív módot kapjuk meg. A démon mód abban az esetben hasznos, ha folyamatosan naplózni akarjuk a rendszerben zajló eseményeket, majd késõbb ezeket átnézni. Így képes egymással együttmûködni a &os; és az IPFILTER. A &os; beépítve tartalmaz olyan lehetõséget, aminek révén magától cseréli a rendszernaplókat. Ezért ha átküldjük a &man.syslogd.8; démonnak a naplózandó üzeneteket, akkor sokkal jobban járunk, mintha egyszerûen csak mezei állományba naplóznánk. Az rc.conf alapértelmezései között az ipmon_flags beállítás a kapcsolókat rögzíti: ipmon_flags="-Ds" # D = indítás démonként # s = naplózás a syslog használatával # v = a tcp ablak, ack, seq csomagok naplózása # n = az IP-címek és portok nevének feloldása Ennek a viselkedésnek az elõnyei minden bizonnyal egyértelmûek. Segítségével képesek vagyunk az esetek megtörténte után átnézni, hogyan milyen csomagokat dobott el a rendszer, azok milyen címekrõl érkeztek és hova szánták. Ez egy komoly fegyver a támadók lenyomozásában. Hiába engedélyezzük a naplózást, az IPF önszántából semmilyen naplózási szabályt nem fog gyártani. A tûzfal gazdájának kell eldöntenie, hogy a szabályokat közül melyiket akarja naplózni, és így neki kell megadnia a log kulcsszót ezekben az esetekben. Normális esetben csak a deny szabályokat naplózzák. Egyáltalán nem ritka, hogy a szabályrendszer végén egy alapértelmezés szerint mindent eldobó szabály áll, amely naplóz. Ezzel lehetõségünk nyílik rögzíteni azokat a csomagokat, amelyek egyetlen szabályra sem illeszkedtek. Naplózás az IPMON használatával A syslogd egy saját módszert alkalmaz a naplózott adatok elkülönítésére. Egy funkciók (facility) és szintek (level) segítségével kialakított speciális csoportosítást alkalmaz. Az IPMON módja alapértelmezés szerint a local0 funkciót használja. Ezen túl a következõ szinteken különíthetjük el igényeinknek megfelelõen a naplózott adatokat: LOG_INFO - az átengedés vagy blokkolás helyett a "log" kulcsszóval ellátott csomagok LOG_NOTICE - az át is engedett csomagok LOG_WARNING - a blokkolt csomagok LOG_ERR - a naplózott csomagok közül azok, amelyek túlságosan kicsik (hibás a fejlécük) Az IPFILTER csak akkor tud naplózni a /var/log/ipfilter.log állományba, ha elõtte létrehozzuk. Az alábbi parancs erre tökéletesen megfelelõ: &prompt.root; touch /var/log/ipfilter.log A &man.syslogd.8; mûködését az /etc/syslog.conf állományban szereplõ definíciók vezérlik. A syslog.conf állomány számottevõ mértékben képes meghatározni azt, ahogy a syslog az IPF és a hozzá hasonló alkalmazásoktól kapott rendszerszintû üzeneteket kezeli. Az /etc/syslog.conf állományba az alábbi sor kell felvennünk: local0.* /var/log/ipfilter.log A local0.* megadásával az összes ilyen típusú üzenet egy elõre rögzített helyre kerül. Az /etc/syslog.conf állományban elvégzett módosításokat úgy léptethetjük érvénybe, ha újraindítjuk a számítógépet vagy az /etc/rc.d/syslogd reload paranccsal megkérjük a &man.syslogd.8; démont, hogy olvassa újra az /etc/syslog.conf állományt. Az imént létrehozott naplót ne felejtsük el megadni az /etc/newsyslog.conf állományban sem, és akkor ezzel a cseréjét is megoldjuk. A naplózott üzenetek formátuma Az ipmon által létrehozott üzenetek whitespace karakterekkel elválasztott adatmezõkbõl állnak. A következõ mezõk az összes üzenet esetében megjelennek: A csomag megérkezésének dátuma A csomag megérkezésének idõpontja. ÓÓ:PP:MM.E alakban jelennek meg az órák, percek, másodpercek és ezredmásodpercek (ez több számjegy hosszú is lehet) szerint Azon interfész a neve, ahol a csomag feldolgozásra került, például dc0 A szabályhoz tartozó csoport és sorszám, például @0:17 Ezek az ipfstat -in paranccsal nézhetõek meg. Cselekvés: a p mint átment (passed), b mint blokkolt (blocked), S mint rövid csomag (short packet), n mint egyik szabályra sem illeszkedett (not match), L mint naplózás (log). A módosítók megjelenítésének sorrendje: S, p, b, n, L. A nagybetûs P és B azt jelzi, hogy a csomagot egy felsõbb szintû beállítás miatt naplózták, nem egy szabály hatására. Címek: ez tulajdonképpen három mezõt takar: a forrás címet és portot (melyet egy vesszõ választ el), a -> jelet és cél címet és portot. Például: 209.53.17.22,80 -> 198.73.220.17,1722. A PR után a protokoll neve vagy száma olvasható, például PR tcp. A len csomaghoz tartozó fejléc és törzsének teljes hosszát jelöli, például len 20 40. Amennyiben a csomag TCP, egy kötõjellel kezdõdõen további mezõk is megjelenhetnek a beállított opcióknak megfelelõ betûk képében. A betûket és - beállításaikat az &man.ipmon.8; man + beállításaikat az &man.ipf.5; man oldalán olvashatjuk. Amennyiben a csomag ICMP, a sort két mezõ zárja, melyek közül az elsõ tartalma mindig ICMP, és ezt egy perjellel elválasztva az ICMP üzenet típusa és altípusa követi. Tehát például az ICMP 3/3 a nem elérhetõ port üzenetet hordozza. A szabályok felírása szimbolikus helyettesítéssel Az IPF használatában gyakorlott felhasználók közül néhányan képesek olyan stílusú szabályrendszert készíteni, ahol szimbolikus helyettesítést használnak. Ennek az egyik legnagyobb elõnye az, hogy ilyenkor elég csak a szimbolikus névhez tartozó értéket megváltoztatni és amikor a szkript lefut, akkor az összes rá hivatkozó szabályba ez kerül be. Szkript lévén a szimbolikus helyettesítéssel ki tudjuk emelni a gyakran használt értékeket és behelyettesíteni ezeket több helyre. Ezt a most következõ példában láthatjuk. Az itt alkalmazott felírás kompatibilis az &man.sh.1;, &man.csh.1; és &man.tcsh.1; parancsértelmezõkkel. A szimbolikus helyettesítést egy dollárjellel fejezzük ki: $. A szimbolikus mezõkben nem szerepel a $ jelölés. A szimbolikus mezõ tartalmát kettõs idézõjelbe (") tesszük. Kezdjük így el a szabályok írását: ######### Az IPF szabályait tartalmazó szkript eleje ########### oif="dc0" # a kimenõ interfész neve odns="192.0.2.11" # az internet szolgáltató névszerverének IP-címe myip="192.0.2.7" # a szolgáltatótól kapott statikus IP-címünk ks="keep state" fks="flags S keep state" # Választhatunk, hogy az /etc/ipf.rules állományt ebbõl a szkriptbõl # hozzuk létre vagy futtathatjuk "magát" a szkriptet. # # Egyszerre csak az egyik sort használjuk. # # 1) Ezzel gyárhatjuk le az /etc/ipf.rules állományt: #cat > /etc/ipf.rules << EOF # # 2) Ezzel futtathajuk "magát" a szkriptet: /sbin/ipf -Fa -f - << EOF # Engedélyezzük a szolgáltató névszerverének elérését. pass out quick on $oif proto tcp from any to $odns port = 53 $fks pass out quick on $oif proto udp from any to $odns port = 53 $ks # Engedélyezzük kifelé a titkosítatlan www funkciót. pass out quick on $oif proto tcp from $myip to any port = 80 $fks # Engedélyezzük kifelé a TLS SSL felett üzemelõ titkosított www funkciót. pass out quick on $oif proto tcp from $myip to any port = 443 $fks EOF ################## Itt az IPF szkript vége ######################## Ennyi lenne. A példában szereplõ szabályok most nem annyira lényegesek, a hangsúly most igazából a szimbolikus helyettesítésen és annak használatán van. Ha a fenti példát az /etc/ipf.rules.script állományba mentjük, akkor ezeket a szabályokat a következõ paranccsal újra tudjuk tölteni: &prompt.root; sh /etc/ipf.rules.script Egyetlen aprócska gond van a beágyazott szimbólumokat tartalmazó állományokkal: az IPF maga nem képes megérteni a helyettesítéseket, azért közvetlenül nem olvassa a szkriptet. Ez a szkript két módon hasznosítható: Vegyük ki megjegyzésbõl a cat paranccsal kezdõdõ sort, és tegyük megjegyzésbe az /sbin/ipf kezdetût. A megszokottak szerint tegyük az ipfilter_enable="YES" sort az /etc/rc.conf állományba, majd minden egyes módosítása után futtassuk le a szkriptet az /etc/ipf.rules állomány létrehozásához vagy frissítéséhez. Tiltsuk le az IPFILTER aktiválását a rendszerindításkor, tehát írjuk bele az ipfilter_enable="NO" sort (ami mellesleg az alapértelmezett értéke) az /etc/rc.conf állományba. Tegyünk egy, az alábbi szkripthez hasonlót az /usr/local/etc/rc.d/ könyvtárba. A szkriptnek adjuk valamilyen értelmes nevet, például ipf.loadrules.sh. Az .sh kiterjesztés használata kötelezõ. #!/bin/sh sh /etc/ipf.rules.script A szkript engedélyeit állítsuk be úgy, hogy a root tulajdonában legyen és képes legyen olvasni, írni valamint végrehajtani. &prompt.root; chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh Most miután a rendszer elindult, az IPF szabályai be fognak töltõdni. Szabályrendszerek az IPF-ben Az IPF esetében a szabályrendszer olyan szabályokból áll, amelyek a csomagokról tartalmuk alapján eldöntik, hogy át kell engedni vagy vissza kell tartani. A gépek közt két irányban áramló csomagok egy munkamenet alapú társalgást képeznek. A tûzfalhoz tartozó szabályrendszer egyaránt feldolgozza a internetrõl a hálózatunk felé igyekvõ csomagokat, illetve a hálózatunk ezekre adott válaszait. Az egyes TCP/IP szolgáltatásokat (mint például telnet, www, levelezés stb.) a hozzájuk tartozó protokol és szabványos (fogadó) portszám írja le. Ezekre a forrásról általában valamilyen nem szabványos (magasabb értékû) portról érkeznek csomagok. Ekkor a kommunikáció összes paramétere (vagyis a portok és címek) bármelyike alapján definiálhatunk blokkolást vagy továbbengedést leíró szabályokat. IPFILTER a szabályok feldolgozásának sorrendje Az IPF eredetileg úgy íródott, hogy a szabályokat az utolsó illeszkedõ szabály nyer stílusban dolgozza fel és csak állapot nélküli szabályokat ismert. Az idõk folyamán az IPF szabályai kiegészültek a quick és az állapottartásra vonatkozó keep state opciókkal, amelynek köszönhetõen óriási mértékben korszerûsödött a szabályok feldolgozása. A szakaszban szereplõ utasítások olyan szabályokat alkalmaznak, amelyekben egyaránt szerepel a quick és az állapottartásért felelõs keep state beállítás. Ez az inkluzív tûzfalak létrehozásának egyik alapeszköze. A tûzfal szabályainak összeállítása során nagyon óvatosnak kell lennünk! Bizonyos beállítások hatására akár ki is zárhatjuk magunkat a szerverünkrõl. Az ebbõl fakadó esetleges kellemetlenségek elkerülése érdekében javasoljuk, hogy a tûzfal alapjait elõször helyi konzolról építsük fel, ne pedig távolról, például ssh segítségével. A szabályok felépítése IPFILTER a szabályok felépítése A szabályok felépítésének bemutatását itt most leszûkítjük a modern állapottartó szabályokra és az elsõ illeszkedõ szabály nyer típusú feldolgozásra. A szabályok felírásának régebbi módjai az &man.ipf.8; man oldalon találhatóak. A # karakterrel egy megjegyzés kezdetét jelezzük, és általában a sor végén vagy egy külön sorban bukkan fel. Az üres sorokat a rendszer nem veszi figyelembe. A szabályok kulcsszavakat tartalmaznak. Ezeknek a kulcsszavaknak balról jobbra haladva adott sorrendben kell szerepelniük. A kulcsszavakat kiemeltük. Egyes kulcsszavakhoz további beállítások is tartozhatnak, amelyek maguk is kulcsszavak lehetnek, és még további opciókkal rendelkezhetnek. Az alábbi nyelvtan mindegyik elemét kiemeltük és az alábbiakban egyenként kifejtjük a részleteiket. CSELEKVÉS BE-KI OPCIÓK SZÛRÉS ÁLLAPOTTARTÓ PROTOKOLL FORRÁS_CÍM,CÉL_CÍM OBJEKTUM PORTSZÁM TCP_BEÁLLÍTÁS ÁLLAPOTTARTÓ CSELEKVÉS = block | pass BE-KI = in | out OPCIÓK = log | quick | on interfész SZÛRÉS = proto érték | forrás/cél IP | port = szám | flags beállítás PROTOKOLL = tcp/udp | udp | tcp | icmp FORRÁS_CÍM,CÉL_CÍM = all | from objektum to objektum OBJEKTUM = IP-cím | any PORTSZÁM = portszám TCP_BEÁLLÍTÁS = S ÁLLAPOTTARTÓ = keep state CSELEKVÉS A cselekvés határozza meg, hogy mit kell tenni azokkal a csomagokkal, amelyek illeszkednek a szabály többi részére. Minden szabályhoz tartoznia kell egy cselekvésnek. A következõ cselekvések közül választhatunk: A block megadásával a szabályban szereplõ szûrési feltételre illeszkedõ csomagot eldobjuk. A pass megadásával a szabályban szereplõ szûrési feltételre illeszkedõ csomagot átengedjük a tûzfalon. BE-KI Az összes szûrési szabály esetében kötelezõ egyértelmûen nyilatkozunk arról, hogy a bemenõ vagy a kimenõ forgalomra vonatkozik. Ezért a következõ kulcsszó vagy az in vagy pedig az out, de közülük egyszerre csak az egyiket szabad használni, máskülönben a szabály hibásnak minõsül. Az in jelenti, hogy a szabályt az internet felõl az adott interfészen beérkezõ csomagokra kell alkalmazni. Az out jelenti, hogy a szabályt az internet felé az adott interfészen kiküldött csomagokra kell alkalmazni. OPCIÓK Ezek az opciók csak a lentebb bemutatott sorrendben használhatók. A log jelzi, hogy illeszkedés esetén a csomag fejlécét az ipl eszközön keresztül naplózni kell (lásd a naplózásról szóló szakaszt). A quickjelzi, hogy illeszkedés esetén ez lesz a legutolsónak ellenõrzött szabály és így egy olyan rövidzárat tudunk képezni a feldolgozásban, amellyel elkerüljük a csomagra egyébként vonatkozó többi szabály illesztését. Ez az opció a korszerûsített szabályfeldolgozás kihasználásához elengedhetetlen. Az on használatával a szûrés feltételei közé bevonhatjuk a csomaghoz tartozó hálózati interfészt. Itt az interfészek az &man.ifconfig.8; által megjelenített formában adhatóak meg. Az opció megadásával csak az adott interfészen az adott irányba (befelé/kifelé) közlekedõ csomagokra fog illeszkedni a szabály. Ez az opció a korszerûsített szabályfeldolgozás kihasználásához nélkülözhetetlen. Amikor naplózunk egy csomagot, akkor a hozzá tartozó fejléc az IPL csomagnaplózó pszeudo eszközhöz kerül. A log kulcsszó után közvetlenül a következõ minõsítõk szerepelhetnek (a következõ sorrendben): A body jelzi, hogy a csomag tartalmának elsõ 128 byte-ját még jegyezzük fel a fejléc mellé. A first minõsítõt akkor érdemes használnunk, amikor a log kulcsszót a keep state opcióval együtt alkalmazzuk, mivel ilyenkor csak a szabályt kialakító csomag kerül naplózásra és nem minden olyan, ami illeszkedik az állapottartási feltételekre. SZÛRÉS Ebben a szakaszban olyan kulcsszavak jelenhetnek meg, amelyekkel a csomagok különféle tulajdonságai alapján ítélkezhetünk azok illeszkedésérõl. Itt adott egy kiinduló kulcsszó, amelyhez további kulcsszavak is tartoznak, és amelyek közül csak egyet választhatunk. Az alábbi általános tulajdonságok alapján tudjuk szûrni a csomagokat, ebben a sorrendben: PROTOKOLL A proto egy olyan kulcsszó, amelyhez hozzá kell rendelnünk még valamelyik opcióját is. Ez az opció segít az adott protokolloknak megfelelõen válogatni a csomagok között. A korszerûsített szabályfeldolgozás lehetõségeinek kihasználásához nélkülözhetetlen. Opcióként a tcp/udp | udp | tcp | icmp, vagy bármelyik, az /etc/protocols állományban megtalálható kulcsszó felhasználható. A tcp/udp ebbõl a szempontból speciálisnak tekinthetõ, mivel hatására egyszerre illeszthetõek a szabályra a TCP és UDP csomagok, és így a protokolltól eltekintve azonos szabályok felesleges többszörözését kerülhetjük el. FORRÁS_CÍM/CÉL_CÍM Az all kulcsszó gyakorlatilag a from any to any (bárhonnan bárhova) szinonímája és nem tartozik hozzá paraméter. A from forrás to cél felépítése: a from és to kulcsszavak az IP-címek illesztésére használhatóak. Ilyenkor a szabályokban a forrás és a cél paramétereknek is szerepelniük kell. Az any egy olyan speciális kulcsszó, amely tetszõleges IP-címre illeszkedik. Néhány példa az alkalmazására: from any to any vagy from 0.0.0.0/0 to any, from any to 0.0.0.0/0, from 0.0.0.0/0 to any vagy from any to 0.0.0.0. Az IP-címek megadhatóak pontozott numerikus formában a hálózati maszk bitekben mért hosszával együtt, vagy akár egyetlen pontozott numerikus IP-címként. Nincs lehetõség olyan IP-címtartományok illesztésére, amelyek nem adhatóak meg kényelmesen ponttal elválasztott számok és maszk hosszával. A net-mgmt/ipcalc port az ilyen számításokat könnyíti meg. A hálózati maszkok hosszának megállapításban segíthet az említett segédprogram (angol nyelvû) honlapja: . PORT Amikor portra vonatkozó illeszkedést írunk elõ, megadhatjuk a forrásra és célra, amit aztán vagy csak TCP vagy pedig csak UDP csomagokra alkalmazunk. A portok feltételeinek megfogalmazásánál használhatjuk a portok számát vagy az /etc/services állományban szereplõ nevüket. Amikor a port egy from típusú objektum leírásában jelenik meg, akkor automatikusan a forrásportot jelenti, míg a to objektum leírásában pedig a célportot. A to objektumoknál a port megadása elengedhetetlen a korszerûsített szabályfeldolgozás elõnyeinek kihasználásához. Példa: from any to any port = 80. Az egyes portokat különbözõ mûveletek segítségével, numerikusan hasonlíthatjuk össze, ahol akár porttartományt is megadhatunk. port "=" | "!=" | "<" | ">" | "<=" | ">=" | "eq" | "ne" | "lt" | "gt" | "le" | "ge". A porttartományok megadásához használjuk a port "<>" | "><" felírási módot. A forrásra és célra vonatkozó paraméterek után szereplõ másik két paraméter nélkülözhetetlen a korszerûsített szabályfeldolgozás mûködéséhez. <acronym>TCP</acronym>_BEÁLLÍTÁS A beállítások csak a TCP forgalom szûrésénél érvényesülnek. A betûk jelölik azokat a lehetséges beállításokat, amelyek a TCP csomagok fejlécében megvizsgálhatóak. A korszerûsített szabályfeldolgozás a flags S paraméter segítségével ismeri fel a TCP munkameneteket kezdeményezõ kéréseket. ÁLLAPOTTARTÓ A keep state jelzi, hogy a szabály paramétereinek megfelelõ bármely csomag aktiválja az állapottartó szûrés használatát. Ez a beállítás feltétlenül szükséges a korszerûsített szabályfeldolgozás megfelelõ kihasználásához. Állapottartó csomagszûrés IPFILTER állapottartó szûrés Az állapottartó szûrés a csomagok kétirányú áramlását egy létrejött kapcsolatba sorolja be. Amikor aktiválódik, az állapottartó szabály elõre dinamikusan létrehozza a kétirányú kommunikációban megforduló csomagokhoz a megfelelõ belsõ szabályokat. Olyan vizsgálatokat végez, amelyek segítségével ki tudja deríteni, hogy a csomag küldõje és címzettje között fennálló kétirányú kapcsolat érvényes szabályok szerint zajlik-e. Minden olyan csomagot, amely nem illeszkedik megfelelõen a kapcsolatra vonatkozó sémára, csalásnak tekintjük és automatikusan eldobjuk. Az állapottartás révén lehetõségünk van a TCP vagy UDP kapcsolatokhoz tartozó ICMP csomagokat is átengedni a tûzfalon. Tehát ha kapunk egy 3-as típusú, 4-es kódú ICMP választ valamilyen böngészésre használt állapottartó szabályon keresztül kiküldött kérésre, akkor az automatikusan bejöhet. Amelyik csomagot az IPF egyértelmûen képes besorolni az aktív kapcsolatba, még ha az eltérõ protokollt is használ, beengedi. Ami ilyenkor történik: Az internethez csatlakozó interfészen keresztül kifelé haladó csomagokat elõször egy dinamikus állapottábla alapján illesztjük, és ha a csomag illeszkedik az aktív kapcsolatban következõként várt csomagra, akkor átmegy a tûzfalon és a dinamikus állapottáblában frissül a kapcsolat állapota. Az aktív munkameneten kívül csomagok pedig egyszerûen a kimenõ szabályrendszer szerint kerülnek ellenõrzésre. Hasonlóan az elõzõhöz, az internethez csatlakozó interfészen keresztül befelé haladó csomagokat elõször egy dinamikus állapottábla alapján illesztjük, és ha a csomag illeszkedik az aktív kapcsolatban következõként várt csomagra, akkor átmegy a tûzfalon és a dinamikus állapottáblában frissül a kapcsolat állapota. Az aktív munkamenethez nem tartozó csomagok pedig egyszerûen a bejövõ szabályrendszer szerint kerülnek ellenõrzésre. Amikor egy kapcsolat befejezõdik, automatikusan törlõdik a dinamikus állapottáblából. Az állapottartó csomagszûrés használatával az újonnan keletkezõ kapcsolatok elutasítására vagy engedélyezésére tudunk koncentrálni. Ha engedélyeztük egy új kapcsolat létrejöttét, akkor a rákövetkezõ összes többi csomag automatikusan átmegy a tûzfalon és minden más hamis csomag eldobódik. Ha tiltjuk az új kapcsolatot, akkor egyetlen rákövetkezõ csomag sem juthat át. Az állapottartó szûrés által felkínált fejlett elemzési lehetõségek képesek védelmet nyújtani a behatolók részérõl alkalmazott megannyi különbözõ támadási módszer ellen. Példa inkluzív szabályrendszerre A most következõ szabályrendszer arra mutat példát, hogyan programozzunk le egy nagyon biztonságos inkluzív tûzfalat. Az inkluzív tûzfalak csak a szabályainak megfelelõ szolgáltatásokat engedik keresztül, és alapértelmezés szerint minden mást blokkolnak. Egy hálózat gépeit védõ tûzfalnak, amelyet gyakran hálózati tûzfalnak (network firewall) is neveznek, legalább két hálózati interfésszel kell rendelkeznie. Ezeket az interfészeket általában úgy állítják be, hogy tökéletesen megbíznak az egyik oldalban (a helyi hálózatban), a másikban (az internetben) pedig egyáltalán nem. A tûzfalat egyébként úgy is beállíthatjuk, hogy csak a tûzfalat mûködtetõ gépet védje — ezt egyrendszeres tûzfalnak (host based firewall) nevezik. Az ilyen típusú megoldásokat nem biztonságos hálózaton keresztül kommunikáló szervereknél alkalmaznak. Mindegyik &unix;-típusú rendszert, köztük a &os;-t is úgy alakították ki, hogy az operációs rendszeren belüli kommunikáció az lo0 interfészen és a 127.0.0.1 IP-címen keresztül történik. A tûzfal szabályai között feltétlenül szerepelniük kell olyanoknak, amelyek lehetõvé teszik ezen a speciális intefészen a csomagok zavartalan mozgását. Az internetre csatlakozó interfészhez kell rendelni a kifelé és befelé haladó forgalom hitelesítését é a hozzáférésének vezérlését. Ez lehet a felhasználói PPP által létrehozott tun0 interfész vagy a DSL-, illetve kábelmodemhez csatlakozó hálózati kártya. Ahol egy vagy több hálózati kártya is csatlakozik több különbözõ helyi hálózathoz, úgy kell beállítani a hozzájuk tartozó interfészeket, hogy egymás felé és az internet felé képesek legyenek küldeni és fogadni. A szabályokat elõször három nagy csoportba kell szerveznünk: elõször jönnek a megbízható interfészek, ezeket követik az internet felé mutató interfészek, végül internet felõl jövõ, nem megbízható interfészeke. Az egyes csoportokban szereplõ szabályokat úgy kell megadni, hogy közülük elõre kerüljenek a leggyakrabban alkalmazottak, és a csoport utolsó szabálya blokkoljon és naplózzon minden csomagot az adott interfészen és irányban. A kimenõ forgalomat vezérlõ szabályrendszer csak pass (tehát átengedõ) szabályokat tartalmazhat, amelyek bentrõl az interneten elérhetõ szolgáltatásokat azonosítják egyértelmûen. Az összes ilyen szabályban meg kell jelenni a quick, on, proto, port és keep state beállításoknak. A proto tcp szabályok esetében meg kell adni a flag opciót is, amivel fel tudjuk ismertetni a kapcsolatok keletkezését és ezen keresztül aktiválni az állapottartást. A bejövõ forgalmat vezérlõ szabályrendszerben elõször az eldobni kívánt csomagokat kell megadni, aminek két eltérõ oka van. Elõször is elõfordulhat, hogy a veszélyes csomagok részleges illeszkedés miatt szabályosnak tûnnek. Az ilyen csomagokat értelemszerûen nem lenne szabad beengedni a szabályok részleges megfelelése alapján. A másodszor az eleve ismerten problémás és értelmetlen csomagokat csendben el kellene vetni, mielõtt a szakaszhoz tartozó utolsó szabály fogná meg és naplózná. Ez az utolsó szabály egyébként szükség esetén felhasználható a támadók elleni bizonyítékok begyûjtésére. A másik, amire még oda kell figyelnünk, hogy a blokkolt csomagok esetében semmilyen válasz nem keletkezzen, egyszerûen csak tûnjenek el. Így a támadó nem fogja tudni, hogy a csomagjai vajon elérték-e a rendszerünket. Minél kevesebb információt tudnak összegyûjteni a rendszerünkrõl a támadók, annál több idõt kell szánniuk csínytevéseik kieszelésére. A log first opciót tartalmazó szabályok csak az illeszkedésnél fogják naplózni a hozzájuk tartozó eseményt. Erre láthatunk példát az nmap OS fingerprint szabálynál. Az security/nmap segédprogramot a támadók gyakran alkalmazzák a megtámadni kívánt szerver operációs rendszerének felderítésére. Minden log first opcióval megadott szabály illeszkedésénél a ipfstat -hio parancs meghatározódik az eddigi illeszkedések aktuális száma. Nagyobb értékek esetében következtethetünk arra, hogy a rendszerünket megtámadták (vagyis csomagokkal árasztják éppen el). Az ismeretlen portszámok felderítésére az /etc/services állomány, esetleg a (angol nyelvû) honlap használható. Érdemes továbbá megnézni a trójai programok által használt portokat a címen (angolul). A következõ szabályrendszer egy olyan biztonságos inkluzív típusú tûzfal, amelyet éles rendszeren is használnak. Ezt a rendszerünkön nem használt szolgáltatásokra vonatkozó pass szabályok törlésével könnyedén a saját igényeink szerint alakíthatjuk. Ha nem akarunk látni bizonyos üzeneteket, akkor vegyünk fel hozzájuk egy block típusú szabályt a befelé irányuló forgalomhoz tartozó szabályok közé. A szabályokban írjuk át a dc0 interfész nevét annak a hálózati kártyának az interfészére, amelyen keresztül csatlakozunk az internethez. A felhasználói PPP esetében ez a tun0 lesz. Tehát a következõket kell beírni az /etc/ipf.rules állományba: ################################################################# # A helyi hálózatunkon zajló forgalmat ne korlátozzuk. # Csak akkor kell, ha helyi hálózathoz is csatlakozunk. ################################################################# #pass out quick on xl0 all #pass in quick on xl0 all ################################################################# # A belsõ interfészen szintén ne korlátozzunk semmit. ################################################################# pass in quick on lo0 all pass out quick on lo0 all ################################################################# # Az internet felé forgalmazó interfész (kimenõ kapcsolatok) # A saját hálózatunkról belülrõl vagy errõl az átjáróról # kezdeményezett kapcsolatokat vizsgáljuk az internet felé. ################################################################# # Engedélyezzük az internet szolgáltatók névszerverének elérését, # az "xxx" helyett a névszervet IP-címét kell megadni. # Másoljuk le ezeket a sorokat, ha a szolgáltatónknak több # névszerverét is beakarjuk állítani. A címeiket az /etc/resolv.conf # állományban találjuk. pass out quick on dc0 proto tcp from any to xxx port = 53 flags S keep state pass out quick on dc0 proto udp from any to xxx port = 53 keep state # DSL vagy kábeles hálózatoknál engedélyezzük a # szolgáltatónk DHCP szerverének elérését. # Ez a szabály nem kell, ha "felhasználói PPP"-vel # kapcsolódunk az internethez, ilyenkor tehát az egész # csoport törölhetõ. # Használjuk az alábbi szabályt és keressük meg a naplóban az # IP-címet. Ha megtaláltuk, akkor tegyük bele a megjegyzésben # szereplõ szabályba és töröljük az elsõ szabályt. pass out log quick on dc0 proto udp from any to any port = 67 keep state #pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state # Kifelé engedélyezzük a szabványos nem biztonságos WWW funkciókat. pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state # Kifelé engedélyezzük a biztonságos WWW funkciókat TLS SSL # protokollal. pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state # Kifelé engedélyezzük az e-mailek küldését és fogadását. pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state # Kifelé engedélyezzük az idõ szolgáltatást. pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state # Kifelé engedélyezzük az nntp híreket. pass out quick on dc0 proto tcp from any to any port = 119 flags S keep state # Kifelé engedélyezzük az átjáróról és a helyi hálózatról a nem # biztonságos FTP használatát (passzív és akív módokban is). Ez a # funkció a mûködéséhez a nat szabályokat tartalmazó állományban # hivatkozott FTP proxyt használja. Amennyiben a pkg_add paranccsal # csomagokat akarunk telepíteni az átjáróra, erre a szabályra # mindenképpen szükségünk lesz. pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state # Kifelé engedélyezzük az ssh/sftp/scp # (biztonságos telnet/rlogin/FTP) # szolgáltatások # elérését az SSH (secure shell) használatával. pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state # Kifelé engedélyezzük a nem biztonságos telnet elérését. pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state # Kifelé engedélyezzük FreeBSD CVSUp funkcióját. pass out quick on dc0 proto tcp from any to any port = 5999 flags S keep state # Kifelé engedélyezzük a pinget. pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state # Kifelé engedélyezzük a helyi hálózatról érkezõ whois kéréseket. pass out quick on dc0 proto tcp from any to any port = 43 flags S keep state # Minden mást eldobunk és naplózzuk az elsõ elõfordulásukat. # Ez a szabály blokkol alapértelmezés szerint mindent. block out log first quick on dc0 all ################################################################# # Az internet felõli interfész (bejövõ kapcsolatok) # A saját hálózatunk felé vagy erre az átjáróra # nyitott kapcsolatokat vizsgáljuk az internet felõl. ################################################################# # Eldobjuk az összes olyan bejövõ forgalmat, amit hivatalosan nem # lehetne továbbítani vagy fenntartott címterülethez tartozik. block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918: privát IP block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918: privát IP block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918: privát IP block in quick on dc0 from 127.0.0.0/8 to any #helyi block in quick on dc0 from 0.0.0.0/8 to any #helyi block in quick on dc0 from 169.254.0.0/16 to any #DHCP block in quick on dc0 from 192.0.2.0/24 to any #dokumentációs célokra fenntartva block in quick on dc0 from 204.152.64.0/23 to any #Sun klaszterek összekötésére használt block in quick on dc0 from 224.0.0.0/3 to any #D és E osztályú multicast ##### Itt eldobunk egy rakás csúf dolgot ############ # Ezeket nem akarjuk a naplóban látni: # Eldobjuk a töredékcsomagokat. block in quick on dc0 all with frags # Eldobjuk a túlságosan rövid TCP csomagokat. block in quick on dc0 proto tcp all with short # Eldobjuk a forrás által közvetített (source routed) csomagokat. block in quick on dc0 all with opt lsrr block in quick on dc0 all with opt ssrr # Elutasítjuk az "OS fingerprint" kéréseket. # Naplózzuk az elsõ elõfordulást, így nálunk lesz a kíváncsiskodó # egyén IP-címe. block in log first quick on dc0 proto tcp from any to any flags FUP # Eldobunk mindent, aminek speciális beállításai vannak. block in quick on dc0 all with ipopts # Elutasítjuk a publikus pinget. block in quick on dc0 proto icmp all icmp-type 8 # Elutasítjuk az ident kéréseket. block in quick on dc0 proto tcp from any to any port = 113 # Blokkoljuk az összes Netbios szolgáltatást: 137=név, 138=datagram, # 139=session. A Netbios az MS Windows megosztását implementálja. # Blokkoljuk az MS Windows hosts2 névszerver kéréseit is a 81-es # porton. block in log first quick on dc0 proto tcp/udp from any to any port = 137 block in log first quick on dc0 proto tcp/udp from any to any port = 138 block in log first quick on dc0 proto tcp/udp from any to any port = 139 block in log first quick on dc0 proto tcp/udp from any to any port = 81 # Engedélyezzük a szolgáltatónk DHCP szerverétõl érkezõ forgalmat. # Ebben a szabályban meg kell adnunk a szolgáltató DHCP szerverének # IP-címét, mivel itt csak a hiteles forrásból fogadunk el csomagokat. # Erre csak DSL- és kábelmodemes kapcsolat esetében van szükség, a # "felhasználói PPP" alkalmazása során szükségtelen. Ez az IP-cím # megegyezik a kimenõ kapcsolatoknál megadott címmel. pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state # Befelé engedélyezzük a szabványos WWW funkciót, mivel webszerverünk # van. pass in quick on dc0 proto tcp from any to any port = 80 flags S keep state # Befelé engedélyezzük az internetrõl érkezõ nem biztonságos telnet # kapcsolatokat. Azért nem biztonságos, mert az azonosítókat és # jelszavakat titkosítatlan formában közli az interneten keresztül. # Töröljük ezt a szabályt, ha nem használunk telnet szervert. #pass in quick on dc0 proto tcp from any to any port = 23 flags S keep state # Befelé engedélyezzük az internetrõl # érkezõ ssh/sftp/scp (biztonságos # telnet/rlogin/FTP) # kapcsolatokat az SSH (secure shell) használatával. pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state # Minden mást dobjuk el és naplózzuk az elsõ elõfordulásukat. # Az elsõ alkalom naplózásával elejét tudjuk venni a "Denial of # Service" típusú támadásoknak, amivel egyébként lehetséges lenne a # napló elárasztása. # Ez a szabály blokkol alapértelmezés szerint mindent. block in log first quick on dc0 all ################### Itt van a szabályok vége ############################## <acronym>NAT</acronym> NAT IP maszkolás NAT hálózati címfordítás NAT A NAT jelentése Network Address Translation, vagyis hálózati címfordítás. A &linux; esetében ezt IP masqueradingnak, vagyis IP maszkolásnak hívják. A hálózati címfordítás és az IP maszkolás lényegben ugyanazt takarja. Az IPF címfordításért felelõs funkciójának köszönhetõen képesek vagyunk a tûzfal mögött elhelyezkedõ helyi hálózat számára megosztani az internet-szolgáltatól kapott publikus IP-címet. Sokakban felmerülhet a kérdés, hogy erre vajon mi szükségünk lehet. Az internet-szolgáltatók a magánszemélyeknek általában dinamikus IP-címeket osztanak ki. A dinamikus itt arra utal, hogy a címünk minden alkalommal változik, amikor betárcsázunk a szolgáltatóhoz vagy amikor ki- és bekapcsoljuk a modemünket. Ez a dinamikus IP-cím fog azonosítani minket az interneten. Most tegyük fel, hogy öt gépünk van otthon, viszont csak egyetlen elõfizetéssel rendelkezünk. Ebben az esetben öt telefonvonalat kellene használnunk és mindegyik géphez elõfizetni az internetre. A hálózati címfordítás alkalmazásával azonban mindössze egyetlen elõfizetés kell. A gépek közül négyet hozzákötünk egy switch-hez és a switch-et pedig a fennmaradó géphez, amelyen &os; fut. Ez utóbbi lesz az így kialakított helyi hálózatunk átjárója. A tûzfalban mûködõ címfordítás segítségével a helyi hálózaton található gépek IP-címeit észrevétlenül át tudjuk fordítani a hálózatunk publikus IP-címére, ahogy a csomagok elhagyják az átjárót. A beérkezõ csomagok esetében mindez visszafelé történik meg. Az IP-címek közül adott egy tartomány, amit a címfordítást használó helyi hálózatok részére tartanak fenn. Az RFC 1918 szerint az alábbi IP-címtartományok használhatók a helyi hálózatban, mivel ezeken keresztül közvetlenül sosem lehet kijutni az internetre: Kezdõ IP: 10.0.0.0 - Záró IP: 10.255.255.255 Kezdõ IP: 172.16.0.0 - Záró IP: 172.31.255.255 Kezdõ IP: 192.168.0.0 - Záró IP: 192.168.255.255 IP<acronym>NAT</acronym> NAT IPFILTER ipnat A címfordításra vonatkozó szabályokat az ipnat paranccsal tudjuk betölteni. Az ilyen típusú szabályokat általában az /etc/ipnat.rules állományban találjuk. A részleteket lásd az &man.ipnat.1; man oldalán. Amikor a címfordítás üzembe helyezése után meg akarjuk változtatni a címfordítás szabályait, elõször a címfordítás szabályait tartalmazó állományt módosítsuk, majd a belsõ címfordítási szabályok és a címfordítási táblázatban szereplõ aktív bejegyzések törléséhez futassuk le az ipnat parancsot a beállítással. A címfordítási szabályok újratöltését egy ehhez hasonló paranccsal tudjuk elvégezni: &prompt.root; ipnat -CF -f /etc/ipnat.szabályok A címfordításhoz tartozó statisztikákat ezzel a paranccsal tudjuk lekérdezni: &prompt.root; ipnat -s A címfordítási táblázatban pillanatnyilag szereplõ összerendeléseket a következõ paranccsal tudjuk listázni: &prompt.root; ipnat -l A szabályok feldolgozásával és az aktív szabályokkal/bejegyzésekkel kapcsolatos információk részletezését így engedélyezhetjük: &prompt.root; ipnat -v A címfordítási szabályok A címfordítási szabályok nagyon rugalmasak és rengeteg olyan funkciót meg tudunk velük valósítani, ami az üzleti és otthoni felhasználók számára egyaránt hasznos. Itt most a szabályok felépítését csak egyszerûsítve mutatjuk be, leginkább a nem üzleti környezetek tekintetében. A szabályok komplett formai leírását az &man.ipnat.5; man oldalán találjuk. Egy címfordítási szabály tehát valahogy így néz ki: map INTERFÉSZ HELYI_IP_TARTOMÁNY -> PUBLIKUS_CÍM A szabályt a map kulcsszó kezdi. A INTERFÉSZ helyére az internet felé mutató külsõ interfész nevét írjuk be. A HELYI_IP_TARTOMÁNY lesz az, amelyben a kliensek címeznek. Ez például a 192.168.1.0/24. A PUBLIKUS_CÍM lehet egy külsõ IP-cím vagy a 0/32 speciális kulcsszó, amellyel a FELÜLET-hez rendelt IP-címre hivatkozunk. Hogyan mûködik a hálózati címfordítás A publikus cél felé haladó csomag megérkezik a helyi hálózatról. Miután a kimenõ kapcsolatokra vonatkozó szabályok átengedik, a címfordítás kapja meg a szerepet és fentrõl lefelé haladva nekilát alkalmazni a saját szabályait, ahol az elsõ egyezõ szerint cselekszik. A címfordítás a szabályokat a csomaghoz tartozó interfészre és a forrás IP-címére illeszti. Amikor a csomag interfészének neve illeszkedik egy címfordítási szabályra, akkor ezután a csomag forrás (vagyis a helyi hálózaton belüli) IP-címérõl igyekszik eldönteni, hogy a szabály nyilának bal oldalán szereplõ tartományba esik-e. Ha erre is illeszkedik, akkor a forrás IP-címét átírjuk a 0/32 kulcsszó alapján felderített publikus IP-címre. A címfordító rutin ezt feljegyzi a saját belsõ táblázatába, így amikor a csomag visszatér az internetrõl, akkor képes lesz visszafordítani az eredeti belsõ IP-címére és feldolgozásra átadni a tûzfal szabályainak. A címfordítás engedélyezése A címfordítás életre keltéséhez a következõket kell beállítanunk az /etc/rc.conf állományban. Elõször engedélyezzük a gépünknek, hogy közvetítsen forgalmat az interfészek között: gateway_enable="YES" Minden alkalommal indítsuk el a címfordításért felelõs IPNAT programot: ipnat_enable="YES" Adjuk meg az IPNAT számára a betöltendõ szabályokat: ipnat_rules="/etc/ipnat.rules" Hálózati címfordítás nagyon nagy helyi hálózatok esetében Az olyan helyi hálózatokban, ahol rengeteg PC található vagy több alhálózatot is tartalmaz, az összes privát IP-cím egyetlen publikus IP-címbe tömörítése igen komoly problémává tud dagadni és az azonos portok gyakori használata a helyi hálózatra kötött számítógépek között ütközéseket okoz. Két módon tudunk megoldást nyújtani erre a problémára. A használható portok kiosztása Egy normális címfordítási szabály valahogy így nézne ki: map dc0 192.168.1.0/24 -> 0/32 A fenti szabályban a csomag forrásportját az IPNAT változatlanul a feldolgozás után hagyja. Ha ehhez még hozzátesszük a portmap kulcsszót, akkor ezzel utasítani tudjuk az IPNAT-ot, hogy csak az adott tartományban képezze le a forrásportokat. Például a következõ szabály hatására az IPNAT a forrásportokat egy adott tartományon belül fogja módosítani: map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000 Ha viszont még inkább meg akarjuk könnyíteni a dolgunkat, akkor itt egyszerûen csak adjuk meg az auto kulcsszót, amellyel az IPNAT önmagától megállapítja, hogy milyen portokat tud használni: map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto Több publikus cím használata Minden nagyobb helyi hálózat esetében elérkezünk ahhoz a ponthoz, ahol már egyetlen publikus cím nem elég. Ha több publikus IP-címmel is rendelkezünk, akkor ezekbõl a címekbõl egy közös készletet hozhatunk létre, amibõl majd az IPNAT válogathat miközben a csomagok címeit átírja kifelé menetben. Például ahelyett, hogy a csomagokat egyetlen publikus IP-címre képeznénk le, ahogy itt tesszük: map dc0 192.168.1.0/24 -> 204.134.75.1 A hálózati maszk segítségével meg tudjuk adni IP-címek egy tartományát is: map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0 CIDR-jelöléssel: map dc0 192.168.1.0/24 -> 204.134.75.0/24 A portok átirányítása Gyakran elõfordul, hogy van webszerverünk, levelezõ szerverünk, adatbázis szerverünk és névszerverünk, melyek a helyi hálózat különbözõ gépein futnak. Ebben az esetben a szerverekhez tartozó forgalmat is fordítanunk kell, illetve valamilyen módon a bejövõ forgalmat is át kell irányítanunk a helyi hálózat megfelelõ gépeihez. Az IPNAT ezt a gondot a hálózati címfordítás átirányítást támogató funkcióival szünteti meg. Tegyük fel, hogy a 10.0.10.25 belsõ címen van egy webszerverünk, amelyhez a 20.20.20.5 publikus IP tartozik. Ilyenkor a következõ szabályt adjuk meg: rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80 vagy: rdr dc0 0.0.0.0/0 port 80 -> 10.0.10.25 port 80 Így tudjuk beállítani a 10.0.10.33 címmel rendelkezõ névszervert a kintrõl érkezõ névfeloldási kérések fogadására: rdr dc0 20.20.20.5/32 port 53 -> 10.0.10.33 port 53 udp Az FTP és a címfordítás Az FTP egy olyan õskövület, amely még az internet egy régi korszakából maradt fenn, amikor az egyetemek között még bérelt vonal létezett és az FTP szolgált a kutatók közt az állományok megosztására. Ez még abban az idõben történt, amikor a biztonság egyáltalán nem volt lényeges szempont. Az évek elõrehaladtával az FTP protokoll beleivódott a feltörekvõ internet gerincébe és a titkosítatlanul küldött azonosítóival és jelszavaival továbbra is ugyanolyan védtelen maradt. Az FTP két változatban, aktív és passzív módban képes mûködni. Az eltérés kettejük között az adatcsatorna megállapításában van. A passzív mód sokkal biztonságosabb, mivel ilyenkor az adatcsatornát az FTP kapcsolatot kezdeményezõ állítja be. Az FTP különbözõ módjainak magyarázatát és a köztük levõ különbséget a címen ismerhetjük meg részleteiben (angolul). Az IPNAT szabályai Az IPNAT egy speciális beépített FTP proxyval rendelkezik, amelyre a hálózati címfordítás leképezései között hivatkozhatunk. Képes figyelni az összes aktív vagy passzív FTP kapcsolathoz tartozó kimenõ kérést és ezekhez dinamikusan létrehozni olyan ideiglenes szûrési szabályokat, amelyek valóban csak az adatcsatornához felhasznált portokat tartalmazzák. Ezzel ki tudjuk küszöbölni az FTP azon káros hatását a tûzfalra nézve, hogy egyszerre túlságosan sok magasabb tartománybeli port legyen nyitva. Ez a szabály a belsõ hálózat összes FTP forgalmát lekezeli: map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp Ez a szabály pedig az átjáróról érkezõ FTP forgalommal bírkózik meg: map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp Ez a szabály kezeli a belsõ hálózatról érkezõ összes nem FTP típusú forgalmat: map dc0 10.0.10.0/29 -> 0/32 Az FTP leképzésére vonatkozó szabály a szokásos leképzési szabály elé kerül. Az összes csomag fentrõl haladva az elsõ illeszkedõ szabály alapján kerül feldolgozásra. Elõször az interfész nevét vizsgáljuk, majd a belsõ hálózatbeli forrás IP-t, végül azt, hogy a csomag egy FTP kapcsolat része. Ha minden paraméterében megfelel, akkor az FTP proxy készít egy ideiglenes szûrési szabályt hozzá, amellyel az FTP kapcsolathoz tartozó csomagok mind a két irányba képesek lesznek vándorolni, természetesen a címfordítással együtt. Az összes többi bentrõl érkezõ csomag átlép ezen a szabályon és megáll a harmadiknál, ahol az interfésznek és forrás IP-nek megfelelõen átfordítjuk a címét. Az IPNAT szûrési szabályai FTP-re Az FTP esetében csak egyetlen szûrési szabályra van szükségünk a hálózati címfordításba épített FTP proxy használatához. FTP proxy nélkül az alábbi három szabály kellene: # Kifelé engedélyezzük a belsõ gépek FTP elérést az internet irányába, # aktív és passzív módokban. pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state # Kifelé engedélyezzük a passzív módhoz tartozó magasabb tartománybeli # adatcsatornákat. pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state # Aktív módban beengedjük az FTP szervertõl érkezõ adatcsatornát. pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state IPFW tûzfalak IPFW Az IPFIREWALL (IPFW) a &os; által támogatott tûzfalazó alkalmazás, melyet a &os; Projektben résztvevõ önkéntesek fejlesztettek ki és tartanak karban. Régi típusú, állapottartás nélküli szabályokat használ, és az itt használatos szabályírási technikát egyszerû állapottartó megoldásnak nevezzük. Az IPFW szabvány &os;-ben levõ, mintaként szolgáló szabályrendszere (ez az /etc/rc.firewall és /etc/rc.firewall6 állományokban található meg) annyira egyszerû, hogy komolyabb módosítások nélkül nem ajánlatos használni. Ez a példa nem tartalmaz állapottartó szûrést, ami viszont a legtöbb esetben kívánatos lenne, ezért ezt a szakaszt nem erre alapozzuk. Az IPFW állapottartás nélküli szabályainak felépítésében olyan technikailag kifinomult leválogatási képességek bújnak meg, amelyek jócskán meghaladják az átlagos tûzfalépítõk tudását. Az IPFW elsõsorban olyan szakemberek vagy szakmailag elõrehaladott felhasználók számára készült, akiknek speciális csomagszûrési igényeik vannak. A különbözõ protokollok használatának és a hozzájuk tartozó fejlécinformációk mindenre kiterjedõ ismerete szinte nélkülözhetetlen az IPFW valódi erejének kihasználásához. Ez a szint azonban túlmutat a kézikönyv ezen szakaszának keretein. Az IPFW hét komponensbõl épül fel, melyek közül az elsõdleges a rendszermag tûzfalazásért felelõs szabályfeldolgozó és a hozzá tartozó csomagnyilvántartás, majd ezt követi a naplózás, a hálózati címfordítást aktiváló divert szabály, valamint a komolyabb célok megvalósítására alkalmas lehetõségek: a forgalom korlátozásáért felelõs dummynet, a továbbküldésre alkalmas fwd rule szabály, a hálózati hidak támogatása, illetve az ipstealth. Az IPFW egyaránt használható IPv4 és IPv6 esetén. Az IPFW engedélyezése IPFW engedélyezése Az IPFW az alap &os; telepítésben külön, futás idõben betölthetõ modulként érhetõ el. Ha az rc.conf állományban megadjuk a firewall_enable="YES" beállítást, akkor a rendszer indulásakor ezt a modult dinamikusan betölti. Az IPFW-t csak akkor kell a &os; rendszermagjába beépítenünk, ha szükségünk van a címfordítási funkciójára is. Ha tehát az rc.conf állományban megadtuk a firewall_enable="YES" sort és újraindítottuk a számítógépünket, akkor a következõ fehérrel kiemelt üzenet fog megjelenni a rendszerindítás során: ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled A logging disabled üzenetbõl kiderül, hogy a modul nem végez naplózást. A naplózást és a hozzá tartozó részletesség szintjét úgy tudjuk beállítani, ha az /etc/sysctl.conf állományba felvesszük a következõ sorokat, amivel a következõ indításkor már mûködni fog: net.inet.ip.fw.verbose=1 net.inet.ip.fw.verbose_limit=5 A rendszermag beállításai a rendszermag beállításai IPFIREWALL a rendszermag beállításai IPFIREWALL_VERBOSE a rendszermag beállításai IPFIREWALL_VERBOSE_LIMIT IPFW a rendszermag beállításai Ha nem akarjuk kihasználni az IPFW által felkínált címfordítási lehetõségeket, akkor egyáltalán nem szükséges a &os; rendszermagjába belefordítani a támogatását. Ezért az alábbiakat csak kiegészítõ információként tüntettük fel. options IPFIREWALL Ez a beállítás engedélyezi az IPFW használatát a rendszermag részeként. options IPFIREWALL_VERBOSE Ezzel és a log kulcsszóval tudjuk az IPFW szabályain keresztülhaladó csomagokat naplózni. options IPFIREWALL_VERBOSE_LIMIT=5 Ez az érték korlátozza a &man.syslogd.8; segítségével naplózott azonos bejegyzések maximális számát. Ezt a beállítást olyan veszélyes környezetekben érdemes használnunk, ahol naplózni akarunk. Segítségével meg tudjuk akadályozni, hogy a rendszernapló elárasztásával megakasszák a rendszerünket. a rendszermag beállításai IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_DEFAULT_TO_ACCEPT Ezen beállítás hatására a tûzfal alapértelmezés szerint mindent átenged, ami általában akkor jöhet jól, amikor elõször beállítjuk a tûzfalat. a rendszermag beállításai IPDIVERT options IPDIVERT Ezzel a beállítással engedélyezzük a címfordítás használatát. Ha nem adjuk meg az IPFIREWALL_DEFAULT_TO_ACCEPT beállítást, vagy ha nem engedélyezzük a bejövõ csomagokat, akkor a gépünkre semmilyen csomag nem lesz képes bejutni, illetve onnan kijutni. Az <filename>/etc/rc.conf</filename> beállításai Így tudjuk engedélyezni a tûzfalat: firewall_enable="YES" A &os;-hez mellékelt alapértelmezett tûzfaltípusok közül az /etc/rc.firewall állomány átolvasásával tudunk választani, és megadni az alábbi helyett: firewall_type="open" A következõ értékek állnak rendelkezésünkre: open — átengedi az összes forgalmat client — csak ezt a gépet védi simple — az egész hálózatot védi closed — a helyi interfész kivételével minden IP alapú forgalmat tilt UNKNOWN — tiltja a tûzfal szabályainak betöltését állománynév — a tûzfal szabályait tartalmazó állomány abszolút elérési útvonala Két különbözõ módon lehet betölteni a saját ipfw szabályainkat. Az egyik közülük, ha a firewall_type változóban megadjuk a tûzfal szabályait tartalmazó állomány abszolút elérési útvonalát, az &man.ipfw.8; parancssori beállításai nélkül. Az alábbi példában egy olyan egyszerû szabályrendszert láthatunk, amely blokkolja az összes bejövõ és kimenõ forgalmat: add deny in add deny out Másrészrõl az firewall_script változóban is megadhatjuk azt a szkriptet, amelyben a rendszerindítás során meghívjuk ipfw parancsot. Az iménti szabályrendszert az alábbi szkripttel tudjuk kiváltani: #!/bin/sh ipfw -q flush ipfw add deny in ipfw add deny out Ha a firewall_type változó client vagy simple értékét használjuk, akkor az /etc/rc.firewall állományban található alapértelmezett szabályokat érdemes átvizsgálnunk, hogy kellõen illeszkednek-e az adott géphez. Hozzátennénk, hogy a fejezetben szereplõ példák azt feltételezik, hogy a firewall_script értéke az /etc/ipfw.rules állomány. A naplózás így engedélyezhetõ: firewall_logging="YES" A firewall_logging változó egyedül csak annyit tesz, hogy beállítja a net.inet.ip.fw.verbose sysctl változónak az 1 értéket (lásd ). A napló korlátozására nincs külön változó az rc.conf állományon belül, de az /etc/sysctl.conf állomány segítségével és manuálisan be tudjuk állítani a hozzá tartozó változót: net.inet.ip.fw.verbose_limit=5 Amennyiben a gépünk átjáróként viselkedik, tehát a &man.natd.8; segítségével címfordítást végez, a ban olvashatunk utána, hogy ehhez az /etc/rc.conf állományban milyen beállításokat kell megadnunk. Az IPFW parancs ipfw Normál esetben az ipfw parancs használatos arra, hogy a tûzfal mûködése közben az aktív belsõ szabályai közé vegyünk fel vagy töröljünk közülük manuálisan bejegyzéseket. Ennek a módszernek az egyedüli hátránya, hogy az így végrehajtott módosítások el fognak veszni a rendszer leállításával. Itt inkább azt a megoldást javasoljuk, hogy az összes szabályt tegyük bele egy állományba és a rendszerindítás során ezt töltsük be, majd ha változtatni akarunk a tûzfalon, akkor ezt az állományt módosítsuk és a régiek törlésével töltsük be újra az egész szabályrendszert. Az ipfw parancs mellesleg remekül használható a jelenleg futó tûzfalszabályok megjelenítésére a konzolon. Az IPFW nyilvántartásában az egyes szabályokhoz dinamikusan jönnek létre számlálók, amelyek a rá illeszkedõ csomagokat számolják. A tûzfal tesztelése folyamán a szabályok és hozzá tartozó számlálók lekérdezése a megfelelõ mûködés ellenõrzésének egyik lehetséges módja. A szabályokat így tudjuk egymás után felsoroltatni: &prompt.root; ipfw list A szabályokat így tudjuk az utolsó illeszkedésük idejével együtt megjeleníteni: &prompt.root; ipfw -t list A következõ példában a nyilvántartási információkat kérdezzük le, ekkor a szabályok mellett az illeszkedõ csomagok száma is láthatóvá válik. Az elsõ sorban a szabály száma szerepel, majd ezt követi rendre az illeszkedõ kimenõ és bejövõ csomagok mennyisége, valamint végül maga a szabály. &prompt.root; ipfw -a list A statikus szabályok mellett a dinamikusakat így lehet kilistázni: &prompt.root; ipfw -d list A lejárt dinamikus szabályokat is meg tudjuk nézni: &prompt.root; ipfw -d -e list A számlálók nullázása: &prompt.root; ipfw zero Csak a SZÁM sorszámú szabályhoz tartozó számlálók nullázása: &prompt.root; ipfw zero SZÁM Szabályrendszerek az IPFW-ben Az IPFW esetében a szabályrendszer olyan szabályokból áll, amelyek a csomagokról tartalmuk alapján eldöntik, hogy át kell engedni vagy vissza kell tartani. A gépek közt két irányban áramló csomagok egy munkamenet alapú társalgást képeznek. A tûzfalhoz tartozó szabályrendszer egyaránt feldolgozza a internetrõl a hálózatunk felé igyekvõ csomagokat, illetve a hálózatunk ezekre adott válaszait. Az egyes TCP/IP szolgáltatásokat (mint például telnet, www, levelezés stb.) a hozzájuk tartozó protokol és szabványos (fogadó) portszám írja le. Ezekre a forrásról általában valamilyen nem szabványos (magasabb értékû) portról érkeznek csomagok. Ekkor a kommunikáció összes paramétere (vagyis a portok és címek) bármelyike alapján definiálhatunk blokkolást vagy továbbengedést leíró szabályokat. IPFW a szabályok feldolgozásának sorrendje Amikor egy csomag eléri a tûzfalat, a szabályrendszer elsõ szabályával kerül összehasonlításra és amíg nem illeszkedik valamelyikre, addig lefut rá a többi szabály is fentrõl lefelé egyesével, a sorszámuknak megfelelõ növekvõ sorrendben. Ha a csomag megfelel valamelyik szabály leválogatási paramétereinek, akkor a benne megnevezett cselekvés zajlik le, és számára a feldolgozás befejezõdik. Ezt a viselkedést neveztük az elsõ illeszkedés nyer típusú keresésnek. Amennyiben a csomag egyetlen szabályra sem illeszkedik, akkor az IPFW 65535-ös sorszámú állandó szabálya fogja elcsípni, amely feladata szerint eldobja az összes hozzá beérkezõ csomagot anélkül, hogy bármit is válaszolna a csomag feladójának. A keresés a count, skipto és tee szabályok után még folytatódik. Az itt szereplõ utasítások különbözõ állapottartásra vonatkozó opciókat, például a keep state, limit, in, out és via kulcsszavakat tartalmazó szabályokon alapulnak. Lényegében ezt tekinthetjük az inkluzív típusú tûzfalak kiindulási alapjaként. A tûzfal szabályainak beállítása során nem árt óvatosnak lennünk, mert figyelmetlenségünk révén könnyen kizárathatjuk magunkat a gépünkrõl. A szabályok felépítése IPFW a szabályok felépítése Az itt bemutatásra kerülõ szabályok felépítését csak olyan mértékig részletezzük, ami elengedõ a szabványos inkluzív típusú tûzfalak kialakításához. A szabályok felépítésének pontos leírását az &man.ipfw.8; man oldalán találhatjuk meg. A szabályok kulcsszavakat tartalmaznak. Ezeket a kulcsszavakat soronként egy elõre rögzített sorrendben kell szerepeltetni. A kulcsszavakat a szövegben kiemeltük. Bizonyos kulcsszavakhoz további opciókhoz is tartozhatnak, amelyek gyakran maguk is kulcsszavak és szintén további opciókat tartalmazhatnak. A # egy megjegyzés kezdetét jelzi, mely egyaránt megjelenhet egy külön sorban, vagy egy szabályt tartalmazó sor végén. Az üres sorok nem vesznek részt a feldolgozásban. PARANCS SZABÁLY_SZÁM CSELEKVÉS NAPLÓZÁS SZÛRÉS ÁLLAPOTTARTÁS PARANCS Minden új szabály elõttt az add (mint hozzáadás) parancsnak kell szerepelni, amellyel a belsõ táblázatba tudjuk felvenni. SZABÁLY_SZÁM A szabályokhoz mindig tartozik egy sorszám is. CSELEKVÉS A szabályhoz az alábbi cselekvések valamelyike kapcsolható, amely akkor hajtódik végre, amikor a csomag megfelel a hozzá tartozó szûrési feltételeknek. allow | accept | pass | permit A fentiek közül mindegyik ugyanazt jelenti, vagyis hatásukra az illeszkedõ csomag kilép a tûzfalból. Ez a szabály megállítja a keresést. check-state A csomagot a dinamikus szabályokat tároló táblázattal veti össze. Ha itt egyezést talál, akkor végrehajtja az egyezõ dinamikus szabályhoz tartozó cselekvést, minden más esetben továbblép a következõ szabályra. Ennek a szabálynak nincs illeszthetõ paramétere. Ha a szabályrendszerben nem szerepel ilyen, akkor a dinamikus szabályok vizsgálatát az elsõ keep-state vagy limit használatánál vonja be a rendszer. deny | drop Mind a két szó ugyanarra utal, vagyis a szabályra illeszkedõ csomagokat el kell dobni. Ebben az esetben a keresés befejezõdik. NAPLÓZÁS log vagy logamount Amikor egy csomag egy log kulcsszót tartalmazó szabályra illeszkedik, akkor a rendszernaplóban egy üzenet keletkezik a security (biztonság) funkción keresztül. A naplóba ténylegesen csak akkor kerül bele az üzenet, ha az adott szabály még nem haladta meg a hozzá tartozó logamount paraméter értékét. Ha ezt nem adtuk meg, akkor az itt érvényes korlát a net.inet.ip.fw.verbose_limit sysctl változóból fog származni. A nulla érték mind a két esetben megszünteti ezt a korlátozást. Ha elértük a korlátot, akkor a naplózást úgy tudjuk újra engedélyezni, ha töröljük a naplózáshoz tartozó számláló értékét, lásd az ipfw reset log parancsot. A naplózás mindig az összes paraméter illeszkedésének ellenõrzése után történik, de még a cselekvés (accept, deny) elvégzése elõtt. Teljesen rajtunk múlik, hogyan milyen szabályokat naplózunk. SZÛRÉS Ebben a szakaszban azok a kulcsszavak találhatóak, amelyek segítségével a csomagok különbözõ tulajdonságait tudjuk megvizsgálni és eldönteni, hogy illeszkedik-e a szabályra vagy sem. A következõ általános tulajdonságokat tudjuk megvizsgálni, ebben a kötött sorrendben: udp | tcp | icmp Bármilyen más olyan protokoll is megadható, amely megtalálható az /etc/protocols állományban. Ezzel adjuk a csomaghoz tartozó protokollt. Használata kötelezõ. from forrás to cél Mind a from és to kulcsszavak IP-címek illesztésére alkalmasak. A szabályoknak tartalmazniuk kell a forrás ÉS a cél paramétereket is. Az any egy olyan kulcsszó, amely tetszõleges IP-címre illeszkedik. A me pedig egy olyan speciális kulcsszó, amely a tûzfalat mûködtetõ &os;-s gép (tehát ez a gép) adott interfészhez tartozó IP-címét jelöli, mint ahogy a from me to any, from any to me, from 0.0.0.0/0 to any, from any to 0.0.0.0/0, from 0.0.0.0 to any, from any to 0.0.0.0 vagy from me to 0.0.0.0 paraméterekben. Az IP-címek numerikus pontozott formában a hálózati maszk hosszával együtt (CIDR-jelöléssel), vagy egyszerûen csak pontozott formában adhatóak meg. A hálózati maszkok megállapításában a net-mgmt/ipcalc port lehet segítségünkre. Errõl bõvebb információkat a segédprogram honlapján, a címen találhatunk (angolul). port szám A portszámokat is ismerõ protokollok esetében (mint például a TCP vagy UDP) adhatjuk meg. Fontos, hogy itt annak a szolgáltatásnak a portszámát adjuk meg, amelyre a szabály vonatkozik. A szolgáltatás (az /etc/services állományból származó) nevét is megadhatjuk a port száma helyett. in | out A beérkezõ valamint a kimenõ csomagokat adhatjuk meg ezen a módon. Itt az in és out kulcsszavak, melyeket kötelezõ megadni a szabály részeként. via interfész Név szerint az adott interfészen keresztül haladó csomagokat tudjuk szûrni. A via kulcsszó hatására a használt interfész is számítani fog a csomag feldolgozása során. setup Ez a kulcsszó a TCP csomagok esetében a kapcsolatok felépítésére vonatkozó kéréseket segít beazonosítani. keep-state Ez egy kötelezõ kulcsszó. Feldolgozásakor a tûzfal létrehoz dinamikus szabályt, amely alapértelmezés szerint az egyazon protokollt használó forrás és cél IP/port párosok közti kétirányú forgalomra fog automatikusan illeszkedni. limit {forráscím | forrásport | célcím | célport} A tûzfal csak N darab, a szabálynak megfelelõ azonos paraméterû kapcsolatot fog átengedi. Itt egy vagy több forrás- és célcím valamint forrás- és célport adható meg. A limit és a keep-state egy szabályon belül nem használható. A limit ugyanazokat az állapottartó funkciókat képviseli, mint a keep-state, csak a saját kiegészítéseivel megtoldva. ÁLLAPOTTARTÁS IPFW állapottartó szûrés Az állapottartó szûrés a kétirányú csomagváltásokat egy létrejött kapcsolatba sorolja. Olyan vizsgálatokat végez, amivel képes megállapítani, hogy a csomag küldõje és címzettje között kialakult kommunikáció követ-e valamilyen kétirányú csomagküldésre érvényes folyamatot. Az így felállított sablontól eltérõ összes csomag hamisnak minõsül és automatikusan eldobásra kerül. A check-state segítségével ellenõrizhetjük, hogy az adott csomag a IPFW szerint megfelel-e valamelyik dinamikusan leképzett szabálynak. Ha egyezik valamelyikõjükkel, akkor a csomag a tûzfalból kilépve folytatja útját és a kommunikációban soron következõ csomag számára létrejön egy másik dinamikus szabály. Ha nincs egyezés, akkor csomag feldolgozása a szabályrendszer következõ szabályánál folytatódik. A dinamikus szabályokat kezelõ rutin sebezhetõ, mivel ha egyszerre nagy mennyiségû SYN csomagot küldünk, akkor olyan sok dinamikus bejegyzés keletkezik, hogy egyszerûen kifogyunk a rendelkezésre álló erõforrásokból. A &os; fejlesztõi azonban az ilyen természetû támadások kivédésére is felkészítették, és kialakították belõle a limit opciót. Alkalmazásával le tudjuk korlátozni az egyszerre folyó párhuzamos kapcsolatok számát a forrás vagy a cél a limit paraméternél megadott mezõinek és a csomag IP-címe alapján. Így az adott szabályhoz és IP-címhez csak elõre rögzített mennyiségû nyitott állapotú dinamikus szabály létezhet egy idõben. Ha ezt a korlátot átlépjük, a csomag eldobódik. A tûzfal üzeneteinek naplózása IPFW naplózás A naplózás elõnyei nyilvánvalóak. Ha engedélyezzük, aktiválása után képesek leszünk olyan információknak utánanézni, mint például milyen csomagokat dobtunk el, honnan érkeztek, hova tartottak. Ez egy komoly fegyverünk lehet a potenciális támadókkal szemben. Azonban hiába engedélyezzünk önmagában a naplózást, attól az IPFW még saját magától nem fog naplózást elõíró szabályokat gyártani. A tûzfal karbantartóinak maguknak kell eldöntenie, hogy a szabályrendszerben mely szabályokhoz tartozzon naplózás, nekik kell felvenni ezekhez a log kulcsszót. Általában csak az eldobással járó deny típusú szabályokat vagy a bejövõ ICMP pingeket szokták naplózni. Gyakran úgy oldják meg ezt, hogy a szabályrendszer utolsó szabályaként lemásolják az ipfw alapértelmezett mindent eldobunk szabályát és a naplózást adják meg benne. Ezen a módon fény derül azokra a csomagokra, amelyek a szabályrendszerben semmire sem illeszkedtek. A naplózás azonban egy kétélû fegyver, mivel ha nem vagyunk elég körültekintõek, akkor a sok naplóinformáció között könnyen el tudunk veszni és a lemezünk is gyorsan betelhet a mindent elfoglaló naplóktól. Mellesleg a naplók megdagasztását célzó DoS típusú támadás a rendszerek lebénítására alkalmazott egyik legõsibb technika. Ezek az üzenetek nem csak a rendszernaplóba kerülnek bele, hanem az elsõdleges konzol képernyõjére is kiíródnak, ami egy idõ után idegesítõ tud lenni. A rendszermag IPFIREWALL_VERBOSE_LIMIT=5 beállításával azonban képesek vagyunk korlátozni azokat a rendszernapló felé küldött egymás után következõ üzeneteket, amelyek ugyanarra a szabályra vonatkoznak. Amikor ezt a beállítást megadjuk a rendszermag fordításánál, akkor az egyes szabályokhoz az általa meghatározott értéken felül nem jön létre több hasonló üzenet. Hiszen semmi sem derül ki 200 teljesen azonos naplóüzenetbõl. Például, ha az egyes szabályokhoz legfeljebb öt egymást követõ üzenetet engedélyezünk, akkor a többi fennmaradó azonos üzenetet összeszámolja a rendszer és a következõ módon közvetíti a rendszernaplózó szolgáltatás felé: last message repeated 45 times Ami magyarul így hangzik: az utolsó üzenet 45 alkalommal ismétlõdött meg Az összes csomagokkal kapcsolatos naplózás alapértelmezés szerint a /var/log/security állományba kerül, amelyet az /etc/syslog.conf állomány definiál. Szabályokat tartalmazó szkript készítése A rutinosabb IPFW felhasználók a szabályokat egy állományban programozzák le olyan stílusban, hogy szkriptként is futtatható legyen. Ennek az egyik legnagyobb elõnye, hogy a tûzfal szabályai így egyszerre cserélhetõek a rendszer újraindítása nélkül. Ez a módszer nagyon kényelmes az új szabályok kipróbálásánál, mivel tetszõleges alkalommal végrehajthatjuk. Mivel ez egy szkript, ki tudjuk használni az itt megszokott szimbolikus helyettesítés által felkínált lehetõségeket, és ezzel a gyakran használt értékeket is egyszerre több szabályban tudjuk helyettesíteni. Erre a következõkben fogunk egy konkrét példát látni. A szkript felépítése kompatibilis a &man.sh.1;, &man.csh.1; és &man.tcsh.1; parancsértelmezõkkel. A szimbolikus mezõk helyettesítését a $ vagyis dollárjel vezeti be. Maguk a szimbolikus mezõk nem tartalmazzák a $ elõtagot. A szimbolikus mezõk értékeit "kettõs idézõjelek" között kell megadni. A szabályok összeírását kezdjük el így: ####### itt kezdõdik az ipfw szabályait tartalmazó szkript ###### # ipfw -q -f flush # töröljük az összes aktuális szabályt # Set defaults oif="tun0" # a kimenõ interfész odns="192.0.2.11" # az internet szolgáltató névszerverének IP-címe cmd="ipfw -q add " # a szabályok hozzáadásához szükséges elemek ks="keep-state" # csupán a lustaság miatt $cmd 00500 check-state $cmd 00502 deny all from any to any frag $cmd 00501 deny tcp from any to any established $cmd 00600 allow tcp from any to any 80 out via $oif setup $ks $cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks $cmd 00611 allow udp from any to $odns 53 out via $oif $ks #### itt fejezõdik be az ipfw szabályait tartalmazó szkript ###### Ezzel készen is vagyunk. Most ne törõdjünk a példában szereplõ szabályokkal, itt most a szimbolikus helyettesítés használatát igyekeztük bemutatni. Ha az iménti példát az /etc/ipfw.rules állományba mentettük el, akkor az alábbi parancs kiadásával tudjuk újratölteni a benne szereplõ szabályokat: &prompt.root; sh /etc/ipfw.rules Az /etc/ipfw.rules állományt egyébként tetszõleges néven hívhatjuk és bárhová rakhatjuk. Ugyanez természetesen elérhetõ a következõ parancsok egymás utáni begépelésével is: &prompt.root; ipfw -q -f flush &prompt.root; ipfw -q add check-state &prompt.root; ipfw -q add deny all from any to any frag &prompt.root; ipfw -q add deny tcp from any to any established &prompt.root; ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state &prompt.root; ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state &prompt.root; ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state Állapottartó szabályrendszerek A most következõ címfordítás nélküli szabályrendszer arra mutat példát, hogyan valósítsunk meg egy biztonságos inkluzív tûzfalat. Az inkluzív tûzfalak csak a szabályainak megfelelõ szolgáltatásokat engedik át, minden mást alapértelmezés szerint tiltanak. A komplett hálózati szegmensek védelmére összeállított tûzfalaknak legalább két interfészük van, amelyek mindegyikéhez tartoznia kell szabályoknak a megfelelõ mûködéshez. Az &unix; mintájú operációs rendszer, köztül a &os; is olyan, hogy a rendszerben belüli kommunikációt a lo0 nevû interfészen és a 127.0.0.1 IP-címen bonyolítja le. A tûzfalban mindenképpen szerepelniük kell olyan szabályoknak, amelyek gondoskodnak ezen speciális belsõ csomagok zavartalan közlekedésérõl. Az internet felé csatlakozó interfész lesz az, amelyen keresztül a kifelé menõ kéréseket hitelesítjük és vezéreljük az internet elérését, valamint ahol szûrjük az internet felõl érkezõ kéréseket. Ez lehet a PPP esetében a tun0 eszköz, vagy a DSL-, illetve kábelmodemhez csatlakozó hálózati kártya. Abban az esetben, amikor egy vagy több hálózati kártyával csatlakozunk a tûzfal mögött található belsõ helyi hálózatra, szintén gondoskodnunk kell a helyi hálózaton belül mozgó csomagok akadálymentes továbbításáról. A szabályokat elõször három nagyobb osztályba kell sorolnunk: az összes szabadon forgalmazó interfész, a publikus kimenõ és a publikus bejövõ interfész csoportjába. A publikus interfészekhez tartozó csoportokban úgy kell rendeznünk a szabályokat, hogy elõre kerüljenek a gyakrabban használtak és hátra a kevésbé használtak, valamint a csoportok utolsó szabálya blokkoljon és naplózzon minden csomagot az adott interfészen és irányban. A következõ szabályrendszerben szereplõ, a kimenõ kapcsolatokat tartalmazó csoport csak olyan allow típusú szabályokat tartalmaz, amelyek szûrési feltételei egyértelmûen azonosítják az interneten elérhetõ szolgáltatásokat. Az összes szabályban megjelennek a proto, port, in/out, via és keep state opciók. A proto tcp szabályokban emellett szerepel még egy setup opció is, amellyel a kapcsolatokat kezdeményezõ csomagokat tudjuk azonosítani és felvenni az állapottartásért felelõs dinamikus szabályok közé. A bejövõ forgalmat vezérlõ szabályrendszerben elõször az eldobni kívánt csomagokat kell megadni, aminek két eltérõ oka van. Elõször is elõfordulhat, hogy a veszélyes csomagok részleges illeszkedés miatt szabályosnak tûnnek. Az ilyen csomagokat értelemszerûen nem lenne szabad beengedni a szabályok részleges megfelelése alapján. A másodszor az eleve ismerten problémás és értelmetlen csomagokat csendben el kellene vetni, mielõtt a szakaszhoz tartozó utolsó szabály fogná meg és naplózná. Ez az utolsó szabály egyébként szükség esetén felhasználható a támadók elleni bizonyítékok begyûjtésére. A másik, amire még oda kell figyelnünk, hogy a blokkolt csomagok esetében semmilyen válasz nem keletkezzen, egyszerûen csak tûnjenek el. Így a támadó nem fogja tudni, hogy a csomagjai vajon elérték-e a rendszerünket. Minél kevesebb információt tudnak összegyûjteni a rendszerünkrõl a támadók, annál biztonságosabbnak tekinthetõ. Amikor ismeretlen portokra érkezõ csomagokat naplózunk, érdemes az /etc/services/ állományban vagy címen (angolul) utánanézni a porthoz tartozó szolgáltatásnak. A különbözõ trójai programok által portok számai ezen a linken érhetõek el (angolul): . Példa egy inkluzív szabályrendszerre A most következõ, címfordítást nem tartalmazó szabályrendszer teljesen inkluzív típusú. Éles rendszereken is nyugodtan alkalmazhatjuk. Egyszerûen csak annyit kell tennünk, hogy megjegyzésbe tesszük az olyan szolgáltatásokra vonatkozó szabályokat, amelyeket nem akarunk engedélyezni. Amikor pedig olyan üzenetek jelennek meg a naplóban, amelyeket nem akarunk tovább látni, a bejövõ kapcsolatokhoz vegyünk fel egy deny típusú szabályt hozzájuk. Minden szabályban cseréljük ki a dc0 interfészt arra a hálózati kártyára, amely közvetlenül csatlakoztatja rendszerünket az internethez. A felhasználói PPP esetében ez a tun0. A szabályok használatában felfedezhetünk egyfajta rendszerszerûséget: Mindegyik sorban, ahol az internet felé nyitunk meg egy kapcsolatot, a keep-state opciót használjuk. Az internetrõl az összes hitelesített szolgáltatás elérése tartalmazza a limit opciót az elárasztások kivédése miatt. Az összes szabályban az in vagy az out paraméterrel megadjuk szûrni kívánt forgalom irányát. Az összes szabályban szerepel a via paraméterrel a csomagokat továbbító interfész neve. Az alábbi szabályokat tegyük az /etc/ipfw.rules állományba. ############## Itt kezdõdnek az IPFW szabályai ########################## # Kezdés elõtt töröljük az összes aktív szabályt. ipfw -q -f flush # Állítsuk be a parancsok további szükséges opciót. cmd="ipfw -q add" pif="dc0" # az internethez csatlakozó # interfész neve ################################################################# # A belsõ hálózat számára ne korlátozzunk semmit se. # Ha nincs helyi hálózatunk, akkor erre nincs szükségünk. # Az 'xl0' nevét írjuk át a helyi hálózatra csatlakozó # interfész nevére. ################################################################ #$cmd 00005 allow all from any to any via xl0 ################################################################ # A rendszer belsõ interfészét se szûrjük. ################################################################ $cmd 00010 allow all from any to any via lo0 ################################################################ # A csomagot engedjük át a tûzfalon, ha korábban már felvettünk # hozzá egy dinamikus szabályt a keep-state opcióval. ################################################################ $cmd 00015 check-state ################################################################ # Az internet felé forgalmazó interfész (kimenõ kapcsolatok) # A saját hálózatunkról belülrõl vagy errõl az átjáróról # kezdeményezett kapcsolatokat vizsgáljuk az internet felé. ################################################################ # Kifelé engedélyezzük az internet-szolgáltatónk névszerverének # elérését. Az x.x.x.x a szolgáltatónk névszerverének IP-címe # legyen. Ha a szolgáltatónak több névszervere is van, akkor # másoljuk le ezeket a sorokat és az /etc/resolv.conf # állományban található IP-címeket helyettesítsük be. $cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state $cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state # Kábel/DSL konfigurációk esetében kifelé engedélyezzük a # szolgáltatónk DHCP szerverének elérését. Ha a "felhasználói # PPP"-t használjuk, akkor erre nem lesz szükségünk, az egész # csoportot törölhetjük. Az alábbi szabállyal csíphetjük el a # beírandó IP-címet. Ha a naplóban megtaláltuk, akkor vegyük # ki az elsõ szabályt, a másodikba írjuk bele a címet és # engedélyezzük. $cmd 00120 allow log udp from any to any 67 out via $pif keep-state #$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state # Kifelé engedélyezzük a szabvány nem biztonságos WWW # funkció elérését. $cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state # Kifelé engedélyezzük a biztonságos HTTPS funkció # elérését TLS SSL használatával. $cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state # Kifelé engedélyezzük a e-mailek küldését és fogadását. $cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state $cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state # Kifelé engedélyezzük a FreeBSD (a make install és a CVSUP) # funkcióit. Ezzel lényegében a rendszeradminisztrátornak # ,,ISTENI'' jogokat adunk. $cmd 00240 allow tcp from me to any out via $pif setup keep-state uid root # Kifelé engedélyezzük a pinget. $cmd 00250 allow icmp from any to any out via $pif keep-state # Kifelé engedélyezzük az idõ szolgáltatást. $cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state # Kifelé engedélyezzük az nntp news szolgáltatást # (vagyis a hírcsoportokat) $cmd 00270 allow tcp from any to any 119 out via $pif setup keep-state # Kifelé engedélyezzük a biztonságos FTP, telnet és SCP # elérését az SSH (secure shell) használatával. $cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state # Kifelé engedélyezzük a whois szolgáltatást. $cmd 00290 allow tcp from any to any 43 out via $pif setup keep-state # Dobjuk el és naplózzunk mindent, ami megpróbál kijutni. # Ez a szabály gondoskodik róla, hogy alapértelmezés szerint # mindent blokkoljunk. $cmd 00299 deny log all from any to any out via $pif ################################################################ # Az internet felõli interfész (bejövõ kapcsolatok) # A saját hálózatunk felé vagy erre az átjáróra # nyitott kapcsolatokat vizsgáljuk az internet felõl. ################################################################ # Blokkoljunk minden olyan bejövõ forgalmat, amely a fenntartott # címtartományok felé tart. $cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918: privát IP $cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918: privát IP $cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918: privát IP $cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #helyi $cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #helyi $cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP $cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #dokumentációs célokra fenntartott $cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun klaszterek összekötésére használt $cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #D és E osztályú multicast # A nyilvános pingek tiltása. $cmd 00310 deny icmp from any to any in via $pif # Az ident szolgáltatás tiltása. $cmd 00315 deny tcp from any to any 113 in via $pif # Blokkoljuk az összes Netbios szolgáltatást: 137=név, 138=datagram, # 139=session. A Netbios az MS Windows megosztását implementálja. # Blokkoljuk az MS Windows hosts2 névszerver kéréseit is a 81-es # porton. $cmd 00320 deny tcp from any to any 137 in via $pif $cmd 00321 deny tcp from any to any 138 in via $pif $cmd 00322 deny tcp from any to any 139 in via $pif $cmd 00323 deny tcp from any to any 81 in via $pif # Eldobjuk az összes késõn érkezõ csomagot. $cmd 00330 deny all from any to any frag in via $pif # Eldobjuk azokat az ACK csomagokat, amelyek egyik dinamikus # szabálynak sem felelnek meg. $cmd 00332 deny tcp from any to any established in via $pif # Befelé engedélyezzük a szolgáltató DHCP szerverének válaszát. Ebben # a szabályban csak a DHCP szerver IP-címe szerepelhet, mivel ez az # egyetlen olyan hitelesített forrás, ami ilyen csomagokat küldhet. # Ez csak a kábeles és DSL típusú kapcsolatok esetében szükséges. # Amikor a "felhasználói PPP"-vel csatlakozunk az internethez, nem # kell ez a szabály. Ugyanazt az IP-címet kell megadnunk, amelyet a # kimenõ kapcsolatoknál is. #$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state # Befelé engedélyezzük a szabvány WWW funkciót, mivel webszerverünk # is van. $cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2 # Befelé engedélyezzük a biztonságos FTP, telnet és SCP # típusú kapcsolatokat az internetrõl. $cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2 # Befelé engedélyezzük az internetrõl érkezõ nem biztonságos telnet # kapcsolatokat. Azért tekintjük nem biztonságosnak, mert az # azonosítók és a jelszavak az interneten titkosítatlanul vándorolnak. # Töröljük ezt a csoportot, ha nincs telnet szolgáltatásunk. $cmd 00420 allow tcp from any to me 23 in via $pif setup limit src-addr 2 # Dobjuk el és naplózzuk az összes többi kintrõl érkezõ csomagot. $cmd 00499 deny log all from any to any in via $pif # Alapértelmezés szerint dobjuk el mindent. Az ide érkezõ # csomagokat is naplózzuk, amibõl többet is ki tudunk majd # deríteni. $cmd 00999 deny log all from any to any ############# Itt fejezõdnek be az IPFW szabályai ##################### Példa hálózati címfordításra és állapottartásra címfordítás és az IPFW Az IPFW címfordító funkciójának kihasználásához további konfigurációs beállítások alkalmazására is szükségünk lesz. A rendszermagban opció között meg kell adnunk az option IPDIVERT sort a többi IPFIREWALL sor mellett, és fordítanunk egy saját verziót. Emellett még az /etc/rc.conf állományban is engedélyezni kell az IPFW alapvetõ funkcióit. natd_enable="YES" # engedélyezzük a címfordításért felelõs démont natd_interface="rl0" # az internet felé mutató hálózati kártya neve natd_flags="-dynamic -m" # -m = a portszámok megtartása, ha lehetséges Az állapottartó szabályok használata a divert natd címfordítási opcióval együtt nagyban növeli a szabályrendszer leprogramozásának bonyolultságát. A check-state és divert natd szabályok helye kritikus a megfelelõ mûködés tekintetében. Az eddig megszokott egyszerû viselkedés itt már nem érvényesül. Bevezetünk egy új cselekvést is, amelynek a neve skipto. A skipto parancs használatához elengedhetetlen a szabályok sorszámozása, mivel pontosan tudnunk kell, hogy a skipto hatására hova kell ugrania a vezérlésnek. A következõ példában nem fogunk sok megjegyzést látni, mivel benne az egyik lehetséges programozási stílust próbáljuk érzékeltetni és a csomagok szabályrendszerek közti áramlását magyarázzuk. A feldolgozás a szabályokat tartalmazó állomány tetején található elsõ szabállyal kezdõdik, és innen egyesével pereg végig lefelé a feldolgozás egészen addig, amíg a csomag a szûrési feltételek valamelyikének eleget nem tesz és távozik a tûzfalból. Leginkább a 100-as, 101-es, 450-es, 500-as és 510-es sorszámú szabályokat emelnénk ki. Ezek vezérlik kimenõ és bejövõ csomagok fordítását, ezért a hozzájuk tartozó dinamikus állapottartó bejegyzések mindig a helyi hálózat IP-címeire hivatkoznak. Amit még érdemes megfigyelnünk, hogy az összes áteresztõ és eldobó szabályban szerepel a csomag haladási iránya (tehát kimenõ vagy éppen bejövõ) és az érintett interfészt megnevezése. Emellett azt is vegyük észre, hogy az összes kifelé irányuló kapcsolatlétrehozási kérés az 500-as sorszámú szabályhoz fog ugrani a címfordítás elvégzéséhez. Tegyük fel, hogy a helyi hálózatunkon levõ felhasználók szeretnek honlapokat nézgetni az interneten. A honlapok a 80-as porton keresztül kommunikálnak. Tehát amikor egy ilyen csomag eléri a tûzfalat, nem fog illeszkedni a 100-as szabályra, mert a fejléce szerint kifelé halad és nem befelé. A 101-es szabályon is átlép, mivel ez az elsõ csomag, így a dinamikus állapottartó táblázatban sem szerepel még. A csomag végül a 125-ös szabályra fog illeszkedni: kifelé halad az internetre csatlakozó hálózati kártyán. A csomagban azonban még mindig az eredeti forrás IP-címe található, amely a helyi hálózat egyik gépére hivatkozik. A szabály illeszkedésekor két cselekvés is végbemegy. A keep-state opció hatására ez a szabály felveszi ezt a kapcsolatot az állapottartó dinamikus szabályok közé és végrehajtja a másik megadott feladatot. Ez a feladat része a dinamikus táblázatba rögzített bejegyzésnek, ami ebben az esetben a skipto 500 (ugorjunk az 500-as szabályra) lesz. Az 500-as szabály a továbbküldés elõtt lefordítja a csomag forrás IP-címét. Ezt ne felejtsük el, nagyon fontos! A csomag ezután eljut a céljához, és visszatérve ismét belép a szabályrendszer tetején. Ezúttal illeszkedni fog a 100-as szabályra és a cél IP-címét visszafordítjuk a helyi hálózatunk megfelelõ gépének címére. Ezután a check-state szabályhoz kerül, amely megtalálja a dinamikus szabályok között és továbbengedi a belsõ hálózatra. Ezzel visszakerül a küldõ géphez, amely egy újabb csomagot küld egy újabb adatszeletet kérve a távoli szervertõl. Ekkor már a check-state szabály megtalálja a hozzá tartozó bejegyzést a dinamikus szabályok között és végrehajtódik a korábban letárolt skipto 500 mûvelet. A csomag erre az 500-as szabályra ugrik, ahol lefordítjuk a címét és továbbküldjük. Az bejövõ oldalon minden, ami egy korábban kialakult kapcsolat részeként érkezik, automatikusan a check-state és a megfelelõ helyre rakott divert natd szabályok által dolgozódik fel. Itt mindössze a rossz csomagok eldobásával és a hitelesített szolgáltatások elérésének biztosításával kell foglalkoznunk. Például a tûzfalon egy webszerver fut, és azt szeretnénk, hogy az internetrõl képesek legyenek elérni a rajta levõ oldalakat. Az újonnan beérkezõ kapcsolatépítési kérelem a 100-as szabályra fog illeszkedni, amelynek a cél IP-címét a tûzfal helyi hálózaton található címére fogjuk leképezni. A csomagot ezután még megvizsgáljuk, nem tartalmaz-e valamilyen huncutságot, majd végül a 425-ös szabálynál fog kikötni. Az egyezéskor két dolog történhet: a csomaghoz felveszünk egy dinamikus szabályt, de ezúttal az adott forrás IP-címrõl érkezõ kapcsolatkérések számát 2-re lekorlátozzuk. Ezzel az adott szolgáltatás portján meg tudjuk óvni a tûzfalat üzemeltetõ gépet a DoS típusú támadásoktól. A csomagot ezután hozzá tartozó cselekvés szerint továbbengedjük a belsõ hálózat felé. Visszatéréskor a tûzfal felismeri, hogy a csomag egy már meglevõ kapcsolathoz tartozik, ezért közvetlenül az 500-as szabályhoz kerül címfordításra, majd a kimenõ interfészen keresztül továbbküldjük. Íme az elsõ példa egy ilyen szabályrendszerre: #!/bin/sh cmd="ipfw -q add" skip="skipto 500" pif=rl0 ks="keep-state" good_tcpo="22,25,37,43,53,80,443,110,119" ipfw -q -f flush $cmd 002 allow all from any to any via xl0 # nem szûrjük a belsõ hálózatot $cmd 003 allow all from any to any via lo0 # nem szûrjük a helyi interfészt $cmd 100 divert natd ip from any to any in via $pif $cmd 101 check-state # A kimenõ csomagok hitelesítése: $cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks $cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks $cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks $cmd 130 $skip icmp from any to any out via $pif $ks $cmd 135 $skip udp from any to any 123 out via $pif $ks # Az összes olyan csomagot eldobjuk, amely a fenntartott # címtartományokba tart: $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918: privát IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918: privát IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918: privát IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #helyi $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #helyi $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #dokumentációs célokra fenntartott $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun klaszter $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #D és E osztályú multicast # Az érkezõ csomagok hitelesítése: $cmd 400 allow udp from xx.70.207.54 to any 68 in $ks $cmd 420 allow tcp from any to me 80 in via $pif setup limit src-addr 1 $cmd 450 deny log ip from any to any # Ide ugrunk a kimenõ állapottartó szabályoknál: $cmd 500 divert natd ip from any to any out via $pif $cmd 510 allow ip from any to any ##################### a szabályok vége ################## A következõ példa teljesen megegyezik az elõzõvel, azonban itt már dokumentációs szándékkal szerepelnek megjegyzések is, melyek a tapasztalatlan IPFW szabályíróknak segítik jobban megérteni a szabályok pontos mûködését. A második példa: #!/bin/sh ############# Az IPFW szabályai itt kezdõdnek ########################### # Kezdés elõtt töröljük az összes jelenleg aktív szabályt: ipfw -q -f flush # Beállítjuk a parancsok megfelelõ elõtagjait: cmd="ipfw -q add" skip="skipto 800" pif="rl0" # az internethez csatlakozó # hálózati interfész neve ################################################################# # A belsõ hálózat számára ne korlátozzunk semmit se. # Ha nincs helyi hálózatunk, akkor erre nincs szükségünk. # Az 'xl0' nevét írjuk át a helyi hálózatra csatlakozó # interfész nevére. ################################################################# $cmd 005 allow all from any to any via xl0 ################################################################# # A rendszer belsõ interfészét se szûrjük. ################################################################# $cmd 010 allow all from any to any via lo0 ################################################################# # Ellenõrizzük, hogy ez egy beérkezõ csomag és ha igen, akkor # fordítsuk a címét. ################################################################# $cmd 014 divert natd ip from any to any in via $pif ################################################################# # Ha ehhez a csomaghoz korábban már vettük fel dinamikus # szabályt a keep-state opció révén, akkor engedjük tovább. ################################################################# $cmd 015 check-state ################################################################# # Az internet felé forgalmazó interfész (kimenõ kapcsolatok) # A saját hálózatunkról belülrõl vagy errõl az átjáróról # kezdeményezett kapcsolatokat vizsgáljuk az internet felé. ################################################################# # Kifelé engedélyezzük az internet-szolgáltatónk névszerverének # elérését. Az x.x.x.x a szolgáltató névszerverének IP-címe # lesz. Ha a szolgáltatónknak több névszervere is van, akkor # az /etc/resolv.conf állományból nézzük ki a címeiket és # másoljuk le az alábbi sor mindegyikükhöz. $cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep-state # A kábeles és DSL kapcsolatok esetén engedélyezzük a szolgáltató # DHCP szerverének elérését. $cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep-state # Kifelé engedélyezzük a szabvány nem biztonságos WWW funkciót $cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state # Kifelé engedélyezzük a biztonságos HTTPS funkciót a TLS SSL # használatával. $cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state # Kifelé engedélyezzük az e-mailek küldését és fogadását. $cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state $cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state # Kifelé engedélyezzük a FreeBSD (make install és CVSUP) funkcióit. # Ezzel a rendszeradminisztrátornak ,,ISTENI'' jogokat adunk. $cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root # Kifelé engedélyezzük a pinget. $cmd 080 $skip icmp from any to any out via $pif keep-state # Kifelé engedélyezzük az idõ szolgáltatást. $cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state # Kifelé engedélyezzük az nntp news szolgáltatást (tehát a # hírcsoportokat). $cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state # Kifelé engedélyezzük a biztonságos FTP, telnet és SCP # funkciókat az SSH (secure shell) használatával. $cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state # Kifelé engedélyezzük ki a whois kéréseket. $cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state # Kifelé engedélyezzük az NTP idõszerver elérését. $cmd 130 $skip udp from any to any 123 out via $pif keep-state ################################################################# # Az internet felõli interfész (bejövõ kapcsolatok) # A saját hálózatunk felé vagy erre az átjáróra # nyitott kapcsolatokat vizsgáljuk az internet felõl. ################################################################# # Tiltsuk a fenntartott címtartományok felé haladó összes beérkezõ # forgalmat. $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918: privát IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918: privát IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918: privát IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #helyi $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #helyi $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #dokumentációs célokra fenntartott $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun klaszter $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #D és E osztályú multicast # Az ident tiltása. $cmd 315 deny tcp from any to any 113 in via $pif # Blokkoljuk az összes Netbios szolgáltatást: 137=név, 138=datagram, # 139=session. A Netbios az MS Windows megosztását implementálja. # Blokkoljuk az MS Windows hosts2 névszerver kéréseit is a 81-es # porton. $cmd 320 deny tcp from any to any 137 in via $pif $cmd 321 deny tcp from any to any 138 in via $pif $cmd 322 deny tcp from any to any 139 in via $pif $cmd 323 deny tcp from any to any 81 in via $pif # Dobjuk el a késõn érkezõ csomagokat. $cmd 330 deny all from any to any frag in via $pif # Dobjuk el azokat az ACK csomagokat, amelyekre nincs # dinamikus szabály. $cmd 332 deny tcp from any to any established in via $pif # Engedélyezzük a szolgáltató DHCP szerverétõl érkezõ forgalmat. Ennek # a szabálynak tartalmaznia kell a DHCP szerver címét, mert csak tõle # fogadunk el ilyen típusú csomagokat. Egyedül csak kábeles vagy DSL # konfigurációk esetén használatos, a "felhasználói PPP" esetében # törölhetjük. Ez ugyanaz az IP-cím, amelyet a kimenõ kapcsolatoknál # megadtunk. $cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep-state # Befelé engedélyezzük a szabvány WWW funkciót, mivel van # webszerverünk. $cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2 # Befelé engedélyezzük a biztonságos FTP, telnet és SCP # használatát az internetrõl. $cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2 # Befelé engedélyezzük a nem biztonságos telnet elérését az # internetrõl. Azért nem tekintjük biztonságosnak, mert az # azonosítókat és a jelszavakat az interneten titkosítatlanul # közvetíti. Ha nincs telnet szolgáltatásunk, akkor törölhetjük is ezt # a csoportot. $cmd 390 allow tcp from any to me 23 in via $pif setup limit src-addr 2 # Dobjuk el és naplózzuk az összes internetrõl érkezõ hitelesítetlen kapcsolatot. $cmd 400 deny log all from any to any in via $pif # Dobjuk el és naplózzuk az összes internetre menõ hitelesítetlen kapcsolatot. $cmd 450 deny log all from any to any out via $pif # Ez lesz a kimenõ szabályokhoz tartozó "skipto" célja. $cmd 800 divert natd ip from any to any out via $pif $cmd 801 allow ip from any to any # Minden mást alapértelmezés szerint tiltunk és naplózunk. $cmd 999 deny log all from any to any ############# Az IPFW szabályai itt fejezõdnek be ##################### diff --git a/hu_HU.ISO8859-2/books/handbook/geom/chapter.sgml b/hu_HU.ISO8859-2/books/handbook/geom/chapter.sgml index f8615aa435..641e4b8cc6 100644 --- a/hu_HU.ISO8859-2/books/handbook/geom/chapter.sgml +++ b/hu_HU.ISO8859-2/books/handbook/geom/chapter.sgml @@ -1,1080 +1,1080 @@ Tom Rhodes Írta: GEOM: A moduláris lemezszervezõ rendszer Áttekintés GEOM A GEOM lemezrendszer GEOM Ez a fejezet a &os;-ben található GEOM rendszert mutatja be. Ez a rendszer tömöríti az általa is alkalmazott fontosabb RAID-vezérlõ segédprogramokat. A fejezet nem részletezi, hogy a GEOM konkrétan milyen módon kezeli és vezérli az I/O-t, ahogy azt sem, hogyan mûködik az alapjául szolgáló alrendszer vagy hogy néz ki annak forráskódja. Az ilyen jellegû információk a &man.geom.4; man oldalon, valamint az ott felsorolt helyeken találhatóak meg. Továbbá, ez a fejezet magukról a RAID-konfigurációkról sem ad pontos tájékoztatást. Kizárólag csak a GEOM által is támogatott RAID-besorolásokról esik szó. A fejezet elolvasása során megismerjük: a GEOM segítségével milyen fajtájú RAID támogatást érhetünk el; hogyan kell használni a rendszer által nyújtott alapvetõ segédeszközöket a különféle RAID-szintek konfigurálásához, karbantartásához és kezeléséhez; hogyan kell a GEOM-on keresztül tükrözni, csíkozni, titkosítani és távolról összekapcsolni lemezes eszközöket; hogyan kell a GEOM rendszerben összekapcsolt lemezeknél felmerülõ hibákat felderíteni. A fejezet elolvasásához ajánlott: megérteni, hogyan kezeli a &os; a lemezes eszközöket (); ismerni, hogyan konfiguráljunk és telepítsünk egy új &os; rendszermagot (). A GEOM bemutatása A GEOM rendszer adatszolgáltatókon vagy speciális /dev-állományokon keresztül hozzáférést és vezérlést tesz lehetõvé bizonyos osztályokhoz — Master Boot Recordokhoz, BSD-címkékhez stb. Számos szoftveres RAID konfiguráció támogatásával a GEOM transzparens elérést tesz lehetõvé mind az operációs rendszer, mind pedig az általa felkínált segédprogramok számára. Tom Rhodes Írta: Murray Stokely RAID0 - Csíkozás GEOM Lemezcsíkozás A csíkozás módszerét használjuk abban az esetben, amikor több lemezmeghajtót akarunk egyetlen kötetté összevonni. A GEOM lemezalrendszer szoftveres támogatást nyújt a RAID0, más néven a lemezcsíkozás megvalósításához. Egy RAID0 rendszerben az adatokat blokkokra bontva írjuk fel a tömbben található lemezek között szétosztva. Így ahelyett, hogy meg kellene várnunk 256 kb-nyi adat egyetlen lemezre írását, egy RAID0 rendszerben egyszerre íródik 64 kb-nyi adat négy különbözõ lemezre, és ezáltal gyorsabb elérést szolgáltat. Ez a gyorsaság további lemezvezérlõk használatával még jobban fokozható. Az egy RAID0-csíkozásban résztvevõ lemezek mindegyikének azonos méretûnek kell lennie, mivel az írásra és olvasásra irányuló I/O-kérések a párhuzamos kiszolgálás érdekében összefésülõdnek. Példa lemezcsíkozásra Csíkozás kialakítása formázatlan ATA-lemezekkel Töltsük be a geom_stripe.ko modult: &prompt.root; kldload geom_stripe Bizonyosodjuk meg róla, hogy a rendszerünkben található egy szabad csatlakozási pont. Ha majd ezt a kötetet szánjuk rendszerünk gyökérpartíciójának, használjunk erre a célra egy másik könyvtárat, például a /mnt-ot: &prompt.root; mkdir /mnt Keressük meg a csíkozásra felhasználni kívánt lemezek eszközneveit, és hozzunk létre belõlük egy új csíkozott eszközt. Például, ha két használatban nem levõ, particionálatlan ATA-lemezt, név szerint a /dev/ad2 és /dev/ad3 eszközöket akarjunk csíkozni: &prompt.root; gstripe label -v st0 /dev/ad2 /dev/ad3 Metadata value stored on /dev/ad2. Metadata value stored on /dev/ad3. Done. Az így létrejött új köteten most hozzunk létre egy általános címkét, vagy más néven egy partíciós táblát, és telepítsük fel rá a rendszer alapértelmezett rendszerindító programját: &prompt.root; bsdlabel -wB /dev/stripe/st0 Ezzel meg kellett jelennie további másik két eszköznek is a /dev/stripe könyvtárban, a st0 eszköz mellett. Ezek többek közt az st0a és az st0c. Itt már ki is tudunk alakítani egy állományrendszert az st0a eszközön a newfs használatával: &prompt.root; newfs -U /dev/stripe/st0a Sok-sok számot fogunk látni cikázni a képernyõn, majd néhány másodperc múlva befejezõdik a folyamat. Létrehoztuk a kötetet, ami most már készen áll a becsatolásra. A kialakított lemezcsíkozást így tudjuk kézzel csatlakoztatni: &prompt.root; mount /dev/stripe/st0a /mnt A csíkozott állományrendszert a rendszerindítás folyamán automatikusan becsatlakoztathatjuk, ha elhelyezzük az alábbi kötetinformációkat az /etc/fstab állományba. Erre a célra stripe néven létrehozunk egy állandó csatlakozási pontot: &prompt.root; mkdir /stripe &prompt.root; echo "/dev/stripe/st0a /stripe ufs rw 2 2" \ >> /etc/fstab A geom_stripe.ko modult is automatikusan be kell tölteni a rendszerindítás során. Ehhez a következõ sort kell hozzáadni a /boot/loader.conf állományhoz: &prompt.root; echo 'geom_stripe_load="YES"' >> /boot/loader.conf RAID1 - Tükrözés GEOM lemeztükrözés A tükrözés számos vállalatnál és háztartásban alkalmazott technológia, amely az adatok megszakítás nélküli lementésére használatos. Amikor tükrözést használunk, az egyszerûen csak arra utal, hogy a B lemez ugyanazokat az adatokat tartalmazza, mint az A lemez. Vagy amikor a C és D lemez tartalma egyezik meg az A és B lemezekével. Függetlenül a lemezek kiosztásától, itt az a lényeg, hogy az egyik lemez teljes területe vagy az egyik partíciója le van másolva. Késõbb az ezen a módon lementett adatok könnyen visszaállíthatóak anélkül, hogy ez a szolgáltatásban vagy az elérhetõségben bármilyen kimaradást okozna, és akár még fizikailag is biztonságosan tárolhatóak. Elõször is szereznünk kell két egyforma méretû lemezt, valamint a példák feltételezik, hogy ezek a lemezek közvetlen elérésû (&man.da.4;) SCSI-lemezek. Az elsõdleges lemezek tükrözése Tegyük fel, hogy a &os; az elsõ, da0 nevû lemezmeghajtón található, és a &man.gmirror.8; számára ezt szeretnénk megadni az elsõdleges adatok tárolásához. A tükrözés létrehozásának megkezdése elõtt a kern.geom.debugflags &man.sysctl.8; változó megfelelõ beállításával engedélyezzünk további nyomkövetési információkat és hozzáférést az eszközhöz: &prompt.root; sysctl kern.geom.debugflags=17 Most építsük fel a tükrözést. Kezdjük az egészet a metaadatok elhelyezésével az elsõdleges lemezmeghajtón, tehát tulajdonképpen az alábbi parancs segítségével hozzuk létre a /dev/mirror/gm eszközt: A rendszerindító meghajtóról készített tükrözés adatvesztést okozhat a lemez utolsó szektorában. Ennek kockázata csökkenthetõ, ha közvetlenül a &os; friss telepítése után állítjuk be a tükrözést. &prompt.root; gmirror label -vb round-robin gm0 /dev/da0 Erre a rendszernek a következõ módon kell reagálnia: Metadata value stored on /dev/da0. Done. A GEOM inicializálásához szükségünk lesz a /boot/kernel/geom_mirror.ko modul betöltésére: &prompt.root; gmirror load A parancs sikeres lefutása után a /dev/mirror könyvtárban létrehoz egy gm0 eszközleírót. A geom_mirror.ko modul betöltését így tudjuk engedélyezni a rendszer indításakor: &prompt.root; echo 'geom_mirror_load="YES"' >> /boot/loader.conf Nyissuk meg az /etc/fstab állományt, és cseréljük le benne az összes korábbi da0 hivatkozást az újonnan kialakított gm0 tükrözés eszközleírójával. Ha &man.vi.1; szövegszerkesztõt használjuk, akkor a következõ módon tudjuk ezt egyszerûen megtenni: &prompt.root; vi /etc/fstab A &man.vi.1; indítása után a :w /etc/fstab.bak kiadásával készítsünk az fstab állomány jelenlegi tartalmáról másolatot. Ezután a :%s/da/mirror\/gm/g parancs használatával cseréljük ki az összes da0 hivatkozást a gm0 eszköz nevére. Az így keletkezõ fstab állomány nagyjából következõ módon fog kinézni. Most teljesen független, hogy SCSI vagy ATA meghajtókkal dolgozunk, a RAID eszköz neve mindig gm lesz: # Eszköz Csatlakozási pont Típus Beállítások Dump Menet /dev/mirror/gm0s1b none swap sw 0 0 /dev/mirror/gm0s1a / ufs rw 1 1 /dev/mirror/gm0s1d /usr ufs rw 0 0 /dev/mirror/gm0s1f /home ufs rw 2 2 #/dev/mirror/gm0s2d /store ufs rw 2 2 /dev/mirror/gm0s1e /var ufs rw 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0 Indítsuk újra a rendszert: &prompt.root; shutdown -r now Ennek megfelelõen a rendszer indítása közben a da0 eszköz helyett a gm0 eszközt fogjuk használni. Miután sikeresen befejezõdött a rendszerindítás, a mount parancs kiadásával a saját szemünkkel is meggyõzõdhetünk az eredményrõl: &prompt.root; mount Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/mirror/gm0s1a 1012974 224604 707334 24% / devfs 1 1 0 100% /dev /dev/mirror/gm0s1f 45970182 28596 42263972 0% /home /dev/mirror/gm0s1d 6090094 1348356 4254532 24% /usr /dev/mirror/gm0s1e 3045006 2241420 559986 80% /var devfs 1 1 0 100% /var/named/dev A parancs kimenete az elvárásainknak megfelelõen remekül néz ki. Zárásképpen a szinkronizálás megkezdéséhez a következõ paranccsal illesszük be a da1 eszközt a tükrözésbe: &prompt.root; gmirror insert gm0 /dev/da1 A tükrözés állapota a létrejöttét követõen az alábbi paranccsal ellenõrizhetõ: &prompt.root; gmirror status Az iménti parancs eredményének nagyjából a következõnek kell lennie miután a felépítettük a tükrözést és szinkronizáltuk az adatokat: Name Status Components mirror/gm0 COMPLETE da0 da1 Hiba esetén a tükrözés továbbra is folytatódik, azonban ilyenkor a példában szereplõ COMPLETE helyett a DEGRADED jelzést fogjuk látni. Hibakeresés A rendszer nem hajlandó elindulni Ha a rendszerünk ehhez hasonló módon indul: ffs_mountroot: can't find rootvp Root mount failed: 6 mountroot> Indítsuk újra a gépünket a kikapcsoló gomb vagy a reset segítségével. A rendszerindító menüben válasszuk a hatodik opciót (6). Ennek eredményeképpen megkapjuk a &man.loader.8; parancssorát. Töltsük be a modult manuálisan: OK? load geom_mirror OK? boot Ha ez beválik, akkor valamiért a modult nem sikerült rendesen betölteni. Ellenõrizzük, hogy a /boot/loader.conf állományban a neki szereplõ megfelelõ bejegyzés helyesen szerepel. Amennyiben a probléma továbbra is fennáll, helyezzük el a következõ sort a rendszermag konfigurációs állományába, majd fordítsuk újra és telepítsük: options GEOM_MIRROR Ezzel várhatóan orvosoltuk a problémát. A meghibásodott lemezek cseréje A lemezek tükrözésének egyik legcsodálatosabb elõnye, hogy a menet közben meghibásodott meghajtókat gond, és így feltehetõen adatvesztés nélkül ki tudjuk cserélni. Vegyük az iménti RAID-1 konfigurációt, és tételezzük fel, hogy a da1 eszköz felmondta a szolgáltatot és cserére szorul. A meghajtó leváltásához keressük meg a hibás eszközt, majd állítsuk le a rendszert. Tegyük be a helyére az újat és indítsuk újra a rendszerünket. Miután elindult az operációs rendszer, a következõ parancsok kiadásával tudjuk logikailag is lecserélni a meghibásodott lemezt: &prompt.root; gmirror forget gm0 &prompt.root; gmirror insert gm0 /dev/da1 Innen a gmirror parancsával kísérhetjük figyelemmel a tükrözés újraszervezésének menetét. Csupán ennyi az egész. Eszközök hálózati illesztése a GEOM-ban A GEOM távoli eszközök, például lemezek, CD-meghajtók stb. használatát is támogatja a hálózati illesztést szolgáló segédprogramjaival, hasonlóan az NFS-hez. Kezdésként létre kell hozni a megosztást elõsegítõ állományt. Ez az állomány határozza meg, ki és milyen szinten jogosult használni a megosztott erõforrásokat. Például ha megosztjuk az elsõ SCSI-lemezen a negyedik slice-ot, az alábbi /etc/gg.exports állomány tökéletesen megfelel: 192.168.1.0/24 RW /dev/da0s4d Ezzel a belsõ hálózaton levõ összes számítógép képes lesz elérni a da0s4d partíción található állományrendszert. Az eszköz megosztásához elõször gondoskodnunk kell róla, hogy ne legyen csatlakoztatva, majd ezután indítsuk el a &man.ggated.8; szerver démonját: &prompt.root; ggated Ezt követõen a mount felhasználásával csatoljuk az eszközt a kliensen, az alábbi parancs kiadásával: &prompt.root; ggatec create -o rw 192.168.1.1 /dev/da0s4d ggate0 &prompt.root; mount /dev/ggate0 /mnt Innentõl kezdve az eszköz elérhetõ lesz a /mnt csatlakozási ponton keresztül. Fontos kiemelnünk, hogy ez a mûvelet eredménytelen, ha az adott eszközt vagy maga a szerver, vagy pedig valamelyik másik kliens már korábban csatolta. Amikor az eszközre már nincs tovább szükségünk, biztonságosan le tudjuk választani az &man.umount.8; paranccsal, hasonlóan bármelyik más lemezes eszközhöz. A lemezes eszközök címkézése GEOM Lemezcímkék A rendszer indítása közben a &os; rendszermagja a talált eszközöknek megfelelõen mindegyiknek létrehoz egy-egy eszközleírót. Ezzel a próbálgatásos módszerrel együtt jár néhány gond, például mi történik akkor, ha az új lemezes eszközt USB-n keresztül adjuk a rendszerhez? Nagyon valószínû, hogy ez az eszköz megkapja a da0 nevet és ezzel az eredeti da0 eszköz eltolódik a da1 névhez. Ennek köszönhetõen az /etc/fstab állományban felsorolt állományrendszerek csatolása veszélybe kerül, aminek következtében akár meghiúsulhat a rendszerindulás is. Az egyik lehetséges megoldása a problémának, ha sorbafûzzük a SCSI eszközeinket, és így a SCSI-kártyához kapcsolt újabb eszköz egy addig nem használt számot fog birtokba venni. Mi helyzet azonban az USB-s eszközökkel, amelyek kiüthetik az elsõdleges SCSI-lemezeinket? Ez egyébként azért történhet meg, mert az USB-s eszközöket általában hamarabb keresi a rendszer, mint a SCSI kártyán levõ eszközöket. Megoldhatjuk úgy ezt a gondot, hogy csak azután csatlakoztatjuk az említett eszközöket, miután a rendszer elindult. Megoldhatjuk viszont úgy is, hogy csak egyetlen ATA-meghajtót használunk és soha nem soroljuk fel a SCSI eszközöket az /etc/fstab állományban. Ezeknél kínálkozik azonban egy jobb megoldás! A glabel nevû segédprogrammal a rendszergazda vagy a felhasználó úgy tudja címkézni a lemezmeghajtókat, hogy azok a /etc/fstab állományban szereplõ címkéket használják. Mivel a glabel a címkét az adott szolgáltató utolsó szektorában tárolja el, ez a címke megmarad az újraindítás után is. Ha ezt a címkét eszközként használjuk, az állományrendszerek mindig ugyanarról a meghajtóról fognak csatolódni, függetlenül attól, hogy milyen eszközleírón keresztül érjük el ezeket. Egyáltalán nem állítottuk, hogy egy címke csak állandó lehet. A glabel segítségével egyaránt létre lehet hozni állandó és átmeneti címkéket, de csak az állandó címke képes az újraindítás után is megmaradni. A két címketípus közti különbségeket a &man.glabel.8; man oldal tárgyalja részletesebben. Címketípusok és példák A címkéknek két típusa létezik, az általános címke és az állományrendszer-címke. A címkék lehetnek állandóak vagy ideiglenesek. Az állandó címkék a &man.tunefs.8; vagy &man.newfs.8; parancsokkal hozhatóak létre. Ezek a címkék az adott állományrendszer típusa alapján elnevezett alkönyvtárakban jönnek létre a /dev könyvtáron belül. Például az UFS2 állományrendszer-címkék a /dev/ufs könyvtárban keletkeznek. Állandó címkék a glabel label paranccsal hozhatóak létre. Az ilyen címkék nem függenek az állományrendszerek típusától, a /dev/label könyvtárban jönnek létre. Az ideiglenes címkék a következõ induláskor elvesznek. Ezek a címkék a /dev/label könyvtárban keletkeznek, és ideálisak a kísérletezgetésre. Ideiglenes címkéket a glabel create paranccsal hozhatunk létre. Ezzel kapcsolatosan részletesebb felvilágosítást a &man.glabel.8; man oldalon találhatunk. Ha egy UFS2 állományrendszerre szeretnénk tenni egy állandó címkét az adataink megsemmisítése nélkül, adjuk ki a következõ parancsot: &prompt.root; tunefs -L home /dev/da3 Ha az érintett állományrendszeren nincs üres hely, ennek a parancsnak a használata adatvesztéshez vezethet. Ilyen esetben inkább a felesleges állományok eltávolításával kellene törõdnünk, nem pedig címkék hozzáadásával. Ezután egy címkének kell megjelennie a /dev/ufs könyvtárban, amelyet vegyünk is fel az /etc/fstab állományba: /dev/ufs/home /home ufs rw 2 2 Az állományrendszert tilos csatolni a tunefs futtatása alatt! Most már a megszokott módon csatolhatjuk az állományrendszert: &prompt.root; mount /home Ettõl a ponttól kezdve, amíg a geom_label.ko modul betöltõdik a rendszerindítás során a /boot/loader.conf állományon keresztül, vagy a GEOM_LABEL opció megtalálható a rendszermag konfigurációs állományában, az eszközleíró a rendszerre nézve minden komolyabb következmény nélkül megváltozhat. Állományrendszereket létrehozhatunk alapértelmezett címkével is a newfs paraméterével. Errõl részletesebben a &man.newfs.8; man oldalon olvashatunk. Az alábbi paranccsal tudjuk törölni a címkét: &prompt.root; glabel destroy home A következõ példában azt láthatjuk, hogyan címkézzük fel a rendszerindító lemezünk partícióit. Partíciók címkézése a rendszerindító lemezen A rendszerindításra használt lemezen levõ partíciók felcímkézésével a rendszer képes lesz akkor is minden probléma nélkül elindulni, amikor áthelyezzük egy másik vezérlõre vagy átrakjuk egy másik számítógépbe. Például most tegyük fel, hogy van egy ATA csatolós lemezünk, amelyet a rendszer ad0 néven ismert fel. Továbbá azt is feltételezzük, hogy a &os; telepítése esetén megszokott partícionálási sémát választottuk, ahol /, /var, /usr és /tmp állományrendszereink, valamint egy lapozóterületünk van. Indítsuk újra a rendszerünket és a &man.loader.8; menüjében a 4 billentyû lenyomásával válasszuk az egyfelhasználós módot. Ezt követõen adjuk ki a következõ parancsokat: &prompt.root; glabel label rootfs /dev/ad0s1a GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs &prompt.root; glabel label var /dev/ad0s1d GEOM_LABEL: Label for provider /dev/ad0s1d is label/var &prompt.root; glabel label usr /dev/ad0s1f GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr &prompt.root; glabel label tmp /dev/ad0s1e GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp &prompt.root; glabel label swap /dev/ad0s1b GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap &prompt.root; exit A rendszer indítása ezután többfelhasználós módban folytatódik. A rendszerindítás befejezõdése után nyissuk meg az /etc/fstab állományt és írjuk át a hagyományos eszközneveket a hozzájuk tartozó címkékre. Az /etc/fstab végleges változata ennek megfelelõen körülbelül így fog kinézni: # Eszköz Csatlakozási pont Típus Beállítások Dump Menet /dev/label/swap none swap sw 0 0 /dev/label/rootfs / ufs rw 1 1 /dev/label/tmp /tmp ufs rw 2 2 /dev/label/usr /usr ufs rw 2 2 /dev/label/var /var ufs rw 2 2 A rendszer most már újraindítható. Ha mindent jól csináltunk, akkor a rendszer indítása problémáktól mentesen fog zajlani és a mount parancs eredménye a következõ lesz: &prompt.root; mount /dev/label/rootfs on / (ufs, local) devfs on /dev (devfs, local) /dev/label/tmp on /tmp (ufs, local, soft-updates) /dev/label/usr on /usr (ufs, local, soft-updates) /dev/label/var on /var (ufs, local, soft-updates) A &os; 7.2 kiadásától kezdõdõen a &man.glabel.8; osztály az UFS esetén támogatja az ufsid, az állományrendszer egyedi rendszerszintû azonosítójából származtatott új címketípus használatát. Ezek a címkék a rendszer indítása során a /dev/ufsid könyvtárban jönnek automatikusan létre. Az ufsid címkéken keresztül tudunk az /etc/fstab állományban állományrendszereket csatlakoztatni. A jelenleg aktív állományrendszereket és azok ufsid azonosítóit a glabel status paranccsal tudjuk lekérdezni: &prompt.user; glabel status Name Status Components ufsid/486b6fc38d330916 N/A ad4s1d ufsid/486b6fc16926168e N/A ad4s1f Ebben a példában az ad4s1d képviseli a /var állományrendszert, míg a ad4s1f a /usr állományrendszert. Az adott ufsid értékek megadásával az /etc/fstab állományban a következõképpen tudjuk csatlakoztatni ezeket az állományrendszereket: /dev/ufsid/486b6fc38d330916 /var ufs rw 2 2 /dev/ufsid/486b6fc16926168e /usr ufs rw 2 2 Minden ufsid címkével rendelkezõ partíció csatlakoztatható ezen a módon. Ekkor nem kell manuálisan létrehoznunk a számunkra állandó címkéket, így automatikusan élvethezhetjük az eszköznévtõl független csatlakoztatás elõnyeit. Naplózó UFS GEOM-on keresztül GEOM naplózás A &os; 7.0-ás verziójának megjelenésével egy rég várt kiegészítés, a naplózó UFS végre elérhetõvé válik. Maga az implementáció a GEOM alrendszeren keresztül érhetõ el, és a &man.gjournal.8; segédprogram segítségével könnyedén beállítható. Mit is jelent a naplózás? A naplózás támogatásával a rendszer egy naplót vezet az állományrendszert érintõ tranzakciókról — például az olyan változtatásokról, amelyek egy komplett írási mûveletet eredményeznek — mielõtt még a metaadatok és lemezírási mûveletek szabályosan befejezõdnének. Ez a könyvelés késõbb visszajátszható az állományrendszerben lezajlott tranzakciók reprodukálásához, és ezzel megelõzhetõek az állományrendszerben keletkezõ esetleges ellentmondások. Ez egy újabb módszer az adatvesztés és az állományrendszerben elõforduló ellentmondások elkerülésére. Eltérõen a Soft Updates módszertõl, ahol a metaadatok frissítését biztosítják és követik nyomon, vagy a Snapshots módszertõl, ahol pillanatképeket tárolunk az állományrendszerrõl, itt egy konkrét naplót tárolunk a lemez erre a célra fenntartott részén, amely bizonyos esetekben akár egy teljes külön merevlemez is lehet. Ellentétben a többi naplózó állományrendszertõl, a gjournal módszere blokk alapú és nem az állományrendszer részeként került implementálásra — csupán a GEOM egyik bõvítménye. A gjournal támogatásához a &os; rendszermag konfigurációs állományában be kell állítani a következõ opciót — amely a 7.X rendszereken alapbeállítás: options UFS_GJOURNAL Amennyiben naplózással rendelkezõ köteteket szeretnénk a rendszerindítás során csatlakoztatni, a /boot/loader.conf állományban következõ sor hozzáadásával töltessük be a geom_journal.ko modult: geom_journal_load="YES" Szükség esetén ezt a funkciót akár a rendszermagba is beépíthetjük, ha felvesszük a következõ sort a rendszermag konfigurációs állományába: options GEOM_JOURNAL Ha ezt aktiváltuk, egy szabad állományrendszeren az alábbi lépéseken keresztül tudunk létrehozni egy naplót, feltéve, hogy a da4 egy új SCSI-meghajtó: - &prompt.root; gjournal label /dev/da4 -&prompt.root; gjournal load + &prompt.root; gjournal load +&prompt.root; gjournal label /dev/ad4 Ennél a pontnál lennie kell egy /dev/da4 és egy /dev/da4.journal eszközleírónak. Hozzunk létre egy állományrendszert ezen az eszközön: &prompt.root; newfs -O 2 -J /dev/da4.journal Ez a parancs létrehoz egy naplózó UFS2 állományrendszert. Csatoljuk is be a mount segítségével az eszközt kívánt csatlakozási pontra: &prompt.root; mount /dev/da4.journal /mnt Ha több slice-unk is van, akkor a napló mindegyik slice-hoz külön létrejön. Például, ha az ad4s1 és ad4s2 egyaránt slice-ok, akkor a gjournal legyártja az ad4s1.journal és ad4s2.journal eszközleírókat. Abban az esetben, ha kétszer futattjuk le a parancsot, az eredmény journals lesz. Bizonyos körülmények között kívánatos lehet a naplót egy másik lemezen tartani. Ilyen esetekben a naplózás bekapcsolásához a naplót biztosító szolgáltatót vagy tárolóeszközt a naplózni kívánt eszköz után kell szerepeltetni. A naplózás akár az aktuálisan használt állományrendszeren is aktiválható a tunefs használatával. Az állományrendszer módosításakor viszont mindig érdemes biztonsági másolatot készíteni! Az esetek többségében a gjournal hibát fog jelezni, mivel nem tudja létrehozni a naplót, azonban ez nem védi meg az adatainkat a tunefs helytelen használata által okozott sérülésektõl. A rendszerindító lemezen is lehet naplózást használni. Ennek részleit a Naplózó UFS használata asztali számítógépeken címû cikkbõl ismerhetjük meg. diff --git a/hu_HU.ISO8859-2/share/sgml/freebsd.ent b/hu_HU.ISO8859-2/share/sgml/freebsd.ent index ac919a8d33..e434abdcf5 100644 --- a/hu_HU.ISO8859-2/share/sgml/freebsd.ent +++ b/hu_HU.ISO8859-2/share/sgml/freebsd.ent @@ -1,94 +1,94 @@ UNIX"> NIS"> TeX'> LaTeX'> - + [ OK ]"> [ Cancel ]"> [ Yes ]"> [ No ]">