The following procedure was tested using Debian 7.1.0 on Grizzly version of OpenStack.
Create an image which emulates the Hard Drive
kvm-img create -f qcow2 debian.img 5G
Boot the virtual machine
kvm -m 512 -cdrom debian-7.1.0-amd64-CD-1.iso -drive file=debian.img,if=virtio,index=0 -boot d -net nic -net user -nographic -vnc :1
Connect to the Virtual Machine through VNC (use display number :1).For Example, where 10.10.10.1 is the IP address of the host machine
vncviewer 10.10.10.1 :1
Select SSH server, Curl and other packages needed, during installation. Once the installation is over shutdown the Virtual Machine. Start the Virtual Machine to boot from the Hard Drive using the following command
kvm -m 512 -drive file=debian.img,if=virtio,index=0,boot=on -boot c -net nic -net user -nographic -vnc :1
Do the necessary changes needed for the image. For SSH key injection add the following lines before ‘exit 0’ in the file /etc/rc.local
mkdir -p /root/.ssh echo >> /root/.ssh/authorized_keys curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys echo "AUTHORIZED_KEYS:" echo "************************" cat /root/.ssh/authorized_keys echo "************************"
Also remove the network persistence rules from /etc/udev/rules.d as their presence will result in the network interface in the instance coming up as an interface other than eth0
rm -rf /etc/udev/rules.d/70-persistent-net.rules
Shutdown the Virtual Machine. Upload the image file to OpenStack using the webUI.