How to enable and use the serial terminal of a HP Microserver Gen9?

I have a HP ProLiant Microserver Gen9. It has HP ILO version 4, but the Java based Remote Console doesn't work reliably and I can't use it after the POST screen in the free version of ILO (asks me to buy an ILO Advanced license). So I want to use the serial console instead to get a login on the server.

What do I have to enable to get all phases (POST, BIOS configuration, GRUB's output, the eventual login prompt) of the boot process in a serial console via the server's ILO network port? How do I connect to it?


The ILO port on the HP server by default asks for an IP via DHCP. So you just need to plug it into a network that has a DHCP server running. It will announce itself with a host name like ILOCZ12345678 which should make it easier to find in your router's DHCP lease table, or in e.g. journalctl/syslog if you run a DHCP server (e.g. isc-dhcp-server) on a system like Ubuntu.

After you've found the IP (say 1.2.3.4), you can connect to ILO's GUI interface via https://1.2.3.4. But that's not what we're looking for, we want the serial console. So instead, use ILO's SSH interface: ssh [email protected]. The default password is on the little paper tag that comes with the Microserver.

Note this also works when the server is shut down as long as it has a power cable stuck into it (that is the point of ILO).

In there, type ? to see all options. Excerpt:

POWER    : Control server power.
UID      : Control Unit-ID light.
ONETIMEBOOT: Access One-Time Boot setting.
NMI      : Generate an NMI.
VM       : Virtual media commands.
LANGUAGE : Command to set or get default language
VSP      : Invoke virtual serial port.
TEXTCONS : Invoke Remote Text Console.
TESTTRAP : Sends a test SNMP trap to the configured alert destinations.

We choose VSP to get the serial port; TEXTCONS would probably also be nice, but you'd have to buy the Advanced ILO license to use it.

Now, once we do that, with a running system, it just hangs at

</>hpiLO-> VSP

Virtual Serial Port Active: COM2

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

That's because by default, Ubuntu (I'm using 16.04 here) doesn't make a login prompt available via the serial port. We'll change that later. First we reboot to see that the BIOS config already works.

Seeing it boot via the serial port

In another ILO ssh session, reboot using:

</>hpiLO-> power reset

status=0
status_tag=COMMAND COMPLETED
Sun Feb  5 20:05:59 2017

Server resetting .......

After some waiting time, you'll notice that the session in which VSP is running has cleared its screen.

Then appears:

                            4096 MB Installed                                   

ProLiant System BIOS - J06 (11/02/2015)                                         
Copyright 1982, 2015 Hewlett-Packard Development Company, L.P.                  



1 Processor(s) detected, 2 total cores enabled, Hyperthreading is not supported
Proc 1:  Intel(R) Celeron(R) CPU G1610T @ 2.30GHz      
HP Power Profile Mode: Custom
Power Regulator Mode: Dynamic Power Savings

Redundant ROM Detected - This system contains a valid backup System ROM.
Inlet Ambient Temperature: 18C/64F

HP SmartMemory authenticated in all populated DIMM slots.

HP AHCI SATA Controller (v0.90)            
Copyright (c) 2011, Hewlett-Packard Development Company, L.P.
HP AHCI SATA Controller (v0.84)             WD30EFRX-68EUZN0
   Port3: S.M.A.R.T Capable Hard Disk - WDC WD30EFRX-68EUZN0
Copyright (c) 2011, Hewlett-Packard Development Company, L.P.
                                                                  <F9 = Setup>
iLO 4 Standard                           
iLO 4 v2.50 Sep 23 2016 192.168.178.106

Broadcom NetXtreme Ethernet Boot Agent
Copyright (C) 2000-2015 Broadcom Corporation
All rights reserved.
Press Ctrl-S to enter Configuration Menu

That's the POST screen. Wait a bit and see:

 Press "F9" key for ROM-Based Setup Utility
 Press "F10" key for Intelligent Provisioning
 Press "F11" key for Default Boot Override Options
 Press "F12" key for Network Boot
 For access via BIOS Serial Console
 Press "ESC+9" for ROM-Based Setup Utility
 Press "ESC+0" for Intelligent Provisioning
 Press "ESC+!" for Default Boot Override Options
 Press "ESC+@" for Network Boot

If you want to configure the BIOS, now is your time: This screen appears only for 1 second or so. The F* keys typically don't work, they need to be escaped: You literally have to press the ESC key and then the number/symbol as it says above. E.g. ESC and then 5 is for F5.

Now, without further settings, we get silence at the serial port, because as mentioned above, neither GRUB2 nor the Ubuntu login terminals output by default to the serial port in 16.04.

So we configure the server (now via SSH) to use the serial port.

Making GRUB2 use the serial port

I follwed the instructions at https://www.hiroom2.com/2016/06/06/ubuntu-16-04-grub2-and-linux-with-serial-console/ changing /etc/default/grub as described (- means comment out the line with #, + means add the line):

GRUB_

DEFAULT=0
-GRUB_HIDDEN_TIMEOUT=0
-GRUB_HIDDEN_TIMEOUT_QUIET=true
-GRUB_TIMEOUT=10
+GRUB_TIMEOUT=1
 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
-GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
-GRUB_CMDLINE_LINUX=""
+GRUB_CMDLINE_LINUX_DEFAULT=""
+GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200"

-#GRUB_TERMINAL=console
+GRUB_TERMINAL="console serial"
+GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

The timeout of 10 seconds is set because the serial connection redraws the screen extremely slowly, and we want enough time to be able to cancel the timeout by pressing e.g. key-down in GRUB.

After changing the file as described, run sudo update-grub, and reboot.

You should now see in your VSP session the following after the POST screen:

error: serial port `com2' isn't found
error: terminal `serial' isn't found
error: terminal `serial' isn't found
error: no video mode activated

We ignore this (if you know how to get rid of this, please comment). After a shor time, this appears:

 GNU GRUB  version 2.02~beta2-36ubuntu3.6

 +----------------------------------------------------------------------------+
 |*Ubuntu                                                                     |
 | Advanced options for Ubuntu                                                |
 | Memory test (memtest86+)                                                   |
 | Memory test (memtest86+, serial console 115200)                            |
 |                                                                            |
 |                                                                            | 
 +----------------------------------------------------------------------------+

      Use the  and  keys to select which entry is highlighted.          
      Press enter to boot the selected OS, `e' to edit the commands       
      before booting or `c' for a command-line.                           

That's a normal GRUB screen, and you can move the * pointer with the up and down keys.

Making the Ubuntu login use the serial port

The following bits are inspired by http://0pointer.de/blog/projects/serial-console.html

sudo cp /lib/systemd/system/[email protected] /etc/systemd/system/[email protected]

Now edit /etc/systemd/system/[email protected]:

Change the line

ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM

to

ExecStart=-/sbin/agetty %I 115200 vt100-nav

We especially care to set the mode vt100-nav -- I found that the login doesn't appear without this change.

I'm not sure why we have to use ttyS1 here while in GRUB we configured ttyS0 -- but it doesn't work for me to use S0 here. If somebody knows why, please comment.

Start the tty via:

sudo systemctl start [email protected]

You should now see a login prompt in your VSP session. Make this happen automatically at boot using:

sudo systemctl enable [email protected]

And reboot. You should now see all the output in VSP, from POST to GRUB2 to the login prompt.