postheadericon PXE Install für VMware ESXi (Update)

Ein Kommentar zu dem Artikel PXE Install für VMware ESXi brachte die Frage auf, ob es denn auch möglich sei, eine unattended PXE Installation für ESXi durchzuführen.

Auf den ersten Blick scheint das von VMware so nicht vorgesehen zu sein. Dankenswerterweise jedoch ist die komplette Installationsroutine in Python geschrieben und somit einfach zu manipulieren.

In unserer pxelinux Konfiguration übergeben wir dem Kernel bereits zusätzliche Argumente

APPEND esx4iu1/vmkboot.gz --- esx4iu1/vmkernel.gz --- esx4iu1/sys.vgz --- esx4iu1/cim.vgz --- esx4iu1/ienviron.tgz --- esx4iu1/image.tgz --- esx4iu1/install.tgz

Interessant in unserem Fall sind ienviron.tgz und install.tgzienviron.tgz ist der generische Python Installer, install.tgz sind die – für eine ESXi notwendigen – Installationsschritte. Der Lösungsansatz ist nun, die Tastatureingabe für jeden Installationsschritt einfach fest in die Installationsdatei einzutragen und somit die Interaktion zu umgehen.

Achtung! Das ist keine offizielle Herangehensweise und ich übernehme keine Verantwortung für eventuelle Schäden!

# cd /tftpboot/esx4iu1
# cp ienviron.tgz ienviron.tgz.orig
# mkdir tmp ; cd tmp ; tar xzf ../ienviron.tgz
# vi usr/lib/vmware/installer/Core/TUI/Display.py

In der Datei Display.py müssen wir die Funktion Run suchen. Diese ist dafür zuständig, den einzelnen Dialogen (Welcome, EULA, usw.) die Benutzereingabe zu übergeben. Hier tauschen wir einfach die “eingegebenen” Tasten durch “Enter” und “F11″ aus. Achtung: In Python ist die Einrückung wichtig, Tabs mag der Interpreter gar nicht.

def Run(self):
  while not self.currentDialog.terminate:
  self.Draw()
  # keys = self.ui.get_input()
  keys = [ 'enter', 'f11' ]
  for k in keys:
    # pass keystrokes to the current widget
    k = self.currentDialog.keypress(self.size, k)

Anschließend packen wir die von uns geänderten Sourcen wieder zu einem Tarball.

# tar czf ../ienviron.tgz *

Das wars auch schon, der Installer wird nun nicht mehr nachfragen und durch die einzelnen Dialoge springen.

Ich bin mir sicher, dass es hier noch wesentlich elegantere Möglichkeiten gibt, hat man die Zeit, könnte man das ganze Installationsframework patchen, um eventuell eine Konfiguration ala ks.cfg einzulesen.

Viel Spaß beim Nachbauen!

Kommentieren