Come posso scegliere i pacchetti ciliegia da un PPA?


45

C'è un modo per selezionare i pacchetti da un repository ppa di Cherry che aggiungi? Cioè, per escludere alcuni dall'aggiornamento includendone altri?

Ad esempio, desidero solo il pacchetto chromium-browser da questo repository ma non gli altri. Quindi non voglio che i miei sudo apt-get upgradepacchetti di ppa (oltre a quelli per il browser chromium) vengano installati su quelli esistenti, proprio quello.

Mi rendo conto che questa è una licenza per spararmi nel piede se ho letto male le dipendenze ed escludo quelle necessarie a quelle che ho incluso, ma so per certo che in questo caso gli altri pacchetti non sono dipendenze per quella.

Questo è possibile? Forse c'è qualche whitelist / file lista nera o qualcosa del genere?


Trasmetterei synaptic per tre motivi: Ubuntu lo lasciò come aggiornamento del software a favore di Ubuntu Software Center, non vedevo un modo per Synaptic di fermare gli aggiornamenti da un ppa sui file installati (che era il mio problema), e io preferisce una soluzione a riga di comando a una GUI. Alla fine ho trovato qualcosa che ha funzionato (vedi la mia risposta di seguito).
yuvilio,

2
Il Software Center viene utilizzato per l'installazione e la rimozione del software, Update Manager viene utilizzato per l'aggiornamento, potresti aver usato il pinning in Synaptic in modo che gli altri pacchetti non si aggiornassero, anche per un nuovo utente che non vorrebbe fare confusione con il Terminale La GUI sarebbe preferita, ovviamente la tua è praticamente la risposta corretta.
Uri Herrera,

Ci sono alcune cose che semplicemente non puoi fare tramite Software-Center (che sono facili con Synaptic). E non tutti (specialmente i neofiti) sono a proprio agio con la linea di comando.
Mrokii,

@Mrokii Sono d'accordo che il mio approccio non è per i principianti. La risposta sinaptica che hai scritto e cui Uri Herrera ha accennato, che presumo funzioni, è migliore in questo senso. Lascerò che altri che lo provano lo valutino.
yuvilio,

Risposte:


61

Ho trovato un modo per farlo.

Il trucco sta usando due clausole di pinning. Il primo a non consentire TUTTI i pacchetti dal PPA e il secondo a selezionare quelli desiderati.

Quindi, per l'esempio sopra, aggiungo prima il ppa come al solito:

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

Ora, se eseguo la politica di apt-cache, mi mostrerà che è disponibile una versione più recente del browser chromium e che verrà installata con un aggiornamento perché ha la stessa priorità (500) del mio browser chromium corrente.

$ 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)
$ 

È fantastico per quanto riguarda quel pacchetto, ma non voglio installare gli altri in questo ppa (che ha anche una priorità 500). In questo momento, se provo ad aggiornare, otterrò molto di più dei soli pacchetti di cromo che voglio da quel repository:

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

Quindi quello che posso fare è dire a apt che voglio che tutti i pacchetti in quella ppa, in questo caso webapps-preview, abbiano una priorità più bassa tranne quelli con "chromium" nel loro nome. Il meccanismo per questo sta bloccando un pacchetto

Creo un file in /etc/apt/preferences.d/ con due clausole. Il primo dice dare tutti i pacchetti nelle webapps-anteprima ppa una priorità inferiore a quello normale (in modo che siano non preferito, anche se hanno un numero di versione più alto. La seconda clausola sostituisce in parte la prima dicendo danno i pacchetti in che ppa con "chromium" nel loro nome ha la stessa priorità degli altri pacchetti in modo che venga installato (con un numero di versione superiore).

$ 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

Per identificare la stringa corretta per l'opzione "Pin: release" possiamo usare di nuovo la politica di apt-cache.

$ 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
...

Per le versioni apt <0.8.14 i pacchetti aggiunti devono essere specificati esplicitamente poiché i caratteri jolly non funzionano:

$ 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 ora, quando provo ad aggiornare ottengo solo i pacchetti che desidero da quel ppa e non dagli altri. Tutte le ciliegie ben raccolte per me:

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

5
piuttosto complicato, imho.
Mrokii,

5
Non sono d'accordo, questo è piuttosto semplice per ciò che qualcuno vuole. E bello avere tutte le istruzioni per identificare il nome Pin del ppa.
Nicholi,

Questa risposta specifica è per coloro che vogliono assicurarsi che apt preferisca sempre i pacchetti di un repository specifico. Se vuoi una soluzione una tantum, prova questa risposta o questa
Braiam

8

Puoi anche selezionare la versione che desideri installare con il ?originselettore:

Corrisponde alle versioni del pacchetto la cui origine corrisponde all'origine dell'espressione regolare. Ad esempio, "!? Origin (debian)" troverà eventuali pacchetti non ufficiali sul proprio sistema (pacchetti non dall'archivio Debian).

Quindi, nel tuo caso specifico puoi usare:

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

Oppure puoi specificare la versione usando <packagename>=<version>:

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3

5

Puoi effettivamente "scegliere ciliegia" determinati pacchetti tramite Synaptic ed è molto semplice. Funziona così:

  • Se vuoi farlo solo per alcuni PPA, scegli "Origine" (angolo in basso a sinistra) nella finestra Synaptic e quindi scegli il PPA che vuoi modificare

  • scegli tutti i pacchetti che non desideri più aggiornare automaticamente.

  • selezionare il menu "Versione pacchetto / blocco". Tutti i pacchetti che hai scelto non verranno più aggiornati automaticamente fino a quando non li sbloccherai di nuovo.

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.