2023-08-01 13:34:38 +00: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
|
2023-08-01 13:43:09 +00:00
|
|
|
[`geml.ini`](./geml.ini) as an example.
|
2023-08-01 13:34:38 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
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
|
|
|
|
|
|
|
|
### SBCL
|
|
|
|
|
|
|
|
Start sbcl with proper readline support: `rlwrap sbcl`
|
|
|
|
|
|
|
|
```lisp
|
2023-08-01 17:11:57 +00:00
|
|
|
(ql:quickload "geml")
|
2023-08-01 19:02:27 +00:00
|
|
|
(gemini.server:start-server "/etc/geml/geml.ini")
|
2023-08-01 13:34:38 +00:00
|
|
|
```
|
2023-08-01 17:11:57 +00:00
|
|
|
|
2023-08-01 13:43:09 +00:00
|
|
|
### Standalone Executable
|
2023-08-01 13:34:38 +00:00
|
|
|
|
2023-08-01 17:11:57 +00:00
|
|
|
To get a `geml-server` binary run:
|
|
|
|
|
|
|
|
```sh
|
2023-08-01 19:02:27 +00:00
|
|
|
./build.sh && ./bin/geml-server -h
|
2023-08-01 17:11:57 +00:00
|
|
|
```
|
2023-08-01 13:43:09 +00:00
|
|
|
|
|
|
|
### Systemd
|
|
|
|
|
|
|
|
- [ ] geml.service
|