# User Mode Linux driver

The UML driver for libvirt allows use and management of paravirtualized guests built for User Mode Linux. UML requires no special support in the host kernel, so can be used by any user of any linux system, provided they have enough free RAM for their guest's needs, though there are certain restrictions on network connectivity unless the administrator has pre-created TAP devices.

## Project Links

- The User Mode Linux paravirtualized kernel

## Connections to UML driver

The libvirt UML driver follows the QEMU driver in providing two types of connection. There is one privileged instance per host, which runs as root. This is called the "system" instance, and allows full use of all host resources. Then, there is a per-user unprivileged "session", instance. This has more restricted capabilities, and may require the host administrator to setup certain resources ahead of time to allow full integration with the network. Example connection URIs are

    uml:///session                       (local access to per-user instance)
    uml+unix:///session                  (local access to per-user instance)

    uml:///system                        (local access to system instance)
    uml+unix:///system                   (local access to system instance)
    uml://example.com/system             (remote access, TLS/x509)
    uml+tcp://example.com/system         (remote access, SASl/Kerberos)
    uml+ssh://root@example.com/system    (remote access, SSH tunnelled)

## Example XML configuration

User mode Linux driver only supports directly kernel boot at this time. A future driver enhancement may allow a paravirt bootloader in a similar style to Xen's pygrub. For now though, the UML kernel must be stored on the host and referenced explicitly in the "os" element. Since UML is a paravirtualized technology, the kernel "type" is set to "uml"

There is not yet support for networking in the driver, but disks can be specified in the usual libvirt manner. The main variation is the target device naming scheme "ubd0", and bus type of "uml".

Once booted the primary console is connected to a PTY, and thus accessible with "virsh console" or equivalent tools

    <domain type='uml'>
      <name>demo</name>
      <uuid>b4433fc2-a22e-ffb3-0a3d-9c173b395800</uuid>
      <memory>500000</memory>
      <currentMemory>500000</currentMemory>
      <vcpu>1</vcpu>
      <os>
        <type arch='x86_64'>uml</type>
        <kernel>/home/berrange/linux-uml-2.6.26-x86_64</kernel>
      </os>
      <devices>
        <disk type='file' device='disk'>
          <source file='/home/berrange/FedoraCore6-AMD64-root_fs'/>
          <target dev='ubd0' bus='uml'/>
        </disk>
        <console type='pty'/>
      </devices>
    </domain>