Mise en place d'un service Gemini🔗

Posted by Médéric Ribreux 🗓 In blog/ Blog/

#auto-hébergement #web

Introduction

Ce blog est maintenant également disponible via le protocole Gemini. Sans rentrer dans trop de détails techniques, je vous explique comment j'ai fait…

Gemini, c'est quoi ?

Un protocole proche de Gopher, résolument tourné vers le texte. Plus de réponses aux questions sur la page de référence.

Pourquoi vouloir mettre en place ça ? Pour répondre à l'effet mode (en 2021, Gemini, c'est cool pour les hackers) et puis aussi parce que ça semble, au premier abord, correspondre à mon besoin d'informatique simple et utile.

Tester un client

Pour commencer à plonger dans l'univers Gemini, il faut d'abord un client. Pour ma part, j'ai d'abord pris un truc hyper simpliste de chez Drew Devault. Mais, avec le temps, ils sont passés à BearSSL en lieu et place d'OpenSSL. Et comme BearSSL n'est pas dans Debian, j'ai dû m'en passer.

Après avoir fait la revue des différents clients Gemini disponibles sous Debian nativement, j'ai dû me résoudre à partir sur Lagrange qui fait le job et qui reste en C sans folie de dépendances. D'ailleurs, avec le recul, je vous conseille de commencer par ça: c'est proche de l'expérience utilisateur Firefox et ça rend Gemini moins austère.

Mise en place du serveur

Je suis parti sur le serveur gmnisrv qui fait le taff. C'est un programme assez simple en C, avec peu de dépendances.

J'ai dû ouvrir le port 1965 dans le pare-feu. Au niveau protection, j'ai fait un peu comme Apache: créer un utilisateur dédié qui peut uniquement faire tourner le serveur et accéder aux fichiers gmi.

Enfin, j'ai rédigé un fichier de service Systemd:

[Unit]
Description=gmnisrv Gemini server
Documentation=man:gmnisrv(1) man:gmnisrv.ini(5)
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/gmnisrv -C /etc/gmnisrv.ini
User=gemini
Group=gemini
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Au niveau de fichier de configuration (/etc/gmnisrv.ini), je suis resté hyper simple: j'ai ajouté deux IP (v4 et v6) publiques en écoute et j'ai indiqué que la racine du site Gemini était un simple répertoire. Pas de redirection, de CGI, d'auto-index, etc.

Quel contenus ?

Gemini fait certes la part belle au texte mais il ne faut quand même pas trop lui en demander. Je pensais naïvement prendre mes fichiers sources de blog qui sont en Markdown et les renommer en .gmi mais j'ai dû me résoudre à abandonner cette démarcher. Parmi les limites que j'ai rencontrées, je note:

Pour corriger tout ça, j'ai fait un script Python pour traduire mes fichiers Markdown en fichiers gmi. Il n'est pas parfait mais ça fait le job pour l'instant.

Conclusions

Bon, ça semble marcher. Gemini fait la part belle au texte. Mais même dans cette simplicité, je n'ai pas réussi à trouver un client natif Debian qui marche out-of-the-box. Il reste encore du chemin à parcourir.

Pour l'instant, je vais laisser la configuration comme ça, sans trop investir de temps. De fait, le service ne sera pas garanti. Et puis je n'ai pas trop de recul au niveau sécurité (gmnisrv, c'est du C, certes bien codé mais pas exempt de trous vu sa jeunesse).

Si ça reste stable pendant au moins un an, je verrais si je dois investir plus de temps sur cette techno. En attendant, mon blog reste à peu près accessible via Gemini.