1
0
forked from aniani/gmnisrv

Documentation

This commit is contained in:
Drew DeVault 2020-09-26 16:43:34 -04:00
parent fc036335eb
commit 0933880b2b
6 changed files with 150 additions and 8 deletions

View File

@ -8,7 +8,10 @@ gmnisrv: $(gmnisrv_objects)
@printf 'CCLD\t$@\n' @printf 'CCLD\t$@\n'
@$(CC) $(LDFLAGS) -o $@ $(gmnisrv_objects) $(LIBS) @$(CC) $(LDFLAGS) -o $@ $(gmnisrv_objects) $(LIBS)
.SUFFIXES: .c .o .scd .1 doc/gmnisrv.1: doc/gmnisrv.scd
doc/gmnisrvini.5: doc/gmnisrvini.scd
.SUFFIXES: .c .o .scd .1 .5
.c.o: .c.o:
@printf 'CC\t$@\n' @printf 'CC\t$@\n'
@ -21,18 +24,27 @@ gmnisrv: $(gmnisrv_objects)
@printf 'SCDOC\t$@\n' @printf 'SCDOC\t$@\n'
@$(SCDOC) < $< > $@ @$(SCDOC) < $< > $@
# TODO: Docs .scd.5:
docs: @printf 'SCDOC\t$@\n'
@true @$(SCDOC) < $< > $@
docs: doc/gmnisrv.1 doc/gmnisrvini.5
clean: clean:
@rm -f gmnisrv $(gmnisrv_objects) @rm -f gmnisrv $(gmnisrv_objects) doc/*.1 doc/*.5
distclean: clean distclean: clean
@rm -rf "$(OUTDIR)" @rm -rf "$(OUTDIR)"
install: all install: all
mkdir -p $(BINDIR) mkdir -p \
$(DESTDIR)$(BINDIR) \
$(DESTDIR)$(SHAREDIR)/gmnisrv \
$(DESTDIR)$(MANDIR)/man5 \
$(DESTDIR)$(MANDIR)/man1
install -Dm755 gmnisrv $(DESTDIR)$(BINDIR)/gmnisrv install -Dm755 gmnisrv $(DESTDIR)$(BINDIR)/gmnisrv
install -Dm644 $(SRCDIR)/config.ini $(DESTDIR)$(SHAREDIR)/gmnisrv/gmnisrv.ini
install -Dm644 doc/gmnisrv.1 $(DESTDIR)$(MANDIR)/man1/gmnisrv.1
install -Dm644 doc/gmnisrvini.5 $(DESTDIR)$(MANDIR)/man5/gmnisrv.ini.5
.PHONY: clean distclean docs install .PHONY: clean distclean docs install

View File

@ -1,3 +1,40 @@
# gmnisrv # gmnisrv
WIP, come back later gmnisrv is a simple [Gemini](https://gemini.circumlunar.space) protocol server.
## Installation
```
$ mkdir build
$ cd build
$ ../configure --prefix=/usr
$ make
# make install
```
## Configuration
By default it reads from `/etc/gmnisrv.ini`, but this can be changed by passing
the `-C` flag to the `gmnisrv` daemon. A sample config.ini is provided at
`/usr/share/gmnisrv/gmnisrv.ini`:
```
# Space-separated list of hosts
listen=0.0.0.0:1965 [::]:1965
[:tls]
# Path to store certificates on disk
store=/var/lib/gemini/certs
# Optional details for new certificates
organization=gmnisrv user
[localhost]
root=/var/www
```
For full details on gmnisrv configuration, consult the *gmnisrv*(5) manual page.
## Usage
See *gmnisrv*(1).

View File

@ -5,7 +5,7 @@ listen=0.0.0.0:1965 [::]:1965
# Path to store certificates on disk # Path to store certificates on disk
store=/var/lib/gemini/certs store=/var/lib/gemini/certs
# Details for new certificates # Optional details for new certificates
organization=gmnisrv user organization=gmnisrv user
[localhost] [localhost]

View File

@ -26,6 +26,9 @@ do
SYSCONFDIR=/etc SYSCONFDIR=/etc
fi fi
;; ;;
--sharedir=*)
SHAREDIR=${arg#*=}
;;
--sysconfdir=*) --sysconfdir=*)
SYSCONFDIR=${arg#*=} SYSCONFDIR=${arg#*=}
;; ;;
@ -138,7 +141,9 @@ run_configure() {
LIBS=$LIBS LIBS=$LIBS
PREFIX=${PREFIX:-/usr/local} PREFIX=${PREFIX:-/usr/local}
OUTDIR=${outdir} OUTDIR=${outdir}
SRCDIR=${srcdir}
BINDIR?=${BINDIR:-\$(PREFIX)/bin} BINDIR?=${BINDIR:-\$(PREFIX)/bin}
SHAREDIR?=${SHAREDIR:-\$(PREFIX)/share}
SYSCONFDIR?=${SYSCONFDIR:-\$(PREFIX)/etc} SYSCONFDIR?=${SYSCONFDIR:-\$(PREFIX)/etc}
LIBDIR?=${LIBDIR:-\$(PREFIX)/lib} LIBDIR?=${LIBDIR:-\$(PREFIX)/lib}
MANDIR?=${MANDIR:-\$(PREFIX)/share/man} MANDIR?=${MANDIR:-\$(PREFIX)/share/man}

25
doc/gmnisrv.scd Normal file
View File

@ -0,0 +1,25 @@
gmnisrv(1)
# NAME
gmnisrv - serve clients over the gemini protocol
# SYNPOSIS
*gmnisrv* [-C _path_]
# DESCRIPTION
*gmnisrv* is a daemon which serves network clients over the gemini protocol. It
requires a config file; by default this shall be read from /etc/gmnisrv.ini
unless the installation was configured with a different SYSCONFDIR or the user
provides the -C flag.
# OPTIONS
*-C* _path_
Specifies an alternate path to read the config file from.
# SEE ALSO
*gmnisrv.ini*(5)

63
doc/gmnisrvini.scd Normal file
View File

@ -0,0 +1,63 @@
gmnisrv.ini(5)
# NAME
*gmnisrv.ini* - configuration file for *gmnisrv*(1)
# SYNTAX
*gmnisrv.ini* is an INI file. Each line is either a key/value pair, or a section
heading. Key/value pairs are specified as key=value, and sections as [section].
# CONFIGURATION KEYS
The meaning of the key depends on the section. Anonymous keys (prior to the
first [section] directive) are used to specify parameters for the daemon itself.
Sections whose name is prefixed with ":", e.g. [:tls], are sub-categories of
the daemon configuration. Otherwise, section names refer to the hostnames of
domains serviced by the *gmnisrv* daemon.
## ANONYMOUS KEYS
*listen*
A space-separated list of addresses that the daemon shall bind to. Each
address shall take the format *address*:*port*. If :*port* is omitted,
1965 (the default Gemini port) is presumed. To specify an IPv6 address,
enclose it in *[]*, e.g. *[::]*.
## TLS KEYS
The following keys are accepted under the *[:tls]* section:
*store*
Path to the certificate store on disk. This should be a persistent
directory writable by the daemon. The daemon manages its own
certificates - no user intervention is required, except in the case of
moving the daemon to another host, in which case the certificate store
must be copied to the new host.
*organization*
An optional key used during certificate generation. Fill this in with
the name of the organization responsible for the host and it will be
filled in as the X.509 /O name.
## HOST KEYS
Hosts that *gmnisrv* is to serve shall be defined in *gmnisrv.ini* by
introducing config sections named after each host to provide service for. The
following keys apply:
*root*
Configures the path on disk from which files shall be served for this
host.
*index*
Configures the name of the index file which shall be served in the event
that a request for this host does not include the filename part.
Defaults to "index.gmi".
*autoindex*
"on" to enable the auto-index feature, which presents clients with a
list of files in the requested directory when an index file cannot be
found. Off by default.