26.6. A soros vonali konzol beállítása

Készítette: Kazutaka YOKOTA. Az alapján szolgáló írást készítette: Bill Paul.

26.6.1. Bevezetés

A FreeBSD képes úgy is elindulni, ha konzolként mindössze egy buta terminált kapcsolunk rá soros porton keresztül. Az ilyen típusú konfigurációs alapvetően két típus számára bizonyul hasznosnak: azon rendszergazdák számára, akik billentyűzettel és monitorral nem rendelkező gépekre akarnak FreeBSD-t telepíteni, és olyan fejlesztők számára, akik a rendszermag vagy különböző eszközmeghajtók működését akarják nyomon követni.

Ahogy arról már a 12 fejezetben is szó esett, a FreeBSD három indítási fokozattal rendelkezik. Az első két fokozat a rendszerindító blokk kódjában foglal helyet, amely pedig a lemezen található FreeBSD slice elején. A rendszer indulásakor ez a blokk betöltődik és lefuttatja a harmadik fokozatot képviselő rendszertöltőt (a /boot/loader állományt).

Ha soros vonali konzol beállításához tehát be kell állítanunk a rendszerindító blokkot, a rendszertöltőt és a rendszermagot.

26.6.2. A soros konzol beállítása, rövidített változat

Ebben a szakaszban azt feltételezzük, hogy az alap beállításokkal dolgozunk és csupán egy gyors áttekintésre van szükségünk a soros vonali konzolról.

  1. Csatlakoztassunk egy soros kábelt a COM1 portra és a terminálra.

  2. Rendszeradminisztrátorként a következő parancs kell kiadnunk ahhoz, hogy a soros konzolon láthassuk az összes rendszerindításhoz tartozó üzenetet:

    # echo 'console="comconsole"' >> /boot/loader.conf
  3. Nyissuk meg az /etc/ttys állományt, és a ttyd0 eszközhöz tartozó sorban írjuk át az off paramétert az on értékre és a dialup paramétert a vt100 értékre. Ha nem ezeket állítjuk be, akkor a soros konzol keresztül jelszó megadása nélkül is be tudunk jelentkezni, ami viszont egy biztonsági rés veszélyével fenyeget.

  4. A változtatások érvényesítéséhez indítsuk újra a rendszerünket.

Ha ettől eltérő beállításokra lenne szükségünk, akkor a folyamat egyes lépéseibe a 26.6.3 Szakaszban kaphatunk mélyebb betekintést.

