Programster's Blog

Tutorials focusing on Linux, programming, and open-source

Kickstart Files

My KVM tool makes use of kickstart files for automated installation of both CentOS and Ubuntu guests. There is a lot of documenation from different sources on kickstart files but it can seem like there is conflicting information, so I wanted to create my own notes.

  • Kickstart and preseed are not the same thing. I'm pretty sure you can't mix and match. I went down the line of just using kickstart files but one day I will probably have a post on preseed files.

  • Comments start with a # and use them liberally as you are probably going to need them. Especially for easily switching out options.


  • pre, post, and packages are sections that should start with %. For example %packages. I read that they should also end with %end but my kickstart file linked below works just fine without them and I really don't want to change it after finally getting a working version.

  • pre and post are for scripts/commands you want to run before and after the installation respectively.

  • To be safe, specify the pre section before the packages section and the packages section before the post section.

Post Script

  • When using post with --nochroot, the filesystem is at /target (at least in ubuntu 16.04). For example /root is at /target/root. I don't think CentOS is like this because I see that NixCraft is not using it in their kickstart file for CentOS.

  • I found the best way to log output of a post script was to use the following format (note that I had to use /target as mentioned in previous point):

%post --nochroot
    # script commands go here....
) 1> /target/root/post_install.log 2>&1


  • Packages use a @ symbol to specify a group/bundle of packages. Don't put this before every package name. To be safer, you may want to just specify a lot of packages manually than use the group. For example, the packages section below will install the ubuntu-server group of packages, as well as the openssh-server package.
@ ubuntu-server
  • Read here about how to find what packages are in a group.
  • Most other parameters are self explanatory.

Linking Kickstart Files

  • I found that the easiest way to work with kickstart files was to host them on pastebin and use an http raw link. I believe others have managed to fetch them over an NFS but I haven't tried. I could not use a local file path.

Example Ubuntu 16.04 Kickstart File

The script below will install ubuntu 16.04 with the user ubuntu that takes the password ubuntu.

# Ubuntu server 64bit example kickstart/seed that shuts down upon completion 
# and runs post install steps to fix console access

# System language
#lang en_US
lang en_GB

# Language modules to install
#langsupport en_US
langsupport en_GB

# System keyboard
keyboard us

# System mouse

# System timezone
#timezone America/Chicago
timezone --utc America/Chicago

# Root password
rootpw --disabled

# Initial user
user ubuntu --fullname "" --password ubuntu
preseed user-setup/allow-password-weak boolean true

# pick only one of these actions to take after installation completed

# Use text mode install

# Install OS instead of upgrade

# Use http installation media
url --url

# System bootloader configuration
bootloader --location=mbr

# Clear the Master Boot Record
zerombr yes

# Partition clearing information
clearpart --all --initlabel

# Partition setup
part / --fstype ext4 --size 1 --grow
#part /boot --fstype ext2 --size 200 --asprimary
#part swap  --size 1024
#part pv.01 --size 1 --grow
#volgroup rootvg pv.01
#logvol / --fstype ext4 --vgname=rootvg --size=1 --grow --name=rootvol
#preseed partman-lvm/confirm_nooverwrite boolean true

# If you have swap commented out/not specified then you need to have this line.
preseed --owner partman-basicfilesystems partman-basicfilesystems/no_swap boolean false

# System authorization infomation
auth  --useshadow  --enablemd5

# Firewall configuration
firewall --disabled

# Do not configure the X Window System

# Make sure to install the acpid package so that virsh commands such
# as virsh shutdown will take effect
# @ is for groups -    
@ ubuntu-server

# update grub after installation so that we can see the console later
# The new filesystem is under /target. e.g. /root is now /target/root
# and
%post --nochroot
    sed -i "s;quiet;quiet console=ttyS0;" /target/etc/default/grub
    sed -i "s;quiet;quiet console=ttyS0;g" /target/boot/grub/grub.cfg
) 1> /target/root/post_install.log 2>&1


Last updated: 16th August 2018
First published: 16th August 2018