%
Puffy image/svg+xml Puffy 2019-06-14 Stéphane HUC OpenBSD Team Inkscape Puffy OpenBSD https://www.openbsd.org/art4.html English "Puffy", it's a symbol of OpenBSD

gmid : un serveur Gemini / OpenBSD

Installer et configurer le serveur Gemini nommé gmid, sécurisé sous OpenBSD, et faire facilement du multi-hosting.

Détails relatifs à l'article

Article publié, le
et modifié le
4 minutes de lecture

Cet article contient 848 mots.

Identifiant de l'article : tag:doc.huc.fr.eu.org,2026-05-24:/fr/sys/openbsd/gmid/#e77dd0531a90f070172b3eb4acd412c147565ae33ef14506dcc36e28f83d5132


Source brute de l'article :
Commit version : 9bf3d7b


Cet article est aussi disponible sur le protocole Gemini :
gemini://gmi.it-log.fr.eu.org/fr/sys/openbsd/gmid.gmi


Description

gmid est un serveur Gemini, disponible en tant que paquet sous OpenBSD, supportant toutes les fonctionnalités du protocol Gemini, et utilisant les “verroux” de sécurité disponible sur OpenBSD.

Son propos est de servir des fichiers statiques… mais il peut aussi servir de proxy CGI.

La configuration respecte la syntaxe riche que l’on retrouve sous OpenBSD, tel que celles des autres services, comme httpd, relayd, etc…

Le service gmid s’utilise comme tout autre service sous OpenBSD et est géré par l’outil rcctl et ses différentes options. Il faudra activer puis démarrer le service ad hoc, une fois la configuration faite.

Le projet fournit aussi un client gemini, délicatement nommé gg, un client pour le protocole Titan, nommé idéalement titan.

Installation

Installez le paquet gmid.

  • version : 2.1.1
  • OpenBSD : 7.9

Lors de l’installation seront créés :

  • un utilisateur _gmid, sans login, et sans répertoire personnel.
  • un script rc.d gmid, permettant l’utilisation en tant que service
  • un fichier de configuration d’exemple dans le répertoire /etc

Système

Au cas où l’installation ne l’aura pas fait, il faudra créer le répertoire /var/gemini. Laissez les droits root:wheel dessus !

Ensuite créer les répertoires nécessaires à la gestion de vos domaines, dans le répertoire parent dédié, et n’oubliez pas d’attribuer dessus les droits à l’utilisateur _gmid, tel que :

:$ doas mkdir /var/gemini/domaine1.tld
:$ doas chown _gmid:_gmid /var/gemini/domaine1.tld

Configuration

  • Le fichier de configuration principal : /etc/gmid.conf

Bien sûr, il est possible de le nommer autrement, mais dans ce cas il faudra le préciser dans les options de lancement, avec l’option -c.


Je n’aborde pas la configuration d’un seul serveur ; l’exemple créé et fourni par défaut parle de soit, vraiment.

Multi-hosting

Voici un fichier exemple :

user "_gmid"
chroot "/var/gemini"
dir_certs = "/etc/letsencrypt/live"

log {
    access "/logs/access.log"
    style combined
    syslog off
}

types {
    include "/usr/share/misc/mime.types"
}

server "domaine1.tld" {
    listen on * port 1965
    cert $dir_certs "/domaine1.tld/fullchain.pem"
    key  $dir_certs "/domaine1.tld/privkey.pem"
    root "/domaine1.tld"

    lang "en"
    log on

}

server "fr.domaine1.tld" {
    listen on * port 1965
    cert $dir_certs "/fr.domaine1.tld/fullchain.pem"
    key  $dir_certs "/fr.domaine1.tld/privkey.pem"
    root "/sous-dom.domaine1.tld"

    lang "fr"
    log off

}

server "domaine2.tld" {
    listen on * port 1965
    cert $dir_certs "/domaine2.tld/fullchain.pem"
    key  $dir_certs "/domaine2.tld/privkey.pem"
    root "/domaine2"

    lang "en,fr"
    log on

    location "/en/*" {
        lang "en"
    }

    location "/fr/*" {
        lang "fr"
    }

}

Explications :

⇒ Dans la directive globale :

  • la variable dir_certs est en réalité une macro ; elle est dans cet exemple utilisée dans les directives cert et key pour spécifier le chemin vers le répertoire principale des certificats TLS — dans ce cas, générés avec certbot. - cf: Macros -

    • Si vous utilisez acme pour générer vos certificats TLS, préciser le chemin du répertoire /etc/ssl/acme, par exemple.
  • la directive logs permet de spécifier les options de journalisation - cf: log -

    • la directive access est le chemin relatif depuis le chroot du futur fichier de log. Cela peut directement dans le répertoire du chroot, tel que /access.log, ou dans tout autre répertoire dédié.
    • la directive style permet de modifier le style de journalisation ; par défaut, le format legacy est très simple de lecture
    • la directive syslog autorise ou non l’enregistrement dans les journaux systèmes. Par défaut, sa valeur est on ; utiliser off désactive l’enregistrement dans les journaux /var/log/daemon et `/var/log/messages
  • la directive types permet de spécifier les mimes types ; soit en les spécifiant manuellement, soit en ciblant le fichier système. Les deux peuvent être utilisés. - cf: Types -

Toutes ces options sont facultatives !

⇒ Dans les directives server :

  • la directive listen écoute toutes les adresses IPv4 et IPv6 disponibles, de par l’utilisation du symbole * ; il est possible d’écrire la règle en précisant l’adresse IPv(4|6) - dans le cas de l’adresse IPv6, il ne faut pas l’encadrer des symboles [, ].

  • la directive root cible le répertoire lié au domaine, c’est un chemin relatif au chroot ; il n’est pas obligé de porter le nom du domaine ; par convention, faites-le.

  • un dernier détail à-propos de la directive lang : elle peut être utilisée de manière globale dans la directive server et/ou spécifiquement dans des directives locations ciblant des répertoires linguistiques.


Voilà !

En quelques minutes une configuration fonctionnelle pour du multi-hébergements de caspule Gemini sous OpenBSD…

Et n’oubliez pas de lire les man pages dédiés, disponible autant sur le système dès lors l’installation faite, que depuis le site officiel, dont les liens sont écrits dans la section Documentation ci-dessous.

PF

Voici un exemple de règles minimalistes à ajouter à PF :

host  = adresse_ipv4
host6 = adresse_ipv6

pass in quick on egress proto tcp from any to { $host $host6 } port 1965

Logs

Il peut être utile de modifier le fichier /etc/newsyslog pour générer une rotation des logs, tel que - exemple à confirmer - :

/var/gemini/logs/access.log  root:_gmid  644  4     *    $W0   Z "pkill -USR1 -u root -U root -x gmid"

Documentation

⇒ les man pages officiels, disponible sur HTTP :


Enjoy-ID!
Enjoy-IT!