Hello,
Je viens d’installer un Remote Runner pour tester. Je me rend compte que la documentation d’installation est un peu light.
Elle n’explique notamment pas comment faire pour l’avoir qui tourne en tant que service sur la machine (et donc, pour que ça démarre automatiquement au boot).
Je vous propose ici la procédure que j’ai appliquée, pour avoir des avis extérieurs. Et si ça semble ok, on pourra proposer de mettre à jour la documentation en ligne.
Pré-requis
Note: les commandes ci-dessous sont valable pour installer les paquets sur des systèmes type Debian (Debian, Ubuntu, …). Adapter en fonction de votre OS.
Installer ffmpeg, et vérifier les versions de ffmpeg
et ffprobe
:
sudo apt update
sudo apt install ffmpeg
ffprobe -version # Should be >= 4.3
ffmpeg -version # Should be >= 4.3
Installer NodeJS, version >= 16.
Attention, il faut également que npm
soit installé. Ce qui n’est pas le cas avec le paquet nodejs
fourni par Debian (npm est dans un autre paquet, dont le nom m’échappe).
On pourra passer par les méthodes d’installation documentées ici: GitHub - nodesource/distributions: NodeSource Node.js Binary Distributions
Ce qui donne par exemple (valable sur Debian, Ubuntu, et autres Linux compatibles):
# D'abord il faut importer la clé GPG de nodesource, qui permettra de vérifier les signatures GPG des paquets
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
# Ensuite on ajoute le dépot qui fourni les paquets
NODE_MAJOR=18 # Vous pouvez ici changer la version de Node que vous voulez.
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
# Puis on instance nodejs
sudo apt-get update
sudo apt-get install nodejs -y
On peut maintenant installer le runner:
sudo npm install -g @peertube/peertube-runner
Préparation du user système
La documentation d’installation de peertube-runner indique juste comment lancer la commande. Mais pas comment le faire proprement au démarrage du système.
Nous allons donc créer un user spécifique, avec un dossier de travail dédié:
useradd -m -d /srv/prunner -s /bin/bash -p prunner prunner
J’ai choisi ici de :
- l’appeler
prunner
- mettre son dossier de travail dans
/srv/prunner
Vous pouvez bien sûr adapter cela comme bon vous semble.
Attention, si vous mettez son dossier dans /home/
, il faudra adapter la config systemd plus bas (qui isole /home
).
Configuration de SystemD
Nous allons maintenant configurer SystemD pour créer un service associé au runner.
Cela permettra de le lancer automatiquement au démarrage.
Créer le fichier /etc/systemd/system/prunner.service
suivant (adaptez le user/group et le dossier le cas échéant):
[Unit]
Description=PeerTube runner daemon
After=network.target
[Service]
Type=simple
Environment=NODE_ENV=production
User=prunner
Group=prunner
ExecStart=peertube-runner server
WorkingDirectory=/srv/prunner
SyslogIdentifier=prunner
Restart=always
; Some security directives.
; Mount /usr, /boot, and /etc as read-only for processes invoked by this service.
ProtectSystem=full
; Sets up a new /dev mount for the process and only adds API pseudo devices
; like /dev/null, /dev/zero or /dev/random but not physical devices. Disabled
; by default because it may not work on devices like the Raspberry Pi.
PrivateDevices=false
; Ensures that the service process and all its children can never gain new
; privileges through execve().
NoNewPrivileges=true
; This makes /home, /root, and /run/user inaccessible and empty for processes invoked
; by this unit. Make sure that you do not depend on data inside these folders.
ProtectHome=true
; Drops the sys admin capability from the daemon.
CapabilityBoundingSet=~CAP_SYS_ADMIN
[Install]
WantedBy=multi-user.target
Note: si vous voulez avoir plusieurs instances nommées, ajoutez le paramètre --id instance-1
sur la ligne ExecStart
, et créez un fichier par instance.
Ensuite, pour prendre en compte le fichier:
systemctl daemon-reload
systemctl enable prunner.service
systemctl restart prunner.service
Voilà, votre runner doit tourner !
Exécuter les commandes
Pour exécuter les différentes commandes (register, unregister, list-registered), il faut bien penser à le faire en temps que user prunner
:
sudo -u prunner peertube-runner list-registered
# ou si vous avez ajouté un --id:
sudo -u prunner peertube-runner --id instance-1 list-registered
Changer la configuration du runner
# Nb: si vous aviez mis un --id, il faut adapter le chemin du fichier ci dessous
vi /srv/prunner/.config/peertube-runner-nodejs/default/config.toml
# éditer les valeurs, puis redémarrer le service:
systemctl restart prunner