Redhat 6.5-6.7 vs Dell Poweredge R430 serial console

Situation, normal day at work, need to port a working on a Dell 620r serial console friendly kickstart image to updated hardware, in this case a Dell R430.

I’m working over the integrated Dell serial console(ssh->idrac) with no external serial connectivity.

I expect the port to take about 2 hours, I am very wrong.

The installation via PXE + kickstart works fine, serial output is seen throughout, BUT upon reboot. The system is bricked and non-bootable. The system POSTs, then fails to show a grub boot menu and hangs indefinitely.  I PXE netbooted then examined the disks. The installation looks good, MBR looks good. grub.conf looks good.

After digging around on the internet, I found I was not the only person running into this:

https://access.redhat.com/discussions/2136671

This is the postmorten of what I found.

TL;DR

Default behavior or Redhat 6.5’s Anaconda installer leaves a grub bootloader configuration which causes bios/serial interaction conflict. The result of this conflict is a non-bootable system. Tweaking the installed grub.conf in kickstart’s post-installation allows for a workaround.

The Longer Version

No matter what bios COM settings were selected, it seemed post kickstart, grub.conf would contain serial –unit=1. The Documentation confirms this –unit=1 setting on pages 131-132 at: http://topics-cdn.dell.com/pdf/idrac8-with-lc-v2.05.05.05_User’s%20Guide_en-us.pdf. With –unit=1, the system would be unbootable with a message of ‘Booting from Hard drive C:’ Then nothing regardless of bios serial COM settings.

Further reading suggested grub.conf would be happier with only ‘console’ on the grub.conf terminal line, rather than ‘serial console’ which was the post kickstart installed option.

https://wiki.nikhef.nl/grid/Serial_Consoles

“Grub essentially should see a single console, called “console”, as the BIOS will take care of sending any output also to the serial line. If you would configure grub now to also talk to the serial (SoL) port, they’ll fight for the input, and you will have to wait for a very, very long time. Actually, you can wait forever, infinitely long.”

Tweaking both the ‘serial –unit=’ setting and the ‘terminal’ line yielded a working grub.conf. With this tweaked grub.conf, serial console shows boot time output over serial console, the kickstart output over serial console, and an installed r430 which will boot.

Difference between working grub.conf and Kickstart generated grub.conf

diff grub.conf.works grub.conf.ORIG
< serial –unit=0 –speed=115200
< terminal –timeout=2 console — > serial –unit=1 –speed=115200
> terminal –timeout=5 serial console

The working bits

– BIOS config
– PXE menu config
– Kickstart append lines
– Kickstart grub.conf %post tweaking
– Complete r430 working grub.conf

BIOS config

There were a couple of BIOS configurations which in conjunction with kickstart/pxe menu settings and %post tweaks would work with the r430s, one on COM1, one on COM2. The below config works, and is most similar to our previous Dell configurations.

/admin1-> racadm get bios.SerialCommSettings
[Key=BIOS.Setup.1-1#SerialCommSettings]
ConTermType=Vt100Vt220
ExtSerialConnector=Serial2
FailSafeBaud=115200
RedirAfterBoot=Enabled
SerialComm=OnConRedirCom2
SerialPortAddress=Serial1Com1Serial2Com2

PXE menu config

label tstr430
menu label tstr430
kernel media/rhel6u5/images/pxeboot/vmlinuz
append initrd=media/rhel6u5/images/pxeboot/initrd.img ks=http://192.168.0.240/r430tstsimple.cfg ksdevice=eth0 console=ttyS1,115200 biosdevname=0

Kickstart append lines

bootloader –location=mbr –driveorder=sda

This was sensitive. Adding a bootloader –append with “console=ttyS1” per our previous kickstarts put multiple console= lines in the resultant grub.conf’s kernel append lines. This would net a non bootable system.

# old settings were
# bootloader --location=mbr --driveorder=sda --append="console=ttyS1 biosdevname=0" 
# ^^^^ This would fail

Kickstart grub.conf %post tweaking

From the %post section of the kickstart, make sure grub.conf had the proper terminal and serial lines.

cp /boot/grub/grub.conf /boot/grub/grub.conf.ORIG
sed -i ‘s/^terminal.*/terminal –timeout=2 console/g’ /boot/grub/grub.conf
sed -i ‘s/^serial.*/serial –unit=0 –speed=115200/g’ /boot/grub/grub.conf

Complete r430 working grub.conf

Important bits in bold and italic.

Having multiple console= lines in grub.conf would result in bios+serial confict and a non booting system.

default=0
timeout=5
serial –unit=0 –speed=115200
terminal –timeout=2 console
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=fd18b121-a814-4b67-8475-96148770db91 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto console=ttyS1,115200 rd_NO_LVM rd_NO_DM
initrd /initramfs-2.6.32-431.el6.x86_64.img

For reference, the r430 tested

Hardware

Dell PowerEdge r430
Perc 730 Mini raid controller
2 x 480GB SSDs
4 x 6TB HDDs

Firmware
System BIOS Version 1.5.4
OS Version Redhat 6.5 (Santiago) Kernel 2.6.32-431.1.2.el6.x86_64
Perc 730 mini
Package Version 25.3.0.0016
Firmware Version 4.250.00-4402
NVDATA Version 3.1411.00-0019

This entry was posted in Nerd, Uncategorized. Bookmark the permalink.