Hello, For a while I have been assembling methods for myself to be able to easily create Gentoo-based virtual appliances. I have worked with Ubuntu's vmbuilder scripts and basically wanted the same or similar ease of use with Linux.
To make a long story short, I threw together a Makefile which basically gives me this ability. I have it at a state where it's pretty much useful to me for my purposes. But I thought someone else may find use for it as well, so I put it up on Bitbucket: https://bitbucket.org/marduk/virtual-appliance The Makefile pretty much does an install into a chroot, pretty much by the handbook, with a few alterations where I saw fit. It hast some variables and a couple of hooks to allow for customization. I've already created a few appliances (included) such as: base: A base install of Gentoo Linux gnome: GNOME stable appliance (no GUI console) kde: KDE stable appliance (no GUI console) lodgeit: Lodgeit pastebin appliance[1] teamplayer: TeamPlayer appliance The "no GUI console" means that by default these appliances don't have an X console. I usually log into them via XDMCP or ssh. So they can be thought of as "headless" desktop virtual appliances. The "base" appliance is pretty much the handbook, with dhcpd and a syslog and nothing else. TeamPlayer is a "democratic Internet radio station" web app that I have been developing. To date I have not distributed it, though eventually plan to. You can contact me directly if interested. Right now there is no documentation or copyright or anything. It's pretty much just the code. Like I said this has been primarily for my personal use so there is nothing fancy like packaging or anything, but it works. Some things can probably be done better. I'm no expert at writing Makefiles. So the way you basically use it is like this: $ sudo make APPLIANCE=gnome VIRTIO=YES qcow This will create a gnome virtual appliance image configured for virtio and supply a qcow (qcow2) disk image. You can also just "sudo make" for which the default is to create a "base" appliance not configured with VIRTIO and only supply an image file in raw format. There are other make variables that can be supplied. Check out the Makefile. You can "easily" create your own VM appliaces by just mkdir <appliance-name>. Copy the files from base/* into it and edit them as needed. The supplied appliances should be good references. One warning: the Makefile must be run as root, and does things inside a chroot. I have been careful to make sure everything is done in the chroot that needs to be. It is possible for you (or me) to forget to put chroot before a command and cause irreversible damage to your host system. Just giving you this caveat. I'm sure the appliances I provided are safe, but I can't guarantee it and if you make your own appliance just be careful. Ideally one would build VM appliances inside a VM appliance itself :) Well, I probably left some stuff out. Feel free to reply (to this thread I guess) if you have any questions. Oh, when you are finished building your disk image just $ sudo make clean Which will unmount things and remove the temporary files. A FEW MORE IMPORTANT THINGS: In the Makefile, I have PORTAGE=/portage and DISTFILES=/var/portage/distfiles. These are my setup and are not the defaults. You will need to change these values appropriately. Also, you may need to edit the USEPKG variable. I have the Makefile use my binary packages to speed up the creation process (allows me to build a base appliance in about 12 minutes). You may not want this, especially if you have your CFLAGS tuned to a specific processor that your hypervisor does not support. But I use generic CFLAGS so I have no problem using binpkgs. Oh, I use kvm/virt-manager and use virtio for disks and network devices. I tried to configure the VM kernel so that it will support other formats. I am curious as to whether or not the appliances will work with VMWare as I have not actually tried it, but you should be able to create a VM image with $ sudo make vmdk I'm probably leaving something out. You should take a look at the Makefile first if you are going to use it. It shouldn't be that foreign (it's basically handbook stuff but tailored for the use case). Anyway it's out there for you to reference. -a [1] http://dev.pocoo.org/projects/lodgeit/