¿Instalar versiones particulares cuando el repositorio tiene versiones más nuevas?


13

Tengamos un metapaquete que depende de los siguientes paquetes

Depends: A (=2),
 B (=2),
 C (=2)

Tenga en cuenta el '=' - Quiero instalar estas versiones particulares, no las más recientes.

Adicionalmente:

B depende de A (> = 1)

C depende de B (> = 1) y A (> = 1)

Si las versiones más recientes de A, B, C en el repositorio son 2, entonces esto funciona.

Como he puesto la versión 3 de A y la versión 3 de B en el repo sudo apt-get install my-meta-package se niega a terminar con la siguiente información:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed

Si instalo manualmente las versiones 2 de A y B, el metapaquete se instala correctamente, lo que sugiere que no hay una dependencia oculta en A3 o B3. Esta no es una solución para el problema, ya que el metapaquete se instala automáticamente en muchas máquinas.

PREGUNTA: ¿Qué hacer para que sudo apt-get install my-meta-package install versiones 2,2,2?

Además, ¿hay alguna manera de obtener una información extendida que realmente crea la necesidad de la versión 3 de A y la versión 3 de B?


Oh, no he leído toda la pregunta antes de responder. ¿Puedes volver a empaquetar el metapaquete?
int_ua

2
@int_ua No entiendo qué haría el reempaquetado del metapaquete.
tymtam

@belacqua - estoy contigo, pero necesito una respuesta sólida que cubre lo que sucede cuando hay reversiones y se rompieron las dependencias, etc, etc
RobotHumans

¿El archivo de control de su metapaquete incluye la versión explícita no de paquetes dependientes, como (a=2), (b=2)?
Anwar

Respuestas:


11

Debe seleccionar las versiones particulares para instalar e instalarlas todas al mismo tiempo que instala el metapaquete.

sudo apt-get install meta-package package1=2 package2=2 package3=2

Como dice la respuesta de int_ua , puede encontrar dependencias inversas con esto:

apt-cache rdepends package

Si desea obtener más información sobre cualquiera de esos paquetes ( versiones disponibles, dependencias y mucho más ), use esto:

apt-cache show package

Una vez que termine de instalarlos y desee mantenerlos en esas versiones mientras realiza las actualizaciones del sistema, necesitará usar apt-pinning como lo sugiere belacqua .

APT fijación

La función de fijación de APT permite a los administradores obligar a APT a elegir versiones particulares de paquetes que pueden estar disponibles en diferentes versiones de diferentes repositorios. Esto permite a los administradores asegurarse de que los paquetes no se actualicen a versiones que puedan entrar en conflicto con otros paquetes en el sistema o que no hayan sido suficientemente probados para detectar cambios no deseados. Para hacer esto, los pines en el archivo de preferencias de APT (/ etc / apt / preferencias) deben ser modificados.


Creo que esta es la respuesta correcta, poniendo el = y luego el nombre del paquete con la versión
LnxSlck

1
Soy el colega de Tymek y esto realmente resuelve el problema. Lástima que tengamos que aplicar ingeniería inversa al metapaquete para que suceda. Algunas creativas Python están en orden. Muchas gracias por la respuesta.
Igor Zevaka

1
Me pregunto si apareció alguna solución mejor desde que pasó el tiempo.
ygrek

1

Puede intentar instalar dependencias primero con

sudo apt-get install package=2 donde 2 es la versión

Puede averiguar qué paquetes dependen del paquete con

apt-cache rdepends package


1
rdepends no proporciona información detallada sobre las versiones, ¿verdad?
tymtam

2
Instalar dependencias primero desafiaría tener el metapaquete. Es una solución, pero no la que estoy buscando.
tymtam

1
Tenga en cuenta que para que esto funcione, los repositorios deben tener una versión disponible de la versión que especificó, de lo contrario, se producirá un error.
Thomas Ward
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.