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 samp |
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