26.6.3. A soros vonali konzol beállítása

  1. Készítsük elő a soros kábelt.

    Vagy a null-modem kábelre vagy pedig egy szabványos soros kábelre és egy null-modem átalakítóra lesz szükségünk. A soros kábelekkel kapcsolatosan a 26.2.2 Szakaszt érdemes elolvasni.

  2. Húzzuk ki a billentyűzetet.

    A legtöbb személyi számítógép az indítása (vagyis a Power-On Self-Test, POST) során hibát jelez, ha nem érzékel billentyűzetet. Egyes gépek hangosan panaszolják a billentyűzet hiányát, és nem is hajlandóak egészen addig elindulni, amíg nem csatlakoztatunk egyet.

    Ha a számítógépünk hibát küld, de ennek ellenére mégis elindul, akkor semmit nem kell csinálnunk. (Némelyik Phonix BIOS-os gépen ilyenkor megjelenik a “Keyboard failed” hibaüzenet, de ettől még rendesen elindul a gép.)

    Amennyiben a számítógépünk nem hajlandó billentyűzet nélkül elindulni, állítsuk be a BIOS-ban a “hiba” figyelmen kívül hagyását (már ha ez lehetséges). Az alaplap leírásában találhatjuk meg ennek pontos részleit.

    Tipp: A BIOS paraméterei között a billentyűzetet állítsuk “Not installed” állapotúra. Ilyenkor még továbbra is használható a billentyűzet, ezzel mindössze csak a BIOS számára tiltjuk le az indításkori ellenőrzést, ezért nem fog panaszkodni a hiánya miatt. Tehát a billentyűzetet még a “Not installed” beállítása esetén is nyugodtan csatlakoztatjuk, mert működni fog.

    Megjegyzés: Ha a rendszerünkön PS/2®-es egér is található, akkor jó eséllyel a billentyűzettel együtt az egeret is ki tudjuk húzni. Mivel a PS/2-es egér osztozik a billentyűzettel bizonyos hardvereken, ezért ha nem húzzuk ki az egeret is, akkor az alaplap még továbbra is képes azt gondolni, hogy a billentyűzet ott van. Például az AMI BIOS-os Gateway 2000-as 90 MHz-es Pentium rendszer pontosan így működik. Általában véve azonban ez nem szokott gondot okozni, mivel az egér billentyűzet nélkül úgy sem ér túlságosan sokat.

  3. Csatlakoztassunk egy buta terminált a COM1 (sio0) portra.

    Ha nem rendelkezünk buta terminállal, akkor erre célra ugyanúgy alkalmas egy régi XT-s PC valamilyen modemprogrammal vagy egy soros porton csatlakozó másik UNIX®-os gép. Ha nincs COM1 (sio0) portunk, akkor szerezzünk egyet. Jelen pillanatban a rendszerindító blokk újrafordítása nélkül a COM1 porton kívül nem tudunk másikat választani. Ha a COM1 portra már raktunk valamilyen másik eszközt, akkor azt ideiglenesen húzzuk le, majd a FreeBSD telepítése és elindítása után tegyünk fel egy másik rendszerindító blokkot. (Egyébként feltételezzük, hogy a COM1 elérhető egy állomány/számító/terminálszerveren — ha valóban valamilyen másik célra szükségünk lenne a COM1 portra (és semmiképpen sem tudjuk átrakni a COM2 (sio1) portra), akkor valószínűleg nem is ezzel kellene elsőként foglalkoznunk.)

  4. Gondoskodjunk róla, hogy a rendszermag beállításait tartalmazó állományban a COM1 (sio0) eszközhöz megadtuk a megfelelő paramétereket.

    Ezek az alábbiak:

    0x10

    A konzolos működési mód engedélyezése az adott egységhez. Ha megadjuk ezt a paramétert, akkor a többit a rendszer figyelmen kívül hagyja. Pillanatnyilag legfeljebb egy egység birtokolhatja ezt a beállítást. Ha több ilyet adtunk volna meg, akkor (a felírás sorrendje szerint) az első kap ilyen szerepet. Ez a beállítás önmagában még nem teszi a soros portot konzollá. Ehhez még szükségünk van a következő beállításra, vagy a -h megadására is.

    0x20

    Az egység konzollá nyilvánítása (hacsak nincs egy tőle nagyobb prioritású konzol), függetlenül a lentebb ismertetendő -h opciótól. A 0x20 értéket a 0x10 értékkel együtt kell megadni.

    0x40

    (A 0x10 értékkel együtt) az egységet kivonja a normális elérés alól. Ezt a beállítást ne használjuk, ha soros vonali konzolt akarunk üzemeltetni az adott porton. Ezzel az egységet csak a rendszermag távoli nyomkövetéséhez tudjuk használni. A távoli nyomkövetésről a fejlesztők kézikönyvében olvastunk bővebben.

    Példa:

    device sio0 at isa? port IO_COM1 flags 0x10 irq 4

    A további részletekről a sio(4) man oldal tud felvilágosítást nyújtani.

    Ha nem állítottuk be a megfelelő paramétereket, akkor (egy másik konzolon) futtassuk a UserConfig programot vagy fordítsuk újra a rendszermagot.

  5. Hozzunk létre egy boot.config állományt a rendszer indításához használt meghajtó a partíciójának gyökerében.

    Ez az állomány mondja meg a rendszerindító blokkban található kódnak, hogy miként akarjuk indítani a rendszerünket. A soros vonali konzol életrekeltéséhez a most következő opciók közül kell megadnunk egyet vagy többet — amennyiben többet akarunk megadni, akkor mindegyiket egyetlen sorban szerepeltessük:

    -h

    A belső és a soros vonali konzolok közti átkapcsolás. Ezzel tudunk a konzolos eszközök között váltani. Például, ha egy belső (video) konzolról indítjuk a rendszert, akkor a rendszertöltőnek és a rendszermagnak átadott -h paraméterrel arra tudjuk ezeket utasítani, hogy konzolként a soros portot használják. Vagy ha soros porton keresztül indítjuk a rendszert, akkor -h megadásával megkérhetjük a rendszertöltőt és a rendszermagot, hogy ezután már a videokártyát használja konzolként.

    -D

    Az egy- és kétkonzolos beállítások közti váltás. Az egykonzolos konfigurációban a konzol lehet belső (video) vagy soros vonali, attól függően, hogy miként használtuk a fenti -h opciót. A kétkonzolos konfigurációban azonban a videokártyán és a soros vonalon keresztül is egyszerre megjelenik a konzol, függetlenül a -h hatásától. Ilyenkor viszont vegyük figyelembe, hogy ez a kétkonzolos konfiguráció csak a rendszerindító blokk futása alatt él. Amint a rendszerindító megkapja a vezérlést, a -h által megadott konzol válik az egyedülivé.

    -P

    A rendszerindító blokk megpróbálja megkeresni a billentyűzetet. Ha nem találja, akkor magától beállítja a -D és -h opciókat.

    Megjegyzés: Tárbeli korlátozások miatt a rendszerindító blokk jelenlegi változata a -P paraméterrel csak a kiterjesztett billentyűzeteket képes kezelni. A 101 gombnál kevesebbel (tehát F11 és F12 gombokkal nem) rendelkező billentyűzeteket ezért nem feltétlenül fogja észlelni. Ugyanezen korlátozás miatt egyes laptopokon sem minden esetben sikerül érzékelni a billentyűzetet. Ha ez a rendszerünkön problémához vezetne, akkor egyszerűbb lesz elhagyni a -P használatát. Sajnos, jelenleg semmilyen megoldás nincs erre.

    Vagy a -P opcióval állítassuk be automatikusan a konzolt, vagy pedig a -h opcióval engedélyezzük a soros vonali konzolt.

    Természetesen itt a boot(8) man oldalon szereplő összes többi paramétert is megadhatjuk.

    A -P kivételével az összes opció a rendszertöltőnek (/boot/loader) kerül átadásra. A rendszertöltő egyedül a -h állapotából dönti el, hogy mely belső videoeszközön vagy soros porton legyen a konzol. Ez azt jelenti, hogy a /boot.config állományban ha megadjuk a -D opciót, de mellette nem szerepel a -h, akkor a soros vonali konzolt csak a rendszerindító blokk futása alatt tudjuk elérni — a rendszertöltő ugyanis alapból a videokártyát használja konzolként.

  6. Kapcsoljuk be a számítógépünket.

    Amikor elindítjuk a FreeBSD-s gépünket, a rendszerindító blokk kiírja a /boot.config tartalmát a konzolra. Például így:

    /boot.config: -P
    Keyboard: no

    A második sor csak olyankor jelenik meg, ha a /boot.config állományban a -P beállítás is szerepel, és a billentyűzet jelenlétét (yes) vagy hiányát (no) jelzi. A /boot.config tartalmától függően ezek az üzenetek vagy a soros vonali vagy a belső konzolon jelennek meg, esetleg mind a kettőn.

    BeállításAhol megjelenik
    nincsbelső konzol
    -hsoros vonali konzol
    -Dsoros vonali és belső konzol
    -Dhsoros vonali és belső konzol
    -P, van billentyűzetbelső konzol
    -P, nincs billentyűzetsoros vonali konzol

    Az iménti üzenetek felbukkanása után a további konzolos üzenetek küldésében egy rövid szünet következik, amíg a rendszerindító blokk a rendszertöltő betöltésével folytatja a rendszer indítását. Normális körülmények között ezt a folyamatot nem kell megszakítanunk, de esetleg olyankor mégis érdemes lehet, ha le akarjuk ellenőrizni a beállításainkat.

    A rendszerindítási folyamat félbeszakításához az Enter billentyűn kívül nyomjuk le valamelyik másikat. Ekkor a rendszerindító blokk megáll és várja a további parancsokat. Ekkor valami ilyesmit láthatunk:

    >> FreeBSD/i386 BOOT
    Default: 0:ad(0,a)/boot/loader
    boot:

    Nézzük meg, hogy /boot.config beállításainak megfelelően a fenti üzenet a soros vonali konzolon vagy a belső konzolon, illetve mind a kettőn megjelenik-e. Ha az üzenet a megfelelő konzolon megjelenik, akkor az Enter lenyomásával folytathatjuk a rendszer indítását.

    Ha nekünk a soros vonali konzolra lenne szükségünk, de semmi nem jelenik meg a soros terminálon, akkor valamit valószínűleg nem jól állítottunk be. A rendszerindító blokktól kapott parancssorban a -h begépelésével és az Enter vagy Return lenyomásával (ha lehetséges) jelezzük neki (és így a rendszertöltőnek és a rendszermagnak is) a soros vonali konzol kiválasztását. Miután befejeződött a rendszer indítása, menjünk vissza és ellenőrizzük a megfelelő paramétereket.

