Citrix Hypervisor – Unattended Installation with Hotfixes and NVIDIA GRID Driver

I wanted to write about automating a Citrix Hypervisor aka XenServer installation for a long time but never had the time to put all the information together. If you are looking for a guide how to silent install a XenServer with the latest updates and NVIDIA vGPU driver you came to the right place. This deployment is only working with XenServer 7.1 and later. Citrix changed the hotfix format from ‘.xsupdate’ to ‘.ISO’. If there should be any reason for deploying XenServer 7.0 (EOL – May 2021) feel free to edit the provided bash script.

Setup the DHCP Server
Prepare the FTP Server
Import Citrix Hypervisor Sources
Build the Answerfile
Post Script & First Boot Script
PXELinux and TFTP Server
Deployment Example
Nested Virtualization


Before installing and configuring the needed components we need to understand the procedure for an unattended installation.

  1. Server is powered on
  2. Server is getting an ip address from a DHCP server with PXE boot information
  3. PXELINUX is started and a boot menu is presented (TFTP)
  4. Citrix Hypervisor base installation is triggered with an answer configuration file (FTP)
  5. After the first boot of the server a post script action is triggered

This is a screenshot of the the PXELinux boot menu.

Now lets get started with setting up the deployment server. Im using a Windows Server 2019 machine in my environment but it could be any other Windows Server release. There is no need to join the machine to a domain it can be member of a local workgroup.  Its up to you.

Please download the following sources:

Setup the DHCP Server

The first thing we need to do is to install the DHCP server role and configure a scope for our deployment network. Im using the subnet  and the ip address of my deployment server is

Powershell Commands


Install-WindowsFeature -Name "DHCP" -IncludeManagementTools
Add-DhcpServerV4Scope -Name "Deployment" -StartRange $StartRange -EndRange $EndRange -SubnetMask $Subnet
Set-DhcpServerV4OptionValue -DnsDomain $DNSDomain -DnsServer $DNSServerIP -Router $Router
Set-DhcpServerv4OptionValue -OptionId 66 -Value "" -ComputerName $Env:COMPUTERNAME
Set-DhcpServerv4OptionValue -OptionId 67 -Value "pxelinux.0" -ComputerName $Env:COMPUTERNAME
Set-DhcpServerv4Scope -ScopeId $DHCPServerIP -LeaseDuration 1.00:00:00


Prepare the FTP Server

Now its time to install the WebServer and FTP feature which will provide the Citrix Hypervisor installation sources during the TFTP boot stage.

Install-WindowsFeature Web-FTP-Server -IncludeAllSubFeature
Install-WindowsFeature Web-Server -IncludeAllSubFeature  -IncludeManagementTools

Create the FTP directories in the filesystem.

$Root = "C:\FTP"
mkdir $Root
mkdir "$Root\xenserver"
mkdir "$Root\xenserver\7.1"
mkdir "$Root\xenserver\config"
mkdir "$Root\xenserver\files\7.1"
mkdir "$Root\xenserver\scripts"
icacls $Root /grant "Everyone:(OI)(CI)F"

Start the IIS Management Console and add a new FTP site.





Verify if the FTP server is working while accessing “ftp://localhost/xenserver” in Windows Explorer.


Import Citrix Hypervisor Sources

Mount the Citrix Hypervisor ISO and copy the files to “C:\FTP\xenserver\7.1”


Copy the needed hotfixes (.ISO) to “C:\FTP\xenserver\files\7.1\Hotfix”.


Copy the NVIDIA GRID driver to “C:\FTP\xenserver\files\7.1\GRID”


Build the Answerfile

Now it is time to create the XML answerfile file which is providing the install parameters  > “C:\FTP\xenserver\config\XEN-01.xml”


Post Script  & First Boot Script

You can see in the answerfile is a parameter called “<script stage>” which is providing a “” script which will be triggered after the succesfull base installation of the hypervisor. This script is calling the after the next reboot, where the automation magic is happening. Thanks to my colleague Michael Winkler who was working together with me on the script. We included the following features:

  • Set TimeZone
  • Download Hotfixes and NVIDIA GRID driver
  • Set Licence Server
  • Enable Multipathing
  • Install Hotfixes and NVIDIA GRID driver
  • Cleanup the system
  • Reboot



PXELinux and TFTP Server

Create the following folder structure

$Root = "C:\TFTP"
mkdir $Root
mkdir "$Root\pxelinux.cfg"
mkdir "$Root\xs7.1"

Extract the to C:\TFTP


Copy the needed boot files to the TFTP folder.

Copy-Item "C:\FTP\xenserver\7.1\install.img" "C:\TFTP\xs7.1"
Copy-Item "C:\FTP\xenserver\7.1\boot\vmlinuz" "C:\TFTP\xs7.1"
Copy-Item "C:\FTP\xenserver\7.1\boot\xen.gz" "C:\TFTP\xs7.1"
Copy-Item "C:\FTP\xenserver\7.1\boot\pxelinux\*.*" "C:\TFTP"

Create the boot menu config file “C:\TFTP\pxelinux.cfg\default” and edit the ftp url for the answerfile > ‘answerfile=’


Select “tftpd64.exe” for starting the TFTP server. Make sure “C:\TFTP” is selected as current directory and the “TFTP Server” service is activated under “Settings”.


Deployment Example

Server is booting into PXE.  I am choosing “Install Citrix XenServer 7.1 CU1”.


Unattended installation is starting with the answerfile “XEN-01.xml”


You can check the transfered files with Tftpd64. We can see that the “install.img” got transmited to our server.


After the succesfull base installation of the Citrix XenServer the “” will be executed and a final reboot will occure. You can check the log file “/var/log/xenautomation.log” for getting more information.



Lets add the fresh installed server to XenCenter and check if everything went well –> Licensed, Cumulative Updates got applied and the GRID driver is available 🙂




In an environment where you have to install many servers it is better to create a custom boot menu for each server. Otherwise you need to create an entry for every server which could end up with a list of 100 labels or more. Example:

  • Name of the boot menu file: 01-MACAddress –> “01-88-99-aa-bb-cc-dd”
  • Name of the answer file: 01-MACAddress.xml –> “01-88-99-aa-bb-cc-dd.xml”

During the boot phase PXELinux will first look for a file with is matching the server MAC address in the “pxelinux.cfg” directory. If the MAC address is not matching there will always be a fallback to the “default” file.

Nested Virtualization

If you want to play arround with the hypervisor deployment in a virtual environment you can go for a nested virtualization on VMware ESXi. It is easier to start with a virtual machine then deploying directly on bare-metal.

– Choose “CentOS 6 (64-bit) as Guest OS
– Active Hardware virtualization
– Change the SCSI Controller to “LSI Logic Parallel”



Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Blog at

Up ↑

%d bloggers like this: