So you have your Unified Networking Lab (UNL) server running and you want to use arbitrary QEMU images with it. Here is how to create one.
All UNL data is stored under
/opt/unetlab , images are stored under
/opt/unetlab/addons and QEMU images are a folder deeper under
UNL expects to find images within directories named according to some scheme. The directory names must start with some keywords followed by anything you want. For Linux images, you need to name the directory
linux-ubuntu-14.04.5-amd64. You can find the list of supported image “types” in
/opt/unetlab/html/templates. The names of the files are the prefixes needed for directory names. If you want to, you can edit those files to change the default parameters of the images (make a backup before you change anything).
UNL expects the disk image file to be named
hda.qcow2 . You do not have any choice here.
Now, let’s create a Debian image.
Log on UNL server using
Let’s create a new directory for our image:
cd /opt/unetlab/addons/qemu mkdir linux-debian-8.3.0-i386 cd linux-debian-8.3.0-i386
Now you have two options, either you create an image on another computer and copy its disk image on UNL server, either you create the image on the UNL server itself. I’ll explain how to do the latter.
Download a Debian ISO file from your favorite mirror:
Create a disk image for the virtual machine:
/opt/qemu/bin/qemu-img create -f qcow2 hda.qcow2 4G
Start the virtual machine manually with a ISO file as virtual CDROM, booting on that ISO file and with a network interface:
/opt/qemu-2.0.2/bin/qemu-system-i386 -m 256 -smp 1 \ -cdrom debian-8.3.0-i386-netinst.iso -boot d \ -hda hda.qcow2 -monitor stdio -vnc 0.0.0.0:10 -k fr-be \ -device e1000,netdev=net0,mac=50:02:12:34:00:00 \ -netdev tap,id=net0,ifname=debian0,script=no -S
You can now attach to the console (virtual screen) of the virtual machine using VNC (use the IP address of the UNL server and the screen number 10, e.g.
10.0.0.1:10). You are going to get a black screen, that is normal because the last parameter of the
qemu-system-i386 command is
-S which means freeze CPU at startup (basically pause). To unpause the virtual machine, type
cont in the QEMU console you got.
QEMU 2.0.2 monitor - type 'help' for more information (qemu) cont
You should see the Debian install menu.
netinst image, the virtual machine will need Internet access. You have multiple options to achieve this: * connect the virtual machine network directly to your physical network * route the traffic between your physical network and the virtual machine * NAT the traffic of the virtual machine on the UNL server
I am going to go with the third option.
You can use one of the default bridge interfaces that UNL creates or use a new one. Let’s use a new one, we will call it
brdebian and assign it the IP address
brctl addbr brdebian ip link set brdebian up ip address add 10.0.0.1/24 dev brdebian
UNL does not come with
iptables installed but we need it to enable NAT.
apt-get install iptables
Let’s tell the kernel we want it to NAT everything that comes from the subnet we chose:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
and let’s tell the kernel it can forward IP packets:
echo 1 | tee /proc/sys/net/ipv4/ip_forward
Finally, let’s attach the virtual machine network interface to this network
brctl addif brdebian debian0 ip link set debian0 up
Assign an IP address from subnet 10.0.0.0/24 to the virtual machine, set its gateway to 10.0.0.1 and it will get Internet access.
Customize your image as you wish. When you are done, power it off, make a backup of the
hda.qcow2 file (just in case).
You can now use that image in UNL.
Note that all the network changes we did are temporary and will disappear when you reboot the UNL server.