Solaris 10 Netinstall

Ah, finally I got around to do this. This E250 needed to be reinstalled. Well, there's Disk#1 of Solaris 10/08 inserted right now, but no one is there to play the "insert next disk to continue" game. Furthermore, installing from optical media is soooo last century :-)

Yes, there are ways to install Solaris via LAN (even via WAN!), but I did not want to setup a Jumpstart server (mainly because I don't have a 2nd Solaris machine running atm) and WAN setup was out of the question too, as our connection to the outside world is not that fast. Also, instead of letting "Jumpstart" do the magic I wanted to do things on my own. After all, it's just getting this box to boot and then we just need an NFS share to get our installation files from, right? Let's begin:

In this example, our server will be 192.168.0.1/24 (Linux, Ubuntu 10.04, x86), our client (Ultra-Sparc E250, where we want to install Solaris 10/09 on) will be 192.168.0.5/24.

We'll set up RARPD, TFTP and Bootparamd to get the E250 (sun4u) started; NFS to share the installation media later on. The installation media is basically just the downloaded .iso, loop-mounted somewhere on our Linux system:

 mount -t iso9660 -o loop -o ro sol-10-u9-ga-sparc-dvd.iso /mnt/cdrom
For rarpd to work, we add our client's MAC address to /etc/ethers:
 # grep 192.168.0.5 /etc/ethers
 08:00:10:A1:B2:C3      192.168.0.5
For tftp we need to create a bootfile for our install-client (192.168.0.5) to be found:
 # grep tftp /etc/inetd.conf 
 tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /data/tftpboot

 # cd /data/tftpboot
 # printf %02x 192 168 0 5 | tr [:lower:] [:upper:]
 C0A80005
 # cp -p /mnt/cdrom/Solaris_10/Tools/Boot/platform/sun4u/inetboot .
 # ln -s inetboot C0A80005.SUN4U
 # ln -s inetboot C0A80005
For bootparamd, /etc/bootparams should look something like this:
 # grep -v ^\# /etc/bootparams
 e250 root=192.168.0.1:/mnt/cdrom/Solaris_10/Tools/Boot \
      install=192.168.0.1:/mnt/cdrom/Solaris_10 \
      rootopts=192.168.0.1:rsize=32768:nfsvers=2:vers=2
Somehow it's important that all these parameters are prefixed by the servername (192.168.0.1), otherwise the client may not find the requested files.

With all that in place, we still have to export the installation directory via NFS. As Solaris 10 still still has problems with a Linux NFS server, we're starting nfsd with:
 # grep RPCNFSDCOUNT /etc/default/nfs-kernel-server 
 RPCNFSDCOUNT="16 --no-nfs-version 3 --no-nfs-version 4"
...and exporting our share now:
 # exportfs -v -i -o ro,no_root_squash 192.168.0.0/24:/mnt/cdrom
 exporting 192.168.0.0/24:/mnt/cdrom
Now we should be able to boot the box:
{0} ok boot net -s -v - install
ChassisSerialNumber 12341010
Initializing    1 megs of memory at addr          2feca000
Initializing    1 megs of memory at addr          2fe00000
Initializing    2 megs of memory at addr          2fc02000
Initializing  192 megs of memory at addr          23c02000
Initializing  572 megs of memory at addr                 0
Rebooting with command: boot net - install
Boot device: /pci@1f,4000/network@1,1  File and args: - install
Using Onboard Transceiver - Link Up.
3a000
Server IP address: 192.168.0.1
Client IP address: 192.168.0.5
Using Onboard Transceiver - Link Up.
ramdisk-root ufs-file-system
Depending on your interface speed, this will take a long time to complete. We can watch with tcpdump on our install server that it's still fetching stuff and we have to be very patient for this to complete. What we could try is to boot with different bootoptions (though it wasn't supported by our E250):
{0} ok boot net:speed=100,duplex=full -s -v - install
After the ramdisk is loaded, booting continues:
Loading: /platform/SUNW,Ultra-250/kernel/sparcv9/unix
Loading: /platform/sun4u/kernel/sparcv9/unix
SunOS Release 5.10 Version Generic_142909-17 64-bit
Copyright (c) 1983, 2010, Oracle and/or its affiliates. All rights reserved.
os-io Configuring devices.
Using RPC Bootparams for network configuration information.
Attempting to configure interface hme0...
Configured interface hme0
ERROR: bpgetfile unable to access network
/sbin/install-discovery: information: not found
This might happen, because Solaris assumes a wrong netmask for our interface. We'll fix this with:
 # pkill /sbin/dial             # Kill the spinning cursor :)
 # ifconfig hme0 192.168.0.5 netmask 255.255.255.0 broadcast 192.168.0.255
 # exit
The exit will actually exit back to the installation process, until:
System identification is completed.
System identification complete.
Starting Solaris installation program...
Searching for JumpStart directory...
not found
Warning: Could not find matching rule in rules.ok
Press the return key for an interactive Solaris install program...

Executing JumpStart preinstall phase...
Searching for SolStart directory...
Checking rules.ok file...
Using begin script: install_begin
Using finish script: patch_finish
Executing SolStart preinstall phase...
Executing begin script "install_begin"...
Begin script install_begin execution completed.
So, pressing Enter seems to continue: the interactive installation-screen appears and we can click through a few screens, until the process is interrupted again:
There were problems loading the media from /cdrom.
Solaris installation program exited.
# 
Wait, what? We're doing a network install, so why the hell does it look for installation files in /cdrom? Nevermind, we can do that too and start the install-process again:
 # mount -F nfs -o ro 192.168.0.1:/mnt/cdrom /cdrom
 # /sbin/install-solaris
After a few screens we will be asked where our installation media resides:
 192.168.0.1:/mnt/cdrom
At this point, the installation should finally continue, without further interruptions. Yeah, right :-)