# 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`](./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 ```sh 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`. ```sh 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: ```sh sudo make uninstall make clean ``` ### SBCL Start sbcl with proper readline support: `rlwrap sbcl` ```lisp (ql:quickload "geml") (gemini.server:start-server "/etc/geml/geml.ini") ```