javastation
Running Linux on JavaStations

Remember those old funny-shaped purple-grey boxes from Sun? You might be suprised to learn that they can run Linux. There again, you might not. JavaStations are MicroSPARC based machines, and SPARC-Linux has been around for years. Recently some bright spark (no pun intended!) had the idea to run Linux on one. Now it seems the whole world is at it...

I have two JavaStations, one is a Krups (looks a bit like a kettle) and the other an older Mr. Coffee (looks like a brick, it's actually a Sun drive case). I recently picked up on the JavaStation HOWTO and had a go at making them boot. Unfortunately the piggyback utility used in the HOWTO is designed for SPARC-based machines, and I only have x86-based machines at home, so I took the liberty of porting it to i386-Linux.

Modified piggyback source + i386 binary (40Kb)

Using Linux-i386 as a boot server
Once you have got hold of the kernel and rootfs images described in the HOWTO, you will need to modify the rootfs image to have the right IP addresses in it. This is easy, as ext2fs is the same on SPARC as it is on i386. The modified piggyback is used to tack this onto the kernel. DHCP, TFTP and RARP (if needed) are setup as per the HOWTO. And Bob's your uncle - up she comes.

Using Windows as a boot server
If you dual-boot your machine, or simply only have Windows, you can still boot JavaStations from a Windows box using Cygwin. You will need a suitable DHCP server (NOT Weird Solutions' DHCP Turbo, as this truncates BOOTP packets) - I am using a modified version of ISC DHCP under Cygwin - this is configured as per the HOWTO. Cygwin provides a version of tftpd and this can be used after a couple of minor configuration changes. Firstly tftpd runs as 'nobody', so you need to add entries to /etc/passwd and /etc/group with uid 99 and gid 99 - on NT/XP these also need to have valid ids in the description field e.g.:

## /etc/passwd
nobody:*:99:99:Nobody,S-1-5-21-299502267-854245398-1846087971-1003:/:/sbin/nologin
 
## /etc/group
nobody:S-1-1-0:99:

Secondly, you also need to modify the entry in /etc/inetd.conf to specify a root directory:

tftp  dgram   udp     wait    nobody  /usr/sbin/in.tftpd in.tftpd -l /tftpboot

In this case the root is /tftpboot. I added the -l (lowercase "L") to turn on logging (to the Windows Event Log) of the files that are being transferred. tftpd is run from inetd, which lives in /usr/sbin, so start this rather than trying to start tftpd directly.

If you have a Mr.Coffee, you will also need a RARP daemon. I have only found one suitable RARP daemon for Windows, which is written by Lew Perin and available from his website. This is suitable for NT/XP only. I have written an awk script which converts /etc/ethers into the format needed by Lew's rarpd. Note that there is no RARP daemon for Cygwin, as the required level of access to sockets is not available.

There is currently no way of creating ext2 filing systems under Windows, nor is there any way of running NFS, so you will have to use a pre-built initrd image, such as one from the HOWTO, or build one on a Linux box.

Troubleshooting
Most problems are caused by missing something obvious in the HOWTO, but if you are using an untested setup, particularly different DHCP servers, then here are some tips:

  • Use tcpdump on Linux or WinDump on Windows to monitor the conversation between the JavaStation and the boot server. If you want to decode packets fully, us -s 0 to capture the full packet, and -w file to write the packets to a file. You can the use -w file to play them back and filter and display them at leisure. A good filter might be rarp or port 67 or arp or tftp, which will show most interesting boot stuff.

  • The details of the Mr.Coffee boot sequence are here.

  • The details of the Krups boot sequence are here.

  • If your machine tries to mount a NFS root, even if you are using the piggybacked initrd method, then try an earlier release of PROLL such as ID13. I found that ID18 was reading arguments from somewhere that I didn't necessarily want.

  • If your Krups doesn't boot, or boots JavaOS, then one word of warning, the Krups contains a Flash EEPROM. It much prefers what's in the flash to what's on the boot server, so you need to carefully remove the flash before trying to boot a Krups. See the HOWTO for more information.