25 febrero 2012

Minicom en enlaces seriales y usando TCP/IP o de como tan solo quiero que tu alma no vuelva a ver la luz del Sol...

Un poco largo de leer porque es casi un mini-joutu, pero los que disfrutamos de las conexiones TCP/IP via serie hemos pasado por el largo, arduo, desesperante y aspero proceso de tener que leer los mans...
Aunque muchas cosas son arrebatadas por el tiempo, otras muchas permanecen; y aunque no tengamos ahora la fuerza que en los viejos días fue capaz de conmover la tierra y el cielo, seguimos siendo quienes somos...
ALFRED, LORD TENNYSON
Algunos se preguntaran ¿para que quiero usar yo un obsoleto enlace serial?, bueno, la respuesta es muy simple, "hay muchisimos dispositivos serie esperando ser configurados", o mejor aun, es una buena forma de conectarse exigiendo presencia fisica.

Podria divagar de la epoca del dial-up y los modems de 300bps marcando con la horquilla, de como configurar switch, routers u otros dispositivos via puerto serial o dislates asi, pero por si no se dieron cuenta, hay muchisimas PBX (huerfanas de sysadmin) dando servicio hoy en dia y siempre es bueno saber manejarse con otros medios fisicos, que no todo es usarle el güifi al vecino.

Pero para no hacer apologia del delito, doy ejemplos...

Ejemplo muy practico:
Tengo un nodo[0] en una torre, y como enlace de contingencia, el puerto serial esta habilitado y conectado por un cable hasta la base de la susodicha torre, asi que cuando una eth falla, no estoy obligado a trepar bajo la fria lluvia y la cruel obscuridad (o cuando los accesos al equipo no son libres). Una forma muy barata, debo decirlo tambien, de ver el arranque del equipo sin tener que bajarlo o subir a la torre con un monitor... Solucion que implemente hace años largos ya... Y todo esto se puede hacer desde una humilde PALM V[1] prehistorica con "Top Gun ssh"[2] instalado o miniTerm.

Ejemplo laboral:
El viejo portatil muleto con Win95 se murio y no hay nada con puerto serial en el NOC, aunque hay que configurar varios equipos en produccion por un cambio en "ponga aqui el area de su interes", y como hicimos bien los deberes, SOLO se pueden configurar via puerto serie. Y no tenemos tiempo de ir a buscar NUESTRO viejo muleto con Slackware instalado[7].
Tambien vale una vieja portatil o PC prehistorica con puerto serial, un diskette de arranque y "kermit"[8], que es lo mismo que plink pero para sistemas tipo CP/M o DOS[9]

¿A que ahora no resulta tan obsoleto el viejo puerto serie y esa vieja PALM V de dos megas de RAM y monocroma? Ni digo de tener una Jornada 720 con 32MB RAM corriendo JLIME y con su propio puerto serial USB, via MOD, sin adaptadores ni nada, (gentileza de Gustavo Presman). La pureza de tener un GNU/Linux pero completo bajo un ARM viejisimo, y "medio VGA" con sus 640x320 de resolucion.

Tambien sirve para desbrickear[4] la mayoria de los equipos embebidos, ya que la mayoria se dejan flashear por TFTP[5] via puerto serie, obvio, mediante un cable JTAG[6] especifico de cada uno.
Incluso hay unos adaptadores DB9-RJ45 muy bonitos, que permiten usar un cable UTP para conectarte al COM del CISCO a configurar (uno en cada extremo del cable, vale aclarar) y no tener que estar fisicamente en el bunker/datacenter/NOC/lo-que-sea,  o no tener el cable completo encima, sino solo los dos adaptadores. El Guerrero del Camino sabe que esas cosas seguiran siendo importantes y su mochila esta llena de los adaptadores mas insolitos...

Ahora a configurar minicom desde el Sistema Operativo GNU/Linux (o FreeDOS, o cualquier otro *NIX) para aquellas personas que también puedan controlar via puerto serie[3] a un microcontrolador PIC, router u otra aplicación.

Los puertos series en GNU/Linux son /dev/ttyS0 para el puerto serial 1 (COM1 en FreeDOS), /dev/ttyS1 para el COM2, /dev/ttyUSB0 para USB 1, etc. Recorda que los informaticos empezamos a contar de cero, y que lo primeros diez numeros son del cero al nueve.

