Using Kickstart to Automate CentOS VM Creation
I’ve done this using CentOS, but I’m pretty sure the same thing will work with RedHat the exact same way.
Virtualization is now a commodity with several free tools available from Sun, VMWare and Xen. If you’re like me, you like to create a new, clean VM for each experiment. However, this comes with a drawback - the installation process, choosing your timezone, putting in the same password every time, etc… takes a while.
Fortunately, CentOS provides the means to automate the process via a kickstart file. The best part is, after you do an install, you’ll have a kickstart file to start working with - it’ll save all your options in /root/anaconda-ks.cfg. You can edit this file later to include other packages that you’d like to install, such as the GCC c++ libraries. You can also run other commands through yum, and customize the system-wide bashrc.
I’m only going to go over how I did the install - for the full details check out the CentOS kickstart guide
I’ve created a minimal kickstart file to do a base install without gnome, printing, and any tools I don’t find useful. I’ve disabled X completely - I have no need to boot to a GUI. I’ve also uncommented the lines to configure the drive settings, so I won’t be prompted for anything along the way; my VM should be completely ready to go once I reboot after the installation. Pretty awesome.
There’s a convenient way to run a kickstart file off a http connection, so I’ve put it the web server on my dev box. My dev box’s IP address is 192.168.1.5, and I copied the modified /root/anaconda-ds.cnf (which I’ve renamed to ks.cfg) to the server. At the installation boot prompt, I’d enter:
linux ks=http://192.168.1.5/ks.cfg
Then let it run. After a bit it’ll ready to reboot and be used. Just make sure to unmount the install DVD.
Obviously this has a lot more uses than just creating VMs, but I’m not a sysadmin, so I haven’t personally used it outside the desktop environment. There’s other tools for different distros, and third party tools for CentOS/RedHat.
For what I’ve done so far, one could argue it’s easier just to create an image of the VM and to just clone that whenever I want a new one. That’s a good solution if I was interested in always creating the same exact VM. However, using the kickstart method has several advantages. I could create a simple web app that generates new configs based on what I’ve checked off in a few lists, allowing me to quickly fire up new VMs with the right software for whatever I’m working on. I can also upgrade the version of the OS and run the same kickstart, so I don’t have to maintain some up to date starting image.
If I’ve made any mistakes, please don’t hesitate to point them out. I’m by no means a guru on the subject, I’ve just wanted to look into this topic for a while.
Some Other Useful resources
If you found this post helpful, please consider sharing to your network. I'm also available to help you be successful with your distributed systems! Please reach out if you're interested in working with me, and I'll be happy to schedule a free one-hour consultation.