Kontrola nad Linuxem přes sériový port

4. 3. 2009
Doba čtení: 7 minut

Sdílet

Znáte to, umístíte si pod stůl router/server s tím, že se bude starat o nějakou práci, a najednou se s ním něco stane. Začnete shánět monitor a klávesnici, nebo je budete přepojovat z vašeho stroje. Přitom existuje mnohem pohodlnější způsob, jak se podívat, co se děje pod kapotou.

Pohodlí nade vše

Jak jsem v úvodu nastínil, ne ke všemu potřebujeme plnohodnotný monitor a klávesnici. Pokud má deska sériový port, tak nejjednodušší přístup k počítači je právě přes něj. Jedná se o podobný princip, na kterém byly dříve stavěny unixové terminály. I virtuální terminály, jak je známe dnes, je jistou formou sériové linky.

Spousta z nás má vytvořeno něco jako domácí router, případně server. Většinou jde o počítač, ke kterému je potřeba fyzický přístup jednou za čas a on sám se stará jen o nějaké stahování dat, routování, natování nebo třeba o poštu či databázi. Zákon schválnosti se občas projeví a my musíme vylézt na půdu nebo sáhnut pod postel a podívat se, co se stalo. Pokud jde o půdu, tak tam opravdu není pohodlné nosit monitor, a zase když přeneseme router k monitoru, tak nevystačí kabely pro síť nebo WiFi.

Když se podíváme okolo, tak pokud vlastníme notebook nebo ještě líp třeba netbook a zmíněný router/server má na sobě sériový port, máme napůl vyhráno. Odnést třeba moje Eeečko na půdu je mnohem jednoduší než tam odnášet buď 22" LCD nebo 19" CRT, to mi jistě dáte za pravdu. Připojením routeru k notebooku pak vyřešíme problém a vše se vrátí do starých kolejí.

Malé omezení tu ovšem je. Pokud začne nabíhat BIOS a ten nemá podporu pro výstup na sériovou linku (ještě jsem u PC neviděl), tak tam nic nezměníme. Na druhou stranu zavaděče GRUB i LILO podporu pro sériovou linku mají.

Většina problémů na podobných strojích, se kterými jsem se setkal, se točily kolem nastavení sítě. Dokonce se jednalo převážně jen o překlep při konfiguraci. U takovýchto problémů podobné řešení ušetří hodně nervů.

Co budeme potřebovat

Na rozdíl od desktopů nemají notebooky ani netbooky integrovaný sériový port. Výjimky se jistě najdou, ale není jich v dnešní době minimalizace moc. Proto budeme potřebovat minimálně jeden RS232<>USB převodník. Linuxové jádro jich podporuje hromadu, takže koupí toho, co je u nás k dispozici, snad ruku vedle nedáte. Prodávají se většinou ve formě kabelu. Na jednom konci je USB a na druhém samec sériového portu. K tomuto kabelu ještě budeme potřebovat null-modem kabel. Zatímco za ten dáme přibližně 50 kč, převodník stojí od 200 kč výš.

Inittab a tty

Každá linuxová distribuce obsahuje soubor /etc/inittab. V dnešní době již není potřeba do něj nějak zasahovat. Je ale dobré vědět, co tam najdeme, i přesto, že to zas tolik nesouvisí s dnešním tématem. V první řadě to je především nastavení runlevelu. Těch máme sedm. Nultý runlevel slouží k vypnutí stoje. Můžete si vyzkoušet napsáním „init 0“. Poslední šestý runlevel se používá pro resetování systému. První se hodí při problémech se systémem. Pokud ho použijeme, systém nebude brát ohled na práva a bude se chovat jako jednouživatelský operační systém. Druhý až pátý je určen pro normální práci. I když se v různých distribucích označení runlevelů (hlavně 2–5) liší, tak většina z nich bootuje do runlevelu 3 a zobrazí přihlášení do X session, přestože k tomu je určen runlevel 5. Původní účel je tedy potlačen.

Další řádky v inittab doplňuje distributor a jejich změna bude rozhodně proti tomu s tím počítá třeba aktualizační software apod. Jedná se hlavně o to, co se má udělat při volbě určitého runlevelu.

Na konec se dostáváme k části kolem terminálů. Pokud skončíme bez Xek máme k dispozici klávesové zkratky ALT+F1/2/3/4/X, které přepínají virtuální terminály a na kterých se můžeme pohybovat. Kolik terminálů máme k dispozici, můžeme nastavit právě v inittab. Záznam o jednom terminálu vypadá takto:

c1:12345:respawn:/sbin/agetty 38400 tty1 linux 

