QEMU
apt-get install ssh qemu vde nfs-kernel-server debootstrap uml-utilities bridge-utils dnsmasq
- In the file /etc/sysctl uncomment the following line to allow IP forwarding:
net.ipv4.conf.default.forwarding=1
- In the file /etc/modules, add a new line with "tun", to make that module load on boot.
- Configure DNSmasq. Edit the file /etc/dnsmasq.conf and change the following options:
user=nobody domain=qemu.lan interface=qtap0 dhcp-range=10.1.1.1,10.1.1.253,255.255.255.0,10.1.1.255,8h
- To avoid the need for root privileges add the group "vde2-net" to all users that will use VDE (log-out and log-in for this to take effect)
sudo usermod -aG vde2-net $USER
- Add the new network interface. Edit the file /etc/network/interfaces and paste this:
auto qtap0 iface qtap0 inet static address 10.1.1.1 netmask 255.255.255.0 pre-up /sbin/modprobe ipt_MASQUERADE pre-up /usr/bin/vde_switch --tap qtap0 --sock /var/run/vde.ctl \ --daemon --group vde2-net --mod 775 \ --mgmt /var/run/vde.mgmt --mgmtmode 770 \ --pidfile /var/run/vde_switch.pid pre-up /etc/init.d/dnsmasq restart up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE down iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE post-down kill -s HUP `cat /var/run/vde_switch.pid`
- Either restart the PC or simply do:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward" sudo modprobe tun sudo ifup qtap0
- Share the new directory out via NFS, by adding the following entry to /etc/exports:
/nfs/share/arm 127.0.0.0/24(rw,no_root_squash,sync)
It may also be necessary to share with 10.1.1.0/24(rw,no_root_squash,sync); however in my experience the NFS request came to the server from 127.0.0.1.
- Then export the filesystem:
/etc/init.d/nfs-kernel-server restart
or
exportfs -a
- Download a kernel for arm-linux;
http://fabrice.bellard.free.fr/qemu/arm-test-0.2.tar.gz
- Place the arm-linux zimage in /usr/local/etc/images/zImage.arm, and then create the following script as /usr/local/bin/start-qemu-arm:
#!/bin/sh #console="ttyAMA0" # serial console nfsserver="10.1.1.1" # address of NFS server nfsdir="/nfs/share/arm" # exported share where debian/arm is installed address="10.1.1.100" # address for guest server gateway="10.1.1.1" # default gateway netmask="255.255.255.0" # subnet mask hostname="arm.home" # hostname for guest server device="eth0" # interface that guest server will use mem=256 # memory for guest server in Mb #tap="/var/run/vde/tap0.ctl" # vde tap socket kernel="/usr/local/etc/images/zImage.arm" # arm kernel nfsopts="rsize=8192,wsize=8192,hard,intr,tcp,nolock" # nfs options #consoleopt="console=$console" nfsrootopt="nfsroot=$nfsserver:$nfsdir,$nfsopts" ipopt="ip=$address::$gateway:$netmask:$hostname:$device" init="" if [ "x$1" = "xsingle" ] then init="init=/bin/bash" fi vdeq qemu-system-arm -net vde,vlan=0 -net nic,vlan=0 -m $mem \ -kernel $kernel -append "root=/dev/nfs $nfsrootopt $ipopt $init"
Then from the command prompt run:
sudo /usr/local/bin/start-qemu-arm single
Now you should get a window with the famous penguin and a login prompt.
The rest of this HOWTO is unverified.
The emulated guest server should start up and boot into a bash prompt. The filesystem will be mounted read-only, and it will be necessary to remount it read-write before any further work can be done on it:
guest# mount -n -o remount,rw / guest# mount /proc
Now run the second stage of debootstrap, within the guest system, to finalise the installation:
guest# cd / guest# ./debootstrap/debootstrap --second-stage
This will probably take a while to run; the emulator isn't particularly fast. When it's finished, adjust a few remaining files, such as /etc/hostname and /etc/resolv.conf; also install ssh:
guest# apt-get install ssh
Once this is done, you can shut the server down. It's safe to just kill the qemu process from the host machine - since its filesystem is mounted from an NFS server, there's no need to shut it down cleanly.
Now you can start it up completely:
host$ /usr/local/bin/start-qemu-arm
When it finishes booting, you should be able to ssh into it on 10.1.6.50, and you'll have a working Debian installation running on an emulated ARM processor.