Log early boot of Ironic VMs to serial with sgabios

This adds sgabios to the list of packages for Ironic and configures
the libvirt domain to redirect BIOS messages to serial via sgabios,
when console logging is enabled.  The sgabios package in Ubuntu
currently has an apparmor bug, so that is worked around here.

This allows visibility into early boot of Ironic nodes and should
help get to the bottom of a frequent failure we're seeing in the gate.

Change-Id: Ifd18851e2d23d198d36e67883a81afc6a92d2a58
Related-Bug: #1393099
This commit is contained in:
Adam Gandelman 2014-11-17 12:26:08 -08:00
parent 9bfdea87a6
commit ffd66ad77f
5 changed files with 13 additions and 0 deletions

View File

@ -12,6 +12,7 @@ python-libvirt
qemu qemu
qemu-kvm qemu-kvm
qemu-utils qemu-utils
sgabios
syslinux syslinux
tftpd-hpa tftpd-hpa
xinetd xinetd

View File

@ -9,6 +9,7 @@ net-tools
openssh-clients openssh-clients
openvswitch openvswitch
python-libguestfs python-libguestfs
sgabios
syslinux syslinux
tftp-server tftp-server
xinetd xinetd

View File

@ -147,6 +147,14 @@ function install_ironic {
if [[ "$IRONIC_IPXE_ENABLED" == "True" ]] ; then if [[ "$IRONIC_IPXE_ENABLED" == "True" ]] ; then
install_apache_wsgi install_apache_wsgi
fi fi
if [[ "$IRONIC_VM_LOG_CONSOLE" == "True" ]] && is_ubuntu; then
# Ubuntu packaging+apparmor issue prevents libvirt from loading
# the ROM from /usr/share/misc. Workaround by installing it directly
# to a directory that it can read from. (LP: #1393548)
sudo rm -rf /usr/share/qemu/sgabios.bin
sudo cp /usr/share/misc/sgabios.bin /usr/share/qemu/sgabios.bin
fi
} }
# install_ironicclient() - Collect sources and prepare # install_ironicclient() - Collect sources and prepare

View File

@ -78,8 +78,10 @@ def main():
params['emulator'] = "/usr/bin/qemu-kvm" params['emulator'] = "/usr/bin/qemu-kvm"
if args.console_log: if args.console_log:
params['bios_serial'] = "<bios useserial='yes'/>"
params['console_log'] = CONSOLE_LOG % {'console_log': args.console_log} params['console_log'] = CONSOLE_LOG % {'console_log': args.console_log}
else: else:
params['bios_serial'] = ''
params['console_log'] = '' params['console_log'] = ''
libvirt_template = source_template % params libvirt_template = source_template % params
conn = libvirt.open("qemu:///system") conn = libvirt.open("qemu:///system")

View File

@ -6,6 +6,7 @@
<type arch='%(arch)s' machine='pc-1.0'>hvm</type> <type arch='%(arch)s' machine='pc-1.0'>hvm</type>
<boot dev='%(bootdev)s'/> <boot dev='%(bootdev)s'/>
<bootmenu enable='no'/> <bootmenu enable='no'/>
%(bios_serial)s
</os> </os>
<features> <features>
<acpi/> <acpi/>