Create images manually Creating a new image is a step done outside of your OpenStack installation. You create the new image manually on your own system and then upload the image to your cloud. To create a new image, you will need the installation CD or DVD ISO file for the guest operating system. You'll also need access to a virtualization tool. You can use KVM for this. Or, if you have a GUI desktop virtualization tool (such as, VMWare Fusion and VirtualBox), you can use that instead and just convert the file to raw once you're done. When you create a new virtual machine image, you will need to connect to the graphical console of the hypervisor, which acts as the virtual machine's display and allows you to interact with the guest operating system's installer using your keyboard and mouse. KVM can expose the graphical console using the VNC (Virtual Network Computing) protocol or the newer SPICE protocol. We'll use the VNC protocol here, since you're more likely to be able to find a VNC client that works on your local desktop.
Verify the libvirt default network is running Before starting a virtual machine with libvirt, verify that the libvirt "default" network has been started. This network must be active for your virtual machine to be able to connect out to the network. Starting this network will create a Linux bridge (usually called virbr0), iptables rules, and a dnsmasq process that will serve as a DHCP server. To verify that the libvirt "default" network is enabled, use the virsh net-list command and verify that the "default" network is active: # virsh net-list Name State Autostart ----------------------------------------- default active yes If the network is not active, start it by doing: # virsh net-start default
Use the virt-manager X11 GUI If you plan to create a virtual machine image on a machine that can run X11 applications, the simplest way to do so is to use the virt-manager GUI, which is installable as the virt-manager package on both Fedora-based and Debian-based systems. This GUI has an embedded VNC client in it that will let you view and interact with the guest's graphical console. If you are building the image on a headless server, and you have an X server on your local machine, you can launch virt-manager  using ssh X11 forwarding to access the GUI. Since virt-manager interacts directly with libvirt, you typically need to be root to access it. If you can ssh directly in as root (or with a user that has permissions to interact with libvirt), do:$ ssh -X root@server virt-manager If the account you use to ssh into your server does not have permissions to run libvirt, but has sudo privileges, do:$ ssh -X root@server $ sudo virt-manager The -X flag passed to ssh will enable X11 forwarding over ssh. If this does not work, try replacing it with the -Y flag. Click the "New" button at the top-left and step through the instructions. You will be shown a series of dialog boxes that will allow you to specify information about the virtual machine. When using qcow2 format images you should check the option 'customize before install', go to disk properties and explicitly select the qcow2 format. The ensures the virtual machine disk size will be correct.
Use virt-install and connect by using a local VNC client If you do not wish to use virt-manager (for example, you do not want to install the dependencies on your server, you don't have an X server running locally, the X11 forwarding over SSH isn't working), you can use the virt-install tool to boot the virtual machine through libvirt and connect to the graphical console from a VNC client installed on your local machine. Because VNC is a standard protocol, there are multiple clients available that implement the VNC spec, including TigerVNC (multiple platforms), TightVNC (multiple platforms), RealVNC (multiple platforms), Chicken (Mac OS X), Krde (KDE), and Vinagre (GNOME). The following example shows how to use the qemu-img command to create an empty image file virt-install command to start up a virtual machine using that image file. As root: # qemu-img create -f qcow2 /data/centos-6.4.qcow2 10G # virt-install --virt-type kvm --name centos-6.4 --ram 1024 \ --cdrom=/data/CentOS-6.4-x86_64-netinstall.iso \ --disk path=/data/centos-6.4.qcow2,size=10,format=qcow2 \ --network network=default\ --graphics vnc,listen=0.0.0.0 --noautoconsole \ --os-type=linux --os-variant=rhel6 Starting install... Creating domain... | 0 B 00:00 Domain installation still in progress. You can reconnect to the console to complete the installation process. This uses the KVM hypervisor to start up a virtual machine with the libvirt name of centos-6.4 with 1024MB of RAM, with a virtual CD-ROM drive associated with the /data/CentOS-6.4-x86_64-netinstall.iso file, and a local hard disk which is stored in the host at /data/centos-6.4.qcow2 that is 10GB in size in qcow2 format. It configures networking to use libvirt's default network. There is a VNC server that is listening on all interfaces, and libvirt will not attempt to launch a VNC client automatically nor try to display the text console (--no-autoconsole). Finally, libvirt will attempt to optimize the configuration for a Linux guest running a RHEL 6.x distribution. When using the libvirt default network, libvirt will connect the virtual machine's interface to a bridge called virbr0. There is a dnsmasq process managed by libvirt that will hand out an IP address on the 192.168.122.0/24 subnet, and libvirt has iptables rules for doing NAT for IP addresses on this subnet. Run the virt-install --os-variant list command to see a range of allowed --os-variant options. Use the virsh vncdisplay vm-name command to get the VNC port number. # virsh vncdisplay centos-6.4 :1 In the example above, the guest centos-6.4 uses VNC display :1, which corresponds to tcp port 5901. You should be able to connect to a VNC client running on your local machine to display :1 on the remote machine and step through the installation process.