Difference between revisions of "Xen"

From ArchWiki
Jump to: navigation, search
(Enabling Xen under Systemd)
(Create a domU "hard disk": Info on how Xen handles disks / partitions)
(40 intermediate revisions by 6 users not shown)
Line 5: Line 5:
 
[[es:Xen]]
 
[[es:Xen]]
 
[[ru:Xen]]
 
[[ru:Xen]]
This document explains how to setup Xen 4.2 in Arch. It uses the new oxenstored / xl toolstack (replaces the xend / xm toolstack which was deprecated in Xen 4.1).
+
{{Article summary start}}
 +
{{Article summary text|This article is about basic usage of Xen, including running Arch as both a Xen dom0 ''host'' and as a domU ''guest''.}}
 +
{{Article summary heading|Required software}}
 +
{{Article summary link|Xen|http://www.xen.org/}}
 +
{{Article summary heading|Related}}
 +
{{Article summary wiki|KVM}}
 +
{{Article summary wiki|QEMU}}
 +
{{Article summary wiki|VirtualBox}}
 +
{{Article summary wiki|VMware}}
 +
{{Article summary wiki|Moving an existing install into (or out of) a virtual machine}}
 +
{{Article summary end}}
  
==What is Xen?==
+
From [http://wiki.xen.org/wiki/Xen_Overview Xen Overview]:
According to the Xen development team:
+
:"''The Xen hypervisor, the powerful open source industry standard for virtualization, offers a powerful, efficient, and secure feature set for virtualization of x86, x86_64, IA64, PowerPC, and other CPU architectures. It supports a wide range of guest operating systems including Windows®, Linux®, Solaris®, and various versions of the BSD operating systems.''"
+
  
The Xen hypervisor is a thin layer of software which emulates a computer architecture.  It is started by the boot loader and allows several operating systems to run simultaneously on top of it. Once the Xen hypervisor is loaded, it starts the "Dom0" (for "domain 0"), or privileged domain, which in our case runs a Linux kernel (other possible Dom0 operating systems are NetBSD and OpenSolaris). The hardware must, of course, be supported by this kernel to run Xen. Once the Dom0 has started, one or more "DomU" domains can be started and controlled from Dom0.
+
:''Xen is an open-source type-1 or baremetal hypervisor, which makes it possible to run many instances of an operating system or indeed different operating systems in parallel on a single machine (or host). Xen is the only type-1 hypervisor that is available as open source. Xen is used as the basis for a number of different commercial and open source applications, such as: server virtualization, Infrastructure as a Service (IaaS), desktop virtualization, security applications, embedded and hardware appliances.''
  
Xen.org provide a [http://wiki.xen.org/wiki/Xen_Overview full overview]
+
==Introduction==
  
==Types of Virtualization Available with Xen==
+
The Xen hypervisor is a thin layer of software which emulates a computer architecture allowing multiple operating systems to run simultaneously. The hypervisor is started by the boot loader of the computer it is installed on. Once the hypervisor is loaded, it starts the "dom0" (short for "domain 0", sometimes called the host or privileged domain) which in our case runs Arch Linux. Once the dom0 has started, one or more "domUs" (short for user domains, sometimes called VMs or guests) can be started and controlled from the dom0. Xen supports both paravirtualized (PV) and hardware virtualized (HVM) domUs. See [http://wiki.xen.org/wiki/Xen_Overview Xen.org] for a full overview.
===Paravirtual (PV)===
+
Paravirtualized guests require a kernel with support for Xen built in. This is default for all recent Linux kernels and some other Unix-like systems. Paravirtualized domUs usually run faster as they do not have to run in emulated hardware.  
+
===Hardware Virtual (HVM)===
+
For hardware virtualization in our domUs, the host system hardware must include either Intel VT-x or AMD-V (SVM) virtualization support. In order to verify this, run the following command on the host system:
+
grep -E "(vmx|svm)" --color=always /proc/cpuinfo
+
If the above command does not produce output, then hardware virtualization support is unavailable and your hardware is unable to run Xen HVM guests. It is also possible that the host CPU supports one of these features, but that the functionality is disabled by default in the system BIOS. To verify this, access the host system's BIOS configuration menu during the boot process and look for an option related to virtualization support. If such an option exists and is disabled, then enable it, boot the system and repeat the above command.
+
  
=== Paravirtual on Hardware (PV on HM) ===
+
==System requirements==
There is a third mode which runs  Xen on top of a HardwareVirtual guest.
+
The Xen hypervisor requires kernel level support which is included in recent Linux kernels and is built into the {{Pkg|linux}} and {{Pkg|linux-lts}} Arch kernel packages. To run run HVM domUs the physical hardware must have either Intel VT-x or AMD-V (SVM) virtualization support. In order to verify this, run the following command when the Xen hypervisor is not running:
 +
$ grep -E "(vmx|svm)" --color=always /proc/cpuinfo
 +
If the above command does not produce output, then hardware virtualization support is unavailable and your hardware is unable to run HVM domUs. If you believe the CPU supports one of these features you should access the host system's BIOS configuration menu during the boot process and look if options related to virtualization support have been disabled. If such an option exists and is disabled, then enable it, boot the system and repeat the above command. The Xen hypervisor also supports PCI passthrough where PCI devices can be passed directly to the domU even in the absence of dom0 support for the device. In order to use PCI passthrough the CPU must support IOMMU/VT-d.
  
=== Recommended Practices ===
+
== Configuring dom0 ==
The [http://wiki.xen.org/wiki/Main_Page current xen.org wiki] has a section regarding best practices for running Xen. It includes information on allocating a fixed amount of memory dom0 and how to dedicate (pin) a CPU core for its own use.
+
The Xen hypervisor relies on a full install of the base operating system. Before attempting to install the Xen hypevisor, the  host machine should have a fully operational and up-to-date install of Arch Linux. This installation can be a minimal install with only the base package and does not require a [[Desktop Environment]] or even [[Xorg]]. If you are building a new host from scratch, see the [[Installation Guide]] for instructions on installing Arch Linux. The following configuration steps are required to convert a standard installation into a working dom0 running on top of the Xen hypevisor:
  
== Obtaining Xen ==
+
* Installation of the Xen hypervisor
Xen is available from [https://aur.archlinux.org/packages.php?ID=14640 AUR], it provides the means to create a Xen host. The Xen host maintains the tools and configuration files for creating and controlling Xen guests.
+
* Modification of the bootloader to boot the Xen hypervisor
 +
* Creation of a network bridge
 +
* Installation of Xen systemd services
  
=== Before installation ===
+
=== Installation of the Xen hypervisor ===
Like all AUR packages, the binary is built on your machine. For Xen, an internet connection is needed during its compilation because further source files are downloaded during the process. Xen.org recommend a host to be 64-bit. This requires the  'multilib' repository to be enabled in ''etc/pacman.conf''.
+
To install the Xen hypervisor install either the current stable {{AUR|xen}} or the bleeding edge unstable {{AUR|xen-hg-unstable}} packages available in the [[Arch User Repository]]. Both packages provide the Xen hypervisor, current xl interface and all configuration and support files, including systemd services. The multilib repository needs to be enabled to install Xen (See [[Pacman#Repositories]] for details). Install the {{AUR|xen-docs}} package from the [[Arch User Repository]] for the man pages and documentation.
  
To build the package you will need the following:
+
=== Modification of the bootloader ===
 +
The boot loader must be modified to load a special Xen kernel (xen.gz) which is then used to boot the normal kernel. To do this a new bootloader entry is needed.
  
base-devel zlib lzo2 python2 ncurses openssl libx11 yajl
+
For grub users, the Xen package provides the ''/etc/grub.d/09_xen'' generator file. This file can be edited to customize the Xen boot commands. To allocate 512M of RAM to dom0 at boot for example, modify ''/etc/grub.d/09_xen'' by replacing the line:
  libaio glib2 base-devel bridge-utils iproute gettext
+
  XEN_HYPERVISOR_CMDLINE="xsave=1"
dev86 bin86 iasl markdown git wget
+
+
optional packages:  ocaml ocaml-findlib
+
  
You will need to enable the 'extra' repository to get bin86.
+
with
 +
XEN_HYPERVISOR_CMDLINE="dom0_mem=512M xsave=1"
  
=== After installation ===
+
After customizing add the required bootloader with the following command:
The following steps are required after installation , most consist of adding a line or two to a configuration file, or commenting out others. All of these requirements are fully covered in this document.
+
# grub-mkconfig -o /boot/grub/grub.cfg
  
'''The dom0 host requires'''
+
Note that currently (as of 2013-08-27), the 09_xen file has a bug that prevents it from properly recognizing the linux-lts kernel. See the comments of [https://aur.archlinux.org/packages/xen/ the Xen AUR page] for more info and a patch. Alternatively, you may opt to leave the normal linux kernel package installed alongside the lts kernel and manually edit the generated grub.cfg file to use the lts files.
* systemd services to be started at boot time and additional configuration for
+
* a xenfs filesystem mount point,  
+
* an entry in the bootloader configuration file
+
* additional networking configuration
+
* a configuration file for each guest
+
* a means of accessing each guest's kernel and initrd image.
+
  
'''Each domU guest needs'''
+
More information on using the GRUB bootloader is available at [[Grub]].
* to be installed (refer to the distro's installation guide)
+
  
'''Each paravirtualized (pv) guests needs'''
+
=== Creation of a network bridge ===
* a mount point corresponding to the virtual disk (specified in its ''etc/fstab'' or equivalent)
+
Xen requires that network communications between domUs and the dom0 (and beyond) be set up manually. The use of both DHCP and static addressing is possible, and the choice should be determined by the network topology. Complex setups are possible, see the [http://wiki.xen.org/wiki/Xen_Networking Networking] article on the Xen wiki for details and ''/etc/xen/scripts'' for scripts for various networking configurations. A basic bridged network, in which a virtual switch is created in dom0 that every domU is attached to, can be setup by modifying the example configuration files provided by [[Netctl]] in ''etc/netctl/examples''. By default, Xen expects a bridge to exist named xenbr0. To set this up with netctl, do the following:
* tty1 replaced by a virtual console (specified in its ''etc/inittab'' or equivalant, or systemd service file).
+
  
To speed the introduction of 4.2, the maintainer during Xen 4.1 stepped aside; there are significant changes between 4.1 and 4.2, coupled with the transition of Arch from rc.d to systemd. It may take a short time for the new package to settle out so, for the moment, a section on building Xen from source is provided near the end.
+
# cd /etc/netctl
 +
# cp examples/bridge xenbridge-dhcp
  
== Bootloader Configuration ==
+
make the following changes to /etc/netctl/xenbridge-dhcp:
Xen requires that you boot a special xen kernel (xen.gz) which in turn boots your system's normal kernel. A new bootloader entry is needed. See [[#Bootloader Configuration]].
+
Description="Xen bridge connection"
The menuentry for a Xen system starts a Xen kernel before starting the main host's kernel.  
+
Interface=xenbr0
 +
Connection=bridge
 +
BindsToInterface=(eth0) # Use the name of the external interface found with the 'ip link' command
 +
IP=dhcp
 +
assuming your existing network connection is called eth0.  
  
=== grub2 ===
+
Start the network bridge with:
To boot into the Xen system, we need a new menuentry in grub.cfg.
+
  # netctl start xenbridge-dhcp
+
Example non-xen menuentry for LVM with gpt partition table
+
  menuentry 'Arch ' {
+
  insmod part_gpt
+
  insmod lvm
+
  insmod ext2
+
  set root='lvm/vg0-arch'
+
  linux /boot/vmlinuz-linux root=/dev/mapper/vg0-arch ro init=/usr/lib/systemd/systemd quiet
+
  initrd /boot/initramfs-linux.img
+
}
+
  
The menuentry to boot the same arch system after Xen has been installed. Get the UUID for ''lvm/vg0-arch'' by using ''blkid''.
+
when the prompt returns, check all is well: {{hc|# brctl show|
 +
bridge name bridge id STP enabled interfaces
 +
xenbr0 8000.001a9206c0c0 no eth0
 +
}}
 +
If the bridge is working it can be set to start automatically after rebooting with:
 +
# netctl enable xenbridge-dhcp
  
menuentry 'Arch Xen 4.2' {
+
=== Installation of Xen systemd services ===
  insmod lvm
+
The Xen dom0 requires the xenstored, xenconsoled, and xendomains system services (see [[Systemd]] for details).
  insmod part_gpt
+
  insmod ext2
+
  set root='lvm/vg0-arch'
+
  search --no-floppy --fs-uuid --set=root 346de8aa-6150-4d7b-a8c2-1c43f5929f99
+
  multiboot /boot/xen.gz placeholder dom0_mem=1024M
+
  module /boot/vmlinuz-linux placeholder root=/dev/mapper/vg0-arch ro init=/usr/lib/systemd/systemd quiet
+
  module  /boot/initramfs-linux.img
+
}
+
  
Example for a physical partition
+
=== Confirming successful installation ===
Arch Linux(XEN)
+
Reboot your dom0 host and ensure that the Xen kernel boots correctly and that all settings survive a reboot. A properly set up dom0 should report the following when you run xl list (as root):
menuentry "Arch Linux(XEN)" {
+
{{hc|# xl list|
    set root=(hd0,X)
+
Name                                        ID  Mem VCPUs State Time(s)
  search --no-floppy --fs-uuid --set=root 346de8aa-6150-4d7b-a8c2-1c43f5929f99
+
Domain-0                                    0  511    2    r-----   41652.9}}
    multiboot /boot/xen.gz dom0_mem=1024M
+
Of course, the Mem, VCPUs and Time columns will be different depending on machine configuration and uptime. The important thing is that dom0 is listed.
    module /boot/vmlinuz-linux-xen-dom0 root=/dev/sda ro
+
    module /boot/initramfs-linux-xen-dom0.img
+
}
+
More at [https://wiki.archlinux.org/index.php/Grub2 Grub2]
+
  
== Network Configuration ==
+
In addition to the required steps above, see [http://wiki.xen.org/wiki/Xen_Best_Practices best practices for running Xen] which includes information on allocating a fixed amount of memory and how to dedicate (pin) a CPU core for dom0 use. It also may be beneficial to create a xenfs filesystem mount point by including in ''/etc/fstab''
Previous versions of Xen provided a bridge connection whereas Xen 4.2 requires that network communications between the guest, the host (and beyond) is set up separately. Using dhcp throughout simplifies things while we get everything working, the guest. When  fully working, the guest will normally benefit from a static network address.
+
 
+
Netcfg greatly simplifies network configuration and is now included as standard in the ''base'' package. Example configuration files are provided in ''etc/network.d/examples'' and Xen 4.2 provides scripts for various networking configurations in ''/etc/xen/scripts''.
+
 
+
=== Network Bridge ===
+
By default, Xen expects a bridge connection to be named xenbr0.
+
 
+
# cd /etc/network.d
+
# cp examples/bridge xenbridge-dhcp
+
 
+
make the following changes to xen-bridge:
+
INTERFACE="xenbr0"
+
BRIDGE_INTERFACE="eth0"
+
DESCRIPTION="Xen bridge connection"
+
 
+
assuming your existing eth0 connection is called eth0-dhcp,
+
edit /etc/conf.d/netcfg
+
NETWORKS=(eth0-dhcp xenbridge-dhcp)
+
 
+
restart the network:
+
systemctl restart netcfg.service
+
 
+
when the prompt returns, check all is well
+
ip addr show
+
brctl show
+
+
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
+
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
+
    inet 127.0.0.1/8 scope host lo
+
    inet6 ::1/128 scope host
+
      valid_lft forever preferred_lft forever
+
3: xenbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
+
    link/ether 00:1a:92:06:c0:c0 brd ff:ff:ff:ff:ff:ff
+
    inet 192.168.1.3/24 brd 192.168.1.255 scope global xenbr0
+
    inet6 fe80::21a:92ff:fe06:c0c0/64 scope link
+
      valid_lft forever preferred_lft forever
+
+
bridge name bridge id STP enabled interfaces
+
xenbr0 8000.001a9206c0c0 no eth0
+
 
+
== Final preparations to start Xen at boot ==
+
Include in your ''/etc/fstab''
+
 
   none /proc/xen xenfs defaults 0 0
 
   none /proc/xen xenfs defaults 0 0
  
Issue the following so that the services are started at bootup:
+
== Using Xen ==
# systemctl enable xenstored.service
+
Xen supports both paravirtualized (PV) and hardware virtualized (HVM) domUs. In the following sections the steps for creating HVM and PV domUs running Arch Linux are described. In general, the steps for creating an HVM domU are independent of the domU OS and HVM domUs support a wide range of operating systems including microsot Windows. To use HVM domUs the dom0 hardware must have virtualization support. Paravirtualized domUs do not require virtualization support, but instead require modifications to the guest operating system making the installation procedure different for each operating system (see the [http://wiki.xen.org/wiki/Category:Guest_Install Guest Install] page of the Xen wiki for links to instructions). Some operating systems (e.g., Microsoft Windows) cannot be installed as a PV domU. In general, HVM domUs often run slower than PV domUs since HVMs run on emulated hardware. While there are some common steps involved in setting up PV and HVM domUs, the processes are substantially different. In both cases, for each domU, a "hard disk" will need to be created and a configuration file needs to be written. Additionally, for installation each domU will need access to a copy of the installation ISO stored on the dom0 (see the [https://www.archlinux.org/download/ Download Page] to obtain the Arch Linux ISO).
# systemctl enable xenconsoled.service
+
# systemctl enable xendomains.service
+
  
'''Reboot into your new Arch Dom0.'''
+
=== Create a domU "hard disk" ===
 +
Xen supports a number of different types of "hard disks" including [[LVM| Logical Volumes]], [[Partitioning|raw partitions]], and image files. To create a [[Wikipedia: Sparse file|sparse file]], that will grow to a maximum of 10GiB, called domU.img, use:
 +
truncate -s 10G domU.img
 +
If file IO speed is of greater importance than domain portability, using [[LVM|Logical Volumes]] or [[Partitioning|raw partitions]] may be a better choice.
  
== Creating guest domains (domU) ==
+
Xen may present any partition / disk available to the host machine to a domain as either a partition or disk. This means that, for example, an LVM partition on the host can appear as a hard drive (and hold multiple partitions) to a domain. Note that making sub-partitons on a partition will make accessing those partitions on the host machine more difficult. See the kpartx man page for information on how to map out partitions within a partition.
+
=== Creating Paravirtualized (PV) Guests===
+
The general procedure is:
+
perform a normal or minimal installation of the distro that will become a guest; copy its kernel/initrd to a directory on the host; modify its /etc/fstab to use the virtual disk; modify its the way it sets up a terminal (getty); create a config file for xl.
+
  
== Running guest Domains ==
+
=== Create a domU configuration ===
Start the guest domU and a console
+
Each domU requires a separate configuration file that is used to create the virtual machine. Full details about the configuration files can be found at the [http://wiki.xensource.com/xenwiki/XenConfigurationFileOptions| Xen Wiki] or the xl.cfg man page. Both HVM and PV domUs share some components of the configuration file. These include
# xl create /etc/xen/pv-squeeze.cfg
+
<nowiki>
 
+
name = "domU"
Check all is well:
+
memory = 256
  # xl list
+
disk = [ "file:/path/to/ISO,sdb,r", "phy:/path/to/partition,sda1,w" ]
 +
  vif = [ 'mac=00:16:3e:XX:XX:XX,bridge=xenbr0' ]
 +
</nowiki>
 +
The {{ic|name&#61;}} is the name by which the xl tools manage the domU and needs to be unique across all domUs. The {{ic|disk&#61;}} includes information about both the the installation media ({{ic|file:}}) and the partition created for the domU {{ic|phy}}. If an image file is being used instead of a physical partition, the {{ic|phy:}} needs to be changed to {{ic|file:}}. The {{ic|vif&#61;}} defines a network controller. The 00:16:3e MAC block is reserved for Xen domains, so the last three digits of the {{ic|mac&#61;}} must be randomly filled in (hex values 0-9 and a-f only).
  
=== Useful xl command examples ===
+
=== Managing a domU ===
 +
If a domU should be started on boot, create a symlink to the configuration file in /etc/xen/auto and ensure the xendomains service is set up correctly. Some useful commands for managing domUs are:
 
  # xl top
 
  # xl top
 
  # xl list
 
  # xl list
  # xl shutdown pv-squeeze
+
# xl console domUname
  # xl destroy pv-squeeze
+
  # xl shutdown domUname
 +
  # xl destroy domUname
  
== Worked example for Debian Squeeze as a guest ==
+
== Configuring a hardware virtualized (HVM) Arch domU ==
Install Debian 6.0 (do not bother with graphical interface, install as little as possible). Having installed it, boot into in your new Arch Xen system and mount it.
+
In order to use HVM domUs install the {{Pkg|mesa-libgl}} and {{Pkg|bluez-libs}} packages.
  
The example has the guest Debian Squeeze installed onto /dev/vg0/pv_squeeze
+
A minimal configuration file for a HVM Arch domU is:
 +
<nowiki>
 +
name = 'HVM_domU'
 +
builder = 'hvm'
 +
memory = 256
 +
vcpus = 2
 +
disk = [ 'phy:/dev/mapper/vg0-hvm_arch,xvda,w', 'file:/path/to/ISO,hdc:cdrom,r' ]
 +
vif = [ 'mac=00:16:3e:00:00:00,bridge=xenbr0' ]
 +
vnc = 1
 +
vnclisten = '0.0.0.0'
 +
vncdisplay = 1
 +
</nowiki>
 +
Since HVM machines do not have a console, they can only be connected to via a [[Vncserver|vncviewer]]. The configuration file allows for unauthenticated remote access of the domU vncserver and is not suitable for unsecured networks. The vncserver will be available on port 590X, where X is the value of {{ic|vncdisplay}}, of the dom0. The domU can be created with:
  
  # mkdir /tmp/squeeze
+
  # xl create /path/to/config/file
# mkdir -p /var/lib/xen/images/squeeze
+
# mount -text4 /dev/vg0/pv_squeeze /tmp/squeeze/
+
  
Copy the kernel and initrd to a location available Xen. n.b. Squeeze has softlinks (vmlinuz and initrd.img) in its root directory to the current kernel, so check you have copied a real kernel, and not just a link!
+
and its status can be checked with
# cp /tmp/squeeze/vmlinuz /tmp/squeeze/initrd.img /var/lib/xen/images/squeeze
+
  
edit /tmp/squeeze/etc/fstab
+
  # xl list
change its root entry to begin with /dev/xvda1
+
  # /dev/xvda1 / ext4 noatime,nodiratime,errors=remount-ro 0 1
+
  
Debian Squeeze uses ''/etc/inittab'' to configure its terminals. Other distros use other mechanisms. We need to replace the creation of terminals ''tty1'', ''tty2'' etc. with a single ''hvc0''.
+
Once the domU is created, connect to it via the vncserver and install Arch Linux as described in the [[Installation Guide]].
  
Comment out any ''getty tty'' lines like these:
+
== Configuring a paravirtualized (PV) Arch domU ==
1:2345:respawn:/sbin/getty 38400 tty1
+
A minimal configuration file for a PV Arch domU is:
2:23:respawn:/sbin/getty 38400 tty2
+
  <nowiki>
+
  name = "PV_domU"
Replace with the single line
+
  kernel = "/mnt/arch/boot/x86_64/vmlinuz"
hvc:2345:respawn:/sbin/getty 38400 hvc0
+
  ramdisk = "/mnt/arch/boot/x86_64/archiso.img"
 
+
  extra = "archisobasedir=arch archisolabel=ARCH_201301"
Create a guest configuration file by copying one of the given example files and editing as follows:
+
  # cp /etc/xen/xlexample.pvlinux /etc/xen/pv-squeeze.cfg
+
 
+
edit /etc/xen/pv-squeeze.cfg with the following:
+
  name = "squeeze.pvlinux"
+
  kernel=/var/lib/xen/images/squeeze/vmlinuz
+
  ramdisk=/var/lib/xen/images/squeeze/initrd.img
+
  extra = "root=/dev/xvda1"
+
 
  memory = 256
 
  memory = 256
vcpus = 2
+
  disk = [ "phy:/path/to/partition,sda1,w", "file:/path/to/ISO,sdb,r" ]
  disk = [ '/dev/vg0/pv_squeeze,raw,xvda1,rw' ]
+
vif = [ 'mac=00:16:3e:XX:XX:XX,bridge=xenbr0' ]
 +
</nowiki>
 +
This file needs to tweaked for your specific use. Most importantly, the {{ic|1=archisolabel=ARCH_201301}} line must be edited to use the release year/month of the ISO being used. If you want to install 32-bit Arch, change the kernel and ramdisk paths from /x86_64/ to /i686/.
  
Start the guest domU and a console
+
Before creating the domU, the installation ISO must be loop-mounted. To do this, ensure the directory /mnt exists and is empty, then run the following command (being sure to fill in the correct ISO path):
  # xl create /etc/xen/pv-squeeze.cfg
+
  # mount -o loop /path/to/iso /mnt
  
Check all is well:
+
Once the ISO is mounted, the domU can be created with:
# xl list
+
+
Name            ID  Mem VCPUs    State Time(s)
+
Domain-0        0  1024    2    r-----      26.2
+
squeeze.pvlinux  1    123    2    -b----      1.5
+
  
Start a console:
+
  # xl create -c /path/to/config/file
  # xl console squeeze.pvlinux
+
+
( example output)
+
[
+
    0.000000] Initializing cgroup subsys cpuset
+
[    0.000000] Initializing cgroup subsys cpu
+
[    0.000000] Linux version 2.6.32-5-xen-amd64 (Debian 2.6.32-46) ...UTC 2012
+
[    0.000000] Command line: root=/dev/xvda1
+
[    0.000000] KERNEL supported cpus:
+
[    0.000000]  Intel GenuineIntel
+
[    0.000000]  AMD AuthenticAMD
+
[    0.000000]  Centaur CentaurHauls
+
...
+
  
== Installation notes for domU Paravirtualized guests ==
+
The -c option will enter the domU's console when successfully created and install Arch Linux as described in the [[Installation Guide]]. There will be a few deviations, however. The block devices listed in the disks line of the cfg file will show up as {{ic|/dev/xvd*}}. Use these devices when partitioning the domU. After installation and before the domU is rebooted, the xen-blkfront xen-fbfront xen-netfront xen-kbdfront modules must be added to [[Mkinitcpio]]. Without these modules, the domU will not boot correctly. For booting, it is not necessary to install Grub. Xen has a Python-based grub emulator, so all that is needed to boot is a grub.cfg file: (It may be necessary to create the /boot/grub directory)
=== Arch ===
+
{{hc|/boot/grub/grub.cfg|<nowiki>menuentry 'Arch GNU/Linux, with Linux core repo kernel' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-true-__UUID__' {
The default Arch initramfs images lack essential xen modules.
+
        insmod gzio
In the guest install, we need to add the following to mkinitcpio.conf
+
        insmod part_msdos
  MODULES = "xen-blkfront xen-fbfront xen-netfront xen-kbdfront"
+
        insmod ext2
 +
        set root='hd0,msdos1'
 +
        if [ x$feature_platform_search_hint = xy ]; then
 +
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  __UUID__
 +
        else
 +
          search --no-floppy --fs-uuid --set=root __UUID__
 +
        fi
 +
        echo    'Loading Linux core repo kernel ...'
 +
        linux  /boot/vmlinuz-linux root=UUID=__UUID__ ro
 +
        echo    'Loading initial ramdisk ...'
 +
        initrd  /boot/initramfs-linux.img
 +
}</nowiki>}}
 +
This file must be edited to match the UUID of the root partition. From within the domU, run the following command:
 +
  # blkid
 +
Replace all instances of __UUID__ with the real UUID of the root partition (the one that mounts as "/").
  
and then rebuild its initramfs-linux.img with ''mkinitcpio -p linux''.
+
Shutdown the domU with the {{ic|poweroff}} command. The console will be returned to the hypervisor when the domain is fully shut down, and the domain will no longer appear in the xl domains list. Now the ISO file may be unmounted:
 +
# umount /mnt
 +
The domU cfg file should now be edited. Delete the "kernel = ", "ramdisk = ", and "extra = " lines and replace them with the following line:
 +
bootloader = "pygrub"
 +
Also remove the ISO disk from the "disk = " line.
  
=== Debian ===
+
The Arch domU is now set up. It may be started with the same line as before:
Installation for Wheezy (testing) is identical to that for Squeeze (stable), see [[#Worked example for Debian Squeeze as a guest]].
+
# xl create -c /etc/xen/archdomu.cfg
  
 
== Common Errors ==
 
== Common Errors ==
Line 259: Line 205:
 
* Arch linux guest hangs with a ctrl-d message
 
* Arch linux guest hangs with a ctrl-d message
 
- press ctrl-d until you get back to a prompt, rebuild its initramfs described  
 
- press ctrl-d until you get back to a prompt, rebuild its initramfs described  
 
* The domu guest hangs at 'crond'
 
- The guest's terminal needs to be set to ''hvc0'' instead of ''tty1'' See the Debian Squeeze example above.
 
  
 
* Error message "''failed to execute '/usr/lib/udev/socket:/org/xen/xend/udev_event' 'socket:/org/xen/xend/udev_event': No such file or directory''"
 
* Error message "''failed to execute '/usr/lib/udev/socket:/org/xen/xend/udev_event' 'socket:/org/xen/xend/udev_event': No such file or directory''"
 
- caused by ''/etc/udev/rules.d/xend.rules''; xend is (a) deprecated and (b) not used, so it is safe to remove xend.rules
 
- caused by ''/etc/udev/rules.d/xend.rules''; xend is (a) deprecated and (b) not used, so it is safe to remove xend.rules
 
== Building and Installing Xen Hypervisor and Dom0 Host from Source ==
 
Xen recommends that a Xen host (dom0) is 64-bit, guests may be either 32-bit or 64-bit. To build such a system requires a mixed 64/32-bit installation and packages from the the Community repository; the host uses a network bridge and a modified entry in the bootloader configuration file (for example, grub.cfg). These notes assume an installation using systemd is in use, as is the default for a new installation of Arch. For these reasons, you may prefer to make a fresh installation of Arch on which to build and install Xen.
 
 
===Building Xen===
 
Building and installing Xen significantly modifies your system. Xen is an established program, but Xen 4.2 is extremely new. Consider Xen 4.2 on an Arch system to be untested. Consider yourself to be an alpha tester, perhaps make a throw-away Arch system for the Xen installation.
 
 
'''It is best practise to backup and highly recommended to make a fresh installation of Arch on which to build and install Xen.'''
 
 
* The build process installs additional source from git, so a working internet connection is required.
 
* systemd service files will be available soon. Until then we use (the currently still supported, but legacy) rc.d and rc.conf.
 
 
Edit /etc/pacman.conf to uncomment entries under repositries for multilib and community (three lines each).
 
Prepare for and perform a full system upgrade (pacman -Syu).
 
Install packages listed under 'Obtaining Xen'.
 
Download Xen Hypervisor 4.2 tarball from http://xen.org/products/downloads.html.
 
Unpack the tarball to a suitable location (tar xjf <path/to/tarball> location). Unfortunately, the build process also creates binaries and scripts for the old, deprecated ''xend/xm''.
 
The Xen documentation recommends building Xen as root.
 
 
# cd xen-4.2.0
 
# PYTHON=/usr/bin/python2
 
# export PYTHON
 
# ./configure
 
# make world
 
# make dist
 
 
The dist directory can be used to install Xen to any machine, but it
 
* sets the 'sticky' bit on all file permissions
 
* installs startup scripts to ''etc/init.d'' (equivalent of ''etc/rc.d'')
 
* includes some udev rules for 'xend' which creates LOTS of error messages when booting up (xend is not used, having been replaced by xendomains)
 
 
The only script we need from ''etc/init.d'' is ''xendomains'' since the systemd service files given below replace ''etc/init.d/xencommons''. The service files are based on those in Fedora 17 (which uses systemd and provides Xen 4.1). However, it places ''xendomains'' in ''/usr/libexec'' which is not present in Arch. The ''xendomain.service'' below uses ''/etc/xen/scripts'' as the location for ''xendomains''.
 
 
Fix these problems with
 
# cd dist
 
# chmod -R -s install/
 
# cp install/etc/init.d/xendomains install/etc/xen/scripts
 
# rm install/etc/init.d/*
 
# rmdir install/etc/init.d
 
# rm install/etc/udev/rules.d/xend.rules
 
 
If installing to another Arch system, make a tarball and copy it over:
 
# cd ..
 
# tar cjf ~/xen-dist-4.2.bz2 dist/
 
 
copy the tarball to the other installation, boot into it
 
use 'tar xjf xen-dist-4.2.bz2 .' to unpack
 
then install packages listed under 'Packages required for host'
 
 
Now change to the 'dist' directory and install
 
# cd dist
 
 
Whether installing now, or to another installation, from the ''dist'' directory issue:
 
# ./install.sh
 
 
=== Enabling Xen under Systemd ===
 
Add the following files
 
 
'''/etc/modules/load/xen.conf'''
 
xen-evtchn
 
xen-gntdev
 
xen-gntalloc
 
xen-blkback
 
xen-netback
 
xen-pciback
 
xen-acpi-processor
 
 
n.b The following were included in xencommons, but were not inserted by systemd
 
''evtchn'' ''gntdev'' ''netbk'' ''blkbk'' ''xen-scsibk'' ''usbbk'' ''pciback'' ''blktap2'' ''blktap''.
 
''xen-acpi-processor'' may not work on some machines. Remove this when getting error.
 
 
'''/usr/lib/systemd/system/xenstored.service'''
 
[Unit]
 
Description=Xenstored - daemon managing xenstore file system
 
Before=libvirtd.service libvirt-guests.service
 
After=dbus.service
 
RefuseManualStop=true
 
 
[Service]
 
Type=forking
 
PIDFile=/var/run/xenstored.pid
 
ExecStart=/usr/sbin/xenstored --pid-file /var/run/xenstored.pid $XENSTORED_ARGS
 
 
[Install]
 
WantedBy=multi-user.target
 
 
'''/usr/lib/systemd/system/xenconsoled.service'''
 
[Unit]
 
Description=Xenconsoled - handles logging from guest consoles and hypervisor
 
After=xenstored.service
 
 
[Service]
 
Type=simple
 
PIDFile=/var/run/xenconsoled.pid
 
ExecStart=/usr/sbin/xenconsoled
 
 
[Install]
 
WantedBy=multi-user.target
 
 
'''/usr/lib/systemd/system/xendomains.service'''
 
[Unit]
 
Description=Xendomains - start and stop guests on boot and shutdown
 
Requires=proc-xen.mount xenstored.service
 
After=proc-xen.mount xenstored.service xenconsoled.service
 
ConditionPathExists=/proc/xen
 
 
[Service]
 
Type=oneshot
 
RemainAfterExit=true
 
ExecStartPre=/usr/bin/grep -q control_d /proc/xen/capabilities
 
ExecStart=/etc/xen/scripts/xendomains start
 
ExecStop=/etc/xen/scripts/xendomains stop
 
 
[Install]
 
WantedBy=multi-user.target
 
 
'''/usr/lib/systemd/system/proc-xen.mount'''
 
  [Unit]
 
  Description=Mount /proc/xen files
 
  ConditionPathExists=/proc/xen
 
  RefuseManualStop=true
 
 
 
  [Mount]
 
  What=xenfs
 
  Where=/proc/xen
 
  Type=xenfs
 
 
Issue the following so that the services are started at bootup:
 
# systemctl enable xenstored.service
 
# systemctl enable xenconsoled.service
 
# systemctl enable xendomains.service
 
 
Add a new Xen menuentry in grub.cfg as described earlier and then '''reboot into the new Xen system''' and check all is well:
 
# xl list
 
 
Name                                        ID  Mem VCPUs State Time(s)
 
Domain-0                                    0  1024    2    r-----      6.1
 
 
n.b. ''xencommons'' sets the name "Domain-0" in the xenstored database. The current systemd service files do not do this, so at the moment ''xl list'' displays "(null)" as the name for Dom0.
 
  
 
==Resources==
 
==Resources==
 
* [http://www.xen.org/ The homepage at xen.org]
 
* [http://www.xen.org/ The homepage at xen.org]
 
* [http://wiki.xen.org/wiki/Main_Page The wiki at xen.org ]
 
* [http://wiki.xen.org/wiki/Main_Page The wiki at xen.org ]

Revision as of 22:34, 27 August 2013

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary link Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end

From Xen Overview:

Xen is an open-source type-1 or baremetal hypervisor, which makes it possible to run many instances of an operating system or indeed different operating systems in parallel on a single machine (or host). Xen is the only type-1 hypervisor that is available as open source. Xen is used as the basis for a number of different commercial and open source applications, such as: server virtualization, Infrastructure as a Service (IaaS), desktop virtualization, security applications, embedded and hardware appliances.

Introduction

The Xen hypervisor is a thin layer of software which emulates a computer architecture allowing multiple operating systems to run simultaneously. The hypervisor is started by the boot loader of the computer it is installed on. Once the hypervisor is loaded, it starts the "dom0" (short for "domain 0", sometimes called the host or privileged domain) which in our case runs Arch Linux. Once the dom0 has started, one or more "domUs" (short for user domains, sometimes called VMs or guests) can be started and controlled from the dom0. Xen supports both paravirtualized (PV) and hardware virtualized (HVM) domUs. See Xen.org for a full overview.

System requirements

The Xen hypervisor requires kernel level support which is included in recent Linux kernels and is built into the linux and linux-lts Arch kernel packages. To run run HVM domUs the physical hardware must have either Intel VT-x or AMD-V (SVM) virtualization support. In order to verify this, run the following command when the Xen hypervisor is not running:

$ grep -E "(vmx|svm)" --color=always /proc/cpuinfo

If the above command does not produce output, then hardware virtualization support is unavailable and your hardware is unable to run HVM domUs. If you believe the CPU supports one of these features you should access the host system's BIOS configuration menu during the boot process and look if options related to virtualization support have been disabled. If such an option exists and is disabled, then enable it, boot the system and repeat the above command. The Xen hypervisor also supports PCI passthrough where PCI devices can be passed directly to the domU even in the absence of dom0 support for the device. In order to use PCI passthrough the CPU must support IOMMU/VT-d.

Configuring dom0

The Xen hypervisor relies on a full install of the base operating system. Before attempting to install the Xen hypevisor, the host machine should have a fully operational and up-to-date install of Arch Linux. This installation can be a minimal install with only the base package and does not require a Desktop Environment or even Xorg. If you are building a new host from scratch, see the Installation Guide for instructions on installing Arch Linux. The following configuration steps are required to convert a standard installation into a working dom0 running on top of the Xen hypevisor:

  • Installation of the Xen hypervisor
  • Modification of the bootloader to boot the Xen hypervisor
  • Creation of a network bridge
  • Installation of Xen systemd services

Installation of the Xen hypervisor

To install the Xen hypervisor install either the current stable xenAUR or the bleeding edge unstable xen-hg-unstableAUR packages available in the Arch User Repository. Both packages provide the Xen hypervisor, current xl interface and all configuration and support files, including systemd services. The multilib repository needs to be enabled to install Xen (See Pacman#Repositories for details). Install the xen-docsAUR package from the Arch User Repository for the man pages and documentation.

Modification of the bootloader

The boot loader must be modified to load a special Xen kernel (xen.gz) which is then used to boot the normal kernel. To do this a new bootloader entry is needed.

For grub users, the Xen package provides the /etc/grub.d/09_xen generator file. This file can be edited to customize the Xen boot commands. To allocate 512M of RAM to dom0 at boot for example, modify /etc/grub.d/09_xen by replacing the line:

XEN_HYPERVISOR_CMDLINE="xsave=1"

with

XEN_HYPERVISOR_CMDLINE="dom0_mem=512M xsave=1"

After customizing add the required bootloader with the following command:

# grub-mkconfig -o /boot/grub/grub.cfg

Note that currently (as of 2013-08-27), the 09_xen file has a bug that prevents it from properly recognizing the linux-lts kernel. See the comments of the Xen AUR page for more info and a patch. Alternatively, you may opt to leave the normal linux kernel package installed alongside the lts kernel and manually edit the generated grub.cfg file to use the lts files.

More information on using the GRUB bootloader is available at Grub.

Creation of a network bridge

Xen requires that network communications between domUs and the dom0 (and beyond) be set up manually. The use of both DHCP and static addressing is possible, and the choice should be determined by the network topology. Complex setups are possible, see the Networking article on the Xen wiki for details and /etc/xen/scripts for scripts for various networking configurations. A basic bridged network, in which a virtual switch is created in dom0 that every domU is attached to, can be setup by modifying the example configuration files provided by Netctl in etc/netctl/examples. By default, Xen expects a bridge to exist named xenbr0. To set this up with netctl, do the following:

# cd /etc/netctl
# cp examples/bridge xenbridge-dhcp

make the following changes to /etc/netctl/xenbridge-dhcp:

Description="Xen bridge connection"
Interface=xenbr0
Connection=bridge
BindsToInterface=(eth0) # Use the name of the external interface found with the 'ip link' command
IP=dhcp

assuming your existing network connection is called eth0.

Start the network bridge with:

# netctl start xenbridge-dhcp
when the prompt returns, check all is well:
# brctl show
bridge name	bridge id		STP enabled	interfaces
xenbr0		8000.001a9206c0c0	no		eth0

If the bridge is working it can be set to start automatically after rebooting with:

# netctl enable xenbridge-dhcp

Installation of Xen systemd services

The Xen dom0 requires the xenstored, xenconsoled, and xendomains system services (see Systemd for details).

Confirming successful installation

Reboot your dom0 host and ensure that the Xen kernel boots correctly and that all settings survive a reboot. A properly set up dom0 should report the following when you run xl list (as root):

# xl list
Name                                        ID   Mem VCPUs	State	Time(s)
Domain-0                                     0   511     2     r-----   41652.9

Of course, the Mem, VCPUs and Time columns will be different depending on machine configuration and uptime. The important thing is that dom0 is listed.

In addition to the required steps above, see best practices for running Xen which includes information on allocating a fixed amount of memory and how to dedicate (pin) a CPU core for dom0 use. It also may be beneficial to create a xenfs filesystem mount point by including in /etc/fstab

 none /proc/xen xenfs defaults 0 0

Using Xen

Xen supports both paravirtualized (PV) and hardware virtualized (HVM) domUs. In the following sections the steps for creating HVM and PV domUs running Arch Linux are described. In general, the steps for creating an HVM domU are independent of the domU OS and HVM domUs support a wide range of operating systems including microsot Windows. To use HVM domUs the dom0 hardware must have virtualization support. Paravirtualized domUs do not require virtualization support, but instead require modifications to the guest operating system making the installation procedure different for each operating system (see the Guest Install page of the Xen wiki for links to instructions). Some operating systems (e.g., Microsoft Windows) cannot be installed as a PV domU. In general, HVM domUs often run slower than PV domUs since HVMs run on emulated hardware. While there are some common steps involved in setting up PV and HVM domUs, the processes are substantially different. In both cases, for each domU, a "hard disk" will need to be created and a configuration file needs to be written. Additionally, for installation each domU will need access to a copy of the installation ISO stored on the dom0 (see the Download Page to obtain the Arch Linux ISO).

Create a domU "hard disk"

Xen supports a number of different types of "hard disks" including Logical Volumes, raw partitions, and image files. To create a sparse file, that will grow to a maximum of 10GiB, called domU.img, use:

truncate -s 10G domU.img

If file IO speed is of greater importance than domain portability, using Logical Volumes or raw partitions may be a better choice.

Xen may present any partition / disk available to the host machine to a domain as either a partition or disk. This means that, for example, an LVM partition on the host can appear as a hard drive (and hold multiple partitions) to a domain. Note that making sub-partitons on a partition will make accessing those partitions on the host machine more difficult. See the kpartx man page for information on how to map out partitions within a partition.

Create a domU configuration

Each domU requires a separate configuration file that is used to create the virtual machine. Full details about the configuration files can be found at the Xen Wiki or the xl.cfg man page. Both HVM and PV domUs share some components of the configuration file. These include

 name = "domU"
 memory = 256
 disk = [ "file:/path/to/ISO,sdb,r", "phy:/path/to/partition,sda1,w" ]
 vif = [ 'mac=00:16:3e:XX:XX:XX,bridge=xenbr0' ]
 

The name= is the name by which the xl tools manage the domU and needs to be unique across all domUs. The disk= includes information about both the the installation media (file:) and the partition created for the domU phy. If an image file is being used instead of a physical partition, the phy: needs to be changed to file:. The vif= defines a network controller. The 00:16:3e MAC block is reserved for Xen domains, so the last three digits of the mac= must be randomly filled in (hex values 0-9 and a-f only).

Managing a domU

If a domU should be started on boot, create a symlink to the configuration file in /etc/xen/auto and ensure the xendomains service is set up correctly. Some useful commands for managing domUs are:

# xl top
# xl list
# xl console domUname
# xl shutdown domUname
# xl destroy domUname

Configuring a hardware virtualized (HVM) Arch domU

In order to use HVM domUs install the mesa-libgl and bluez-libs packages.

A minimal configuration file for a HVM Arch domU is:

 name = 'HVM_domU'
 builder = 'hvm'
 memory = 256
 vcpus = 2
 disk = [ 'phy:/dev/mapper/vg0-hvm_arch,xvda,w', 'file:/path/to/ISO,hdc:cdrom,r' ]
 vif = [ 'mac=00:16:3e:00:00:00,bridge=xenbr0' ]
 vnc = 1
 vnclisten = '0.0.0.0'
 vncdisplay = 1
 

Since HVM machines do not have a console, they can only be connected to via a vncviewer. The configuration file allows for unauthenticated remote access of the domU vncserver and is not suitable for unsecured networks. The vncserver will be available on port 590X, where X is the value of vncdisplay, of the dom0. The domU can be created with:

# xl create /path/to/config/file

and its status can be checked with

# xl list

Once the domU is created, connect to it via the vncserver and install Arch Linux as described in the Installation Guide.

Configuring a paravirtualized (PV) Arch domU

A minimal configuration file for a PV Arch domU is:

 name = "PV_domU"
 kernel = "/mnt/arch/boot/x86_64/vmlinuz"
 ramdisk = "/mnt/arch/boot/x86_64/archiso.img"
 extra = "archisobasedir=arch archisolabel=ARCH_201301"
 memory = 256
 disk = [ "phy:/path/to/partition,sda1,w", "file:/path/to/ISO,sdb,r" ]
 vif = [ 'mac=00:16:3e:XX:XX:XX,bridge=xenbr0' ]
 

This file needs to tweaked for your specific use. Most importantly, the archisolabel=ARCH_201301 line must be edited to use the release year/month of the ISO being used. If you want to install 32-bit Arch, change the kernel and ramdisk paths from /x86_64/ to /i686/.

Before creating the domU, the installation ISO must be loop-mounted. To do this, ensure the directory /mnt exists and is empty, then run the following command (being sure to fill in the correct ISO path):

# mount -o loop /path/to/iso /mnt

Once the ISO is mounted, the domU can be created with:

# xl create -c /path/to/config/file

The -c option will enter the domU's console when successfully created and install Arch Linux as described in the Installation Guide. There will be a few deviations, however. The block devices listed in the disks line of the cfg file will show up as /dev/xvd*. Use these devices when partitioning the domU. After installation and before the domU is rebooted, the xen-blkfront xen-fbfront xen-netfront xen-kbdfront modules must be added to Mkinitcpio. Without these modules, the domU will not boot correctly. For booting, it is not necessary to install Grub. Xen has a Python-based grub emulator, so all that is needed to boot is a grub.cfg file: (It may be necessary to create the /boot/grub directory)

/boot/grub/grub.cfg
menuentry 'Arch GNU/Linux, with Linux core repo kernel' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-true-__UUID__' {
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  __UUID__
        else
          search --no-floppy --fs-uuid --set=root __UUID__
        fi
        echo    'Loading Linux core repo kernel ...'
        linux   /boot/vmlinuz-linux root=UUID=__UUID__ ro
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initramfs-linux.img
}

This file must be edited to match the UUID of the root partition. From within the domU, run the following command:

# blkid

Replace all instances of __UUID__ with the real UUID of the root partition (the one that mounts as "/").

Shutdown the domU with the poweroff command. The console will be returned to the hypervisor when the domain is fully shut down, and the domain will no longer appear in the xl domains list. Now the ISO file may be unmounted:

# umount /mnt

The domU cfg file should now be edited. Delete the "kernel = ", "ramdisk = ", and "extra = " lines and replace them with the following line:

bootloader = "pygrub"

Also remove the ISO disk from the "disk = " line.

The Arch domU is now set up. It may be started with the same line as before:

# xl create -c /etc/xen/archdomu.cfg

Common Errors

  • 'xl list' complains about libxl

- Either you have not booted into the Xen system, or xen modules listed in xencommons script are not installed

  • xl create fails

- check the guest's kernel is located correctly, check the pv-xxx.cfg file for spelling mistakes (like using initrd instead of ramdisk)

  • Arch linux guest hangs with a ctrl-d message

- press ctrl-d until you get back to a prompt, rebuild its initramfs described

  • Error message "failed to execute '/usr/lib/udev/socket:/org/xen/xend/udev_event' 'socket:/org/xen/xend/udev_event': No such file or directory"

- caused by /etc/udev/rules.d/xend.rules; xend is (a) deprecated and (b) not used, so it is safe to remove xend.rules

Resources