Coin web de Frédéric Péters

Buster, jack, systemd, etc.

Nouvelle année et dans la foulée d’une série de mises à jour relatives à Python 3, quelques jours off ont aussi été l’occasion de reprendre quelque peu certains systèmes de la radio. D’abord des trucs évidents comme des mises à jour en retard, ensuite des modifications au démarrage des services audio, pour profiter de systemd.

Jusqu’ici ils étaient gérés par supervisor mais je n’ai jamais été grand fan, et avec systemd il y a désormais tout le nécessaire pour gérer de manière native ces services. J’écris « ces services » mais quels sont-ils ? Il s’agit de jack, infra générale du système audio, jack-plumbing, bricoles pour assurer le branchement entre éléments audio, liquidsoap, enregistrement (pige d’antenne) et streaming, et openob, lien basse latence vers l’émetteur FM. Tout ça se retrouve composé dans différentes machines virtuelles, pige, streams, openob, qui tourne sur une machine hôte avec la carte son, la liaison audio entre l’hôte et les machines virtuelles se fait alors en utilisant le backend réseau de jack, sur une interface multicast.

Le paysage posé, démarrage de la mise à jour système vers Buster, et première surprise avec le multicast, justement, qui ne semble plus fonctionner. Il y a eu du neuf côté smcroute, et le script wrapper devant assurer une compatibilité semble échouer sur la configuration pourtant basique, qu’à cela ne tienne, il y a désormais un fichier de configuration et tout simplement y inscrire mon souhait, mgroup from eth0 group 239.0.0.10, remet le tout en place.

La suite c’est la création des unités systemd, jackd.service, jack-plumbing.service, openob.service, liquidsoap.service, qui n’ont absolument rien de particulier, juste une attention portée à l’ordre de démarrage, un peu sensible (et il y aurait sans doute à améliorer un peu les choses avec un sd_notify dans jackd.

Et le résultat, c’est un contrôle avec systemctl et cie, pour par exemple avoir vue générale de l’état par systemctl status ou une vue précise des logs via journalctl, ce qui est un conforme énorme.

├─openob.service
│ └─358 /usr/bin/python3 /home/panik/openob/bin/openob brusinik2 [...]
...
├─smcroute.service
│ └─348 /usr/sbin/smcrouted -n -s
├─jackd.service
│ └─351 /usr/bin/jackd -r -d net
├─jack-plumbing.service
│ └─361 /usr/bin/jack-plumbing

Reste à faire la même chose à quelques endroits encore, pour l’enregistrement direct des studios et sur l’ordinateur posé côté émetteur FM mais il ne devrait y avoir là aucune surprises (...), ça peut attendre d’autres congés.

12 janvier 2020, 09:41