Solaris preboot execution environment (PXE)

As long as the hardware supports PXE (Preboot Execution Environment) a server can be booted and installed from the network. For standard Sparc servers the normal method of setting up a jumpstart is the best forward, but for X86 clients PXE is the way to boot Solaris.

The steps in oder to get a client to boot are as follows:

  • Setup the TFTP server
  • Setup the DHCP server

Configure the TFTP server

The TFTP server is controlled by SMF, hopefully it should be up and running

# svcs tftp/udp6
STATE STIME FMRI
online 16:57:20 svc:/network/tftp/udp6:default
# inetadm -l tftp/udp6
SCOPE NAME=VALUE
name="tftp"
endpoint_type="dgram"
proto="udp6"
isrpc=FALSE
wait=TRUE
exec="/usr/sbin/in.tftpd -s /tftpboot"
user="root"
default bind_addr=""
default bind_fail_max=-1
default bind_fail_interval=-1
default max_con_rate=-1
default max_copies=-1
default con_rate_offline=-1
default failrate_cnt=40
default failrate_interval=60
default inherit_env=TRUE
default tcp_trace=FALSE
default tcp_wrappers=FALSE

If the service is not running then carry out the following, check that the inetd.conf file has the below line

# TFTPD - tftp server (primarily used for booting)
tftp dgram udp6 wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot

The inetd.conf configuration can be converted into service manifests and then imported into the SMF repository.

# inetconv
tftp -> /var/svc/manifest/network/tftp-udp6.xml
Importing tftp-udp6.xml.....Done

Or you can manually import into the SMF repository

# svccfg -v import /var/svc/manifest/network/tftp-udp6.xml
svccfg: Taking "previous" snapshot for svc:/network/tftp/udp6:default.
svccfg: Upgrading properties of svc:/network/tftp/udp6 according to instance "default".
svccfg: Taking "last-import" snapshot for svc:/network/tftp/udp6:default.
svccfg: Refreshed svc:/network/tftp/udp6:default.
svccfg: Successful import.

A minmum installation of the tftp boot area is as follows

/tftpboot/boot/grub/pxegrub GRand Unified Bootloader (GRUB) program image for PXE use
/tftpboot/boot/multiboot Kernel ELF executable which is passed control too after GRUB
/tftpboot/boot/x86.miniroot Module, provides minimal functionality of solaris OS.

The GRUB menu makes life easy so that that the GRUB commands do not have to be entered manually, the be low GRUB menu (menu.lst.pxe can be called anything) has two menu items one for single user boot and one for an Solaris install

default 0
timeout -1

title Solaris Single-user Session
kernel /solaris/boot/multiboot kernel/unix -s
module /solaris/boot/x86.miniroot

title Solaris Install Console
kernel /solaris/boot/multiboot kernel/unix -v -B console=ttya,install_media=192.168.0.56:/export/install/i86pc/os/nv/40
module /solaris/boot/x86.miniroot

title Solaris Install No Console
kernel /solaris/boot/multiboot kernel/unix -v install_media=192.168.0.56:/export/install/i86pc/os/nv/40
module /solaris/boot/x86.miniroot

Configure the DHCP Server

Confirm that the DHCP server is not running

# svcs dhcp-server
STATE STIME FMRI
offline 16:35:49 svc:/network/dhcp-server:default

Unconfigure any old DHCP servers

# dhcpconfig -U
-U unconfigure the DHCP service

Remove any unwanted files that have been left around in the /var/dhcp directory

rm /var/dhcp/SUNW*
rm /var/dhcp/.SUNW*

To initialise the DHCP server and create a number of default configuration databases run the following, here we are going to use the /var/dhcp directory

dhcpconfig -D -r SUNWfiles -p /var/dhcp
-D Configure the DHCP server
-r Specifys the data stores
-p Path

Setup the DHCP network

dhcpconfig -N 192.168.0.0 -m 255.255.255.0 -t 192.168.0.10
-N Confiure network for DHCP
-m subnet mask for network
-t router addresses for network

Define a custom symbol called "GRUBMenu" for the DHCP option #150

dhtadm -A -s GrubMenu -d Site,150,ASCII,1,0
-A Add a custom symbol/Macro
-s symbol
site this is site specific
150 the DHCP option code
ASCII the value is a text string
1 granularity
0 maximum
 Â

Define the macro with boot options

dhtadm -A -m netboot -d :BootSrvA=192.168.0.56:BootFile="solaris/boot/grub/pxegrub":GrubMenu="menu.lst.pxe":
-A Add symbol or Macro
-m Macro name
-d definition

Add the client definition information to the network table

pntadm -A 192.168.0.30 -i 000C29567867 -m netboot 192.168.0.0
pntadm -A 192.168.0.35 -i 000C2970965B -m netboot 192.168.0.0
-A Add a client with hostname or IP address
-i Client identifier (normally MAC address)
-m Macro to be used

Start the DHCP server

dhcpconfig -Se
-S Control the DHCP service
-e enable and strta the DHCP server

Not to sure why but on a number of occations i have had to restart the DHCP server

svcadm restart dhcp-server