Setting up FTN-style message networks with ENiGMA½ BBS

Alpha
11 min readSep 1, 2020

--

Step-by-step configuration instructions.

Message Menu for The Drunken Gamer (thedrunkengamer.com:8888 // telnet)

If you’re reading this, you probably already know all about ENiGMA½ BBS software. If not, check it out!

I recently switched my main BBS (the Drunken Gamer) to ENiGMA½, and I’ve been impressed with its trajectory and community. It’s billed as a ‘modern BBS software with a nostalgic flair’, and it has some great perks:

And much more. Check out the ENiGMA½ site for all the goodness 📑

While the ENiGMA½ docs are pretty darn good, I compiled this guide on how to get up-and-running with fidonet-style networks (“FTN”). It started as a set of notes so I could recreate things quickly, and figured I would share.

For this configuration, I’m running Ubuntu 18.04 LTS, on a cloud-based virtual machine (vultr, high frequency), with a fresh install of ENiGMA½, which is v0.0.12-beta at the time of writing.

Also, I have no idea what the “½” stands for.

What the hell is “FTN-style message network?”

You’re a BBS nerd, so you probably know all this, but bear with me as I man-splain this to absolutely no one. Skip this entire section if you just want to get to the configuration examples, because we’re about to go down a rabbit hole.

Back before the commercial internet really took off (1980s — mid 1990s), electronic messages were delivered via a point-to-point network of personal computers, which were strung together geographically, with messages transported over plain old telephone lines.

You used a modem to “dial in” to someone’s BBS, write a message in a networked area, and then that message was automatically sent to another computer, which acted as a local hub collecting all the messages in that geographic area (long distance phone bills were very much a thing).

From there, your message would propagate across the network in similar fashion, hub and spoke, possibly all over the continent, usually overnight.

In order to get all the complex routing done properly, network standards were developed, rules and governance was enacted and digital topographic maps were created of all the member BBSs so that software could be created to help facilitate transport.

Phew.

There’s lots of information around the web documenting the rise (and fall) of the best known of these network, Fidonet 🐶. It’s a fascinating story of innovation, problem solving, big personalities, anger management… with more than a dash of hubris.

Must-watch summary of Fidonet from BBS: The Documentary

While Fidonet is actually still around — I carry it on my BBS — its biggest legacy is in its network protocol, which more or less works as designed (even better, no phone bills, multiple lines, etc.) over the Internet.

“FTN-style” simply means that a given network’s topography is based on original “Fidonet technology” — meaning it works much like Fidonet does.

Other network types still kicking it today are ‘QWK’ based (like DOVE-Net) and of course, grandpa usenet; but neither of these are as widely used by modern BBS software as FTN-style networking.

(IMHO — QWKnet is actually much easier to configure for sysops, it’s a shame it doesn’t have more traction…)

But I digress.

So let the digression commence

You know — sitting here, typing this out in 2020, it strikes me as ironic that 1980’s FTN-based networks and BBSs are actually a more modern, ‘decentralized’ approach to delivering on the Internet’s original intent. To me, BBS growing usage (citation needed 😅) reflects a near boiling-point dissatisfaction to what tech companies have done with our precious technology spaces. The Internet was once the biggest decentralized communication innovation humanity had ever seen, full of promise and new horizons. It was a creative revolution, our future’s constant. And it was decentralized, by design.

Decentralization means the Internet is controlled by many. It’s millions of devices linked together in an open network. No one actor can own it, control it, or switch it off for everyone.

Mozilla: “Who Controls the Internet?”

But that’s all changed, hasn’t it? In two decades, we’ve morphed from the Internet's original construct for us, as creators in a system no one controls, to human products and consumers being harvested by a handful of global tech companies.

So, for me, BBSs and these FTN-style networks aren’t just nostalgia, they are a philosophically better foundation for an Internet free from corporate monopoly, keeping it at arms-length from the gatekeepers collecting personal data in order to enrich themselves and turn a blind eye to misinformation, propaganda, hatred and suppression of speech/thought when it suits their bottom line.

Shit, what are we talking about again? Oh yeah. Sorry.

First: get Enigma 1/2 working 🤯

Shocking, right? This article isn’t about your initial install, so make sure you’ve got ENiGMA½ BBS up and running properly. Installation is pretty straightforward using the install.sh script:

The script will install nvm, Node.js and grab the latest ENiGMA BBS from GitHub. It will also guide you through creating a basic configuration file, and recommend some packages to install.

There’s also this helpful video from Al’s Geek Lab if you get stuck with some of any install issues:

Once ENiGMA has been installed, verify that you can start the app (./main.js) and can connect via telnet (even better, with SSH!). Create the first account (your sysop account) — and I’d highly recommend taking the time to install PM2 to start/stop ENiGMA, as well.

All good? You’re ready to wire-up some echomail, baby! Grab a beer and get cracking.

Request your node number

We’re going to use fsxNet for this example (read more about fsxnet here), but this configuration is pretty much the same for any FTN-style network. fsxNet is the “fun, simple, experimental” network and one that’s active around the modern BBS scene. It encourages polite discussion and discourse.

You can also buy cool fsxNet merch here 👕

Original art by RiPuk of force9 BBS in London

Other networks you might want to check out: scinet, agoranet, fidonet, retronet and a whole slew of othernets listed here.

Joining fsxNet is a breeze — to obtain a node number just complete the application form (“FSXNET.TXT”) contained in this infopack zip and email it to avon@bbs.nz. You’ll soon have your own shiny node address, as well as instructions on how to connect to your designated hub/uplink to send and receive mail.

FTN node addresses are like phone numbers, they are made up of multiple components (four usually, but sometimes three and sometimes five).

The main four FTN address components are: Zone, Net, Node, and Point. Each component is specified by a decimal (base-10) number, separated by symbols (no spaces): Zone:Net/Node.Point

- Synchronet Wiki

The Drunken Gamer’s node number is “21:4/158” on fsxNet, which is short for “Zone 21, Net 4, Node 158.”). If I were to setup a second BBS, I could use my first BBS as my very own hub, using a Point address, like “21:4/158.1” — but let’s not get carried away with Point setups just yet!

