Blog de dada

DevOps, bidouilleur et routard plein de logiciels libres

diaspodon

Bloquer la version de NodeJS pour Mastodon 4.2.0

Rédigé par dada / 28 septembre 2023 / Aucun commentaire


La toute dernière version de Mastodon s'accompagne d'un petit souci d'administration si vous utilisez Debian 12 (Bookworm) comme système d'exploitation pour votre serveur : NodeJS.

En effet, la version de NodeJS officiellement supportée est, malgré ce que dit la documentation, la 16.x et pas plus alors que Debian 12 embarque la version 18 dans ses valises. Pas de 18, pas de 20, donc. Enfin, pas exactement. Il est possible de les utiliser au prix d'une bidouille officiellement diffusée dans les réponses aux différents soucis relayés dans Github.

Enfin, si comme moi, vous n'avez pas envie de vous embêter plus que ça, voici comment faire pour être tranquille.

Installer le dépôt NodeJS 16 pour Debian 12

On commence par les keys :

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

On ajout le dépôt :

sudo echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x bookworm main
deb-src [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x bookworm main" > /etc/apt/sources.list.d/nodesource.list

On fait le pinning qui va bien :

Dans /etc/apt/preferences.d/nodejs-mastodon ajoutez :

Package: nodejs*
Pin: release o=Debian*
Pin-Priority: -1

Package: *
Pin: release o=deb.nodesource.com
Pin-Priority: 99

Vous pouvez maintenant supprimer la version NodeJS de Debian et installer la version des dépôts que vous venez d'ajouter :
apt update
apt purge nodejs
apt install apt install nodejs=16.20.2-deb-1nodesource1

Un apt-cache pour vérifier tout ça :

nodejs:
  Installed: 16.20.2-deb-1nodesource1
  Candidate: 16.20.2-deb-1nodesource1
  Version table:
     18.13.0+dfsg1-1 -1
        500 http://deb.debian.org/debian bookworm/main amd64 Packages
        150 http://deb.debian.org/debian unstable/main amd64 Packages
 *** 16.20.2-deb-1nodesource1 500
        500 https://deb.nodesource.com/node_16.x bookworm/main amd64 Packages
        100 /var/lib/dpkg/status

Vous êtes tranquille maintenant ! Du moins, tant que NodeJS 14 est maintenu, ce qui commence à devenir un souci.

Comment prendre un peu de Python pour faire un Exporter Prometheus

Rédigé par dada / 20 juillet 2018 / 4 commentaires



Faire un Exporter Prometheus, c'était un défi qui traînait dans ma longue-liste-des-choses-à-faire depuis longtemps. J'ai enfin mis les mains dedans. C'est moins terrifiant qu'on le croit, à condition de vouloir faire des choses simples. Voici donc quelques lignes pour vous expliquer comment s'en sortir.

Du Python 3

Il est possible de faire des Exporters dans un nombre dingue de langages. Pour des questions de curiosité et d'envie, j'ai choisi de le faire en Python, version 3. En plus, Prometheus fournit une bibliothèque qui va bien.

Une API

Un Exporter est capable d'interroger, entre autre, des API. Pour l'exemple et parce ce que j'avais envie de mieux connaître mon instance Mastodon, c'est l'API de l'alternative à Twitter que vous allez croiser ci-dessous.

La logique globale

Un Exporter, pour faire très simple, c'est un bout de code coincé dans une boucle infinie.
Oui, très simple.
Il va récupérer de l'information et la transmettre à Prometheus, puis récupérer de l'information et la transmettre à Prometheus, puis récupérer de l'information...

Exemple

Ici, on va pondre un bout de code qui va aller récupérer le nombre de comptes que je follow sur Mastodon :
r = requests.get("https://diaspodon.fr/api/v1/accounts/1")
data = json.loads(r.content.decode())
metric = Metric('following_count', 'Number of following account', 'gauge')
metric.add_sample('following_count', value=data["following_count"], labels={})
yield metric
Ce qu'il faut comprendre :
- La variable r contient le retour de l'appel à l'API Mastodon.
- La variable data contient en utilisable le JSON contenu dans r.
- La variable metric contient les données exploitables par Prometheus.

C'est la ligne qui est vraiment cruciale :
metric.add_sample('following_count', value=data["following_count"], labels={})
Les choses importantes :

- following_count sera le nom que vous pourrez retrouver dans Prometheus pour afficher la donnée
- value sera la valeur retournée quand vous appelez following_count

Lancer la boucle infinie

On va coincer ce bout de code dans une boucle :
class JsonCollector(object):
    def __init__(self):
        pass

    def collect(self):

        url = mastodon_host + 'api/v1/accounts/1'
        r = requests.get(url)
        data = json.loads(r.content.decode())
        metric = Metric('following_count', 'Number of following account', 'gauge')
        metric.add_sample('following_count', value=data["following_count"], labels={})
        yield metric

if __name__ == "__main__":
    start_http_server(9400)
    REGISTRY.register(JsonCollector())
    while True: time.sleep(1)
Et c'est tout quant à la création d'un Exporter ! Retrouvez le lien vers le code complet en fin de ce billet. Ou . Pour plus de visibilité, j'ai volontairement caché les modules à inclure.

Comment valider que ça fonctionne ?

Un curl et tout va :
root@server ~ # curl localhost:9400
# HELP following_count Number of following account
# TYPE following_count gauge
following_count 552.0

Brancher l'exporter à Prometheus

Tout va se faire, comme d'habitude, dans le prometheus.yml.

  - job_name: 'mastodon'
    static_configs:
      - targets: ['localhost:9400']
On ajoute le job, la target avec son port et on reload la bête.

Notez que j'ai utilisé le port 9400 dans mon exemple. C'est un choix personnel : vous pouvez le changer s'il est déjà utilisé par un de vos services.

Enfin, si tout s'est bien passé, vous devriez pouvoir appeler la variable following_count dans Prometheus !


Vous trouverez un snippet avec l'intégralité du code par ici.

Je retourne à mon code. Vous vous doutez bien qu'avez tout ça, il y a moyen de faire un bel Exporter complet pour Mastodon !

Des bisous,

Partagez vos réseaux !

Rédigé par dada / 08 avril 2018 / 1 commentaire


L'émulation autour de la Fédiverse, Mastodon (mon mien) et PeerTube en tête, nous donne une opportunité qu'il ne faudrait pas rater. En ce dimanche d'avril, je sors mon clavier pour vous rappeler quelques petites choses qui feront du bien à notre joli monde.

Les informations circulent à une vitesse incroyable entre nous : les libristes et les simples utilisateurs. Cela fait un an qu'une grosse partie d'entre nous est allée poser le baluchon de sa vie sociale numérique sur le dos du mammouth. Loin de s'essouffler, le réseau continue d'accueillir de nouveaux utilisateurs. Malgré ce joli constat, il nous faut garder le rythme pour ne pas finir comme mon premier amour : diaspora* (mon mien).

Attention, diaspora* tient toujours la route. Il y a un noyau d'utilisateurs actifs et des nouveaux arrivants qui en font un réseau très intéressant, mais on est loin du nombre d'utilisateurs actifs de Mastodon. J'ajoute aussi que l'origine de la source du semi-échec de diaspora* est difficile à déterminer : le mauvais timing ? Une équipe qui n'a malheureusement pas tenue la charge ? La communauté qui n'a pas réussi à s'organiser ? Bref, compliqué.

Pour continuer le mouvement, pour faire venir toujours plus de gens, je vous propose une hygiène de vie : lorsque vous avez envie de partager quelque chose comme un billet de blog (coucou !), un article de presse, une vidéo, etc, forcez-vous à balancer un lien vers un toot. Nous avons besoin de visibilité. La masse a en tête Facebook, Twitter et Youtube parce que c'est là qu'est le contenu partagé. Le contenu en lui même n'y est pas. Mastodon peut devenir un vecteur important de partage d'information, de culture, si les internautes y passent régulièrement et deviennent familier avec la Fédiverse.

Les utilisateurs déjà dans la place n'hésitent pas à partager des articles de presse ou de blog avec un rapide commentaire. Vous voulez partager cet article avec vos amis ? Envoyez le lien vers le toot ! Les vieux de la vielle diront que c'est une étape inutile pour atteindre le contenu, mais la visibilité qu'il apporte à la Fédiverse est très important.

Utilisateurs assidus de Mastodon ? Partagez ! L’activité y est déjà difficile à suivre, ça défile vraiment dans tous les sens aux heures de pointes, mais c'est insuffisant. Partagez dans tous les domaines. Dire que la majorité de la Fédiverse est composée de libristes, c'est vrai mais on y trouve aussi des photographes, des gens engagés politiquement, des designers, TV5 Monde, Reflets et même des fans de Rugby ! Vous avez des centres d'intérêts ? Faites nous l'honneur de les partager avec nous !
Plus vous serez actifs, plus nous aurons de liens à partager avec l'extérieur de la Fédiverse, plus la Fédiverse sera connue, plus les gens viendront nous rejoindre et plus nous aurons d'actifs, et donc de liens à partager. Une histoire de boule de neige.

Le cas de Peertube est unique : cette beauté commence à être utilisée par des grands comptes : DataGueule, LQDN, Thinkerview et j'en passe.
Ces comptes publient autant sur Youtube que sur PeerTube. C'est à nous de choisir quel lien sera envoyé à nos potos. Simplement, choisissez celui de l'alternative libre. C'est simple, efficace, et ça me permet de rêver du jour où la vidéo sur Peertube aura plus de vue que celle qui traîne sur la plateforme de Google/Alphabet.

En exemple, pour ce qu'il vaut, allez voir mon précédent billet : je partage une vidéo et une citation. Les deux viennent de PeerTube et de Mastodon. Simple.

Tout ce que je raconte ne fera pas venir les grands comptes qui traînent sur Facebook et Twitter pour ne faire que du Personal Branding, comme disent nos amis anglophones. Ne viendrons peut-être jamais non plus les marques qui paient des espaces publicitaires cachés en posts ou tweets. Dommage ? Posez-vous cette question : est-ce vraiment un mal ?

Bref, viendez ! Mon instance Mastodon et mon nœud diaspora* sont ouverts aux inscriptions !

PS : pour les utilisateurs de Twitter et de Mastodon. Faites vous violence et arrêtez de poster de l'oiseau bleu vers le Mammouth : c'est rageant. Faites l'inverse !

Diaspote et diaspodon passent chez Hetzner

Rédigé par dada / 28 janvier 2018 / Aucun commentaire




Ce billet est un peu l'héritier des anciens "Diaspote in backstage" mais comme je gère maintenant un serveur Mastodon, se concentrer sur la seule vie de diaspote.org n'a plus vraiment de sens.
Donc, en ce début d'année 2018, j'ai succombé, encore, à mon activité préférée : migrer des services d'un serveur à un autre.

Diaspote

Pas grand chose à signaler si ce n'est que j'ai décidé de me passer du C2S de chez Scaleway pour partir chez Hetzner. Le serveur passe donc de 4 cores et 8Go de RAM à 2 cores et 4Go de RAM. On pourrait parler de chute drastique des performances si on se contentait de ces chiffres, mais non. Les processeurs de Hetzner sont bien plus puissants que ceux de Scaleway et les besoins en mémoire vive de diaspote.org ne sont pas mirobolants. Je surveille tout de même tout ça de près avec Grafana et Prometheus, mais ça sera pour un autre billet.

Diaspodon

Moins abordé dans ces colonnes, diaspodon.fr est mon serveur Mastodon. Vous ne connaissez pas Mastodon ? C'est un équivalent libre et décentralisé à Twitter. C'est du temps réel, rapide, loin de la tranquillité de diaspora*.
J'avais d'abord posé Mastodon sur un C1 de chez Scaleway, avant de le migrer sur une Kimsufi (4 cores, 16Go de RAM) pour terminer par me dire que c'était bien trop gros et migrer tout ça chez Hetzner avec la même configuration que diaspote.org.

Hetzner Cloud

On parle de qui ? Hetzner, ce sont des allemands. Ce sont aussi les hébergeurs des services de Framasoft. Ils ont sorti une offre qu'il est difficile de ne pas apprécier :



Des services comme diaspora* et Mastodon, à condition de ne pas héberger des centaines de comptes, rentrent parfaitement dans l'offre à 5,88 TTC.
Les plus observateurs remarqueront qu'il est possible de détacher le stockage de la machine pour la mettre sur un cluster CEPH. On perd en performance brute mais on gagne en fiabilité. En cas de souci sur une machine, avec CEPH, on déplace le disque sur une nouvelle bête et ça repart.
Les sauvegardes sont aussi présentes dans cette offre de cloud : pour une majoration de 20% sur votre facture, vous avez un backup journalier de vos disques, avec une rétention de 7 jours. Nickel.
Quant à la limitation de bande passante, je suppose qu'elle n'est pas gênante pour diaspora* ou pour Mastodon. 20TB, c'est quand même énorme. Elle doit peut-être pouvoir s'expliquer par une envie de réduire l'utilisation de ces machines en tant que seedbox.
Ils ont aussi des IP flottantes, pour celles et ceux qui savent à quoi ça peut servir, et d'autres services. Leur cloud est tout frais. Tout n'est pas encore disponible, va falloir surveiller les nouveautés de près.

L'espace disque

C'est là que Hetzner pèche un peu. 40Go, ce n'est pas énorme. Ce n'est pas un souci pour diaspora* mais c'est à surveiller pour Mastodon. Si vous ne le savez pas, sachez que votre pod diaspora* héberge uniquement les données de vos utilisateurs. Celles des autres vous parviennent par un jeu de liens. Mastodon est plus violent : il se sert bien d'un lien, mais met en cache la donnée sur votre serveur. Si votre serveur voit 100 personnes poster une image de 4Mo, Mastodon va utiliser 400Mo d'espace disque. Et sachez que croiser 100 personnes sur Mastodon, ça peut se faire en quelques minutes.

Enfin, le coût

Ces deux services me coûtent maintenant 2 x 5.88€, soit moins de 12€ par mois, ce qui était le prix du fonctionnement de diaspote.org uniquement. Il parait que Scaleway n'est pas cher, c'est maintenant faux. C'est cher et lent.
Passer sa facture mensuelle d'un peu moins de 30€ à un peu moins de 15€, c'est assez génial : ça fait 2 pintes de bière belge en plus.

Le mot de la fin

Viendez tester diaspote.org et diaspodon.fr : c'est ouvert et la politique de modération est la même des deux côtés : si vous ne faites rien d'illégal, nous ne ferons rien.

Le mot de la fin x2

Vous savez que le FOSDEM (FOSDEM), c'est le week-end prochain, hein ? Et qu'on y sera avec l'ami Augier et les autres ? N'oubliez pas de venir ! Cette année, pas de stand pour nous. On sera dans les salles et les couloirs, et les bars. Notifiez-nous sur Mastodon ou diaspora et on se retrouvera !