gmid/README.md

56 lines
1.5 KiB
Markdown
Raw Normal View History

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-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: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
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.