How To Create A Debian VM With Qemu
I would like to post my notes as a little tutorial here. I am usually using these virtual machines as cheap staging servers. The first part of this tutorial, you hopefully need to do only once: creating a fresh Debian system. In the second part we will build on this image to create many different servers.
Creating A Base Debian System
We will create a Qemu machine and install Debian Lenny on it first:
# Download Debian image
wget http://debian.osuosl.org/debian-cdimage/current/i386/iso-cd/debian-504-i386-businesscard.iso
# Create base VM image
qemu-img create -f qcow2 debian.qcow2 2G
Our disk image will have a 2 Gigabyte size limit. You can pick a different size if you need.
Now we need to power on our VM and install Debian:
# Install Debian
qemu -enable-kvm -k tr -cdrom debian-504-i386-businesscard.iso -hda debian.qcow2 -boot d
You don’t need to allocate a large swap disk, 128MB should do just fine for a file/web server. Also I wouldn’t bother creating a seperate partition for /home/.
Next let’s log in as the user (www here) we have created to make final changes:
# logged in as user
dpkg-reconfigure console-data
aptitude install ssh sudo
echo "www ALL=(ALL) ALL" >> /etc/sudoers
At this point you might want to take a backup of debian.qcow2. (Even though we will open it only read-only from now on)
Creating The Actual VM
To save time and space we will use copy-on-write disks and re-use debian.qcow2.
# Create the actual VM's disk
qemu-img create -f qcow2 -o backing_file=debian.qcow2 actual.qcow2
Actually we are done. You can log in to your VM using the following command and start installing/configuring/running:
qemu -enable-kvm -k tr -hda actual.qcow2 -net user -net nic \
-redir tcp:5022::22 \
-redir tcp:9080::80
A few things to note about the command above:
- -enable-kvm is meaningful only if you have kvm kernel module installed. It improves performance a great deal, so it’s highly recommended.
- You probably need to change -k tr according to your keyboard’s layout.
- We are setting up two TCP redirections. 22 is for SSH and 80 is for HTTP. You can add more ports if you need.
Finally, I suggest you to prefer SSHing your VM instead of logging in directly:
# SSH into the VM
ssh -p 5022 www@localhost
I hope some of you find this useful.
If you have any questions, suggestions or corrections feel free to drop me a line.