{"id":1175,"date":"2026-06-23T10:29:39","date_gmt":"2026-06-23T14:29:39","guid":{"rendered":"https:\/\/www.gradio.net\/?page_id=1175"},"modified":"2026-06-23T10:40:57","modified_gmt":"2026-06-23T14:40:57","slug":"reparar-dpkg-roto-por-g-radio-player","status":"publish","type":"page","link":"https:\/\/www.gradio.net\/index.php\/reparar-dpkg-roto-por-g-radio-player\/","title":{"rendered":"Reparar dpkg roto por G Radio Player"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Reparar dpkg roto por G Radio Player<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Problema<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Todas las versiones publicadas hasta la 0.4.7 inclusive<\/strong> incluyen un bug en el script de desinstalaci\u00f3n (<code>prerm<\/code>) que mata al propio proceso de <code>dpkg<\/code> durante la remoci\u00f3n del paquete. Esto deja el sistema de paquetes en estado inconsistente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El fix (<code>pkill -x<\/code> en vez de <code>pkill -f<\/code>) est\u00e1 en <code>package-deb.sh<\/code>, pero <strong>debe reconstruirse el <code>.deb<\/code> para que el paquete distribuido lo incluya<\/strong> \u2014 un <code>.deb<\/code> 0.4.8 construido antes de esa fecha sigue roto (se quitaron permisos de descarga a las versiones previas).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">S\u00edntoma<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Al intentar instalar, remover o actualizar cualquier paquete aparece:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>E: se interrumpi\u00f3 la ejecuci\u00f3n de dpkg, debe ejecutar manualmente\n   \u00absudo dpkg --configure -a\u00bb para corregir el problema<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Causa<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El script <code>prerm<\/code> usaba <code>pkill -f \"radio-player\"<\/code> para detener procesos antes de desinstalar. El flag <code>-f<\/code> busca en la l\u00ednea de comando completa. La cadena <code>\"radio-player\"<\/code> es <strong>subcadena de <code>\"gradio-player\"<\/code><\/strong> (<code>gradio-player<\/code>[1:] = <code>radio-player<\/code>), por lo que el patr\u00f3n coincide con el propio script de mantenimiento (<code>\/var\/lib\/dpkg\/info\/gradio-player.prerm<\/code>) y con la invocaci\u00f3n de <code>dpkg<\/code>\/<code>apt<\/code> (<code>dpkg -i gradio-player_*.deb<\/code>), mat\u00e1ndolos a mitad de la operaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La correcci\u00f3n es usar <code>pkill -x<\/code> (match exacto por nombre de proceso), que solo mata procesos llamados literalmente <code>radio-player<\/code>, no <code>gradio-player.prerm<\/code> ni <code>dpkg<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Reparaci\u00f3n paso a paso<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 1 \u2014 Eliminar el script prerm roto<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo rm -f \/var\/lib\/dpkg\/info\/gradio-player.prerm<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 2 \u2014 Reparar el estado de dpkg<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dpkg --configure -a<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 3 \u2014 Remover el paquete<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dpkg --remove --force-remove-reinstreq gradio-player<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si el paso anterior falla, forzar la remoci\u00f3n completa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dpkg --purge --force-remove-reinstreq gradio-player<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 4 \u2014 Verificar que el sistema qued\u00f3 limpio<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install -f<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">No deber\u00edan aparecer errores.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 5 \u2014 Instalar la versi\u00f3n corregida (opcional)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dpkg -i gradio-player_0.4.0_amd64.deb   # x86_64\nsudo dpkg -i gradio-player_0.4.0_arm64.deb   # Raspberry Pi<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Limpieza manual (si dpkg no removi\u00f3 los archivos)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si despu\u00e9s de la remoci\u00f3n quedan archivos instalados por el paquete:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Binarios\nsudo rm -f \/usr\/local\/bin\/{radio-player,comercial-scheduler,playlist-refill}\nsudo rm -f \/usr\/local\/bin\/{gradio.sh,gr-buscador,gr-playlist}\nsudo rm -f \/usr\/local\/bin\/{gr-pautaje,gr-parrilla,gr-botonera,gr-visor}\nsudo rm -f \/usr\/local\/bin\/{gr-reportes,gr-record}\n\n# Datos compartidos\nsudo rm -rf \/usr\/local\/share\/radio-player\n\n# Entrada de escritorio e icono\nsudo rm -f \/usr\/share\/applications\/gradio-player.desktop\nsudo rm -f \/usr\/share\/icons\/hicolor\/48x48\/apps\/gradio-player.png\n\n# Actualizar cach\u00e9s\nsudo gtk-update-icon-cache -f -t \/usr\/share\/icons\/hicolor 2&gt;\/dev\/null\nsudo update-desktop-database \/usr\/share\/applications 2&gt;\/dev\/null<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Los datos de usuario en <code>~\/.gradio\/<\/code> <strong>no se eliminan<\/strong> con la desinstalaci\u00f3n (parrilla, comerciales, configuraci\u00f3n). Borrarlos solo si se desea una limpieza total:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rm -rf ~\/.gradio<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Postmortem (registro)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Origen:<\/strong> Afecta a todos empaquetados <code>.deb<\/code> previos a 0.4.8 (<code>package-deb.sh<\/code> y sus scripts de mantenimiento). El bug del <code>prerm<\/code> fue un error propio del empaquetado.<\/li>\n\n\n\n<li><strong>Mecanismo:<\/strong> <code>pkill -f \"radio-player\"<\/code> \u2014 <code>\"radio-player\"<\/code> es subcadena de <code>\"gradio-player\"<\/code>, as\u00ed que <code>-f<\/code> mataba al propio <code>gradio-player.prerm<\/code> y a <code>dpkg<\/code>\/<code>apt<\/code>. Fix: <code>pkill -x<\/code>.<\/li>\n\n\n\n<li><strong>Alcance:<\/strong> roto en todos los <code>.deb<\/code> publicados previos 0.4.8.<\/li>\n\n\n\n<li><strong>Por qu\u00e9 persisti\u00f3:<\/strong> el fix se aplic\u00f3 a <code>package-deb.sh<\/code> pero <strong>no se reconstruy\u00f3 ning\u00fan <code>.deb<\/code><\/strong> \u2014 el fuente parec\u00eda corregido mientras todos los paquetes distribuidos segu\u00edan rotos.<\/li>\n\n\n\n<li><strong>2026-06-23 \u2014 correcci\u00f3n efectiva:<\/strong><\/li>\n\n\n\n<li><code>.deb<\/code> 0.4.8 <strong>amd64<\/strong> reconstruido con <code>pkill -x<\/code>, probado con ciclo install\u2192remove (dpkg qued\u00f3 sano) y subido a <code>gradio.net\/descargas\/...\/v-0.61R\/DEB\/<\/code> (verificado por md5 y HTTP 200).<\/li>\n\n\n\n<li>Todos los <code>.deb<\/code> previos\/buggy en el servidor (incluidos los <strong>arm64 0.4.8<\/strong> a\u00fan sin corregir) puestos en permisos <code>000<\/code> \u2192 HTTP 403, para no romper a usuarios hasta publicar el reemplazo.<\/li>\n\n\n\n<li><strong>Pendiente:<\/strong> recompilar y subir los <code>.deb<\/code> <strong>arm64 \/ arm64_bookworm<\/strong> 0.4.8 nativamente en la RPi 5, luego restaurar sus permisos a <code>644<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\u00f3n (prerm) que mata al propio proceso de dpkg durante la remoci\u00f3n del paquete. Esto deja el sistema de paquetes en estado inconsistente. El fix (pkill -x en vez de pkill -f)&#8230;<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-1175","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.gradio.net\/index.php\/wp-json\/wp\/v2\/pages\/1175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gradio.net\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gradio.net\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gradio.net\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gradio.net\/index.php\/wp-json\/wp\/v2\/comments?post=1175"}],"version-history":[{"count":2,"href":"https:\/\/www.gradio.net\/index.php\/wp-json\/wp\/v2\/pages\/1175\/revisions"}],"predecessor-version":[{"id":1178,"href":"https:\/\/www.gradio.net\/index.php\/wp-json\/wp\/v2\/pages\/1175\/revisions\/1178"}],"wp:attachment":[{"href":"https:\/\/www.gradio.net\/index.php\/wp-json\/wp\/v2\/media?parent=1175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}