2021-01-11 13:51:25 +01:00
|
|
|
# gmid
|
2020-10-02 19:39:00 +02:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
> dead simple, zero configuration Gemini server
|
2020-10-02 19:39:00 +02:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
gmid is a simple and minimal Gemini server. It requires no
|
|
|
|
configuration whatsoever so it's well suited for local development
|
|
|
|
machines.
|
2020-10-02 19:39:00 +02:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
Care has been taken to assure that gmid doesn't serve files outside
|
|
|
|
the given directory, and it won't follow symlinks. Furthermore, on
|
|
|
|
OpenBSD, gmid is also `pledge(2)`ed and `unveil(2)`ed: the set of
|
|
|
|
pledges are `stdio rpath inet`, with the addition of `proc exec` if
|
|
|
|
CGI scripts are enabled, while the given directory is unveiled with
|
|
|
|
`rx`.
|
2020-10-02 19:39:00 +02:00
|
|
|
|
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
## Features
|
2020-10-02 19:39:00 +02:00
|
|
|
|
2021-01-13 20:06:51 +01:00
|
|
|
- IRI support (RFC3987)
|
2021-01-11 13:51:25 +01:00
|
|
|
- dual stack: can serve over both IPv4 and IPv6
|
|
|
|
- CGI scripts
|
|
|
|
- (very) low memory footprint
|
|
|
|
- small codebase, easily hackable
|
|
|
|
- virtual hosts
|
2021-01-15 15:03:45 +01:00
|
|
|
- sandboxed on OpenBSD and FreeBSD
|
2020-10-02 19:39:00 +02:00
|
|
|
|
2020-10-03 17:49:09 +02:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
## Drawbacks
|
2020-10-02 19:39:00 +02:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
- not suited for very busy hosts. If you receive an high number of
|
|
|
|
connection per-second you'd probably want to run multiple gmid
|
|
|
|
instances behind relayd/haproxy or a different server.
|
2021-01-11 13:08:50 +01:00
|
|
|
|
2021-01-15 15:03:45 +01:00
|
|
|
- the sandbox on FreeBSD is **NOT** activated if CGI scripts are
|
|
|
|
enabled: CGI script cannot be used with the way `capsicum(4)` works
|
|
|
|
|
2021-01-11 13:08:50 +01:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
## Building
|
2020-10-02 19:39:00 +02:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
gmid depends a POSIX libc and libtls. It can probably be linked
|
|
|
|
against libretls, but I've never tried.
|
2020-10-02 19:39:00 +02:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
See [INSTALL.gmi](INSTALL.gmi) for more info, but the build is as
|
|
|
|
simple as
|
2020-10-02 19:39:00 +02:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
make
|
2020-10-02 19:39:00 +02:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
The Makefile isn't able to produce a statically linked executable
|
|
|
|
(yet), so for that you have to execute by hand
|
2020-12-02 21:18:01 +01:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
make
|
|
|
|
cc -static *.o /usr/lib/lib{crypto,tls,ssl}.a -o gmid
|
|
|
|
strip gmid
|
2020-12-26 00:37:43 +01:00
|
|
|
|
2021-01-11 13:51:25 +01:00
|
|
|
to enjoy your ~2.3M statically-linked gmid.
|