A FreeBSD port of the venerable N0ARY packet radio BBS, which was originally written for SunOS.
To compile N0ARY in its current form you will need GNU Make (gmake) version 3.11 or later.
Before compiling the BBS you will need to edit src/include/site_config.mk
to specify two important options: the target operating system and the BBS
install directory.
You must edit src/include/site_config.mk
to tell the build system which
operating system you are running. There are two choices: FreeBSD or SunOS.
-
FreeBSD
To compile for FreeBSD, make your site_config.mk read:
FREEBSD=1
-
SunOS
To compile for SunOS it is first assumed that you will be cross-compiling for SunOS, because there is no way you'd be able to get modern GMake to run on SunOS. (If you do, let me know!).
To cross compile for SunOS, make your site_config.mk first read:
SUNOS=1
Further cross-compilation instructions to be written
The BBS requires its own dedicated directory on the host filesystem and to
correctly install it, the final "make install" rules need to know where this
directory is. To set it up, edit src/include/site_config.mk
and set the
BBS_DIR
variable:
BBS_DIR=<bbs-home-directory>
One example would be /usr/home/bbs
To compile the BBS:
cd src/
gmake
To install the BBS and get it running you'll need to take several steps, each of which is detailed below. As a general outline, though, you'll need to:
- Install the BBS binaries and scripts.
- Establish a UNIX user for the BBS to run as.
- Edit the BBS "Config" file and ensure that "BBS_DIR" is correct.
- Run the bbs "bootstrap" script to set up the BBS for the first time.
- If you'll be using TNCs, set up TNC device permissions and make them stick.
- Make edits to the system to ensure the BBS starts up at boot.
Let's describe each of these steps in detail.
After compiling all of the BBS you are ready to install the binaries and other utilities. Do so by running
cd src/
gmake install
Next you'll need to ensure your system has a non-privileged user for the
BBS processes to run under. It's best if you use bbs
.
Next you'll need to get a basic Config file for the BBS set up.
To begin, you should probably copy <bbs-dir>/etc/Config.sample
to <bbs-dir>/etc/Config
and then edit it.
There are many comments inside the sample configuration file for setting things up, but at this stage the most important thing to ensure is that the "BBS_DIR" setting is correct.
After you have the Config file in place and ensured that "BBS_DIR" is set correctly within it, you're ready to run the "bootstrap" script to make sure that the BBS's various sub-directories and database files are initialized.
-
Ensure that the BBS_DIR directory is owned by the
bbs
user and its permissions are set up so that thebbs
user can create sub-directories under it. (-rwxr-xr-x
). -
Become the BBS user (
sudo su -m bbs
). -
Run the bootstrap script, pointing it at the BBS config file:
/usr/local/libexec/bbs-init.sh <bbs-dir>/etc/Config
If you intend to have the BBS use serially-connected TNCs (radio modems) then you need to ensure that the bbs "user" has the ability to interact with the serial port devices you've configured in the configuration file. This will require your intervention to set up because most UNIX operating systems do not, by default, allow non-root users to access serial ports at will.
(Note: this section does not apply if you have configured the BBS to connect to a network terminal server to access the TNCs. That access is controlled via the networking stack and/or system firewall).
When running under FreeBSD you can ensure that the BBS user is granted serial port access by modifying the configuration file(s) that control device setup at boot time. There are two ways to control device access under FreeBSD:
-
Through the "devfs" rules, which are loaded at boot time and are interpreted by the FreeBSD kernel (see devfs.rules(5)), and
-
Through the "devd.conf" configuration file, which controls the "devd" device daemon (devd(8)).
It's outside the scope of this document to fully describe these two methods,
but as an example, here's a sample devfs.rules
file for method #1. It
ensures that the devices /dev/cuaU0
, /dev/cuaU1
, /dev/cuaU2
and
/dev/cuaU3
are all "owned" by the bbs
user and have appropriate read/write
permissions before the BBS starts up:
[localrules=100]
# Ensure that the serial ports for tnc0, 1, 2 and 3 are owned by
# the BBS.
add path "cuaU[0-3]" mode 0660 user bbs group dialer
The last step in setting up the BBS is to ensure that it starts up at system boot (or, alternatively, starts up manually when you ask for it).
The BBS comes with an etc/rc.d style BSD startup script which will
automatically start up the BBS when the system starts up, provided you setup
/etc/rc.conf
to do so. To simply enable BBS startup set:
n0ary_bbs_enable=YES
Some additional variables you can set are:
-
n0ary_bbs_dir=
n0ary_bbs_dir
tells the startup scripts where the BBS home directory is, but it generally needn't be set unless you move the BBS to a different directory than the one you set insite_config.mk
at build time. -
n0ary_bbs__user=
NOTE: TWO UNDERSCORES BETWEEN
bbs
anduser
. Do not accidentally only use one or the system will fail to start up.The BBS is a federation of several daemons that run in the background. For system security, these daemons should run as an unpriviledged user. The startup script will arrange for the daemons to run under the user id of the username you provide here. The default is
bbs
, which you should have set up previously during the installation step.