# Reparar dpkg roto por G Radio Player

## Actualizar desde 0.4.8 o anterior a 0.4.9+

Si tienes una versión anterior instalada, **no ejecutes `dpkg -i` directamente** — el `prerm` del paquete instalado corre primero y puede matar a `dpkg`.

Usa el script incluido en el ZIP, que parchea automáticamente antes de instalar:

```bash
sudo bash instalar.sh
```

O aplica el parche manual de una línea antes de instalar:

```bash
sudo bash -c 'printf "#!/bin/bash\nexit 0\n" > /var/lib/dpkg/info/gradio-player.prerm'
sudo dpkg -i gradio-player_0.4.9_amd64.deb    # o arm64 / arm64_bookworm
```

---

## Mi dpkg ya está roto (no puedo instalar ni actualizar nada)

### Síntoma

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

O:

```
dpkg: error al procesar el paquete gradio-player (--configure):
 El paquete está en un estado grave de inconsistencia - debe reinstalarlo
 antes de intentar su configuración.
```

### Reparación rápida

```bash
# 1. Parchear el prerm roto
sudo bash -c 'printf "#!/bin/bash\nexit 0\n" > /var/lib/dpkg/info/gradio-player.prerm'

# 2. Reinstalar 0.4.9 (ya tiene prerm correcto)
sudo dpkg -i gradio-player_0.4.9_amd64.deb    # o arm64 / arm64_bookworm
```

Si aun así dpkg reporta inconsistencia, forzar la eliminación primero:

```bash
sudo bash -c 'printf "#!/bin/bash\nexit 0\n" > /var/lib/dpkg/info/gradio-player.prerm'
sudo dpkg --remove --force-remove-reinstreq gradio-player
sudo dpkg --configure -a
sudo dpkg -i gradio-player_0.4.9_amd64.deb
```

---

## Causa raíz

El script `prerm` de versiones anteriores usaba `pkill -f "radio-player"`. El flag `-f` busca en la línea de comando **completa** de todos los procesos. La cadena `"radio-player"` es subcadena de `"gradio-player"`, por lo que el patrón coincide con:

- El propio script de mantenimiento: `/var/lib/dpkg/info/gradio-player.prerm`
- La invocación de dpkg: `dpkg -i gradio-player_0.4.9_amd64.deb`

Al ejecutar, el script se mata a sí mismo y a dpkg, dejando el gestor de paquetes en estado inconsistente.

**Desde 0.4.9**: el `prerm` es `exit 0`. No hay kill de procesos. Los ejecutables en uso se reemplazan de forma segura en disco (Linux mantiene el inode anterior abierto hasta que el proceso cierre).

---

## Limpieza manual (si dpkg no removió los archivos)

```bash
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,gr-reportes,gr-record}
sudo rm -rf /usr/local/share/radio-player
sudo rm -f /usr/share/applications/gradio-player.desktop
sudo rm -f /usr/share/icons/hicolor/48x48/apps/gradio-player.png
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 del usuario en `~/.gradio/` no se eliminan (parrilla, comerciales, configuración).

---

## Historial del bug

| Versión | Estado prerm | Notas |
|---------|-------------|-------|
| 0.3.x – 0.4.7 | `pkill -f` roto | Todos los .deb publicados afectados |
| 0.4.8 | `pkill -x` (mejorado) | Sigue siendo un kill — al actualizar a 0.4.9 corre el prerm de 0.4.8 instalado, que puede matar dpkg en algunos entornos |
| **0.4.9+** | `exit 0` | **Fix definitivo** — no hay kill de procesos |
