VMware vSphere unattended install using ks.cfg

VMware vSphere unattended install using ks.cfg

VMware vSphere unattended install using ks.cfg 150 150 Roderick Derks

Intro

Here is an example of a script I use to perform an unattended install of a VMware vSphere ESX 4.1 host.
I install on HP Blades, so therefore I started with taking control of the ILO, mount the VMware ISO and a local folder on my pc containing the ks.cfg file. Later I started to use FTP for the ks.cfg and repo files.

After booting the server wait for the ESX Install screen, move the cursor to the option "ESX Scripted Install using USB ks.cfg" and press F2 to alter the commandline (don't press enter yet).
Add the following parameters: ESXHOST=YourHostName ESXIP=YourIpAddress VMIP=VMotionIpAddress

You can also get the ks.cfg file from a webserver by adding the following parameters:
usb=http://webserver/ks.cfg ip=10.1.0.5 netmask=255.255.240.0 gateway=10.1.0.1 vlanid=1

Just use the CDROM or ISO to start the install (instead of PXE boot). You can disconnect the CDROM after the first reboot, not before.

By editing the isolinux.cfg file in the DVD you can create your own start menu while booting from the ISO. For me it's an excellent  way to save time. I can supply the input parameters for users. And automatically boot from the harddrive if no selection in made by a user after 30 seconds, instead of going into the ESX GUI install mode. Last thing is handy if the ISO is constantly mounted during the installation.

You can download the script here! Leave a reply if you got some comments AND please click on a google add to on the right side of this page to support me sharing more knowledge for free!

KS.CFG

#  — VMware ESX 4.x unattended installatie
# Roderick Derks
# 20100810
# v0.31 FTP
#
# Dit script is in vier fases onder te verdelen:
# 1. PRE fase: voorbereiden commando's mbv variabelen voor de Kickstart commando fase
# 2. KICKSTART commando's fase: uitvoer commando's voor installatie, variabelen zijn niet te gebruiken in deze fase
# 3. POST fase: voorbereiden commando's om ESX te configureren, daadwerkelijke uitvoer hievan na de reboot
# 4. Reboot en uitvoeren scripts gemaakt in POST fase nadat ESX volledig draait en de ESX commando's beschikbaar zijn.
#
# Goed om te weten: tijdens de installatieprocedure heb je toegang tot drie drives:
# 1. /mnt/source – source rpm files (dvd of ftp/http server)
# 2. /mnt/sysimage – filesysteem Linux Service Console in wording (na formatatteren op +/- 20% installatie beschikbaar): echo hoi > /mnt/sysimage/root/haha genereert file haha in homedir root
# 3. /mnt/usbdisk – files op de USB
#
# Base via HTTP -> Op webserver (IIS): Enable browsing in directories en schakel optie "standaarddocumenten" uit (tab documents)
#
# Installatie starten met parameters ESXHOST=hostname ESXIP=ipadres VMIP=vmotion_ipadres
#
# v0.22 toevoegen VMotion portgroup en ip adres, verwijderen standaard VM Network portgroup
# v0.23 andere behandeling saved_variables file in POST NO-CHROOT sectie; refresh en sleep voor aanschakelen vmotion
# v0.24 tekstuele aanpassingen
# v0.25 _POST02 gecombineerd met _POST01
# v0.26 Banner toegevoegd voor SSH
# v0.27 Dangerous: Root access toestaan via SSH
# v0.28 Aanpassing moment inlezen variabelen in POST sectie
# v0.29 sleep ingebouwd voordat check start of vmware-host service draait, dit om foutmelding te voorkomen; tekstuele aanpassingen
# v0.30 FTP ingeschakeld voor installatie (ks.cfg file en REPO)
# v0.31 NTP config toegevoegd
#
#########################################################################

#Licensing
accepteula

# Installation settings
keyboard us
timezone 'Europe/Amsterdam'

# Authentication
auth

# testen script
#dryrun

# Uncomment to use first detected disk and overwrite VMFS (zorg er voor dat je geen VMFS Datastores aanbiedt aan de ESX host die je niet kwijt wilt):
clearpart –firstdisk –overwritevmfs

# Installation settings
#install cdrom
#install url http://10.120.37.29/esx/4.1
install url ftp://10.120.37.29/esx/4.1
reboot

# set root password
rootpw –iscrypted $1$Fu5x1y5O$ZrZ492Sh0OB0qx6uWfX6u/

# start opdrachten in files gegenereert in PRE fase
%include /partition-list
%include /network-config

############################################################################
# PRE FASE- onderstaand gedeelte wordt uitgevoerd VOOR de Kickstart Commands
############################################################################
%pre –interpreter=bash

# uitlezen van de meegegeven parameters tijdens starten installatie
set — `cat /proc/cmdline`
    for I in $*; do case "$I" in *=*) eval $I;; esac; done