Una vez abrimos una terminal (TTY, o abri "la línea de comandos" de tu SO), introducimos en modo root (o superusuario) el comando:

root@scatha:~# minicom -s

Solucion rapida:
Con minicom abierto y configurado, manda CTRL+A y despues M en ambas maquinas y si todo esta bien configurado deberia andar, sino lee la

Solucion completa con explicacion:
Abri una consola como root y abri minicom, al momento sale un mensaje diciendo "Iniciando Módem". El control de este programa no es complicado, sencillamente es acostumbrarse. Para acceder al menú de opciones pulsa la tecla control + "A" y después la "Z", y accedes a un menú con varias opciones.

Configurando Minicom:
Pulsando la "O" accedemos al menú de configuración del programa, en Nombres de Archivos y rutas coloca los directorios en donde queres recibir los archivos nos envie el otro equipo. (ya sabes, pulsas la "A" para acceder a esta opción), una vez hecho pulsas "Esc" y salis.
Ahora situate en Configuración del  puerto serial, en la opción "A" coloca el puerto serie a través de donde te conectas (En windows COM1= en linux /dev/ttyS0; COM2=/dev/ttyS1 ...), una vez puesta la terminal pulsa la tecla "E" y accedes a la configuración del puerto, ponele una velocidad de 115200 (no todos los puertos series soportan 203400, es más, si es una máquina antigua tenes que bajar mas la velocidad) y pulsa la tecla "Q" para que la paridad sea 8-N-1. Sali de este menú y fijate que en la opción "E" tiene que poner bps/paridad/bits 115200 8-N-1. Aparte en las opciones "F" y "G" debes tener control de hardware=SI y control por software=NO.
Bien, si está todo correcto guarda la configuración (salvar configuración como dfl) y dale a salir.
Entra al otro equipo y configuralo con sus valores correspondientes, MUY IMPORTANTE, la velocidad y los bps/paridad/bits tienen que estar IGUAL en las dos máquinas.

Listo, en caso de seguir apareciendo como desconectado pulsa CTRL+"A" y después la "M" en las dos máquinas, y en ese momento debería aparecer ya como conectado. Teclea algo en una terminal y verás como aparece por la otra terminal.
Ahora pulsa CTRL+"A" y luego la "S" y selecciona un archivo para transferir, selecciona un protocolo (te recomiendo zmodem) y ya estás transfiriendo archivos. ¿Sencillo, no?

En esta ventana del TTY, vamos a configurar el puerto serie 1, llamado ttyS0 en Linux o COM1 bajo FreeDOS.

Seleccionamos “Serial port setup” y pulsamos Enter.

Aquí es donde hay que seleccionar el puerto que vamos a usar.

Pulsa la “A” y escribi arriba /dev/ttyS0, luego enter y luego la letra “E”.

Si pulsaste la “E”, aparece el menú “comm parameters”. Ya que lo uso para controlar un PIC 16F84A uso la configuración:

    “Speed” C: 9600
    “Parity” None
    “Data” V: 8
    “StopBits” X: 2

Pulsa enter para confirmar.

Si queres guardar los datos que es algo muy recomendable, selecciona “Save setap as dfl”. Cuando guardaste la configuración, pulsa “Exit” para salir y reiniciar.

Pulsamos "Exit" para empezar.

Si todo ha ido bien, aparecerá la ventana de bienvenida y listo para usar.


Si queres salir de Minicom, como bien dice al principio de la bienvenida, pulsa "Control +A" y que aparece una barra roja inferior mostrando información y algunos datos.


Ahora pulsa la “Z” y aparece la ventana “Minicom Command Summary”. Para salir sin reset pulsa la “Q” que es la opción “Quit with no reset”, luego pulsa Enter.

En la ventana “Leave without reset?” podes pulsar “Yes” para salir definitivamente

La "Terminal Boba"

Vamos a lo siguiente, montar una terminal boba, esto es manejar un equipo desde otro por medio de la terminal remotamente. Para ello debemos modificar el archivo /etc/inittab, al que le agregamos al final estas líneas:

   # Arrancar mgetty en COM1/ttyS0 y en COM2/ttyS1
   T0:23:respawn:/sbin/mgetty ttyS0
   T1:23:respawn:/sbin/mgetty ttyS1
   #s2:2345:respawn:/sbin/mgetty -L -i 38400 ttyS1 vt100

