¿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?

tymtam
fuente
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.

Sepero
fuente
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

int_ua
fuente
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