Serial Consoles in RHEL6
I’m starting to get my server room set up again, so I can start experimenting with VAXes and VMS and things of that nature.
Several years ago, I build a terminal server. It’s a little Mini-ITX machines with a JetWay JNC92-230-LF motherboard with proprietary daughter board, the AD4COMC1, that adds four serial ports for a total of six. The idea was to use this as a terminal server for all my older hardware. Never really got around to it, because I didn’t seem to have the time. So it became a “core infrastructure” box, that hosts things like DNS, DHCP, VPN, et cetera.
I now have a some time to set up my VAXes again, so the project begins anew. I have two goals here. First, is to attach a permanent serial console to my machine, and second is to ensure that all the serial ports are working and can be attached to other machines.
First, I had to get all the IRQs set up right in the BIOS. This took some tinkering:
[root@sam ~]# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 RTS|DTR
1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 RTS|DTR
2: uart:16550A port:000003E8 irq:4 tx:0 rx:0 RTS|DTR
3: uart:16550A port:000002E8 irq:3 tx:0 rx:0 RTS|DTR
4: uart:16550A port:000004E0 irq:4 tx:0 rx:0 RTS|DTR
5: uart:16550A port:000004E8 irq:3 tx:0 rx:0 RTS|DTR
By default, the Linux Kernel only configures four serial ports. To
enable the additional two, I had to add 8250.nr_uarts=6
to my kernel
parameters.
So, I figure now the serial console is just as easy as adding another
getty to inittab
…but, boy-howdy, am I out of date. Apparently, RHEL6
uses part or all of Upstart as it’s init system, so no more
inittab. Luckily, it’s fairly easy to add a new getty with
Upstart. Just add a .conf file to /etc/init
with the name of the
terminal, and some other pertinant details. I have a VT420 that I’m
running at 9600 8N1, so my configuration reflects this.
stop on runlevel [S016]
start on runlevel [23]
respawn
exec agetty -h -L -w /dev/ttyS0 9600 vt420
The getty will be named whatever the file is named. So, if it’s
/etc/init/ttyS0.conf
, then it will be called ttyS0
. The initctl
command can be used to reload the configuration and check the status
of all the ttys:
[root@sam init]# initctl reload-configuration
[root@sam init]# initctl list
rc stop/waiting
tty (/dev/tty3) start/running, process 1262
tty (/dev/tty2) start/running, process 1260
tty (/dev/tty1) start/running, process 1258
tty (/dev/tty6) start/running, process 1268
tty (/dev/tty5) start/running, process 1266
tty (/dev/tty4) start/running, process 1264
plymouth-shutdown stop/waiting
control-alt-delete stop/waiting
rcS-emergency stop/waiting
kexec-disable stop/waiting
quit-plymouth stop/waiting
rcS stop/waiting
prefdm stop/waiting
init-system-dbus stop/waiting
splash-manager stop/waiting
start-ttys stop/waiting
ttyS0 start/running, process 731
rcS-sulogin stop/waiting
serial stop/waiting
As you can see ttyS0
is started. If it’s not, initctl
start ttyS0
will start it.
Lastly, add a line for ttyS0
to /etc/securetty
, so that root can log
into the terminal directly
The next step is configuring GRUB to use the serial port as a boot console, but that will be for another day.