¿Cómo instalo un paquete único de las pruebas de Debian o inestable en estable?

41

Quiero instalar un solo paquete (y sus dependencias, pero solo en la medida en que no sean satisfactorias en Wheezy) de Debian Jessie en mi sistema Wheezy, sin actualizar "todo y el fregadero de la cocina" a las versiones de Jessie. Específicamente, me gustaría instalar kpcli , que está disponible empaquetado en Jessie pero no en Wheezy.

Todo lo que he encontrado indica que debería agregar los repositorios de Jessie a mi lista de fuentes, establecer la fijación para mantener todo en un estado de dificultad y solo tomar el paquete único de Jessie, y casi todo encajará en su lugar. Sin embargo, no está encajando en mi lugar. Si creo /etc/apt.d/sources.list.d/jessie.list con el siguiente contenido:

deb ftp://ftp.debian.org/debian/ jessie main
deb-src ftp://ftp.debian.org/debian/ jessie main

y luego crea /etc/apt/preferences.d/jessie con:

Package: *
Pin: release a=wheezy
Pin-Priority: 1001

Package: kpcli
Pin: release a=jessie
Pin-Priority: 450

y correr apt-get -u updateseguido de apt-get -u install kpcli/jessie, entonces espero que apt-get extraiga kpcli y tal vez un pequeño puñado de otros paquetes de Jessie, y deje intacto el resto de mi sistema instalado. (Mi sistema es una instalación totalmente actualizada de Wheezy). Alternativamente, si la prioridad del pin fuera demasiado baja, esperaría que no hiciera nada. Por el contrario, en mi sistema, apt-get quiere actualizar varios cientos de paquetes.

¿Qué es exactamente lo que se necesita para instalar solo este paquete único de una versión de Jessie mientras se deja intacto el resto de mi sistema Wheezy?

Tenga en cuenta que, en este caso particular, el software está escrito en Perl, por lo que no hay compilación en binario ni nada parecido; sin embargo, hay un puñado de dependencias del módulo Perl. Por lo tanto, una alternativa posible sería instalar el .deb (descargado manualmente) usando algo que solo (1) permite especificar un único archivo .deb local que se instalará, como dpkg -i, y (2) maneja las dependencias de manera inteligente , que simplemente dpkg -ino. Sin embargo, a pesar de todas las búsquedas que he realizado en varias ocasiones y no he podido encontrar una guía fácil de seguir sobre cómo hacerlo, una solución genérica (una que también funciona para paquetes compilados binarios) sería genial .

un CVn
fuente
44
La forma habitual de manejar esto es mediante un backport: reconstruir el paquete a partir de las fuentes de Debian en Wheezy. El paquete que está utilizando parece ser perl (o al menos depende de él), por lo que probablemente no sea difícil realizar un backport. Si desea más detalles, dígalo. Probablemente podría proporcionar un tutorial si realmente lo necesita.
Faheem Mitha

Respuestas:

15

Para cada entrada (estable, prueba, inestable) tiene prioridad de pin 500. No debe usar pin> 1000. Uso 1001 solo cuando quiero degradar algo. Tengo pruebas + sid + entradas experimentales especificadas en /etc/apt/sources.listel siguiente /etc/apt/preferencesarchivo:

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 900

Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 130

El valor 500 es predeterminado para inestable. Entonces, intentemos verificar iceweasel:

# apt-cache policy iceweasel
iceweasel:
  Installed: (none)
  Candidate: 17.0.10esr-1~deb7u1
  Version table:
     26.0-1 0
        130 http://ftp.pl.debian.org/debian/ experimental/main amd64 Packages
     24.2.0esr-1 0
        500 http://ftp.pl.debian.org/debian/ sid/main amd64 Packages
     17.0.10esr-1~deb7u1 0
        900 http://ftp.pl.debian.org/debian/ testing/main amd64 Packages

Entonces, si intenté instalar iceweasel, se descargaría desde la rama de prueba porque tiene la máxima prioridad.

Intente cambiar las prioridades para:

Package: *
Pin: release a=wheezy
Pin-Priority: 900

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910
Mikhail Morfikov
fuente
sudo apt-get -u install kpcli/jessieTodavía me da 316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.con sus prioridades sugeridas. Si lo hago apt-cache policy perl(uno de los paquetes que desea actualizar) muestra 5.18.1-5 como candidato en la prioridad 500, e instala 5.14.2-21 + deb7u1 también en la prioridad 500. Casi parece, por cualquier razón, apt no recoge las prioridades ...
un CVn el
OK, tengo algo. Parece que el truco era usar Package: kpcli*(en lugar de Package: kpcli) y luego una Package: * Pin: release o=Debian Pin-Priority: -10al final. Luego, por supuesto, hay dependencias difíciles que conducen a versiones de Perl solo disponibles en Jessie, que a su vez necesita una nueva libc6. No estoy dispuesto a seguir esa ruta, sinceramente, pero esto al menos me dio el resultado que buscaba. ¡Gracias!
un CVn el
25

En realidad, hay una manera de hacerlo sin usar anclaje / prioridades. En su lugar, puede especificar cuál es la versión predeterminada desde la que instalará los paquetes, que luego se utilizará a menos que se especifique lo contrario utilizando el parámetro de versión de destino. Esto funciona de la misma manera si solo desea instalar paquetes seleccionados de, por ejemplo, backports.

Mostraré esto para instalar paquetes de Stretch en Jessie, ya que esos son los estables / pruebas actuales, pero funciona de la misma manera para instalar paquetes de Jessie en Wheezy como se pidió originalmente.

Primero, agregue stretch como repositorio, por ejemplo, en /etc/apt/sources.list.d/stretch.list:

deb http://ftp.debian.org/debian stretch main

Luego, para establecer la versión predeterminada, cree un archivo que /etc/apt/apt.conf.d/default-releasecontenga:

APT::Default-Release "jessie";

(En Wheezy, creo apt.conf.dque no existía y tendrías que poner ese fragmento /etc/apt/apt.conf).

Luego, instalar un paquete desde la prueba es tan simple como aptitude -t stretch install kpclisin tener que preocuparse por fijar prioridades.

Nota: @amc señaló en los comentarios que si usa en aptlugar de aptitude, debe usar "stable"como en Default-Releaselugar de "jessie". ¡Gracias! (Por supuesto, también puede usar aptitudecon esa configuración).

Florian Jacob
fuente
... esto parece una forma muy hábil de hacer esto. ¿Por qué esto no se acepta oficialmente?
JamesTheAwesomeDude
1
Me saleThe value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Steven Penny
1
necesita usar "estable" / "prueba" / etc. en lugar de "jessie" / "stretch" para la versión predeterminada y cuando use apt
amc
6

Pin: release a=wheezydebería ser Pin: release n=wheezy, tal vez.

Desde la página del manual :

El siguiente registro asigna una alta prioridad a todas las versiones de paquetes que pertenecen a cualquier distribución cuyo Nombre clave es "jessie".

           Package: *
           Pin: release n=jessie
           Pin-Priority: 900

¡Entonces eso es correcto!

usuario65646
fuente
3
¿No instalaría TODOS los paquetes de jessy?
rubo77