Så fungerar min BBS

23 Dec 2023

Detta är en bloggpost som få, om ens några, kan ha något som helst intresse av att läsa. Det handlar om min BBS och hur den är uppkopplad till Internet, till Usenet och till Fidonet. Bland annat.

Jag skriver detta mest för mig själv så jag kommer ihåg hur allt detta hänger ihop nästa gång något rasar, men vill du hänga med på årets kanske djupaste navelskådning inom teknik som uppfanns för ~30 år sedan, och som fortfarande går att använda, så är du välkommen.

Jag startade min första BBS i början på 90-talet. Jag sålde min Amiga 500 och köpte en 286:a på tolv eller 16 megahertz (beroende på om turboknappen var intryckt eller inte), fyra megabyte internminne och en ATA-hårddisk på 44 megabyte (ATA var en tidig version av IDE).

Faksimil ur Datormagazin nummer 11, 1991

Tanken var att spara pengar och köpa en Amiga igen men Commodore hann gå i konkurs så det blev inget med den saken. Min BBS gick igenom en rad olika BBS-system eftersom jag, givetvis, inte kunde bestämma mig men till slut så landade jag med systemet Mikrokom, skrivet av Carl Sundbom som också drev BBS:en Chaos.

Drömmen var givetvis att kunna köra en riktigt stor BBS, som Söderkom som drevs med Sklaffkom och hade tre telefonlinjer. Jag testade faktiskt att köra min BBS på just Sklaffkom i mitten på 90-talet men det var väldigt “sklaffigt” och fungerade inget vidare med Linux så jag gav upp BBS-drömmen…. fram till 2015 då jag faktiskt hade köpt en Amiga 1200 ett tiotal år tidigare och bestämt mig för att köra en BBS igen. Inte byggd på Sklaffkom, vilket kanske hade varit enklare, utan på ett system vid namn NiKom.

Mina döttrar inspekterar min Amiga 1200 cirka 2004. Undertecknad övervakar.

Att ha en modemlina till sin BBS var passé vid den tidpunkten, och det var kanske också att ha en BBS men jag tänkte att det kunde vara kul att testa så ett par inköp senare så hade jag nätverkskort, hårddisk och annat roligt till min Amiga 1200.

I slutet på 80-talet och början på 90-talet hette min BBS “New Detroit”, efter staden de skulle ersätta gamla Detroit med i filmen Robocop. Men när jag döpte min BBS då så hade jag ju missuppfattat ett och annat - det var ju “Delta City” staden skulle heta och jag tänkte att jag skulle ta tillfället i akt och rätta till det så min BBS fick denna gång heta Delta City.

Fidonet

Det mesta avlöpte ganska bra tills jag bestämde mig för att koppla upp den till Fidonet. Jo, Fidonet existerar faktiskt fortfarande, och även om jag inte var medveten om i hur dåligt skick nätverket var, och är, så gav jag mig den på att ansluta min BBS. Detta visade sig dock vara en aning mer komplicerat än när jag höll på med det 25 år tidigare, och då tänker jag inte ens gå in på hur bökigt det var att ens ett nodnummer i Fidonet registrerat.

Kommunikationen mellan noderna i nätverket gick över Internet, och även om NiKom i sig hade ett riktigt bra stöd för just Fidonet och andra nätverk baserat på samma teknik som Fidonet så behövdes fler programvaror, som en “mailer” och en “tosser”.

I fallet “mailer” så fanns det bara ett alternativ: Binkd. Namnet kan låta bekant för de som var med på BBS-tiden under 80- och 90-talet: det fanns nämligen en mailer kallad Binkleyterm som delar av Binkd baseras på. Binkd är byggt för att köras över Internet och har över 25 år på nacken men det fungerar faktiskt fortfarande utmärkt. det vill säga om du kör det på en PC med Windows eller Linux. Det finns också ett antal porteringar av Binkd till Amigan men de fungerade riktigt dåligt och tenderade att krascha hela datorn lite då och då.

Sagt och gjort - jag satte upp en virtuell Linux-maskin som fick köra Binkd, som fortfarande finns i Ubuntus apt-repo. Problemet löst? Nja - det behövs en “tosser” också. En tosser är programvaran som tar de paket med meddelanden som kommit in, packar upp dem och placerar dem på rätt ställe så BBS-mjukvaran sedan kan importera dem.

Men, BBS:en körs ju på en Amiga, kanske ni tänker? Jajjemen - så jag installerade en NFS-mjukvara på min Amiga 1200 och vips så kunde den montera upp en katalog utdelad via NFS för att komma åt meddelandefilerna, som hanterades av en alldeles lysande programvara kallad Crashmail (skriven av svensken Johan Billing, för övrigt). Mer om det strax.