Ahogy sikerült elindítani a rendszertöltőt és a rendszerindítás harmadik fokozatába léptünk, a rendszertöltő megfelelő környezeti változóin keresztül még mindig van lehetőségünk váltani a soros vonali és a belső konzol között, lásd 26.6.6 Szakasz.

26.6.4. Összefoglalás

Itt most röviden összefoglaljuk az eddig tárgyalt különböző beállításokat és ténylegesen kiválasztott konzolt.

26.6.4.1. 1. eset: a sio0 eszköznél a 0x10 beállítást adjuk meg

device sio0 at isa? port IO_COM1 flags 0x10 irq 4

A /boot.config beállításaiKonzol a rendszerindító blokk alattKonzol a rendszertöltő alattKonzol a rendszermagban
nincsenekbelsőbelsőbelső
-hsoros vonalisoros vonalisoros vonali
-Dsoros vonali és belsőbelsőbelső
-Dhsoros vonali és belsősoros vonalisoros vonali
-P, van billentyűzetbelsőbelsőbelső
-P, nincs billentyűzetsoros vonali és belsősoros vonalisoros vonali

26.6.4.2. 2. eset: a sio0 eszköznél 0x30 beállítása

device sio0 at isa? port IO_COM1 flags 0x30 irq 4

A /boot.config beállításaiKonzol a rendszerindító blokk alattKonzol a rendszertöltő alattKonzol a rendszermagban
nincsenekbelsőbelsősoros vonali
-hsoros vonalisoros vonalisoros vonali
-Dsoros vonali és belsőbelsősoros vonali
-Dhsoros vonali és belsősoros vonalisoros vonali
-P, van billentyűzetbelsőbelsősoros vonali
-P, nincs billentyűzetsoros vonali és belsősoros vonalisoros vonali