echo Hostname being used: ${ESXHOST}
echo IP being used: ${ESXIP}
echo VMotion IP being used:${VMIP}

/bin/cat > /partition-list <<_PRE01

   clearpart –firstdisk –overwritevmfs

   #Example manual partitioning configuration
   part /boot –fstype=ext3 –size=1100 –onfirstdisk
   part None –fstype=vmkcore –size=110 –onfirstdisk
   part ${ESXHOST}-LocalStorage –fstype=vmfs3 –size=18000 –grow –onfirstdisk
   virtualdisk disk1 –size=16000 –onvmfs=${ESXHOST}-LocalStorage
   part / –fstype=ext3 –size=6000 –grow –onvirtualdisk=disk1
   part /home –fstype ext3 –size=512 –onvirtualdisk=disk1
   part swap –fstype=swap –size=1600 –onvirtualdisk=disk1
   part /var –fstype=ext3 –size=4096 –onvirtualdisk=disk1
   part /tmp –fstype=ext3 –size=1024 –onvirtualdisk=disk1
   part /opt –fstype=ext3 –size=2048 –onvirtualdisk=disk1
_PRE01

/bin/cat > /network-config <<_PRE02

    # configureren vSwitch0 met ip adres voor Service Console in juiste VLAN
    network –addvmportgroup=true –device=vmnic0 –vlanid=108 –bootproto=static –ip=${ESXIP} –netmask=255.255.240.0 –gateway=10.108.0.1 –nameserver=10.50.1.13,10.50.1.15 –hostname=${ESXHOST}
   
_PRE02

# Opslaan variabelen in een script zodat deze later gebruikt kunnen worden in hte POST gedeelte, anders verlies je deze
/bin/cat > /saved_variables <<_PRE03

    ESXHOST=${ESXHOST}
    IP=${ESXIP}
    VMIP=${VMIP}

_PRE03

############################################################################
# POST FASE – onderstaand gedeelte wordt uitgevoerd NA de Kickstart Commands
############################################################################

# POST NO-CHROOT sectie: nodig om files te kunnen kopieren tussen de twee werelden (tijdelijke VM en het definitieve LINUX filesysteem)
%post –interpreter=bash –nochroot

# Kopieeren van op tijdelijke VM opgeslagen script met variabelen naar het definitieve filesysteem
# Script saved_variables bevat eerder verzamelde variabele die na de reboot verloren gaan, maar die willen we nog gebruiken (VMotion IP adres)
cp /saved_variables /mnt/sysimage/root/saved_variables

# NORMALE POST sectie vanuit / van filesysteem ESX Service Console
%post –interpreter=bash

# inlezen opgeslagen variabelen in saved_variables bestand
. /root/saved_variables

