gmid/gmid.1

238 lines
5.4 KiB
Groff
Raw Normal View History

2022-01-02 17:37:07 +01:00
.\" Copyright (c) 2021, 2022 Omar Polo <op@omarpolo.com>
2020-10-02 19:39:00 +02:00
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
.\" copyright notice and this permission notice appear in all copies.
.\"
.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.Dd $Mdocdate: April 7 2022$
.Dt GMID 1
2020-10-02 19:39:00 +02:00
.Os
.Sh NAME
.Nm gmid
2021-01-30 12:49:27 +01:00
.Nd simple and secure Gemini server
2020-10-02 19:39:00 +02:00
.Sh SYNOPSIS
.Nm
.Bk -words
2021-02-04 15:38:37 +01:00
.Op Fl fnv
.Op Fl c Ar config
2021-06-29 16:19:35 +02:00
.Op Fl D Ar macro Ns = Ns Ar value
2021-04-28 14:45:22 +02:00
.Op Fl P Ar pidfile
2021-02-04 15:38:37 +01:00
.Ek
.Nm
.Bk -words
.Op Fl 6hVv
.Op Fl d Ar certs-dir
.Op Fl H Ar hostname
2020-11-18 09:12:27 +01:00
.Op Fl p Ar port
.Op Fl x Ar cgi
.Op Ar dir
2020-10-02 19:39:00 +02:00
.Ek
.Sh DESCRIPTION
.Nm
2021-05-24 11:07:28 +02:00
is a simple and minimal gemini server that can serve static files,
execute CGI scripts and talk to FastCGI applications.
It can run without a configuration file with a limited set of features
available.
2020-10-02 19:39:00 +02:00
.Pp
2021-02-04 14:34:27 +01:00
.Nm
rereads the configuration file when it receives
.Dv SIGHUP .
.Pp
The options are as follows:
.Bl -tag -width 14m
.It Fl c Ar config
Specify the configuration file.
2021-06-29 16:19:35 +02:00
.It Fl D Ar macro Ns = Ns Ar value
Define
.Ar macro
to be set to
.Ar value
on the command line.
Overrides the definition of
.Ar macro
in the config file if present.
.It Fl f
Stays and logs on the foreground.
.It Fl n
Check that the configuration is valid, but don't start the server.
If specified two or more time, dump the configuration in addition to
verify it.
.It Fl P Ar pidfile
Write daemon's pid to the given location.
2021-07-09 10:01:22 +02:00
.Ar pidfile
will also act as lock: if another process is holding a lock on that
file,
2021-04-28 14:45:22 +02:00
.Nm
2021-07-09 10:01:22 +02:00
will refuse to start.
.El
2020-10-02 19:39:00 +02:00
.Pp
If no configuration file is given,
2020-10-03 17:49:09 +02:00
.Nm
2021-12-02 09:32:47 +01:00
runs in
.Dq config-less mode
.Pq i.e. runs in the foreground to serve a directory from the shell
and looks for the following options
.Bl -tag -width 14m
.It Fl 6
Enable IPv6.
.It Fl d Ar certs-path
Directory where certificates for the config-less mode are stored.
By default it is
.Pa $XDG_DATA_HOME/gmid ,
i.e.
.Pa ~/.local/share/gmid .
2021-01-25 15:32:16 +01:00
.It Fl H Ar hostname
2021-07-09 10:01:22 +02:00
The hostname
.Po
2021-07-09 10:01:22 +02:00
.Ar localhost
by default
.Pc .
Certificates for the given
.Ar hostname
are searched inside the
.Ar certs-dir
directory given with the
.Fl d
option.
2021-01-30 12:49:27 +01:00
They have the form
.Pa hostname.cert.pem
and
.Pa hostname.key.pem .
If a certificate or a key doesn't exist for a given hostname, they
will be generated automatically.
.It Fl h , Fl -help
2020-10-03 17:49:09 +02:00
Print the usage and exit.
2020-11-18 09:12:27 +01:00
.It Fl p Ar port
The port to listen on, by default 1965.
.It Fl V , Fl -version
Print the version and exit.
2021-01-28 00:14:16 +01:00
.It Fl v
2021-02-07 16:30:28 +01:00
Verbose mode.
Multiple
.Fl v
options increase the verbosity.
.It Fl x Ar path
Enable execution of
.Sx CGI
scripts.
See the description of the
.Ic cgi
option in the
.Sq Servers
section below to learn how
.Ar path
is processed.
Cannot be provided more than once.
.It Ar dir
The root directory to serve.
By default the current working directory is assumed.
.El
2021-07-29 06:13:43 +02:00
.Sh LOGGING
Messages and requests are logged by
.Xr syslog 3
using the
.Dv DAEMON
facility or printed on
.Em stderr .
.Pp
Requests are logged with the
.Dv NOTICE
severity.
Each request log entry has the following fields, separated by
whitespace:
.Pp
.Bl -bullet -compact
.It
Client IP address and the source port number, separated by a colon
.It
.Sy GET
keyword
.It
Request URL
.It
Response status
.It
Response meta
.El
2020-10-02 19:39:00 +02:00
.Sh EXAMPLES
Serve the current directory
.Bd -literal -offset indent
$ gmid .
.Ed
2020-10-02 19:39:00 +02:00
.Pp
To serve the directory
.Pa docs
and enable CGI scripts inside
2021-07-09 10:01:22 +02:00
.Pa docs/cgi
2020-11-06 18:11:45 +01:00
.Bd -literal -offset indent
$ mkdir docs/cgi
2021-04-15 22:14:18 +02:00
$ cat <<EOF > docs/cgi/hello
2020-11-06 18:11:45 +01:00
#!/bin/sh
printf "20 text/plain\er\en"
echo "hello world"
2020-11-06 18:11:45 +01:00
EOF
$ chmod +x docs/cgi/hello
2021-03-20 12:46:12 +01:00
$ gmid -x '/cgi/*' docs
2020-11-06 18:11:45 +01:00
.Ed
.Pp
An X.509 certificate must be provided to run
.Nm
using a configuration file.
First, the RSA certificate is created using a wildcard common name:
.Bd -literal -offset indent
# openssl genrsa \-out /etc/ssl/private/example.com.key 4096
# openssl req \-new \-x509 \e
\-key /etc/ssl/private/example.com.key \e
\-out /etc/ssl/example.com.crt \e
\-days 36500 \-nodes \e
\-subj "/CN=example.com"
# chmod 600 /etc/ssl/example.com.crt
# chmod 600 /etc/ssl/private/example.com.key
.Ed
.Pp
In the example above, a certificate is valid for one hundred years from
the date it was created, which is normal for TOFU.
.Pp
Then, to run
.Nm
as a daemon:
.Bd -literal -offset indent
$ gmid -c /etc/gmid.conf
.Ed
.Sh SEE ALSO
.Xr gmid.conf 5
.Sh ACKNOWLEDGEMENTS
.Nm
uses the
.Dq Flexible and Economical
UTF-8 decoder written by
.An Bjoern Hoehrmann .
2021-01-30 12:49:27 +01:00
.Sh AUTHORS
.An -nosplit
The
.Nm
program was written by
.An Omar Polo Aq Mt op@omarpolo.com .
2020-10-02 19:39:00 +02:00
.Sh CAVEATS
.Bl -bullet
.It
2021-07-09 10:01:22 +02:00
All the root directories are opened during the daemon startup; if a
root directory is deleted and then re-created,
.Nm
won't be able to serve files inside that directory until a restart.
2021-07-09 10:01:22 +02:00
This restriction only applies to the root directories and not their
content.
2020-12-25 13:15:15 +01:00
.It
2021-01-30 12:49:27 +01:00
a %2F sequence is indistinguishable from a literal slash: this is not
RFC3986-compliant.
2020-12-26 00:37:43 +01:00
.It
2021-01-30 12:49:27 +01:00
a %00 sequence is treated as invalid character and thus rejected.
2020-10-02 19:39:00 +02:00
.El