Se corrigió el error “No se pueden corregir los problemas, ha retenido paquetes rotos” en Ubuntu y otras distribuciones de Linux

Si bien hay varias formas de instalar aplicaciones en Ubuntu, prefiero usar el comando apt en la terminal para instalar software.

Si hace lo mismo, puede encontrar un error de dependencia como este:

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
green-recorder : Depends: python-urllib3 but it is not installable
E: Unable to correct problems, you have held broken packages.

Por lo general, en It’s FOSS, encontrará soluciones simples y fáciles de seguir para problemas complicados. Desafortunadamente, este no es tan sencillo.

En este artículo de solución de problemas, le diré por qué ocurre este error y le daré algunos consejos sobre cómo resolver este problema.

¿Por qué ves el error “has retenido paquetes rotos”?

Estaba intentando instalar un paquete de aplicación, probablemente desde un PPA o un repositorio de terceros.

Las aplicaciones a menudo necesitan versiones específicas de bibliotecas y componentes de software (llamadas dependencias). Es posible que estas dependencias no formen parte del paquete de la aplicación en sí, pero se espera que ya estén instaladas en su sistema o durante la instalación de la aplicación.

Su sistema Linux intenta instalar estas dependencias por sí solo. Pero si la versión del paquete de dependencia no está disponible en su sistema, se confunde ya que no tiene forma de resolver este problema de dependencia.

Es por eso que le informa que el software que intentaba instalar depende de XYZ pero este XYZ no se puede instalar.

Otro caso de uso es cuando su paquete se puede retener es cuando intenta instalar dos versiones del mismo software. Supongamos que está instalando una versión específica de Wine cuando ya tiene otra instalada.

Cómo solucionar el error “No se pueden corregir los problemas, ha retenido paquetes rotos”

Puedes probar algunas cosas para que funcionen. Necesita tener algunas ideas sobre la instalación / eliminación de paquetes en la línea de comandos de Linux para resolver las cosas aquí.

Asegúrese de que la caché de paquetes de su sistema esté actualizada

Primero, asegúrese de que la caché de paquetes local esté actualizada. Su sistema verifica esta caché para los paquetes disponibles. Es posible (pero no seguro) que el sistema vea el paquete de dependencia después de la actualización de la caché.

sudo apt update

Intente instalar el paquete problemático nuevamente y vea si soluciona el problema.

Instalar la dependencia

Si intenta instalar el paquete problemático nuevamente y aún se queja del mismo error de dependencia, entonces quizás esa dependencia no esté disponible para la versión de distribución.

Puede usar el comando de búsqueda apt para ver si puede esta biblioteca de algún otro paquete o nombre:

sudo apt search package_name

Si el paquete está disponible, ¿es la misma versión que solicitó el paquete que intentaba instalar?

Intente instalar el paquete de dependencia y vea qué sucede:

sudo apt install dependency_package

Puede encontrar una cadena de dependencia. Intenta instalar la dependencia A pero se queja de B. Luego intenta instalar B y se queja de C.

También puede suceder que cuando intente instalar el paquete C, ya esté instalado. Verifique la versión del paquete C. ¿Es la misma versión que requiere el paquete B? En caso afirmativo, eliminar C e instalarlo de nuevo podría ayudar.

¿Puede obtener el paquete de dependencia que falta de alguna otra fuente?

Si el paquete de dependencia que falta no se puede encontrar en su sistema (no hay resultados en la búsqueda de apt), puede intentar obtener el paquete de dependencia de otro lugar. Sé que no es muy conveniente, pero no tienes muchas opciones aquí.

Para example, en el caso de instalar shutter, se quejó de libgoo-canvas-perl y esta biblioteca ya no está disponible en el sistema Ubuntu.

sudo apt install shutter
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
shutter : Depends: libgoo-canvas-perl but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Sin embargo, dado que estaba disponible en las versiones anteriores de Ubuntu, busqué este paquete en el archivo de paquetes de Ubuntu y lo encontré en la lista de Ubuntu 14.04. aquí. Descargué el archivo .DEB y lo instalé.

Ahora que este paquete de dependencia está instalado, intentar instalar la aplicación original (shutter en este caso) ya no debería quejarse de al menos este paquete.

Si no puede encontrar el paquete de dependencia en ninguna parte, instale el paquete problemático desde otra fuente

Entonces en el example arriba, intenté instalar la aplicación Green Recorder usando su PPA. Esta aplicación necesita python-urllib3 biblioteca, pero desafortunadamente, esta biblioteca no está disponible en mi sistema Ubuntu 20.04.

[email protected]:~$ apt search python-urllib3
Sorting... Done
Full Text Search... Done

Claramente, esta es una aplicación mal empaquetada. El desarrollador lo puso a disposición para Ubuntu 20.04 sin darse cuenta de que Ubuntu 20.04 ya no es compatible con Python 2 y todas las bibliotecas de Python ahora comienzan con el prefijo python3. Entonces, python-urllib3 debería ser python3-urllib3.

Si se encuentra en tal situación, tal vez consulte la página de inicio del proyecto o busque en Internet una fuente alternativa para instalarlo. ¿Quizás hay una versión Snap / Flatpak o algún usuario creó un PPA para ello? Si nada más, también puede optar por la opción de código fuente.

Si ve el error de paquete roto retenido durante la actualización, intente esto

La mayor parte de la discusión hasta ahora asumió que ve este error al instalar una nueva aplicación. Puede que no siempre sea así.

Si ve este error cuando intenta actualizar su sistema con sudo apt update, entonces tendrás que adoptar un enfoque ligeramente diferente.

Primero, verifique qué paquete se está reteniendo con este comando:

dpkg --get-selections | grep hold

Si ve algunos paquetes retenidos, elimínelos y luego continúe actualizando su sistema o instalando el software.

También puede utilizar el administrador de paquetes Synaptic para reparar los paquetes rotos.

¿Conseguiste solucionar el problema?

Como mencioné anteriormente, no existe una solución sencilla para este problema. Tendrás que investigar por tu cuenta y ver si se puede arreglar o no.

Comparta los comentarios si su problema se soluciona. Si no es así, puedo intentar ayudarte.