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 once the installation is complete. So in this article we will learn about Kickstart's post install script examples in RHEL/CentOS 7/8
What is Kickstart post install script?
- The
%post
script is a post-installation script that is run after the installation is complete, but before the system is rebooted for the first time. - You can add multiple %post install scripts in a Kickstart
- All the Kickstart post install script must start with
%post
and end with %end line - All Kickstart post install scripts by default execute in chroot environment
Can we execute systemctl command in Kickstart %post section?
- Since
%post
section by default uses chroot environment, mostsystemctl
commands will refuse to perform any action - The reason for this is that the systemd process and the user that used the chroot command do not have the same view of the file system
- The exception to this are unit file commands such as the
systemctl enable
andsystemctl disable
commands. - These commands do not need a running system and do not affect running processes, but they do affect unit files.
- Although you can execute
systemctl
commands in%post
install scripts using--nochroot
. - But instead of using
systemctl
you can also use kickstart command - services
Why do we use Kickstart post install scripts?
- Here we have the option of adding commands to run on the system once the installation is complete, but before the system is rebooted for the first time.
- The
%post
section is useful for functions such as installing additional software or configuring an additional name server. - You can also execute your custom script in %post section to perform post installation tasks such as checking system health performance etc
- You can add your own interpreter such as
bash
,perl
,python
etc based on the script you plan to run in%post
section
Kickstart post install script examples
Let us go though some kickstart post install script examples, you can have multiple post sections in a single kickstart file.
Example 1: Save kickstart %post logs
In this kickstart post install script example I will run some basic commands and store the logs of these commands in a separate log file
%post --log=/var/log/kickstart_post.log echo "Currently mounted partitions" df -Th echo "==============================" echo "Available memory" free -m echo "==============================" echo "Kickstart post install script completed at: `date`" echo "==============================" %end
Verify /var/log/kickstart_post.log
on the client node, after the kickstart installation completes.
# cat /var/log/kickstart_post.log
Currently mounted partitions
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext4 17G 2.1G 14G 14% /
/dev/sda1 ext4 976M 121M 789M 14% /boot
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 25M 2.0G 2% /run
==============================
Available memory
total used free shared buff/cache available
Mem: 3940 487 449 104 3003 3058
Swap: 2047 8 2039
==============================
Kickstart post install script completed at: Sun Apr 26 16:32:55 IST 2020
==============================
Example 2: Execute kickstart post install script with nochroot
--nochroot
allows you to specify commands that you would like to run outside of the chroot environment. If you wish to copy logs from your RHEL ISO or the log files created at %pre
stage of kickstart, then you must use --nochroot
to access these logs
In this kickstart post install script example we will copy a log file we had created at %pre
stage and will also check the existing system environment with --nochroot
%post --nochroot --log=/mnt/sysimage/var/log/kickstart_post_nochroot.log echo "Copying %pre stage log files" /usr/bin/cp -rv /tmp/kickstart_pre.log /mnt/sysimage/var/log/ echo "==============================" echo "Currently mounted partitions" df -Th %end
Verify /var/log/kickstart_post_nochroot.log
on the client node, after the kickstart installation completes.
# cat /var/log/kickstart_post_nochroot.log
Copying %pre stage log files
'/tmp/kickstart_pre.log' -> '/mnt/sysimage/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 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 19M 2.0G 1% /tmp
/dev/sda3 ext4 17G 2.1G 14G 14% /mnt/sysimage
/dev/sda1 ext4 976M 121M 789M 14% /mnt/sysimage/boot
tmpfs tmpfs 2.0G 0 2.0G 0% /mnt/sysimage/dev/shm
Example 3: Use --interpreter with %post scripts
We can execute our own custom script at %post
stage. 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
/usr/bin/python
to execute python scripts at %post
stage.In this Kickstart post install script example I am executing python and bash script and storing the logs in a separate log file
%post --interpreter=/usr/libexec/platform-python --log=/var/log/kickstart_python_post.log print("This is a sample python script called at %post stage") %end %post --interpreter=/usr/bin/bash --log=/var/log/kickstart_bash_post.log echo "This is a sample bash script called at %post stage" %end
Verify /var/log/kickstart_bash_post.log
and /var/log/kickstart_python_post.log
files on the client node, after the kickstart installation completes.
# cat /var/log/kickstart_bash_post.log This is a sample bash script called at %post stage # cat kickstart_python_post.log This is a sample python script called at %post stage
Lastly I hope the steps from the article to write Kickstart post install script examples in 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