È possibile consentire solo aggiornamenti di pacchetti specifici da un PPA


19

Diciamo che ho aggiunto un PPA che ha il pacchetto X che voglio ma ha anche un pacchetto Y che non voglio usare o da cui non ricevo aggiornamenti. Come posso, dallo stesso PPA, ricevere aggiornamenti per un pacchetto specifico ma negare gli aggiornamenti dallo stesso PPA per altri pacchetti?

Un esempio passo dopo passo sarebbe positivo dal momento che questo mi è successo in diversi PPA che hanno un pacchetto particolare che desidero, ma aggiungo anche un sacco di altri che non voglio ancora aggiornare.

Risposte:


16

Useresti quello che si chiama "pinning"

Supponendo che tu stia installando il pacchetto foo dal PPA, dovresti quasi certamente installare anche eventuali dipendenze dal ppa.

Ma se ci sono altri programmi, è possibile specificare quale repository utilizzare con il pinning.

Vedi Pinning wiki di Ubuntu

C'è un esempio di come bloccare un ppa su quella pagina

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

Dalla pagina wiki:

Per rendere apt-get upgrade il più indolore possibile impostare una Pin-Priority inferiore sul PPA, questo interromperà l'installazione di versioni di pacchetti indesiderate. Una volta impostati, i pacchetti dal PPA ubuntu-mozilla-daily perderanno sempre in qualsiasi contesto con pacchetti di altri repository, anche se hanno una versione superiore.

Crea il file /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

Aggiungi quanto segue al file:

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

Utilizzare i seguenti comandi, prima e dopo, per verificare che Pin-Priority sia stato aggiornato.

apt-cache policy

apt-cache policy firefox-3.5

7

Prima di tutto, se hai già aggiornato i pacchetti da un PPA per errore, vedi questa risposta: /ubuntu//a/142808/103117 in particolare la sezione sull'uso di ppa-purge. Dato che avevo già aggiornato i pacchetti e apt-get non eseguirà il downgrade indipendentemente dalle priorità, è più semplice eliminare prima tutti i pacchetti aggiornati, quindi correggere le priorità, quindi aggiungere nuovamente il PPA e aggiornare solo i pacchetti desiderati.

Per una spiegazione completa del sistema di priorità / pinning, vedere man apt_preferences.

Se un pacchetto è disponibile da più fonti, a ciascuno verrà assegnata una priorità e puoi vederlo con apt-cache policy <package name>. Ad esempio, utilizzo un PPA chiamato nathan-renniewaldock / ppa / ubuntu e da qui non voglio installare mysql-server-5.5 (il mio "pacchetto Y"). Quindi posso controllare la mia situazione attuale con:

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

Quindi, poiché tutto ha priorità 500, in base alla pagina man viene scelto quello con il numero di versione più alto.

Se, ad esempio, si desidera installare solo ddclient ("pacchetto X"), ma non altri pacchetti, si desidera ridurre la priorità per tutti i pacchetti nel PPA ad eccezione di ddclient. Crea un file chiamato /etc/apt/preferences.d/nathan-preferences. Si noti che tutti i file in quella directory vengono letti e ci sono alcune regole sul nome del file (deve contenere solo caratteri alfanumerici, valori, trattini e non avere estensione o terminare con .pref).

Innanzitutto dobbiamo sapere come identificare il nostro PPA. Il apt-cache policycomando da solo invia informazioni su tutte le fonti. So che il mio PPA ha "nathan" nel nome, quindi faccio:

$ 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

La parte interessante è "o = LP-PPA-nathan-renniewaldock", che usiamo nel file /etc/apt/preferences.d/nathan-prefs in questo modo:

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

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

Questo imposta tutto nel PPA sulla priorità 400, quindi riporta ddclient al valore predefinito 500. Ora, posso verificare che abbia funzionato:

$ 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

Quindi ddclient ha una priorità di 500, che è la stessa del pacchetto Ubuntu originale, ma verrà installata dal nathan PPA perché quella è una versione superiore. Ora assicuriamoci che gli altri pacchetti non siano installati:

$ 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

In questo caso il pacchetto del nathan PPA ha la priorità 400 che è inferiore a quella di Ubuntu, quindi anche se è di una versione superiore non verrà aggiornato. Possiamo verificare con:

$ 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]?

Dal momento che solo il pacchetto che voglio deve essere aggiornato, sono felice di dire di sì.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.