mirror of
https://github.com/RasppleII/a2server.git
synced 2024-12-24 14:31:21 +00:00
235 lines
13 KiB
Markdown
235 lines
13 KiB
Markdown
## 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!
|