Automatize CentOS server installation
Creating your kickstarting infrastructure
Did you ever wished that you automatize your server installation (called kickstarting) ? In this article you will see a way to automatize the installation of a linux server (it will be a RedHat based server) via the network.
Introduction and requirements
Installing a server requires some components to be present on your network. The process of the server kickstarting will be the following :
server1
(to be kickstarted) boots and makes dhcp discover (DHCPDISCOVER) request on his network to see if there’s a dhcp server availableserver2
responds to the dhcp request (DHCPREQUEST) by making an offer with an IP addressserver1
makes a DHCPREQUEST to the server in order to have the previously offered IP addressserver2
acknowledges the request and indicates where the tftp server is (will beserver2
as well)server1
makes a PXE (Preboot Execution Environment) toserver2
server1
loads syslinux, a small network booting environment fromserver2
- You choose (can be defaulted) on what you want
server1
to boot server1
fetches a kickstart file and runs the instructions
If we resume, you will need a dhcp server (most of you already have) and a tftp server. Optionally, you’ll need a web server to host you kickstart files.
Installing and configuring
dhcp server
Just one packet to go here :
yum install dhcp
=> ...
Installed:
dhcp.i386 12:3.0.5-21.el5_4.1
Now we’ll configure the server by editing /etc/dhcpd.conf
cat > /etc/dhcpd.conf
#Allow pxe requests
allow booting;
allow bootp;
ddns-update-style interim;
ignore client-updates;
subnet 192.168.0.0 netmask 255.255.255.0 {
#standard network configuration
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option nis-domain "dotnul.com";
option domain-name "dotnul.com";
option domain-name-servers 80.92.65.30;
default-lease-time 21600;
max-lease-time 43200;
#here we're saying where server1 should make the pxe boot
next-server 192.168.0.109;
#and which file syslinux is on it
filename "pxelinux.0";
#here is the reservation for server1
host server1 {
hardware ethernet 00:0C:29:26:FA:12;
fixed-address 192.168.0.108;
}
}
^D
Start and add to the default runlevel the dhcp daemon
# Starting the server
/etc/init.d/dhcpd start
=> Starting dhcpd: [ OK ]
# Adding the service to the default runlevel
chkconfig dhcpd on
tftp server
As tftp-server uses the xinetd super daemon to start, we’ll have to install it if not already present.
yum install tftp-server
=> ...
Installed:
tftp-server.i386 0:0.49-2.el5.centos
Dependency Installed:
xinetd.i386 2:2.3.14-10.el5
What we need to do is, in the pxeboot
default directory, copy syslinux in it and create a default configuration file for syslinux along with the default boot menu.
cd /tftpboot
cp /usr/lib/syslinux/pxelinux.0 .
mkdir pxelinux.cfg
cd pxelinux.cfg/
cat > default
default 1
timeout 1000
prompt 1
display menu.msg
label 1
localboot 1
label 2
kernel centos/5.7/i386/vmlinuz
append initrd=centos/5.7/i386/initrd.img ramdisk_size=10000
label 3
kernel centos/5.7/i386/vmlinuz
append initrd=centos/5.7/i386/initrd.img ramdisk_size=10000 \
ksdevice=eth0 ks=http://dotnul.com/centos-basic.ks
^D
cd ..
cat > menu.msg
My PXE Menu
choose between the following options :
1 : boot local disk (default)
2 : install centos by hand
3 : install centos by kickstarting
^D
Now, we’ll have to find the installation kernel and initrd to boot the installation media from the network on a centOS repository.
mkdir -p centos/5.7/i386/
cd centos/5.7/i386/
wget http://mirror.dclux.com/centos/5.7/os/i386/images/pxeboot/initrd.img
wget http://mirror.dclux.com/centos/5.7/os/i386/images/pxeboot/vmlinuz
If you’re using SELinux
, like me, make sure that the context is root:object_r:tftpdir_t:s0
Edit the tftp xinetd configuration file to enable tftp-server to work
vim /etc/xinetd.d/tftp
...
disable = no
...
Start and add to the default runlevel the xinet daemon
/etc/init.d/xinetd start
=> Starting xinetd: [ OK ]
chkconfig xinetd on
Now, you need a kickstart file describing how you’d like to configure the server what you want to install on it. This step won’t be detailed here, I’ll use my personnal default kickstart located at ~http://dotnul.com/centos-basic.ks~. It does a basic installation without X and with password as root password.
Booting
Let’s start server1
and make a pxe boot
Hooray ! it worked …
Here’s what in server2
/var/log/message :
server2 dhcpd: DHCPDISCOVER from 00:0c:29:26:fa:12 via eth0
server2 dhcpd: DHCPOFFER on 192.168.0.108 to 00:0c:29:26:fa:12 via eth0
server2 dhcpd: DHCPREQUEST for 192.168.0.108 (192.168.0.109) from 00:0c:29:26:fa:12 via eth0
server2 dhcpd: DHCPACK on 192.168.0.108 to 00:0c:29:26:fa:12 via eth0
Now, type 3, and enter and the installation should run smoothly. It’s time for you to make some coffee, well done !