Next Previous Contents

5. The KickStart config file

There are three main sections to the config file:

  1. System info, e.g. disk partitioning and network config
  2. RedHat packages to install
  3. Post-installation shell commands to run

There are some other possibilities which we won't talk about here, but might work. For more information check out the sample KickStart config in misc/src/install/ks.samp and doc/README.ks under the top level i386 RedHat distribution directory on your CD-ROM or local RedHat mirror site.

5.1 System info

The available directives which I've been using are:

lang

Language configuration, e.g. for English

lang en
network

Network configuration, e.g. to use BOOTP/DHCP

network --bootp
nfs

NFS server and directory to install from, e.g.

nfs --server chicken.swedish-chef.org /mnt/cdrom
to use the NFS server chicken.swedish-chef.org and try to mount the RedHat distribution from the directory /mnt/cdrom.
keyboard

Select keyboard type, e.g. for UK keyboards

keyboard uk
zerombr

Clear the Master Boot Record - removes any existing operating system boot loader from your disk

clearpart

Clear existing partitions - e.g. to remove all existing disk partitions prior to installation

clearpart -all
part

Partition the disk, e.g. to make a root filesystem of 500MB

part / --size 500
install

Make a fresh installation of RedHat Linux.

mouse

Set the mouse being used, e.g. for a PS/2 or compatible "bus mouse"

mouse ps/2
timezone

Set the timezone, e.g. for local time in the UK

timezone --utc Europe/London
rootpw

Set the initial root password, based on a previously derived encrypted password

rootpw --iscrypted XaacoeGPmf/A.
lilo

Install the LILO boot loader, e.g. in the Master Boot Record

lilo --location mbr
%packages

Packages to install - see below.

%post

Post-installation shell commands - see below.

Note that the directory where KickStart is looking for the RedHat distribution should have a subdirectory RedHat, which contains the RedHat distribution tree for the platform in question. In the above example, we should see something like the following files anddirectories:

/mnt/cdrom/RedHat
/mnt/cdrom/RedHat/base
/mnt/cdrom/RedHat/contents
/mnt/cdrom/RedHat/i386
/mnt/cdrom/RedHat/instimage
/mnt/cdrom/RedHat/RPMS
/mnt/cdrom/RPM-PGP-KEY

If you want to create your own encrypted passwords, it's very easy using Perl, e.g.

% perl -e 'print crypt("schmurrdegurr", "Xa") . "\n";'p

Other options (or mooted options), which I've not tried:

cdrom

Install off CD-ROM rather than network.

device

Explicitly declare device details, e.g.

device ethernet 3c509 --opts "io=0x330, irq=7"
Alternative values of device include scsi for SCSI controllers and cdrom for proprietary CD-ROM drives.
upgrade

Upgrade an existing installation rather than make a fresh installation.

xconfig

Configure X Window server, graphics card and monitor. e.g.

xconfig --server "Mach64" --monitor "tatung cm14uhe"

I've not delved too deeply into this last one, because I'm not ever planning to run X on the console of any of my KickStarted machines. If you do, please let me know how you get on.

Here's how this first part of a KickStart config file looks when we put all the bits together:

lang en
network --bootp
nfs --server chicken.swedish-chef.org /mnt/cdrom
keyboard uk
zerombr yes
clearpart --all
part / --size 500
part swap --size 120
install
mouse ps/2
timezone --utc Europe/London
rootpw --iscrypted XaacoeGPmf/A.
lilo --location mbr

5.2 Packages to install

The start of the packages section of the KickStart config file is indicated by the presence of a %packages directive on a line of its own. This is followed by one or both of two types of package specifier - individual packages may be installed by giving the name of their RPM (excluding the version and platform information), and groups of packages may be installed by giving their group name.

Here's a sample packages section for a KickStart config file:

%packages
@ Base
netkit-base
bind-utils
ncftp
rdate
tcp_wrappers
traceroute
cmu-snmp

So, what are these groups ? Well, there are a number of groups defined by default in a file called base/comps under the RedHat distribution's top level directory. Here are the ones which were current at the time of writing:

You'll notice that they correspond to the various configurations which you're prompted for during a manual installation. Note that some of the packages in a given package group are duplicated in other groups, and that you can install multiple groups of packages without this causing problems. Each group's entry in the comps listing looks similar to this:

0 Extra Documentation
sag
lpg
howto
faq
man-pages
end

It seems that groups with a 1 next to their name (the first line above) are selected for installation by default. It looks like you might be possible to customise the Linux installation process even further by creating your own groups or redefine existing ones - let me know if you try this!

5.3 Post-installation shell commands

This is probably the best feature of all, and something which there is no direct equivalent to in the manual installation process. What we can do here is specify a sequence of shell level commands which should be executed after the main installation (disk partitioning, package installation, and so on) is complete.

The beginning of this section is signified by the %post directive in the KickStart config file. In what follows you can take advantage of all of the utilities which have been installed on your newly built Linux system, e.g.

%post
ln -s /etc/rc.d/init.d /etc/init.d
ln -s /etc/rc.d/rc.local /etc/rc.local
ln -s /usr/bin/md5sum /usr/bin/md5
ln -s /usr/bin/perl /usr/local/bin/perl
chmod ug-s /bin/linuxconf
mkdir /var/tmp/tmp
perl -spi -e 's!image=/boot/vmlinuz-.*!image=/boot/vmlinuz!' /etc/lilo.conf
rm /etc/rc.d/rc*.d/*sendmail

You can also use I/O redirection and here documents:

cat <<EOF >>/etc/passwd
squid:*:102:3500:Squid Proxy:/usr/squid:/bin/bash
EOF

cat <<EOF >>/etc/group
cache:x:3500:
EOF

Modify the run-time startup scripts:

cat <<EOF >>/etc/rc.local
echo 8192 > /proc/sys/kernel/file-max
echo 32768 > /proc/sys/kernel/inode-max 

[ -x /usr/sbin/sshd ] && /usr/sbin/sshd
[ -x /usr/sbin/cfd ] && /usr/sbin/cfd

EOF

Set up crontab entries:

cat <<EOF >/tmp/crontab.root
# Keep the time up to date
0,15,30,45 * * * * /usr/sbin/ntpdate -s eggtimer 2>&1 >/dev/null
# Recycle Exim log files
1 0 * * * /usr/exim/bin/exicyclog
# Flush the Exim queue
0,15,30,45 * * * * /usr/exim/bin/exim -q
EOF

crontab /tmp/crontab.root
rm /tmp/crontab.root

And even install other RPMs which you made yourself:

rpm -i ftp://chicken.swedish-chef.org/rpms/squid.rpm
rpm -i ftp://chicken.swedish-chef.org/rpms/ssh.rpm
rpm -i ftp://chicken.swedish-chef.org/rpms/exim.rpm
rpm -i ftp://chicken.swedish-chef.org/rpms/cfengine.rpm
rpm -i ftp://chicken.swedish-chef.org/rpms/linux.rpm

ssh-keygen -b 1024 -f /etc/ssh_host_key -N ""
depmod -a


Next Previous Contents