How to automatically install RedHat like (Red Hat, Cent OS, Oracle Enterprise Linux) Linux system on ESX or VirtualBox servers ? There are at least two methods. I have seen VM cloning in lot of places using ESX (VSphere Center) or VirtualBox functionality. Cloning is fine but it required some intervention after clone will be finished (like host rename or IP address change). What if we want to install different releases of systems - well it is required to have a clone of every single release like RedHat 6.2, OEL 6.3 or OEL 6.4. It require a rework every time a new release is available on the market.
But there is a another method - developed years ago well before virtualization era. It is based on installation answer file and KickStart installation method. If I add DHCP and TFTP and NFS server to this equation I will get nice and quite configurable way to build my VMs very fast.
First of all DHCP server has to be configured. In my case I just created a internal network inside ESX and setup an additional DHCP sever for build purpose only. You can use any DHCP server but it has to be able to support TFTP redirection and also booting functionality. In my base I'm using DHCP, TFTP and NFS server provided by Ubuntu 13.04
DHCP configuration
root@myown:~# cat /etc/dhcp/dhcpd.conf ddns-update-style none; # option definitions common to all supported networks... option domain-name "priv.localdomain"; default-lease-time 600; max-lease-time 7200; option subnet-mask 255.255.255.0; option broadcast-address 10.0.0.255; option domain-name-servers 192.168.1.20; subnet 10.0.0.0 netmask 255.255.255.0 { range dynamic-bootp 10.0.0.1 10.0.0.100; filename "pxelinux.0"; next-server 10.0.0.250; }
PXELINUX.0 has to be copied from default location into TFTP directory and it has to be accessible by it. You can find "pxelinux.0" file in Ubuntu syslinux-common package.
Install it using "apt-get install syslinux-common" and then copy from it's default location into /tftpboot
root@myown:~# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
TFTP configuration - default port and /tftpboot used as files location
pioro@myown:/etc$ cat /etc/xinetd.d/tftp service tftp { protocol = udp port = 69 bind = 10.0.0.250 socket_type = dgram wait = yes user = nobody server = /usr/sbin/in.tftpd server_args = /tftpboot disable = no }
TFTP directory structure
pioro@myown:/tftpboot$ ls -l total 37816 -rw-r--r-- 1 root root 34551609 Dec 22 17:04 initrd.img -rw-r--r-- 1 root root 26461 Dec 22 17:26 pxelinux.0 drwxr-xr-x 2 root root 4096 Jan 13 22:02 pxelinux.cfg -r--r--r-- 1 root root 441 Dec 22 17:04 TRANS.TBL -rwxr-xr-x 1 root root 4128944 Dec 22 17:04 vmlinuzPXELINUX.CFG directory inside TFTP directory
pioro@myown:/tftpboot/pxelinux.cfg$ ls -l total 8 -rw-r--r-- 1 root root 137 Dec 22 18:29 01-00-0c-29-41-69-15 -rw-r--r-- 1 root root 138 Jan 13 21:55 01-00-0c-29-99-7d-3dFiles names are related to NIC MAC addresses. For example: 01-00-0c-29-41-69-15 is first file for MAC address 00:0c:29:41-69:15
Now take a look what is inside a host configuration file
pioro@myown:/tftpboot/pxelinux.cfg$ cat 01-00-0c-29-41-69-15 default Oracle Linuxas_64 label Oracle Linuxas_64 kernel vmlinuz append initrd=initrd.img ks=nfs:10.0.0.250:/images/ks.cfg ksdevice=eth1This are boot properties created using a GRUB style and describing a kernel and initrd images. KS parameter is a configuration parameter of KickStart process. In the above example KickStart configuration file is placed on NFS server in /images directory and it's called ks.cfg. In addition to that KickStart will configure interface eth1 which is private ESX network in my case.
pioro@myown:/tftpboot/pxelinux.cfg$ cat /etc/exports /images/ *(ro,subtree_check,crossmnt)ISO with Linux distribution should be mounted below /images directory using loop option.
root@myown:~# mount -o loop /nfs/disk2/images/OEL65.iso /images/OEL65/ mount: block device /nfs/disk2/images/OEL65.iso is write-protected, mounting read-onlyNow I have a access to installation files and also to PXE boot files. In my case all have been located in the following directory /images/OEL65/images/pxeboot/ and I just copied it into TFTP /tftpboot directory
root@myown:~# ls -l /images/OEL65/images/pxeboot/ total 37775 -rw-r--r-- 2 root root 34551609 Nov 26 05:02 initrd.img -r--r--r-- 1 root root 441 Nov 26 05:04 TRANS.TBL -rwxr-xr-x 2 root root 4128944 Nov 26 05:02 vmlinuz root@myown:~# cp /images/OEL65/images/pxeboot/* /tftpboot/Inside NFS exported directory I have also KickStart configuration files
pioro@myown:/images$ ls -l total 12 -rw-r--r-- 1 root root 1935 Jan 13 21:59 ks2.cfg -rw-r--r-- 1 root root 1936 Jan 13 22:00 ks.cfg drwxr-xr-x 2 root root 4096 Dec 22 18:27 OEL65
Example Kickstart configuration file
pioro@myown:/images$ cat dg1.cfg #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use CDROM installation media nfs --server 10.0.0.250 --dir /images/OEL65/ #cdrom # Root password rootpw --plaintext# System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical firstboot --disable # System keyboard keyboard us # System language lang en_US # SELinux configuration selinux --disabled # Installation logging level logging --level=info # Reboot after installation reboot # System timezone timezone Europe/Dublin # Network information network --bootproto=static --device=eth0 --ip=192.168.1.51 --nameserver=192.168.1.20 --netmask=255.255.255.0 --onboot=on --hostname=dg1.localhost network --bootproto=static --device=eth1 --ip=10.0.0.1 --netmask=255.255.255.0 --onboot=on # network --bootproto=dhcp --device=eth2 --onboot=on # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all # Disk partitioning information part /boot --fstype ext4 --size=200 part pv.01 --size=1 --grow volgroup VolGroup pv.01 logvol swap --fstype swap --vgname=VolGroup --size=1024 --name=lv_swap logvol / --fstype ext4 --vgname=VolGroup --size=1 --grow --name=lv_root %packages @base @console-internet @core @debugging @directory-client @hardware-monitoring @large-systems @network-file-system-client @performance @perl-runtime @security-tools @server-platform @server-policy @system-admin-tools gcc %end
Above configuration file will partition a disk into root and swap partition and configure two networks. In addition to that packages groups specified after %packages line will be installed.
Below are screen shots from my ESX environment:
Finding a MAC address of VM - Open VM configuration and go to Network adapters
Booting process - this VM is booting from NIC 2 using private network and all services configured above.
If you looking to step by step instructions you can find it on Tim Hall website:
PXE Network installations
KickStart
I based my environment build on Tim's website and some Google research.
Happy installing !!!
regards,
Marcin