Jednotlivé hodnoty oddělujeme v inittab dvojtečkou. První hodnota slouží pro identifikaci. Může obsahovat jeden až čtyři znaky. Na druhém místě najdeme runlevely, ve kterým se mají terminály spustit. V mém případě se jedná o runlevel 1 až 5. Třetí hodnotou ovlivňujeme, jak se má init k našemu terminálu chovat. Nejčastější hodnotou je respawn. Tím říkáme initu, aby tento program spustil znovu. To znamená, že když se třeba na terminálu odhlásíme, objeví se nám opět přihlašovací obrazovka. Další hodnoty jsou uvedeny v „man inittab“. Na posledním místě nastavujeme, který program se má spustit. I když celou dobu píšu o tom, že nastavujeme terminál, tak o co konkrétně půjde říkáme initu až zde. V příkladu spouštím program agetty. V prvním parametru uvádím rychlost, v druhém, na který terminál se má navěsit a v třetím, o jaký typ terminálu se jedná.

Abychom nasměrovali agetty na sériový port, tak místo tty1 napíšeme třeba ttyS0. To označuje fyzický sériový port. Pokud nějaký na základní desce máme, najdeme ho v dmesg.

cx@delorean:~ $ dmesg | grep tty
console [tty0] enabled
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A 

S USB převodníky to není o moc komplikovanější a pokud ho připojíme a v /dev se nám objeví zařízení ttyUSBX, tak je vše v pořádku a můžeme ho použít. V dmesg najdeme zprávu patrně závislou na ovladači převodníku. Může vypadat třeba takhle:

usb 2-2: new full speed USB device using uhci_hcd and address 2
usb 2-2: configuration #1 chosen from 1 choice
usbserial: USB Serial support registered for pl2303
pl2303 2-2:1.0: pl2303 converter detected
usb 2-2: pl2303 converter now attached to ttyUSB0
usbcore: registered new interface driver pl2303
pl2303: Prolific PL2303 USB to serial adaptor driver 

Teorie bylo dost. Z celého dlouhého popisu se vyklube řádek:

s0:12345:respawn:/sbin/agetty 115200 ttyS0 vt100 

Ten vytvoří vt100 terminál na ttyS0 při rychlosti 115200 b/sec. Poslední parametr označuje typ terminálu. Je to tabulka znaků, jenž reprezentují klávesy na klávesnici. Například F1 se odešle jako [ESC] + 1.

Zprávy jádra (dmesg)

Přes sériový port se dají také sledovat zprávy jádra. Na jednom sériovém portu tak můžeme pracovat se systémem a zároveň vidíme, jestli si jádro na něco nestěžuje, nebo jestli není někde chyba. Pokud máme na stroji dostatek sériových portů, tak si můžeme tento výstup od terminálu oddělit, ale v praxi to je docela zbytečné.

Tyto zprávy najdeme také v dmesg. Při problémech s hardwarem ale často už nemáme šanci si dmesg spustit a přečíst si co se stalo. Pochybné ovladače WiFi karet, špatný řadič disku a podobně shodí systém tak rychle, že můžeme být rádi alespoň za zprávu na sériovém portu. Pro ladění nestabilního systému je sériový port k nezaplacení.

Aby jádro posílalo zprávy také na ttyS0, předáme mu parametr v kernel line. Uživatelé GRUBu najdou kernel line v menu.lst nebo podobném konfiguračním souboru. Nastavení vypadá ve výsledku takto:

title gentoo kernel 2.6.27
root=(hd0,0)
kernel /boot/kernel root=/dev/sda1 ro noapic apic=no noacpi console=ttyS0,115200 

Důležitý je parametr console. V první části určujeme, na který port se mají zprávy odesílat, a v druhé rychlost.

Jak se připojit

Nakonfigurováním systému to nekončí a k vytvoření spojení musí být vždy dva. Na stroji, kterým se připojujeme ke spravovanému stroji, potřebujeme program, který se umí s druhou stranou přes sériový port domluvit. Já používám převážně Gtkterm, ale již jsem byl okolnostmi donucen sáhnout i po minicomu.

Gtkterm

Uživatelé upřednostňující grafické rozhraní budou vyhledávat programy typu gtkterm. Jde o jednoduchý program, který podporuje vytváření profilů a umí se připojit prakticky k čemukoli. Velmi pěkně funguje i pro konfiguraci Routerboardů od Mikrotiku. Ovládání je jednoduché, takže se mu nebudu dále věnovat.

gtkterm

Minicom

Trochu složitější, ale za to mocnější je Minicom. My z něj použijeme jen kousek toho co umí. Základ je nastavit sériový port.

Nainstalujeme a spustíme minicom s parametrem -s. Objeví se menu.

minicom4

Vybereme nastavení sériového portu.

minicom5

A změníme parametry tak jak potřebujeme. V mém případě stačilo změnit port a vypnout hardwarovou kontrolu toku. Nakonec nastavení uložíme.

bitcoin školení listopad 24

Po spuštění minicomu počkáme, až zmizí „Inicializuje modem“, a pokud je vše dobře zapojené, měl by se objevit login.

minicom

Závěr

Správa serverů a routerů přes sériový port mi odvrátilo hromadu problémů. Nosit s sebou jeden kabel a Eeečko je rozhodně lepší než tahat klávesnici a monitor. Výpis zpráv jádra na sériový port mi pomohlo odhalit problémový řadič disku. I přes výhody, které tento postup má, se o této vlastnosti Linuxu moc nemluví, a možná to je škoda.

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.