Germinal, a Gemini Protocol server
Germinal is a server for the Gemini Protocol, written in Common Lisp.
It is named after the early 20th century Yiddish-language anarchist newspaper Germinal. I wanted to name it after an anarchist publication to convey the idea of people sharing information and ideas with each other, in contrast to the way the web is used to push advertising from corporations to people. And it happened that Germinal shares some sounds with Gemini.
- Serves any type of document with an appropriate mime type.
- Serves .gmi files as text/gemini, the gemini mapfile format.
- Serves index.gml as a directory listing, if it exists
- Serves a simple directory listing for directories without index.gml
- Serves only world-readable content, much like Gophernicus.
- Configuration by environment variables, command-line, or config file
- Keep up to date with protocol changes
- Logging (though not too much logging)
- authentication by client certificate
- cgi-bin support
This is still a bit of a hack, and if you don’t have a working Common Lisp
development environment, you will probably have trouble getting it running.
build.sh will build a single executable, but unfortunately it
depends on a shared library that will be somewhere in your ~/.cache folder…
You also need to generate a self-signed cert and key. Currently these need to be named cert.pem and key.pem and be stored in the working directory germinal will be run from. This will improve in the future when I write the configuration parts. You can generate the cert like this:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
germinal. It will listen on port 1965 on all interfaces, and serve
/var/gemini/. It will only serve world-readable files,
regardless of what user it is running as.