The following method was tested with FreeBSD 8.2 image bundled into Diablo version of OpenStack. The OpenStack cloud was setup using the procedure given in the following link.
Create a raw image which emulates the Hard Drive.
kvm-img create -f qcow2 freebsd.img 5G
Start the Virtual Machine to boot from the CD.
kvm -m 256 -cdrom FreeBSD-8.2-RELEASE-i386-disc1.iso -drive file=freebsd.img,if=scsi,index=0 -boot d -net nic -net user -nographic -vnc :1
Connect to the Virtual Machine through VNC (use display number :1) where 10.10.10.1 is the IP address of the host machine.
vncviewer 10.10.10.1 :1
After installation is over, during the post-installation configuration enable SSH server. Also enable dhcp for the interface re0.
Shutdown the Virtual Machine and start it to boot from the Hard Drive using the following command.
kvm -m 256 -drive file=freebsd.img,if=scsi,index=0,boot=on -boot c -net nic -net user -nographic -vnc :1
We need to install the Virtio driver for the image to work with OpenStack. For installing the Virtio driver perform the following steps.
Download the compressed snapshot of the ports collection.
Now extract the snapshot into /usr/ports.
Also download the kernel source using the following steps.
Run the command.
Select Configure -> Distributions which will give you many components that it can install. Select “src”. It will in turn show you some sub components. Select “sys”. Install the components. This will download the kernel source which is needed for the compiling the drivers.
In order to install the Virtio driver we need to install Subversion and download the source for the driver.
cd /usr/ports/devel/subversion make install make clean cd /usr/src/sys/dev svn co http://svn.freebsd.org/base/projects/virtio/sys/dev/virtio cd /usr/src/sys/modules svn co http://svn.freebsd.org/base/projects/virtio/sys/modules/virtio cd /usr/src/sys/modules/virtio make make install
Add the following lines to /boot/loader.conf.
virtio_load="YES" virtio_pci_load="YES" virtio_blk_load="YES" if_vtnet_load="YES" virtio_balloon_load="YES"
Now the installation and configuration of the virtio driver is over. Do the other necessary changes needed for the image and shutdown the Virtual Machine.
In order to check the driver installed boot the Virtual Machine with another hard disk.For checking first create another disk with 2GB capacity.
kvm-img create -f qcow2 test.img 2G
Boot the Virtual Machine created by attaching the newly created disk to it.
kvm -m 256 -drive file=freebsd.img,if=scsi,index=0,boot=on -drive file=test.img,if=virtio,index=0 -boot c -net nic -net user
To check if the driver is loaded properly use the command.
dmesg |grep -i virtio
Edit the file /etc/fstab to boot from the original drive with Virtio interface.
cp /etc/fstab /etc/fstab.bak cat /etc/fstab.bak | perl -pe "s/da/vtbd/g;" > /etc/fstab
Edit the lines for SSH access as root and to enable password authentication.
PermitRootLogin yes PasswordAuthentication yes
Shutdown the Virtual Machine and upload the image to OpenStack using the following command.
cloud-publish-image amd64 freebsd.img freebsdbucket