+Thu May 21 15:20:22 BST 2009 Daniel P. Berrange <berrange@redhat.com>
+
+ * docs/drvqemu.html[.in], docs/drvxen.html[.in]: Add docs on
+ use of new domain XML conversions
+
Thu May 21 15:16:22 BST 2009 Daniel P. Berrange <berrange@redhat.com>
* src/qemu_driver.c, src/qemu_conf.c, src/qemu_conf.h: Add new
</div>
<div id="content">
<h1>QEMU/KVM hypervisor driver</h1>
+ <ul><li>
+ <a href="#prereq">Deployment pre-requisites</a>
+ </li><li>
+ <a href="#uris">Connections to QEMU driver</a>
+ </li><li>
+ <a href="#imex">Import and export of libvirt domain XML configs</a>
+ <ul><li>
+ <a href="#xmlimport">Converting from QEMU args to domain XML</a>
+ </li><li>
+ <a href="#xmlexport">Converting from domain XML to QEMU args</a>
+ </li></ul>
+ </li><li>
+ <a href="#xmlconfig">Example domain XML config</a>
+ </li></ul>
<p>
The libvirt QEMU driver can manage any QEMU emulator from version 0.8.1
or later. It can also manage anything that provides the same QEMU command
line syntax and monitor interaction. This includes KVM, and Xenner.
</p>
- <h2>Deployment pre-requisites</h2>
+ <h2>
+ <a name="prereq" id="prereq">Deployment pre-requisites</a>
+ </h2>
<ul><li>
<strong>QEMU emulators</strong>: The driver will probe <code>/usr/bin</code>
for the presence of <code>qemu</code>, <code>qemu-system-x86_64</code>,
node. If both are found, then Xen paravirtualized guests can be run using
the KVM hardware acceleration.
</li></ul>
- <h2>Connections to QEMU driver</h2>
+ <h2>
+ <a name="uris" id="uris">Connections to QEMU driver</a>
+ </h2>
<p>
The libvirt QEMU driver is a multi-instance driver, providing a single
system wide privileged driver (the "system" instance), and per-user
qemu://example.com/system (remote access, TLS/x509)
qemu+tcp://example.com/system (remote access, SASl/Kerberos)
qemu+ssh://root@example.com/system (remote access, SSH tunnelled)
+ </pre>
+ <h2>
+ <a name="imex" id="imex">Import and export of libvirt domain XML configs</a>
+ </h2>
+ <p>The QEMU driver currently supports a single native
+ config format known as <code>qemu-argv</code>. The data for this format
+ is expected to be a single line first a list of environment variables,
+ then the QEMu binary name, finally followed by the QEMU command line
+ arguments</p>
+ <h3>
+ <a name="xmlimport" id="xmlimport">Converting from QEMU args to domain XML</a>
+ </h3>
+ <p>
+ The <code>virsh domxml-from-native</code> provides a way to convert an
+ existing set of QEMU args into a guest description using libvirt Domain XML
+ that can then be used by libvirt.
+ </p>
+ <pre>$ cat > demo.args <<EOF
+LC_ALL=C PATH=/bin HOME=/home/test USER=test \
+LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 \
+-nographic -monitor pty -no-acpi -boot c -hda \
+/dev/HostVG/QEMUGuest1 -net none -serial none \
+-parallel none -usb
+EOF
+$ virsh domxml-from-native qemu-argv demo.args
+<domain type='qemu'>
+ <uuid>00000000-0000-0000-0000-000000000000</uuid>
+ <memory>219136</memory>
+ <currentMemory>219136</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ </disk>
+ </devices>
+</domain>
+ </pre>
+ <p>NB, don't include the literral \ in the args, put everything on one line</p>
+ <h3>
+ <a name="xmlexport" id="xmlexport">Converting from domain XML to QEMU args</a>
+ </h3>
+ <p>
+ The <code>virsh domxml-to-native</code> provides a way to convert a
+ guest description using libvirt Domain XML, into a set of QEMU args
+ that can be run manually.
+ </p>
+ <pre>$ cat > demo.xml <<EOF
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory>219200</memory>
+ <currentMemory>219200</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ </disk>
+ </devices>
+</domain>
+EOF
+$ virsh domxml-to-native qemu-argv demo.xml
+ LC_ALL=C PATH=/usr/bin:/bin HOME=/home/test \
+ USER=test LOGNAME=test /usr/bin/qemu -S -M pc \
+ -no-kqemu -m 214 -smp 1 -name QEMUGuest1 -nographic \
+ -monitor pty -no-acpi -boot c -drive \
+ file=/dev/HostVG/QEMUGuest1,if=ide,index=0 -net none \
+ -serial none -parallel none -usb
</pre>
<h2>
<a name="xmlconfig" id="xmlconfig">Example domain XML config</a>
<body>
<h1>QEMU/KVM hypervisor driver</h1>
+ <ul id="toc"></ul>
+
<p>
The libvirt QEMU driver can manage any QEMU emulator from version 0.8.1
or later. It can also manage anything that provides the same QEMU command
line syntax and monitor interaction. This includes KVM, and Xenner.
</p>
- <h2>Deployment pre-requisites</h2>
+ <h2><a name="prereq">Deployment pre-requisites</a></h2>
<ul>
<li>
</li>
</ul>
- <h2>Connections to QEMU driver</h2>
+ <h2><a name="uris">Connections to QEMU driver</a></h2>
<p>
The libvirt QEMU driver is a multi-instance driver, providing a single
qemu+ssh://root@example.com/system (remote access, SSH tunnelled)
</pre>
+ <h2><a name="imex">Import and export of libvirt domain XML configs</a></h2>
+
+ <p>The QEMU driver currently supports a single native
+ config format known as <code>qemu-argv</code>. The data for this format
+ is expected to be a single line first a list of environment variables,
+ then the QEMu binary name, finally followed by the QEMU command line
+ arguments</p>
+
+ <h3><a name="xmlimport">Converting from QEMU args to domain XML</a></h3>
+
+ <p>
+ The <code>virsh domxml-from-native</code> provides a way to convert an
+ existing set of QEMU args into a guest description using libvirt Domain XML
+ that can then be used by libvirt.
+ </p>
+
+ <pre>$ cat > demo.args <<EOF
+LC_ALL=C PATH=/bin HOME=/home/test USER=test \
+LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 \
+-nographic -monitor pty -no-acpi -boot c -hda \
+/dev/HostVG/QEMUGuest1 -net none -serial none \
+-parallel none -usb
+EOF
+$ virsh domxml-from-native qemu-argv demo.args
+<domain type='qemu'>
+ <uuid>00000000-0000-0000-0000-000000000000</uuid>
+ <memory>219136</memory>
+ <currentMemory>219136</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ </disk>
+ </devices>
+</domain>
+ </pre>
+
+ <p>NB, don't include the literral \ in the args, put everything on one line</p>
+
+ <h3><a name="xmlexport">Converting from domain XML to QEMU args</a></h3>
+
+ <p>
+ The <code>virsh domxml-to-native</code> provides a way to convert a
+ guest description using libvirt Domain XML, into a set of QEMU args
+ that can be run manually.
+ </p>
+
+ <pre>$ cat > demo.xml <<EOF
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory>219200</memory>
+ <currentMemory>219200</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <target dev='hda' bus='ide'/>
+ </disk>
+ </devices>
+</domain>
+EOF
+$ virsh domxml-to-native qemu-argv demo.xml
+ LC_ALL=C PATH=/usr/bin:/bin HOME=/home/test \
+ USER=test LOGNAME=test /usr/bin/qemu -S -M pc \
+ -no-kqemu -m 214 -smp 1 -name QEMUGuest1 -nographic \
+ -monitor pty -no-acpi -boot c -drive \
+ file=/dev/HostVG/QEMUGuest1,if=ide,index=0 -net none \
+ -serial none -parallel none -usb
+ </pre>
+
<h2><a name="xmlconfig">Example domain XML config</a></h2>
<h3>QEMU emulated guest on x86_64</h3>
</div>
<div id="content">
<h1>Xen hypervisor driver</h1>
+ <ul><li>
+ <a href="#prereq">Deployment pre-requisites</a>
+ </li><li>
+ <a href="#uri">Connections to Xen driver</a>
+ </li><li>
+ <a href="#imex">Import and export of libvirt domain XML configs</a>
+ <ul><li>
+ <a href="#xmlimport">Converting from XM config files to domain XML</a>
+ </li><li>
+ <a href="#xmlexport">Converting from domain XML to XM config files</a>
+ </li></ul>
+ </li><li>
+ <a href="#xmlconfig">Example domain XML config</a>
+ </li></ul>
<p>
The libvirt Xen driver provides the ability to manage virtual machines
on any Xen release from 3.0.1 onwards.
</p>
- <h2>Deployment pre-requisites</h2>
+ <h2>
+ <a name="prereq" id="prereq">Deployment pre-requisites</a>
+ </h2>
<p>
The libvirt Xen driver uses a combination of channels to manage Xen
virtual machines.
the <code>/etc/xen</code> directory. It is important not to place
any other non-config files in this directory.
</li></ul>
- <h2>Connections to Xen driver</h2>
+ <h2>
+ <a name="uri" id="uri">Connections to Xen driver</a>
+ </h2>
<p>
The libvirt Xen driver is a single-instance privileged driver,
with a driver name of 'xen'. Some example conection URIs for
xen://example.com/ (remote access, TLS/x509)
xen+tcp://example.com/ (remote access, SASl/Kerberos)
xen+ssh://root@example.com/ (remote access, SSH tunnelled)
+ </pre>
+ <h2>
+ <a name="imex" id="imex">Import and export of libvirt domain XML configs</a>
+ </h2>
+ <p>The Xen driver currently supports two native
+ config formats. The first known as <code>xen-xm</code> is the format
+ used by the XM tool for files in <code>/etc/xen</code>. The second
+ known as <code>xen-sxpr</code>, is the format used for interacting
+ with the XenD's legacy HTTP RPC service.</p>
+ <h3>
+ <a name="xmlimport" id="xmlimport">Converting from XM config files to domain XML</a>
+ </h3>
+ <p>
+ The <code>virsh domxml-from-native</code> provides a way to convert an
+ existing set of XM config files into a guest description using libvirt Domain XML
+ that can then be used by libvirt.
+ </p>
+ <pre>$ virsh -c xen:/// domxml-from-native xen-xm rhel5.cfg
+<domain type='xen'>
+ <name>rhel5pv</name>
+ <uuid>8f07fe28-753f-2729-d76d-bdbd892f949a</uuid>
+ <memory>2560000</memory>
+ <currentMemory>307200</currentMemory>
+ <vcpu>4</vcpu>
+ <bootloader>/usr/bin/pygrub</bootloader>
+ <os>
+ <type arch='x86_64' machine='xenpv'>linux</type>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+ <disk type='file' device='disk'>
+ <driver name='tap' type='aio'/>
+ <source file='/var/lib/xen/images/rhel5pv.img'/>
+ <target dev='xvda' bus='xen'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <driver name='tap' type='qcow'/>
+ <source file='/root/qcow1-xen.img'/>
+ <target dev='xvdd' bus='xen'/>
+ </disk>
+ <interface type='bridge'>
+ <mac address='00:16:3e:60:36:ba'/>
+ <source bridge='xenbr0'/>
+ </interface>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
+ <input type='mouse' bus='xen'/>
+ <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/>
+ </devices>
+</domain>
+ </pre>
+ <h3>
+ <a name="xmlexport" id="xmlexport">Converting from domain XML to XM config files</a>
+ </h3>
+ <p>
+ The <code>virsh domxml-to-native</code> provides a way to convert a
+ guest description using libvirt Domain XML, into the XM config file
+ format.
+ </p>
+ <pre># virsh -c xen:/// domxml-to-native xen-xm rhel5pv.xml
+name = "rhel5pv"
+uuid = "8f07fe28-753f-2729-d76d-bdbd892f949a"
+maxmem = 2500
+memory = 300
+vcpus = 4
+bootloader = "/usr/bin/pygrub"
+kernel = "/var/lib/xen/boot_kernel.0YK-cS"
+ramdisk = "/var/lib/xen/boot_ramdisk.vWgrxK"
+extra = "ro root=/dev/VolGroup00/LogVol00 rhgb quiet"
+on_poweroff = "destroy"
+on_reboot = "restart"
+on_crash = "restart"
+sdl = 0
+vnc = 1
+vncunused = 1
+vnclisten = "0.0.0.0"
+disk = [ "tap:aio:/var/lib/xen/images/rhel5pv.img,xvda,w", "tap:qcow:/root/qcow1-xen.img,xvdd,w" ]
+vif = [ "mac=00:16:3e:60:36:ba,bridge=virbr0,script=vif-bridge,vifname=vif5.0" ]
</pre>
<h2>
<a name="xmlconfig" id="xmlconfig">Example domain XML config</a>
<body>
<h1>Xen hypervisor driver</h1>
+ <ul id="toc"></ul>
+
<p>
The libvirt Xen driver provides the ability to manage virtual machines
on any Xen release from 3.0.1 onwards.
</p>
- <h2>Deployment pre-requisites</h2>
+ <h2><a name="prereq">Deployment pre-requisites</a></h2>
<p>
The libvirt Xen driver uses a combination of channels to manage Xen
</li>
</ul>
- <h2>Connections to Xen driver</h2>
+ <h2><a name="uri">Connections to Xen driver</a></h2>
<p>
The libvirt Xen driver is a single-instance privileged driver,
xen+ssh://root@example.com/ (remote access, SSH tunnelled)
</pre>
+ <h2><a name="imex">Import and export of libvirt domain XML configs</a></h2>
+
+ <p>The Xen driver currently supports two native
+ config formats. The first known as <code>xen-xm</code> is the format
+ used by the XM tool for files in <code>/etc/xen</code>. The second
+ known as <code>xen-sxpr</code>, is the format used for interacting
+ with the XenD's legacy HTTP RPC service.</p>
+
+ <h3><a name="xmlimport">Converting from XM config files to domain XML</a></h3>
+
+ <p>
+ The <code>virsh domxml-from-native</code> provides a way to convert an
+ existing set of XM config files into a guest description using libvirt Domain XML
+ that can then be used by libvirt.
+ </p>
+
+ <pre>$ virsh -c xen:/// domxml-from-native xen-xm rhel5.cfg
+<domain type='xen'>
+ <name>rhel5pv</name>
+ <uuid>8f07fe28-753f-2729-d76d-bdbd892f949a</uuid>
+ <memory>2560000</memory>
+ <currentMemory>307200</currentMemory>
+ <vcpu>4</vcpu>
+ <bootloader>/usr/bin/pygrub</bootloader>
+ <os>
+ <type arch='x86_64' machine='xenpv'>linux</type>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+ <disk type='file' device='disk'>
+ <driver name='tap' type='aio'/>
+ <source file='/var/lib/xen/images/rhel5pv.img'/>
+ <target dev='xvda' bus='xen'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <driver name='tap' type='qcow'/>
+ <source file='/root/qcow1-xen.img'/>
+ <target dev='xvdd' bus='xen'/>
+ </disk>
+ <interface type='bridge'>
+ <mac address='00:16:3e:60:36:ba'/>
+ <source bridge='xenbr0'/>
+ </interface>
+ <console type='pty'>
+ <target port='0'/>
+ </console>
+ <input type='mouse' bus='xen'/>
+ <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/>
+ </devices>
+</domain>
+ </pre>
+
+ <h3><a name="xmlexport">Converting from domain XML to XM config files</a></h3>
+
+ <p>
+ The <code>virsh domxml-to-native</code> provides a way to convert a
+ guest description using libvirt Domain XML, into the XM config file
+ format.
+ </p>
+
+ <pre># virsh -c xen:/// domxml-to-native xen-xm rhel5pv.xml
+name = "rhel5pv"
+uuid = "8f07fe28-753f-2729-d76d-bdbd892f949a"
+maxmem = 2500
+memory = 300
+vcpus = 4
+bootloader = "/usr/bin/pygrub"
+kernel = "/var/lib/xen/boot_kernel.0YK-cS"
+ramdisk = "/var/lib/xen/boot_ramdisk.vWgrxK"
+extra = "ro root=/dev/VolGroup00/LogVol00 rhgb quiet"
+on_poweroff = "destroy"
+on_reboot = "restart"
+on_crash = "restart"
+sdl = 0
+vnc = 1
+vncunused = 1
+vnclisten = "0.0.0.0"
+disk = [ "tap:aio:/var/lib/xen/images/rhel5pv.img,xvda,w", "tap:qcow:/root/qcow1-xen.img,xvdd,w" ]
+vif = [ "mac=00:16:3e:60:36:ba,bridge=virbr0,script=vif-bridge,vifname=vif5.0" ]
+ </pre>
<h2><a name="xmlconfig">Example domain XML config</a></h2>