Monday, September 22, 2008

Howto Run Minix3 on Linux with KVM and TAP Network

Yesterday I spent hours trying to get Minix3 working on kvm with CPU VT (Virtualization). However I manged to setup Minix3 running on kvm with CPU VT and TUN/TAP network. After getting Minix3 running as I wished, I thought that putting every little detail in to a small HOWTO would be a definite help for newbies (developers/students) trying out Minix3.

Before starting the work you should check your system for CPU VT support. You can do this by using the following command. grep 'vmx' /proc/cpuinfo

After running this command, if you see some output on your console then that means your CPU has VT. But this does not mean kvm will work fine, in most cases hardware vendors disable VT support from system BIOS. In such cases you will have to go back to BIOS setup of your computer to enable the feature (In some computers new setting will be effective only after power on off cycle ie:- HP nx6320 note books). Before using the command given below you need to install kvm in your Linux box (if it is not installed already).

For Debian/Ubuntusudo apt-get install kvm

For Fedorasudo yum install kvm

Now you can verify whether VT is enabled by BIOS by using the following command. For Intel CPUssudo modprobe kvm_intel

For AMD CPUssudo modprobe kvm_amd

If modprobe exits silently it means that CPU VT is enabled and available for virtualization tasks.

Now it is time for you to download Minix3 iso image. This image is available at www.minix.org. Once you have downloaded the Minix3 iso, you can create an image for Minix3 hard drive. qemu-img create minix.img 2G

This will create 2 GB file that will work as a hard disk for Minix.

After the file has been created you can start Minix3 installation as given below.sudo kvm -no-kvm -localtime -net user -net nic -m 128 -cdrom IDE-3.1.2a.iso -hda minix.img -boot d

With above command the Minix should boot from the iso image. After booting is done you will get a login prompt. On the login prompt login as root, no password is required. After login in you can start the installation by issuing the command setup.setup

When setup goes on it will ask the Ethernet device used in your computer, here you will have to select Realtek rtl8139 as this is one of the Ethernet devices that are emulated by kvm. After selecting this option setup will take you to several other prompts which are quite self explanatory. Once setup is completed give following command to shutdown Minix installation.shutdown

At this stage Minix3 will run on kvm but with limitations (without network and CPU VT). These problems can be easily solved.

The network problem can be solved by creating a TAP device in your Linux box which comes with UML (User Mode Linux) utilities. You can install UML utilities as given below in Debian/Ubuntu and Fedora system respectively.sudo apt-get install uml-utilitiessudo yum install uml-utilities

TAP device can be easily created by using the tunctl command as given below.tunctl -b -u root -t tap0

The above command will create the tap0 device. Now you have to create an Ethernet bridge device in your Linux box which tap0 will be connecting to. To create a bridge Ethernet named br0 use the command given below.brctl addbr br0

Now put an IP for this bridge device.ifconfig br0 192.168.1.254 netmask 255.255.255.0 up

You can connect the tap0 to br0 and start the tap0 network interface by using the commands,brctl addif br0 qtap0ifconfig qtap0 up 0.0.0.0 promisc

Now it is time to boot Minix3 with network support, as given below.sudo kvm minix.img -no-kvm -cdrom IDE-3.1.2a.iso -net nic,macaddr=55:43:0F:32:25:12 -net tap,ifname=qtap0,script=no -m 256 -localtime

After rebooting the Minix system you can configure its' network interface with an IP as shown below.ifconfig -I /dev/ip -h 192.168.1.1 -n 255.255.255.0add_route -g 192.168.1.254

Now you should be able to ping 192.168.1.254 which is the IP address of the bridge device. And also you should be able to ping what ever IP address given to your Ethernet interface in your Linux box. But if you try to ping a different computer in your LAN it will fail, to do this go back to your Linux box and configure iptables as given below.echo "1" > /proc/sys/net/ipv4/ip_forwardiptables -t nat -F POSTROUTINGiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Now pinging to a computer in your LAN from Minix should work without any problem. You can also setup your nameserver by adding nameserver x.x.x.x int to the file /etc/resolv.conf. You can use elvis editor to edit this file. Further details on setting up Minix network with a permanent IP address, etc can be found at Deep's blog

Once you have setup your network correctly you can recompile Minix kernel with a small modification to it's boot code. Even with the CPU VT support sometimes kvm will crash when booting the guest OS. This happens due to incompatibilities in the sub set of 16bit real mode instructions used by the guest OS and kvm. Unfortunately this happens with standard Minix kernel. Fortunately the problem can be resolved by editing boothead.s located in /usr/src/boot. Before editing this file I recommend you to install vim or emacs (using packman). Once you have opened the file /usr/src/boot/boothead.s go to line 643 and change hlt to !hlt, then go to line 744 and change hlt to !hlt. After saving the changes made to the file go to the directory /usr/src/boot and give following commands.makemake install

After completing all these steps you will have Minix3 running on kvm (with CPU VT) with networking.

I have put all these commands in to a single shell script. All you have to do is running this shell script when you need Minix3 inside your Linux box. (Change file paths to suite your settings)#!/bin/bash

6 comments:

You have to make sure about 2 things.1.) the CPU in laptop should support VT2.) some laptops need a power on-off cycle for changes to take effect. (In this case laptop will reboot when you save BIOS settings and quit, but this is not enough. You have to press power down button when it is rebooting)

yes..that will work for Xen aware O/S's like minix. Have anyone tried new Windows versions on Xen Virtualuzation ? I hear they are making it Xen compatible. Novel/Suse ppl must have had something to do with that..