# start cat commando met gebruik van \ om zo eenvoudig de niet gewenste interpretatie van special characters te voorkomen
/bin/cat > /root/esx_config.sh <<_POST01
    #!/bin/bash
    # v0.31 FTP
    # inlezen opgeslagen variabelen in saved_variables bestand
    . /root/saved_variables

    ####################################################
    #Wait until host service is ready
    ####################################################
    echo Wachten tot VMware hostservice draait..
    sleep 20
    while ! vmware-vim-cmd /hostsvc/runtimeinfo > /dev/null 2>$1; do
    sleep 20
    done

    #################
    # toevoegen users
    #################
    echo toevoegen user vmadmin..
    /usr/sbin/useradd -p eF2VP8ZAd0quc -c "vmadmin" vmadmin -G root

    ############################################################################
    # Configure Service Console Memory to 800MB and reboot after script finishes
    ############################################################################
    echo Aanpassen geheugen Service Console naar 800MB..
    /usr/bin/vmware-vim-cmd /hostsvc/memoryinfo 838860800
    /usr/sbin/esxcfg-boot -b
    /usr/sbin/esxcfg-boot -t

    #######################################
    # DANGEROUS Allow ROOT access using SSH
    #######################################
    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
    sed -e 's/PermitRootLogin no/PermitRootLogin yes/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.new
    mv -f /etc/ssh/sshd_config.new /etc/ssh/sshd_config
       
    #######
    # NTP
    #######
    esxcfg-firewall -e ntpClient
    cp /etc/ntp.conf /etc/ntp.conf.orig
    echo restrict default kod nomodify notrap noquerynopeer > /etc/ntp.conf
    echo restrict 127.0.0.1 >> /etc/ntp.conf
    echo server 10.50.1.9 >> /etc/ntp.conf
    echo driftfile /var/lib/ntp/drift >> /etc/ntp.conf
    /sbin/chkconfig –level 345 ntpd on
    /etc/init.d/ntpd start

    #######################
    # Installeer HP Tools
    #######################
    echo Downloaden en installeren HP management software..
    mkdir -p /root/HP
   
    #Download hpmgmt tar file
    #esxcfg-firewall –allowOutgoing
    #wp-download http://10.120.37.29/hpmgmt-8.5.1-vmware4x.tgz /root/HP/.
    #wp-download http://10.120.37.29/hpmgmt.conf /root/HP/.
    #esxcfg-firewall –blockOutgoing
    esxcfg-firewall -e ftpClient
    lwp-download ftp://10.120.37.29/hpmgmt-8.5.1-vmware4x.tgz /root/HP/.
    lwp-download ftp://10.120.37.29/hpmgmt.conf /root/HP/.
    esxcfg-firewall -d ftpClient

    cd /root/HP
    tar xzf hpmgmt-8.5.1-vmware4x.tgz
    cd hpmgmt/851
    ./install851vibs.sh –silent –inputfile /root/HP/hpmgmt.conf

    cd /root
    rm -Rf HP

    #########
    # vRanger
    #########
    echo "Enabling SSH client voor vRanger"
    esxcfg-firewall -e sshClient

    # toevoegen portgroup VMotion met vlan 40
    echo Toevoegen portgroup VMotion met vlan 40
    /usr/sbin/esxcfg-vswitch –add-pg=VMotion vSwitch0
    # toevoegen VLAN aan VMotion netwerk
    echo Toevoegen VLAN aan VMotion netwerk
    /usr/sbin/esxcfg-vswitch –pg=VMotion –vlan=40 vSwitch0
    # toevoegen IP adres VMotion netwerk
    echo Toevoegen IP adres VMotion netwerk
    /usr/sbin/esxcfg-vmknic –add –ip ${VMIP} –netmask 255.255.255.0 –portgroup VMotion
    # refresh network settings voor het aanzetten van vmotion
    echo Refresh network settings voor het aanzetten van vmotion
    /usr/bin/vmware-vim-cmd internalsvc/refresh_network
    sleep 5
    # enable vmotion op portgroup VMotion (escape de special characters omdat deze pas later gebruikt moeten worden) – let op gebruikte escape commando voor $ teken
    echo Enable vmotion op portgroup VMotion
    VMK=\$(esxcfg-vmknic -l |grep VMotion |awk '{print \$1}')
    /usr/bin/vmware-vim-cmd hostsvc/vmotion/vnic_set \$VMK
    # verwijderen default aangemaakte VM Network portgroup op switch vSwitch0
    echo Verwijderen default aangemaakte VM Network portgroup op switch vSwitch0
    /usr/sbin/esxcfg-vswitch –del-pg "VM Network" vSwitch0
    # refresh network settings
    echo Refresh network settings
    /usr/bin/vmware-vim-cmd internalsvc/refresh_network

    ########
    # reboot
    ########
    echo Ready…!
    echo Maak na de reboot de server lid van vCenter en gebruik Host Profiles om de configuratie af te ronden.
    sleep 15
    echo Rebooting..
    shutdown -r 0
   
    # END
