We use Kickstart to perform automated installation with Red Hat/CentOS
and Fedora (or any other OS using Red Hat’s environment). You have the
option of adding commands to run on the system before actual
installation starts using %pre. So in this article we will learn
about Kickstart’s %pre script examples in RHEL/CentOS 7/8
What is Kickstart %pre script?
- The
%prescripts are run on the system immediately after the Kickstart file has been loaded, but before it is completely parsed and installation begins - All the Kickstart
%preinstall script must start with%preand end with%endline - Commands related to networking, storage, and file systems are
available to use in the
%prescript, in addition to most of the utilities in the installation environment /sbin and /bin directories. - The
%prescript does not run in the chroot environment.
What is Kickstart %pre-install script?
- The commands in the
%pre-installscript are run after the following tasks are complete:- System is partitioned
- File systems are created and mounted under
/mnt/sysimage - Network has been configured according to any boot options and kickstart commands
- Each of the
%pre-installsections must start with%pre-installand end with%end. - The
%pre-installscripts can be used to modify the installation, and to add users and groups with guaranteed IDs before package installation. - The
%pre-installscript does not run in chroot environment.
Kickstart %pre script examples
Below are some kickstart %pre script examples
Example 1: Store logs from kickstart %pre script
We can use --log and define the path of a log file (if not found, a
new file will be created) to store the logs of %pre script execution.
In this kickstart %pre script example I will checking systems stats
and storing them in /tmp/kickstart_pre.log
set -x in the %pre section to enable debug mode
%pre --log=/tmp/kickstart_pre.log
echo "Currently mounted partitions"
df -Th
echo "=============================="
echo "Available memory"
free -m
echo "=============================="
echo "Kickstart pre install script completed at: `date`"
echo "=============================="
%end
By default any log file you create at kickstart %pre section will
not be available after the installation completes. So we must use
post scripts to copy these log files once the installation completes.
Assuming that you have copied the log file, verify kickstart_pre.log
on the client node, after the kickstart installation completes.
# cat /var/log/kickstart_pre.log
Currently mounted partitions
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 2.0G 4.0K 2.0G 1% /dev/shm
tmpfs tmpfs 2.0G 17M 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
10.10.10.12:/images/ nfs 22G 15G 6.0G 71% /run/install/repo
/dev/mapper/live-rw ext4 2.9G 2.0G 939M 69% /
tmpfs tmpfs 2.0G 220K 2.0G 1% /tmp
==============================
Available memory
total used free shared buff/cache available
Mem: 3940 437 2736 69 766 3206
Swap: 0 0 0
==============================
Kickstart pre install script completed at: Sun Apr 26 10:57:19 UTC 2020
==============================
Example 2: Execute scripts at Kickstart %pre section using –interpreter
--interpreter= allows you to specify a different scripting language,
such as Python. Any scripting language available on the system can be
used; in most cases, these are /usr/bin/sh, /usr/bin/bash, and
/usr/libexec/platform-python.
In this Kickstart %pre script example I have written some dummy python
and bash script and storing the output in separate log files
%pre --interpreter=/usr/libexec/platform-python --log=/tmp/kickstart_python_pre.log
print("This is a sample python script called at %pre stage")
%end
%pre --interpreter=/usr/bin/bash --log=/tmp/kickstart_bash_pre.log
echo "This is a sample bash script called at %pre stage"
%end
Assuming that you have copied the log file, verify
kickstart_bash_pre.log and kickstart_python_pre.log on the client
node, after the kickstart installation completes.
# cat /var/log/kickstart_python_pre.log
This is a sample python script called at %pre stage
# cat /var/log/kickstart_bash_pre.log
This is a sample bash script called at %pre stage
Example 3: Create pre-install script
In this kickstart %pre-install script example we will get our system
environment details
%pre-install --log=/tmp/kickstart_pre_install.log
echo "Currently mounted partitions"
df -Th
echo "=============================="
echo "Available memory"
free -m
echo "=============================="
echo "Kickstart pre install script completed at: `date`"
echo "=============================="
%end
Assuming that you have copied the log file, verify
kickstart_pre_install.log on the client node, after the kickstart
installation completes. You can check the difference of partition layout
between %pre and %pre-install section.
# cat /var/log/kickstart_pre_install.log
Currently mounted partitions
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 2.0G 4.0K 2.0G 1% /dev/shm
tmpfs tmpfs 2.0G 25M 2.0G 2% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
10.10.10.12:/images/ nfs 22G 15G 6.0G 71% /run/install/repo
/dev/mapper/live-rw ext4 2.9G 2.0G 936M 69% /
tmpfs tmpfs 2.0G 21M 2.0G 2% /tmp
/dev/sda3 ext4 17G 45M 16G 1% /mnt/sysimage
/dev/sda1 ext4 976M 2.6M 907M 1% /mnt/sysimage/boot
tmpfs tmpfs 2.0G 0 2.0G 0% /mnt/sysimage/dev/shm
==============================
Available memory
total used free shared buff/cache available
Mem: 3940 487 2572 100 879 3121
Swap: 2047 0 2047
==============================
Kickstart pre install script completed at: Sun Apr 26 11:41:45 UTC 2020
==============================
Lastly I hope the steps from the article to write kickstart %pre
script with examples on RHEL/CentOS 7/8 Linux was helpful. So, let me
know your suggestions and feedback using the comment section.
References:
Perform Advanced Installation in RHEL 8 using Kickstart


