É possível permitir apenas atualizações de pacotes específicos de um PPA

19

Digamos que eu adicionei um PPA com o pacote X que eu quero, mas também tem o pacote Y do qual 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, pois isso aconteceu comigo em vários PPAs que possuem um pacote específico que eu quero, mas também adicionam um monte de outros que ainda não quero atualizar.

Luis Alvarado
fonte

Respostas:

16

Você usaria o que é chamado "fixar"

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

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

Consulte Fixação wiki do Ubuntu

Há um exemplo de fixar um ppa nessa página

https://help.ubuntu.com/community/PinningHowto#Pinning_the_ubuntu-mozilla-daily_PPA

Na página wiki:

Para tornar a atualização do apt-get o mais simples possível, defina uma Prioridade de Pin mais baixa no PPA, isso impedirá a instalação de versões indesejadas de pacotes. Uma vez definidos, os pacotes do PPA ubuntu-mozilla-daily sempre perdem 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 do Pin foi atualizada.

apt-cache policy

apt-cache policy firefox-3.5
Pantera
fonte
7

Primeiramente, se você já atualizou os pacotes de um PPA por engano, consulte esta resposta: /ubuntu//a/142808/103117, em particular a seção sobre o uso do ppa-purge. Como eu já atualizei os pacotes e o apt-get não fará o downgrade independentemente das prioridades, é mais fácil limpar todos os pacotes atualizados primeiro, depois corrigir as prioridades, adicionar novamente o PPA e atualizar apenas 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 uma 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 não quero instalar o mysql-server-5.5 (meu "pacote Y") a partir daí. Para que eu possa 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

Portanto, como tudo é prioridade 500, de acordo com a página de manual, é escolhido aquele com o número de versão mais alto.

Se, por exemplo, você deseja instalar apenas o ddclient ("pacote X"), mas não qualquer outro pacote, reduz 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 existem algumas regras sobre o nome do arquivo (ele deve conter apenas caracteres alfanuméricos, hífens, traços e não deve ter extensão ou terminar em .pref).

Primeiro, precisamos saber como identificar nosso PPA. O apt-cache policycomando por si só distribui 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

Isso define tudo no PPA para a prioridade 400 e, em seguida, volta o ddclient para o padrão 500. Agora, posso verificar se 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

Portanto, o ddclient tem uma prioridade de 500, que é igual ao pacote original do Ubuntu, mas será instalado a partir do PPA nathan porque esse é uma versão superior. Agora, verifique se 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

Nesse caso, o pacote do PPA nathan tem prioridade 400, que é menor que o Ubuntu, portanto, mesmo sendo de uma versão superior, 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 apenas o pacote que eu quero deve ser atualizado, fico feliz em dizer que sim.

Rob Fisher
fonte