shithub: 9bbs

ref: c0aa29099d9d1e09c812c2438868ec2091c81ec7
dir: /index.md/

View raw version
9bbs
====

citadel style bbs for plan 9, written in rc

download
--------

[9bbs.tgz](http://plan9.stanleylieber.com/src/9bbs.tgz)

	hg clone https://code.9front.org/hg/9bbs

install
-------

9bbs is started by a [listen(8)](http://man.9front.org/8/listen)
script that runs on an arbitrary port.  The example files included
with this distribution are setup to run on port 666, but may be
modified to suit.  The following instructions assume that a listener
is already scanning the directory `/rc/bin/service` (true by default
for cpu servers).  In this scenario, the 9bbs script will be run as
user `none`, which has special properties limiting its access to
system resources.  Run 9bbs as any user other than `none` at
your own risk.  WARNING: Because user `none` can only read and
write files that are world-accessible, anyone with access to the
file system will be able to read and write files under `etc/`.

First, edit `src/tcp666` to reflect the location of the 9bbs files on
your system, and set any desired options.  Edit `etc/motd` and
`etc/welcome` according to taste.

Next, build and install the programs:

	cd 9bbs/src
	mk install
	cd ..
	mk log
	mk perms	# user who runs this must be a member of group none

Note: 9bbs uses a modified copy of the Plan 9 pager,
[p(1)](http://man.9front.org/1/p).  It is identical in all ways to the
original except that the `!` command for issuing shell commands has been
removed.  The resulting np binary is copied to `$objtype/bin/`, the
tcp666 script is copied to `/rc/bin/service/`, and a log file is created
in `/sys/log/9bbs`.  All other 9bbs files remain within the 9bbs
directory.

All of that completed, 9bbs will now answer telnet connections on port
666.

Suggested: Read the source.

use
---

The following commands have been implemented:

	[0-9]+	print specified message
	b		back
	B		toggle biff
	C		change password
	d [...]		delete message
	D [...]		view, set message delimiter
	>D		truncate message delimiter
	e		enter message
	E [...]		view, set editor (choices: sam, simple)
	f		jump to first message
	g [...]		list rooms with unread messages, go to specified room
	gr		list ten most recently active rooms
	grep [...]	grep messages in current room for regexp
	h, help		print this help message
	k [...]		print roomlist or grep for specified regexp
	l		jump to last message
	L [...]		view, set number of lines to print before engaging pager (enter to continue, q to quit)
	n		next
	p, re [...]		print message with minimal headers
	P [...]		print message with full headers
	r [...]		reply to message
	q		quit
	S [...]		view, set signature
	>S		truncate signature
	t		print current date and time
	u		list users
	w		who is online
	wr		list ten most recently active users
	W [...]		view, set line wrap width
	y		synchronize message list for current room
	z		mark all messages (on the entire bbs) as read
	" [...]		print message in quoted form, suitable for reply
	?		print debug information

rooms
-----

A room is a directory somewhere under `rooms/` that contains at least
one numbered message file.  An example room has been included in the
distribution: `rooms/lobby/`.

To create a room:

	cd 9bbs
	./bin/mkroom roomname

Note: Rooms may be nested.

messages
---------

The message format is as follows:

	To: lobby
	Date: Wed, 31 Dec 1969 19:00:01 EST
	X-Date-N: 1
	
	This is a placeholder message created to bootstrap the system.

todo
----

• `g [room]/[n]` to print message `[n]` in `[room]`.

mailing list
------------

Mainly for announcements.

To subscribe:

	echo subscribe | mail 9bbs-owner@stanleylieber.com

After you're subscribed, messages will arrive from, and may be sent
to, 9bbs@stanleylieber.com.

To unsubscribe:

	echo unsubscribe | mail 9bbs-owner@stanleylieber.com

powered
-------

<http://osuny.bell-labs.co> - telnet port 666, ssh port 999

<http://9til.de> - telnet port 999