Agate

Agate - проверенный временем сервер статики для Gemini, написанный на языке Rust. В отличии от gmid, в виду особенностей реализации rustls (и ограничений RFC 6066 в частности) не имел поддержки «сырых» адресов IPv6 и требовал наличия Alfis DNS или meshname.

С недавних пор, в рамках PR#433 появилась экспериментальная ветка, которая реализует fallback SNI: то есть, позволяет указывать общий сертификат-заглушку, применимую для меш-сетей, например Yggdrasil и/или Mycelium. Ниже рассмотрен пример её установки и использования.

Установка

git clone https://github.com/YGGverse/agate.git
cd agate
git checkout fallback-sni
cargo build --release
sudo install target/release/agate /usr/local/bin

Сервер Agate имеет ряд особенностей при работе в мульти-хост режиме. Наиболее простой вариант запуска для наших целей - автоматическое создание в первую очередь сертификатов для хостов .ygg, .i2p и т.д., если предусмотрено их использование. Для этого, сначала следует выполнить инициальный запуск с терминала, указав аргумент(ы) --hostname:

agate --addr [::1]:1965 --hostname domain.ygg --hostname domain.i2p --certs /path/to/.certificates

Один из сертификатов копируем в корень /path/to/.certificates - он будет использоваться по-умолчанию. Запись CN (Canonical Name) в данном случае не имеет значения, т.к. наиболее популярный браузер Lagrange это поддерживает (пример тому - сертификат BBS); также можно создать сертификат вручную, указав IPv6 в качестве значения.

Далее создадим сервис, в котором из Exec убираем --hostname и указываем бинд на реальные интерфейсы. В данном примере, используются сети Yggdrasil и Mycelium, но может быть и общий «::»

/etc/systemd/system/agate.service
[Unit]
After=network-online.target
Wants=network-online.target

[Service]
Type=simple

User=agate
Group=agate

WorkingDirectory=/home/agate
ExecStart=/usr/local/bin/agate --content /home/agate/public \
                               --certs /path/to/.certificates \
                               --addr [202:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:1965 \
                               --addr [505:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:1965

StandardOutput=file:///home/agate/debug.log
StandardError=file:///home/agate/error.log

[Install]
WantedBy=multi-user.target

Таким образом, сервис будет доступен на адресах: