Como eu instalo um único pacote do Debian testing ou unstable no stable?

38

Eu quero instalar um pacote único (e suas dependências, mas somente na medida em que não sejam satisfatórios no Wheezy) do Debian Jessie no meu sistema Wheezy, sem atualizar "tudo e a pia da cozinha" para as versões do Jessie. Especificamente, gostaria de instalar kpcli , que está disponível em Jessie, mas não em Wheezy.

Tudo que eu achei indica que eu deveria adicionar os repositórios do Jessie à minha lista de fontes, definir o pinning para manter tudo no wheezy e só pegar o pacote único do jessie, e isso vai se encaixar. No entanto, não está se encaixando para mim. Se eu criar o /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, em seguida, 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 puxe 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.) Alternativamente, se eu tiver a prioridade do pino muito baixa, eu esperaria que ele não fizesse nada. Em vez disso, no meu sistema, o apt-get deseja atualizar centenas de pacotes.

O que, exatamente, é necessário para instalar apenas este único pacote de uma versão do Jessie enquanto deixa intacto o restante do meu sistema Wheezy?

Note que neste caso em particular, o software é realmente escrito em Perl, então não há compilação para binário ou qualquer coisa assim envolvida; no entanto, há um punhado de dependências do módulo Perl. Portanto, uma alternativa possível seria instalar o .deb (baixado manualmente) usando algo que somente (1) permita especificar um único arquivo .deb local que deve ser instalado, como dpkg -i , e (2) lidar com dependências em uma maneira inteligente, que% plaindpkg -i não faz. No entanto, para toda a pesquisa que fiz em várias ocasiões e não consegui criar um guia simples de como fazer isso, uma solução genérica (que também funciona para pacotes binários e compilados) seria ótima. .

    
por a CVn 03.01.2014 / 15:23

3 respostas

15

Para cada entrada (estável, teste, instável) você tem prioridade 500. Você não deve usar pin > 1000. Eu uso 1001 somente quando eu quero fazer o downgrade de algo. Eu testei + entradas experimental + sid especificadas em /etc/apt/sources.list e o seguinte arquivo /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

Então, se eu tentei instalar o iceweasel, ele seria baixado do ramo de teste porque tem 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
    
por 04.01.2014 / 19:56
23

Na verdade, existe uma maneira de fazer isso sem usar afixação / prioridades. Em vez disso, você pode especificar qual é a versão padrão da qual você instalará os pacotes, que serão usados, a menos que seja especificado de outra forma, usando o parâmetro de release de destino. Isso funciona da mesma maneira se você quiser instalar pacotes selecionados de, por exemplo, backports.

Mostrarei isto para instalar pacotes do Stretch em Jessie, já que esses são os atuais stable / testing, mas funciona da mesma maneira para instalar pacotes do Jessie em Wheezy como foi originalmente solicitado.

Primeiro, adicione stretch como repositório, por exemplo em /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-release contendo:

APT::Default-Release "jessie";

(Em Wheezy, acho que apt.conf.d não existia e você precisaria colocar esse snippet em /etc/apt/apt.conf ).

Em seguida, a instalação de um pacote a partir do teste é tão simples quanto aptitude -t stretch install kpcli sem a necessidade de se preocupar com a fixação de prioridades.

Observação: @amc apontou nos comentários que, se você usar apt em vez de aptitude , precisará usar "stable" como Default-Release em vez de "jessie" . Obrigado! (Claro, você pode usar aptitude com essa configuração também.)

    
por 07.01.2016 / 14:36
6

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

Na página do manual :

The following record assigns a high priority to all package versions belonging to any distribution whose Codename is "jessie".

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

Então está correto!

    
por 19.04.2014 / 18:30

Tags