#MARCHintosh 2024 – What a Ride!

First off, Happy St Patrick’s Day! Éirinn go Brách! 💚🤍🧡

This has been what I can only describe as an unexpectedly, heavily, Mac-flavoured March.

Yes, I know it’s #MARCHintosh – but I don’t have any retro Macs! What projects could I possibly contribute with?

Oh, boy, let me tell you!

My Project

It started out innocently enough, with a post from a Mastodon mutual indicating their project was classic Mac virus-related.

That triggered the memory of doing a “MacViruses” article for PC Support Advisor when I worked for Paul Zucker, and I knew I had the original PageMaker file for at least one of the two articles I wrote for that publication in 1991, and print copies of both.

So, I thought, my project (note the singular at this time, please), would be to find them, archive them, and have that info available online. I found the printed copies quick smart, and the PageMaker file (both PageMaker 4.2 and 5 versions) for the other article (“Macintosh Resources”) soon after.

As a proof of concept, I fired up PageMaker 5 in mini vMac, printed to the PostScript file printer I’d already set up, used GhostScript to convert that .ps file to PDF, and I ended up with a modern, clean, searchable copy of the resources article quick smart, which I uploaded it to The Internet Archive.

You might think I’d be happy about achieving 50% of my project, but then I considered the viruses article. With no copy of it in PageMaker, I was left with scanning, OCRing and uploading that to IA.

But that felt just plain wrong!

When I scanned the pages in colour as 600dpi TIFFs, they were 400MB each! The whole PDF of the resources article was only 200KB, and it had more pages and screenshots! Scanning two colour spot printing as a colour TIFF, even with a limited colour depth, was blowing out the file size. And I was worried about how good a job OCR would do, anyway, especially for the figure captions which were printed over a dot screen of the second colour.

So I considered my options and thought what I would do was just use the scanned pages to extract the text and graphics, and use the resources article PageMaker file as a template to recreate the viruses article, and inherit the file size and format benefits by converting that to PDF.

I embarked on this path and after a significant amount of fiddling (and advice from noted Australian digital image manipulatoreditor NanoRaptor), I was able to extract six “clean” 512 × 342 1-bit Mac screenshots identical to the originals.

The project stalled at that point because of an unexpected hurdle: I’d started taking notice of the GlobalTalk networking project, and wanted to get involved.

GlobalTalk started as an attempt by Paul Rickards and dan on Mastodon to get their AppleTalk networks joined across the Atlantic. While it looks nothing like the original proposal (it now uses Apple Internet Router [AIR]), to say it has taken off would have to be the understatement of the year! As of today there are roughly 60 zones intermittently showing up on GlobalTalk, with usually over 45 online at any one time.

But…I have no AppleTalk capable Macs, so what can I do to participate?

Well, emulate, of course! I (totally sensibly) down tools on Project 1 (temporarily, I assure myself), and enthusiastically join…

The GlobalTalk Revolution! (a.k.a. My Second Project)

It’d be pretty straightforward, I surmised – look how easy it was to use mini vMac to create a PostScript file from a PageMaker file almost 35 years old!

Okay, Houston…we’ve had a problem here…

First of all, my favoured classic Mac emulators are not currently being very co-operative.

SheepShaver and Basilisk II are both crashing for me immediately upon launch. I’ve tried changed settings, creating new settings, new downloads of the apps – nothing is working to get them going. I’ve subsequently seen that using OpenCore Legacy Patcher to run later macOS versions on officially unsupported hardware is at fault, but I haven’t seen any reasons why that is the case.

“But hang on,” I hear you ask, “what about mini vMac? You were using that just a few paragraphs ago!”

Indeed I was, but this is where I expose my selective laziness and technical chauvinism – when it comes to emulated systems, I like to use bridged networking (if the emulated systems are network-capable at all), whereby they appear as independent/peer network devices to the other devices on my network.

It means I can play with different network protocols (inbound and outbound) as if the emulated system was a physical device plugged into my network.

If necessary (and appropriate), I can easily forward ports from my router to those emulated systems for external access without funky TAP/TUN/SLiRP/BURP networking shenanigans (that last one is made up if you didn’t guess, but who could really be sure these days, eh?).

I seem to recall having bridged networking working with SheepShaver and Basilisk II, but they’re useless to me at the moment, so I couldn’t check and looked at mini vMac.

Every time I tried to enable AppleTalk in mini vMac, the boot system would crash on restart. I’ve even tried Beta Branch 37 with UDP enabled for LocalTalk by default (which I thought would do the bridged networking I was looking for) with no luck.

