File:  [NetBSD Developer Wiki] / wikisrc / tutorials / how_to_set_up_a_guest_os_using_xen3.mdwn
Revision 1.4: download - view: text, annotated - select for diffs
Wed Jan 28 13:29:07 2015 UTC (5 years, 5 months ago) by gdt
Branches: MAIN
CVS tags: HEAD
add in-your-face pointer to main howto.

    1: **Contents**
    2: 
    3: [[!toc levels=3]]
    4: 
    5: # Meta
    6: 
    7: Note that there is also a [Xen HOWTO](../../ports/xen/howto/).
    8: Arguably this content could be folded in there.
    9: 
   10: #  Requirements
   11: 
   12: Xen3 is supported from NetBSD-4.0 onward. If you plan on using NetBSD-CURRENT,
   13: please read the article [[How to build NetBSD-current]] to do so. Guest
   14: operating systems can run from their own partitions, or from image files in
   15: the main (DOM0) install.
   16: 
   17: This tutorial describes how to:
   18: 
   19:   * Install and configure NetBSD as a DOM0 
   20:   * Install and run a NetBSD as a DOMU 
   21:   * Install and run a Windows XP system as as DOMU 
   22:   * Install and run a Debian system as a DOMU 
   23: 
   24: #  Installing Xen tools and kernels
   25: 
   26: ##  Xen tools
   27: 
   28: To run and administer xen domains, we need the xentools3 or xentools33
   29: packages which are available in pkgsrc.
   30: 
   31: Xen 3.1 packages are under [sysutils/xentools3](http://pkgsrc.se/sysutils/xentools3) for traditional xentools,
   32: and [sysutils/xentools3-hvm](http://pkgsrc.se/sysutils/xentools3-hvm) for the additional **HVM** support to run un-
   33: modified OSes such as Windows XP.
   34: 
   35: Xen 3.3 packages are under [sysutils/xentools33](http://pkgsrc.se/sysutils/xentools33). Unlike Xen 3.1, no extra
   36: package is required for **HVM** support. Note, it is not possible to install
   37: Xen 3.1 and Xen 3.3 packages at the same time. They conflict with each other.
   38: 
   39: **HVM** stands for **Hardware Virtualization Managed**. The benefit of hardware virtualization is that you can run OSes that don't know they are being virutalized like Windows XP, for example. However, you must have a CPU which supports this. Intel CPUs must have the 'VT' instruction. AMD CPUs will have the 'SVM' instruction. You can find out if your CPU supports HVM by taking a look at this page: 
   40: 
   41: <http://wiki.xensource.com/xenwiki/HVM_Compatible_Processors>
   42: 
   43: In NetBSD 5.0 there's a new cpuctl command. This is an example output of an
   44: AMD CPU:
   45: 
   46:     
   47:      # cpuctl identify 0
   48:      cpu0: AMD Unknown K8 (Athlon) (686-class), 2210.22 MHz, id 0x60f82
   49:      cpu0: features 0x178bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR>
   50:      cpu0: features 0x178bfbff<PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX>
   51:      cpu0: features 0x178bfbff<FXSR,SSE,SSE2,HTT>
   52:      cpu0: features2 0x2001<SSE3,CX16>
   53:      cpu0: features3 0xebd3fbff<SCALL/RET,NOX,MXX,FFXSR,RDTSCP,LONG,3DNOW2,3DNOW>
   54:      cpu0: features4 0x11f<LAHF,CMPLEGACY,SVM,EAPIC,ALTMOVCR0,3DNOWPREFETCH>
   55:      cpu0: "AMD Turion(tm) 64 X2 Mobile Technology TL-64"
   56:      cpu0: I-cache 64KB 64B/line 2-way, D-cache 64KB 64B/line 2-waycpu0: L2 cache 1MB 64B/line 16-way
   57:      cpu0: ITLB 32 4KB entries fully associative, 8 4MB entries fully associative
   58:      cpu0: DTLB 32 4KB entries fully associative, 8 4MB entries fully associativecpu0: Initial APIC ID 0
   59:      cpu0: AMD Power Management features: 0x7f<TS,FID,VID,TTP,HTC,STC,100>
   60:      cpu0: family 0f model 08 extfamily 00 extmodel 06
   61:     
   62: 
   63: Note the **SVM** feature flag in the **features4** line indicating that
   64: **HVM** support is present on this CPU. However, this feature may be disabled
   65: in the BIOS. In this case since NetBSD 5.0 there will show up this dmesg line
   66: on AMD CPUs only:
   67: 
   68:     
   69:      cpu0: SVM disabled by the BIOS
   70:     
   71: 
   72:   
   73: Xen 3.1 (the xentools3-hvm package will automatically bring in the base
   74: xentools3):
   75: 
   76:     
   77:     # cd /usr/pkgsrc/sysutils/xentools3-hvm
   78:     # make install
   79:     
   80: 
   81: Xen 3.3:
   82: 
   83:     
   84:     # cd /usr/pkgsrc/sysutils/xentools33
   85:     # make install
   86:     
   87: 
   88: ##  Xen kernel
   89: 
   90: Next, we will get the xen hypervisor kernel itself. For NetBSD 4.x and 5.x the
   91: i386 port does not support 'PAE' kernels and must run the Xen 3.1 package.
   92: This restriction has been removed in -current and is not relevant for the
   93: amd64 port.
   94: 
   95: For Xen 3.1, in pkgsrc this is [sysutils/xenkernel3](http://pkgsrc.se/sysutils/xenkernel3), for Xen 3.3, this is
   96: [sysutils/xenkernel33](http://pkgsrc.se/sysutils/xenkernel33):
   97: 
   98:     
   99:     # cd /usr/pkgsrc/sysutils/xenkernel3
  100:     # make install
  101:     
  102: 
  103: And copy it into / directory, like this:
  104: 
  105:     
  106:     # cp /usr/pkg/xen3-kernel/xen.gz /
  107:     
  108: 
  109: ##  Xen DOM0 kernel
  110: 
  111: Lastly, we need a XEN-enabled kernel for our DOM0 domain. There are two
  112: possibilities: downloading the binary version, or building it from source.
  113: 
  114: ##  Downloading the binary version
  115: 
  116: From NetBSD-4.0 onward, NetBSD supports Xen, and provides some XEN-enabled
  117: kernel directly from [[1]][36], in each `binary/kernel` directory associated
  118: with a particular release.
  119: 
  120: For example, with NetBSD-4.0, You can grab one from
  121: (<ftp.NetBSD.org/pub/NetBSD/NetBSD-4.0/i386/binary/kernel>/netbsd-XEN3_DOM0.gz):
  122: 
  123:     
  124:     # ftp -a ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-4.0/i386/binary/kernel/netbsd-XEN3_DOM0.gz
  125:     
  126: 
  127: The `netbsd-XEN3_DOM0.gz` file contains a gzipped version of the kernel. Just
  128: copy and move it into the root directory like this:
  129: 
  130:     
  131:     # cp netbsd-XEN3_DOM0.gz /
  132:     
  133: 
  134: ##  Building it from source
  135: 
  136: Building a kernel from source is out of the scope of this section. Please
  137: consult [How to build a kernel](http://www.netbsd.org/docs/kernel/#how_to_build_a_kernel) from NetBSD's FAQ for more details.
  138: 
  139: Once building is done, you can find them in
  140: `/usr/src/obj/_releasedir_/i386/binary/kernel/`. Identically to binary
  141: version, copy or move netbsd-XEN3_DOM0 in the root directory `/`.
  142: 
  143: #  Selecting a bootloader
  144: 
  145: In NetBSD 5.0 the native boot loader, /boot, can load Xen directly.
  146: The NetBSD 5.0 bootloader can be easily dropped into a NetBSD 4.x system by coping them into
  147: /boot and running installboot(8) properly.
  148: 
  149: ##  Updating /boot
  150: 
  151: For full details refer to installboot(8), but for a standard configuration
  152: with VGA console and an IDE or SATA drive with an FFSv1 root file system use
  153: the following:
  154: 
  155:     
  156:     # cp /usr/mdec/boot /boot
  157:     # installboot -v -o timeout=5 /dev/rwd0a /usr/mdec/bootxx_ffsv1
  158:     
  159: 
  160: ##  Updating /boot.cfg
  161: 
  162: NetBSD 5.0 or later will already have a /boot.cfg file with a basic
  163: configuration. Enabling Xen support only requires one additional line in this
  164: case. If you're upgrading from an earlier version or do not have an existing
  165: /boot.cfg use the following example:
  166: 
  167:     
  168:     
  169:     banner=Welcome to NetBSD
  170:     banner==================
  171:     banner=
  172:     banner=Please choose an option from the following menu:
  173:     menu=Boot normally:boot netbsd
  174:     menu=Boot single-user:boot netbsd -s
  175:     menu=Boot backup kernel:boot onetbsd
  176:     menu=Drop to boot prompt:prompt
  177:     menu=Boot Xen with 256MB for dom0:load /netbsd-XEN3_DOM0 console=pc;multiboot /usr/pkg/xen3-kernel/xen.gz dom0_mem=256M
  178:     menu=Boot Xen with 256MB for dom0 (serial):load /netbsd-XEN3_DOM0 console=com0;multiboot /usr/pkg/xen3-kernel/xen.gz dom0_mem=256M console=com1 com1=115200,8n1
  179:     menu=Boot Xen with dom0 in single-user mode:load /netbsd-XEN3_DOM0 -s;multiboot /usr/pkg/xen3-kernel/xen.gz dom0_mem=256M
  180:     timeout=5
  181:     default=1
  182:     
  183: 
  184: Make sure you update the "load /netbsd-XEN3_DOM0" and the "dom0_mem=256M"
  185: arguments to match your setup. On next boot select the 'Boot Xen with 256MB
  186: for dom0' option and make sure you see Xen kernel messages and the normal
  187: NetBSD kernel messages. Once you're satisfied it is working you can change the
  188: "default=1" line to "default=5" to automatically boot Xen on reboot.
  189: 
  190: #  Setting up DOM0
  191: 
  192: ##  Creating xen devices
  193: 
  194: To create all xen devices, change to /dev and run ./MAKEDEV xen
  195: 
  196:     
  197:     cd /dev
  198:     ./MAKEDEV xen
  199:     
  200: 
  201: This should create the devices **xencons**, **xenevt** and **xsd_kva**. If any
  202: of these are missing you may not have updated to _CURRENT_ using the latest
  203: sources and you will have to create the missing device files.
  204: 
  205: ##  Configuring the bridge interface
  206: 
  207: The [bridge(4)](http://netbsd.gw.com/cgi-bin/man-cgi?bridge+4+NetBSD-current) interface is used to provide network access to DOMUs.
  208: 
  209: To use one, edit (or create) the file `/etc/ifconfig.bridge0` and insert
  210: following lines to:
  211: 
  212:     
  213:     create
  214:     !brconfig $int add bge0 stp bge0 up
  215:     
  216: 
  217: Where 'bge0' should be changed to the name of the interface you want to use
  218: with your guest operating systems. use [ifconfig(8)](http://netbsd.gw.com/cgi-bin/man-cgi?ifconfig+8+NetBSD-current) to get more details
  219: about your actual interfaces.
  220: 
  221: ##  Rebooting into DOM0
  222: 
  223: Time to reboot:
  224: 
  225:     
  226:     # shutdown -r now
  227:     
  228: 
  229: If all has gone well, you should have booted into the XEN3_DOM0 kernel. Check
  230: this with [uname(1)](http://netbsd.gw.com/cgi-bin/man-cgi?uname+1+NetBSD-current):
  231: 
  232:     
  233:     # uname -v
  234:     NetBSD 4.0 (XEN3_DOM0) #0: Sun Dec 16 01:20:31 PST 2007
  235:     builds@wb34:/home/builds/ab/netbsd-4-0-RELEASE/i386/200712160005Z-obj/home/builds/ab/netbsd-4-0-RELEASE/src/sys/arch/i386/compile/XEN3_DOM0
  236:     
  237: 
  238: You should have **XEN3 DOM0** mentioned somewhere.
  239: 
  240: ##  Configuring rc scripts
  241: 
  242: Copy or symlink xend, xenbackendd and xendomains from
  243: `/usr/pkg/share/examples/rc.d` to `/etc/rc.d`.
  244: 
  245:     
  246:     # cp /usr/pkg/share/examples/rc.d/xend /etc/rc.d/
  247:     # cp /usr/pkg/share/examples/rc.d/xenbackendd /etc/rc.d/
  248:     # cp /usr/pkg/share/examples/rc.d/xendomains /etc/rc.d/
  249:     
  250: 
  251: Edit `/etc/rc.conf` and add the following lines:
  252: 
  253:     
  254:     xend=YES
  255:     xenbackendd=YES
  256:     xendomains="dom1"
  257:     
  258: 
  259: Later on, when you have created a configuration file for 'dom1', the
  260: xendomains variable specified above will trigger 'dom1' to be started when the
  261: system is booted. At this point no configuration exists for dom1, therefore it
  262: does nothing at this point. If you choose to name your configuration file
  263: something else, adapt the name accordingly.
  264: 
  265: To avoid rebooting a second, start all three services:
  266: 
  267:     
  268:     # /etc/rc.d/xend start
  269:     # /etc/rc.d/xenbackendd start
  270:     # /etc/rc.d/xendomains start
  271:     
  272: 
  273: Run `ifconfig -a` to ensure the bridge interface is present and issue a `ps ax
  274: | grep xen` to ensure you have a similar output.
  275: 
  276:     
  277:     
  278:     12 ?     DK   0:00.00 [xenwatch]
  279:     13 ?     DK   0:00.00 [xenbus]
  280:     411 ?     I    0:00.24 xenstored --pid-file=/var/run/xenstore.pid
  281:     594 ?     IWa  0:00.26 xenconsoled
  282:     629 ?     IW   0:00.00 /usr/pkg/bin/python2.3 /usr/pkg/sbin/xend start
  283:     631 ?     IWsa 0:00.02 /usr/pkg/sbin/xenbackendd
  284:     639 ?     IWa  0:00.52 /usr/pkg/bin/python2.3 /usr/pkg/sbin/xend start
  285:     
  286: 
  287: The DOM0 configuration is now done. We will proceed to configuring DOMU
  288: domains.
  289: 
  290: #  Configuring DOMU
  291: 
  292: ##  Configuring and installing a NetBSD DOMU
  293: 
  294: Create (or modify) `/usr/pkg/etc/xen/dom1` and include this:
  295: 
  296:     
  297:     
  298:     kernel = "/usr/src/obj/releasedir/i386/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz"
  299:     #kernel = "/netbsd-XEN3_DOMU"
  300:     memory = 64
  301:     name = "dom1"
  302:     #vcpus = 1
  303:     disk = [ 'phy:/dev/wd0g,0x03,w','file:/usr/src/obj/releasedir/i386/installation/cdrom/netbsd-i386.iso,0x04,r' ]
  304:     vif = [ 'bridge=bridge0' ]
  305:     root = "/dev/wd0d"
  306:     
  307: 
  308: This configuration boots into the NetBSD sysinst program and allows you to
  309: install a NetBSD DOMU using the normal sysinst method. This configuration uses
  310: a DOMU_INSTALL kernel and an ISO image provided by a successful 'build
  311: release' and 'build iso-image'. You may be able to locate a valid Xen3
  312: DOMU_INSTALL kernel from <ftp://ftp.netbsd.org/pub/NetBSD-daily/> but if
  313: not, building a release is your best bet.
  314: 
  315: In this configuration file, `/dev/wd0g` is the reserved partition for the
  316: guest operating system. This should be changed to the partition you reserved
  317: prior to following the instructions within this document.
  318: 
  319: If you would like to use a physical CDROM instead of an ISO image, change the
  320: disk line to:
  321: 
  322:     
  323:     disk = [ 'phy:/dev/wd0g,0x03,w','phy:/dev/cd0a,0x04,r' ]
  324:     
  325: 
  326: Now boot into sysinst using the command:
  327: 
  328:     
  329:     xm create dom1 -c
  330:     
  331: 
  332: The reserved partition will appear as `/dev/xbd0`. Proceed as you would with a
  333: normal NetBSD installation using xbd0 as the target drive and xbd1 as the
  334: CDROM.
  335: 
  336: When you have finished, run `shutdown -hp now` to dom1.
  337: 
  338: Now edit `/usr/pkg/etc/xen/dom1`. Comment the INSTALL kernel and uncomment the
  339: DOMU kernel.
  340: 
  341: You should now have a working NetBSD DOMU (dom1). Boot into dom1 again with
  342: the command:
  343: 
  344:     
  345:     xm create dom1 -c
  346:     
  347: 
  348: and ensure the file, `/etc/ttys` contains only this line or has all other
  349: lines commented:
  350: 
  351:     
  352:     console "/usr/libexec/getty Pc"         vt100   on secure
  353:     
  354: 
  355: and the file `/etc/wscons.conf` is completely empty or has all lines commented
  356: out. These last two steps ensure no errors should be present on boot. Setting
  357: wscons=NO in `/etc/rc.conf` may effectively do the same thing.
  358: 
  359: From here, configure `/etc/rc.conf` and all runtime configuration files as you
  360: would normally. The network interface name should be _**xennet0**_. Use this
  361: name when configuring an IP address.
  362: 
  363: More information can be obtained by referencing the [Xen user guide](http://www.cl.cam.ac.uk/Research/SRG/netos/xen/readmes/user/) and
  364: [the official NetBSD Xen Howto](http://www.netbsd.org/Ports/xen/howto.html). Questions can be addressed to the port-
  365: xen@NetBSD.org mailling list.
  366: 
  367: ##  Configuring and installing a Windows XP DOMU
  368: 
  369: This requires an HVM capable processor and xentools (see sections above).
  370: 
  371: This assumes you have a copy of the Windows install CD in /home/xen/winxp.iso,
  372: and wish to create a file /home/xen/winxp.img to hold the install. First
  373: create a blank file to hold the install. This assumes a size of 4GB (4096M).
  374: If you want a different size adjust the numbers to match:
  375: 
  376:     
  377:     # dd if=/dev/zero of=/home/xen/winxp.img bs=1m count=4096
  378:     
  379: 
  380: Create `/usr/pkg/etc/xen/win01`:
  381: 
  382:     
  383:     
  384:     kernel = '/usr/pkg/lib/xen/boot/hvmloader'
  385:     builder = 'hvm'
  386:     memory = '400'
  387:     device_model='/usr/pkg/libexec/qemu-dm'
  388:     
  389:     disk = [ 'file:/home/xen/winxp.img,ioemu:hda,w',
  390:               'file:/home/xen/winxp.iso,ioemu:hdb:cdrom,r', ]
  391:     
  392:     # Hostname
  393:     name = "win01"
  394:     
  395:     vif = [ 'type=ioemu, bridge=bridge0' ]
  396:     
  397:     boot= 'd'
  398:     vnc = 1
  399:     usbdevice = 'tablet' # Helps with mouse pointer positioning
  400:     
  401: 
  402: You may want to modify the amount of memory and pathnames.
  403: 
  404: Ensure you have a vncviewer installed, such as [net/tightvncviewer](http://pkgsrc.se/net/tightvncviewer) or
  405: [net/vncviewer](http://pkgsrc.se/net/vncviewer) from pkgsrc.
  406: 
  407: Then start the XENU and connect to it via VNC.
  408: 
  409:     
  410:     # xm create /usr/pkg/etc/xen/win01
  411:     # vncviewer :0
  412:     
  413: 
  414: This will boot the Windows ISO image and let you install Windows as normal. As
  415: Windows reboots during install you may need to restart vncviewer.
  416: 
  417: After install change the **boot d** to **boot c** to have the system boot
  418: directly from the disk image.
  419: 
  420: ##  Configuring and installing a GNU/Linux DOMU
  421: 
  422: We will do this in two steps:
  423: 
  424:   * install a GNU/Linux system, from a livecd or any installation media 
  425:   * configure the DOM0 so that it can create and start the Linux DOMU. 
  426: 
  427: ###  Installing a Linux distribution (soon-to-be DOMU)
  428: 
  429: Before proceeding with DOMU configuration, we will install our favorite
  430: GNU/Linux distribution on the computer.
  431: 
  432: In order to do it, we need at least two partitions (only one, if you do not
  433: consider the swap). These partitions must reside outside of the NetBSD slice,
  434: and may be either of primary or extended type. Of course, you can use more
  435: than two, but adapt your labels and partitions accordingly.
  436: 
  437: We do not cover the partition/slices manipulations through [fdisk(8)](http://netbsd.gw.com/cgi-bin/man-cgi?fdisk+8+NetBSD-current) and
  438: [disklabel(8)](http://netbsd.gw.com/cgi-bin/man-cgi?disklabel+8+NetBSD-current), as it depends strongly on how you manage your hard drive's
  439: space.
  440: 
  441: For this tutorial, we will use this partitioning:
  442: 
  443:     
  444:     
  445:     # fdisk /dev/wd0d                                                      
  446:     fdisk: removing corrupt bootsel information
  447:     fdisk: Cannot determine the number of heads
  448:     Disk: /dev/wd0d
  449:     NetBSD disklabel disk geometry:
  450:     cylinders: 486344, heads: 16, sectors/track: 63 (1008 sectors/cylinder)
  451:     total sectors: 490234752
  452:     
  453:     BIOS disk geometry:
  454:     cylinders: 1023, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
  455:     total sectors: 490234752
  456:     
  457:     Partition table:
  458:     0: Linux native (sysid 131)
  459:         start 63, size 20482812 (10001 MB, Cyls 0-1274)
  460:             PBR is not bootable: All bytes are identical (0x00)
  461:     1: Linux swap or Prime or Solaris (sysid 130)
  462:         start 20482875, size 1959930 (957 MB, Cyls 1275-1396)
  463:             PBR is not bootable: All bytes are identical (0x00)
  464:     2: NetBSD (sysid 169)
  465:         start 61464690, size 428770062 (209360 MB, Cyls 3826-30515/178/63), Active
  466:     3: <UNUSED>
  467:     Drive serial number: -286527765 (0xeeebeeeb)
  468:     
  469: 
  470: Here, you notice that we decide to use two primary partitions for our future
  471: Linux DOMU:
  472: 
  473:   * partition 0 (for the **root directory /**) 
  474:   * partition 1 (for the **swap**) 
  475: 
  476: Labels:
  477: 
  478:     
  479:     
  480:     16 partitions:
  481:     #        size    offset     fstype [fsize bsize cpg/sgs]
  482:      a:  30720816  61464690     4.2BSD   2048 16384     0  # (Cyl.  60976*-  91453*)
  483:      b:   1049328  92185506       swap                     # (Cyl.  91453*-  92494*)
  484:      c: 428770062  61464690     unused      0     0        # (Cyl.  60976*- 486343)
  485:      d: 490234752         0     unused      0     0        # (Cyl.      0 - 486343)
  486:      e:  20480000  93234834     4.2BSD      0     0     0  # (Cyl.  92494*- 112812*)
  487:      f:  20480000 113714834     4.2BSD      0     0     0  # (Cyl. 112812*- 133129*)
  488:      g:  20480000 134194834     4.2BSD      0     0     0  # (Cyl. 133129*- 153447*)
  489:      h: 335559918 154674834     4.2BSD      0     0     0  # (Cyl. 153447*- 486343)
  490:      i:  20482812        63 Linux Ext2      0     0        # (Cyl.      0*-  20320*)
  491:      j:   1959930  20482875       swap                     # (Cyl.  20320*-  22264*)
  492:     
  493: 
  494: Bear in mind that we added two labels here, namely **i** and **j**, which maps
  495: respectively to partition 0 and partition 1 of the disk. We will use these
  496: labels later for DOMU configuration.
  497: 
  498: Now that we have partitioned the disk, proceed with installing your Linux
  499: distribution. We will not cover that part in this tutorial. You can either
  500: install it from an installation media (a cdrom from example), or copy files
  501: from an already installed distribution on your computer.
  502: 
  503: Tip: to manipulate ext2/3 filesystems (the traditional fs under Linux) from
  504: NetBSD, you can use [sysutils/e2fsprogs](http://pkgsrc.se/sysutils/e2fsprogs) from pkgsrc:
  505: 
  506:     
  507:     # cd /usr/pkgsrc/sysutils/e2fsprogs
  508:     # make install
  509:     
  510: 
  511: And then use e2fsck, mke2fs and [mount_ext2fs(8)](http://netbsd.gw.com/cgi-bin/man-cgi?mount_ext2fs+8+NetBSD-current) directly from NetBSD.
  512: 
  513: ###  Getting XEN aware Linux kernels
  514: 
  515: Once installation is done, reboot your computer and return to our Xen-NetBSD
  516: system.
  517: 
  518: To boot our Linux DOMU, we will need a Linux kernel supporting the XENU
  519: virtualisation. Depending on your Linux distribution, you can grab one from
  520: its repository (it is up to you to find it through aptitude, yum or whatever
  521: package manager you use), or get one from the Xen binary distribution.
  522: 
  523: To get a XENU Linux kernel from Xen binary distribution, get it directly from
  524: [Xen website download page](http://www.xen.org/download/dl_31tarballs.html). Download the tarball and extract the
  525: **vmlinuz-*-xen** from it. In our case, with a 2.6.18 Linux kernel:
  526: 
  527:     
  528:     # ftp -a http://bits.xensource.com/oss-xen/release/3.1.0/bin.tgz/xen-3.1.0-install-x86_32.tgz
  529:     # cd /tmp
  530:     # tar -xzf xen-3.1.0-install-x86_32.tgz dist/install/boot/vmlinuz-2.6.18-xen
  531:     
  532: 
  533: **vmlinuz-2.6.18-xen** is the kernel that Xen will use to start the DOMU. Move it to any directory you like (just remember it when configuring the _kernel_ entry in the DOMU configuration file): 
  534:     
  535:     # mv dist/install/boot/vmlinuz-2.6.18-xen /vmlinuz-XEN3-DOMU
  536:     
  537: 
  538: ###  Configuring DOMU
  539: 
  540: Configuring the Linux DOMU is a bit different than a NetBSD one; some options
  541: tend to differ.
  542: 
  543: Edit (or create) the configuration file **domu-linux**, in
  544: `/usr/pkg/etc/xen/`:
  545: 
  546:     
  547:     # vi /usr/pkg/etc/xen/domu-linux
  548:     
  549: 
  550: Here's a typical config file for a Linux DOMU:
  551: 
  552:     
  553:     
  554:     #----------------------------------------------------------------------------
  555:     # Kernel image file. This kernel will be loaded in the new domain.
  556:     kernel = "/vmlinuz-XEN3-DOMU"
  557:     
  558:     # Memory allocation (in megabytes) for the new domain.
  559:     memory = 256
  560:     
  561:     # A handy name for your new domain. This will appear in 'xm list',
  562:     # and you can use this as parameters for xm in place of the domain
  563:     # number. All domains must have different names.
  564:     #
  565:     name = "domu-linux"
  566:     
  567:     # Which CPU to start domain on (only relevant for SMP hardware).  CPUs
  568:     # numbered starting from ``0''.
  569:     #
  570:     cpu = "^1"   # leave to Xen to pick
  571:     
  572:     #----------------------------------------------------------------------------
  573:     # Define network interfaces for the new domain.
  574:     
  575:     # Number of network interfaces (must be at least 1). Default is 1.
  576:     vif = [ '' ]
  577:     
  578:     # Define MAC and/or bridge for the network interfaces.
  579:     #
  580:     # The MAC address specified in ``mac'' is the one used for the interface
  581:     # in the new domain. The interface in domain0 will use this address XOR'd
  582:     # with 00:00:00:01:00:00 (i.e. aa:00:00:51:02:f0 in our example). Random
  583:     # MACs are assigned if not given.
  584:     #
  585:     # ``bridge'' is a required parameter, which will be passed to the
  586:     # vif-script called by xend(8) when a new domain is created to configure
  587:     # the new xvif interface in domain0.
  588:     #
  589:     # In this example, the xvif is added to bridge0, which should have been
  590:     # set up prior to the new domain being created -- either in the
  591:     # ``network'' script or using a /etc/ifconfig.bridge0 file.
  592:     #
  593:     vif = [ 'mac=aa:00:00:50:02:f0, bridge=bridge0' ]
  594:     
  595:     #----------------------------------------------------------------------------
  596:     # Define the disk devices you want the domain to have access to, and
  597:     # what you want them accessible as.
  598:     #
  599:     # Each disk entry is of the form:
  600:     #
  601:     #       phy:DEV,VDEV,MODE
  602:     #
  603:     # where DEV is the device, VDEV is the device name the domain will see,
  604:     # and MODE is r for read-only, w for read-write.  You can also create
  605:     # file-backed domains using disk entries of the form:
  606:     #
  607:     #       file:PATH,VDEV,MODE
  608:     #
  609:     # where PATH is the path to the file used as the virtual disk, and VDEV
  610:     # and MODE have the same meaning as for ``phy'' devices.
  611:     #
  612:     # /dev/wd0i will be seen as "hda1" under DOMU (the root partition)
  613:     # /dev/wd0j will be seen as "hda2" under DOMU (the swap)
  614:     #
  615:     disk = [ 'phy:/dev/wd0i,hda1,w','phy:/dev/wd0j,hda2,w' ]
  616:     
  617:     #----------------------------------------------------------------------------
  618:     # Set the kernel command line for the new domain.
  619:     
  620:     # Set root device.
  621:     root = "/dev/hda1"
  622:     
  623: 
  624: Now, you should be able to start your first Linux DOMU!
  625: 
  626:     
  627:     # xm create -c /usr/pkg/etc/xen/domu-linux
  628:     
  629: 
  630: #  Possible caveats
  631: 
  632: If you intend to have more than one box configured with the above
  633: configuration on the same network, you will most likely have to specify a
  634: unique MAC address per guest OS, otherwise it is likely you will have a
  635: conflict. I'm not sure if the MAC assignment is random, incremental or if Xen
  636: is able to check for the existence of the proposed MAC address, so specifying
  637: the MAC address is recommended.
  638: 
  639: Here is a method to assign a MAC address to a newly created Xen Domu. First as
  640: described before, use the following vif parameter in your config file :
  641: 
  642:     
  643:     
  644:     vif = [ 'bridge=bridge0' ]
  645:     
  646: 
  647: Then, run the Xen DomU and, once logged run the following command :
  648: 
  649:     
  650:     
  651:     # ifconfig xennet0
  652:     
  653:     Output Sample : 
  654:     
  655:     xennet0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  656:             capabilities=2800<TCP4CSUM_Tx,UDP4CSUM_Tx>
  657:             enabled=0
  658:             address: 00:16:3e:2e:32:5f
  659:             inet 192.168.4.81 netmask 0xffffff00 broadcast 192.168.4.255
  660:             inet6 fe80::216:3eff:fe2e:325f%xennet0 prefixlen 64 scopeid 0x2
  661:     
  662:     
  663: 
  664: A MAC address is automaticaly generated, use it in your config file with the
  665: following syntax :
  666: 
  667:     
  668:     
  669:     vif = [ 'mac=00:16:3e:2e:32:5f, bridge=bridge0' ]
  670:     
  671: 
  672: And now you can restart the Xen DomU.
  673: 
  674: Please, note that the MAC Address MUST start with "00:16:3e".
  675: 
  676:   
  677: 
  678: #  See also
  679: 
  680:   * [The official NetBSD Xen Howto](http://www.netbsd.org/Ports/xen/howto.html)
  681:   * [The official Xen Wiki](http://wiki.xensource.com/xenwiki/)
  682: 

CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb