-------------------------------------------------
[14/01/2022] - ~5mins - #linux #mpd
-------------------------------------------------
(il y a un TL;DR en bas)
Vous vous rapellez le temps où j'écrivais des trucs sur Linux et son ptit monde ?
Non !
Ha merde c'est pire que ce que je pensais !
Bon bha je vais vous parler de ma ptite mésaventure du jour.
Le commencement est toujours un moment délicat.
Hier, sans crier gare j'ai mis à jour ma ptite Gentoo comme je le fais très régulièrement.
Ho je me souviens encore de cette insouciance.
Je ne savais pas encore tout ce que j'allais endurer, j'étais un autre homme à l'époque.
✵Petite ellipse narrative✵
Je démarre mon fier engin, je me logue et là quelle ne fût point mon désappointement ?!
Pas de musique.
Mon ptit script de musique colore le terminal en violet pour me signaler que **mpd** n'a pas pointé ce matin.
Bon, je ne cède pas tout de suite à la panique, après tout ce n'est que la musique…
HANNNN PAS DE MUSIQUE !!!
VITE UNE SOLUTION !
Bon "sans paniquer" je tente de relancer **mpd** manuellement.
J'ouvre un terminal et je tape ces trois lettres m</kbd>,p</kbd>,p</kbd> et enfin Enter.
J'espère voir le bout du tunnel.
Tag list mismatch Discarding database file
Bon bha le monde m'en veut terriblement.
J'essaye de ne pas céder plus à la panique.
Je vais voir si ce fichier existe vraiment.
C'est le cas.
Je le renomme et tente de relancer **mpd**.
Jan 14 16:05 : exception: Failed to open '/var/lib/mpd/database': No such file or directory
Ha, là déjà c'est mieux.
Mais **mpd** devrait recréer de lui-même ce fichier !
Pourquoi qu'il collabore pas ?
Je commence à perdre pédale, les mots ne me viennent plus dans l'ordre, le correcteur orthographique tourne à plein régime, une IA est obligée de retranscrire ce que le clavier parvient à tirer de mes doigts pour ce blog post.
C'est de plus en plus décousu (certains diront que je meuble).
Une terrible baisse de tension fait déraper mes mains sur le clavier.
Incrédule je regarde l'écran et je vois marqué dmesg, c'est surement un signe du destin !
J'envoie la commande persuadé que la providence n'était pas avec moi.
[ 1174.823896] update[8214]: segfault at 0 ip 00007fc9179ea010 sp 00007fc911039348 error 4 in libid3tag.so.0.16.1[7fc9179e4000+8000]
[ 1174.823913] Code: 0c 00 00 00 48 89 ef e8 5e a4 ff ff e9 62 fd ff ff 49 ff c4 e9 71 fa ff ff e8 7c a2 ff ff 66 2e 0f 1f 84 00 00 00 00 00 66 90 0f 85 c9 74 2a 48 89 f8 0f 1f 80 00 00 00 00 8b 50 04 48 83 c0
Wow, un signe.
Visiblement la **libid3tag** a un ptit bug et empêche les honnêtes programme de travailler.
Tout du moins c'est la conclusion logique sur laquelle tout le monde se serait rué.
Tout le monde sauf moi !
Après tout c'est **mpd** qui plante, du coup je me suis mis en tête d'aller décrouté ce papy pour le faire bosser comme je le souhaite.
Sauf que n'étant pas sûr de mes compétences, mon premier réflexe est d'aller tenter un bugreport chez **mpd** et donc d'aller voir un peu comment ça se passe là-bas.
Je suis immédiatement tombé sur leur page expliquant comment leur faire un bon bugreport [1].
Je pars donc bille en tête pour installer **gdb** histoire d'avoir un peu plus d'info sur la vraie cause de mon souci.
Une fois installé je lance l'immonde gdb --args mpd --stderr --no-daemon --verbose puis un ptit run .
Et là mon vieux, ça défile, on voit bien qu'il lit tous les mp3 les uns après les autres jusqu'au moment où il déraille complet.
Thread 4 "update" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffef221640 (LWP 2859)]
0x00007ffff5bbf960 in id3_ucs4_length () from /usr/lib64/libid3tag.so.0.16.1
Bon, bha j'ai pas spécialement plus d'info mais si on lui envoie un ptit bt j'obtiens une palanquée d'infos inutilisables pour un pauvre hère de mon espèce.
Ça me fait une belle jambe.
Bon, il me faut les symboles de débug qui sont virés lors de la compilation.
Je vous avoue que j'aime beaucoup **Gentoo** mais c'est pas le genre de truc dont j'ai l'habitude.
Cela dit, je me doute que c'est très probablement un truc très simple à faire.
Après dix secondes de recherche je tente un FEATURES="nostrip" emerge mpd .
Je laisse mouliner tout ça et je retente de relancer **gdb** et **mpd** dedans.
Ha ouai on a beaucoup plus d'infos qui pourront très probablement aider les devs de **mpd** pour un peu plus facilement trouver où ça merde.
À côté de ça tout de même, je suis en gros manque de musique et décide de voir si je suis le seul linuxien à tomber sur cette coquille.
Bon bha pas beaucoup de résultat, je teste même sur le moteur de recherche avec le plus de part de marché vu qu'il est tellement mieux…
Et bien non.
Par contre, je regarde un peu du côté de Gentoo voir ce qu'il se raconte à propos de la libid3tag et vla-t-y pas que je tombe sur ce bug [2] qui a de l'activité hier !
C'est tout de même intrigant (de toilette) !
Et regardez bien mes ami·e·s dans les derniers commentaires ce qu'on peut trouver : un patch !
Un nouvel espoir me ragaillardit.
C'est cool un patch.
Surtout qu'il semble corriger ce qui m'ennuie.
Un patch vous dis-je !
J'aurai été un triste utilisateur d'une distribution linux lambda, j'aurai été bien emmerdé.
Par chance, étant un heureux utilisateur de **Gentoo**, il m'est aisé d'appliquer tout type de patch à mes logiciels !
Il me suffit de déposer le-dit patch dans */etc/portage/patches/$CATEGORIE/$LOGICIEL/* et à réinstaller le logiciel en question !
Bon, alors en vrai, je n'ai pas un patch mais un commit sur **github** et c'est moins simple qu'il en a l'air pour lui faire cracher un patch à cette forge.
J'imagine que proposer un lien vers un patch serait vraiment du bloat dans cette interface web minimaliste (hummmm).
Bon en vrai, c'est pas compliqué, il suffit de rajouter ".patch" à la fin d'une url d'une PR pour avoir le précieux fichier.
Pas compliqué certe, mais faut le savoir.
Bref, me voilà en possesion du patch [3] que je colle dans */etc/portage/patches/media-libs/libid3tag/* , je réinstalle la lib avec emerge --oneshot libid3tag mpd et je patiente la bave au lettre en commençant à convulser par manque de musique.
Bha … j'attends que ça compile quoi.
C'est aussi ça **Gentoo**, des temps de pause.
Ha tiens !
Ça vient de finir de compiler.
Je lance **mpd**.
Hmmm il ne se passe rien.
o___O
Ha ?
Mais ?
Ha !
Mais non je suis con c'est normal, il y a juste pas d'erreur ni rien.
Je lance une ptite musique.
POUF !
J'ai de la musique !
Dis donc ça ressemble à blog post !
Ça parle pas de film !
Pfiouuu que m'arrive-t-il ?!
Il y a un bug dans la **libid3tag** qui fait que **mpd** plante lors de l'indexation de certains fichiers mp3.
La solution consiste à installer ce patch [4] puis relancer **mpd**.
Voilà tout.
[2] ce bug (https://bugs.gentoo.org/show_bug.cgi?id=626698)
[3] du patch (https://patch-diff.githubusercontent.com/raw/tenacityteam/libid3tag/pull/7.patch)
[4] ce patch (https://patch-diff.githubusercontent.com/raw/tenacityteam/libid3tag/pull/7.patch)
------------------------------------
------------------------------------
[14/01/2022] - #linux #mpd
------------------------------------