This is an old revision of the document!
Table of Contents
How to install a Debian Linux System for QemuNet?
QemuNet uses standard QEMU disk file in raw format. So you can follow any tutorial available for QEMU. Here is a simple example on how to install a debian8 system for QEMU.
Build a Standard QEMU Image
Depending on your host configuration, it is recommanded to build light VM system in text mode, without graphical interface and heavy desktop manager!
# download the iso for your favorite system wget http://cdimage.debian.org/debian-cd/8.x.x/amd64/iso-cd/debian-8.x.x-amd64-netinst.iso # create a disk image for your VM (8G) qemu-img create debian.img 8G # install your VM from cdrom qemu-system-x86_64 -enable-kvm -hda debian.img -cdrom debian-8.3.0-amd64-netinst.iso -boot d -m 512 # after installation is complete, reboot your VM and test it qemu-system-x86_64 -enable-kvm -hda debian.img -m 512
Nota Bene : If you would like to copy/paste this latter line, unfortunately this is not possible with the standard QEMU display based on SDL. However, the xterm QemuNet option, described in the previous section will help you
In order to use your debian8 in QemuNet, you need to add a new entry in qemunet.cfg.
- qemunet.cfg
# IMGDIR="/absolute/path/to/raw/system/images" if [ -z "$IMGDIR" ] ; then IMGDIR="$(dirname $(realpath $0))" ; fi # debian testing SYS[debian8]="linux" FS[debian8]="$IMGDIR/images/debian8/debian.img" QEMUOPT[debian8]="-localtime -m 512"
Now, you can test your system in QemuNet in standalone mode. This mode is useful to complete your installation before to use it for virtual networking. In this mode, you have a direct access to disk image in raw format.
./qemunet.sh -l debian8
Resize your Image File
If you need to resize your VM image file, for instance, to add 1GB…
qemu-img resize debian.img +1G
Then after booting the VM, you can use fdisk to remove all partitions (command 'd') and create a new Linux one (n) with default options. Check /etc/fstab and correct it if required. The reboot your VM.
After that, use resize2fs on the / partition:
df -h / # -> /dev/sda1 resize2fs /dev/sda1
More details: https://gist.github.com/larsks/3933980
Some Basic Tips for QemuNet
Remove root password
Removing the root password in your VM will make your life easier…
passwd -d root
Install your packages
apt-get install emacs-nox jed vim nano python-scapy tcpdump tshark \ dnsmasq dsniff xterm apache2 telnetd ftpd openvpn openssl vlan bridge-utils
Upgrade your system
First, edit “/etc/apt/sources.list” and replace it with the following lines to use an unstable release.
deb http://ftp.fr.debian.org/debian/ unstable main contrib non-free deb-src http://ftp.fr.debian.org/debian/ unstable main contrib non-free
Then update your system…
apt-get update apt-get upgrade apt-get install linux-image-xxx # to get the most recent linux kernel apt-get autoremove apt-get autoclean
Disable dynamic configuration for eth0
Edit /etc/network/interfaces and remove all the configuration lines for eth0. It will prevent some system boot problem with different network topolgy, that are not connected to Internet! However, as it will disable DHCP, you will require to launch the dhclient manually in standalone mode:
dhclient eth0
Closing standalone session
rm /etc/resolv.conf history -c poweroff
Some Advanced Tips for QemuNet
QemuNet provides some advanced options, that are specific for “linux” system.
Mount shared directory
The mount option (-m) is useful to share files between host and guest system files. In your QemuNet session directory (-s session_dir), you will find a directory for each VM that is connected to /mnt/host in the VM system file. For more details on this option in QEMU, please visit : http://wiki.qemu.org/Documentation/9psetup
To do this, you need to add the following line in /etc/fstab of your VM system file:
host /mnt/host 9p trans=virtio,defaults,nofail 0 0
Dont forget to create /mnt/host directory. Here, nofail is important to enable the VM to boot without the '-m' option.
Run VM in xterm terminal
The xterm option (-x) is useful to launch your Linux VM in no-graphic mode inside xterm, instead of the native SDL mode. For instance, it allows copy/paste with other VM xterm windows. Moreover, you can resize the xterm window without any problem. Simply, type commands: resize and/or reset to update xterm.
To do this, you need to extract both kernel and initrd files from the VM raw disk image, and to provide it to QemuNet configuration file.
Basically, you can get these files by copying them from /boot to the /mnt/host shared directory (see previous tips). Easy
Else, you can try the following instructions on your host, that requires root privilege.
sudo losetup /dev/loop0 debian.img sudo kpartx -a /dev/loop0 sudo mount /dev/mapper/loop0p1 /mnt cp /mnt/boot/initrd.img-4.3.0-1-amd64 initrd cp /mnt/boot/vmlinuz-4.3.0-1-amd64 vmlinuz
Then, update qemunet.cfg with KERNEL and INITRD arrays.
- qemunet.cfg
# IMGDIR="/absolute/path/to/raw/system/images" if [ -z "$IMGDIR" ] ; then IMGDIR="$(dirname $(realpath $0))" ; fi # debian8 SYS[debian8]="linux" FS[debian8]="$IMGDIR/images/debian8/debian.img" QEMUOPT[debian8]="-localtime -m 512" KERNEL[debian8]="$IMGDIR/images/debian8/vmlinuz" # optional, but useful for -x option INITRD[debian8]="$IMGDIR/images/debian8/initrd" # optional, but useful for -x option
Startup script
It is very useful to execute a rc.local script on startup, that launches a user-defined script startup.sh located in the /mnt/host shared directory (see previous tip). It is a flexible way to configure each VM (hostname, ip, route, …) without using qcow2 image.
#!/bin/sh -e MYSTART="/mnt/host/start.sh" if [ -e "$MYSTART" ] ; then sh $MYSTART ; else exit 1 ; fi