fsxNet

a fun, simple and experimental network

User Tools

Site Tools


tutorials:bbs:titan

Titan BBS

:!: Abandoned Project

The software was written by Andrew Pamment (apam), development has ceased and he is is now working on Talisman BBS.

Titan BBS was an experimental BBS written in C++ for Linux and Windows. It utilized parts of C++17 found in Visual Studio 2019 (and recent versions of Visual Studio 2017) and GCC 8+. On Linux CMake was used to configure.

Titan used sqlite3 for messages, user bases, file bases etc. It came with it's own FTN message tosser (TitanFTN).

Titan also relied on third party utilities for some features. SEXYZ for file transfers and InfoZIP for archiving.

Titan was configured using JSON files. Art files for menus etc are plain text files which can include special CTRL-A codes for colour for those users that want to use it. A utility ans2ctrla is included to convert .ANS files to CTRL-A text files.

Installing Titan on Linux

Building Titan BBS

Prerequisites:

  • GCC 8 or Clang 7 or higher
  • libssh + development headers
  • libsqlite3 + development headers
  • Info ZIP and UNZIP
  • SEXYZ
  • CMake
  • Git

Titan uses the C++17 filesystem library, and will therefore require GCC 8 or higher, or clang 7 or higher.

Step 1. Clone the repository

  git clone https://gitlab.com/apamment/Titan.git

Step 2. Build Titan

  cd Titan/Titan
  mkdir build
  cd build
  cmake ..
  make

Create Titan Files & Directorys

Create somewhere to store your data files. For example: /home/user/bbs

  mkdir /home/user/bbs

Copy the gfiles directory from Titan/Titan to /home/user/bbs

  cp -r ../Titan/Titan/gfiles /home/user/bbs
  

Create other needed directories

  mkdir /home/user/bbs/dbs
  mkdir /home/user/bbs/temp
  mkdir /home/user/bbs/keys
  mkdir /home/user/bbs/logs

Create SSH keys

  ssh-keygen -f /home/user/bbs/keys/ssh_host_rsa_key -N '' -t rsa
  ssh-keygen -f /home/user/bbs/keys/ssh_host_dsa_key -N '' -t dsa

Configure Titan using the paths above.

Installing Titan on Windows

Download the latest installer snapshot from ??

Run the installer.

Answer the questions.

Configuring Titan is done with a single JSON file.

Configuring Titan

Main

  • MaxNodes The Maximum number of nodes the system supports
  • TelnetPort The Port to listen for Telnet Connections
  • RloginPort The Port to listen for rlogin connections
  • SSHPort The Port to listen for SSH connections
  • SystemName Your BBS Name
  • SysopName The USERNAME of the sysop account
  • LogLevel The level of severity to use for the log file

Paths

  • GFiles Path to the directory where txt files sent as menus are stored
  • Databases Path to database files
  • Temp Path to node directories where temporary files are placed.
  • SEXYZ Path and Filename of SEXYZ, used for file transfers.
  • ExternalEditor Path and Filename of a batchfile/script that will launch an external editor.
  • SSHRSAKey Path and filename of SSH Host RSA key
  • SSHDSAKey Path and filename of SSH Host DSA key
  • LogFile Path and filename of Log file
  • MailSemaphore Path and filename of semaphore to create when a mail is entered.

MessageBases

  • name The name of the message base.
  • id The id used for the message base in the database.
  • readlevel The security level a user must be to read the base.
  • writelevel The security level a user must be to post (or reply).

MessageConferences

  • name The name of the message conference.
  • id The id used for the message conference in the database.
  • areas an array of message base ids
  • accesslevel The security level a user must be to see the message conference.

Doors

  • name The name of the door.
  • hotkey The hotkey to press on the door menu to launch the door.
  • command The name of a batch file/script to launch the door.
  • accesslevel The security level a user must be to launch the door.

Note: Batch files and scripts used for doors and the external editor are passed 2 arguments, the first is the node number, the second is the socket. The socket is unused on Linux, as it only supports stdio doors on that platform.

FileBases

  • index Index of the filebase must be unique
  • name The name of the file base
  • filepath The path to the actual files for this filebase (used for uploads)
  • database The path and filename of the database in which the file entries are stored.
  • uploadlevel The security level a user must be to upload from this area.
  • downloadlevel The security level a user must be to download from this area.