26.6.5. Tanácsok a soros vonali konzol használatához

26.6.5.1. Nagyobb soros vonali sebesség beállítása

A soros port alapértelmezései a következők: 9600 baud, 8 bites átvitel, paritás nincs és 1 stopbit. Ha a konzol alapsebességét meg akarjuk változtatni, akkor ahhoz a következőket kell tennünk:

  • Fordítsuk újra a rendszerindító blokkokat úgy, hogy a BOOT_COMCONSOLE_SPEED változóban a konzolnak egy másik sebességet adunk meg. Az új rendszerindító blokkok fordításáról és telepítéséről a 26.6.5.2 Szakaszban kapunk részletes leírást.

    Ha a soros vonali konzolt nem a -h opcióval állítottuk be, vagy ha a rendszermag a rendszerindító blokkoktól eltérő módon éri el a soros vonali konzolt, akkor a rendszermag beállításai közé még az alábbit is fel kell vennünk, majd újra kell fordítanunk:

    options CONSPEED=19200
  • A rendszermagnak adjuk át a -S rendszerindítási paramétert. A -S parancssori opció a /boot.config állományban is megadható. A boot(8) man oldalon tudhatjuk meg, hogy a /boot.config beállításai közé hogyan tudjuk felvenni és ott milyen további lehetőségeink vannak még.

  • A /boot/loader.conf állományban engedélyezzük a comconsole_speed beállítást.

    Ez a beállítás a szintén a /boot/loader.conf állományban megadható console, boot_serial és boot_multicons változóktól függ. A soros vonali konzol sebességét tehát például így tudjuk megváltoztatni a comconsole_speed megadásával:

    boot_multicons="YES"
    boot_serial="YES"
    comconsole_speed="115200"
    console="comconsole,vidconsole"

