Quero instalar um único pacote (e suas dependências, mas apenas na medida em que elas não sejam satisfatórias no Wheezy) do Debian Jessie para o meu sistema Wheezy, sem atualizar "tudo e a pia da cozinha" para as versões do Jessie. Especificamente, eu gostaria de instalar o kpcli , que está disponível no Jessie, mas não no Wheezy.
Tudo o que encontrei indica que devo adicionar os repositórios Jessie à minha lista de fontes, definir a fixação para manter tudo em sibilância e pegar apenas o pacote único de jessie, e ele simplesmente se encaixará. No entanto, não está se encaixando para mim. Se eu criar /etc/apt.d/sources.list.d/jessie.list com o seguinte conteúdo:
deb ftp://ftp.debian.org/debian/ jessie main
deb-src ftp://ftp.debian.org/debian/ jessie main
e crie /etc/apt/preferences.d/jessie com:
Package: *
Pin: release a=wheezy
Pin-Priority: 1001
Package: kpcli
Pin: release a=jessie
Pin-Priority: 450
e execute apt-get -u update
seguido por apt-get -u install kpcli/jessie
, então eu espero que o apt-get extraia o kpcli e talvez um pequeno punhado de outros pacotes de Jessie, e deixe o restante do meu sistema instalado intocado. (Meu sistema é uma instalação totalmente atualizada do Wheezy.) Como alternativa, se a prioridade dos pinos for muito baixa, esperamos que ele não faça nada. Em vez disso, no meu sistema, o apt-get deseja atualizar várias centenas de pacotes.
O que exatamente é necessário para instalar apenas este único pacote de uma versão Jessie e deixar o restante do meu sistema Wheezy intocado?
Observe que, neste caso em particular, o software é realmente escrito em Perl, portanto não há compilação para o binário ou qualquer coisa assim envolvida; no entanto, existem algumas dependências do módulo Perl. Portanto, uma alternativa possível seria instalar o .deb (baixado manualmente) usando algo que apenas (1) permita especificar um único arquivo .deb local local a ser instalado, como dpkg -i
, e (2) lide com as dependências de maneira inteligente , que planície dpkg -i
não. No entanto, para todas as pesquisas que fiz em várias ocasiões e não consegui encontrar um guia simples de como fazer isso, uma solução genérica (que funcione também para pacotes binários e compilados) seria ótima .
Respostas:
Para cada entrada (estável, teste, instável), você tem prioridade de pino 500. Você não deve usar pino> 1000. Eu uso 1001 apenas quando quero fazer o downgrade de algo. Eu tenho as entradas testing + sid + experimental especificadas no arquivo
/etc/apt/sources.list
a seguir/etc/apt/preferences
:O valor 500 é o padrão para instável. Então, vamos tentar verificar o iceweasel:
Portanto, se eu tentasse instalar o iceweasel, ele seria baixado do ramo de testes porque possui a maior prioridade.
Tente alterar as prioridades para:
fonte
sudo apt-get -u install kpcli/jessie
ainda me dá316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.
suas prioridades sugeridas. Se eu fizerapt-cache policy perl
(um dos pacotes que ele deseja atualizar), ele mostra 5.18.1-5 como candidato na prioridade 500 e instalou 5.14.2-21 + deb7u1 também na prioridade 500. Parece quase, por qualquer motivo, O apt não está atendendo às prioridades ...Package: kpcli*
(em vez dePackage: kpcli
) e depois umPackage: *
Pin: release o=Debian
Pin-Priority: -10
no final. Então, é claro, existem dependências difíceis que levam a versões do Perl disponíveis apenas no Jessie, que, por sua vez, precisam de uma nova libc6! Honestamente, não vou seguir esse caminho, mas pelo menos isso me deu o resultado que buscava. Obrigado!Na verdade, existe uma maneira de fazer isso sem o uso de pinos / prioridades. Em vez disso, você pode especificar qual é a versão padrão da qual instalará os pacotes, que serão usados a menos que seja especificado de outra forma usando o parâmetro de liberação de destino. Isso funciona da mesma maneira se você deseja instalar apenas pacotes selecionados de, por exemplo, backports.
Vou mostrar isso para a instalação de pacotes do Stretch no Jessie, pois esses são os estábulos / testes atuais, mas funciona da mesma maneira para instalar os pacotes Jessie no Wheezy, como foi solicitado originalmente.
Primeiro, adicione stretch como repositório, por exemplo
/etc/apt/sources.list.d/stretch.list
:Em seguida, para definir a versão padrão, crie um arquivo como
/etc/apt/apt.conf.d/default-release
contendo:(No Wheezy, acho
apt.conf.d
que não existia e você precisaria inserir esse trecho/etc/apt/apt.conf
).Em seguida, a instalação de um pacote a partir de testes é tão simples quanto
aptitude -t stretch install kpcli
você não precisar se preocupar em fixar prioridades.Nota: @amc apontou nos comentários que, se você usar em
apt
vez deaptitude
, precisará usá-lo"stable"
como emDefault-Release
vez de"jessie"
. Obrigado! (Claro, você também pode usaraptitude
com essa configuração.)fonte
The value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Pin: release a=wheezy
deveria serPin: release n=wheezy
, talvez.Na página do manual :
Então isso está correto!
fonte