So today we will deal with how to get the scripts into the an ESXi installation. On Part 3 we dealt with what the scripts were and how to to use them
So how do we get the script to run on startup?
The two things that need to be done are:
Add the script to
# TCP client example import time import socket time.sleep(20) s = socket.socket() s.connect(("192.168.113.1",3333)) s.send("14332354169934n2nduN") s.close()
Add a Startup script to **/etc/rc.local.d/S99unattend
#!/bin/ash export PYTHONHOME=/ export PYTHONPATH=/lib/python2.5-visor:/lib/python2.5-visor/lib-dynload:/lib/pyt export PATH python /sbin/client.py
The reason for all the exports are since the script is not really running under any specific user it will not load the path and the Python variables, hence the explicit declaration.
So in order for us to add this to an ESXi ISO we need to do the following:
/etc/rc.local.d/S99unattendto the oem.tgz file
/sbin/client.pyto the oem.tgz file
Now why the oem.tgz. The oem.tgz file is a file that will be parsed for installation which allows for OEM's to add bits and pieces into the ESXi install if needed.
In a default ESXi ISO - these are the contents of the image:
What we will need to do is a bit of manipulation to add some files to the oem.tgz and also into the image.tgz. Why both files you may ask - in order to make the changes to the installation persistent they have also be updated into the install.tgz file.
The most comprehensive resource I have found on customizing the oem.tgz file is on
Dave Mischenko's site.
There is a project on https://code.google.com/p/mkesxiaio/ where the process is automated - I cannot say that I have tried this personally - but it is on my list of to-do things.
We are going to this manually to explain the process a bit more so you can understand it a bit better and change it to your needs if you would like
Tools for the job that are needed:
**pscp VMware-VMvisor-Installer-4.0.0.Update01-208167.x86_64.iso** [[email protected]:/myfolder](mailto:[email protected]:/myfolder)
Create directories for the process
mkdir iso iso-mount oem image dd-image
Mount the CD
mount -o loop -t iso9660 VMware-VMvisor-Installer-4.0.0.Update01-208167.x86_64.iso iso-mount
Since this is read only copy files to iso directory
cp -r iso-mount/* iso/
Unmount and remove the folder
umount iso-mount/ rm -rf iso-mount/
Next we create the oem.tgz file
cd oem/ mkdir -p sbin etc/rc.local.d/
And now we create the script files.
cat >> sbin/client.py <<EOF # TCP client example import time import socket time.sleep(20) s = socket.socket() s.connect(("192.168.113.1",3333)) s.send("14332354169934n2nduN") s.close() EOF
And the Startup Script
cat >> etc/rc.local.d/S99unattend <<EOF #!/bin/ash export PYTHONHOME=/ export PYTHONPATH=/lib/python2.5-visor:/lib/python2.5-visor/lib-dynload:/lib/python2.5-visor/site-packages export PATH python /sbin/client.py EOF
Next we add the execute permissions
chmod -R 755 etc/ sbin/
Tar the file back up
tar czvf ../oem.tgz etc/ sbin/
The oem.tgz needs to be copied to two different locations
Copy to the first location
cd .. cp oem.tgz iso/
Extract the installer image from the ISO
tar zxvf iso/image.tgz -C image
We now extract the disk file
cd image/usr/lib/vmware/installer/ bunzip2 VMware-VMvisor-big-208167-x86_64.dd.bz2
Mount the image
`mount -o loop,offset=$((512*8224)) VMware-VMvisor-big-208167-x86_64.dd ../../../../../dd-image/```
2nd location – copy the oem.tgz file into the dd-image
cp ../../../../../oem.tgz ../../../../../dd-image/
Unmount the image
Compress the file
Go back to the install directory
Re-create the install.tgz file
tar zvcf ../iso/image.tgz usr/ cd ../iso
mkisofs -o ../My_VMware-VMvisor-Installer-4.0.0.Update01-208167.x86_64.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table . cd ..
If you would there after you can remove everything
rm -rf dd-image/ image/ iso/ oem\
And as you can there is my newly created ESXi iso with my customizations inside
I have created a file with all the commands that you can copy and paste into a shell session for your convenience.
The whole process took less than 8 minutes.
Next up will be how deploy this to an through PXE to a server.