26.6.5.2. Soros vonali konzol a sio0 porton kívül máshol

Ha valamilyen okból kifolyólag nem a sio0 porton keresztül akarjuk használni a konzolt, akkor ahhoz a rendszerindító blokkok, a rendszertöltő és a rendszermag forrásait újra kell fordítanunk az alábbiak szerint:

  1. Szerezzük be a rendszermag forrását. (Lásd 24 fejezet)

  2. Írjuk át a /etc/make.conf állományban a BOOT_COMCONSOLE_PORT címét az általunk használt porthoz tartozóéra (0x3F8, 0x2F8, 0x3E8 vagy 0x2E8). Itt csak a sio0 és sio3 (COM1 és COM4) közti portok használhatóak — a töbportos soros kártyák címei nem adhatóak meg. A megszakításokat nem kell beállítanunk.

  3. Készítsünk egy saját rendszermag beállításait tartalmazó állományt, és vegyük fel bele a használni kívánt soros port megfelelő paramétereit. Például, ha a sio1 (COM2) eszközt akarjuk konzolként használni:

    device sio1 at isa? port IO_COM2 flags 0x10 irq 3

    vagy

    device sio1 at isa? port IO_COM2 flags 0x30 irq 3

    A konzolra vonatkozó beállításokat a többi soros portnál ne adjuk meg.

  4. Fordítsuk újra és telepítsük a rendszerindító blokkot és a rendszertöltőt:

    # cd /sys/boot
    # make clean
    # make
    # make install
  5. Fordítsuk és telepítsük újra a rendszermagot.

  6. A bsdlabel(8) segítségével másoljuk az új rendszerindító blokkot a rendszer indítását végző lemezre és töltsük be az új rendszermagot.

26.6.5.3. A DDB elérése a soros vonalról

Ha a soros vonali konzolról akarjuk használni a rendszermagba épített nyomkövetőt (ami hasznos lehet távoli vizsgálódáskor, de egyben veszélyes is, ha a soros porton tévesen kiküldünk egy BREAK jelzést!), akkor a rendszermagot a következő beállításokkal kell fordítanunk:

options BREAK_TO_DEBUGGER
options DDB

26.6.5.4. A bejelentkező képernyő elérése a soros vonali konzolról

Habár erre nincs feltétlenül szükségünk, a rendszer üzeneteinek és a rendszermag nyomkövetőjének elérése után akár be is tudunk jelentkezni a soros vonalon keresztül. Íme!

Nyissuk meg az /etc/ttys állományt a kedvenc szövegszerkesztőnkkel és keressük meg a következő sorokat:

ttyd0 "/usr/libexec/getty std.9600" unknown off secure
ttyd1 "/usr/libexec/getty std.9600" unknown off secure
ttyd2 "/usr/libexec/getty std.9600" unknown off secure
ttyd3 "/usr/libexec/getty std.9600" unknown off secure

