Como faço para escolher os pacotes de um PPA?

42

Existe uma maneira de selecionar pacotes de um repositório ppa que você adiciona? Ou seja, excluir alguns da atualização, incluindo outros?

Por exemplo, eu quero apenas o pacote chromium-browser de este repositório mas não os outros. Então eu não quero que meu sudo apt-get upgrade tenha outros pacotes (além do chromium-browser) do ppa instalados sobre os existentes, apenas esse.

Eu percebo que isso é uma licença para me atirar no pé se eu interpretar mal as dependências e excluir aquelas que são necessárias para as que eu incluí, mas eu sei que neste caso os outros pacotes não são dependências para aquele .

Isso é possível? Talvez haja algum arquivo de lista branca / negra ou algo assim?

    
por yuvilio 31.07.2012 / 05:01

3 respostas

56

Encontrou uma maneira de fazer isso.

O truque é usar duas cláusulas de fixação. O primeiro a desaprovar TODOS os pacotes do PPA e o segundo a selecionar os que você quer.

Portanto, para o exemplo acima, primeiro adiciono o ppa como de costume:

$ sudo add-apt-repository ppa:webapps/preview
...
$ sudo apt-get update
...

Agora, se eu executar a política do apt-cache, ele mostrará que há uma versão mais recente do navegador do cromo disponível e que será instalada com uma atualização porque está na mesma prioridade (500) que o navegador do cromo atual.

$ sudo apt-cache policy chromium-browser
chromium-browser:
  Installed: 18.0.1025.168~r134367-0ubuntu0.12.04.1
  Candidate: 20.0.1132.47~r144678-0precise1+webapps3
  Version table:
     20.0.1132.47~r144678-0precise1+webapps3 0
        500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main amd64 Packages
 *** 18.0.1025.168~r134367-0ubuntu0.12.04.1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/universe amd64 Packages
        500 http://ppa.launchpad.net/chromium-daily/beta/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     18.0.1025.151~r130497-0ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
E: Unable to parse package file /etc/apt/preferences.d/webapps-preview-pin-400 (1)
$ 

Isso é ótimo com relação a esse pacote, mas não quero que os outros neste ppa (que também têm uma prioridade 500) sejam instalados. No momento, se eu tentar fazer o upgrade, receberei mais do que apenas os pacotes do Chromium que eu quero desse repositório:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  bamfdaemon gwibber gwibber-service gwibber-service-facebook gwibber-service-twitter indicator-appmenu libbamf0 libbamf3-0 shotwell
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg gwibber-service-identica indicator-messages indicator-status-provider-mc5
  indicator-status-provider-pidgin libindicator-messages-status-provider1
8 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Need to get 25.3 MB of archives.
After this operation, 5,034 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

Então, o que eu posso fazer é dizer ao apt que eu quero que todos os pacotes em que o ppa, webapps preview neste caso, tenham uma menor prioridade exceto os com "cromo" em seu nome. O mecanismo para isso é que fixa um pacote

Eu criei um arquivo em /etc/apt/preferences.d/ com duas cláusulas. O primeiro diz que dá a todos os pacotes na ppa-preview do webapps uma prioridade menor que a do pacote regular (para que eles não sejam preferidos, mesmo se eles tiverem um número de versão mais alto. A segunda cláusula substitui parcialmente a primeiro, dizendo, dê aos pacotes nesse ppa com "cromo" em seu nome a mesma prioridade que outros pacotes, para que ele seja instalado (por ter um número de versão maior).

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  *chromium*
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

Para identificar a string correta para a opção "Pin: release", podemos usar a política do apt-cache novamente.

$ apt-cache policy
...
500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main i386 Packages
    release v=12.04,o=LP-PPA-webapps-preview,a=precise,n=precise,l=preview,c=main
    origin ppa.launchpad.net
...

Para versões apt < 0.8.14 pacotes fixos precisam ser especificados explicitamente, pois os curingas não funcionam:

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  chromium-browser chromium-codecs-ffmpeg chromium-browser-l10n chromium-codecs-ffmpeg-extra
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

E agora, quando eu tento atualizar, recebo apenas os pacotes que eu quero do ppa e não dos outros. Tudo bem cereja pegou para mim:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.1 MB of archives.
After this operation, 5,026 kB of additional disk space will be used.
Do you want to continue [Y/n]?
    
por yuvilio 31.07.2012 / 06:55
5

Você pode realmente escolher alguns pacotes via Synaptic e é muito fácil. Funciona assim:

  • Se você quiser fazer isso apenas para determinados PPAs, escolha "Origem" (canto inferior esquerdo) na janela do Synaptic e escolha o PPA que deseja alterar

  • escolha todos os pacotes que você não deseja atualizar automaticamente.

  • escolha o menu "Versão do pacote / bloqueio". Todos os pacotes que você escolheu não serão mais atualizados automaticamente até que você os desbloqueie novamente.

por Mrokii 31.07.2012 / 22:20
5

Você também pode selecionar o lançamento que deseja instalar com o seletor ?origin :

% bl0ck_qu0te%

Então, no seu caso específico, você pode usar:

sudo aptitude install !?origin(LP-PPA-webapps-preview) chromium

Ou você pode especificar a versão usando <packagename>=<version> :

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3
    
por Braiam 22.08.2013 / 00:56