Echomail vs Netmail

In addition to public discussion areas, user-to-user netmail (often called e-mail, or just mail, not to be confused with actual internet e-mail), can be addressed to any BBS user in the network.

Send a message to “alpha@21:4/158” on any fsxNet member BBS and it’ll ultimately find its way to my inbox on my BBS. Seriously, feel free to send me a test private message!

It’s worth noting that there’s no guarantee that private messages sent via FTNs are actually private. Messages may get routed through multiple systems, and any system operator (aka a sysop) technically has the ability to see/read them. Just so you know.

OK, enough with the explanations. Let’s get to the config!

Setup steps

Here are the key steps we’ll cover, in the order they should be completed:

  1. Make sure Enigma is running without error ✔️
  2. Download the fsxNet infopack ✔️
  3. Complete your fsxNet application to get your node number (We’ll use the test address “21:1/999” while waiting for a permanent address) ✔️
  4. Make edits to Enigma’s config/config.hjson
  5. Run Enigma’s ./oputil.js program to import message areas
  6. Compile Binkd, our message tosser/scanner (we’ll get it from github)
  7. Configure Binkd
  8. Add Binkd to systemd so starts on re-boot
  9. Add a polling event to Enigma’s config.hjson
  10. Make a test post in FSX_GEN

Edit config.hjson

If you’re coming from another BBS package like Mystic or Synchronet, you’ll no doubt be aware that there is no graphics/curses based configuration in Enigma 1/2. It’s still relatively young software, so perhaps that’ll change in the future — but the reality is — you don’t need it.

The “h” in hjson stands for “human.” It’s designed to be easily readable and editable by human beings. Spend some time getting to know config/config.hjson — it’s pretty straightforward, but be aware that typos, forgetting to close a bracket, etc., can prevent Enigma from functioning. Logs are your friend!

Install Bunyan and keep it running in a console window somewhere so you can monitor in real-time:

npm install bunyan -g
tail -F /path/to/enigma-bbs/logs/enigma-bbs.log | bunyan

STEP 1: Edit “messageNetworks” section in config/config.hjson so it resembles the example below. Replace the ‘localAddress’ with your actual node number, if you have one. I’m using the approved fsxNet test address here:

STEP 2: Find “messageConferences” section and add the “fsxnet” section below, after the “local” section. Give it a “sort order” of 2, so it’ll appear in the area menu after Local.

Note, we’re leaving the “areas” section in “fsxnet” empty for now, as we’ll use ./oputil.js later to auto-magically add this in.

STEP 3: find “scannerTossers” section and edit:

  • Change paths as needed 😺
  • We’ll get to what a scanner/tosser is in a bit!
  • Create the mail directory (not sure if Enigma will do this automatically)
mkdir /path/to/enigma-bbs/mail

Run ./oputil.js and import message areas

In the main Eniga directory is a command-line program called ./oputil.js. Refer to the docs for all the cool stuff it can do, but for now, we’re going to use it to import fsxNet’s message areas and auto-wire them up.

STEP ONE: Extract “FSXNET.NA” from the fsxNet infopack zip file. It’s a text file in a special format that lists all the discussion areas available in fsxNet.

STEP TWO: Run ./optutil with the “mb” (message base) option from enigma-bbs directory:

./optutil mb import-areas /path/to/FSXNET.NA
  • select fsxNet as network
  • add your uplink’s hub/node address (usually it’s part of the ‘welcome’ email when you are assigned a node number). Or, use “21:1/100” for testing.
  • Finish!

If it’s successful, ./optutil will add all the fsxnet message areas to your config/config.hsjon file. Login to your BBS and make sure you can see them in the Message Area.

Enter Binkd

Unlike Mystic or Synchronet BBSs, Enigma doesn’t come with its own message mailer program. Without these next steps, your BBS mail will never even leave your system!