TextFiles

  • title The title of the text file
  • filepath The path and filename of the text file to display.
  • pause True to use a pause prompt, false to not.
  • hotkey The hotkey used to display the text file from the Text file menu.
  • accesslevel The security level a user must be to view this text file.

Example Configuration File

{
  "Main": {
     "MaxNodes": 5,
     "TelnetPort": 23,
     "RloginPort": 513,
     "SSHPort": 22,
     "SystemName": "A New Titan BBS",
     "SysopName": "Sysop",
     "LogLevel": "Info"
  },
  "Paths": {
     "GFiles": "C:/bbs/gfiles",
     "Databases": "C:/bbs/dbs",
     "Temp":  "C:/bbs/temp",
     "SEXYZ": "C:/bbs/sexyz.exe",
     "ExternalEditor": "C:/bbs/doors/oedit.bat",
     "SSHRSAKey": "C:/bbs/keys/ssh_host_rsa_key",
     "SSHDSAKey": "C:/bbs/keys/ssh_host_dsa_key",
     "LogFile": "C:/bbs/logs/Titan.log",
     "MailSemaphore": "C:/bbs/mail.out"
  },
  "MessageBases": [
     {
        "name": "General",
        "readlevel": 10,
        "writelevel": 10,          
        "id": 0          
     },
     {
        "name": "Testing",
        "readlevel": 10,
        "writelevel": 10,          
        "id": 1
     },
     {
        "name": "General",
        "readlevel": 10,
        "writelevel": 10,          
        "id": 100
     },
     {
        "name": "BBS Discussion",
        "readlevel": 10,
        "writelevel": 10,          
        "id": 101
     },
     {
        "name": "Mystic Discussion",
        "readlevel": 10,
        "writelevel": 10,          
        "id": 102
     },
     {
        "name": "Magicka Discussion",
        "readlevel": 10,
        "writelevel": 10,          
        "id": 103
     },
     {
        "name": "ENiGMA 1/2 Discussion",
        "readlevel": 10,
        "writelevel": 10,          
        "id": 104
     },
     {
        "name": "Cryptographic Posts",
        "readlevel": 10,
        "writelevel": 10,          
        "id": 105
     },
     {
        "name": "Automated RoBOT Posts",
        "readlevel": 10,
        "writelevel": 10,          
        "id": 106
     }
   ],
   "MessageConferences": [
     {
        "name": "Local Mail",
        "id": 0,
        "accesslevel": 10,
        "areas": [ 0, 1 ]
     },
     {
        "name": "FSXNet",
        "id": 2,
        "accesslevel": 10,          
        "areas": [ 100, 101, 102, 103, 104, 105, 106 ]
     }
   ],
   "Doors": [
     {
        "name": "Galactic Dynasty",
        "hotkey": "1",
        "accesslevel": 10,          
        "command":  "C:/bbs/doors/gd.bat"
     },
     {
        "name": "For Honour",
        "hotkey": "2",
        "accesslevel": 10,          
        "command": "C:/bbs/doors/fh.bat"
     }
   ],
   "FileBases": [
     {
        "index": 1,
        "name": "General Files",
        "filepath": "C:/bbs/files/general",
        "database": "C:/bbs/files/general.db3",
        "uploadlevel": 10,
        "downloadlevel": 10
     },
     {
        "index": 2,
        "name": "BBS Related Files",
        "filepath": "C:/bbs/files/bbs",
        "database": "C:/bbs/files/bbs.db3",
        "uploadlevel": 10,
        "downloadlevel": 10          
     }
   ],
   "TextFiles": [
     {
        "title": "AF Downs Scores",
        "filepath": "C:/bbs/doors/afdowns2/scores.txt",
        "pause": "true",
        "accesslevel": 10,          
        "hotkey": "1"
     },
     {
        "title": "AF Slots Scores",
        "filepath": "C:/bbs/doors/afslots2/scores.txt",
        "pause": "true",
        "accesslevel": 10,
        "hotkey": "2"
     }	
   ]
 }
tutorials/bbs/titan.txt · Last modified: 31/10/2022 08:00 by avon