Big endian och little endian

Samtidigt uppstod problem med att låta Crashmail på min Amiga importera och exportera meddelandefiler till den via NFS utdelade katalogen (vilket berodde på att nätverksstacken på Amigan och NFS-implementationen gjorde i byxan när det handlade om större mängder filer) så jag snokade reda på en Linuxversion av Crashmail kallad Crashmail II (som fortfarande finns i bland annat Ubuntu:s apt-repo) och lät den skyffla alla meddelandefiler till rätt plats.

Efter en rejäl inlärningskurva så kunde man tro att problemet var löst? Nja, inte riktigt. Problemet låg i det som brukar kallas “big endian” och “little endian”, (väldigt) enkelt uttryckt i vilken ordning datorer skriver innehåll till minnet, och inte har någonting (mig veterligen) med den amerikanska urbefolkningen att göra. I NiKoms fall handlade det om att 16-bitarsvärden i meddelandefiler baserade på Fidonet-tekniken (.msg-formatet) skrevs i big endian, vilket fungerade bra med Amiga-baserade tossers som Crashmail, medan det i x86-världen användes little endian.

I version 2.1.2 av NiKom fixade Niklas Lindholm problemet med de två endianerna och vips så kunde jag använda Binkd och Crashmail II på Linux och NiKom på min Amiga 1200.

Fler nätverk

Snart upptäckte jag att det fanns fler meddelandenätverk än Fidonet. Amiganet, SFnet, Retronet och FSXNet är några av dem, och till råga på allt så upptäckte jag också att jag ju via ett av dessa nätverk också få in hundratals newsgrupper från gamla Usenet. Då uppstod raskt nästa problem: att få Binkd och Crashmail II att acceptera dessa.

Crashmail II var förberett för att hantera flera olika nätverk. NiKom var det till viss gräns - det kunde hantera flera olika nätverk för vanliga meddelandefiler men för netmail, Fidonets motsvarighet till e-post, så var det en annan pilsner. Niklas Lindholm är dock inte den som är den utan löste problemet i version 2.5.0 av NiKom där man helt sonika kunde konfigurera BBS-programvaran så den kunde skriva utgående netmail till olika filkataloger beroende på vilket nätverk den skulle till. Man definierade först vilka nätverk BBS:en tillhör:

DOMAIN 1 FidoNet 2:221:242.0 1: 2: 3: 4: 5: 6:
DOMAIN 2 AmigaNet 39:160/242.0 39:
DOMAIN 3 FSXNet 21:2/130.0 21:

Därefter definierar man katalogerna för netmail beroende på nätverk:

MATRIXDIR=fido:netmailfido 1: 2: 3: 4: 5: 6: 
MATRIXDIR=fido:netmailamy 39:
MATRIXDIR=fido:netmailfsx 21:

Genialt utformat faktiskt.

I Crashmail II så skapade man motsvarande kataloger i konfigurationsfilen:

NETMAIL "NETMAIL" 2:221/242.0 MSG /fido/mail/netmailfido LATIN-1 DEFAULT
NETMAIL "NETMAIL_AMY" 39:160/242.0 MSG /fido/mail/netmailamy LATIN-1 DEFAULT
NETMAIL "NETMAIL_FSX" 21:2/130.0 MSG /fido/mail/netmailfsx LATIN-1 DEFAULT

Givetvis måste man också definiera nodnummer för de olika nätverken samt var utgående meddelanden ska routas. Detta beskrivs rätt bra i dokumentationen men för den som vill se exempel så ser det ut som följer. Först nodnumren:

NODE 2:221/1.0 "" "" PACKNETMAIL AUTOADD CRASH
NODE 2:221/242.0 "" "" AUTOADD
NODE 39:150/200.0 "" "" PACKNETMAIL AUTOADD CRASH
NODE 39:160/242.0 "" "" AUTOADD
NODE 21:2/100.0 "" "" PACKNETMAIL AUTOADD CRASH
NODE 21:2/130.0 "" "" AUTOADD

Exempelvis så är 2:221/1.0 min “hubb” för Fidonet, och jag måste även definiera mitt egna nodnummer, 2:221/242.0 för att Crashmail II ska ta emot paket till mitt egna system också.

Resten löser man med routingtabellen:

ROUTE 2:*/*.* 2:221/1.0 2:221/242.0
ROUTE 1:*/*.* 2:221/1.0 2:221/242.0
ROUTE 3:*/*.* 2:221/1.0 2:221/242.0
ROUTE 4:*/*.* 2:221/1.0 2:221/242.0
ROUTE 5:*/*.* 2:221/1.0 2:221/242.0
ROUTE 6:*/*.* 2:221/1.0 2:221/242.0
ROUTE 39:*/*.* 39:150/200.0 39:160/242.0
ROUTE 21:*/*.* 21:2/100.0 21:2/130.0

