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 --noipv6  
lang en_US
logging --level=info
url --url= 
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 \
-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.

This entry is 5 of 14 in the CentOS / Redhat (RHEL) KVM Virtulization series. Keep reading the rest of the series:
  1. CentOS / Redhat: Install KVM Virtualization Software
  2. CentOS / Redhat: KVM Bridged Network Configuration
  3. KVM virt-manager: Install CentOS As Guest Operating System
  4. KVM virt-install: Install FreeBSD / CentOS As Guest Operating System
  5. KVM: Install CentOS / RHEL Using Kickstart File (Automated Installation)
  6. Troubleshooting KVM Virtualization Problem With Log Files
  7. KVM Virsh: Redirect FreeBSD Console To A Serial Port
  8. KVM: Starting / Stopping Guest Operating Systems With virsh Command
  9. Linux KVM: Disable virbr0 NAT Interface
  10. FreeBSD / OpeBSD Running in KVM Does Not Accept FTP Traffic
  11. KVM: Start a Virtual Machine / Guest At Boot Time
  12. KVM virt-install: Install OpenBSD As Guest Operating System
  13. Linux KVM: OpenBSD Guest Hangs At Starting tty Flags
  14. KVM Virtualization: Start VNC Remote Access For Guest Operating Systems

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 6 comments so far... add one

CategoryList of Unix and Linux commands
Disk space analyzersncdu pydf
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network UtilitiesNetHogs dig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
6 comments… add one
  • Nitin Dec 13, 2011 @ 5:45

    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 Feb 9, 2012 @ 1:44

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

  • Davie Crocket Mar 31, 2013 @ 22:42

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

    • ilanni Sep 3, 2014 @ 9:39

      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 Aug 9, 2013 @ 10:27

    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 Aug 9, 2013 @ 10:35

      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 Reply

Your email address will not be published.

Use HTML <pre>...</pre> for code samples. Still have questions? Post it on our forum