É possível permitir somente atualizações de pacotes específicas de um PPA?

16

Digamos que eu tenha adicionado um PPA que tenha o pacote X que eu quero, mas que também tenha o pacote Y que eu não quero usar ou receber atualizações. Como posso, do mesmo PPA, receber atualizações para um pacote específico, mas negar atualizações do mesmo PPA para outros pacotes.

Um exemplo passo a passo seria bom, já que isso aconteceu comigo em vários PPAs que têm um pacote específico que eu quero, mas também adicionam um monte de outros que eu ainda não quero atualizar.

    
por Luis Alvarado 18.01.2012 / 18:28

2 respostas

15

Você usaria o que é chamado de "fixação"

Supondo que você esteja instalando o pacote foo do PPA, você certamente precisará instalar quaisquer dependências do ppa também.

Mas se houver outros programas, você pode especificar qual repositório usar com a fixação.

Veja postagem do wiki do Ubuntu

Existe um exemplo de fixação de um ppa nessa página

link

Da página da wiki:

Para fazer com que o upgrade do apt-get seja o mais simples possível, defina uma Pin-Priority menor no PPA, o que impedirá a instalação de versões indesejadas do pacote. Depois de definidos, os pacotes do PPA do ubuntu-mozilla-daily sempre perderão em qualquer concurso com pacotes de outros repositórios, mesmo que tenham uma versão superior.

Crie o arquivo /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

Adicione o seguinte ao arquivo:

Package: *
Pin: release o=LP-PPA-ubuntu-mozilla-daily
Pin-Priority: 400

Use os seguintes comandos, antes e depois, para verificar se a prioridade de pinos foi atualizada.

apt-cache policy

apt-cache policy firefox-3.5
    
por Panther 18.01.2012 / 18:41
7

Primeiro de tudo, se você já atualizou pacotes de um PPA por engano, veja esta resposta: link em particular a seção sobre o uso de ppa-purge. Como eu já atualizei os pacotes e o apt-get não fará downgrade, independentemente das prioridades, é mais fácil purgar todos os pacotes atualizados primeiro, depois corrigir as prioridades, adicionar novamente o PPA e apenas atualizar os pacotes desejados.

Para uma explicação completa do sistema de prioridade / fixação, consulte man apt_preferences .

Se um pacote estiver disponível em várias fontes, cada um receberá uma prioridade e você poderá ver isso com apt-cache policy <package name> . Por exemplo, eu uso um PPA chamado nathan-renniewaldock / ppa / ubuntu e eu não quero instalar o mysql-server-5.5 (meu "pacote Y") de lá. Então eu posso verificar minha situação atual com:

rob@frodo:~$ apt-cache policy mysql-server-5.5
mysql-server-5.5:
  Installed: 5.5.27-1~ppa1~precise
  Candidate: 5.5.27-1~ppa1~precise
  Version table:
 *** 5.5.27-1~ppa1~precise 0
        500 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

Então, como tudo é prioridade 500, de acordo com a página man, é escolhido o que tiver o maior número de versão.

Se, por exemplo, você deseja instalar apenas o ddclient ("pacote X"), mas não qualquer outro pacote, você deseja reduzir a prioridade de todos os pacotes no PPA, exceto o ddclient. Crie um arquivo chamado /etc/apt/preferences.d/nathan-preferences . Observe que todos os arquivos nesse diretório são lidos e há algumas regras sobre o nome do arquivo (ele deve conter apenas caracteres alfanuméricos, hipens, traços e não ter extensão ou terminar em .pref).

Primeiro, precisamos saber como identificar nosso PPA. O comando apt-cache policy por si só dispensa informações sobre todas as fontes. Eu sei que meu PPA tem "nathan" no nome, então eu faço:

$ apt-cache policy | grep nathan
400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main i386 Packages
     release v=12.04,o=LP-PPA-nathan-renniewaldock,a=precise,n=precise,l=PPA,c=main

A parte interessante é "o = LP-PPA-nathan-renniewaldock", que usamos no arquivo /etc/apt/preferences.d/nathan-prefs assim:

Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400

Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500

Isto ajusta tudo no PPA para a prioridade 400, e então retorna o ddclient para o padrão 500. Agora, eu posso verificar se ele funcionou:

$ apt-cache policy ddclient
ddclient:
  Installed: 3.8.0-11.4ubuntu1
  Candidate: 3.8.1-0~ppa1~precise
  Package pin: 3.8.1-0~ppa1~precise
  Version table:
     3.8.1-0~ppa1~precise 500
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 3.8.0-11.4ubuntu1 500
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
        100 /var/lib/dpkg/status

Então o ddclient tem uma prioridade de 500, que é o mesmo que o pacote original do Ubuntu, mas ele será instalado a partir do PPA nathan porque ele é uma versão superior. Agora vamos nos certificar de que os outros pacotes não serão instalados:

$ apt-cache policy mysql-server
mysql-server:
  Installed: 5.5.24-0ubuntu0.12.04.1
  Candidate: 5.5.24-0ubuntu0.12.04.1
  Version table:
     5.5.27-1~ppa1~precise 0
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

Neste caso, o pacote do nathan PPA tem prioridade 400, que é menor do que o do Ubuntu, por isso mesmo que seja de uma versão superior, ele não será atualizado. Podemos verificar com:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  ddclient
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 77.7 kB of archives.
After this operation, 11.3 kB of additional disk space will be used.
Do you want to continue [Y/n]?

Como só o pacote que desejo é atualizado, tenho o prazer de dizer sim.

    
por Rob Fisher 05.11.2012 / 00:05

Tags