💾 Archived View for tilde.club › ~adou › agate.gmi captured on 2023-07-22 at 16:49:55. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2022-06-03)
-=-=-=-=-=-=-
Grâce au (relatif) bas coût des ordinateurs monocartes (Raspebrry Pi, Olimex OLinuXino, …) et la création d’OS dédiés à l’hébergement sur ces matériels (Yunohost, Freedombox), ou encore la démocratisation des VPS, l’auto-hébergement est devenu accessible, si ce n’est à tou·te·s, au moins au plus grand nombre. Un peu de curiosité (et de temps !) suffit à faire tourner chez soi quelques services que l’on délègue généralement à des sociétés véreuses dont le *business model* fait tant de dégâts à tant de niveaux.
Je suis de ces débutants ayant acheté un petit serveur domestique dans le but d’apprendre à utiliser un certain nombre d’outils. Lorsque le logiciel souhaité fait partie de ceux proposés par mon OS (Freedombox), c’est presque trop simple, mais dès que j’essaie d’installer autre chose, je n’y parviens qu’après m’être battu avec plusieurs guides et pages man, chacune ayant des trous dans leurs explications : les choses trop évidentes pour un utilisateur expérimenté de Linux. Ce que je ne suis pas.
Pour résumer : je suis un débutant en informatique qui fait des trucs au-dessus de son niveau. Et je me dis qu’il y en a sans doute d’autres dans mon cas, je vous propose donc de décrire ici comment je suis parvenu à installer un serveur gemini sur mon petit serveur domestique, pas-à -pas (que je n’utilise pas pour cette capsule, mais qui me servira peut-être de miroir). Nul doute qu’il y aura beaucoup de choses évidentes pour un utilisateur moyennement avancé, mais, comme je l’ai dit, je ne le suis pas. Ce guide s’adresse surtout à vous si vous êtes curieux et possédez un petit serveur ou un VPS. Peut-être voulez-vous découvrir ce que c’est de gérer un serveur sans les outils Yunohost/Freedombox ? Peut-être voulez-vous vous frotter pour la première fois réellement à la ligne de commande ? Peut-être voulez-vous lancer votre propre capsule gemini ? Si au moins une de ces trois possibilités vous correspond, ce guide vous est destiné.
Attention toutefois, dans cette page je tente de remettre en ordre ce que j’ai appris après des tentatives et des échecs, et des recommencements. J’espère n’avoir rien oublié, mais tant que personne ne l’aura testé, c’est impossible (pour moi) de le dire. Il est aussi possible qu’il y ait d’autres manières, sûrement meilleures, de faire certaines choses. Enfin certaines actions ont peut-être des conséquences que je ne connais pas. Lisez et appliquez en gardant votre esprit critique, et envoyez-moi un courriel si vous trouvez quoi que ce soit de faux, de potentiellement dangereux ou de mal expliqué à  :
Merci !
Connectez-vous à votre serveur *via* SSH. Si vous ne l’avez jamais fait, vous vous connectiez probablement à votre serveur avec un mot de passe jusque-là . C’est alors très simple, ouvrez votre terminal et tapez :
ssh NOMDUTILISATEUR@NOMDEDOMAINE.TLD
(Vous pouvez remplacer le nom de domaine par l’adresse IP de la machine, différente si vous vous connectez de l’extérieur ou du réseau de la machine, mais le nom de domaine sera nécessaire plus tard donc autant le mettre en place tout de suite si vous n’en avez pas.)
Par exemple, si Spock veut se connecter sur son compte nommé « spock » d’un serveur dont le nom de domaine est « starfleet.ufp », il devra taper :
ssh spock@starfleet.ufp
(N’oubliez pas que ssh est sensible à la casse, « spock » et « Spock » sont deux comptes différents.) Il vous demandera alors votre mot de passe et, bingo !, vous serez connecté.
Si vous vous connectez par clef, donnez simplement la localisation de la clef privée en la précédant de « -i ». Ainsi, si Spock a rangé sa clef appelée « clef_serveur » dans un dossier « clefs » (car Spock est quelqu’un de logique) situé dans son dossier utilisateur, il devra taper pour se connecter 
ssh -i ~/clefs/clef_serveur spock@starfleet.ufp
L’idéal, pour diverses raisons (notamment pouvoir tout supprimer facilement si on se plante), c’est de créer un utilisateur dédié à gemini (veillez à lui donner les droits pour sudo). Appelons-le « gemini » (en évitant les majuscules).
Sur Debian :
sudo adduser gemini sudo usermod -aG sudo gemini
Si vous utilisez freedombox, je conseille plutôt de passer par l'interface web (http://freedombox/plinth/sys/users/create/) en cochant la case « admin ».
Déconnectez-vous de votre session habituelle sur votre terminal (en tapant « exit »), puis recommencez la procédure *via* ssh avec vos nouveaux identifiants gemini.
Mais vous pouvez aussi rester sur votre utilisateur principal (s’il a accès à sudo). Prenez alors juste bien en note ce que vous faites pour pouvoir revenir en arrière, ou faites carrément une sauvegarde.
Il faut ensuite créer un dossier, dans le répertoire personnel (« ~ », généralement situé à « /home/VOTRENOMDUTILISATEUR », donc ici à « /home/gemini »). Pour cet exemple, afin de reprendre des codes que l’on trouve souvent dans les serveurs, appelons-le public_gemini (si vous en donnez un autre, pensez juste à changer tous les « public_gemini » des exemples).
Pour cela, vérifiez que vous êtes bien dans votre répertoire utilisateur (« ~ » s’affiche en général à gauche d’un signe, généralement un $) et tapez :
mkdir public_gemini
Si vous avez comme moi un problème de droit à ce moment-là qui vous empêche de créer ce dossier, sachez que je m’en suis sorti en tapant :
cd ..  sudo chown gemini gemini cd gemini mkdir public_gemini
c'est-à -dire que je me suis placé dans le dossier home avec la commande « cd .. », puis j’ai changé le propriétaire de gemini avec la commande « sudo chown gemini gemini » (« chown » veut dire « *ch*ange *own*ner », on lui indique d’abord le nom du nouveau propriétaire puis le nom du fichier), puis je suis retourné dans le dossier gemini. Et finalement, j’ai pu créer le dossier.
Vérifiez qu’il apparaît bien en tapant « ls ». Puis rendez-vous dans le dossier en tapant « cd public_gemini ». Normalement maintenant, « ~/public_gemini » s’affiche à gauche du dollar.
Créez un fichier index.gmi, en y mettant un petit texte. Pour cela, tapez :
nano index.gmi
ce qui ouvrira un éditeur de texte dans lequel vous tapez :
# Essai Cette page est un test.
Puis vous sortez de nano en sauvegardant, en tapant ctrl+s puis ctrl+x. Vérifiez qu’un fichier index.gmi a été créé en tapant « ls ».
Enfin, créez le dossier où sera installé agate, en l’appelant bin :
mkdir bin
C’est la partie qui peut sans doute le plus changer en fonction de votre fournisseur d’accès à internet et de votre OS, mais il vous faut maintenant ouvrir le port TCP 1965, normalement aussi bien sur votre box que sur votre serveur, en changeant les paramètres du pare-feu.
À titre d’illustration, pour mon couple livebox/freedombox, j’ai utilisé dans les deux cas la page web offerte (pour le serveur c'est sur Plinth > Système > Cockpit > Réseau > Pare-feu > Éditer les règles et les zones > Ajouter des services). Ce n’est vraiment pas compliqué, mais c’est souvent bien caché, parce qu’il s’agit d’un point critique : une mauvaise manip’ peut vous rendre vulnérable ou couper tout accès à internet. Si vous vous contentez d’ouvrir le port TCP 1965, il n’y a pas de grands risques cependant.
Je ne peux malheureusement rien faire de plus ici que de vous renvoyer aux manuels (ou aux forums d’utilisateurs) de vos logiciels.
Le fichier est prêt, le port est ouvert, reste à mettre en ligne. Pour cela, nous avons besoin d’un serveur, c'est-à -dire d’un logiciel qui fasse le lien entre notre dossier « public_gemini » et les clients comme Lagrange ou Amfora. Après de courtes recherches, le plus simple à installer m’a semblé être agate.
Présentation d’agate (en anglais)
Pour cela, rendons-nous dans le dossier « bin », si nous n’y sommes plus.
cd ~/bin
Téléchargeons maintenant agate. L’installateur se trouve sur cette page :
Comme vous le voyez, il y a plusieurs versions, en fonction de votre architecture, c’est-à -dire, en gros, du type de processeur que vous avez. Si vous ne la connaissez pas, le mieux c’est encore de vérifier, en tapant :
uname --machine
Le terminal vous donnera alors le nom de votre architecture, et vous pourrez télécharger la dernière version à l’aide de l’outil « wget ». Par exemple, si nous souhaitons télécharger la version 3.2.3 pour armv7, tapons :
wget https://github.com/mbrubeck/agate/releases/download/v3.2.3/agate.armv7-unknown-linux-gnueabihf.gz
(Pour obtenir l’adresse exacte, il suffit de faire un clic droit sur le lien, cliquer sur « Copier l’adresse du lien », puis de la coller dans wget ; vous pouvez transférer le fichier par n’importe quelle autre méthode, celle-ci me semble simplement la plus directe.)
Il faut ensuite désarchiver le fichier .gz (en changeant le nom en fonction de celui que vous avez téléchargé) :
gunzip agate.armv7-unknown-linux-gnueabihf.gz
Puis en faire un exécutable :
chmod +x agate.armv7-unknown-linux-gnueabihf
Enfin, rendez-le exécutable avec un joli nom :
ln -s agate.armv7-unknown-linux-gnueabihf agate
Et voilà  ! Normalement, le serveur est installé et est devenu un exécutable que l’on peut appeler en tapant simplement « agate ».
Testons cela. De n’importe où, lancez la commande suivante, puis ne touchez à rien :
sudo agate --hostname VOTRENOMDEDOMAINE.TLD --content /home/gemini/public_gemini --lang fr-FR
Puis, sans fermer votre terminal et même si rien ou presque rien ne s’affiche (il ne faut simplement pas que l’invite de commande vous propose à nouveau de taper quelque chose), ouvrez votre navigateur gemini préféré, et entrez votre nom de de domaine.
Si tout s’est bien passé, votre capsule est en ligne. Félicitations !
Clarifions un peu la commande avant d’aller plus loin.
Avec « --hostname », vous avez déclaré comment un utilisateur pouvait accéder à votre capsule. Ce faisant, agate a automatiquement créé un certificat qui l’encrypte ; il y a bien sûr moyen de mettre votre propre certificat (mais cela dépasse le cadre de ce guide).
Avec « --content », vous avez simplement dit à agate où se trouvait votre dossier. Tous les sous-dossiers (sauf ceux qui commencent par un point) sont maintenant accessibles *via* gemini. Il est possible de rendre accessibles aussi ceux qui commencent par un point (mais, vous l’avez deviné, ça dépasse le cadre de ce guide).
Avec « --lang », vous avez stipulé à agate que la langue par défaut de la capsule était le français de France. Vous pouvez indiquer la langue de votre choix (en respectant le format dit « RFC 4646 », par exemple « en-uk » pour l'anglais britannique, « nl » pour une variante non précisée du hollandais, « sl-rozaj » pour le dialecte résian du slovène, « zh-Hans-CN » pour le chinois continental écrit en caractères simplifiés, …). Il est bien sûr possible de spécifier qu’une page particulière ou un sous-dossier n’est pas écrit dans la langue par défaut (et cela ne dépasse pas le cadre de ce guide, nous le verrons plus bas).
Ce sont les trois seules commandes qu’il faut mettre. Il y en a d’autres, mais qui offrent une réponse par défaut tout à fait satisfaisante pour nous, et que vous pouvez découvrir en tapant :
agate --help
Revenez sur le terminal, et tapez ctrl+c.
Rien ne sera copié, il s’agit du raccourci dans le terminal pour terminer une commande en cours (c’est pratique !).
Si vous retournez sur votre navigateur gemini, et que vous actualisez la page, vous verrez que votre capsule a disparu. Vous en conviendrez j’imagine, il n’est guère pratique de devoir garder son terminal et sa connexion SSH allumés en permanence pour laisser la capsule en ligne (c’est pour éviter ça qu’on s’est acheté un serveur ou un VPS).
Du coup, vous allez transformer ce logiciel en *service* en vous servant de systemd. C’est assez facile, vous verrez.
Commencez par vous rendre dans le dossier des services :
cd /etc/systemd/system/
Puis créez, *en administrateur*, un fichier « agate.service » :
sudo nano agate.service
Puis copiez-collez le code suivant :
[Unit] Description=agate After=network.target [Service] User=gemini Type=simple ExecStart=agate --hostname VOTRENOMDEDOMAINE.TLD --content /home/gemini/public_gemini --lang fr-FR [Install] WantedBy=default.target
[HTTPS] Pour en savoir plus sur ce fichier, voyez cette page du wiki d’Ubuntu
Vous pouvez modifier la partie « ExecStart » en mettant les options que vous voulez (n’oubliez pas de mettre votre nom de domaine à l’endroit idoine). Avec ce fichier, vous avez créé un service qui, silencieusement, va lancer la commande stipulée.
Mais il faut démarrer le service. Entrez la commande suivante :
sudo systemctl start agate
(Avec la commande systemctl le « .service » après agate est sous-entendu, mais vous pouvez aussi le mettre.)
Allumez votre navigateur gemini, et, joie !, votre capsule est à nouveau en ligne ! Si non, tapez :
systemctl status agate
pour voir ce qui n’a pas marché. Une fois les corrections apportées, il ne suffit plus de démarrer le service, il faut le mettre à jour d'abord, et donc taper :
sudo systemctl daemon-reload sudo systemctl start agate
Laissé comme ça cependant, à chaque redémarrage de votre serveur, il faudra redémarrer aussi manuellement agate. Il est possible d’enregistrer le service pour qu’il démarre automatiquement :
sudo systemctl enable agate
Et c’est terminé, vous avez une capsule correctement configurée et qui reste en ligne tant que votre serveur l’est.
Chose promise chose dûe, avant de vous laisser en paix avec mon verbiage, je dois encore vous parler de la gestion fine des métadonnées. Nous avons dit qu'avec « --lang fr-FR » notre capsule sera considérée comme de langue française de France.
Mais pour signifier qu’une autre page est dans une autre langue, il faut créer puis modifier un fichier de métadonnées, appelé « .meta » (avec le point).
Commençons par le créer dans le bon dossier :
cd ~/public_gemini nano .meta
Il est possible, dans ce fichier, de spécifier des types et des paramètres MIME (*Multipurpose Internet Mail Extensions*).
[HTTPS] L’article Wikipédia sur les MIME
Les lignes vides, ainsi que tout ce qui se trouve après un # sont ignorés. Commençons par mettre un titre dans notre fichier :
# Dans ce fichier, il y aura # les métadonnées de ma capsule
Puis ctrl+s et ctrl+x pour quitter nano. Rien n’a changé pour notre capule pour l’instant, mais le fichier est créé.
Créons maintenant une deuxième page en anglais :
nano english.gmi
Puis :
# I have a question for you What’s your favourite colour?
Puis ctrl+s, et ctrl+x.
Cette page est maintenant disponible sur n’importe quel client gemini, mais, mildiou de mauvais orge !, ses métadonnées ne sont pas correctes ! Il faut vite corriger ça.
Rouvrons le fichier « .meta » avec nano. Pour changer les métadonnées d’un fichier, il faut toujours utiliser le même format : « chemin/vers/le/fichier: métadonnées ». Si les métadonnées à ajouter sont des paramètres MIME (comme la langue), elles doivent commencer par un point virgule. Changeons la langue de notre document « english.gmi ». Comme il se trouve dans le même dossier que le fichier de métadonnées, appeler son nom suffit :
# Dans ce fichier, il y aura # les métadonnées de ma capsule english.gmi: ;lang=en-UK
ctrl+s, ctrl+x, vous connaissez la chanson.
Et voilà  ! Vous ne voyez pas la différence, mais ça simplifiera la vie des personnes utilisant un lecteur d’écran. Merci pour elleux.
Il est possible de faire plein d’autres choses avec ce fichier, mais ça dépasse cette fois-ci le cadre de ce que je veux faire ici. La seule chose qui peut être encore utile, c’est de préciser si un document n’est pas écrit dans le format de gemini, le gemtext. Par exemple, pour un document en simple texte, sans aucune mise en forme :
chemin/vers/le/fichier: text-plain;charset=UTF-8;lang=fr-FR
Une dernière information importante : si vous ne mettez rien après les deux points, agate remplacera les métadonnées par rien. Ainsi, si nous créons un fichier « rien.gmi », que nous le remplissons de texte puis que nous modifions le fichier .meta comme suit :
# Dans ce fichier, il y aura # les métadonnées de ma capsule english.gmi: ;lang=en-UK rien.gmi:
alors « rien.gmi » sera considéré sans langue déterminée par agate, et non pas en français de France comme un fichier par défaut.
Merci à leurs auteurs et autrices !
gemini://qwertqwefsday.eu/agate.gmi
gemini://www.underworld.fr/blog/gemini.gmi
gemini://gemini.techrights.org/2021/02/23/gemini-server-with-agate/
[HTTPS] Et les copains/copines du salon Matrix francophone dédié au protocole gemini
https://doc.ubuntu-fr.org/creer_un_service_avec_systemd
---
Auteur : Adou (CC BY-SA 4.0)
Première publication : 2022-03-30
Dernière modification : 2022-04-01
---