Här måste man tala om för Crashmail II att den också ska routa inkommande meddelanden till mitt egna system utöver var utgående meddelanden ska skickas.

Hur som haver - i Crashmail II så definierar man var all utgående post ska läggas med en enda rad:

OUTBOUND /fido/outbound/

Klart!

Det fungerar ju för bövelen fortfarande inte

Ser ju enkelt ut va? Det är det inte. För det fungerar inte.

Crashmail II kan importera meddelanden utan problem, men när samma programvara ska exportera ut meddelanden så skapar den två filer: en paketfil och en fil som talar om för Binkd vilka paketfiler som ska skickas. Den senare filen initierar Binkd som i sin tur då kopplar upp sig och skickar över meddelandefilerna till mottagande system över Internet. Paketet med meddelandefilerna hamnar där det ska, men filen som initierar överföringen, som egentligen ska hamna i /fido/outboundhamnar istället i exempelvis /fido/Fsxnet.015. Där tittar givetvis inte Binkd eftersom man sagt åt Binkd att alla utgående filer för alla nätverk man är medlem i ska ligga i /fido/outbound. Det är ju trots allt det mest logiska. Det är dock få saker som faktiskt är logiska i den här världen - låt mig förklara.

Det finns ett antal olika format, eller sätt, att definiera en adress i exempelvis Fidonet (det är samma sak som med standarder: det fina är att det finns så många av dem…): 3D, 4D och 5D. Crashmail II stödjer 4D, medan Binkd antar att man använder sig av 5D. I dokumentationen för Binkd finns följande att läsa:

 If your tosser would create bundles for omeganet in the omeganet
directory then you should write as indicated above. But since it does not
work with 5D and it creates the bundles in fidonet.00b then you should
write this way:

    domain fidonet c:\\ftn\\outbound\\fidonet 2
    domain omeganet c:\\ftn\\outbound\\fidonet 2
    address 2:5070/222@fidonet 11:58/6@omeganet

    It is obligatory to configure all your addresses with domains. The
outbound directory and the path should be the same everywhere (4D tosser
considers all addresses to belong to one domain).

Glasklart? Dokumentationen är, åtminstone delvis, skriven av ryssar som sedan översatt den till ganska knacklig engelska men den här delen är ju ganska tydlig kan man tycka. Istället för att skriva så här som jag initialt gjorde i binkd.cfg:

domain fidonet /fido/outbound 2
domain fido alias-for fidonet 
domain fidonet.org alias-for fidonet
domain amiganet /fido/outbound 39
domain fsxnet /fido/outbound 21

… så ska man skriva så här istället:

domain fidonet /fido/outbound 2
domain fido alias-for fidonet
domain fidonet.org alias-for fidonet
domain amiganet /fido/Amiganet 2
domain fsxnet /fido/Fsxnet 2

Det stora mysteriet är hur Binkd fattar att den ska titta i /fido/Fsxnet.015 när jag angett /fido/Fsxnet i konfigurationsfilen för Binkd, för det tog mig ett antal timmar att fatta att det är Crashmail som skapar /fido/Fsxnet.015-katalogen och placerar filen som initiererar överföringen däri och eftersom man inte kan ange just /fido/Fsxnet.015 i konfigurationsfilen för Binkd så blev förvirringen ännu större.

Sedan ett år eller så tillbaka så har Amiga-hårdvaran övergivits för en emulerad dito under Windows 10 och WinUAE. Det har fördelen att jag kan montera katalogen med alla meddelandefiler över Samba till min Unraid-maskin, och samma katalog är sedan utdelad via NFS till Linuxmaskinen som kör Crashmail II och Binkd.

Via ett litet fulhackat script av undertecknad körs uppdateringen av de Fido-baserade nätverken varannan minut. Var 15:e minut sker import och export av meddelanden medelst Crashmail II som startas av Crontab på Linuxservern:

*/15 * * * * /usr/bin/crashmail toss settings /etc/binkd/crashmail.prefs >/dev/null 2>&1
*/15 * * * * /usr/bin/crashmail scan settings /etc/binkd/crashmail.prefs >/dev/null 2>&1

Hur som helst - det var det hela. Nu kan jag, och även du om du vill, delta i Usenet-grupper via min BBS och njuta av ändlösa gräl, oerhört genomarbetade signaturer och allt annat som eventuellt gör livet lite mer värt att leva.