Gemini server written in Common Lisp
Go to file
2023-08-01 14:28:09 -06:00
src nit 2023-08-01 14:28:09 -06:00
.editorconfig Makefile and -v flag 2023-08-01 13:41:08 -06:00
.gitignore unix-opts 2023-08-01 13:02:27 -06:00
build.lisp unix-opts 2023-08-01 13:02:27 -06:00
geml.asd build 2023-08-01 11:11:57 -06:00
geml.ini update readme 2023-08-01 07:43:09 -06:00
geml.service make install 2023-08-01 14:14:16 -06:00
LICENSE Create LICENSE 2021-11-14 10:29:50 -06:00
Makefile nit 2023-08-01 14:28:09 -06:00
packages.lisp build 2023-08-01 11:11:57 -06:00
README.md make install 2023-08-01 14:14:16 -06:00

geml

Gemini server written in Common Lisp

/etc/geml/geml.ini

geml requires cert and key to be configured before it will run. And will have nothing to serve until you configure at least one domain and root. See geml.ini as an example.

cert = /var/lib/geml/localhost.crt
key = /var/lib/geml/localhost.key

[my.gmi.capsule]
root = /srv/gmi

Generate Self-Signed SSL Certificate

  • include/write helper script for this
openssl req -x509 \
  -out localhost.crt \
  -keyout localhost.key \
  -newkey rsa:2048 \
  -nodes \
  -sha256 \
  -subj '/CN=localhost' \
  -extensions EXT \
  -config <(printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

Usage

Standalone Executable

To get an executable bin/geml-server run make.

make && bin/geml-server -h

Systemd

Install the build to /usr/local/bin/geml-server with sudo make install which will also wire up systemd so you can sudo systemctl enable --now geml

You'll need to sudo systemctl restart geml whenever you update /etc/geml/geml.ini... you did do that didn't you?

yeet it

To undo all that run these:

sudo make uninstall
make clean

SBCL

Start sbcl with proper readline support: rlwrap sbcl

(ql:quickload "geml")
(gemini.server:start-server "/etc/geml/geml.ini")