Solaris network install using Linux DHCP server

This weekend’s tech project was getting an old Sun Ultra 5 up and running with a new version of Solaris, in this case Solaris Nevada b33, so I can play with toys like opensolaris, dtrace, zfs,etc.

This particular machine doesn’t have a cdrom, so in order to get things working I had to do a network install. Or I could have installed a cdrom, since it’s an IDE based machine, but that wouldn’t have been nearly as much fun.

I hosted the install on a Netra T1, so most of the installation instructions were just cut-and-paste from the Sun documentation. Solaris 10 Installation Guide: Network-Based Installations

(Note: The T1 will eventually be providing network services, and live in the basement. It’s a little loud sitting on my desk. That’s why it’s not going to be the Sparc play machine.)

The complicated part was the DHCP server. I already have one on my network, on a Debian Linux box, and didn’t want to try having two of them. That would probably be bad.

In order to supply all of the information for the install, I needed to add a new name space to the dhcp.conf, a class and subclass for the particular hardware type, and some information specific to the machine.

Here’s the relevant pieces from dhcpd.conf:
First the SUNW option namespace, used by the Sun net installation:

option space SUNW;
option SUNW.SrootOpt code 1 = text;
option SUNW.SrootIP4 code 2 = ip-address;
option SUNW.SrootNM code 3 = text;
option SUNW.SrootPTH code 4 = text;
option SUNW.SswapIP4 code 5 = ip-address;
option SUNW.SswapPTH code 6 = text;
option SUNW.SbootFIL code 7 = text;
option SUNW.Stz code 8 = text;
option SUNW.SbootRS code 9 = integer 16;
option SUNW.SinstIP4 code 10 = ip-address;
option SUNW.SinstNM code 11 = text;
option SUNW.SinstPTH code 12 = text;
option SUNW.SsysidCF code 13 = text;
option SUNW.SjumpsCF code 14 = text;
option SUNW.Sterm code 15 = text;
option SUNW.SbootURI code 16 = text;
option SUNW.SHHTPProxy code 17 = text;

Then the class and subclass based on the vendor-class-identifier, which is sent out by the Ultra 5 when it’s trying to DHCP an address.

class "vendor-classes" {
match option vendor-class-identifier;

subclass "vendor-classes" "SUNW.Ultra-5_10" {
vendor-option-space SUNW;
option SUNW.SbootURI = "tftp:// ";
option SUNW.SinstIP4;
option SUNW.SinstNM = "heimdall";
option SUNW.SinstPTH = "/export/solaris11/install";
option SUNW.SrootIP4;
option SUNW.SrootNM = "heimdall";
option SUNW.SrootPTH = "/export/solaris11/install/Solaris_11/Tools/Boot" ;

Then, the particular information for the machine I’m trying to boot and install from the net:

host chimera {
hardware ethernet 08:00:20:a2:22:66;
option domain-name "";
option host-name "chimera";

The machine I’m installing onto is chimera, which has the MAC address 08:00:20:a2:22:66. It will get the address The install and boot server are both heimdall, which had IP addresses respectively. The ‘next-server’ tells chimera to netboot from heimdall. I’m calling that out in particular because I wasted about an hour figuring out that I needed that.

Once all that was done, it was a ‘simple’ matter of running boot net:dhcp – install from the openboot OK prompt.

The machine isn’t exactly a screamer by today’s standards, it has a 333Mhz UltraSparc IIi chip in it, but it does have 512Mb of RAM, which covers a multitude of sins. I think I may start over with a larger HD, since the 7G drive that’s in there now doesn’t leave much room for experimentation. I’ll probably go ahead and put a DVDRW drive in there too, even though I don’t need it now.






Leave a Reply

Your email address will not be published. Required fields are marked *