BBS Related
May 19, 2022
Running MajorBBS/Worldgroup Modules With Synchronet
by: Underminer

Time for a Major decrease in hassle


For those hobbyists who have a fondness for text based terminal interactions and games, experimenting with old BBS packages and software over telnet or SSH is a regular occurrence. Regardless of the operating system or hardware in use though, there’s an entire category of games and utilities that do not play well with any other BBS package. Those familiar (or who just read the title of the article) immediately know that I’m of course talking about modules for MajorBBS and Worldgroup. Rather than being standalone executables like most door software, these modules are compiled and run directly by the BBS software itself. Traditionally the only way around this is to run a full MajorBBS or Worldgroup instance as a parallel board of some denomination. That’s a process that can be both frustrating, and potentially costly. Fortunately, there is a fairly recent and modern project called MBBSEmu that seeks to be an easy standalone solution for hosting and running those elusive modules. I recently played with it to add a couple modules to my Syncrhonet board, and while not a difficult process I did find a couple gotchas along the way and decided to document the process.

 

*SUPER IMPORTANT NOTES AND DISCLAIMER*

In my walkthrough and examples I’m using a LXC container under proxmox that runs as root. Do NOT run as root unless you are using a sandboxed or otherwise virtualized environment with regular backups you can easily restore, and you are very familiar with how to lock down various permissions to that container. There are a multitude of security issues introduced by doing so otherwise. If I were running a system with other services or user access I would be inclined to put such directories within the home directory.

 

1 - Prepare prerequisites:
  • We’re using a linux distribution with systemd (debian), if your distribution uses a different init system you will have to make adjustments to the steps presented here.
  • Ensure your Synchronet board is working and can accept “calls.”
  • Install tmux.

 

2 - Download and Extract Software

Download the most recent build from mbbsemu.com and extract the files into a directory of your choosing. I use /doors/MBBS/mbbsemu.

 

3 - Change Permissions

Change to the directory and run “chmod +x MBBSEmu” to add the executable flag to the executable. Otherwise you may not be able to run it.

 

4 - Main Configuration

Edit appsettings.json Mine looks like this:

{

  "BBS.Title": "The Undermine",

  "BBS.Channels": "42",

  "Cleanup.Time": "03:00",

  "Module.DoLoginRoutine": "True",

  "Telnet.Enabled": "False",

  "Telnet.Port": "23",

  "Telnet.Heartbeat": "False",

  "Rlogin.Enabled": "True",

  "Rlogin.Port": "555",

  "Rlogin.RemoteIP": "127.0.0.1",

  "Rlogin.PortPerModule": "True",

  "Database.File": "mbbsemu.db",

  "Btrieve.CacheSize": 4,

  "Account.DefaultKeys": [

    "DEMO",

    "NORMAL",

    "USER",

    "PAYING"

  ]

}

 

Make the appropriate changes for your board. Here’s a couple things to consider when doing so:

We don’t need or want telnet enabled as we will be using Rlogin for our purposes. Disabling it saves the headaches of having extra open ports to remember

You want to set the Rlogin port outside of the usual range and to a number that has a bit of headroom. The stated port will be your full fat/admin connection, then each module will use a port to connect, so if you have 2 modules you’ll be opening 3 sequential ports (555, 556, 557 if you used the example above)

 

5 - Download and Extract Modules

Download and extract a module or two. There are a few that have been cleaned up for use with MBBSEmu on the mbbsemu.com website, so that’s the easy starting point until you are familiar. For this example we’re using tele-arena and majormud. I’ve extracted them to ‘/doors/MBBS/TSGARN’ and ‘/doors/MBBS/WCCMMUD’ respectively.

 

6 - Module Configuration

Edit modules.json. Mine looks like this:

{

  "Modules": [

    {

      "Identifier": "TSGARN",

      "Path": "/doors/MBBS/TSGARN",

      "Enabled": 1

    },

    {

      "Identifier": "WCCMMUD",

      "Path": "/doors/MBBS/WCCMMUD",

      "Enabled": 1

    }

  ]

}

 

* Note that the “Identifier” must match the filename of the provided .MDF file in the directory and is not a configurable name.

 

7 - Configure Synchronet

Add entries to scfg. Go to your external programs(doors) section and add two entries. Name them appropriately and use ‘?rlogin 127.0.0.1:556’ and ‘?rlogin 127.0.0.1:557’ respectively for the commands. The entries should look something like this:

 

8 - Test

Test that things are generally working.

Run ‘./MBBSEmu -C modules.json’ from your mbbsemu directory, and test that you can connect to both modules from a terminal in synchronet. If you’ve made a typo of some sort, the error messages mbbsemu gives are generally not too cryptic.

 

9 - Setup Initialization

Assuming all is working, create a systemd service to manage mbbsemu for you.

Run ‘nano /etc/systemd/system/mbbsemu.service’ and use this example, or tweak for your needs

[Unit]

Description=MBBS Emulator

After=syslog.target network.target

 

[Service]

Type=forking

Restart=always

ExecStart=/usr/bin/tmux new-session -d -s mbbsemu './MBBSEmu -C modules.json'

ExecStop=/usr/bin/tmux send-keys -t mbbsemu C-c

User=root

Group=root

WorkingDirectory=/doors/MBBS/mbbsemu/

 

[Install]

WantedBy=multi-user.target

 

Run ‘systemctl daemon-reload’ followed by ‘systemctl enable mbbsemu’ and then ‘systemctl start mbbsemu’

You can ensure things are running and see the output by connecting to the tmux session with ‘tmux attach -t mbbsemu’

Detach from the tmux session by pressing ‘ctrl-b’ followed by ‘d’.

 

Complete

That’s it! If everything is working, you now have the ability to run MajorBBS modules without the headache of maintaining a second board! Good luck, and have fun!