SwordArMor

Installer son instance mastodon sous Gentoo

Suite à l’annonce de Valère d’arrêter les services hostux, et donc l’instance mastodon, j’ai décidé de monter la mienne. La principale raison est que je n’ai pas trouvé d’autre instance en Europe avec un TLSA. Je ne vais pas ici expliquer toute l’installation, mais seulement ce que j’ai dû adapter de la doc officielle pour Gentoo. À l’heure actuelle, la dernière version stable est la v3.3.0, il y aura donc sûrement de nouvelles modifications à apporter dans le futur pour les versions suivantes.

Ruby

Mastodon est principalement codé en ruby, la doc demande de créer un rbenv en version 2.7.2. J’ai rapidement testé en gardant la version ruby des dépôts (actuellement 2.6.6-r2) et ça semble quand même fonctionner, mais après réflexion j’ai tout de même préféré garder le rbenv, au cas où il y ait un besoin strict d’une version pas encore stable chez gentoo ou que l’upgrade quotidienne demande de recompiler tous les assets de mastodon.

PostgreSQL

La doc parle de version 9.6, bien qu’elle soit présente dans les dépôts, les upgrades de PostgreSQL ne sont pas complètement automatiques (il faut jouer avec pg_upgrade à la main). J’ai donc décidé de prendre la version stable la plus récente (donc la 13) afin de remettre à plusieurs années le moment où il faudra changer de version majeure de PostgreSQL.

Conversion des scripts systemd en open-rc

Comme j’utilise Gentoo avant tout pour éviter d’avoir à subir systemd, et que les auteurs de la doc de mastodon partent du postulat que tout le monde utilise systemd, j’ai dû adapter les scripts d’init de mastodon.
Si vous utilisez le ruby des dépôts, il faut changer le chemin absolu pour bundle afin de laisser openrc-rc se baser sur votre $PATH.
Les logs seront dans /var/log/user.log. Si cela ne vous convient pas, adaptez les options de logger.

bulbizarre ~ # cat /etc/init.d/mastodon-sidekiq
#!/sbin/openrc-run
# Copyright 2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="mastodon-sidekiq daemon"
description="mastodon-sidekiq"

command_user="mastodon"
HOME="/opt/mastodon"
directory="$HOME/live"

output_logger="logger -t ${description}"
error_logger="logger -t ${description}"

source "$HOME/.bashrc"
export RAILS_ENV=production
export DB_POOL=25
export MALLOC_ARENA_MAX=2
command="$HOME/.rbenv/shims/bundle exec sidekiq"
command_args="-c 25"

pidfile="/run/${description}.pid"
command_background=true

depend() {
	use net
}


bulbizarre ~ # cat /etc/init.d/mastodon-streaming
#!/sbin/openrc-run
# Copyright 2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="mastodon-streaming daemon"
description="mastodon-streaming"

command_user="mastodon"
HOME="/opt/mastodon"
directory="$HOME/live"

output_logger="logger -t ${description}"
error_logger="logger -t ${description}"

source "$HOME/.bashrc"
export NODE_ENV=production
export PORT=4000
export STREAMING_CLUSTER_NUM=1
command="/usr/bin/node ./streaming"

pidfile="/run/${description}.pid"
command_background=true

depend() {
	use net
}


bulbizarre ~ # cat /etc/init.d/mastodon-web
#!/sbin/openrc-run
# Copyright 2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="mastodon-web daemon"
description="mastodon-web"

command_user="mastodon"
HOME="/opt/mastodon"
directory="$HOME/live"

output_logger="logger -t ${description}"
error_logger="logger -t ${description}"

source "$HOME/.bashrc"
export RAILS_ENV=production
export PORT=3000
command="$HOME/.rbenv/shims/bundle exec puma"
command_args="-C ${directory}/config/puma.rb"

pidfile="/run/${description}.pid"
command_background=true

depend() {
	use net
}

NodeJS

La version stable actuelle est la 14 et la doc demande la 12. Il se trouve que si vous tentez de lancer le streaming avec un node 14 vous aurez des erreurs 503 dans les logs de nginx et rien dans les logs de node. Il faut le lancer avec un node 12. J’ai donc masqué les versions supérieures à 13.

nginx

Il manque quelques modules par défault pour faire fonctionner mastodon. Il faut ajouter dav dav_ext xslt à NGINX_MODULES_HTTP.

imagemagick et ffmpeg

Les options de compilation des libs « multimédia » sont très limitées sur un profile serveur (car il n’y a pas tous les USE poussés par les profiles desktop). Comme je ne peux pas deviner quels types d’images et vidéos seront utilisés, j’ai vu assez large sur les options. On peut sûrement en retirer, mais dans le doute…
Donc j’ai ajouté hdri heif jbig jpeg jpeg2k lcms pango png raw svg tiff truetype webp xml à media-gfx/imagemagick et mp3 sdl svg theora truetype vorbis vpx x264 x265 xvid à media-video/ffmpeg.