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.