Reparar dpkg roto por G Radio Player

Problema

Todas las versiones publicadas hasta la 0.4.7 inclusive incluyen un bug en el script de desinstalación (prerm) que mata al propio proceso de dpkg durante la remoción del paquete. Esto deja el sistema de paquetes en estado inconsistente.

El fix (pkill -x en vez de pkill -f) está en package-deb.sh, pero debe reconstruirse el .deb para que el paquete distribuido lo incluya — un .deb 0.4.8 construido antes de esa fecha sigue roto (se quitaron permisos de descarga a las versiones previas).

Síntoma

Al intentar instalar, remover o actualizar cualquier paquete aparece:

E: se interrumpió la ejecución de dpkg, debe ejecutar manualmente
   «sudo dpkg --configure -a» para corregir el problema

Causa

El script prerm usaba pkill -f "radio-player" para detener procesos antes de desinstalar. El flag -f busca en la línea de comando completa. La cadena "radio-player" es subcadena de "gradio-player" (gradio-player[1:] = radio-player), por lo que el patrón coincide con el propio script de mantenimiento (/var/lib/dpkg/info/gradio-player.prerm) y con la invocación de dpkg/apt (dpkg -i gradio-player_*.deb), matándolos a mitad de la operación.

La corrección es usar pkill -x (match exacto por nombre de proceso), que solo mata procesos llamados literalmente radio-player, no gradio-player.prerm ni dpkg.


Reparación paso a paso

Paso 1 — Eliminar el script prerm roto

sudo rm -f /var/lib/dpkg/info/gradio-player.prerm

Paso 2 — Reparar el estado de dpkg

sudo dpkg --configure -a

Paso 3 — Remover el paquete

sudo dpkg --remove --force-remove-reinstreq gradio-player

Si el paso anterior falla, forzar la remoción completa:

sudo dpkg --purge --force-remove-reinstreq gradio-player

Paso 4 — Verificar que el sistema quedó limpio

sudo apt update
sudo apt install -f

No deberían aparecer errores.

Paso 5 — Instalar la versión corregida (opcional)

sudo dpkg -i gradio-player_0.4.0_amd64.deb   # x86_64
sudo dpkg -i gradio-player_0.4.0_arm64.deb   # Raspberry Pi

Limpieza manual (si dpkg no removió los archivos)

Si después de la remoción quedan archivos instalados por el paquete:

# Binarios
sudo rm -f /usr/local/bin/{radio-player,comercial-scheduler,playlist-refill}
sudo rm -f /usr/local/bin/{gradio.sh,gr-buscador,gr-playlist}
sudo rm -f /usr/local/bin/{gr-pautaje,gr-parrilla,gr-botonera,gr-visor}
sudo rm -f /usr/local/bin/{gr-reportes,gr-record}

# Datos compartidos
sudo rm -rf /usr/local/share/radio-player

# Entrada de escritorio e icono
sudo rm -f /usr/share/applications/gradio-player.desktop
sudo rm -f /usr/share/icons/hicolor/48x48/apps/gradio-player.png

# Actualizar cachés
sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor 2>/dev/null
sudo update-desktop-database /usr/share/applications 2>/dev/null

Los datos de usuario en ~/.gradio/ no se eliminan con la desinstalación (parrilla, comerciales, configuración). Borrarlos solo si se desea una limpieza total:

rm -rf ~/.gradio

Postmortem (registro)

  • Origen: Afecta a todos empaquetados .deb previos a 0.4.8 (package-deb.sh y sus scripts de mantenimiento). El bug del prerm fue un error propio del empaquetado.
  • Mecanismo: pkill -f "radio-player""radio-player" es subcadena de "gradio-player", así que -f mataba al propio gradio-player.prerm y a dpkg/apt. Fix: pkill -x.
  • Alcance: roto en todos los .deb publicados previos 0.4.8.
  • Por qué persistió: el fix se aplicó a package-deb.sh pero no se reconstruyó ningún .deb — el fuente parecía corregido mientras todos los paquetes distribuidos seguían rotos.
  • 2026-06-23 — corrección efectiva:
  • .deb 0.4.8 amd64 reconstruido con pkill -x, probado con ciclo install→remove (dpkg quedó sano) y subido a gradio.net/descargas/.../v-0.61R/DEB/ (verificado por md5 y HTTP 200).
  • Todos los .deb previos/buggy en el servidor (incluidos los arm64 0.4.8 aún sin corregir) puestos en permisos 000 → HTTP 403, para no romper a usuarios hasta publicar el reemplazo.
  • Pendiente: recompilar y subir los .deb arm64 / arm64_bookworm 0.4.8 nativamente en la RPi 5, luego restaurar sus permisos a 644.