====== Install VM as DomU (guest) ======
Note that prior to installing a Virtual Machine, you'll need to **[[hypervisor:base:storage|setup your storage repositories]]**.
===== From ISO img, Using the Command Line =====
To create a new VM, you'll need to execute the following actions:
==== Have the ISO Image Available =====
In our first VM, we'll deploy "Linux Mint Debian Edition 201403".\\
To achieve this , we first need to download the ISO image of the installer and make it available to Xen. Here's how to do this:
==== Download the ISO ====
Into the LocalISORepository:
> cd /var/opt/xen/LocalISORepository/
> wget http://linuxmint.cu.be/debian/linuxmint-201403-cinnamon-dvd-64bit.iso
==== Re-Scan the Directory ====
> xe sr-list name-label=Local\ ISO\ Repository --minimal
> xe sr-scan uuid=xxxxxxx-7d10-a322-9ba8-xxxxxxxxxxxxxx
> xe cd-list
Should show you the newly available CD:
> xe cd-list
uuid ( RO) : e9175357-44e4-41fc-acd7-f361c27d56ef
name-label ( RW): linuxmint-201403-cinnamon-dvd-64bit.iso
==== Install the VM ====
The first thing to do is to "install" the VM, you have to specify a template to use as the base, to figure out what templates are available, use //xe template-list//. In case none of these fits your needs, i.e. you plan to use an ISO image, select the "Other install media".
[> xe template-list]
> xe vm-install new-name-label=LMDE-VM1 template="Other install media"
This will output an UUID that you should copy.
==== Create a VDI ====
VDI stands for **Virtual Disk Image**, such an image is required by the VM that will use it as if it was a real hard drive. This VDI has to be stored somewhere, here we'll select an SR that was specifically created for the LMDE VM.
Refer to the [[hypervisor:base:storage#Create a Storage Repository|Storage Repositories Creation]] chapter to remember how to do it, in case you often forget (like me).
Get the SR UUID:
> xe sr-list name-label="LMDE Storage" --minimal
Copy this SR UUID
We now can create the actual VDI:
> xe vdi-create sr-uuid= type=user virtual-size=256GiB name-label='LMDE-VDI1'
==== Create a VBD ====
VBD stands for **Virtual Block Device**, you can think of it as the "cable" that plugs the VDI into your VM's hard disk connector. Thus, you need to specify what "disk" it starts at and what "machine" it's plugged into.
You need to specify:
* the virtual disk you want to plug to (vid-uuid)
* the virtual machine you want to connect to (vm-uuid)
* whether the disk is bootable / writable - at first we do not make it bootable as we'll startup the VM from the installation CD drive
* a device name: this device-name will be used by the installer from within the VM, if unsure about how the OS being installed names it, use 'device=0'. You cannot use names at your will here!
> xe vbd-create vdi-uuid= vm-uuid= bootable=false type=Disk device=sda
Copy the UUID output
==== Attach a CD Drive ====
As we're going to use the préviously downloaded LMDE install CD ISO, we have to attach it to the VM so it can boot from it the first time it is launched.
To get the list of available cd images, you can issue the //xe cd-list// command.
[> xe cd-list]
> xe vm-cd-add vm= device=1 cd-name=linuxmint-201403-cinnamon-dvd-64bit.iso
We still need to change the install-behaviour on the VM, so it looks for install-repositories on "cdrom":
> xe vm-param-set uuid= other-config:install-repository=cdrom
==== Setup the VM's RAM ====
As the final step, we now can determine how much memory will be made available to our new VM.
> xe vm-memory-limits-set uuid= static-min=2GiB dynamic-min=2GiB dynamic-max=4GiB static-max=4GiB
==== Attach Network ====
> xe network-list
> xe vif-create vm-uuid= network-uuid= device=0
==== Start the VM (to execute install) ====
Up to now we've "just" been defining our VM's specifications, nothing "really" happened. It's time to boot our VM, then connect to it in order to follow and interact with the installation process:
> xe vm-start uuid=
==== Auto-Start a VM ====
If you need to have a VM automatically started when Xen is launched, here is what you have to do:
> xe vm-param-set uuid=UUID other-config:auto_poweron=true
==== Connect to the Running VM ====
We first need to find our VM's dom-id, then we'll look into xenstore to get the connection parameters (VNC listener port):\\
> xe vm-param-get uuid= param-name=dom-id
or
> xe vm-param-get uuid=$(xe vm-list name-label=LMDE-VM1 --minimal); param-name=dom-id
2
=== Finding VNC Port # ===
To identiy VM running as PV or HVM:
> ps -eaf | grep qemu
**For HVM (xenfv)**
> xenstore-ls /local/domain//console
**For PV (xenpv)**
> xenstore-ls /local/domain//serial
Or:
> xenstore-read /local/domain//console/vnc-port
5901
To VNC connect to the VM, we first need to know it's **domain-id**, this changes with every reboot of the VM!\\
We also need the VNC listener port for the VM with found dom-id.
You can now connect with vncviewer to //hostname-from-domX://
=== Finding the Guest IP Address though VM's console ===
One easy way to connect to your VM console is as folllow:
> xe vm-list params=dom-id uuid= --minimal
OR
> xe vm-list params=dom-id name-label=XOA
> /usr/lib/xen/bin/xenconsole
Once in the guest console, simply:
> ip addr show
**You might not find the /usr/lib/xen/ directory on your system as it might be appended with the system version, i.e: use /usr/lib/xen-4.1/bin/xenconsole.**
To avoid this confusion you could create a symbolic link like this:
> ln -s /usr/lib/xen-4.1 /usr/lib/xen
**You might also experiment a "freeze" when connecting, hit the RETURN key to see the terminal prompt...**
Once logged into the VM's console, you may get "trapped" inside this console. In case there is no "exit" possible, it won't be possible for you to come back to the host's console.
This might be a problem when interacting from a plain terminal screen on the host itself, getting locked out of your host's console might force you to force a reboot in case you cannot access it via ssh from another machine to reboot it nicely!.
==== Install Xen Tools ====
Log into your VM console:
> xe vm-list params=dom-id name-label=LMDE-VM1
> /usr/lib/xen/bin/xenconsole 1
If you're lucky enough to have chosen a Debian base install, installing Xen Tools is simply a matter of:\\
**IN VM CONSOLE**
$ apt-get install xen-tools
----
===== Creating a PV VM from Template =====
----
[[http://wiki.xen.org/wiki/XCP_PV_templates_start]]\\
=== Download the kernel and ramdisk ===
[[http://cdn.debian.net/debian/dists/wheezy/main/installer-amd64/current/images/netboot/xen/]]
> mkdir -p /root/PVs/debian-wheezy
> cd /root/PVs/debian-wheezy/
> wget http://cdn.debian.net/debian/dists/wheezy/main/installer-amd64/current/images/netboot/xen/initrd.gz
> wget http://cdn.debian.net/debian/dists/wheezy/main/installer-amd64/current/images/netboot/xen/vmlinuz
=== Install the VM using the chosen template ===
> xe template-list | grep Debian
> xe vm-install new-name-label=Debian-Wheezy template="Debian Wheezy 7.0 (64-bit)"
44c68930-1192-a196-b460-5f411a689c85
A VDI will be created in the process, let's label it to avoid later confusion:
> xe vdi-list
...
uuid ( RO) : 63e18344-6e0a-4bd5-9cc0-4b32d8de0e11
name-label ( RW): 0
name-description ( RW): Created by template provisioner
sr-uuid ( RO): bc5fc2dd-fb0f-1e74-6226-0ece6e90c7a5
virtual-size ( RO): 8589934592
sharable ( RO): false
read-only ( RO): false
...
> xe vdi-param-set name-label="DebianWheezy 0" uuid=63e18344-6e0a-4bd5-9cc0-4b32d8de0e11
A VBD was also created:
> xe vbd-list vm-name-label=Debian-Wheezy
uuid ( RO) : 7b503b0e-ae3b-4f55-ef36-f6c3b8ed7ea3
vm-uuid ( RO): 44c68930-1192-a196-b460-5f411a689c85
vm-name-label ( RO): Debian-Wheezy
vdi-uuid ( RO): 63e18344-6e0a-4bd5-9cc0-4b32d8de0e11
empty ( RO): false
device ( RO):
We still need to create the virtual network interface, here we'll specify a MAC address that must be used for compatibility with a given failover IP:
> xe vif-create vm-uuid=44c68930-1192-a196-b460-5f411a689c85 network-uuid=1ce402ce-e6a1-b496-b967-a00cc586e525 device=0 mac=02:00:00:84:fb:29
==== Templated VM Specific Operations ====
----
From: [[http://wiki.xen.org/wiki/XCP_PV_templates_start]]:\\
Eliloader is python script located in /usr/bin/eliloader. It allows XCP to download network installation images (kernel and overgrown initrd) for specified operating system (actual network image is really differ in suse, centos and debian systems). For some legacy and antique systems (like RHEL 4) it to some patching of initrd. Exact path is constructed from type of template (install-distro in other-config) and url, provided by used in other-config: install-repository). After initrd and kernel is extracted they are used as kernel and initrd for virtual machine (and installation started).
Right after successful VM start PV-bootloader is replaced from eliloader to pygrub (to boot to new VM native kernel). Of course, if user stops installation process, at next startup there will be no kernel and vm will not start again.
> xe vm-param-set uuid=44c68930-1192-a196-b460-5f411a689c85 PV-bootloader=
> xe vm-param-set uuid=44c68930-1192-a196-b460-5f411a689c85 PV-kernel=/root/PVs/debian-wheezy/vmlinuz
> xe vm-param-set uuid=44c68930-1192-a196-b460-5f411a689c85 PV-ramdisk=/root/PVs/debian-wheezy/initrd.gz
> xe vm-start uuid=44c68930-1192-a196-b460-5f411a689c85
To follow the installation process:
> xe vm-param-get uuid=44c68930-1192-a196-b460-5f411a689c85 param-name=dom-id
4
> screen -S Wheezy
> /usr/lib/xen-4.1/bin/xenconsole 4
After initial installation:
> xe vm-param-set uuid=... PV-bootloader=pygrub
=== Add Xen Tools ===
**TBC**
----
===== Create Template and Appliance =====
----
Reference: [[http://www.jansipke.nl/creating-backups-of-running-vms-in-xenserver/]]
It seems that this operation can be performed even on a running VM.
Pick target VM uuid:
> xe vm-list is-control-domain=false is-a-snapshot=false
Create the snapshot:
> xe vm-snapshot uuid= new-name-label=
Transform the snapshot into a VM to be able to save it to a file:
> xe template-param-set is-a-template=false ha-always-run=false uuid=
> xe vm-export vm= filename=.xva
Export succeeded
The export operation can take a while... Be patient until you see the "Export succeeded" message.
Finally let's get rid of the snapshot:
> xe vm-uninstall uuid= force=true
----
===== Using Xen Orchestra =====
----
It is possible to immediately create new VMs based on standard templates readily available in Xen.
What we want to do here is deploy a new VM that will run LinuxMint LMDE 201403 cinnamon 64bit. To do so, we first need to download the corresponding ISO file. We'll ssh into Dom0 and wget the installer image:
> ssh root@my.machine.ip
> cd /var/opt/xen/LocalISORepository/
> wget http://linuxmint.cu.be/debian/linuxmint-201403-cinnamon-dvd-64bit.iso
The new image won't immediately be available in the cd list:
> xe cd-list
Will be empty.
Every time you add (or delete) an ISO image to your repository, you'll have to rescan it to update the list of available images:
> xe sr-scan uuid=$(xe sr-list name-label='Local ISO Repository' --minimal)";
> xe cd-list
uuid ( RO) : 768af2e3-f6c6-481a-b7c4-a28c2603960b
name-label ( RW): linuxmint-201403-cinnamon-dvd-64bit.iso
We can now use the Xen Orchestra web interface to create our new VM.
===== Using xen-tools =====
xen-tools is a set of scripts which can easily create fully configured Xen guest domains.
Once you have installed dom0 you can install xen-tools on your host with:
> apt-get install xen-tools
To configure xen-tools, you can edit **/etc/xen-tools/xen-tools.conf** which contains default values that the xen-create-image script will use. The xen-create-image(8) manual page contains information on the available options.
To give a different path where the domU images being saved and enable the superuser password in the initial build, we will edit the **/etc/xen-tools/xen-tools.conf** file and uncomment this lines:
> nano /etc/xen-tools/xen-tools.conf
[ 55] lvm = xenvg
[129] memory = 1024Mb # Memory size
[130] swap = 1024Mb # Swap size
[158] dhcp = 1
[174] bridge = xenbr0
[221] passwd = 1
Then you can create a basic virtual machine with this command:
> xen-create-image --hostname=VM_name --role=udev
To start the created VM run the command:
> xm create /etc/xen/VM_name.cfg
To erase a VM image (even the main directory) run the command:
> xen-delete-image VM_name