Solaris DHCP and PXE Boot

Purpose of this document to provide overview how to setup DHCP server for your local area network of Solaris (or other UNIX) systems and Windows systems and enable Solaris clients to boot directly from the network using PXE.


Clients are to be installed via JumpStart and sysidcfg has interface=dhcp, for example:

name_service=DNS {
domain_name=<domain name>
name_server=<dns server ip address/es>

search=<search suffixes>
}
system_locale=en_US
timezone=CET
network_interface=PRIMARY {
dhcp
protocol_ipv6=no
}
security_policy=none
timeserver=<time server name>
root_password=<encrypted root password>
keyboard=workaround:Unknown
display=workaround:Unknown
pointer=workaround:Unknown
monitor=workaround:Unknown {
DisplayChksum=0x0
}

To setup Solaris DHCP client manually see these instructions. I never tried those instructions but they should work.

Even though I refer to Solaris 8 on x86 exclusively, these instructions should work with minor modifications also for Solaris 9 or Solaris 10 on any platform (inetboot.I86PC.Solaris_8-1 would become inetboot.I86PC.Solaris_9-1). Probably due to a bug(?) in Solaris 8 and 9 you cannot use the same server to boot both versions of clients.

Requirements and prerequisites

Solaris on both server and client side. They do not need to be same versions. If you encounter any problems with very old versions you should apply patches it or get newer version. Server is installed with SUNWCall cluster (...not very secure but I was too lazy to find out what minimal packages are required to run DHCP server, email me if you know).

Working network connection between clients and server. On server /etc/inet/netmasks properly setup and no firewall filter rules applied to the network interface which will be used for DHCP i.e. tested without any firewall software installed.

Logged in as root. Further in text <server macro> and `uname -n` are used—in reality they would be the same.

Part 1, configure DHCP daemon

Run /usr/sbin/dhcpconfig to configure DHCP server. Just answer the questions according to your wishes or start with parameters:

dhcpconfig -D -r SUNWbinfiles -p /var/dhcp -a 10.0.1.12 -d lan.ondruska.info -h dns -y lan.ondruska.info

Part 2, add Solaris DHCP extensions

You need these only if you want to boot Solaris using PXE and/or DHCP.

dhtadm -A -s SrootOpt -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,1,ASCII,1,0'
dhtadm -A -s SrootIP4 -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,2,IP,1,1'
dhtadm -A -s SrootNM -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,3,ASCII,1,0'
dhtadm -A -s SrootPTH -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,4,ASCII,1,0'
dhtadm -A -s SswapIP4 -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,5,IP,1,0'
dhtadm -A -s SswapPTH -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,6,ASCII,1,0'
dhtadm -A -s SbootFIL -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,7,ASCII,1,0'
dhtadm -A -s Stz -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,8,ASCII,1,0'
dhtadm -A -s SbootRS -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,9,NUMBER,2,1'
dhtadm -A -s SinstIP4 -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,10,IP,1,1'
dhtadm -A -s SinstNM -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,11,ASCII,1,0'
dhtadm -A -s SinstPTH -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,12,ASCII,1,0'
dhtadm -A -s SsysidCF -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,13,ASCII,1,0'
dhtadm -A -s SjumpsCF -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,14,ASCII,1,0'
dhtadm -A -s Sterm -d 'Vendor=SUNW.Ultra-1 SUNW.Ultra-30 SUNW.i86pc,15,ASCII,1,0'

And these are useful for Windows clients.

dhtadm -A -s ReleaseOnShutdown -d 'Vendor="MSFT 5.0" "MSFT 98" MSFT,2,OCTET,1,0'
dhtadm -A -s DisableNetBT -d 'Vendor="MSFT 5.0" "MSFT 98" MSFT,1,OCTET,1,0'
dhtadm -A -s ProxyAutodiscovery -d 'Vendor="MSFT 5.0" "MSFT 98" MSFT,252,ASCII,1,0'

Part 3, configure Jumpstart client

In boot server's Tools directory run:

./add_install_client -d SUNW.i86pc i86pc

This command is required to create mandatory files in /tftpboot. To remove these files later run ./rm_install_client SUNW.i86pc. xx:xx:xx:xx:xx:xx (or xxxxxxxxxxxx later in text) is the client's network card address.

There seems to be a bug in Solaris which prevents using the same boot server for different client versions. Both Solaris 8 and 9 clients request SUNW.i86pc boot file from the TFTP server even though DHCP specifies another boot file. SUNW.i86pc is different for each Solaris version.

Part 4, configure DHCP for network boot

To enable network boot you should provide the client with this information:

dhtadm -A -m 01xxxxxxxxxxxx -d \
':SinstNM="<js>":SinstIP4=<jip>:SinstPTH="/var/opt/jumpstart":
SrootNM="<bs>":SrootIP4=<bip>:SrootPTH="/var/opt/jumpstart/Solaris_8/Tools/Boot":
SjumpsCF="<bs>:/var/opt/jumpstart":SsysidCF="<bs>:/var/opt/jumpstart":'

xxxxxxxxxxxx is your network card address in with upper case letters without “:” separator, 
<bs> is your boot server name, 
<bip> is boot server IP address, 
<js> is your jumpstart server name, 
<jip> is jumpstart server IP address, 
jumpstart home is /var/opt/jumpstart and contains sysidcfg file.

More flexible solution is to create macro (below) and assign this macro to clients.

dhtadm -A -m soldhcpboot -d \
':SinstNM="<js>":SinstIP4=<jip>:SinstPTH="/var/opt/jumpstart":
SrootNM="<bs>":SrootIP4=<bip>:SrootPTH="/var/opt/jumpstart/Solaris_8/Tools/Boot":
SjumpsCF="<bs>\:/var/opt/jumpstart":SsysidCF="<bs>\:/var/opt/jumpstart":'

Part 5, configure PXE boot

This is the required only for PXE boot:

dhtadm -A -m PXEClient:Arch:00000:UNDI:002001 -d \
':BootFile="nbp.SUNW.i86pc":BootSrvA=<server>:'

<server> is your boot server's ip address and it is the same server which is running in.tftpd and contains setup files (see part 3).

Part 6, assign permanent address to client

Assign fixed IP address to existing DHCP client:

pntadm -M <client name> -f PERMANENT -i 01xxxxxxxxxxxx -m `uname -n` <network>

Or create new client with fixed IP address:

pntadm -A <client name> -f PERMANENT -i 01xxxxxxxxxxxx -m `uname -n` <network>

Part 7, more (useful) settings

Return hostnames to clients:

dhtadm -M -m `uname -n` -e 'Hostname=_NULL_VALUE_'

DNS configuration:

dhtadm -M -m `uname -n` -e 'DNSserv=<dns server IP address>'
dhtadm -M -m `uname -n` -e 'DNSdmain=<dns domain>'

NetBIOS settings for Windows:

dhtadm -M -m `uname -n` -e 'NetBNms=<netbios name server IP addresses>'
dhtadm -M -m `uname -n` -e 'NetBNdT=<netbios node type>'
dhtadm -M -m `uname -n` -e 'NetBScop="<netbios scope id>"'

Few more setting for Windows clients:

dhtadm -M -m `uname -n` -e 'ProxyAutodiscovery="http://webserver/proxy.pac"'*
dhtadm -M -m `uname -n` -e 'ReleaseOnShutdown=1'
dhtadm -M -m `uname -n` -e 'DisableNetBT=2'

If you have multiple network interfaces in DHCP server and would like to use only some of them (iprb0 for example):

echo "INTERFACES=iprb0" >> /etc/inet/dhcpsvc.conf

You can have automatic DNS updates for your clients (requires changes to DNS server setup):

echo "HOSTS_RESOURCE=dns" >> /etc/inet/dhcpsvc.conf
echo "HOSTS_DOMAIN=<yourdomainname>" >> /etc/inet/dhcpsvc.conf

DHCP server should ping IP addresses before assigning them to clients:

echo "ICMP_VERIFY=TRUE" >> /etc/inet/dhcpsvc.conf

Scan dhcptab every 15 minutes:

echo "RESCAN_INTERVAL=15" >> /etc/inet/dhcpsvc.conf

When updating DNS use default timeout:

echo "UPDATE_TIMEOUT" >> /etc/inet/dhcpsvc.conf

Enable support for BOOTP clients:

echo "BOOTP_COMPAT=automatic" >> /etc/inet/dhcpsvc.conf

Configure additional networks for DHCP, check for valid /etc/inet/netmasks, if this is not on your local network, agent should be setup on the remote network:

pntadm -C <network>

Part 8, restart DHCP server

Restart DHCP server:

pkill -HUP in.dhcpd

Troubleshooting, comments

add_install_client should enable tftpd in inetd.conf. Check that tftp is enabled in inetd.conf and restart inetd.

Your client must be resolved by name services. For example put client hostname into /etc/hosts or check that DNS resolves the client.

Make sure your client's network card and network switch are properly set up in your network. There could be problems with Fast Ethernet autonegotiation.

If something does not work get latest DHCP server, DHCP client, and kernel related patches.

Resources

Solaris DHCP Administration Guide

Thanks

I would like to thank to Juergen Keil [jk at tools.de] and /usr/sbin/snoop for help with PXE boot.

Comments

Peter Ondruška
Peter Ondruška
Information Technology at Česká spořitelna
Prague
Article rating:
Your rating:

Reviews

    Knol translations

    Activity for this knol

    This week:

    32pageviews

    Totals:

    735pageviews