Ubuntu KVM 3: Virsh Console Fix
You may find that immediately after installing your guest, you cannot connect to the guest via `virsh console`. Follow along as I add a serial console, designate it for use by grub, and add it to the guest's configuration file for virsh to use.
Note* For these articles I'm going to assume a clean Ubuntu 14.04 Trusty server install with minimal extras (nano, htop, openssh-server etc.) and/or the outcome of previous articles.
Libvirt and Virsh can control the guest's state in a number of ways. Though I typically connect to a running guest through SSH, there are times where I want to connect to a basic console for maintenance work. Out of the box, `ubuntu-vm-builder` does not create a serial console that virsh can use for these times.
Create new serial console on guest
To create the console I make a new file at /etc/init/ttyS0.conf with the following contents:
start on stopped rc or RUNLEVEL= stop on runlevel [!2345] respawn exec /sbin/getty -L 115200 ttyS0 vt102
Upstart will take care of getting this serial console running for us now
If you don't need, or want, to see the boot sequence within virsh, you can skip to the VM configuration edit piece.
Get grub to use this console
Edit /etc/default/grub to make the first 20 or so lines look more like this:
#/etc/default/grub # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=3 GRUB_HIDDEN_TIMEOUT_QUITE=false GRUB_TIMEOUT=10 GRUB_DISTRIBUTON=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="text console=tty0 console=ttyS0,115200n8" # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console GRUB_TERMINAL=serial GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE
As described int this file, you must now run `update-grub` from your shell.
Time to edit /boot/grub/menu.lst to modify the very bottom of this file, where there are lines that look like "kernel ... ro ..."
#bottom kernel section kernel ... ro vga=normal console=tty0 console=ttyS0,115200n8 kernel ... ro vga=normal console=tty0 console=ttyS0,115200n8 single
Edit Virtual Machine Configuration to add Serial Console
Pop over into your physical host and edit the configuration for your guest, e.g. `sudo virsh edit demo1`. Add the following lines into the <devices> node.
<serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console>
You can now restart your guest and connect to the guest's console, e.g. sudo virsh console demo1