Archival Notice
This guide was consolidated from operational logs managing legacy RHEL/CentOS 5 and 6 unattended Kickstart server environments. Please verify Anaconda Kickstart syntax parameters (ks.cfg) and system initialization files when deploying modern RHEL 8/9 distributions.
Scaling operating system deployment across large server fleets (such as unconfigured bare-metal server rows in east-dc1 or west-dc1) requires completely automated, unattended installation pipelines. Booting servers manually into interactive graphical OS installation prompts is highly inefficient.
In this automated provisioning masterclass, I explore six core deployment workflows: initiating headless OS installations over network VNC sessions, automating network Kickstart installations (ks.cfg), compiling custom Kickstart ISO images onto boot CDs, setting up TFTP boot servers, managing dedicated VSFTPD storage endpoints, and generating offline Yum software repositories.
Part 1: Headless Network OS Installations via VNC
When provisioning remote physical server blades that completely lack local crash cart monitors or IPMI remote graphical consoles, configure the initial OS installer (Anaconda) to launch a headless network VNC installation server.
Pass the following kernel boot parameter flags directly during initial boot loader execution:
# Execute installer initialization specifying headless VNC listening
linux vnc vncpassword=RandomPassword headless ip=dhcp
With the server initialization active in memory, connect to the listening display server from an administrative terminal:
# Form remote connection to installer GUI
vncviewer target-server-ip:1
Part 2: Automating Network Kickstart Deployments (ks.cfg)
To automate OS partitioning, root password setup, and package selections without human intervention, deploy a standardized Kickstart configuration file (ks.cfg) across central installation repositories.
vi /var/www/html/ks.cfg
# Required basic unattended installation profiles
install
url --url="http://10.10.10.100/centos/x86_64/os/"
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp --onboot yes
rootpw --iscrypted $6$rounds=65536$RandomSaltString...
authconfig --enableshadow --passalgo=sha512
firewall --disabled
selinux --permissive
timezone America/New_York
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
clearpart --all --initlabel
autopart
%packages
@core
tree
unzip
wget
%end
%post
echo "Automated setup completed via enterprise kickstart pipeline." > /root/install_report.txt
%end
Part 3: Compiling Standalone Custom Kickstart CDs
When installing OS structures in isolated data center security tiers that lack network routing to centralized TFTP/HTTP servers, compile custom ISO boot images containing bundled Kickstart instruction files.
# Unpack base boot installation ISO structures
mount -o loop Centos-Minimal.iso /mnt/iso
mkdir -p /build/iso
cp -r /mnt/iso/* /build/iso/
Inject your custom Kickstart configuration directly into the root boot configuration structure (isolinux.cfg) and generate an updated bootable ISO:
cp /var/www/html/ks.cfg /build/iso/ks.cfg
# Rebuild custom bootable ISO file
mkisofs -o /build/Custom-Centos-Kickstart.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /build/iso/
Part 4: Configuring Boot Utility TFTP Servers
To serve initial network boot files (pxelinux.0, kernel boot files vmlinuz, and initialization initrds) across local network subnets, deploy a dedicated TFTP network service server.
yum install -y tftp-server xinetd
vi /etc/xinetd.d/tftp
Configure xinetd configuration parameters to enable automated background listening:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
# Enable background service listening
chkconfig xinetd on
service xinetd restart
Part 5: Deploying High-Capacity VSFTPD Servers
To expose offline software repository mirrors and OS package tarballs over FTP network transport protocols, configure VSFTPD.
yum install -y vsftpd
vi /etc/vsftpd/vsftpd.conf
Enforce secure access boundaries and restrict anonymous authentication rules:
anonymous_enable=NO
local_enable=YES
write_enable=NO
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
chkconfig vsftpd on
service vsftpd restart
Part 6: Generating Internal Offline Yum Repositories (createrepo)
To serve software installation RPM packages to internal server groups without routing internet traffic through external upstream mirrors, compile offline Yum repository metadata using createrepo.
# Install repository index compilation tools
yum install -y createrepo
mkdir -p /var/www/html/repo/rpms/
# Copy target installation RPM packages into local repository path
cp /media/dvd/Packages/*.rpm /var/www/html/repo/rpms/
Generate cached XML index files and deploy local configuration pointers:
# Generate RPM XML repository indexes
createrepo /var/www/html/repo/
Open your local system package definitions /etc/yum.repos.d/internal.repo:
[enterprise_internal]
name=Enterprise Core Internal Offline Repository
baseurl=http://10.10.10.100/repo/
enabled=1
gpgcheck=0
Automation Complete
Your unattended server provisioning pipeline is fully operational, deploying matching OS configurations across bare-metal server rows in minutes!
References
- RHEL System Automated Deployment Kickstart Manual
- Mastering System Administration Createrepo Parameters