While HP's SmartStart CD provides convenient server provisioning, enterprise environments often require more automated solutions. The main limitations of SmartStart include:
- Manual intervention required for each server deployment
- Lack of integration with existing PXE infrastructure
- Minimal customization options for large-scale deployments
To implement PXE boot on HP Proliant servers:
# Sample DHCP configuration for PXE boot (ISC DHCP Server)
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
next-server 192.168.1.10; # PXE server IP
filename "pxelinux.0";
}
For RAID setup, you have two options:
Option 1: Use ORCA (Option ROM Configuration for Arrays) by pressing F8 during boot
Option 2: Use HP Scripting Toolkit commands:
# Example array configuration using HPACUCLI
hpacucli ctrl all show config
hpacucli ctrl slot=0 create type=ld drives=1I:1:3,1I:1:4 raid=1
To make RAID volumes visible during installation:
dism /image:C:\winpe_x86\mount /add-driver /driver:"C:\drivers\hp\raid\driver.inf"
Create a post-install script for HP Proliant Support Pack:
@echo off
\\fileserver\hptools\spp\hpqlocfg.exe -s -f config.xml
start /wait \\fileserver\hptools\spp\setup.exe /s
Sample unattend.xml for Server 2008 R2:
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-Setup">
<DiskConfiguration>
<Disk wcm:action="add">
<CreatePartitions>
<CreatePartition wcm:action="add">
<Order>1</Order>
<Size>100</Size>
<Type>Primary</Type>
</CreatePartition>
</CreatePartitions>
</Disk>
</DiskConfiguration>
</component>
</settings>
</unattend>
Organize drivers for easy integration:
/Drivers /Network /HP_NC382i /Win2008 /Win2012 /Storage /SmartArray_P410 /Win2008 /Win2012
When deploying Windows Server on HP Proliant hardware through PXE boot, we face three critical technical hurdles:
- RAID configuration without HP Array Configuration Utility (ACU)
- Driver integration for hardware detection during WinPE phase
- Post-installation management tool deployment
The Option ROM Configuration for Arrays (ORCA) utility accessible via F8 during boot provides basic RAID setup capabilities. While less feature-rich than ACU, it handles fundamental configurations:
# Sample ORCA configuration sequence 1. Power on server and press F8 when prompted 2. Navigate to "Create Array" option 3. Select disks and choose RAID level (1,5,10 etc.) 4. Set stripe size (default 256KB usually optimal) 5. Confirm and initialize array
For WinPE to recognize RAID volumes, we must inject the HP Smart Array driver into the boot image. Here's how to modify a WinPE WIM for HP Proliant:
dism /mount-wim /wimfile:boot.wim /index:1 /mountdir:C:\mount dism /image:C:\mount /add-driver /driver:C:\drivers\hp\SmartArray\x64\hpvsa.inf dism /unmount-wim /mountdir:C:\mount /commit
Create an unattend.xml file that includes driver paths and post-install commands:
D:\Drivers\HP 1 powershell -ExecutionPolicy Bypass -Command "Invoke-WebRequest -Uri http://repo.example.com/hptools.exe -OutFile C:\hptools.exe"
For deploying HP management tools, create a PowerShell script to run after first login:
# Install HP Proliant Support Pack components $tools = @( "HP.SystemManagement.Homepage", "HP.SystemManagement.SNMPAgents", "HP.SystemManagement.ArrayConfiguration" ) foreach ($tool in $tools) { Start-Process -FilePath "msiexec.exe" -ArgumentList "/i $tool.msi /qn /norestart" -Wait } # Configure SNMP community strings Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\services\SNMP\Parameters\ValidCommunities" -Name "public" -Value 4 -Type DWord
Create verification scripts to ensure all components installed correctly:
# Check RAID status $raidStatus = Get-WmiObject -Namespace root\hpq -Class HP_LogicalDisk | Select-Object Status if ($raidStatus -ne "OK") { Write-EventLog -LogName Application -Source "Deployment" -EntryType Error -EventId 1001 -Message "RAID array not healthy" exit 1 } # Verify HP tools installation $requiredServices = @("hpasmlited", "cpqriched") foreach ($service in $requiredServices) { if ((Get-Service -Name $service -ErrorAction SilentlyContinue).Status -ne "Running") { Start-Service $service } }