• How To

    How to install Xen 4 on Debian 6 Squeeze x64

    Posted on February 11th, 2011

    Written by CJ

    Tags

    How to install Xen 4 on Debian 6 Squeeze x64.

    Great Deals @ Geeks.com!

    by webdevster.com

    This tutorial is for an HVM x64 VM on a XEN x64 HOST with LVM partition (IMO - is one of the fastest ways you can go for a XEN setup), so you’ll need a cpu with VT enabled. First off, you need to know what HVM, LVM mean, so go here. If you don’t know what XEN is you can go here; even though it’s for another tutorial, the same principle applies.

    So if you know what XEN LVM HVM means, than you are good to go. I will show you how to install XEN 4 on Debian 6 Squeeze x64, with LVM. Xen on Debian 6 squeeze went smooth, in contrast to other setups. I have also, included “how to install Debian Squeeze with LVM” for beginner’s as well.

    It’s best to start with a wiped HD when dealing with LVM. If it’s not a new HDD, I recommend using Darik’s Boot And Nuke, to wipe all data, before you get started.

    Download the latest version of Squeeze, which at this time is 6.0 (kind of ironic, ay). You can download either the netinstall or full cd; only CD 1 is needed, so don’t go download a bunch of CDs you’ll never use.

    Insert the Debian Squeeze x64 Installation Disk (debian-6.0.0-amd64-netinst.iso) to start the installation process.

    How to install Debian Squeeze with LVM

    Partition Disk - Select ‘Manual’ Partition
    In my example, I use 73gb = 4gb for Debian Squeeze x64 OS, 2gb for swap, and the rest is for physical LVM. The swap here is for the XEN host, and will not be shared by the VMs.
    So, on blank HDD, you’ll want to do the following:

    Create Debian Squeeze OS Partition:

    • Select Disk you want to install OS to.
    • Select Yes, to create a new empty partition table on this device.
    • Select, pri/log 73 GB Free Space
    • Create a new partition (FYI: OS)
    • Enter 4GB, for partition size, select continue
    • Select Primary
    • Select Beginning
    • For partition settings, use the following settings (Label is Optional):
    • Use as: Ext4 journaling file system
      Mount point: /
      Mount options: defaults
      Label: none
      Reserved blocks: 5%
      Typical Usage: standard
      Bootable flag: on
    • Select, Done setting up the partition.

    Create Swap Partition:

    • Select, pri/log 69 GB Free Space
    • Create a new partition (FYI: Swap)
    • Enter 2GB, for partition size, select continue (you’ll need to come up with a custom swap size for your server)
    • Select Logical
    • Select Beginning
    • For partition settings, use the following settings (Label is Optional):
    • Use as: swap area
      Bootable flag: off
    • Select, Done setting up the partition.

    Create LVM:

    • Select, pri/log 67 GB Free Space
    • Create a new partition (FYI: LVM)
    • Enter default of 67gb, for partition size, select continue
    • Select Primary
    • For partition settings, use the following settings (Label is Optional):
    • Use as: physical volume for LVM
      Bootable flag: off
    • Select, Done setting up the partition.

    So now your done with partitioning and Debian Squeeze will take care of the formatting.

    Your screen should look like this: Note: I didn’t feel like creating a screenshot image, so I used an old image (same thing applies accept I used ext4 (YEA), instead of ext3.
    Partitioning Debian 6 Squeeze for LVM - 1

    • Now select, Finish partitioning and write changes to disk.

    Your screen should look like this: Note: I didn’t feel like creating a screenshot image, so I used an old image (same thing applies accept I used ext4 (YEA), instead of ext3.
    Partitioning Debian 6 Squeeze for LVM - 2

    • Select, Yes. The base installation will start.

    Set up Passwords

    This is pretty self explanatory

    Configure the package mngr

    Select default ftp.us.debian.org, or your preference

    Software Selection

    Deselect all, i.e. Desktop Environment, Standard System Utilites, etc..

    Installing Grub boot Loader

    Select Yes (auto installs Grub2 by default)

    Finish the installation

    Select, Continue

    NOTE:
    It’s worth noting that Debian Squeeze has changed some common cli commands, and default installation pkgs (like the grub2). Debian Squeeze now installs grub2 by default, so the “used to be Lenny” grub.lst is now loacted in /boot/grub/grub.cfg; but not like you can edit this file and change the boot sequence anymore, as I’ll show you below how to boot your hypervisor. Another change is the command: prompt> /etc/init.d/networking restart, Running /etc/init.d/networking restart, is deprecated because it may not enable again some interfaces … (warning). So the new method is prompt> ifdown eth0 && ifup eth0. There are more changes, as I will explain as I go along with this tutorial.

    Install essential pkgs

    Our attempt here and throughout this tutorial is to create a slim installation of the Xen host.

    Login as root.

    prompt>apt-get update prompt>aptitude full-upgrade prompt>apt-get install openssh-server ssh wget

    You can optionally remote log in as root, with SSH (i.e. ssh via putty); or optionally with mRemote for easability.

    Configure static network IP

    prompt>nano /etc/network/interfaces

    Erase or comment out, all info and copy in the following (depending on your configuration):

      auto lo
      iface lo inet loopback
     
      auto eth0
      iface eth0 inet static
      address 10.1.11.11
      netmask 255.255.255.0
      network 10.1.11.0
      broadcast 10.1.11.255
      gateway 10.1.11.1
    prompt>ifdown eth0 && ifup eth0

    Once you restart networking, you will need to point your ssh client to the new IP, 10.1.11.11.

    We can now move onto installing and configuring Xen.

    Install the latest stable version of Xen on Squeeze x64.

    Install basic prerequsites.

    prompt>apt-get install libvirt-bin virtinst bridge-utils

    See what XEN Kernels are available for your Debian Squeeze x64.

    prompt>apt-get update prompt>apt-cache search xen | grep image
    linux-image-2.6.32-5-amd64 - Linux 2.6.32 for 64-bit PCs
    linux-image-2.6.32-5-openvz-amd64 - Linux 2.6.32 for 64-bit PCs, OpenVZ support
    linux-image-2.6.32-5-vserver-amd64 - Linux 2.6.32 for 64-bit PCs, Linux-VServer support
    linux-image-2.6.32-5-xen-amd64-dbg - Debugging infos for Linux 2.6.32-5-xen-amd64
    linux-image-2.6.32-5-xen-amd64 - Linux 2.6.32 for 64-bit PCs, Xen dom0 support
    linux-image-2.6-amd64 - Linux 2.6 for 64-bit PCs (meta-package)
    linux-image-2.6-openvz-amd64 - Linux 2.6 for 64-bit PCs (meta-package), OpenVZ support
    linux-image-2.6-vserver-amd64 - Linux 2.6 for 64-bit PCs (meta-package), Linux-VServer support
    linux-image-2.6-xen-amd64 - Linux 2.6 for 64-bit PCs (meta-package), Xen dom0 support
    linux-image-amd64 - Linux for 64-bit PCs (meta-package)
    linux-image-openvz-amd64 - Linux for 64-bit PCs (meta-package), OpenVZ support
    linux-image-vserver-amd64 - Linux for 64-bit PCs (meta-package), Linux-VServer support
    linux-image-xen-amd64 - Linux for 64-bit PCs (meta-package), Xen dom0 support
    linux-image-2.6.30-2-amd64 - Linux 2.6.30 image on AMD64

    Check out which kernel you have:

    prompt>uname -r
    2.6.32-5-amd64

    So luck (or smart xen/debian squeeze contributors/maintainers/users) has it, that there is a XEN kernel which matches our kernel. We’ll install XEN with matching kernels; linux-image-2.6.32-5-xen-amd64.

    prompt>apt-get install linux-image-2.6.32-5-xen-amd64 xen-tools

    Configure XEN Loop

    prompt>nano /etc/modules

    Verify and add if not there:

    loop max_loop=64

    Edit XEN config file, reboot, and verify Xen Kernel running.

    prompt>cp /etc/xen/xend-config.sxp /etc/xen/xend-config.sxp.bak

    Always a good idea to back up original files. Ok, so know let’s change the file.

    prompt>nano /etc/xen/xend-config.sxp

    Change this:

    #(xend-http-server no)

    to this:

    (xend-http-server yes)

    Change this:

    #(xend-unix-server no)

    to this:

    (xend-unix-server yes)

    Change this:

    #(network-script network-bridge)

    to this:

    (network-script 'network-bridge antispoof=yes')

    Verify:

    (vif-script vif-bridge)

    is uncommented

    Change this:

    #(vnc-listen '127.0.0.1')

    to this:

    (vnc-listen '0.0.0.0')

    Change this:

    (vncpasswd '')

    to this:

    (vncpasswd 'SOMEVNCPASSWORD')

    Now you are probably woondering why we set VNC to 0.0.0.0, or even messed with VNC settings. Well to answer your thoughts, we need VNC, in order to install the HVM VM, remember this isn’t paravirtualization, where you use xen-tools to create VMS, here we’ll create VMs using VNC. We set the “listen to” 0.0.0.0, only for installtion and practical reasons. Once your VNC is setup, you’ll need to revisit the “listen to”, and configure it for security reasons.

    Configure Squeeze Grub and Optional XEN Settings

    Optional - Good idea to disable OS prober; prevents virtual machines on logical volumes from appearing in the boot menu, per http://wiki.debian.org/Xen

    prompt>nano /etc/default/grub

    Add the Following

    #Disable OS prober.
    GRUB_DISABLE_OS_PROBER=true

    Optional - Definitely optional, so loook into this before enabling, per http://wiki.debian.org/Xen

    prompt>nano/etc/default/xendomains

    Add the Following

    XENDOMAINS_RESTORE=false
    XENDOMAINS_SAVE=""

    Required - Change grub2 loading order

    prompt>ls /etc/grub.d/
    00_header 05_debian_theme 10_linux 20_linux_xen 30_os-prober 40_custom 41_custom README

    Unlike the former grub.lst, the new grub2 requires setting files in order, do we’ll move the 10_linux to the back, so 20_linux_xen, takes precedence. Per http://wiki.debian.org/Xen, Debian Squeeze and Sid use Grub 2, and the defaults are wrong for Xen. The Xen hypervisor (and not just a Xen-ready kernel!) should be the first entry, so do this: mv -i /etc/grub.d/10_linux /etc/grub.d/50_linux update-grub2

    prompt>mv /etc/grub.d/10_linux /etc/grub.d/50_linux prompt>update-grub2
    Generating grub.cfg …
    Found linux image: /boot/vmlinuz-2.6.32-5-xen-amd64
    Found initrd image: /boot/initrd.img-2.6.32-5-xen-amd64
    Found linux image: /boot/vmlinuz-2.6.32-5-xen-amd64
    Found initrd image: /boot/initrd.img-2.6.32-5-xen-amd64
    Found linux image: /boot/vmlinuz-2.6.32-5-amd64
    Found initrd image: /boot/initrd.img-2.6.32-5-amd64
    done
    prompt>reboot

    Now check your shiny Xen 4.0 Kernal on x64, pretty cool ay?

    prompt>uname -r
    2.6.32-5-xen-amd64

    Run a quick test, you’ll notice Domain-O (domO).

    prompt>xm list

    If you had not change the order of the grub :) in the step prior, you would have recv’d this error:

    prompt>xm list
    WARNING! Can’t find hypervisor information in sysfs!
    Error: Unable to connect to xend: No such file or directory. Is xend running?

    Ok, so now that your XEN is “all cool and stuff”, we can move onto installing VNC.

    One more thing before moving onto VNC. It’s weird but after the new Lenny to Squeeze change I get this error on reboot, with VT enabled or disabled in bios (maybe a bug or it could be a hug). Don’t know if you guys get it; let me know if you do and /or have any suggestions. Everything still runs fine, but would love to get rid of these error messages on reboot.

    ERROR: Unable to locate IOAPIC for GSI 2
    ERROR: Unable to locate IOAPIC for GSI 9
    registering netback
    ....
    "Your system does not have the CPU extension required to use KVM. Not doing anything.. failed"
    XENBUS: Unable to read cpu state

    Install VNC Server and Terminal Emulator

    So, like I said before in order to install a XEN HVM VM, you’ll need VNC. We will simply need a basic VNC Server setup, which comes with Xvnc. To learn more about why VNC and Windows Manager go here.

    • Install VNC Server
    prompt>apt-get install -y vncviewer vnc4server xinetd xterm
    • Setup Password with the following - Starts VNC Server and prompts you for a new password (SOMEVNCPASSWORD) up to 8 characters long.
    prompt>vnc4server
    • To create new password, if you changed your mind
    prompt>/usr/bin/vncpasswd

    Configure VNC Server

    Now, there are many ways to configure a VNC Server, so that we can interact with our Xen host and Xen host VMs. We’re going to enable a normal desktop (Xvnc) with terminal emulator, on the Xen host.

    Edit VNC Server xstartup file.

    prompt>nano /root/.vnc/xstartup

    Change this:

    #unset SESSION_MANAGER
    #exec /etc/X11/xinit/xinitrc

    To this:

    unset SESSION_MANAGER
    exec sh /etc/X11/xinit/xinitrc

    Pay attention, here the #exec /etc/X11/xinit/xinitrc, was uncommented and an ’sh’ was added. Your welcome.

    This fixes the following problem in vncserver /root/.vnc/x01:5.log file:
    /root/.vnc/xstartup: line 5: /etc/X11/xinit/xinitrc: Permission denied
    /root/.vnc/xstartup: line 5: exec: /etc/X11/xinit/xinitrc: cannot execute: Success
    per: vnc4server: Normal desktop permission prob with xinitrc

    Change this:

    x-window-manager &

    To This:

    #x-window-manager &

    Obviously save it, and run:

    prompt>chmod 755 /root/.vnc/xstartup

    Create a Security Policy (if it doesn’t exist) file.

    If you have been following this tutorial, this file currently doesn’t exist.

    Up to you, which option you want.

    Option 1:

    prompt>mkdir /etc/X11/xserver prompt>nano /etc/X11/xserver/SecurityPolicy

    and copy and save the following (line by line, as is (don’t get creative)) into the file:

    version-1
     
    # $Xorg: SecurityPolicy,v 1.3 2000/08/17 19:47:56 cpqbld Exp $
     
    # The site policy fields are interpreted by the XC-QUERY-SECURITY-1
    # authorization protocol.  The values are arbitrary and site-specific.
    # Refer to the Security Extension Specification for the usage of the policies.
    #sitepolicy A
    #sitepolicy B
    #sitepolicy C
     
    # Property access rules:
    # property <property> <window> <permissions>
    # <window> ::= any | root | <propertyselector>
    # <propertyselector> ::= <property> | <property>=<value>
    # <permissions> :== [ <operation> | <action> | <space> ]*
    # <operation> :== r | w | d
    #       r       read
    #       w       write
    #       d       delete
    # <action> :== a | i | e
    #       a       allow
    #       i       ignore
    #       e       error
     
    # Allow reading of application resources, but not writing.
    property RESOURCE_MANAGER       root    ar iw
    property SCREEN_RESOURCES       root    ar iw
     
    # Ignore attempts to use cut buffers.  Giving errors causes apps to crash,
    # and allowing access may give away too much information.
    property CUT_BUFFER0    root    irw
    property CUT_BUFFER1    root    irw
    property CUT_BUFFER2    root    irw
    property CUT_BUFFER3    root    irw
    property CUT_BUFFER4    root    irw
    property CUT_BUFFER5    root    irw
    property CUT_BUFFER6    root    irw
    property CUT_BUFFER7    root    irw
     
    # If you are using Motif, you probably want these.
    property _MOTIF_DEFAULT_BINDINGS        root    ar iw
    property _MOTIF_DRAG_WINDOW     root    ar iw
    property _MOTIF_DRAG_TARGETS    any     ar iw
    property _MOTIF_DRAG_ATOMS      any     ar iw
    property _MOTIF_DRAG_ATOM_PAIRS any     ar iw
    # If you are running CDE you also need these
    property _MOTIF_WM_INFO         root    arw
    property TT_SESSION             root    irw
    property WM_ICON_SIZE           root    irw
    property "SDT Pixel Set"        any     irw
     
    # The next two rules let xwininfo -tree work when untrusted.
    property WM_NAME        any     ar
     
    # Allow read of WM_CLASS, but only for windows with WM_NAME.
    # This might be more restrictive than necessary, but demonstrates
    # the <required property> facility, and is also an attempt to
    # say "top level windows only."
    property WM_CLASS       WM_NAME ar
     
    # These next three let xlsclients work untrusted.  Think carefully
    # before including these; giving away the client machine name and command
    # may be exposing too much.
    property WM_STATE       WM_NAME ar
    property WM_CLIENT_MACHINE      WM_NAME ar
    property WM_COMMAND     WM_NAME ar
     
    # To let untrusted clients use the standard colormaps created by
    # xstdcmap, include these lines.
    property RGB_DEFAULT_MAP        root    ar
    property RGB_BEST_MAP   root    ar
    property RGB_RED_MAP    root    ar
    property RGB_GREEN_MAP  root    ar
    property RGB_BLUE_MAP   root    ar
    property RGB_GRAY_MAP   root    ar
     
    # To let untrusted clients use the color management database created
    # by xcmsdb, include these lines.
    property XDCCC_LINEAR_RGB_CORRECTION    root    ar
    property XDCCC_LINEAR_RGB_MATRICES      root    ar
    property XDCCC_GRAY_SCREENWHITEPOINT    root    ar
    property XDCCC_GRAY_CORRECTION  root    ar
     
    # To let untrusted clients use the overlay visuals that many vendors
    # support, include this line.
    property SERVER_OVERLAY_VISUALS root    ar

    derived from from: /etc/X11/xserver/SecurityPolicy

    Option 2:

    prompt>apt-get install xserver-xorg

    After this operation, 24.7MB of additional disk space will be used.

    Autostart VNC server at Boot

    Now make VNC Server auto start upon Xen host boot, by creating, editing, and configuring a new file, i.e. startvnc.

    prompt>nano /etc/init.d/startvnc

    Add the following:

    #! /bin/sh
    export USER="root"
    export PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
    NAME=vncstart
    start()
    {
        su - $USER -c"vncserver :5"
    }
    stop()
    {
        su - $USER -c"vncserver -clean -kill :1"
    }
    case "$1" in
        start)
            echo -n "Starting Xvnc: "
            start
            ;;
        stop)
            echo -n "Stopping Xvnc "
            stop
            ;;
        restart)
            echo -n "Restarting Xvnc "
            stop
            start
            ;;
    ****)
            echo "Usage: /etc/init.d/$NAME {start|stop|restart}"
            exit 1
            ;;
    esac
    exit 0

    derived from VNC On Bootup

    prompt>chmod 755 /etc/init.d/startvnc prompt>update-rc.d startvnc defaults
    update-rc.d: using dependency based boot sequencing
    insserv: warning: script ’startvnc’ missing LSB tags and overrides

    Ok, I have not found a VNC start script that works without errors, if you find one, please comment. Regardless of the error, it does work.

    If you decide to remove it, run:

    prompt>update-rc.d -f startvnc remove

    The reason I set the VNC default port to 5 on root localhost, is my preference and is part of this turorial I would leave it to 5. If you want, you can set to whatever you like.

    prompt>reboot

    View the ports, upon reboot.

    Your looking for 5905.

    prompt>netstat -tap

     

    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 *:x11-5                 *:*                     LISTEN      1180/Xvnc4
    tcp        0      0 *:ssh                   *:*                     LISTEN      1151/sshd
    tcp        0     52 10.1.11.102:ssh         10.1.10.191:6267        ESTABLISHED 1251/1
    tcp6       0      0 [::]:5905               [::]:*                  LISTEN      1180/Xvnc4
    tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      1151/sshd

    Test VNC

    Install a VNC Client on Windows or Linux (i.e. RealVNC, TightVNC, etc..) on your other computer (i.e. laptop).

    If your client is on a Windows Machine, launch VNC Client viewer (display), and type in:
    10.1.11.11:5905 or 10.1.11.11:5

    If your client is on your Xen host Server, than type in:
    localhost:5 or x01:5 or 127.0.0.1:5

    If your client is on a Linux Machine, than type:
    prompt>vncviewer 10.1.11.11:5

    Troubleshoot VNC

    If you have been following this tutorial, the log file is located in:
    /root/.vnc/x01:5.log

    Disregard the 8 lines of font missing, as we don’t use these fonts anyway’s.

    prompt>cat /dev/null > /root/.vnc/x01:5.log prompt>reboot prompt>cat /root/.vnc/x01:5.log

    Make sure VNC is working, before moving on to configuring LVM for Xen VM and installing Xen Guest VM, on Xen Host LV.

    Configure LVM for Xen VM

    IMPORTANT NOTE: Part of this section and mostly all of this article, was derived from my other article here. Doesn’t really matter as Debian is Debian, and not a variant like Ubuntu, so all should work the same. Not saying Ubuntu is lesser, as this is not the case.

    Here is a breakdown (I’m keeping it simple here) of the LVM, installation process.

    LVM->VG->LV->VM OS

    The VM image (OS and Swap) will be on one LV. The LV will be on the VG. LV will be treated as one Hard Drive available to the VM, therefore the VM, upon installation will create partitions inside LV, i.e. OS on primary partition and Swap - logical disk; depending on your preference.

    Create Volume Group (VG) and a Logical Volume (LV) on your LVM, for your Xen VM.

    Now, since we already created an LVM partition, prior to installing Debian Squeeze x64, all that’s left is to create a Volume Group, (VG), and Logical Volumes (LV).

    prompt>fdisk -l

     

    If you get Partition 1 does not end on cylinder boundary, etc…, error you can safely ignore. :).

    per: http://nwsmith.blogspot.com/2007/08/fdisk-sfdisk-mdadm-and-scsi-hard-drive.html.
    After some googling, we concluded that having to align the partition boundaries with the cylinders was a DOS legacy issue, and was not something that would cause a problem for Linux…..

    per: http://prefetch.net/blog/index.php/2009/09/12/why-partition-x-does-now-end-on-cylinder-boundary-warnings-dont-matter/
    This was a bit disconcerting at first, but after a few minutes of thinking it dawned on me that modern systems use LBA (Logical Block Addressing) instead of CHS (Cylinder/Head/Sector) to address disk drives. If we view the partition table using sectors instead of cylinders:;…..

    Disk /dev/sda: 73.0 GB, 72999763968 bytes
    255 heads, 63 sectors/track, 8875 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000a7cb7
     
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1         487     3905536   83  Linux
    Partition 1 does not end on cylinder boundary.
    /dev/sda2             487         730     1951745    5  Extended
    Partition 2 does not end on cylinder boundary.
    /dev/sda3             730        8875    65428480   8e  Linux LVM
    /dev/sda5             487         730     1951744   82  Linux swap / Solaris

    I confirm, you can ignore (old legacy dos stuff). See below, they are actually not overlapping if you run this command.

    prompt>sfdisk -uS -l /dev/sda

     

     Device Boot    Start       End   #sectors  Id  System
    /dev/sda1   *      2048   7813119    7811072  83  Linux
    /dev/sda2       7815166  11718655    3903490   5  Extended
    /dev/sda3      11718656 142575615  130856960  8e  Linux LVM
    /dev/sda4             0         -          0   0  Empty
    /dev/sda5       7815168  11718655    3903488  82  Linux swap / Solaris

    Ok, so now that we got that out of the way, let’s move on.

    • We’ll be creating one VG in sda3 LVM partition, and naming it vol.

      To initialize partition to support LVM

      prompt>pvcreate /dev/sda3

      Create a VG named vol.

      prompt>vgcreate vol /dev/sda3
    • We’ll be creating one LV in the newly created VG vol, and naming it vmx01cms01 (to match our VM host name).

      The size will be 15gb. Read NOTE: directly below to learn more…

      prompt>lvcreate -L 15gb -n vmx01cms01 vol prompt>mkfs -t ext4 /dev/vol/vmx01cms01
    • View the newly created LV:
      prompt>lvdisplay

       

        --- Logical volume ---
        LV Name                /dev/vol/vmx01cms01
        VG Name                vol
        LV UUID                tcswzC-yo6x-vFcn-RqgV-C2DU-RBBQ-SpoiZc
        LV Write Access        read/write
        LV Status              available
        # open                 0
        LV Size                15.00 GB
        Current LE             3840
        Segments               1
        Allocation             inherit
        Read ahead sectors     auto
        - currently set to     256
        Block device           254:0

    Now your LV is ready for a VM installation. On to the next.

    NOTE:
    Once the OS is installed, the size 15gb, can be changed with Gparted LiveCD, like you would any computer

    Install Xen Guest HVM VM, on Xen Host LV

    Here we’ll install the (Fully Virtualized - HVM) Operating System VM on the newly created LV, with another Debian Squeeze x64 OS (you can use whatever os you like, i.e. Ubuntu, Suse, etc..). Before you get started you need qemu-dm, it used to be it was installed with XEN, but now in Squeeze, you have to install seperately.

    prompt>apt-get install xen-qemu-dm

    When you install xen-qemu-dm, it will also auto install etherboot mknbi, and install the latest stable version to match your XEN xernel; xen-qemu-dm-4.0

    prompt>reboot

     

    Download the OS image ISO.

    We are using an ISO, instead of a cdrom to install the OS.

    prompt>mkdir -p /dl/os && cd /dl/os

    Visit http://www.debian.org/distrib/ or go directly to the link http://cdimage.debian.org/debian-cd/6.0.0/amd64/iso-cd/debian-6.0.0-amd64-netinst.iso. In my example we’ll use Squeeze 6.0 AMD 64 Net install.

    prompt>wget http://cdimage.debian.org/debian-cd/6.0.0/amd64/iso-cd/debian-6.0.0-amd64-netinst.iso

     

    Create the VM (domU)

    We’ll create a Debian Squeeze amd 64 VM on the LV we created. This process, directly uses the Xen VM cfg creation file by means of HVM (full virtualization), instead of starting with the normal xen-tools.conf file, which creates this Xen VM cfg file for us (mostly used for paravirtualization).

    Create a new Xen VM config file:

    prompt>nano /etc/xen/vmx01cms01.cfg

    At Minimum - Copy, paste, and save all the following into this new vmx01cms01.cfg, file.

    kernel = "/usr/lib/xen-default/boot/hvmloader"
    builder='hvm'
    device_model="/usr/lib64/xen-4.0/bin/qemu-dm"
    name = "vmx01cms01"
    vif = ['bridge=eth0']
    disk = [ 'phy:/dev/vol/vmx01cms01,ioemu:hda,w','file:/dl/os/debian-6.0.0-amd64-netinst.iso,ioemu:hdc:cdrom,r']
    #memory = "2048"
    #vcpus=2
    #on_reboot   = 'restart'
    #on_crash    = 'restart'
    boot="d"
    vnc=1
    vncviewer=1
    vncdisplay=6

    Go here to view some more Xen loadouts. Also, notice the commenting of the vcpus, memory, etc…; simply uncomment them to set it.

    Start the VM and OS Installation Process

    prompt>xm create /etc/xen/vmx01cms01.cfg

    Or you can use:

    xm create -c vmx01cms01.cfg

    NOTE:
    If you decide not to go through with the installation (no harm done, accept for a couple of log files), i.e. you decide to reconfigure something. prompt> xm destroy vmx01cms01

    View and interact with the installation process via VNC Client

    • If your client is on a Windows Machine, launch VNC Client viewer (display), and type in:
      10.1.11.11:5906 or 10.1.11.11:6
      You’ll be prompted for password.
    • If your client is on your Xen host Server, than type in:
      localhost:6 or x01:6 or 127.0.0.1:6
      You’ll be prompted for password.
    • If your client is on a Linux Machine, than type:
      prompt>vncviewer 10.1.11.11:6
      Connected to RFB server, using protocol version 3.8
      Performing standard VNC authentication<
      Password: [Enter Password]

    Your VNC display will look like this:
    Xen on Debian 6.0 Squeeze VM

    Great Deals @ Geeks.com!

     

    Congrats you are done!

    Actually you are not done, yet.

    Install VM

    Answer each step of the installation process, as though you were installing a physical server to your preference. I selected manual partitioning with no LVM; two ‘primary’ partitions; 12gb for OS and 4.1gb for swap; swap in my case is twice the size of ram I will give the VM.

    See My Example:
    Debian 6.0 Squeeze VM Guest Partition - My Settings

    I didn’t feel like creating a screenshot image, so I used an old image (same thing applies accept I used ext4 (YEA), instead of ext3. I selected two primary partitions, to keep it simple and chances are I will not be adding more than three partitions, so no need for logical partition; logical swap. With normal partitioning instead of LVM, you’ll be able to use Gparted in the future. This is totally up to you, because it depends on what the VM, is going to be used for; this is key. Finish the installation.

    Remove ISO image

    The final step in the installer, “Installation Complete” is to boot into your new system. At this point or during installation process you’ll want to remove “iso image” directive, by editing your vmx01cms01.cfg file.

    Pay attention here:

    prompt>nano /etc/xen/vmx01cms01.cfg

    If you want to use the Xen host’s cdrom drive:

    change:

    disk = [ 'phy:/dev/vol/vmx01cms01,ioemu:hda,w','file:/dl/os/debian-6.0.0-amd64-netinst.iso,ioemu:hdc:cdrom,r']
    boot="d"

    to:

    disk = [ 'phy:/dev/vol/vmx01cms01,ioemu:hda,w','phy:/dev/cdrom,hdc:cdrom,r', ]
    boot="cd"

    If you don’t want to use the Xen host’s cdrom drive:

    change:

    disk = [ 'phy:/dev/vol/vmx01cms01,ioemu:hda,w','file:/dl/os/debian-6.0.0-amd64-netinst.iso,ioemu:hdc:cdrom,r']
    boot="d"

    to:

    disk = [ 'phy:/dev/vol/vmx01cms01,ioemu:hda,w', ]
    #boot="d"

    NOTE:
    If you choose to use Xen host’s cdrom, than you must always, “I repeat again”, always have a cdrom drive attached to the Xen host, or else the VM will fail to boot. This gave me a lot of headaches, you’ll see a message in xend.log like:
    DEBUG (DevController:156) Waiting for 768.
    DEBUG (DevController:595) hotplugStatusCallback /local/domain/0/backend/vbd/4/768/hotplug-status.

    Boot into new VM

    You can now select: “Continue” to boot into new system.

    prompt>xm destroy vmx01cms01 prompt>/etc/init.d/xend restart prompt>xm create /etc/xen/vmx01cms01.cfg

    View Progress (or troubleshoot), by opening another ssh terminal:

    prompt>tail -f /var/log/xen/xend.log -n 30

    View and interact with your new VM via VNC Client

    prompt>vncviewer 10.1.11.11:6

    If it fails, it’s best to restart Xen host, as your first troubleshoot try.

    prompt>reboot

    Create Backup of the Xen VM cfg file

    After you have a working VM, it’s a good idea to make a copy of it.

    prompt>mkdir -p /bak/vm prompt>cp /etc/xen/vmx01cms01.cfg /bak/vm/

    You, now you have a Debian 6 x64 HVM VM (guest, domU) on a Debian 6 x64 XEN Host (domO).

    First thing you want to do is the following, so you can access the VM from a normal ssh terminal:

     

    prompt>apt-get install openssh-server

     

    Great Deals @ Geeks.com!

    Troubleshooting Debian 6 Squeeze Xen host and Optional Useful CLI Commands

    To avoid Debian Squeeze x64 VM boot problems.

    INIT: id co respawning too fast disabled for 5 minutes

    On your Xen VM (guest, domU):

    prompt>nano /etc/inittab

    Change this:

    co:2345:respawn:/sbin/getty hvc0 9600 linux

    to this:

    #co:2345:respawn:/sbin/getty hvc0 9600 linux

    Or if that doesn’t work than try this:

    On your Xen host (domO):

    prompt>nano /etc/inittab

    Change this:

    1:2345:respawn:/sbin/getty 38400 tty1

    to this:

    1:2345:respawn:/sbin/getty 38400 hvc0

    Here are some troubleshooting examples, and some very useful CLI commands.

    If you need to install nic drivers on new Debian Squueze vm:

    Copy the nic drivers to cdrom, than insert cdrom into Xen host cdrom drive, than run the following command on Xen VM:

    prompt>mount -t iso9660 /dev/hdc /media/cdrom0 prompt>/media/cdrom0/dpkg -i firmware-bnx2_0.27_all.deb

    After install Unmount

    prompt>umount /media/cdrom0 prompt>reboot

     

    If VM eth0 doesn’t come up.

    Their are two solutions, the first is fixing the root of the problem, Use a permanent mac address found in /etc/xen/vmx01cms01.cfg, to permanently keep the same ethX. The second, is being caused by the VM thinking there is a new NIC installed.

    First Solution:

    prompt>/etc/udev/rules.d/70-persistent-net.rules

    Second Solution:

    prompt>ifconfig -a

    Make a note of the eth device number, i.e. eth3

    prompt>nano /etc/network/interfaces

    change:

    eth0

    to

    eth3
    prompt>ifdown eth0 && ifup eth0

    You shouldn’t get this problem if you didn’t change the permanent MAC address.

    If you want to mount VM’s LV on Debian Squeeze Xen Host.

    You can view the VM’s LV partitions on Xen host with:

    prompt>fdisk -l -u /dev/vol/vmx01cms01

     

    Disk /dev/vol/vmx01cms01: 16.1 GB, 16106127360 bytes
    255 heads, 63 sectors/track, 1958 cylinders, total 31457280 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Disk identifier: 0x0008ae25
     
                   Device Boot      Start         End      Blocks   Id  System
    /dev/vol/vmx01cms01p1   *          63    23438834    11719386   83  Linux
    /dev/vol/vmx01cms01p2        23438835    31455269     4008217+  82  Linux swap / Solaris

    Since the VM’s LV is a whole disk containing partitions, you can’t simply mount it. You first need to create maps to the individual partitions.

    prompt>apt-get install kpartx prompt>kpartx -av /dev/vol/vmx01cms01 prompt>mount -t ext3 /dev/mapper/vol-vmx01cms01p1 /mnt prompt>ls /mnt

    Make sure to umount it, when your done:

    prompt>umount /mnt

    Remove device mapping

    prompt>kpartx -dv /dev/vol/vmx01cms01

     

    If you want to use XM console.

    XM Console works in Paravirtualization with little fuss, but with HVM (full virtualization), XM Console is rather cumbersome to setup, therefore you can ssh or vnc into initial installation of the HVM VM. If you are brave to install xm console for hvm, visit, zhigang.org Xen FAQ.

    Useful XEN and VM CLI commands and tips.

    Here are some useful CLI commands, which OpenQRM will mostly facilitate for us with the WebUI.

    Some common xen commands:

    Start:

    prompt>xm create /etc/xen/vmx01cms01.cfg

    Shutdown:

    prompt>xm shutdown vmx01cms01

    Or Destroy (Unplug the VM from outlet)

    prompt>xm destroy vmx01cms01

    View running VMs, in real mode:

    prompt>xm top

    List running VMs:

    prompt>xm list

     

    If you want to delete VM and the LVs from Debian Squeeze Xen Host (domO)

    If you want to delete all VM and LV, and start from scratch

    For reference only. Might not work for LVs inside an LV.

    Unplug the VM

    prompt>xm destroy vmx01cms01

    Unmount LV (probably not mounted anyway’s, for reference only)

    prompt>umount /dev/mapper/vol-vmx01cms01

    Deactivate it

    prompt>lvchange -a n /dev/mapper/vol-vmx01cms01

    Delete LV

    prompt>lvremove /dev/mapper/vol-vmx01cms01 prompt>lvdisplay

    Nothing to display.

    Now simply delete the vmx01cms01.cfg, VM file.

    prompt>rm /etc/xen/vmx01cms01.cfg

    You now have no VM and no LV.

    Don’t forget to change the fstab, in case you mounted any of these LVs.

    prompt>nano /etc/fstab

    Don’t forget to empty out your ssh known host, if your using the same LV configs again.

    prompt>cat /dev/null > /root/.ssh/known_hosts

     

    If you want to resize LV VM(Shrinking) from Debian Squeeze Xen Host (domO)

    For reference only. Might not work for LVs inside an LV.

    Unmount (just in case it’s mounted) so we can shrink

    prompt>umount /dev/mapper/vol-vmx01cms01 prompt>e2fsck -f /dev/mapper/vol-vmx01cms01

    Resize VG

    prompt>resize2fs /dev/mapper/vol-vmx01cms01 1000M

    Resize LV

    prompt>lvresize -L 1G /dev/vol/vmx01cms01

    Show Results

    prompt>lvdisplay

    Remount - Optional

    prompt>mount /dev/mapper/vol-vmx01cms01

     

    Some Useful CLI commands and GUI, for LV

    LVM Managing - CLI

    prompt>vgdisplay prompt>pvdisplay prompt>lvdisplay

    LVM Managing - GUI

    prompt>apt-get install system-config-lvm

     

    Also, loook into OpenQRM as it’s a great Web UI tool to manage XEN and other VMS.

    Read about my other article on openQRM.

    Done

    Have Fun with VM

    Congratulations
    Congratulations!
    you finished the tutorial. Thank you for following this tutorial.

     

    Great Deals @ Geeks.com!
    This entry was posted on Friday, February 11th, 2011 at 9:13 pm and is filed under How To. You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.
  • 9 Comments

    Take a look at some of the responses we've had to this article.

    1. " How to install Xen 4 on Debian 6 Squeeze x64 "

      Posted on March 7th

      Thanks for sharing the latest version of Squeeze..
      Its very important..

    2. " How to install Xen 4 on Debian 6 Squeeze x64 "

      Alexandre Silva
      Posted on March 7th

      Hi there,
      thank you very much for the super cool tutorial, i used it to set up my system and everything went smooth without any errors up to booting the xen guest domU.
      When i boot it, it says:
      No bootable device.
      Powering off in 30 seconds.

      Is there a way to configure grub2 so it works?

      Thank you
      Alex

    3. " How to install Xen 4 on Debian 6 Squeeze x64 "

      Posted on March 8th

      [...] base (aka. Dom0) in the normal fashion.  I ended up combining the instructions I found at this webdevster link, and this howtoforge link .  The webdevster link was very useful for general install pearls (aka. [...]

    4. " How to install Xen 4 on Debian 6 Squeeze x64 "

      Dan
      Posted on March 16th

      Thank you so much for taking the time to post this. You should consider writing documentation for Debian or Xen because I’d still be banging my head against the wall if I had to use their documentation to get this working.

    5. " How to install Xen 4 on Debian 6 Squeeze x64 "

      Posted on April 29th

      Hello:

      This is a great documentation about debian 6 and xen, but I have a problem… when I install a debian 6 VM the connection is fine…

      But when I tried to install a ubuntu VM this VM do not have connection!!!

      What do you think will be the problem.

      Thank you,

      Best regards,

      Jose

    6. " How to install Xen 4 on Debian 6 Squeeze x64 "

      Roger
      Posted on June 19th

      Hello,

      Thanks for the tutorial. Just as a note, don’t try to install Ubuntu as HVM (at least 11.04), it will fail to recognize the hard disk and network card, I’ve lost almost a week, thinking it was a problem with Xen, and it turned out to be a Ubuntu specific issue. Debian and FreeBSD work well under HVM.

    7. " How to install Xen 4 on Debian 6 Squeeze x64 "

      atxbibip4
      Posted on June 20th

      Super HOW TO ! Why google doesn’t reference it better. No documentation on Xen, for option and installation of xen-qemu-dm package ! and device_model option too !
      arf ! thanks !

    8. " How to install Xen 4 on Debian 6 Squeeze x64 "

      Maximiliano
      Posted on July 18th

      install vnc ok, start vnc in local machine, …..

      start vnc VMhost …. CHAN!!
      http://pastebin.com/YyY2NRCV

      i dont undertand ;(

    9. " How to install Xen 4 on Debian 6 Squeeze x64 "

      Posted on August 5th

      my first website…

      How to install Xen 4 on Debian 6 Squeeze x64 | WebDevster…

  • Post a Comment

    Let us know what you thought.

  • Name:

    Email:

    Website:

    Message: