Veamos cómo parchear el reproductor de música moc en openSUSE para solucionar un bug

Ya hace un tiempo escribí en el blog sobre el reproductor de música moc para la terminal:
Es mi reproductor preferido, porque es sencillo, ligero y hace lo que tiene que hacer. Permitir reproducir mi música local, así como música en streaming de servicios que utilizo como soma.fm.
Pero desde hace unas semana me dejó de funcionar. Al ejecutarlo me devolvía este error:
*** buffer overflow detected ***: terminated
Durante un tiempo de resigné, volviendo a utilizar Amarok como reproductor y esperando que alguna nueva actualización de Tumbleweed devolviera la funcionalidad a este reproductor.
Pero el tiempo pasaba y el error no se solucionaba, ¿qué podía hacer yo con mis pocos conocimientos técnicos? Finalmente conseguí parchear moc para openSUSE gracias a usuarios con más conocimientos técnicos que aportan al software libre, veamos cómo.
Lo primero es hacer una búsqueda del error en tu buscador de internet favorito que respete tu privacidad del erro. A mí me llevó a un bug reportado en Arch que hacía referencia a este mismo error en esta distribución de GNU/Linux.
En ese error un usuario llamado Joan Bruguera, con conocimientos técnicos suficientes para la tarea, había investigado sobre la causa del error, provocado por una actualización de glibc a la versión 2.35.
Este mismo usuario había creado un parche que solucionaba el problema. En el mismo reporte se indicaban los pasos para aplicar el parche en Arch, pero claro para openSUSE Tumbleweed la cosa sería distinta.
Para openSUSE, sería cuestión de descargar el código fuente, aplicar el parche en el archivo correspondiente y compilar de nuevo todo mediante ./configure && make install para conseguir que moc volviera a funcionar en mi equipo.
Descargué los archivos del código fuente, apliqué el parche en el archivo utf8.c y me dispuse a compilar el código de nuevo. Pero me faltaban algunas librerías necesarias para compilar… La primera libdb estaba en mis repositorios, pero otra llamada libpopt no aparecía. Había una llamada lipopt0 pero como tenía otro nombre aquello no iba a funcionar.
Durante este proceso de aprendizaje e investigación, envié lo que había encontrado al encargado del mantenimiento de moc y abrí un bug bugzilla de openSUSE.
El encargado de moc me respondió muy amablemente e intercambiamos algunos correos sobre el bug, el parche reportado por Joan, las dificultades de compilar el software en mi equipo, etc.
Como no podía compilar en mi equipo, decidí hacerlo en el servicio de compilación que usa openSUSE para crear los paquetes de software llamado Open Build Service y con una instancia montada que puedes encontrar en build.opensuse.org donde la comunidad crea todo el software que se empaqueta en openSUSE para distintas versiones y arquitecturas.
Lo primero fue buscar el software en cuestión. Encontrado el proyecto puedes «forkearlo» del original en una versión derivada en un repositorio personal.
Esto es algo similar a un repositorio git en un servicio de hospedaje onlines como GitLab, Codeberg o GitHub. Hay un repositorio principal, y lo puedes «forkear» a tu espacio propio.
En mi repositorio personal, subí el parche creado por Joan, y modifiqué el archivo «spec» que sirve como guía para indicar al servicio de compilación qué tiene que hacer y qué paquetes son necesarios para compilar. En ese archivo le indiqué que también tuviera en cuenta el nuevo parche creado.
Una vez terminado, el servicio compila todo el software y crea los binarios y paquetes listos para usarse en openSUSE para diferentes versiones y diferentes arquitecturas. También es posible crear paquetes para otras distribuciones como Debian, etc.
Terminó de compilar con éxito todo, así que lo siguiente es hacer una petición para que el paquete de tu repositorio personal sea admitido en el repositorio principal si el mantenedor del paquete de openSUSE lo ve conveniente.
Tras algunos comentarios para corregir ciertos problemas y modificar otros archivos de información, ha sido admitido, así que próximamente todas las personas que usen moc en openSUSE y que sufrieran este problema verán que se ha solucionado.
Este es a grandes trazos el procedimiento seguido y cómo un tipo como yo con pocos conocimientos técnicos puede aportar pequeñas mejoras en el software libre.
No quiere ser este texto un baño de mira qué cosas hago. La principal razón de este artículo es tratar de incentivar a que tú, lector o lectora de este blog, que disfruta del software libre te animes a reportar errores o malfuncionamientos que encuentres en tu distribución de GNU/Linux o en el software que utilices.
Que reportes por los medios que sean los adecuados en cada caso, correo o servicios de seguimiento de errores. Que lo hagas siempre siguiendo las elementales reglas de cortesía, siempre con buen ánimo y aportando toda la información técnica que puedas.
También comentar, que muchas cosas no se solucionan al instante, y que hay muchas personas que mantienen el software de manera no profesional y lo hacen quitándose tiempo personal.
Así que paciencia y buenas palabras e información técnica serían los tres ingredientes de los que me gustaría que te quedases de este artículo.
Si has llegado hasta este párrafo, te agradezco la lectura y espero que te haya resultado interesante. He obviado detalles técnicos, mis conocimientos son limitados, pero podría extenderme en algunos si tienes interés.
Agradecer a Joan el parche, agradecer al mantenedor de moc y a las personas con más conocimientos técnicos que ayudan de manera constructiva a solucionar errores que cometemos quienes andamos más escasos de conocimientos técnicos.
Enlaces de interés
- https://moc.daper.net/
- https://bugs.archlinux.org/task/74041
- https://bugzilla.opensuse.org/
- https://github.com/joanbm
- https://build.opensuse.org