A ttyd0 és ttyd3 közti sorok pontosan a COM1 és COM4 közti portoknak felelnek meg. A használni kívánt port sorában szereplő off paramétert írjuk át az on értékre. Ha a soros port sebességét is megváltoztattuk, minden bizonnyal a std.9600 helyett is az adott sebességhez illeszkedő paramétert kell megadnunk, például az std.19200 értékkel.

Érdemes továbbá még az unknown helyett megadni az adott terminál típusát.

Az állomány módosítását követően a változatások érvényesítéséhez ki kell adnunk a kill -HUP 1 parancsot is.

26.6.6. A konzol megváltoztatása a rendszertöltőből

A korábbi szakaszokban arról beszéltünk, hogy miként állítsuk be a soros vonali konzolt a rendszerindító blokk megpiszkálásával. Ebben a szakaszban viszont azt mutatjuk meg, hogy különböző parancsokon és környezeti változókon keresztül miként tudjuk megadni a konzolt a rendszertöltőben. Mivel a rendszertöltőre a rendszerindítás harmadik fokozatában kerül sor, az ott megadott értékekkel felül tudjuk bírálni a rendszerindító blokk beállításait.

26.6.6.1. A soros vonali konzol beállítása

A rendszertöltő és a rendszermag az /boot/loader.conf állományon keresztül elég könnyen rávehető a soros vonali konzol használatára:

set console="comconsole"

Ez a rendszerindító blokk előző szakaszban tárgyalt beállításaitól függetlenül érvényesül.

A fenti sort a /boot/loader.conf állomány elejére érdemes tennünk, így a soros vonali konzolon már a lehető leghamarabb megjelennek a rendszer üzenetei.

Ehhez hasonló módon a belső konzolt is megadhatjuk:

set console="vidconsole"

Ha a rendszertöltőben nem adjuk meg a console környezeti változó értékét, akkor a rendszertöltő, és így a rendszermag is, a rendszerindító blokkban a -h opció által meghatározott konzolt fogja használni.

A konzol a /boot/loader.conf.local vagy a /boot/loader.conf állományokban adható meg.

A részletekkel kapcsolatban lásd a loader.conf(5) man oldalt.

Megjegyzés: Jelen pillanatban a rendszertöltőnek nincs a -P paraméterrel ekvivalens értékű beállítása, ezért a billentyűzet jelenléte alapján nem képes magától választani a belső és a soros vonali konzol között.

26.6.6.2. Soros vonali konzol a sio0 porton kívül máshol

A rendszertöltőt ne a sio0 eszközzel fordítsuk újra a soros vonali konzolhoz. Ehhez kövessük a 26.6.5.2 Szakaszban leírt eljárás lépéseit.

26.6.7. Figyelmeztetések

A szakaszban szereplő ötletek alapján sokan így most már könnyen be tudnak állítani egy billentyűzet és grafikus hardver nélküli dedikált szervert. Sajnos azonban a legtöbb rendszer nem engedi a billentyűzet nélküli indítást, és akad néhány olyan is, amely pedig a grafikus kártya hiányában nem is indul el. Az AMI BIOS-os gépeknél a grafikus kártya nélküli indításhoz elegendő csupán a beállítások között a grafikus kártyát (“graphics adapter”) “Not installed” (nem telepített) állapotúra állítani. Ha ilyen opció nem található a BIOS-ban, akkor helyette keressük a “Halt on Error” (leállás hiba esetén) változatot. Ha ezt a “All but Keyboard” (a billentyűzet kivételével minden) vagy akár a “No Error” (soha) értékre állítjuk, az előbbi eredményt kapjuk.

Ennek ellenére előfordulhat azonban, hogy egyes gépeken egyáltalán nem találunk ilyen lehetőséget és videokártya nélkül nem indulnak el. Ezekben az esetekben tegyünk a gépbe valamilyen kártyát (ehhez elég egy egyszerű típus is), de monitort már ne kössünk rá. Esetleg megpróbálkozhatunk még AMI BIOS telepítésével is.

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.