mirror of
https://github.com/RasppleII/a2server.git
synced 2024-12-25 20:32:18 +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