Configurar RHEL5 para consola a través de puerto serie (ttys1)

Después del post anterior sobre configuración de tarjetas iLo, el siguiente paso es poder utilizar la iLo para poder conectarse al sistema operativo que tengamos instalado en la máquina. Si bien es cierto que las tarjetas iLo ya traen esta funcionalidad, es necesario pagar una licencia para obtener una gestión remota completa.

Usando un sistema RHEL es posible configurarlo para que su salida, además de enviarse a la consola estándar (típicamente monitor+teclado), se envíen al puerto serie. En este caso usamos el puerto serie #2 (o ttys1 en Linux), ya que el puerto serie #1 (ttys0) está reservado al puerto físico que usaríamos para conectar el servidor a otro dispositivo.

Lo primero sería configurar grub para que sea visible a través del puerto serie. Es necesario añadir estas 2 líneas en el fichero de configuración /etc/grub.conf :

# grub.conf generated by anaconda  
#  
# Note that you do not have to rerun grub after making changes to this file  
# NOTICE: You have a /boot partition. This means that  
# all kernel and initrd paths are relative to /boot/, eg.  
# root (hd0,0)  
# kernel /vmlinuz-version ro root=/dev/VolGroup00/lv00_raiz  
# initrd /initrd-version.img  
#boot=/dev/cciss/c0d0  
default=0  
timeout=15  
#splashimage=(hd0,0)/grub/splash.xpm.gz  
#hiddenmenu

serial --unit=1 --speed=115200  
terminal --timeout=15 console serial

title Red Hat Enterprise Linux Server (2.6.18-164.9.1.el5)  
root (hd0,0)  
kernel /vmlinuz-2.6.18-164.9.1.el5 ro root=/dev/VolGroup00/lv00 rhgb quiet  
initrd /initrd-2.6.18-164.9.1.el5.img

Advertencia: es necesario desactivar el splashimage, dado que el puerto serie se vuelve muy confuso si uno intenta usarla ;-) . Además es recomendable tener un timeout de al menos 15 segundos para que de tiempo a poder escribir algo en el grub e interrumpir la carga del SO si es que queremos seleccionar algo distinto del valor por defecto.

Una vez hecho esto, es necesario decirle al kernel que, además de enviar la salida al monitor+teclado estándares, lo envíe también al puerto serie. Esto lo conseguimos pasando parámetros adicionales dentro de grub.conf, tal que :

title HP-2.6.18-164.el5-4  
root (hd0,0)  
kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/lv00 rhgb quiet
console=tty0 console=ttyS1,115200n8  
initrd /HP-initrd-2.6.18-164.el5.img

Es decir, debemos añadir las opciones console=tty0 (para conservar la salida por monitor+teclad) y console=ttyS1,115200n8 . ttyS1 efectivamente es el puerto serie #2 y 115200 (baudios) es la velocidad por defecto el puerto virtual de iLo.

Finalmente deberemos configurar que se muestre el típico prompt de login a través del puerto serie. El encargado de esto es el propio proceso init y lo configuraremos en /etc/inittab :

S1:2345:respawn:/sbin/agetty ttyS1 115200 vt102

Para hacer que init recargue el fichero de configuración inittab podemos ejecutar un init -q y así no tendremos que reiniciar la máquina :-) .

Como última cosa, deberemos probar todo esto ;-) . Lo habitual es conectarse por telnet/SSH a la tarjeta iLo y desde ahí lanzar el cliente serie virtual , tal que así :

# telnet servidor1-ilo  
Trying 10.0.0.55...  
Connected to servidor1-ilo (10.0.0.55).  
Escape character is '^]'.  
Login Name: cuenta_admin  
Password: ********  
User:cuenta_admin logged-in to ILOGB8ZZZZZZ.(10.0.0.55)  
iLO 2 Standard 1.78 at 15:43:13 Jun 10 2009  
Server Name: servidor1  
Server Power: On

hpiLO->  
hpiLO-> vsp

Starting virtual serial port.  
Press 'ESC (' to return to the CLI Session.

hpiLO-> Virtual Serial Port active: IO=0x02F8 INT=3

Red Hat Enterprise Linux Server release 5.4 (Tikanga)  
Kernel 2.6.18-164.el5 on an x86_64

servidor1 login:  
Red Hat Enterprise Linux Server release 5.4 (Tikanga)  
Kernel 2.6.18-164.el5 on an x86_64

servidor1 login:  
ESC(  
hpiLO->  
hpiLO-> exit  
status=0  
status_tag=COMMAND COMPLETED

CLI session stopped  
Connection closed by foreign host.  
#

Como nota relevante, hay que decir que es necesaria una secuencia de escape para volver desde el SO a la iLo y vicevesa: es ESC( , es decir, pulsar escape y luego abrir_paréntesis ;-) . Esto es necesario porque si no, la iLo no sabe cuando una pulsación de teclas es dirigida al SO o ella misma. Con esta combinación tan poco frecuente es posible alternar entre ambos.

La ventaja fundamental del método expuesto es que no nos hace falta la compra de licencias de iLo para tener un acceso fuera de banda al SO. Nos serviría, por ejemplo, en caso de perder la conectividad por red debido a un fallo humano configurando el firewall, las rutas del servidor, etc. O incluso en el caso de que sea necesario pasar el servidor a single user para realizar alguna labor de mantenimiento. Sin embargo, en caso de destrucción total del SO, no nos serviría dado que esto cuenta con que el sistema operativo esté mínimamente usable (y por defecto, la mayoría de LiveCDs de rescate no tienen una configuración de puerto serie por defecto).

Edit (2010-06-23): me he dado cuenta que, si queremos logarnos como root, posiblemente tengamos que añadir TTYS1 como tty segura para root (esto dependiendo de la distro y su configuración de PAM). En RHEL simplemente es necesario añadirlo al final de /etc/securetty :

# cat /etc/securetty  
[... cosas ...]  
ttyS1