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.
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.
Download the most recent build from mbbsemu.com and extract the files into a directory of your choosing. I use /doors/MBBS/mbbsemu.
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.
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)
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.
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.
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:
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.
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’.
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!