Added a2server_story.md

This commit is contained in:
T. Joseph Carter 2015-10-23 00:28:23 -07:00
parent 833cd5797a
commit 11efa8dab2

View File

@ -0,0 +1,234 @@
## A2SERVER
The A2SERVER Odyssey
A2SERVER has been a multi-year labor of love.
Way back in 2010, my primary Apple II was a Mac Color Classic with an Apple
IIe compatibility card.
One of the things this card could do was emulate something called a
Workstation Card, which appeared to let Apple II computers access files on a
Mac file server. This was intriguing; I hadn\'t imagined it was possible.
And it was also potentially valuable as a way of providing mass storage for an
Apple II, with the bonus that other computers could easily access it as a
means of getting stuff to and from an otherwise isolated machine.
After some experimenting, I discovered that was exactly what it did, and I
bought an actual Workstation Card for my IIe, because that would be much, much
cooler. And it appeared that you could even \*boot\* the Apple II into ProDOS
from the network, which blew my mind. Using AppleShare 3.0 on another Mac as a
host, I made this happen, and there was much rejoicing.
Then, I got an idea into my head: this is great and everything, but you still
need an old Mac around. How great would it be if you could just have an
always-on network drive for an Apple II, with all the storage you might ever
need, and accessible from other computers on the LAN?
(It\'s true that there were Compact Flash storage cards at the time, and I
actually bought CFFA #16, but these didn\'t appeal to me quite as much because
of their relative lack of accessibility on other platforms. I\'d need some
sort of CF extender to get the card outside the machine, then run CiderPress
in a Windows emulator...)
It so happens that I had purchased a Western Digital My Book World Edition,
which was one of the first popular NAS products available. It was basically a
small Linux computer in a drive enclosure, and it was widely hacked to make it
do all kinds of tricks, one of which was providing native file sharing for
Macs.
This was possible by installing Netatalk, an open-source implentation of AFP
(AppleShare). I immediately wondered if it would be possible to somehow get my
IIe to talk to it. So I looked into it, and it appeared that Netatalk running
on Linux still supported the older AppleTalk networking protocol required by
an Apple II, and it even supported network boot into ProDOS.
There was the issue of how to actually interface my Apple II to the network;
this turned out to be relatively easy, by using an Apple-provide control panel
for classic Macs called LocalTalk Bridge, which indeed bridged AppleTalk from
its LocalTalk port (connected to an Apple II) to its Ethernet port (connected
to my network, which was connected to the NAS). But this was clumsy, so I
invested in an AsanteTalk, which is a dedicated (if finicky)
LocalTalk-to-Ethernet bridge.
What I discovered, after some time, was that a) the version of Linux that
shipped on that NAS did not include support for AppleTalk networking, and b)
the easily-installed Netatalk package didn\'t include the components required
for network boot, which I absolutely wanted.
I wasn\'t terribly Linux-savvy at the time, but I eventually figured out that
to get network boot support, I would need to download Netatalk and compile it
myself, from source. Ok. But once I learned that adding AppleTalk support
overall would require recompiling a kernel for the drive, I kind of put the
idea aside, figuring I\'d bring it to KFest and hack on it with someone there
who knows what they\'re doing.
In the meantime, I decided to see if I could make things work exactly as I
wanted with a \"proper\" Linux installation. Ubuntu Linux was well-known for
its relative ease of use, so I installed that into VMWare Fusion running on my
(modern) Mac. I installed the Netatalk package, and that worked -- though it
was still missing the network boot component, and there were other issues like
password login not working correctly.
So I had to figure out how to recompile Netatalk to make it do what I needed.
I managed to figure this out after much effort and studying of posts and
contributions to comp.sys.apple2, but wasn\'t able to get it to actually
netboot to ProDOS.
So this led me to comp.sys.apple2, and there met two people who turned out to
be two enormous contributors to A2SERVER: Steven Hirsch, who wrote much of the
actual network boot support in Netatalk, and Geoff Body, who knows everything
about the \"boot blocks\" that get transferred to the Apple IIe or IIgs during
network startup. Both Steven and Geoff have also helped figure out and work
around the idiosyncracies of many of the dedicated LocalTalk-to-Ethernet
bridges, and have been essential contributors to the execution of A2SERVER.
The initial conversation is chronicled in perpetuity here:
https://groups.google.com/forum/#!topic/comp.sys.apple2/b\_TzESci6Kg
With their help, I finally succeeded in network booting my Apple IIe from my
Linux virtual machine. The first proto-version of A2SERVER was a step-by-step
guide to manually set it up, as posted here:
https://groups.google.com/forum/#!topic/comp.sys.apple2/lkh4hXqmJbE
I could have left it at that, but I didn\'t like it. It wasn\'t all THAT easy
for a non-Linux person, network boot relied on Apple software from a \"secret
archive\" and hand-hacked binary code from within the guide itself, and the
final setup was hard-coded to a specific user name. I wanted a version that
was general-purpose, easy for anyone to install, and which obtained any
copyrighted software from 100% public, authorized sources.
And which, in a perfect world, could be configured to netboot from \"bare
metal\" -- that is, a bare computer with nothing but Linux would be able to
boot an Apple IIe or IIgs with no operating system, software, or even any
drives at all.
I hadn\'t forgotten about wanting it to run on a NAS, either, but I figured
I\'d circle back to that, since it was so much easier working in a VM. For the
time being, what I\'d ship would be both a premade VM, and a complete
installer script for actual Linux installations. And that would be A2SERVER.
Then it was a matter of locating what I could, from anyone I could, to make it
work. I discovered that the boot blocks and BASIC.SYSTEM -- the essential
pieces for netbooting ProDOS 8 -- were ensconced with the GSOS \"Disk 7\"
image available from Apple\'s Older Software downloads page. But that disk
image was a DiskDoubler self-extracting archive. Fortunately, The Unarchiver
could uncompress it, and is open-source, and builds on Linux. The disk image
was actually an HFS disk, which Linux has support for, so I was able to mount
it and copy the files out.
Steven contributed a huge fix to the Netatalk source code so ProDOS dates get
handled correctly. Geoff gave me patches to the Boot Blocks to fix a cleartext
login bug and allow an on-demand startup option to boot into ProDOS 8 on a
IIgs.
Then I had to hack a bunch of stuff together. I wrote mkatinit to create the
very specific user login files required for netboot; afpsync to simplify
Netatalk\'s handling of new shared files introduced from Linux; afptype to
allow setting the ProDOS (or classic Mac) file type of a file shared by
Netatalk.
These tools, plus a properly-compiled-and-configured Netatalk, made it
possible for a Linux server to entirely download ProDOS 8 and set it up for
network boot by an Apple II. Nothing had to be done on the Apple II side. Bare
metal!
I then shaped my guide into an actual executable script which could be
downloaded from my web site and executed on any Ubuntu installation. I
expanded the script to download and install the necessary tools, apply the
necessary patches, and everything else I felt was needed for click-and-go
server Apple II server setup, such as optional Windows file sharing (since one
of the goals was easy file interchange with modern computers).
And that was kinda that -- almost. I\'d conquered the IIe, but the real Mt.
Everest was bare metal GS/OS netboot. This was much more challenging: it meant
I\'d have to get the files out of the ProDOS-formatted GSOS installer disk
images, with resource forks intact and made usable by Netatalk. This is what I
wanted to show off when I introduced A2SERVER at KansasFest 2011.
There was no off-the-shelf solution for this, so I spent pretty much every
waking hour in Kansas City furiously creating cppo, which would copy files out
of a ProDOS disk image. And...I failed. I just ran out of time before my
presentation.
So I installed a Network Startup instalation of GS/OS the conventional way --
using the IIgs installer disks running on a IIgs, with the Netatalk shared
volume as the target. (The CFFA3000, which was also introduced that same
KansasFest, was absolutely invaluable for this.)
And it worked. In my presentation, I was able to network boot Peter
Neubauer\'s Apple IIe with nothing but the Workstation Card; and my IIgs with
nothing but a RAM card.
Then I came back home. I completed cppo, and it worked, mostly; with that
done, I then set about writing something to interpret the GS/OS installer
scripts and cppo the right pieces to the right places. And...it worked too.
Except that it didn\'t. It all started up, but the Finder had random
filenames, the Trash was full when there was nothing in it. It was corrupt.
Who knows why. I gave up.
I wasn\'t satisfied with not being able to start up a IIgs at all if you
didn\'t have the installer disks; so I made it netboot into ProDOS 8, from
where you could use DSK2FILE (which the A2SERVER installer script offers to
download) to convert the disk images to actual disks, which you could then use
to make an AppleShare startup floppy, which you could THEN use to mount the
shared volume and use it as a target for a full Network Startup install. Icky,
and of possible benefit to no one (really, who doesn\'t have GS/OS install
disks and a drive?), but it was some kind of solution. I packaged up the VM,
put up these web pages, and decided it was Done.
But the NAS thing itched at me. I wanted to be able to suggest an easily
obtained product. By now, WD had replaced my NAS with the My Book Live, which
featured a much faster processor, and was based on Debian Linux, which is what
Ubuntu is derived from. This was a promising starting point. I figured out how
to compile an AppleTalk kernel module for it. And then I already had these
turnkey scripts ready to go, so I hacked, and hacked, and...I couldn\'t get it
to work. I\'d sometimes get gibberish for volume names, and network boot would
load the boot blocks, and then never stop loading, filling the Apple II\'s
memory with zeroes until it crashed. (My suspicion is that the big-endianness
of the PowerPC CPU in the newer NAS may have been a factor.) Fixing that would
have taken me deep into the packetized heart of Netatalk, which is beyond my
pay grade. I gave up, and decided A2SERVER was Done. Again.
Until I went to KansasFest 2012, and Eric Rucker showed me something I had
never heard of: a Raspberry Pi. Somewhere, the gears started turning, and
months later I checked it out, and saw that its primary operating system
was...a Debian derivative. Could this be my long-sought-after NAS?
It was. The install scripts ran with only a little tweaking. I did have to
compile AppleTalk in the kernel, but eventually I had what I wanted. And it
was only $35!
I revisited the corrupted GS/OS installation. I couldn\'t put my finger on
what was wrong. But I noticed that the Finder showed a different length on its
source disk and after copying. So I followed its index blocks, and discovered
that contained in those were 0000\'s. ProDOS knew to fill blocks with zeros,
but cppo was dutifully copying Block 0, the ProDOS boot block, thereby
corrupting the Finder. I fixed this, and then I HAD IT: Bare metal install
GS/OS from Linux. Yeah, man.
And, so, then it was just tweaking and refining and tweaking and refining. The
big bummer as far as general use goes was that all the common
LocalTalk-to-Ethernet bridges (Dayna, AsanteTalk, and Farallon) were partially
or completely inoperable with a IIgs, and the Workstation Card required for a
IIe is hardly in great abundance. But Geoff Body came up with a fix for the
Farallon, I came up with a workaround for the AsanteTalk, and Steven Hirsch
came up with an actual fix for both the AsanteTalk and the Dayna, meaning
*all* of those bridges are now options for a IIgs owner!
So this was it: bare IIgs (even without memory card, if you\'re OK with ProDOS
8) + Raspberry Pi + readily available bridge = Apple II file server. Yeah!
And I discovered that with a USB cable or RPi console cable, you could
actually log in and control it with ProTERM. With Hugh Hood\'s clever ProTERM
patch for 115,200 bps on a IIgs, I could actually see my Raspberry Pi start
up...on my Apple II. I can\'t explain how joyous this made me.
And, I wrote ProDOS 8 utilities to switch the IIgs boot mode, which is
normally only possible under GS/OS.
I could go on and on, but basically the ideas kept coming, and I think I was
able I was able to polish most of A2SERVER\'s rough edges so that it could be
fun and/or useful for a few people. I hope you enjoy it!