Decir la aptitud para ignorar el paquete roto

9

Instalé un Amsynth de Lucid en Karmic usando:

dpkg --force-depends-version -i amsynth_1.2.2-1_i386.deb

La razón para instalar la versión Lucid es porque la versión Karmic tiene 3 años y se bloquea en mi máquina. El paquete Lucid Amsynth depende de las versiones más recientes de libatk1 y libjack0 que Karmic, pero pensé que me arriesgaría, y resulta que Amsynth funciona bien.

Sin embargo, aptitude intenta desinstalar Amsynth cada vez que hago una actualización. Creo que he logrado ponerlo en espera, pero ahora la aptitud aborta. ¿Cómo puedo saber la aptitud para ignorar el paquete roto y continuar?


fuente
Por el momento lo acabo de desinstalar. Simplemente lo reinstalaré cada vez que lo necesite de nuevo, no tomará mucho tiempo, hasta que me moleste lo suficiente como para intentar compilarlo nuevamente.
Si necesita algo de la versión más reciente y necesita bibliotecas más nuevas, por lo general, puede simplemente arrastrarlas o descargar el paquete fuente y reconstruirlo en su sistema. Sin embargo, me he encontrado con esto tratando de usar un paquete de terceros y luego se necesitan los hacks.
Jan Hudec

Respuestas:

7

Si instaló el programa a través de un archivo deb y dpkg, también podría alterar las dependencias del archivo .deb instalado manualmente. Fui llevado a esta medida extrema una vez ...

ar x foo.deb
vim control.tar.xz  # see below
ar r foo.deb control.tar.xz
dpkg -i foo.deb

y dpkg ya no conoce las dependencias de foo. En vim, debe seleccionar ./control (uso vim para leer archivos empaquetados; desempaquetar y usar otro editor y volver a empaquetar si lo desea) y eliminar las dependencias no deseadas de la línea

Depends: foo bar
skunk_michi
fuente
1
Es mejor usar en dpkg-deblugar de ar. ares un detalle de implementación de dpkg que puede cambiar en el futuro.
jmtd
Gracias, esta solución funcionó para mí, pero cuando hago apt-get upgrade, recibo el mensaje "Los siguientes paquetes se han retenido: numptyphysics: i386" (apt-get dist-upgrade no dice nada). ¿Es normal este mensaje y no podemos deshacernos de él?
baptx
7

Hay una solución pirateada en los foros de Ubuntu . La solución de ~ quack es mejor, pero requiere más trabajo.

No pude encontrar nada en Google sobre esto, salvo compilar su propio 'paquete ficticio' (imposible sin desinstalar los paquetes rotos. A menos que tenga la suerte de tener las herramientas), pero buscar en mi propio disco duro me dio la respuesta eventualmente!

Para cualquiera que quiera saber, aquí le mostramos cómo "desbloquear" un paquete en synaptic / aptitude / apt-get, sin desinstalarlo.

En primer lugar, tome nota del paquete que instaló, y los paquetes de los que depende le dan un estado roto. Digamos que forcé una instalación de manzanas, que depende del paquete obsoleto que no está en el repositorio:

En un código de tipo de terminal:

sudo gedit /var/lib/dpkg/status

busca manzanas en el archivo hasta que encuentres algo como:

Código:

Package: apples
Status: install ok installed
Priority: optional
Section: libs
Installed-Size: 316
Maintainer:
Architecture: i386
Source: applesauce
Version: 1.0.10-1
Depends: packageA, packageB, obsolete
Description: Apples on your desktop!

Elimine los obsoletos de la fila Depends: guarde el archivo y listo. Espero que esto ayude a algunas personas.

Iain
fuente
ick buen hallazgo, pero no soy fanático de mentirle al administrador de paquetes (que es esencialmente lo que hace ese truco). es mejor no usar APT en absoluto que correr para romperlo de todas formas. esta es la razón por la cual compilar sus propios paquetes es algo bueno: no hay dependencias rotas ni mentir a su administrador de paquetes.
quack quijote
No tengo ningún problema en mentirle al administrador de paquetes, especialmente porque en unos meses volveré a instalar el sistema operativo, pero no pude encontrar el archivo al que se hace referencia en el hilo.
Extraño. Debe estar allí. Intente hacer "cd / var / lib / dpkg" y ​​luego "sudo nano status".
Iain
1
El enlace ya no funciona. Cuál es la razón exacta por la cual las respuestas de solo enlace están mal vistas por aquí. Si explicaste aquí, sería la respuesta correcta.
Jan Hudec
No sé si esto es permanente o no, pero hasta ahora parece una solución decente para instalar paquetes que tienen dependencias difíciles en versiones de Java que ya no están disponibles.
krispy
2

En la sección de Preferencias de aptitude (Ctrl-T para acceder al menú; en Opciones), desmarque la opción en la sección "Manejo de dependencias" que dice "Reparar automáticamente los paquetes rotos antes de instalar o eliminar" . Eso debería hacer que aptitude deje de intentar arreglar el paquete cada vez que cambie otros paquetes.

Como una solución más permanente, debe tomar los paquetes fuente para el paquete Lucid Amsynth que instaló, así como los paquetes fuente para libatk1 y libjack0 , y construir su propio paquete actualizado. Dependiendo de qué más use esas bibliotecas, es posible que también necesite actualizar otros paquetes, pero probablemente pueda salirse con la suya. (Esto es esencialmente hacer un backport de esos paquetes de Lucid a Karmic; debe verificar el repositorio de backports de Karmic o los PPA para ver si alguien ya lo ha hecho. Si sus nuevos paquetes funcionan, considere enviarlos a los backports de Karmic para que otros los usen. )

quijote curandero
fuente
Gracias. Intenté tu primera sugerencia, pero no pareció hacer la diferencia. Las actualizaciones simplemente abortarían. También intenté compilarlo antes de instalar el paquete Lucid, pero no tuve suerte con él. Podría intentarlo de nuevo en el futuro.