Guardamos el archivo, tecleamos init q (para que vuelva a leer las configuración) y arrancamos de nuevo el minicom en las dos máquinas.
En la máquina que se conecta ahora vemos que ahora nos pide un usuario y contraseña...

Montando la red TCP/IP

Desde una consola como root teclea

root@scatha:~# slattach /dev/ttyS0 115200 &

hace lo mismo en la otra máquina. Ahora si tecleas ifconfig -a ves que hay un nuevo dispositivo, "sl0", tecleas (todo en la misma linea):

root@scatha:~# ifconfig sl0 192.168.100.1 pointopint 192.168.100.2 netmask 255.255.255.0 up

en la otra máquina:
root@orodruin:~# ifconfig sl0 192.168.100.2 pointopint 192.168.100.1 netmask 255.255.255.0 up

y hace un ping de una a otra, y ya lo tenes. Bueno, explico, slattach es un programa encargado de manejar el puerto serie como una conexión TCP/IP, con lo cual tan solo debemos configurar ese dispositivo que nos crea slattach para que se ajuste a nuestra red. Como ves, usamos la opción pointopoint, esto es porque este tipo de conexiones se realizan "punto a punto", es decir, directamente de un equipo a otro (más o menos). Ahora en el equipo que accede a Internet y al resto de la red configura los enrutamientos correctamente y podrás acceder tanto a internet como a la red local desde el puerto serie.

En caso de laptops/netbooks que no tiene puerto serie, la solucion al conectarlo al puerto USB, con lsusb comprobas que tenes conectado al puerto USB y de paso sabes si se cargo correctamente:

Con este comando podremos conectarnos por el puerto serie a switch, router, etc para configurarlos por el puerto de consola.

En mi caso la netbook portátil no tiene puerto serie, por lo que uso un adaptador USB-serial, la configuración e instalación del mismo es tan sencillo como conectarlo al puerto serie y Slackware lo reconoce de una, con el comando "lsusb" comprobamos que cosas tenemos conectadas a nuestros puertos USB, y de paso sabemos si todo se cargo correctamente:


root@scatha:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0951:1606 Kingston Technology
Bus 001 Device 003: ID 05e3:0505 Genesys Logic, Inc.
Bus 001 Device 006: ID 0718:0617 Imation Corp.
Bus 001 Device 008: ID 0951:1613 Kingston Technology DataTraveler DT101C Flash Drive
Bus 002 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
root@scatha:~#

Ahora queda saber que dispositivo lo enlaza, es decir /dev/ttyS* o /dev/ttyUSB*

En mi caso, tras varias pruebas el dispositivo que lo enlazaba era el /dev/ttyUSB0, una vez sabido esto, solo queda configurar el programa
minicom

En mi caso, se encuentra en Profilic ... PL2303 Serial en el Device 002, puede variar dependiendo del caso.
Ahora queda saber que dispositivo lo enlaza, es decir /dev/ttyS* o /dev/ttyUSB*

En mi caso, tras varias pruebas el dispositivo que lo enlazaba era el /dev/ttyUSB0, una vez sabido esto, solo queda configurar el programa minicom, y el resto es tarea tuya, pues ya estaremos conectados a switch, router, etc.

Para iniciar minicom, tras configurarlo ejecute lo siguiente:
root@scatha:~# minicom -o /dev/ttyUSB0

Welcome to minicom 2.2

OPTIONS: I18n
Compiled on Mar  7 2007, 15:10:03.
Port /dev/ttyUSB0

                Press CTRL-A Z for help on special keys


Sending SIGKILL to all processes.
Please stand by while rebooting the system.
Restarting system.

A continuación, pongo un ejemplo de como configurar minicom, extraído de http://web.gentrinoo.org/minicom

Ahora lo ejecutamos en modo "setup" para configurarlo:
root@scatha:~# minicom -s

Vamos a "Configuración de puerto Serial", indicamos la configuración que deseamos para conectar (en mi caso 9600-8-N-1), el dispositivo que usaremos y otros parametros como el control de flujo:

A - Dispositivo Serial : /dev/usb/tts/0
B - Localización del Archivo de Bloqueo : /var/lock
C - Programa de Acceso :
D - Programa de Salida :
E - Bps/Paridad/Bits : 9600 8N1
F - Control de Flujo por Hardware: No
G - Control de Flujo por Software: No


Listo, conectamos el cable serie al router por ejemplo y ejecutamos minicom -o para conectar.

Pulsando:
 - Ctrl+A, Z accedemos a la ayuda. (Ctrl+A,soltamos,Z)
 - Ctrl+A, Q salimos.

Para poder ejecutar minicom como usuario ejecutamos:
root@scatha:~# chmod +s /usr/bin/minicom; chown root /usr/bin/minicom

Si te sigue hinchando las bolas bajalo a 9600-8-N-1 es la opcion mas segura siempre, aunque dolorosamente lenta

Eso es todo, ¡Suerte!


[0] Ver http://wiki.buenosaireslibre.org/NodoAncalagon para mas detalles de funcionamiento, enlaces y hardware y vinculos muy entretenidos del proyecto BuenosAiresLibre.org

[1] Asi es, tengo una vieja PALM V que todavia funciona despues de tenerla casi 13 años, y que utilizo para ese tipo de menesteres, y asi tambien para leer libros en el omnibus o subte y cambiar de canal en los bares que ponen en la tele alguna basura insoportable, cuando la uso, los ladrones me miran con lastima y hay gente tentada a darme unas monedas incluso, las miradas los delatan, pero a mi me sirve perfectamente, aparte si se me cae de una torre, economicamente no es nada, aunque si sentimentalmente lo voy a lamentar... Solucion del Hombre Pobre frente a la inseguridad y las ganas de leer igual.

[2] TGssh (el link original murio pero pueden bajarlo de aca) es un emulador de terminal para PALM V, y seguramente para alguna plataforma mas, que permite conectarse via puerto serie a cualquier equipo que soporte una terminal VT100, y toda la magia que la consola nos permite hacer. Recomendado para desempolvar viejas PDAs sin uso y no necesitar mas que eso. Solucion ecologica del Hombre Pobre ahora, antes una nerdeada para no sacar la notebook.

[3] Serie tipo RS232 muy comun antes en la arquitectura PC, o tambien se puede usar el RS485 que es muy usado en la industria, los conectores son los tipicos DB9 o DB25 e incluso USB (que es "Universal SERIAL Bus"), y no nos olvidemos del DA15 de las viejas placas de sonido para conectores del joystic. Estamos rodeados de puertos seriales...

[4] Un equipo brickeado es cuando a un equipo se le actualizaba el FIRMWARE y por alguna causa el proceso fallo, sea porque el firm de actualizacion no era el correcto o porque fallo la energia o lo que sea. Dicese del equipo que solo sirve como pisa-papeles mientras tanto.

[5] Trivial File Transfer Protocol RFC 1350 (antes RFC 783)

[6] Un JTAG es un cable serie con conectores propietarios especificos, de un modelo determinado de hardware, que se usa solo para inicializar el equipo "en fabrica" y/o recuperarlo de desastres. Normalmente no se venden y no todos los modelos estan documentados, por lo cual se hace Ingenieria Inversa y siempre es un acto de Fe usarlos por primera vez. Los mas comunes son para celulares y routers/APs inalambricos, y por otro lado para automotores.

[7] Sigue siendo el unico GNU/Linux que se deja instalar con 4MB de RAM, o en casos extremos con 2MB de RAM, aunque con 64MB anda de pelos y descansado, y los muletos generalmente se destacan por ser viejisimos y no tener mucha RAM o bateria, pero el apego sentimental nos puede y honrosamente esperan ser llamados en contingencias raras.

[8] kermit es un emulador de terminal propiedad de IBM, si bien no es libre es gratuito

[9] System Operation Disk, tipo MS-DOS y/o todos los clonicos de el, incluyendo el libre FreeDOS.

2 comentarios:

  1. No sabes como me sirvió este mini-joutu. Voy a ver si escribo uno pero para hacer pc - modem - pstn - modem - pc como era antes. Abrazo!

    ResponderEliminar
  2. Me alegro que te resultara util, y hacelo cuanto antes, no quise hacerlo para no complicarla tanto, pero si, esas cosas eran muy utiles y siempre son bienvenidas. Abrazo!

    ResponderEliminar