The Perfect Xen 3.0.1 Setup For Debian - Page 4

Want to support HowtoForge? Become a subscriber!
 
Submitted by falko (Contact Author) (Forums) on Tue, 2006-03-21 18:33. ::

4 Create A Virtual Machine (domU)

Next we create an image of a virtual machine. It will be a basic Debian system. This image will be the template for all our virtual machines. Whenever we want to create a new virtual machine, we just copy this image, create a new Xen configuration file and boot the copy, and then we can go on and configure the copy to our needs (e.g install a mail server, web server, DNS server, etc. on it). All our images will be on the /vserver partition which should be the largest one we have.

mkdir /vserver/vm_base
mkdir /vserver/images

Now we create a 1 GB image file and a 500 MB swap image. In the end the virtual machines will have 1 GB space and 500 MB swap. These are just example values, in the real world you might want to have more space for your virtual machines (e.g. between 5 and 30 GB), so just increase the value of count to create larger images.

dd if=/dev/zero of=/vserver/images/vm_base.img bs=1024k count=1000
dd if=/dev/zero of=/vserver/images/vm_base-swap.img bs=1024k count=500

Then we format /vserver/images/vm_base.img with ext3 and vm_base-swap.img with swap:

mkfs.ext3 /vserver/images/vm_base.img

When you see the following, answer with y:

/vserver/images/mail.img is not a block special device.
Proceed anyway? (y,n) <-- y

mkswap /vserver/images/vm_base-swap.img


4.1 Install A Basic Debian In The Image

In order to install a basic Debian system in our image, we mount the image, run debootstrap and a few other commands:

mount -o loop /vserver/images/vm_base.img /vserver/vm_base
debootstrap --arch i386 sarge /vserver/vm_base/ http://ftp2.de.debian.org/debian

chroot /vserver/vm_base
apt-setup

You are asked the following question:

Archive access method for apt: <-- http

Then select a mirror close to you.

Afterwards, edit /etc/apt/sources.list and replace testing with stable. That's how my /etc/apt/sources.list looks:

vi /etc/apt/sources.list

deb http://ftp2.de.debian.org/debian/ stable main
deb-src http://ftp2.de.debian.org/debian/ stable main

deb http://security.debian.org/ stable/updates main

Then run

apt-get update

Now we set up our locales. If we do not do this now, we will see some ugly warnings during base-config like these:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_DE:en_US:en_GB:en",
LC_ALL = (unset),
LANG = "en_US"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

They are not serious, but ugly... So we run

apt-get install localeconf

Select locales to install (e.g. en_US ISO-8859-1) and select the standard locale (e.g. en_US).

You will be asked a few questions:

Manage locale configuration files with debconf? <-- Yes
Environment settings that should override the default locale: <-- do not select anything
Replace existing locale configuration files? <-- Yes
Default system locale: <-- e.g. en_US ISO-8859-1

Next run

base-config

You will see a menu with installation options. This is what we do:

  1. Configure timezone
  2. Set up users and passwords
  3. Select and install packages (when it comes to Choose software to install:, you can choose whatever you like; I, however, choose nothing because I want to install a basic system.)
  4. Finish configuring the base system

Don't deal with the other menu items, you don't need them. Then we remove nfs-common and delete /etc/hostname:

apt-get remove nfs-common
rm -f /etc/hostname

Then edit /etc/fstab. It should look like this:

vi /etc/fstab

/dev/hda1               /               ext3    defaults        1       2
/dev/hda2 none swap sw 0 0
/dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0

Change /etc/network/interfaces to look like this:

vi /etc/network/interfaces

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

Then create /etc/hosts:

vi /etc/hosts

127.0.0.1       localhost.localdomain   localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Now we leave the chroot environment:

exit

Then we copy over the kernel modules to our virtual machine image and unmount the image:

cp -dpR /lib/modules/2.6.12.6-xenU /vserver/vm_base/lib/modules/
mv /vserver/vm_base/lib/tls /vserver/vm_base/lib/tls.disabled
umount /vserver/vm_base

If you get a warning like this: umount: /vserver/vm_base: device is busy don't worry about it, it's not important.

Now our virtual machine image template is ready!


Please do not use the comment function to ask for help! If you need help, please use our forum.
Comments will be published after administrator approval.
Submitted by Anonymous (not registered) on Tue, 2006-05-02 17:58.

When I run base-config I get the error:

Terminated

I resolved executing these commands:

mount -t proc proc /proc
cd /dev
./MAKEDEV generic
Submitted by Anonymous (not registered) on Fri, 2006-06-09 00:27.

Also need:

mount -t devpts none /dev/pts
Submitted by Anonymous (not registered) on Mon, 2006-04-03 20:07.
If you get a warning like this: umount: /vserver/vm_base: device is busy don't worry about it, it's not important.

Are you sure? It at least means it hasn't been umounted. At least try
umount -l /vservrer/vm_base

or

umount -fl /vservrer/vm_base

but -f could be dangerous depending why it failed

If you want to know why the umount failed:

fuser -m /vserver/vm_base

to see which processes are using files on that mount point.
Submitted by Anonymous (not registered) on Wed, 2006-04-26 11:51.
it is because of the atd daemon. Maybe it is launched by base-config. You have to kill this daemon and then umount the filesystem. Then you can restart the daemon.