From the Enigma 1/2 docs:

The scanner/tosser module ftn_bso provides Binkley Style Outbound (BSO) import/toss and scan/export of messages EchoMail and NetMail messages. Configuration is supplied in config.hjson under scannerTossers.ftn_bso.

ENiGMA½’s ftn_bso module is not a mailer and makes no attempts to perform packet transport! An external mailer such as Binkd is required for this task.

Makes sense, why re-implement a piece of functionality like packet mailing when a good open source standard already exists?

Build & Install Binkd

Let’s get Binkd. We’re going to clone the repo, compile from source, configure it and then make sure it runs every time we restart the machine.

When Binkd is running (in this case, on the default server port 24554), our hub will be able to “crash” mail to us, which simply means the hub will pro-actively deliver messages rather than waiting for us to connect to them.

First, let’s clone a copy of Binkd from Github:

git clone https://github.com/pgul/binkd.git

Then we configure, build and install it:

cd binkd  
cp mkfls/unix/* .
./configure
make -j 4
sudo make install

If it’s successful, Binkd will be installed and you can run it simply by typing “binkd” at the command prompt. It won’t do anything yet.

Get ready to run Binkd

I’ll be running Binkd under the same account my BBS (Node.js/PM2) runs under, so create a couple directories and chown them — change this to whatever username:group you’re running ENiGMA½ from:

sudo mkdir /var/run/binkd  
sudo mkdir /var/log/binkd
sudo chown robbiew:robbiew /var/run/binkd
sudo chown robbiew:robbiew /var/log/binkd

OK, slight hiccup! Note that Ubuntu 18.04 ensures that /var/run/binkd will get deleted every time you reboot your system, and you’ll end up with binkd errors when this happens as it’ll be owned by root.

I use this Stack Overflow approach to create a lil’ helper:

sudo nano /etc/systemd/system/binkd-run.service

Save that, then start the service and make sure it’s working:

sudo systemctl start binkd-run.service

Check the status:

sudo systemctl status binkd-run.service

Make it load on system start-up:

sudo systemctl enable binkd-run.service

Reboot your system and verify that the file /var/run/binkd exists and that your BBS user is the owner. Now you lil’ helper will make sure all is well every time you reboot.

Binkd Config

Binkd requires a config file. I found that 90% of my setup issues usually came down to a typo or mis-configuration in this file.

  • I keep mine in /home/robbiew/enigma-bbs/misc/binkd.conf
  • This example uses fsxNet’s test addresses. Change to your own, and your actual hub’s address/port/password if you have your own node assigned
  • Change paths. I know I’m a broken record on this.
  • Make sure you open up your server’s Binkd port in your firewall (e.g. 24554)

Start Binkd with systemd

We need to make sure Binkd itself starts when the system starts after a reboot. Enter systemd (again).

sudo nano /etc/systemd/system/binkd.service
  • Change yer paths :)

Save that, then start the service and make sure it’s working:

sudo systemctl start binkd.service

Check the status:

sudo systemctl status binkd.service

Make it load on system start-up:

sudo systemctl enable binkd.service

Boom! If all went well, your Binkd server will always be up and running, even when you restart the system.

binkd_poll.sh

Phew, that’s a lot. We’re in the home stretch!

We still need to create a script for ENiGMA½ to use to regularly poll our hub(s) and transport mail:

touch /path/to/enigma-bbs/misc/poll_bink.sh
  • Paths. Change. Them.
  • Change the uplink addresseses to match your assigned hub (I’m using test hub address 21:1/100@fsxnet in this example)

Make poll_bink.sh executable, then execute to test:

chmod +x poll_bink.sh
./poll_bink.sh

If you’ve got any mis-configured things, you’ll get some errors. Check hub addresses, URL and ports, passwords, etc.

Create ENiGMA½ event schedule in config.hjson

We’ve got to add an event to ENiGMA½ built-in event scheduler to make sure we poll our hub(s) on a regular basis.

Find “eventScheduler” section in config/config.hjson and add this event:

  • Pathy path path change

Test!

The best place to test your newly minted message network access is by posting a message in “FSX_GEN — Chat, Testing + More..” Something along the subject lines of “testing my setup!” or “can anyone see this?” or “halp me obi wan” and you’ll usually get a confirmation pretty quickly — or crickets, which means something went wrong.

When that happens, check Binkd’s log (/var/log/binkd) or ENiGMA½ log (/path/to/enigma-bbs/log/enigma.log) and you’ll probably see what went wrong.

AAAAAAAAnd that’s it! Let me know if this was useful, either here or in the BBS ‘verse. Did I screw something up, or get something wrong? Rip me a new one!

Good luck, and have fun BBSing!

Come say ‘whatup?’ at The Drunken Gamer BBS if you get a chance —

http://thedrunkengamer.com:8888 (telnet)

-= Alpha =-

--

--

Alpha

Modern and retro computing, product design and tech.