Netbooting a SPARCstation 10 with a Raspberry Pi2019-10-12
I recently acquired a Sun SPARCstation 10 and not having a CD-ROM drive (and no way to write to the SCSI hard disk in some other way), it was time to look into netbooting (that is, until the SCSI2SD arrives, which should make it possible to emulate a CD-ROM drive and hard disk from a single SD card).
For this, I grabbed a Raspberry Pi 3 (but any SBC or a normal PC would work, of course) and hooked it up via a Ethernet switch to the SPARCstation. The OpenBoot firmware on the machine I got by default tried to netboot, and there is a super useful article here about netbooting: Network Boot Server for SPARC
In my case, instead of using an ancient RedHat release, I wanted to use a recent Debian base, and the Raspberry Pi is perfect for this.
I also asked a question about the SPARC boot command for SCSI disks on the Unix Stack Exchange. In that regard, the hard disk was not on SCSI ID (3, 0), but on (0, 0), which required this command:
I still don't know what the parts of that command mean, so if you know what this cargo-culted incantation means, add your answer to the Unix Stack Exchange question above.
Handing out IPs with
First order of business is to install
rarpd from the repos, so
that the SPARCstation can determine its IP address (based on its
sudo apt install rarpd
You probably also want to configure
eth0 on your Raspberry Pi
to manually be e.g.
192.168.0.1. Then, in
an entry for the SPARCstation (I just call it
(where you replace
xx:xx:xx with the second half of the MAC
address of the SS10 is shows at boot, the first part is likely
Then, add entries to
192.168.0.1 raspi 192.168.0.2 sparcstation
rarpd will be able to go from
/src/ethers) and (via
is what the SPARCstation will use as its IP address. Start it with:
Monitoring network traffic with
In order to have a better overview of what's going on, I like to have
tcpdump installed (you can also install Wireshark for a nice GUI):
sudo apt install tcpdump sudo tcpdump -i eth0 -vv
This way, you should be able to see any requests and communication
between the Raspberry Pi and the SPARCstation. Fire up the SS10 and
wait for it to request files via TFTP (if it doesn't netboot by
A and then type
boot net). Once it has
acquired its IP address via the Reverse ARP protocol from
it should request
C0A80002.SUN4M via TFTP (
192.168.0.2 in hexadecimal notation, if you assign a different IP
to the SPARCstation, the filename will also be different). If you
don't want to observe the requested filename via
tcpdump, you can
use Python 3 to convert the dotted decimal IP to the hex string:
>>> '%02X'*4 % tuple(int(x) for x in '192.168.0.2'.split('.')) 'C0A80002'
Next, we need a bootable image.
RedHat 6.2 for SPARC
Grab the RedHat 6.2 ISO from here: redhat-6.2-sparc.iso
Serving files with
In the RedHat 6.2 SPARC ISO, you will find
tftp32.img, which you can rename
(or symlink) to
C0A80002.SUN4M. Let's also install (and start) a TFTP server:
sudo apt install tftpd sudo systemctl start inetd.service
/etc/inetd.conf that the TFTP root is
tftp32.img there as
C0A80002.SUN4M (again, a symlink also
works). Restarting the SS10 results in it loading the image to some
degree, but for me it locked up -- oh noes!
Issues with the ARP cache
Looking at the
tcpdump output (here it becomes useful!), I could
see that for some reason, the ARP cache on the RPi3 was polluted
(it might have been some device on my network, so it might "just work"
for you). My brute-force way of solving this dilemma was to add the
right ARP entry manually every 2 seconds via the
(in a separate terminal/session, on the Raspberry Pi, and with
xx:xx:xx replaced with the real MAC address, and
resolvable to an IP address via
watch sudo arp -s sparcstation 08:00:20:xx:xx:xx
NFS/HTTP/FTP -- Getting files to the SPARCstation
Once this booted, the next step was to configure something like NFS.
And NFS was what I tried first, but there were some protocol mismatch
issues, and the RedHat installer also had a HTTP and FTP option. So
I installed Apache2 for serving the ISO content, but the RedHat 6.2
installer image used HTTP/0.9 and some weirdness that Apache2 didn't
understand out of the box (
python3 -m http.server also didn't work,
which I tried first, of course).
Not wanting to go hunting for an old, buggy HTTP server or looking into configuring Apache2 to be more backwards compatible (or writing my own small HTTP server, which might have been fun), I went with the next option: FTP.
There are many FTP servers available in the repos. I picked
proftpd. It's easy to configure an anonymous user for it,
and verify its root to be
/srv/ftp/. Then, start the server, put
the RedHat 6.2 ISO contents somewhere there (e.g. into a
subfolder of it) and then in the installer use
IP address of the RPi3) and
/rh62/ as the folder to install from.
After that, it's just basic, menu-driven installation. The SCSI hard disk in the SS10 here only has 500 MiB, so I needed to pick "custom install" and deselect most packages/tasks (I did install X11 and GNOME) but after 244 packages, 325 MiB and ~ 35 minutes, the installation was done.
Even though the installer asked to configure Linux for booting,
it only added a
linux entry to OpenBoot, but did not set it to
default, but a
A, followed by
boot linux made it work,
and after a lengthy boot process, I was greeted by the login screen
and after logging in, was able to play around with the 1990s
incarnation of the GNOME desktop.