mirror of
https://github.com/RasppleII/a2server.git
synced 2024-12-24 14:31:21 +00:00
Added a2server_story.md
This commit is contained in:
parent
833cd5797a
commit
11efa8dab2
234
docs/ivanx/a2server_story.md
Normal file
234
docs/ivanx/a2server_story.md
Normal 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!
|
Loading…
Reference in New Issue
Block a user