Serial konsool
Sisukord
- 1 Sissejuhatus
- 2 x86 arhitektuuril operatsioonisüsteemiga Linux serial konsooli ettevalmistamine
- 3 x86 arhitektuuril operatsioonisüsteemiga Ubuntu serial konsooli ettevalmistamine
- 4 x86 arhitektuuril operatsioonisüsteemiga OpenBSD serial konsooli ettevalmistamine
- 5 Serial konsooli poole pöördumine
- 6 Turvalisus
- 7 Nullmodemi kaabel
- 8 Nõuandeid kasutusjuhtudeks
- 9 USB-serial üleminek
- 10 Xen ja serial konsool
- 11 ser2net
- 12 Faili kopeerimine üle serial konsooli
- 13 Virtuaalne serial port
- 14 Kasulikud lisamaterjalid
Sissejuhatus
Sõnaga konsool (ingl. k. console) tähistatakse arvuti külge füüsiliselt ühendatud monitori ja klaviatuuri. Konsooli eripära võrreldes nt ssh ligipääsust shellile seisneb selles, et arvuti tööd saab hakata juhtima suhteliselt kohe peale voolu sisselülitamist. Nt saab teha firmware (x86 arhitektuuril BIOS, Sparc arhitektuuril OBP ehk OpenBoot PROM) vahendite abil seadistusi ning määrata operatsioonisüsteemi alglaadimisel kasutatavaid parameetreid. Konsooli saab kasutada enne Etherneti ühenduse käivitumist ning ka jätkuvalt siis kui arvuti juba on täieliselt käivitunud ning saab pääseda ligi ka nö tavapäraste kaugligipääsu vahendite abil.
Praktiliselt samaväärse kontrolli arvuti üle saab korraldada pöördudes füüsilise konsooli asemel tema poole teisest arvutist üle serial pordi, kuid sellise eelisega, et kõnelause arvuti juures ei ole vajadust enam pidada füüsilist monitori ega klaviatuuri. Arusaadavalt peab olema kasutada sobiv riistvara, mis sellist asjakorraldust st serial konsooli (ingl. k. serial console) toetab, mida spetsiifilisemalt, seda parem; ning vastavalt seadistatud tarkvara.
x86 arhitektuuril põhinevate arvutite puhul reeglina ei saa BIOS funktsioonidele üle serial pordi ligi, seda saab teha vaid füüsiliselt konsoolilt. Siiski leidub ka x86 arhitektuuriga servreid, mis toetavad juurdepääsu BIOSile üle serial pordi ja isegi modemi. Aga alates bootloaderist (nt GRUB) saab juba edasisi sündmusi kontrollida. Sparc-arhitektuuril on olukord selles mõttes oluliselt parem, et OBP promptile saab ligi üle serial pordi ning lisaks on populaarsed spetsiaalsed RSC (Remote System Control) / LOM (Lights Out Management) / ALOM / ILOM kaardid, mille abil saab ka arvuti toidet sisse ja välja lülitada.
Üle serial pordi teise arvuti konsooli poole pöördumiseks peavad arvutid olema omavahel serial porte pidi ühendatud nullmodemkaabliga.
x86 arhitektuuril operatsioonisüsteemiga Linux serial konsooli ettevalmistamine
Eelduseks on, et arvutis on serial port füüsiliselt olemas, et ta on BIOS'st kasutamiseks lubatud ning kernelis on serial pordi tugi. Viimast saab teha kindlaks käsuga
bash# dmesg | grep ttyS serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Linuxi puhul peab arvutis, mille konsooli poole pöördutakse, olema kirjeldatud kolmes kohas, et konsool on seostatud serial pordiga:
- GRUB bootloader - et saaks üle serial konsooli teha bootloaderis valikuid
- Bootloaderis kernel parameetri option - et tuuma käivitumisel esitatud tekst esitataks serial konsoolile
- /etc/inittab - et serial pordil kuulaks getty selleks, et saaks sisse logida
GRUB bootloaderi menüüfailis /boot/grub/menu.lst tuleb kasutada faili alguses nt selliste väärtustega parameetreid
serial --unit=0 --speed=9600 terminal --timeout=15 serial console
kus
- serial - unit=0 määrab, et tegu on esimese serial pordiga, 1 oleks teine
- terminal - parameeter serial määrab, et terminali jaoks kasutatakse serial porti kusjuures console täpsustab, et see terminal millel vajutatakse esimesena mõnda klahvi on konsool (algul esitatakse teksti 'press any key')
ning tuuma reale lisada 'console=ttyS0,9600', nt selliselt
title debian root (hd0,1) kernel /boot/vmlinuz-2.6.18-5-686 root=/dev/hda2 ro panic=60 console=ttyS0,9600 initrd /boot/initrd.img-2.6.18-5-686 savedefault boot
kus
- kui grub esitab nn spash pilti serial konsoolile, siis tõenäoliselt mõjub see teisel poolel töötavale serial kliendile üsna eksitavalt. Seetõttu on soovitav splash'isid mitte kasutada serial konsooli puhul.
- kui console parameetrit kasutada mitu korda, siis tuuma teated saadetakse kõigile, kuid nö single user konsoolina kasutatakse viimast väärtust
/etc/inittab failis peab olema sarnane rida, vastasel korral ei saa juurkasutajana sisse logida
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
Lisaks peaks veenduma, et failis /etc/securetty sisaldub rida
ttyS0
/etc/inittab faili muudatusi saab kehtestada öeldes
bash# telinit q
x86 arhitektuuril operatsioonisüsteemiga Ubuntu serial konsooli ettevalmistamine
GRUB osa sarnane eelmises punktis kirjeldatule, aga nö /etc/inittab osa asemel sobib tekitada nt fail
# cat /etc/init/ttyS1.conf start on stopped rc or RUNLEVEL=[2345] stop on runlevel [!2345] respawn exec /sbin/getty -L 9600 ttyS0 vt102
ja käivitamiseks öelda
# start ttyS0
Tulemusena tekib protsess
root 34758 0.0 0.0 12760 872 ttyS1 Ss+ 09:35 0:00 /sbin/getty -L 9600 ttyS1 vt102
Lõpetamiseks
# stop ttyS0
x86 arhitektuuril operatsioonisüsteemiga OpenBSD serial konsooli ettevalmistamine
Eelduseks on, et arvutis on serial port füüsiliselt olemas, et ta on BIOS'st kasutamiseks lubatud ning kernelis on serial pordi tugi. Viimast saab teha kindlaks käsuga
# grep com /var/run/dmesg.boot .. com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo com1 at isa0 port 0x2f8/8 irq 3: ns16550a, 16 byte fifo
OpenBSD puhul peab arvutis, mille konsooli poole pöördutakse, olema kirjeldatud, et konsool on seostatud serial pordiga failis /etc/boot.conf
set tty com0
ning /etc/ttys failis sisalduma rida
tty00 "/usr/libexec/getty std.9600" vt220 on secure
Nende muudatuste kehtestamiseks tuleb teha arvutile reboot või saata init'ile HUP, öeldes
bash# kill -s HUP 1
Kui /etc/boot.conf failis on ebasobivad seadistused, nt arvutit kasutatakse füüsiliselt konsoolilt ja mitte serial konsoolilt, kuid /etc/boot.conf näitab kernelile kasutada serial konsooli, siis saab süsteemile öelda, et ta /etc/boot.conf faili ignoreeriks kui arvuti alglaadimisel hoida all Ctrl klahvi.
Serial konsooli poole pöördumine
Kui ühes arvutis on serial konsool ette valmistatud, siis teisest arvutist peaks saama tema poole pöörduda, nt programmidega
- minicom - ncurses kasutajaliides
- cu - käsurealt
- tip - käsurealt, tundub, et see on vaikimisi Solarise ja OpenBSD koosseisus olemas
- screen - ncurses kasutajaliides
- putty - saab kasutada Windows all
Minicom on mugavam igasuguste seadete käigu pealt muutmiseks kuid sisaldab mitte kõige kvaliteetsemat terminaliemulaatorit, samas kui cu puhul tuleb anda kõik parameetrid käsurealt ning terminaliemulaatoriks kasutatakse olemasolevat terminali, seega saab kasutada näiteks kogu xtermi võimalusi. Pöördumisel peab jälgima, et klientprogrammis on kasutatud sama kiirust, mida kasutab serial konsool. Katsed näitavad, et võib kasutada edukalt ka suuremaid kiirusi kui 9600 bitti sekundis - 38400, 57600, 115200 - ning 9600 on enamasti kasutusel seepärast, et see on paljudes erinevates firmwaredes vakimisi kiiruseks. Lisaks kiirusele peavad olema korrektselt määratud ka muud ühenduse parameetrid, üks tüüpiline komplekt võiks olla Linuxi puhul selline, parameetrite tähenduste vastu sügavama huvi korral saab juurde lugeda nt Wikipediast, http://en.wikipedia.org/wiki/Serial_port
Serial Device - /dev/ttyS0 Bps/Par/Bits - 9600 8N1 Hardware Flow Control : Yes Sofware Flow Control : No
OpenBSD arvutist välja pöördumisel on seadme nimi /dev/cua00.
Sparc-arhitektuuriga arvuti serial konsooli poole pöördumisel omab erilist tähendust break signaali saatmine (minicom abil Ctrl+A, F ning cu abil ~#) mille tulemusena satutakse OBP prompti. Kui seda tehakse operatsioonisüsteemi töötamise ajal, siis kaasneb sellega tuuma seiskamine ja jätkata saab käsuga "go".
Näiteks võiks OpenBSD poole pöördumine paista välja selline Minicom aknast
Debian Lenny poolt cu programmiga Serial konsooli poole pöördumisel tuleks kasutada tavakasutajat, kellel on dialout grupp ning pöördumine näeb välja nt selline
Turvalisus
Kui on hirm, et serial pordi kaudu võib toimuda volituseta ligipääs, võib konsooli lülitada seriali peale vaid ajaks, kui on ette näha tavapärasel viisil ligipääsemisele takistusi. GRUB bootloaderit saab kaitsta lisaks ka parooliga. Tuleb arvestada, et kui ligipääs töötava x86 arvuti serial konsoolile ei kujuta iseenesest oluliselt suuremat ohtu kui niisama avatud ssh port internetis, siis bootimise ajal saaks pahalane korraldada nt arvuti bootimise single user režiimi ning muuta ära root kasutaja parool ja sealt edasi tegutseda.
Nullmodemi kaabel
Serial pordid on arvutitel tavaliselt 9 või 25 kontaktiga, nullmodem kaabli abil saab neid omavahel ühendada kõigis kombinatsioonides, kusjuures kasutusel on rohkem kui üks nö õige nullmodemi skeem. Tundub, et kõige leivinumad on sellisid variandid
9 - 9 ühendus
3 - 2 2 - 3 7 - 8 8 - 7 5 - 5 6 - 4 1 - 4 4 - 1 4 - 6
25 - 9 ühendus
2 - 3 3 - 3 4 - 8 5 - 7 7 - 5 6 - 4 8 - 4 20 - 1 20 - 6
Kaabli pikkuseks märgivad erinevad allikad kuni kümmekond meetrit, ilmselt lühemate kaablite kasutamisel on võimalik saavutada suuremaid kiirusi.
Nõuandeid kasutusjuhtudeks
- Ühes keskmises Eesti kodus on koridoris ikka kaks arvutit: OpenBSD tulemüür ning Linuxil töötav teenuste server. Need kaks oleks siis nt hea ühendada omavahel serial porti pidi kokku, et sooritada vastastikku haldusprotseduure, millega kaasneb võrguühenduse katkemine. Siinjuures peab kasutaja ise otsustama, milline on selle tegevuse tähendus turvalisuse seisukohalt.
- Runlevelite kasutamiseks, millega kaasneb võrguühenduse kadumine.
- Tulemüüri tundmaõppimiseks, kuna üle serial konsooli saab olla sisse logitud süsteemis, aga sellega ei kaasne paketifiltri olekutabelis sissekandeid
- Tuuma debugimiseks, nt minicom võimaldab hõlpsasti logi salvestada.
- Kasutamisel tuleb arvestada, et kui port on kasutuses serial konsooli jaoks, siis samal ajal ei saa üle selle klientprogrammiga välja pöörduda.
- Operatsioonisüsteemi alglaadimisel erinevate tuumade ja tuuma parameetrite kasutamine.
- Kaabli ühes otsas oleva arvuti sisse või välja lülitamine võib paista teisele poole break'i saatmisena, seega tasub ka sellega ettevaatlik olla.
- Probleeme võib tulla ka getty'ga, mis "vastab" teise poole boot promptile valesti ja teeb katki ülesbuutimise.
- Virtualiseerimise tarkvaraga KVM on hea kasutada serial konsooli.
- OpenBSD kerneli debuggeri ehk nn ddb> prompti üle serial konsooli kasutamiseks tuleb seadistada sysctl ddb.console=1
- Serial konsooli kasutamisel tuleb arvestada, et konsooli klientprogrammis on näha ainult see, mis on sinna peale külgeühendumist kirjutatud, st kui konsoolile ei ole midagi esitatud peale ühendumist, siis midagi ei ole ka paista. See on põhjuseks, miks võrguspetsialistid vahel meeleheitlikult enterist pressida armastavad, st ei süsteem esitaks sellele vastuseks login: prompti uuesti vms muud konsoolile väljastaks.
- Kahe arvuti vahelise serial ühenduse kontrollimiseks sobib ühes arvutis lugeda serial seadet ja teises kirjutada midagi serial seadmesse, 'esimene-arvuti# cat < /dev/ttyS0' ja 'teine-arvuti# echo "test tekst" > /dev/ttyS0', tulemusena peab olema esimeses näha, mis teises sisestati
- Selleks, et Debiani all programmi cu'ga ei kasutataks hardware flow control'i, peavad näiteks /dev/ttyS0 puhul olema failis /etc/uucp/port kirjas read
port ttyS0 hardflow false
USB-serial üleminek
Kui sellele arvutil, millega pöörduda serial konsooli poole, puudub klassikaline serial port, on võimalik kasutada USB-serial üleminekut. Eriti sageli läheb seda vaja tänapäevaste sülearvutite puhul. Peale seadme ühendamist peaks tekkima nt Linuxi logisse sarnaseid teateid ning seadmeks oleks antud juhul /dev/ttyUSB0
usb 3-1: new full speed USB device using uhci_hcd and address 2 usb 3-1: new device found, idVendor=067b, idProduct=2303 usb 3-1: new device strings: Mfr=0, Product=0, SerialNumber=0 usb 3-1: configuration #1 chosen from 1 choice usbcore: registered new driver usbserial drivers/usb/serial/usb-serial.c: USB Serial support registered for generic usbcore: registered new driver usbserial_generic drivers/usb/serial/usb-serial.c: USB Serial Driver core drivers/usb/serial/usb-serial.c: USB Serial support registered for pl2303 pl2303 3-1:1.0: pl2303 converter detected usb 3-1: pl2303 converter now attached to ttyUSB0 usbcore: registered new driver pl2303 drivers/usb/serial/pl2303.c: Prolific PL2303 USB to serial adaptor driver
Ja vastupidi, ilma päris serial pordita arvuti USB-serial pordile saab konsooli suunata tõenäoliselt alles getty abil.
Xen ja serial konsool
Selleks, et Xen dom0 serial konsool ilmuks tavapärasel moel serial porti tuleb kasutada grub.conf failis sarnast sektsiooni Debian Etch puhul
title serial console root (hd0,1) kernel /boot/xen-3.0.3-1-i386-pae.gz dom0_mem=393216 console=com1 com1=38400,8n1 module /boot/vmlinuz-2.6.18-5-xen-686 root=/dev/hda2 ro max_loop=255 console=ttyS0,38400 module /boot/initrd.img-2.6.18-5-xen-686 boot
kus
- console=com1 com1=38400,8n1 - com1 vastab seadmele ttyS0 ja 38400 on kiirus (standardne on 9600)
- console=ttyS0,38400 - tuuma logi kirjutatakse serial porti ttyS0
Debian Lenny puhul serial konsooli kasutamisest jutustab tekst Xen kasutamine Debian Lenniga#Serial konsooli kasutamine.
ser2net
ser2net programmiga saab teha arvuti ethernet võrguühenduse kaudu ligipääsu arvuti serial pordi küljes olevale seadmele. Tulemusena saab arvuti ip aadressi poole seadistuses näidatud pordile pöördudes ühenduse serial pordis oleva seadmega (nt kolmanda arvuti serial konsooliga)
töökohaarvuti ---|---------- serial --------|--- | | _____ __|__ ttyS0 __|__ | | | | | | seriali konsooli kaudu juhitav seade |_____| |_____| |_____| | eth0 | 2000/tcp | | ser2net liides | | -----|---- ethernet -----|----
kus
- keskmises arvutis on käivitatud ser2net programm ja seadistatud vahendama oma ethernet võrguseadme pordil 2000/tcp ttyS0 seadet
- töökohaarvutist saab nt telnet programmiga pöörduda ser2net arvuti poole
- parempoolne seade omab serial liidest, nt võiks olla tegu arvutiga, milles on seadistutud serial konsool
Tarkvara paigaldamiseks sobib öelda
# apt-get install ser2net
Kasutaja peab ise otsustama, kas selline lahendus talle turvalisuse seisukohalt sobib.
Faili kopeerimine üle serial konsooli
Faili kopeerimiseks üle serial konsooli sobib kasutada nt cu programmi. Enne kopeerimist tuleb cu abil teise süsteemi sisse logida
ibm:~# cu -l /dev/cua04 -s 9600 Connected ... Debian GNU/Linux 6.0 keskus ttyS0 keskus login: root Password: Last login: Sun Jun 9 17:49:54 EEST 2013 on ttyS0 Linux keskus 2.6.32-5-amd64 #1 SMP Sun Sep 23 10:07:46 UTC 2012 x86_64 .. root@keskus:~#
ning öelda nt
root@keskus:~# ~[take] /usr/share/doc/libslang2/slangfun.txt test.txt
kus ~[take] tekib selliste klahvivajutuste tagajärjel, edasi tuleb failinimed sisestada nö tavalisel viisil
- Shift ja ~
- tühik
- t klahv
- vt 'man cu'
Tulemusena tekib ibm nimega arvuti failisüsteemi käesolevasse kataloogi fail test.txt.
Virtuaalne serial port
Virtuaalse serial portide paari saab tekitada nt socat programmiga öeldes
$ socat -d -d pty,raw,echo=0 pty,raw,echo=0 2014/06/01 18:16:04 socat[15891] N PTY is /dev/pts/103 2014/06/01 18:16:04 socat[15891] N PTY is /dev/pts/106 2014/06/01 18:16:04 socat[15891] N starting data transfer loop with FDs [3,3] and [5,5]
Ja nende kasutamiseks sobib nt picoco öeldes ühes xterm aknas
$ picocom /dev/pts/103
ja teises
$ picocom /dev/pts/106
Kui ühes aknas midagi sisestada, siis ilmub see nähtavale teises, ja vastupidi. Lisaks tundub, et saab faile kopeerida jms.