Come determinare se un pacchetto è un metapacchetto dalla riga di comando?


14

Come posso determinare se un pacchetto è un metapacchetto dalla riga di comando, possibilmente tramite apt-get, aptitude o apt-cache?

Ho provato:

apt-cache show texlive-full
apt-cache showpkg texlive-full

ma l'unico modo in cui posso dire che questo pacchetto è meta è leggendo il campo "en-description".

C'è un modo più automatico di farlo, che mi darà una risposta sì / no, o almeno un campo come "en-description" dedicato a questo?


1
A parte il fatto che questa domanda e le risposte sono piuttosto interessanti, perché vuoi saperlo?
Joe,

1
Stavo installando cose con apt-get e ho notato che se installo un metapacchetto (texlive-full), installa le dipendenze che voglio, ma se disinstallo il metapacchetto, le dipendenze rimangono lì (apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremove). Poi ho scoperto che questo è il caso solo per i metapacchetti brainstorm.ubuntu.com/idea/17785 . attitudine d'altro canto rimuove le dipendenze non necessarie da un metapacchetto.
Ciro Santilli 5 改造 中心 法轮功 六四 事件

Risposte:


7

Non esiste una definizione formale di un metapacchetto. La definizione informale è che un metapacchetto è destinato esclusivamente ad essere installato per le sue dipendenze e non contiene alcun file utile.

È possibile definire un metapacchetto come pacchetto che non contiene file. Non è possibile determinarlo dal database del pacchetto. È possibile utilizzare il database dei file e verificare che il pacchetto contenga solo directory (molti di questi pacchetti contengono alcune directory). In effetti, la maggior parte dei metapacchetti contiene alcuni file in /usr/share/doc/<package name>: un copyrightfile, un log delle modifiche, a volte qualche altro. Ecco un'approssimazione che definisce un metapacchetto come contenente solo i file /usr/share/doc/<some directory>(non nelle relative sottodirectory) e le directory principali:

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
  echo "$package looks like a metapackage"
fi

Un altro approccio è cercare un tag del pacchetto con debtags. Esistono diversi tag che vengono comunemente utilizzati sui metapacchetti.

debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'

Un altro approccio è quello di cercare pacchetti di piccole dimensioni. Ogni directory conta come 4 kB, quindi pianifica di conseguenza quando scegli una soglia (di nuovo, questa è un'approssimazione).

aptitude -F '%I %p' search "~n^$package\$"

Riflettendomi, mi chiedo se intendi i pacchetti virtuali piuttosto che i metapacchetti. I pacchetti virtuali non sono in realtà pacchetti ma nomi di pacchetti utilizzati nei Provides:campi. Puoi elencarli con aptitude search '~v'. In esecuzione apt-cache showsu uno visualizza "Impossibile selezionare le versioni dal pacchetto 'zcav' in quanto è puramente virtuale". In esecuzione aptitude showelenca i pacchetti che lo forniscono. Un modo conveniente per mostrare i pacchetti virtuali è con apt-cache: questo stampa una riga per un pacchetto non virtuale e potenzialmente più righe (una per ciascun provider) per un pacchetto virtuale - puoi dire se il pacchetto è virtuale anche se esiste un solo fornitore perché il nome del provider è diverso.

apt-cache -n search "^$package\$"

grazie per quei metodi: non sapevo di debito! inoltre, ho letto da qualche parte che quando installi un metapacchetto con apt-get, è esattamente come se tu avessi installato ogni dipendenza a mano individualmente, il che significa che la rimozione del pacchetto originale non rimuoverà immediatamente le sue dipendenze, mentre per i normali pacchetti, rimuoverà rimuovere le dipendenze installate. È vero? In tal caso, come può apt-get distinguere? Anche questo potrebbe essere sfruttato ... (sembra anche che l'attitudine non se ne frega se la sua meta o no, è vero?)
Ciro Santilli 27 改造 中心 法轮功 六四 事件

@cirosantilli La funzione di rimozione automatica delle dipendenze non è correlata ai metapacchetti. Ciò accade perché se non si richiede esplicitamente un pacchetto, viene contrassegnato come installato automaticamente e viene rimosso un pacchetto contrassegnato come installato automaticamente se non viene installato alcun pacchetto che dipende da esso. Vedi apt-get autoremove, aptitude (un)markautoil Mcomando nell'interfaccia interattiva di aptitude.
Gilles 'SO- smetti di essere malvagio' il

@cirosantilli Riflettendomi, mi chiedo se quello che avevi in ​​mente fosse pacchetti virtuali e non metapacchetti? Vedi la mia risposta aggiornata.
Gilles 'SO- smetti di essere malvagio' il

Non sapevo davvero dei pacchetti virtuali, ma penso che texlive-full non sia virtuale poiché apt-cache show texlive-full mostra i soliti risultati. Anche così, dopo averlo fatto apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremovenon ho rimosso tutte le dipendenze installate. Ho letto da qualche parte che ciò è dovuto al fatto che texlive-full era un metapacchetto e che questo era un comportamento normale di un metapacchetto, ma forse era sbagliato. l'attitudine, d'altra parte, sembrava rimuovere bene le dipendenze installate automaticamente.
Ciro Santilli 27 改造 中心 法轮功 六四 事件

2

Potresti provare ad entrare

apt-cache search 'metapackage | meta-package'

che ti fornirà un lungo elenco e poi userà grep, diciamo, mostra tutti i metapacchetti relativi alla scienza

apt-cache search 'metapackage | meta-package' | grep -i science

Questo restituirà un lungo elenco (l'ho abbreviato qui)

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

Puoi usare un numero qualsiasi di alternative per la scienza, come KDEtrovare tutteKDE metapacchetti.

Questo è probabilmente il meglio che puoi fare apt-cache, ma dovrebbe localizzare rapidamente la maggior parte dei metapacchetti che vuoi trovare. Se non trova esattamente tutto quello che stavi cercando, la cosa più semplice è cercare nella sezione metapacchetto in Synaptic.

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.