On looking around, however, I saw that another emulator, QEMU, can do bridged networking on macOS, and its Motorola 68k emulation can emulate a Quadra 800, which runs the OS version Paul Rickards’ instructions said I needed (System 7.1).

So I settled on QEMU as my fastest path to getting set up for GlobalTalk.

Famous last words.

QEMU to the Rescue…Eventually

I downloaded QEMU and a helpfully provided System 7.1 installer linked to from the QEMU download page on emaculation.com.

In the interests of brevity (ahem!), I’m going to take a deep breath and blurt it all out in one go: 3…2…1…

Download qemu-system-m68k; download System 7.1 installer disk; struggle for hours to get it right – both the blank image file I created and the installer disk have to be “scsi-hd” in the command file’s options; vmnet is mistyped on the Emaculation guide, so copy/pasting that killed networking for an hour until I noticed the typo; vmnet requires root privs (fine…I’ll just sudo the command each time); trouble mounting additional software installer images required for GlobalTalk!; more trouble mounting additional software installer images required for GlobalTalk!!; even more trouble mounting additional software installer images required for GlobalTalk!!!; Disk Copy 6.1.2 requires AppleScript (not on installer drive!); extract bare partition image with Disk Jockey; use mini vMac to mount System Update 3 images and bare partition (which probably won’t work if brought back to QEMU, but I’m desperate); won’t boot; try loading bare disk image after booting mini vMac with my usual System 7.5.3 boot image to import NDIF disk images mounted with Disk Copy to make net install folders, then use the QEMU disk converter to make it right again – will this even work?!; Disk Copy 6.1.2 on installer disk runs in System 7.5.3 in mini vMac, but importFl doesn’t bring any filetype information over (already lost?); assign filetype and creator code to .img – still doesn’t work; import suggested Apple Internet Router compressed archive to mini vMac with importFl; it’s a StuffIt! .sit file, and no expander is installed on my mini vMac boot disk; install Stuffit! Expander from mini vMac site; no filetype and creator code on AIR .sit file; assign filetype and creator code to AIR installer .sit – DOESN’T WORK!; download a different AIR 3.0.1 archive I find online – it includes 3.0 installer disk images!; they mount with Disk Copy, huzzah!; I’m able to make a network installer from the three disk images and install AIR!; I’m able to install the Router IP Extension and Network Software 1.4.5 Installers!; I’m ready to take this back to QEMU, but how should I do that?; I try Disk Copy’s “Create Image from Disk” feature, hoping it’s QEMU compatible…QEMU doesn’t boot with it!; I try Disk Copy’s “Create Image from Folder” feature, but choose the installer disk; I create Read Only, Read/Write and Compressed versions of the disk image; I try to mount them all in QEMU – none work!; Aaaaarrrrgggghhhh!

I feel so close! I have all the necessary software installed, I just need to find a way to load and run it on the compatible “hardware” in QEMU.

I’m not exactly sure what I did next (I’d stopped taking notes, just looking at them was stressing me), but somehow, soon after the above I landed on the necessary command options to load one of the pre-installed disk images I’d made in mini vMac as a Read/Write boot disk in QEMU with my modified installer disk as a second disk. Huzzah, indeed!

Most everything after that pretty well followed the script prepared by Paul Rickards (other than some port naming differences). I was soon on GlobalTalk with (by this stage) quite a few other zones.

I’d done it! I was online and my machine was connected to other AIR routers around the world!

I eventually got to packaging up my disk images for others, creating a Read Me on how to use them to boot QEMU with AIR pre-installed (with update installers ready to go beyond the base version used by Paul) or leaving it as an exercise for the user to install from scratch using my installer disk.

I could close off that chapter, and leisurely move to the next chapter, which was really the first chapter: finishing my original project, finally

Next Chapter: I Catch a Virus

Before I did return to Project 1, I thought I’d just quickly find the Quadra 800 icon the System 7.1 Finder’s About This Macintosh dialog. I thought I could use it as an avatar or something.

So, I dived into a copy of the Finder (where that icon was likely to be stored) with RedEdit, the trusty old resource editor from back in the day (you can read about it and icon resources in the above article!).

Almost immediately upon opening the file (even before opening any icon resources), my heart almost stopped. There, sitting in amongst all the innocent resources, was one I well remember as not being innocent at all – nVIR.

“$#!+”, I thought, “that’s the nVIR virus in the Finder from my boot disk! A copy of which I made available globally last night!”

I immediately cancelled the iCloud share of the packaged files and announced the problem on Mastodon and in the spreadsheet used to coordinate GlobalTalk admins.

I then rode the “find a disk image that works in QEMU” merry-go-round again (well, a much smaller version of it, “only” an hour or so this time) to install and run Disinfectant 3.7.1, an early Mac antivirus program I knew could deal with nVIR.

