This installation process demonstrates how to set up Xen on debian. It doesn't go into great detail and only gives a general overview.
We first install Debian 8 with an official CD image and then remove and replace systemd after installation.
Boot the image to perform the installation process and select `Install'.
From the language selection pages I chose the following.
English => United Kingdom => British English
After loading components from the CD, we enter some basic but essential host information.
hostname: xen domain name: example.com root password: XXX full name of new user: ABC XYZ username: ABC password: XXX
The next step is partitioning. Initially we choose Guided partitioning and after edit the automatic choice for the root partition.
If you prefer you can choose Manual partitioning. In manual mode you may set up software RAID before creating a volume group and the volumes within it.
Guided Partitioning - use entire disk and set up LVM All files in one partition (recommended for new users) Write the changes to disks and configure LVM? YES
Do not select finish just yet, go up the menu.
Configure the Logical Volume Manager Write the changes to disks and configure LVM? YES Delete Logical Volume root Create Logial Volume xen-vg Logical Volume Name root Logical Volume Size 8GB Finish
Inspect the partition list and select the root entry created above.
LVM VG xen-vg, LV root - 8.0 GB Linux device-mapper (linear) #1 Use-as: Ext4 journaling file system Mount point: / Mount options: [x] noatime Label: root Reserved Blocks: 1% Typical usage: standard Done setting up the partition
Finally, we finish creating the disk layout.
Finish partitioning and write changes to disk Write the changes to disks? YES
After some time installing the base system, the package selection process will begin.
First select a mirror, I chose UK.
United Kingdom => ftp.uk.debian.org Continue
Wait for some time.
Participate in the package usage Survey? NO
Finally we reach the software selection menu.
It's important to deselect every entry using the space bar and only select ssh server.
[*] SSH server Continue
Once installation is done the boot loader is installed and we are finished.
Install the GRUB boot loader to the master boot record? YES
Remove the ejected CD.
Installation complete Continue
Login, update the system and then reboot it.
apt-get update apt-get dist-upgrade reboot
Login and replace systemd with sysvinit.
This process may also be applied to any virtual machines other than domain 0.
apt-get install sysvinit-core sysvinit sysvinit-utils
If this is a VM, configure the following.
Now reboot, login again and finish the job off.
apt-get remove --purge --auto-remove systemd /bin/echo -e 'Package: systemd\nPin: origin ""\nPin-Priority: -1' > /etc/apt/preferences.d/systemd /bin/echo -e '\nPackage: *systemd*\nPin: origin ""\nPin-Priority: -1' >> /etc/apt/preferences.d/systemd /bin/echo -e '\nPackage: systemd:amd64\nPin: origin ""\nPin-Priority: -1' >> /etc/apt/preferences.d/systemd /bin/echo -e '\nPackage: systemd:i386\nPin: origin ""\nPin-Priority: -1' >> /etc/apt/preferences.d/systemd
Install Xen kernel and tools.
apt-get install --no-install-recommends xen-linux-system xen-tools lvm2 bridge-utils dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen echo 'GRUB_CMDLINE_XEN="dom0_mem=512M"' >> /etc/default/grub update-grub
Here is an example set up for an Ethernet bridge.
Edit the interface file.
vi /etc/network/interfaces
Change the IP addresses for your host and network.
auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto xenbr0 iface xenbr0 inet static bridge_ports eth0 address X.X.X.X netmask 255.255.255.X gateway X.X.X.X
Finally, reboot into Xen.
reboot
Using the Xen tools we create a Debian Wheezy virtual machine with 1GB RAM and 16GB disk space.
xen-create-image --cache=yes --fs=ext4 --memory=1GB --size=16G --swap=1G --vcpus=1 --gateway=X.X.X.X --ip=X.X.X.X --netmask=255.255.255.X --hostname=vm0 --lvm=xen-vg --dist=wheezy
The creation process will take some time, outputting the following.
General Information -------------------- Hostname : vm0 Distribution : wheezy Mirror : http://ftp.uk.debian.org/debian/ Partitions : swap 1G (swap) / 16G (ext4) Image type : full Memory size : 1GB Kernel path : /boot/vmlinuz-3.16.0-4-amd64 Initrd path : /boot/initrd.img-3.16.0-4-amd64 Networking Information ---------------------- IP Address 1 : X.X.X.X [MAC: XX:XX:XX:XX:XX:XX] Netmask : 255.255.255.X Gateway : X.X.X.X Creating swap on /dev/xen-vg/vm0-swap Done Creating ext4 filesystem on /dev/xen-vg/vm0-disk Done Installation method: debootstrap Running hooks Done No role scripts were specified. Skipping Creating Xen configuration file Done No role scripts were specified. Skipping Setting up root password Generating a password for the new guest. All done Logfile produced at: /var/log/xen-tools/vm0.log Installation Summary --------------------- Hostname : vm0 Distribution : wheezy MAC Address : XX:XX:XX:XX:XX:XX IP Address(es) : X.X.X.X RSA Fingerprint : XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX Root Password : XXXXXXXXXXXXXXXXXXXXXXX
List VM images.
xen-list-images Name: vm0 Memory: 1024 MB IP: X.X.X.X
Run VM with a console.
xl create -c /etc/xen/vm0.cfg
Run a VM silently without a console.
xl create -q /etc/xen/vm0.cfg
Attach a console to a running VM.
xl console vm0
List VMs.
xl list Name ID Mem VCPUs State Time(s) Domain-0 0 512 2 r----- 313.4 vm0 2 1024 1 -b---- 5.5
Shut down VM.
xl shutdown vm0
Auto-start a VM at boot time.
mkdir -p /etc/xen/auto ln /etc/xen/vm0.cfg /etc/xen/auto
If we shut down a VM we can perform disk maintenance on its virtual disk from Domain 0.
First ensure that the target VM is off-line. Here we only have 1 VM so our output only shows Domain 0 and our target vm-0 is not running.
xl list Name ID Mem VCPUs State Time(s) Domain-0
Now inspect the volumes for our target.
lvs | grep vm0 vm0-disk xen-vg -wi-a----- 16.00g vm0-swap xen-vg -wi-a----- 1.00g
We will increase the size of the virtual disk and leave swap alone.
lvextend --size 24G /dev/xen-vg/vm0-disk Size of logical volume xen-vg/vm0-disk changed from 16.00 GiB (4096 extents) to 24.00 GiB (6144 extents). Logical volume vm0-disk successfully resized lvs | grep vm0 vm0-disk xen-vg -wi-a----- 24.00g vm0-swap xen-vg -wi-a----- 1.00g
We must extend the size of the file system contained in the volume.
First check the disk for errors.
fsck -fy /dev/xen-vg/vm0-disk fsck from util-linux 2.25.2 e2fsck 1.42.12 (29-Aug-2014) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/mapper/xen--vg-vm0--disk: 15147/1048576 files (0.4% non-contiguous), 226267/4194304 blocks
And now resize it.
resize2fs /dev/xen-vg/vm0-disk resize2fs 1.42.12 (29-Aug-2014) Resizing the filesystem on /dev/xen-vg/vm0-disk to 6291456 (4k) blocks. The filesystem on /dev/xen-vg/vm0-disk is now 6291456 (4k) blocks long.
The VM can now be restarted with an increased disk capacity.
root@vm0:~# df -h / Filesystem Size Used Avail Use% Mounted on /dev/xvda2 24G 499M 22G 3% /
We may discover that a choice for a swap partition size was incorrect so we may resize it.
In this example we will resize the Domain 0 swap partition but we can also resize the swap partition of a VM in a similar fashion.
First we take the swap partition off-line.
cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 6361084 0 -1 swapoff -a
Now we inspect the volumes.
lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root xen-vg -wi-ao---- 7.45g swap_1 xen-vg -wi-a----- 6.07g vm0-disk xen-vg -wi-a----- 16.00g vm0-swap xen-vg -wi-a----- 1.00g
We can reduce the size of an off-line swap partition with no dangerous side-effects, this wouldn't be true if it were a data partition.
lvreduce --size 2G /dev/xen-vg/swap_1 WARNING: Reducing active logical volume to 2.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce swap_1? [y/n]: y Size of logical volume xen-vg/swap_1 changed from 6.07 GiB (1553 extents) to 2.00 GiB (512 extents). Logical volume swap_1 successfully resized
We can also increase the size, for example, if the above step was incorrect.
lvresize --size 5G /dev/xen-vg/swap_1 Size of logical volume xen-vg/swap_1 changed from 2.00 GiB (512 extents) to 5.00 GiB (1280 extents). Logical volume swap_1 successfully resized
Now we rebuild the swap.
mkswap /dev/xen-vg/swap_1 mkswap: /dev/xen-vg/swap_1: warning: wiping old swap signature. Setting up swapspace version 1, size = 2097148 KiB no label, UUID=3ac8493d-4dee-4309-9a01-953560ede126
And remount it.
swapon -a cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 2097148 0 -1