KVM: Install CentOS / RHEL Using Kickstart File (Automated Installation)

Posted on in Categories , , , last updated February 1, 2011

Kickstart is a network installation system for RHEL, Fedora and CentOS Linux distributions. Another good option is Cobbler which is a Linux provisioning server that centralizes and simplifies control of services including DHCP, TFTP, and DNS for the purpose of performing network-based operating systems installs. In this tutorial, I’m going to show you how to use kickstart file to install CentOS.

Create Kickstart file

An automated installation method to install CentOS / Fedora or RHEL is recommend to automate procedure. Using kickstart, a system administrator can create a single file containing the answers to all the questions that would normally be asked during a typical RHEL Linux installation. Use kickstart GUI tool called “Kickstart Configurator” (run system-config-kickstart command to start the tool) to create a file called ks.cfg as follows:

auth  --useshadow  --enablemd5
bootloader --location=mbr
clearpart --all --initlabel
firewall --enabled --port=22:tcp
firstboot --disable
keyboard us
network --device eth0 --bootproto static --ip --netmask --gateway --nameserver, --noipv6
network --device eth1 --bootproto static --ip --netmask --gateway --nameserver, --hostname centos.nixcraft.in --noipv6  
lang en_US
logging --level=info
url --url=http://mirrors.nixcraft.in/centos/5.5/os/x86_64/ 
rootpw --iscrypted $1$somepassword
selinux --enforcing
timezone  America/New_York
part / --bytes-per-inode=4096 --fstype="ext3" --grow --size=1
part swap --recommended
echo ' via' > /etc/sysconfig/network-scripts/route-eth0
sed -i 's/LABEL=\//& console=ttyS0/' /etc/grub.conf
echo 'S0:12345:respawn:/sbin/agetty ttyS0 115200' >> /etc/inittab
echo "ttyS0" >> /etc/securetty
echo 'IPV6INIT=no' >> /etc/sysconfig/network
echo 'install ipv6 /bin/true' >> /etc/modprobe.conf
) 1>/root/post_install.log 2>&1

Upload this file to a web server as ks.cfg. You can use nfs server too.

virt-install: Install CentOS using Kickstart

Type the following command:
# virt-install \
-n centos \
-r 2048 \
--vcpus=1 \
--os-variant=rhel5.4 \
--accelerate \
-v \
-w bridge:br0 \
-w bridge:br1 \
--disk path=/emc/kvm/centos.img,size=100 \
-l http://mirrors.nixcraft.in/centos/5.5/os/x86_64/ \
-nographics \
-x "ks= ksdevice=eth0 ip= netmask= dns= gateway="

The -x option is used to pass additional kernel command line to the installer when performing a guest install. The ks option sets ks file location and rest are networking options so that installer can fetch ks.cfg and do automated installation for you.

6 comment

  1. Hi there,

    Great articles! I’d like to auto install (pxe boot) all my KVM based VMs, using my Satellite/Cobbler server. But the problem seems to be that , to add a server into Cobbler we need “MAC” addresses of both interfaces in advance (so we could assign the DHCP/Static IP accordingly). Is it possible to create dummy VMs or assign pre-defined MAC during VM auto pxe install?


    1. because this IP address with ks.cfg as the same.
      this file ks.cfg vm use the static IP Address,the dhcp server not use in the lan

  2. Pardon my english…
    what i think, installation with cobbler, in kickstart file, boot proto should be DHCP, and virt-install should have –pxe and remove ks line to get boot with LAN, now it’s work of PXE booted boot loader to provide ks file ex. “ks=”

    # virt-install
    -n centos
    -r 2048
    -w bridge:br0
    -w bridge:br1
    –disk path=/emc/kvm/centos.img,size=100

    Now VM booted with LAN, pxe provided IP from DHCP, VM gets a splash screen (boot loader .. see below)
    # cat /var/lib/tftpboot/pxelinux.cfg/default
    blah blah……
    append initrd=images/centos/6.2/os/x86_64/images/pxeboot/initrd.img linux ks=

    Pl. contribute your views, that will definitely get clear view at least mine or may be on more person

    1. may be network args also need to provide

      found this info after some googling..

      Stop Default Network
      # virsh net-destroy default
      # virsh net-edit default
      # virsh net-dumpxml default


      # virsh net-start default

      Add below switch with virt-install
      -w network=default

Leave a Comment