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 update
seguido 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 -i
no. 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 .
Respuestas:
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.list
el siguiente/etc/apt/preferences
archivo:El valor 500 es predeterminado para inestable. Entonces, intentemos verificar iceweasel:
Entonces, si intenté instalar iceweasel, se descargaría desde la rama de prueba porque tiene la máxima prioridad.
Intente cambiar las prioridades para:
fuente
sudo apt-get -u install kpcli/jessie
Todavía me da316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.
con sus prioridades sugeridas. Si lo hagoapt-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 ...Package: kpcli*
(en lugar dePackage: kpcli
) y luego unaPackage: *
Pin: release o=Debian
Pin-Priority: -10
al 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!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
:Luego, para establecer la versión predeterminada, cree un archivo que
/etc/apt/apt.conf.d/default-release
contenga:(En Wheezy, creo
apt.conf.d
que 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 kpcli
sin tener que preocuparse por fijar prioridades.Nota: @amc señaló en los comentarios que si usa en
apt
lugar deaptitude
, debe usar"stable"
como enDefault-Release
lugar de"jessie"
. ¡Gracias! (Por supuesto, también puede usaraptitude
con esa configuración).fuente
The value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Pin: release a=wheezy
debería serPin: release n=wheezy
, tal vez.Desde la página del manual :
¡Entonces eso es correcto!
fuente