≡ Menu

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

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.

Tweet itFacebook itGoogle+ itPDF itFound an error/typo on this page?

{ 6 comments… add one }

  • Nitin December 13, 2011, 5:45 am

    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?


  • cod3fr3ak February 9, 2012, 1:44 am

    I do believe it is possible to generate macs before you create the VM.

  • Davie Crocket March 31, 2013, 10:42 pm

    Why is the IP info required in both the kickstart as well as the virt-install? This doesn’t make sense to me.

    • ilanni September 3, 2014, 9:39 am

      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

  • manish singh August 9, 2013, 10:27 am

    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

    • manish singh August 9, 2013, 10:35 am

      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