After solving the cache issue on the MSI board it was time to install the OS for real. I had planned to do the install via the network, for two reasons.
- To avoid having to burn a DVD for this
- To find out how to do it
Installing Solaris via the network has been supported for a very long time, and Solaris being what it is the process has not changed very much. That means that there are some quirks in it.
Because this was the first Solaris installation in my network some non-Solaris machine had to take over the job of providing the various services needed for an installation. The job was delegated to my notebook running Linux.
The following services are needed to install Solaris over the network:
* A DHCP server
* A TFTP server
* An NFS server
In addition to that some software:
* A Solaris medium (obviously)
* A bootloader (I'll use SYSLINUX, at least version 3.73 required)
First and foremost, though, the network card in the system that is to be the target of the installation needs to support PXE. PXE is a method that defines a way for a network card BIOS to obtain an IP address via DHCP and load a piece of software from the network, which is then executed by the system. In addition PXE provides a handful of library functions that give the just loaded software a way to talk to the network itself (to load even more software, for example).
Most modern network cards and BIOSes support PXE and booting from the network. If this is not the case the nice people over at etherboot.org have a large library of network card specific code that can be booted via a floppy disk or a bootable CDROM which will provide the network card with the appropriate capabilities.
A dedicated network will be used for the installation, namely 10.200.200.0/24. The install server has the IP 10.200.200.1.
h3. Preparing the tftpboot directory
The TFTP server will serve it's files from the /tftpboot
directory. The following structure is expected there:
/tftpboot/
|-- mboot.c32
|-- pxelinux.0
|-- pxelinux.cfg
| `-- default
`-- solaris
|-- platform
| `-- i86pc
| `-- kernel
| `-- unix
`-- x86.miniroot
The mboot.c32
and pxelinux.0
files come from the SYSLINUX bootloader package. pxelinux.cfg/default
is the configuration file for the PXE bootloader. It is loaded and read when pxelinux.0
runs. It has the following content:
DEFAULT jumpstart
LABEL jumpstart
KERNEL mboot.c32
APPEND -solaris solaris/platform/i86pc/kernel/unix -v -m verbose -B install_media=10.200.200.1:/jumpstart --- solaris/x86.miniroot
The parameters describe the path of the kernel image under the TFTP server root (solaris/platform/i86pc/kernel/unix
), request a verbose startup (-v -m verbose
), select the install method, server and path (-B install_media=10.200.200.1:/jumpstart
) and the describe the path to the miniroot which contains the installer (solaris/x86.miniroot
).
The two files in the solaris
directory are found on the Solaris install media under the /boot
directory in a similar directory structure. It is important that this structure is retained (even if it seems a bit pointless).
h3. Preparing the DHCP server
There is not much to this, really, all that is required (besides the obvious IP address and netmask) is the IP address of the TFTP server and the filename of the SYSLINUX bootloader in the TFTP directory structure. The complete config file (for the ISC DHCP server) looks like this:
subnet 10.200.200.0 netmask 255.255.255.0 {
range 10.200.200.128 10.200.200.200;
option routers 10.200.200.1;
option subnet-mask 255.255.255.0;
next-server 10.200.200.1;
filename "/pxelinux.0";
}
h3. Preparing the NFS server
There are several ways to present the contents of the install media via NFS, but for this install the method that worked best for me was to simply mount the ISO into a directory and share that via NFS.
# mkdir /jumpstart
# mount -o ro,loop /tmp/nv105.iso /jumpstart
The entry in /etc/exports
looks like this:
/jumpstart *(ro,no_subtree_check,sec=sys)
h3. Putting it all together
That should be it, basically. If the machine is turned on and set to boot from the network the following chain of events will take place, provided all goes well:
- The PXE BIOS sends DHCP requests
- The DHCP server answers the requests, assigning an IP address and the TFTP server information
- The PXE BIOS loads
/pxelinux.0
from the TFTP server and executes it
/pxelinux.0
loads /pxelinux.cfg/default
from the TFTP server and interpets it as a config file
/pxelinux.0
loads the Solaris kernel and miniroot from the TFTP server and runs the kernel
- The Solaris kernel boots, mounts the miniroot and starts the installer and re-requests the DHCP address
- The installer mounts the NFS directory