kicktart

Kickstart is very useful to create a automated installation of redhat systems

partitioning

When partitioning your disks you might want to assign disks based on if they are nvme or ssd. Or which size they have. Here I showcase a way of getting device path based on some bash scripting. The bash script takes the small disk as the OS disk and the large disk for vm images. Then using the device path for selecting the bootloader device and for patitioning:

%pre

#!/bin/bash

small_disk=$(lsblk -dnlo NAME,SIZE |grep -v loop | sort -k2 -h -r | head -n2 |cut -d ' ' -f1 | awk -F: 'NR==2 { print "/dev/"$1}')
large_disk=$(lsblk -dnlo NAME,SIZE |grep -v loop | sort -k2 -h -r | head -n2 |cut -d ' ' -f1 | awk -F: 'NR==1 { print "/dev/"$1}')

small_diskpath=$(udevadm info --query=all --name=$small_disk |sed -n 's/S:\s\(disk\/by-path\/.*$\)/\/dev\/\1/p' |head -1)
large_diskpath=$(udevadm info --query=all --name=$large_disk |sed -n 's/S:\s\(disk\/by-path\/.*$\)/\/dev\/\1/p' |head -1)

echo "zerombr" > /tmp/disk_include
echo "clearpart --all --drives=$small_diskpath,$large_diskpath" >> /tmp/disk_include
echo "bootloader --location=mbr --boot-drive=$small_diskpath" >> /tmp/disk_include
echo "part   /boot  --fstype ext4 --size=1024" >> /tmp/disk_include
echo "part   pv.0   --size=1024  --grow  --ondisk=$small_diskpath" >> /tmp/disk_include
echo "part   pv.1   --size=1024  --grow  --ondisk=$large_diskpath" >> /tmp/disk_include
%end

%include /tmp/disk_include

volgroup vg0 pv.0
logvol /              --vgname=vg0  --fstype=ext4 --size=20480  --name=lv_root
logvol /var           --vgname=vg0  --fstype=ext4 --size=20480  --name=lv_var
logvol /tmp           --vgname=vg0  --fstype=ext4 --size=4096   --name=lv_tmp
logvol swap           --vgname=vg0  --fstype=ext4 --size=16384  --name=lv_swap
volgroup vg1 pv.1
logvol /vms         --vgname=vg1  --fstype=ext4 --size=102400 --name=vms