add --show-config option, update README

This commit is contained in:
John Burwell 2023-04-25 23:54:17 -05:00
parent deae9af4c6
commit ebaa847abd
4 changed files with 103 additions and 25 deletions

View File

@ -3,9 +3,9 @@
A message board for packet radio, suitable for use with ax25d.
Really Simple BBS (`rsbbs`) implements a bulletin board system that enables
radio amateurs to read and store messages at your station. It is similar to the
PBBS function of popular Kantronics TNCs, and it uses similar commands (`B`,
`J`, `K`, `L`, `R`, `S`, `H`, etc.).
radio amateurs to read and store messages at your station. It generally adopts
conventions common to other popular BBS systems, (`B`, `J`, `K`, `L`, `R`, `S`,
`H`, etc.)
It is designed to run on a linux system when called by `ax25d`. That is, when a
user calls your station, `ax25d` answers the call and routes the connection to
@ -14,32 +14,55 @@ user calls your station, `ax25d` answers the call and routes the connection to
## Requirements
In general, you need a linux system with ax25d configured and working. This is
a python 3 application, so you will need python 3 also.
- **AX.25:** It is assumed that you have a radio connected to your host, that
you have configured your axports, and that ax25d can answer calls.
- **Python 3:** As this is a python 3 application, you will need python 3 and
pip.
- **Hardware:** A system capable of running Direwolf and ax25d should be more
than sufficient.
## Installation
Until I publish this thing to PyPI, you can clone it and build it yourself:
Clone this repository and install it with pip:
1. Clone the repo to a reasonable location.
2. `cd` to the repo directory
3. Run `python3 -m pip build .`
4. Run `python3 -m pip install .`
5. Run `rsbbs -h` to test installation and create config and data files.
```
git clone https://git.b-wells.us/jmbwell/rsbbs.git
cd rsbbs
python3 -m virtualenv .venv
source .venv/bin/activate
pip install .
rsbbs -h
```
The config file will be created at first launch.
## Configuration
By default, the `config.yaml` file lives in your system's user config
directory, such as `~/.config/rsbbs/config.yaml`.
directory, such as `~/.config/rsbbs/config.yaml`, as determined by the
`platformdirs` module.
To use a `config.yaml` file from a different location, use the `-f` option:
```
rsbbs -f ~/config.yaml -s KI5QKX
rsbbs -f ~/config.yaml -s <calling station's callsign>
```
If this file is missing, `rsbbs` will create it.
Either way, if the file is missing, `rsbbs` will create it.
The `config.yaml` file is pretty simple and self-explanatory for now.
The `config.yaml` file is pretty simple and self-explanatory for now:
```
bbs_name: John's Really Simple BBS
callsign: HOSTCALL
banner_message: Leave a message!
command_prompt: ENTER COMMAND >
```
> Tip:
> To show the location of the current config file (among other configuration
> options), run:
> ```
> rsbbs --show-config
> ```
## Usage
@ -53,17 +76,25 @@ following to your `ax25d.conf` file:
default * * * * * * * root /usr/local/bin/rsbbs rsbbs -s %U
```
Notes:
- The installation path may vary on your system.
- Be sure to specify the `-s %U` parameters; this passes the ax.25 caller's
callsign to the `rsbbs` application.
> Notes:
> - Specify the full path to the `rsbbs` application.
> - The installation path may vary on your system.
> - If you install it in a virtualenv, specify the path to `rsbbs` in that
> virtualenv's `/bin` directory.
> - Be sure to specify the `-s %U` parameter; this passes the ax.25 caller's
> callsign to the `rsbbs` application.
See the ax25d man page for more details.
See `man ax25d.conf` for more details.
### Directly
You can also run it directly, for administration purposes or just to talk to
yourself. It will not accept calls when run without ax25d.
You can launch it from the command line on your packet station's host, and you
can interact with it just as you would over the air.
This might be useful for administration purposes or just to talk to yourself.
It does not have a standalone mode for taking calls, however -- that's what
ax25d is for.
```
rsbbs -s URCALL
@ -71,7 +102,7 @@ rsbbs -s URCALL
### Options
Run `sbbs -h` to see the following help:
Run `rsbbs -h` to see the following help:
```
usage: rsbbs [-h] [-d] -s CALLING_STATION [-f CONFIG_FILE] [-v]
@ -83,6 +114,7 @@ options:
The callsign of the calling station
-f CONFIG_FILE, --config-file CONFIG_FILE
specify path to config.yaml file
--show-config show the current configuration and exit
-v, --version show program's version number and exit
```
@ -99,8 +131,20 @@ In general, on a macOS or linux system:
3. Create a venv
4. Install it in "editable" mode with `pip install -e .`
For example:
```
git clone https://git.b-wells.us/jmbwell/rsbbs.git
cd rsbbs
python3 -m virtualenv .venv
source .venv/bin/activate
pip install -e .
rsbbs -h
```
## Contributing
Pull requests welcome. If you're not sure where to start:
1. Fork it (<https://git.b-wells.us/jmbwell/rsbbs>)
2. Create your feature branch (`git checkout -b feature/fooBar`)
3. Commit your changes (`git commit -am 'add some fooBar'`)

View File

@ -48,6 +48,13 @@ class Config():
def __getattr__(self, __name: str):
return self.config[__name]
def __repr__(self):
repr = []
repr.append(f"app_name: {self.app_name}\r\n")
repr.append(f"config_file: {self.config_file}\r\n")
repr.append(yaml.dump(self.config))
return ''.join(repr)
@property
def config_file(self):
# Use either the specified file or a file in a system config location

View File

@ -74,6 +74,9 @@ class Console():
"""Write something to stdout."""
sys.stdout.write(output + '\r\n')
def print_configuration(self):
self._write_output(repr(self.config))
def print_greeting(self):
# Show greeting
greeting = []
@ -258,6 +261,11 @@ class Console():
def run(self):
# If asked to show the config, show the config;
if self.config.args.show_config:
self.print_configuration()
exit(0)
# Show greeting
self.print_greeting()

View File

@ -39,8 +39,8 @@ def main():
# [ short, long, action, default, dest, help, required ]
['-d', '--debug', 'store_true', None, 'debug',
'Enable debugging output to stdout', False],
['-s', '--calling-station', 'store', 'N0CALL', 'calling_station',
'Callsign of the calling station', True],
# ['-s', '--calling-station', 'store', 'N0CALL', 'calling_station',
# 'Callsign of the calling station', True],
['-f', '--config-file', 'store', None, 'config_file',
'Path to config.yaml file', False],
]
@ -48,6 +48,25 @@ def main():
argv_parser.add_argument(
arg[0], arg[1], action=arg[2], default=arg[3], dest=arg[4],
help=arg[5], required=arg[6])
group = argv_parser.add_mutually_exclusive_group(required=True)
# Show config option:
group.add_argument(
'--show-config',
action='store_true',
default=None,
dest='show_config',
help="Show the configuration and exit")
# Calling station:
group.add_argument(
'-s',
'--calling-station',
action='store',
default='N0CALL',
dest='calling_station',
help="Callsign of the calling station")
# Version arg is special:
argv_parser.add_argument(