Automatic server installation via PXE (examples from Centos) – Part 1
In this post I would like to share with you the way I am doing automatic server installation within different network subnets. I mean everybody install server at least once from CD/DVD which is the most common way. This is the easy way when you have just few servers to manage (maybe they woudn’t even be from the same vendor so every such installation is be very unique). In this case any effort to build up some automatic installation process woudn’t be the right way to go.
But this should be the right way whenever more servers in the same HW configuration are considered to be installed. And it is very probable that each server will be configured the very same way as the previous one including disk space layout etc..
There are of course lots of projects that can be used to duplicate or clone (also virtualization could be mentioned at this point) server installations etc..but this is not the topic. I would like to present automatic PXE network installation of RHEL/Centos server the way I am successfully using it and which became my “best practice”. This solution is also very flexible and I am using it to install different servers in different subnets including production servers as well as virtual servers for developers.
Whole concept is based on PXE server which can then serve an installation menu to server booting from network card. From this menu you can select things concerning server hostname, domain and such and the rest of installation process is fully automatic. To manage this you will need a server which will provide PXE menu thru TFTP and configuration templates to perform automatic Centos installation. I’d also recommend to setup own mirror of Centos base/update repositories as automatic installation will be much faster when installing from local network.
Let’s assume you already have a server prepared and configured as 192.168.1.254 which can be further configured as PXE server.
To configure your own “admin” server you’ll need to install tftp-server and syslinux packages. TFTP will create a directory /tftp where you copy few files from syslinux package:
cp /usr/lib/syslinux/pxelinux.0 /tftpboot
cp /usr/lib/syslinux/menu.c32 /tftpboot
cp /usr/lib/syslinux/memdisk /tftpboot
cp /usr/lib/syslinux/mboot.c32 /tftpboot
cp /usr/lib/syslinux/chain.c32 /tftpboot
You’ll also need to install dhcp server package and configure DHCP server to make PXE work. /etc/dhcpd.conf should look like this:
authoritative;
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0
{
range 192.168.1.100 192.168.1.200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option domain-name-servers 192.168.1.254;
option routers 192.168.1.254;
next-server 192.168.1.254;
filename “/pxelinux.0”;
}
let’s say you also have another subnet for testing servers (at this point no matter if on different interface or configured as VLAN) beside 192.168.1.0/24. So put it to dhcpd.conf:
subnet 192.168.2.0 netmask 255.255.255.0
{
range 192.168.2.100 192.168.1.200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.2.255;
option domain-name-servers 192.168.2.254;
option routers 192.168.2.254;
next-server 192.168.2.254;
filename “/pxelinux.0”;
}
Start DHCP and TFTP on your server (now DHCP should listen on both IP addresses 192.168.1.254 and 192.168.2.254) .
The whole process of network boot should now work this way:
Now we are at the interesting point where we can send a remote machine specific PXE menu based on its IP or even its MAC address. I am using this tricky feature to have a different PXE menu for production servers and different PXE menu for testing servers.
To find out what configuration file the machine will be look for (based on assigned IP address) you can use gethostip command.
gethostip 192.168.1.1
192.168.1.1 192.168.1.1 C0A80101
gethostip 192.168.1.2
192.168.1.2 192.168.1.2 C0A80102
to be continued…
Posted in Server administration
Leave a Reply
You must be logged in to post a comment.