Como instalo um pacote único a partir do teste Debian ou instável no stable?

41

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 updateseguido 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 -inã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 .

um CVn
fonte
4
A maneira usual de lidar com isso é através do backport - reconstruindo o pacote a partir das fontes Debian no Wheezy. O pacote que você está usando parece ser perl (ou pelo menos depende dele), portanto, provavelmente não é difícil fazer o backport. Se você quiser mais detalhes, diga-o. Provavelmente eu poderia fornecer uma explicação passo a passo, se você realmente precisar.
Faheem Mitha

Respostas:

15

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.lista seguir /etc/apt/preferences:

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

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

O valor 500 é o padrão para instável. Então, vamos tentar verificar o 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

Portanto, se eu tentasse instalar o iceweasel, ele seria baixado do ramo de testes porque possui a maior prioridade.

Tente alterar as prioridades para:

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

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910
Mikhail Morfikov
fonte
sudo apt-get -u install kpcli/jessieainda me dá 316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.suas prioridades sugeridas. Se eu fizer apt-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 ...
a CVn
OK, eu tenho uma coisa. Parece que o truque era usar Package: kpcli*(em vez de Package: kpcli) e depois um Package: * Pin: release o=Debian Pin-Priority: -10no 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!
um CVn 04/01
25

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:

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

Em seguida, para definir a versão padrão, crie um arquivo como /etc/apt/apt.conf.d/default-releasecontendo:

APT::Default-Release "jessie";

(No Wheezy, acho apt.conf.dque 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 kpclivocê não precisar se preocupar em fixar prioridades.

Nota: @amc apontou nos comentários que, se você usar em aptvez de aptitude, precisará usá-lo "stable"como em Default-Releasevez de "jessie". Obrigado! (Claro, você também pode usar aptitudecom essa configuração.)

Florian Jacob
fonte
… Isso parece uma maneira muito esperta de fazer isso. Por que isso não é aceito oficialmente?
JamesTheAwesomeDude
1
Eu receboThe value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Steven Penny
1
você precisa usar "estável" / "testando" / etc em vez de "jessie" / "esticar" para o lançamento padrão e quando usar o apt
amc
6

Pin: release a=wheezydeveria ser Pin: release n=wheezy, talvez.

Na página do manual :

O registro a seguir atribui uma alta prioridade a todas as versões de pacotes pertencentes a qualquer distribuição cujo nome de código seja "jessie".

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

Então isso está correto!

user65646
fonte
3
isso não instalaria TODOS os pacotes do jessy?
rubo77