--- wikisrc/ports/xen/howto.mdwn 2013/10/31 12:34:39 1.2 +++ wikisrc/ports/xen/howto.mdwn 2013/10/31 12:43:04 1.3 @@ -108,24 +108,22 @@ Note that your CPU needs to support this instruction, AMD CPUs the 'SVM' instruction. You can easily find out if your CPU support HVM by using NetBSD's cpuctl command: -``` -# cpuctl identify 0 -cpu0: Intel Core 2 (Merom) (686-class), id 0x6f6 -cpu0: features 0xbfebfbff -cpu0: features 0xbfebfbff -cpu0: features 0xbfebfbff -cpu0: features2 0x4e33d -cpu0: features3 0x20100800 -cpu0: "Intel(R) Xeon(R) CPU 5130 @ 2.00GHz" -cpu0: I-cache 32KB 64B/line 8-way, D-cache 32KB 64B/line 8-way -cpu0: L2 cache 4MB 64B/line 16-way -cpu0: ITLB 128 4KB entries 4-way -cpu0: DTLB 256 4KB entries 4-way, 32 4MB entries 4-way -cpu0: Initial APIC ID 0 -cpu0: Cluster/Package ID 0 -cpu0: Core ID 0 -cpu0: family 06 model 0f extfamily 00 extmodel 00 -``` + # cpuctl identify 0 + cpu0: Intel Core 2 (Merom) (686-class), id 0x6f6 + cpu0: features 0xbfebfbff + cpu0: features 0xbfebfbff + cpu0: features 0xbfebfbff + cpu0: features2 0x4e33d + cpu0: features3 0x20100800 + cpu0: "Intel(R) Xeon(R) CPU 5130 @ 2.00GHz" + cpu0: I-cache 32KB 64B/line 8-way, D-cache 32KB 64B/line 8-way + cpu0: L2 cache 4MB 64B/line 16-way + cpu0: ITLB 128 4KB entries 4-way + cpu0: DTLB 256 4KB entries 4-way, 32 4MB entries 4-way + cpu0: Initial APIC ID 0 + cpu0: Cluster/Package ID 0 + cpu0: Core ID 0 + cpu0: family 06 model 0f extfamily 00 extmodel 00 Depending on your CPU, the feature you are looking for is called HVM, SVM or VMX. @@ -156,86 +154,80 @@ console to use, etc ... Here is a commented `/grub/menu.lst`{.filename} file: -~~~ {.programlisting} #Grub config file for NetBSD/xen. Copy as /grub/menu.lst and run -# grub-install /dev/rwd0d (assuming your boot device is wd0). -# -# The default entry to load will be the first one -default=0 - -# boot the default entry after 10s if the user didn't hit keyboard -timeout=10 - -# Configure serial port to use as console. Ignore if you'll use VGA only -serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 - -# Let the user select which console to use (serial or VGA), default -# to serial after 10s -terminal --timeout=10 serial console - -# An entry for NetBSD/xen, using /netbsd as the domain0 kernel, and serial -# console. Domain0 will have 64MB RAM allocated. -# Assume NetBSD is installed in the first MBR partition. -title Xen 3 / NetBSD (hda0, serial) - root(hd0,0) - kernel (hd0,a)/xen.gz dom0_mem=65536 com1=115200,8n1 - module (hd0,a)/netbsd bootdev=wd0a ro console=ttyS0 - -# Same as above, but using VGA console -# We can use console=tty0 (Linux syntax) or console=pc (NetBSD syntax) -title Xen 3 / NetBSD (hda0, vga) - root(hd0,0) - kernel (hd0,a)/xen.gz dom0_mem=65536 - module (hd0,a)/netbsd bootdev=wd0a ro console=tty0 - -# NetBSD/xen using a backup domain0 kernel (in case you installed a -# nonworking kernel as /netbsd -title Xen 3 / NetBSD (hda0, backup, serial) - root(hd0,0) - kernel (hd0,a)/xen.gz dom0_mem=65536 com1=115200,8n1 - module (hd0,a)/netbsd.backup bootdev=wd0a ro console=ttyS0 -title Xen 3 / NetBSD (hda0, backup, VGA) - root(hd0,0) - kernel (hd0,a)/xen.gz dom0_mem=65536 - module (hd0,a)/netbsd.backup bootdev=wd0a ro console=tty0 - -#Load a regular NetBSD/i386 kernel. Can be useful if you end up with a -#nonworking /xen.gz -title NetBSD 5.1 - root (hd0,a) - kernel --type=netbsd /netbsd-GENERIC - -#Load the NetBSD bootloader, letting it load the NetBSD/i386 kernel. -#May be better than the above, as grub can't pass all required infos -#to the NetBSD/i386 kernel (e.g. console, root device, ...) -title NetBSD chain - root (hd0,0) - chainloader +1 - -## end of grub config file. + # grub-install /dev/rwd0d (assuming your boot device is wd0). + # + # The default entry to load will be the first one + default=0 + + # boot the default entry after 10s if the user didn't hit keyboard + timeout=10 + + # Configure serial port to use as console. Ignore if you'll use VGA only + serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 + + # Let the user select which console to use (serial or VGA), default + # to serial after 10s + terminal --timeout=10 serial console + + # An entry for NetBSD/xen, using /netbsd as the domain0 kernel, and serial + # console. Domain0 will have 64MB RAM allocated. + # Assume NetBSD is installed in the first MBR partition. + title Xen 3 / NetBSD (hda0, serial) + root(hd0,0) + kernel (hd0,a)/xen.gz dom0_mem=65536 com1=115200,8n1 + module (hd0,a)/netbsd bootdev=wd0a ro console=ttyS0 + + # Same as above, but using VGA console + # We can use console=tty0 (Linux syntax) or console=pc (NetBSD syntax) + title Xen 3 / NetBSD (hda0, vga) + root(hd0,0) + kernel (hd0,a)/xen.gz dom0_mem=65536 + module (hd0,a)/netbsd bootdev=wd0a ro console=tty0 + + # NetBSD/xen using a backup domain0 kernel (in case you installed a + # nonworking kernel as /netbsd + title Xen 3 / NetBSD (hda0, backup, serial) + root(hd0,0) + kernel (hd0,a)/xen.gz dom0_mem=65536 com1=115200,8n1 + module (hd0,a)/netbsd.backup bootdev=wd0a ro console=ttyS0 + title Xen 3 / NetBSD (hda0, backup, VGA) + root(hd0,0) + kernel (hd0,a)/xen.gz dom0_mem=65536 + module (hd0,a)/netbsd.backup bootdev=wd0a ro console=tty0 + + #Load a regular NetBSD/i386 kernel. Can be useful if you end up with a + #nonworking /xen.gz + title NetBSD 5.1 + root (hd0,a) + kernel --type=netbsd /netbsd-GENERIC + + #Load the NetBSD bootloader, letting it load the NetBSD/i386 kernel. + #May be better than the above, as grub can't pass all required infos + #to the NetBSD/i386 kernel (e.g. console, root device, ...) + title NetBSD chain + root (hd0,0) + chainloader +1 + + ## end of grub config file. -~~~ - Install grub with the following command: -~~~ {.programlisting} -# grub --no-floppy - -grub> root (hd0,a) - Filesystem type is ffs, partition type 0xa9 - -grub> setup (hd0) - Checking if "/boot/grub/stage1" exists... no - Checking if "/grub/stage1" exists... yes - Checking if "/grub/stage2" exists... yes - Checking if "/grub/ffs_stage1_5" exists... yes - Running "embed /grub/ffs_stage1_5 (hd0)"... 14 sectors are embedded. -succeeded - Running "install /grub/stage1 (hd0) (hd0)1+14 p (hd0,0,a)/grub/stage2 /grub/menu.lst"... - succeeded -Done. - -~~~ + # grub --no-floppy + + grub> root (hd0,a) + Filesystem type is ffs, partition type 0xa9 + + grub> setup (hd0) + Checking if "/boot/grub/stage1" exists... no + Checking if "/grub/stage1" exists... yes + Checking if "/grub/stage2" exists... yes + Checking if "/grub/ffs_stage1_5" exists... yes + Running "embed /grub/ffs_stage1_5 (hd0)"... 14 sectors are embedded. + succeeded + Running "install /grub/stage1 (hd0) (hd0)1+14 p (hd0,0,a)/grub/stage2 /grub/menu.lst"... + succeeded + Done. * * * * * @@ -248,19 +240,15 @@ Once you have *domain0* running, you nee sure that `/dev/xencons`{.filename} and `/dev/xenevt`{.filename} exist before starting **xend**. You can create them with this command: -~~~ {.programlisting} -# cd /dev && sh MAKEDEV xen -~~~ + # cd /dev && sh MAKEDEV xen xend will write logs to `/var/log/xend.log`{.filename} and `/var/log/xend-debug.log`{.filename}. You can then control xen with the xm tool. 'xm list' will show something like: -~~~ {.programlisting} -# xm list -Name Id Mem(MB) CPU State Time(s) Console -Domain-0 0 64 0 r---- 58.1 -~~~ + # xm list + Name Id Mem(MB) CPU State Time(s) Console + Domain-0 0 64 0 r---- 58.1 'xm create' allows you to create a new domain. It uses a config file in PKG\_SYSCONFDIR for its parameters. By default, this file will be in @@ -275,100 +263,98 @@ binary sets: XEN3\_DOMU. Here is an /usr/pkg/etc/xen/nbsd example config file: -~~~ {.programlisting} -# -*- mode: python; -*- -#============================================================================ -# Python defaults setup for 'xm create'. -# Edit this file to reflect the configuration of your system. -#============================================================================ - -#---------------------------------------------------------------------------- -# Kernel image file. This kernel will be loaded in the new domain. -kernel = "/home/bouyer/netbsd-XEN3_DOMU" -#kernel = "/home/bouyer/netbsd-INSTALL_XEN3_DOMU" - -# Memory allocation (in megabytes) for the new domain. -memory = 128 - -# A handy name for your new domain. This will appear in 'xm list', -# and you can use this as parameters for xm in place of the domain -# number. All domains must have different names. -# -name = "nbsd" - -# The number of virtual CPUs this domain has. -# -vcpus = 1 - -#---------------------------------------------------------------------------- -# Define network interfaces for the new domain. - -# Number of network interfaces (must be at least 1). Default is 1. -nics = 1 - -# Define MAC and/or bridge for the network interfaces. -# -# The MAC address specified in ``mac'' is the one used for the interface -# in the new domain. The interface in domain0 will use this address XOR'd -# with 00:00:00:01:00:00 (i.e. aa:00:00:51:02:f0 in our example). Random -# MACs are assigned if not given. -# -# ``bridge'' is a required parameter, which will be passed to the -# vif-script called by xend(8) when a new domain is created to configure -# the new xvif interface in domain0. -# -# In this example, the xvif is added to bridge0, which should have been -# set up prior to the new domain being created -- either in the -# ``network'' script or using a /etc/ifconfig.bridge0 file. -# -vif = [ 'mac=aa:00:00:50:02:f0, bridge=bridge0' ] - -#---------------------------------------------------------------------------- -# Define the disk devices you want the domain to have access to, and -# what you want them accessible as. -# -# Each disk entry is of the form: -# -# phy:DEV,VDEV,MODE -# -# where DEV is the device, VDEV is the device name the domain will see, -# and MODE is r for read-only, w for read-write. You can also create -# file-backed domains using disk entries of the form: -# -# file:PATH,VDEV,MODE -# -# where PATH is the path to the file used as the virtual disk, and VDEV -# and MODE have the same meaning as for ``phy'' devices. -# -# VDEV doesn't really matter for a NetBSD guest OS (it's just used as an index), -# but it does for Linux. -# Worse, the device has to exist in /dev/ of domain0, because xm will -# try to stat() it. This means that in order to load a Linux guest OS -# from a NetBSD domain0, you'll have to create /dev/hda1, /dev/hda2, ... -# on domain0, with the major/minor from Linux :( -# Alternatively it's possible to specify the device number in hex, -# e.g. 0x301 for /dev/hda1, 0x302 for /dev/hda2, etc ... - -disk = [ 'phy:/dev/wd0e,0x1,w' ] -#disk = [ 'file:/var/xen/nbsd-disk,0x01,w' ] -#disk = [ 'file:/var/xen/nbsd-disk,0x301,w' ] - -#---------------------------------------------------------------------------- -# Set the kernel command line for the new domain. - -# Set root device. This one does matter for NetBSD -root = "xbd0" -# extra parameters passed to the kernel -# this is where you can set boot flags like -s, -a, etc ... -#extra = "" - -#---------------------------------------------------------------------------- -# Set according to whether you want the domain restarted when it exits. -# The default is False. -#autorestart = True - -# end of nbsd config file ==================================================== -~~~ + # -*- mode: python; -*- + #============================================================================ + # Python defaults setup for 'xm create'. + # Edit this file to reflect the configuration of your system. + #============================================================================ + + #---------------------------------------------------------------------------- + # Kernel image file. This kernel will be loaded in the new domain. + kernel = "/home/bouyer/netbsd-XEN3_DOMU" + #kernel = "/home/bouyer/netbsd-INSTALL_XEN3_DOMU" + + # Memory allocation (in megabytes) for the new domain. + memory = 128 + + # A handy name for your new domain. This will appear in 'xm list', + # and you can use this as parameters for xm in place of the domain + # number. All domains must have different names. + # + name = "nbsd" + + # The number of virtual CPUs this domain has. + # + vcpus = 1 + + #---------------------------------------------------------------------------- + # Define network interfaces for the new domain. + + # Number of network interfaces (must be at least 1). Default is 1. + nics = 1 + + # Define MAC and/or bridge for the network interfaces. + # + # The MAC address specified in ``mac'' is the one used for the interface + # in the new domain. The interface in domain0 will use this address XOR'd + # with 00:00:00:01:00:00 (i.e. aa:00:00:51:02:f0 in our example). Random + # MACs are assigned if not given. + # + # ``bridge'' is a required parameter, which will be passed to the + # vif-script called by xend(8) when a new domain is created to configure + # the new xvif interface in domain0. + # + # In this example, the xvif is added to bridge0, which should have been + # set up prior to the new domain being created -- either in the + # ``network'' script or using a /etc/ifconfig.bridge0 file. + # + vif = [ 'mac=aa:00:00:50:02:f0, bridge=bridge0' ] + + #---------------------------------------------------------------------------- + # Define the disk devices you want the domain to have access to, and + # what you want them accessible as. + # + # Each disk entry is of the form: + # + # phy:DEV,VDEV,MODE + # + # where DEV is the device, VDEV is the device name the domain will see, + # and MODE is r for read-only, w for read-write. You can also create + # file-backed domains using disk entries of the form: + # + # file:PATH,VDEV,MODE + # + # where PATH is the path to the file used as the virtual disk, and VDEV + # and MODE have the same meaning as for ``phy'' devices. + # + # VDEV doesn't really matter for a NetBSD guest OS (it's just used as an index), + # but it does for Linux. + # Worse, the device has to exist in /dev/ of domain0, because xm will + # try to stat() it. This means that in order to load a Linux guest OS + # from a NetBSD domain0, you'll have to create /dev/hda1, /dev/hda2, ... + # on domain0, with the major/minor from Linux :( + # Alternatively it's possible to specify the device number in hex, + # e.g. 0x301 for /dev/hda1, 0x302 for /dev/hda2, etc ... + + disk = [ 'phy:/dev/wd0e,0x1,w' ] + #disk = [ 'file:/var/xen/nbsd-disk,0x01,w' ] + #disk = [ 'file:/var/xen/nbsd-disk,0x301,w' ] + + #---------------------------------------------------------------------------- + # Set the kernel command line for the new domain. + + # Set root device. This one does matter for NetBSD + root = "xbd0" + # extra parameters passed to the kernel + # this is where you can set boot flags like -s, -a, etc ... + #extra = "" + + #---------------------------------------------------------------------------- + # Set according to whether you want the domain restarted when it exits. + # The default is False. + #autorestart = True + + # end of nbsd config file ==================================================== When a new domain is created, xen calls the `/usr/pkg/etc/xen/vif-bridge`{.filename} script for each virtual network @@ -378,10 +364,8 @@ will be bridged with the bridge0 device to exist first. To do this, create the file `/etc/ifconfig.bridge0`{.filename} and make it look like this: -~~~ {.programlisting} -create -!brconfig $int add ex0 up -~~~ + create + !brconfig $int add ex0 up (replace `ex0`{.literal} with the name of your physical interface). Then bridge0 will be created on boot. See the @@ -393,87 +377,83 @@ xvif?.? (a working vif-bridge is also pr configuring: -~~~ {.programlisting} #!/bin/sh -#============================================================================ -# $NetBSD: howto.mdwn,v 1.1 2013/10/31 12:20:57 mspo Exp $ -# -# /usr/pkg/etc/xen/vif-bridge -# -# Script for configuring a vif in bridged mode with a dom0 interface. -# The xend(8) daemon calls a vif script when bringing a vif up or down. -# The script name to use is defined in /usr/pkg/etc/xen/xend-config.sxp -# in the ``vif-script'' field. -# -# Usage: vif-bridge up|down [var=value ...] -# -# Actions: -# up Adds the vif interface to the bridge. -# down Removes the vif interface from the bridge. -# -# Variables: -# domain name of the domain the interface is on (required). -# vifq vif interface name (required). -# mac vif MAC address (required). -# bridge bridge to add the vif to (required). -# -# Example invocation: -# -# vif-bridge up domain=VM1 vif=xvif1.0 mac="ee:14:01:d0:ec:af" bridge=bridge0 -# -#============================================================================ - -# Exit if anything goes wrong -set -e - -echo "vif-bridge $*" - -# Operation name. -OP=$1; shift - -# Pull variables in args into environment -for arg ; do export "${arg}" ; done - -# Required parameters. Fail if not set. -domain=${domain:?} -vif=${vif:?} -mac=${mac:?} -bridge=${bridge:?} - -# Optional parameters. Set defaults. -ip=${ip:-''} # default to null (do nothing) - -# Are we going up or down? -case $OP in -up) brcmd='add' ;; -down) brcmd='delete' ;; -*) - echo 'Invalid command: ' $OP - echo 'Valid commands are: up, down' - exit 1 - ;; -esac - -# Don't do anything if the bridge is "null". -if [ "${bridge}" = "null" ] ; then - exit -fi - -# Don't do anything if the bridge doesn't exist. -if ! ifconfig -l | grep "${bridge}" >/dev/null; then - exit -fi - -# Add/remove vif to/from bridge. -ifconfig x${vif} $OP -brconfig ${bridge} ${brcmd} x${vif} -~~~ + #============================================================================ + # $NetBSD: howto.mdwn,v 1.2 2013/10/31 12:34:39 mspo Exp $ + # + # /usr/pkg/etc/xen/vif-bridge + # + # Script for configuring a vif in bridged mode with a dom0 interface. + # The xend(8) daemon calls a vif script when bringing a vif up or down. + # The script name to use is defined in /usr/pkg/etc/xen/xend-config.sxp + # in the ``vif-script'' field. + # + # Usage: vif-bridge up|down [var=value ...] + # + # Actions: + # up Adds the vif interface to the bridge. + # down Removes the vif interface from the bridge. + # + # Variables: + # domain name of the domain the interface is on (required). + # vifq vif interface name (required). + # mac vif MAC address (required). + # bridge bridge to add the vif to (required). + # + # Example invocation: + # + # vif-bridge up domain=VM1 vif=xvif1.0 mac="ee:14:01:d0:ec:af" bridge=bridge0 + # + #============================================================================ + + # Exit if anything goes wrong + set -e + + echo "vif-bridge $*" + + # Operation name. + OP=$1; shift + + # Pull variables in args into environment + for arg ; do export "${arg}" ; done + + # Required parameters. Fail if not set. + domain=${domain:?} + vif=${vif:?} + mac=${mac:?} + bridge=${bridge:?} + + # Optional parameters. Set defaults. + ip=${ip:-''} # default to null (do nothing) + + # Are we going up or down? + case $OP in + up) brcmd='add' ;; + down) brcmd='delete' ;; + *) + echo 'Invalid command: ' $OP + echo 'Valid commands are: up, down' + exit 1 + ;; + esac + + # Don't do anything if the bridge is "null". + if [ "${bridge}" = "null" ] ; then + exit + fi + + # Don't do anything if the bridge doesn't exist. + if ! ifconfig -l | grep "${bridge}" >/dev/null; then + exit + fi + + # Add/remove vif to/from bridge. + ifconfig x${vif} $OP + brconfig ${bridge} ${brcmd} x${vif} Now, running -~~~ {.programlisting} -xm create -c /usr/pkg/etc/xen/nbsd -~~~ + xm create -c /usr/pkg/etc/xen/nbsd should create a domain and load a NetBSD kernel in it. (Note: `-c`{.code} causes xm to connect to the domain's console once created.) @@ -489,9 +469,7 @@ sysinst, so you can install NetBSD using If you want to install NetBSD/Xen with a CDROM image, the following line should be used in the `/usr/pkg/etc/xen/nbsd`{.filename} file: -~~~ {.programlisting} -disk = [ 'phy:/dev/wd0e,0x1,w', 'phy:/dev/cd0a,0x2,r' ] -~~~ + disk = [ 'phy:/dev/wd0e,0x1,w', 'phy:/dev/cd0a,0x2,r' ] After booting the domain, the option to install via CDROM may be selected. The CDROM device should be changed to **xbd1d**. @@ -509,22 +487,18 @@ and the pseudo-terminals. These can be f disable all terminals in `/etc/ttys`{.filename}, except *console*, like this: -~~~ {.programlisting} -console "/usr/libexec/getty Pc" vt100 on secure -ttyE0 "/usr/libexec/getty Pc" vt220 off secure -ttyE1 "/usr/libexec/getty Pc" vt220 off secure -ttyE2 "/usr/libexec/getty Pc" vt220 off secure -ttyE3 "/usr/libexec/getty Pc" vt220 off secure -~~~ + console "/usr/libexec/getty Pc" vt100 on secure + ttyE0 "/usr/libexec/getty Pc" vt220 off secure + ttyE1 "/usr/libexec/getty Pc" vt220 off secure + ttyE2 "/usr/libexec/getty Pc" vt220 off secure + ttyE3 "/usr/libexec/getty Pc" vt220 off secure Finally, all screens must be commented out from `/etc/wscons.conf`{.filename}. It is also desirable to add -~~~ {.programlisting} -powerd=YES -~~~ + powerd=YES in rc.conf. This way, the domain will be properly shut down if **xm shutdown -R** or **xm shutdown -H** is used on the domain0. @@ -541,9 +515,7 @@ unprivileged NetBSD domains, but there a First, the second parameter passed to the disk declaration (the '0x1' in the example below) -~~~ {.programlisting} -disk = [ 'phy:/dev/wd0e,0x1,w' ] -~~~ + disk = [ 'phy:/dev/wd0e,0x1,w' ] does matter to Linux. It wants a Linux device number here (e.g. 0x300 for hda). Linux builds device numbers as: (major \<\< 8 + minor). So, @@ -552,10 +524,8 @@ number 0x301. Alternatively, devices nam as xentools has a table to map these names to devices numbers. To export a partition to a Linux guest we can use: -~~~ {.programlisting} -disk = [ 'phy:/dev/wd0e,0x300,w' ] -root = "/dev/hda1 ro" -~~~ + disk = [ 'phy:/dev/wd0e,0x300,w' ] + root = "/dev/hda1 ro" and it will appear as /dev/hda on the Linux system, and be used as root partition. @@ -575,9 +545,7 @@ vmlinuz-\*-xenU kernels available in the To get the linux console right, you need to add: -~~~ {.programlisting} -extra = "xencons=tty1" -~~~ + extra = "xencons=tty1" to your configuration since not all linux distributions auto-attach a tty to the xen console. @@ -593,23 +561,20 @@ image to a device. Copy the kernel and ramdisk filesystem image to your dom0 filesystem. -~~~ {.programlisting} -dom0# mkdir /root/solaris -dom0# vnconfig vnd0 osol-1002-124-x86.iso -dom0# mount /dev/vnd0a /mnt - -## for a 64-bit guest -dom0# cp /mnt/boot/amd64/x86.microroot /root/solaris -dom0# cp /mnt/platform/i86xpv/kernel/amd64/unix /root/solaris - -## for a 32-bit guest -dom0# cp /mnt/boot/x86.microroot /root/solaris -dom0# cp /mnt/platform/i86xpv/kernel/unix /root/solaris - -dom0# umount /mnt + dom0# mkdir /root/solaris + dom0# vnconfig vnd0 osol-1002-124-x86.iso + dom0# mount /dev/vnd0a /mnt + + ## for a 64-bit guest + dom0# cp /mnt/boot/amd64/x86.microroot /root/solaris + dom0# cp /mnt/platform/i86xpv/kernel/amd64/unix /root/solaris + + ## for a 32-bit guest + dom0# cp /mnt/boot/x86.microroot /root/solaris + dom0# cp /mnt/platform/i86xpv/kernel/unix /root/solaris + + dom0# umount /mnt -~~~ - Keep the [vnd(4)](http://netbsd.gw.com/cgi-bin/man-cgi?vnd+4+NetBSD-6.0+i386) configured. For some reason the boot process stalls unless the DVD image