How to enable and use the serial terminal of a HP Microserver Gen9?
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.
syslog if you run a DHCP server (e.g.
isc-dhcp-server) on a system like Ubuntu.
After you've found the IP (say
126.96.36.199), you can connect to ILO's GUI interface via
https://188.8.131.52. 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.
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.
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 "[email protected]" 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
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):
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]
Change the line
ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM
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.
textcons from the ILO ssh interface. This may require the ILO Advanced license, but at the same time, there's a very low barrier to obtaining one.
Most organizations aren't interested in making the virtual serial port work because it's time consuming.
Google for an ILO license
or obtain a demo license from HP
or just pay $25 for an ILO key from Amazon