I ran it on the boot disk, but it couldn’t do a full clean while some infected system files were loaded. I also ran it on the installer disk, which it cleaned completely – so then I booted from the installer disk mounted in Read Only mode, cleaned the boot disk, and then mounted the distribution copies and cleaned those.

I then rebooted back into my usual system setup so it could get back to running AIR, amended my Read Me, and sent out links to a new version of my packaged files all fresh and clean.

Apparently, mine wasn’t the only distributed disk image which had a virus infection. Subsequent to my announcement, other GlobalTalk admins ran antivirus on their installs or disks they’d distributed, and at least one other infection unrelated to mine was found on someone else’s distribution disk. Welcome to 1993!

When trying to nail down the source of my infection, I revisited that helpful installer disk image Emaculation linked to – a fresh download was, indeed, already “helpfully” infected with nVIR, so I notified the admins there and they quickly cleaned it up, as well.

Thankfully, nVIR was pretty innocuous and easy to clean.

So, now I can get back to Project 1, right?!

Wrong!

Next Chapter: Get in the Queue!

There was still one GlobalTalk thing nagging me – printing.

So far, all I’d achieved in that area was a disastrous attempt to print two small SimpleText files, print jobs which I cancelled as nothing seemed to be happening at my end, but which actually resulted in hundreds of blank pages going through the printer, and every 20 pages or so my small one- or several-line messages would appear. Oops! Sorry, Eric!

What I wanted even more than sending print jobs was for people to be able to print to my printer, a nice Brother colour laser printer I’d only gotten mid-last year. However, it’s too new to understand AppleTalk, older Macs (pre-System 7.5) can’t properly speak lpr/lpd/ipp, and I didn’t want my printer just available to the wider Internet via port forwarding, I wanted GlobalTalk participants to be able to choose LaserWriter in the Chooser, go to my zone, select my printer, print, and have it appear in my printer’s physical output tray. Is that really too much to ask?!

I knew what I had to do – I needed to run, in Linux, netatalk 2, which understands old-style AppleTalk and IP-based AppleTalk, and which could present printers from the CUPS system as AppleTalk printers.

Now, you might think, here we go again, this sounds über-complicated, judging by the above, there are going to be numerous roadblocks here, how many words is he going to wring out of this part?

Well, the answer turns out to be (as it should) “42”:

I installed a small Linux virtual machine in UTM (a nice QEMU frontend for x86 virtualisation on the Mac), installed Webmin (my preferred remote admin console), CUPS, and netatalk 2, and had the whole thing installed and working in a single afternoon.

OK, well, actually, that’s not the whole story, as it turned out – I subsequently decided I also wanted people to be able to print straight to PDF from their GlobalTalk devices, so:

I installed CUPS-PDF, probably spent as long as I had on the above install getting CUPS-PDF to accept jobs as an AppleTalk LaserWriter queue, PDF them the right way up without mirroring, and allow users access to grab their PDF print files.

Oh! Look at that – only another 42 words, what an amazing coincidence! There must be some significance to that number – but I’ll have to look into that another day, maybe after a cup of tea, or after a few pints and peanuts down the pub with a good (or at least not unfriendly) friend.

A Pause, for WOzFest and Words

All the above was in place by 15 March, halfway through .

I’ve not yet returned to poor old Project 1, but I have two very good reasons:

  1. I had to host WOzFest 33 yesterday, and I had a ball, and even helped some others get on the GlobalTalk bandwagon (or should that be “the GlobalTalk bandwidth”? ::boomtish::), spoke to some International GlobalTalk admins, and successfully printed a colour JPEG to Jason Griffiths’ LocalTalk-enabled ImageWriter via his now-GlobalTalked WorkGroup Server 60, acting as an AIR host.
  2. I wanted to get all the above written down before it disappeared from my head, and before progressed too much further.

So, those are now done, and I still have two weeks to complete Project 1, and document its progress along with that of the other minor side-projects/quests I have omitted from the above, or which I will no doubt encounter in the next fortnight.

Interestingly, there’s been a lot of crossover between Project 1 and the GlobalTalk work through the virus infection, and the CUPS-PDF printing solution will actually allow Project 1’s PageMaker output to go directly to PDF.

So, as Dirk Gently might say, “There seems to be a lot of interconnectedness going on here.” (OK, you’re right: Douglas Adams would write that at least marginally better.)

While I work on the next stages and before I provide my next update, please look out for and posts on your favourite social media – yours truly is only posting/seeing them on Mastodon, I do hope to see you there.

So lastly, until my next instalment – keep on Maccin’!