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
.