_POST01

cat >> /etc/ssh/ssh_banner <<\_POST02

** PROPRIETARY INFORMATION *****************************************************

All content of this system and its associated sub-systems are PROPRIETARY
INFORMATION and remain the sole and exclusive property of
http://www.roderick-ict.nl.
This system may be accessed and used by authorized personnel only.
Authorized users may only perform authorized activities and may not exceed
the limits of such authorization. Disclosure of information found in this
system for any unauthorized use is *STRICTLY PROHIBITED*. All activities on
this system are subject to monitoring. Intentional misuse of this system
can result in disciplinary action or criminal prosecution.

********************************************************************************

_POST02

# aanpassen config sshd, actief na herstart sshd of reboot server
echo Banner /etc/ssh/ssh_banner >> /etc/ssh/sshd_config

######################################################################
# configureren rc.local voor eenmalig uitvoering scripts NA de 1e boot
######################################################################

# backup originele rc.local maken
cp /etc/rc.d/rc.local /etc/rc.d/rc.local.backup
# test:
cp /etc/rc.d/rc.local /etc/rc.d/rc.local.backup2

# executable rechten geven aan het  script
chmod +x /root/esx_config.sh

#info toevoegen aan rc.local
cat >> /etc/rc.d/rc.local <<_POST03
    # eenmalig uitvoeren  scripts
    echo —- UITVOEREN SCRIPT /root/esx_config.sh
    /root/esx_config.sh
    # Terugplaatsen rc.local.backup naar rc.local (restoren van origineel)
    # waardoor eenmalige uitvoer  script is gegarandeerd
    cp /etc/rc.d/rc.local /root/rc.local
    mv -f /etc/rc.d/rc.local.backup /etc/rc.d/rc.local

_POST03
 

ISOLUNUX.CFG

default skip-install
gfxboot bootlogo
prompt 1
#menu title ESX build 260247
timeout 300

LABEL skip-install
  menu default
  menu label ^Boot from first hard disk
  localboot 0x80

LABEL roderick-ict.nl-iso
  menu label JBZ Install from ISO – Druk op F2 en voer gegevens in
  kernel vmlinuz
  append initrd=initrd.img debugLogToSerial=1 mem=512M ks=usb ESXHOST=hostname ESXIP=ipaddress VMIP=vmotionip quiet
 
LABEL roderick-ict.nl-ftp
  menu label JBZ Install from FTP -Druk op F2 en voer gegevens in
  kernel vmlinuz
  append initrd=initrd.img debugLogToSerial=1 mem=512M ks=ftp://10.1.7.29/esx/4.1/ks.cfg vlanid=1 ESXHOST=ESXxx ESXIP=10.1.5.xx VMIP=192.168.1.xx quiet
 
LABEL esx
  menu label Install ESX in graphical mode
  kernel vmlinuz
  append initrd=initrd.img debugLogToSerial=1 vmkConsole=false mem=512M quiet

LABEL esx-text
  menu label Install ESX in text mode
  kernel vmlinuz
  append initrd=initrd.img debugLogToSerial=1 mem=512M text quiet

LABEL usb-ks
  menu label ESX Scripted Install using USB ks.cfg
  kernel vmlinuz
  append initrd=initrd.img debugLogToSerial=1 mem=512M ks=usb quiet
 

Roderick Derks

Liefhebber van fietsen, van het oplossen van IT puzzels, en van het delen van informatie om anderen te helpen.

All stories by:Roderick Derks

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

    Your Name (required)

    Your Email (required)

    Subject

    Your Message

      Your Name (required)

      Your Email (required)

      Subject

      Your Message