Como determinar se um pacote é um meta-pacote na linha de comando?

14

Como posso determinar se um pacote é um meta-pacote na linha de comando, possivelmente via apt-get, aptitude ou apt-cache?

Eu tentei:

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

mas a única maneira de dizer a este pacote é meta é lendo o campo "en-description".

Existe uma maneira mais automática de fazer isso, que me dará uma resposta sim / não ou, pelo menos, tenha um campo como o "en-description" dedicado a isso?

Ciro Santilli adicionou uma nova foto
fonte
1
Além do fato de que esta pergunta e as respostas são bastante interessantes, por que você quer saber disso?
Joe
1
Eu estava instalando coisas com o apt-get e percebi que se eu instalar um metapacote (texlive-full), ele instalará as dependências que eu quero, mas se eu desinstalar o metapacote, as dependências permanecerão lá (apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremove). Então descobri que esse é o caso apenas dos metapacotes brainstorm.ubuntu.com/idea/17785 . Por outro lado, o aptitude remove as dependências desnecessárias de um metapacote.
Ciro Santilli # 5/12

Respostas:

7

Não há definição formal de um metapacote. A definição informal é que um metapacote é aquele destinado apenas a ser instalado por suas dependências e não contém nenhum arquivo útil.

Você pode definir um metapacote como um pacote que não contém arquivos. Não há como determinar isso no banco de dados do pacote. Você pode usar o banco de dados de arquivos e verificar se o pacote contém apenas diretórios (muitos desses pacotes contêm alguns diretórios). De fato, a maioria dos metapacotes contém alguns arquivos em /usr/share/doc/<package name>: um copyrightarquivo, um registro de alterações, algumas vezes mais. Aqui está uma aproximação que define um metapacote como contendo apenas arquivos /usr/share/doc/<some directory>(e não nos subdiretórios) e nos diretórios principais:

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

Outra abordagem é procurar uma etiqueta de pacote com debtags. Existem várias tags que são comumente usadas em metapacotes.

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

Outra abordagem é procurar pacotes com um tamanho pequeno. Cada diretório conta como 4 kB, portanto, planeje adequadamente ao escolher um limite (novamente, isso é uma aproximação).

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

Após reflexão, pergunto-me se você quer dizer pacotes virtuais em vez de metapacotes. Pacotes virtuais, na verdade, não são pacotes, mas nomes de pacotes usados ​​em Provides:campos. Você pode listá-los com aptitude search '~v'. A execução apt-cache showem um exibe "Não é possível selecionar versões do pacote 'zcav', pois é puramente virtual". A execução aptitude showlista os pacotes que o fornecem. Uma maneira conveniente de mostrar pacotes virtuais é apt-cache: imprime uma linha para um pacote não virtual e potencialmente várias linhas (uma para cada provedor) para um pacote virtual - você pode saber se o pacote é virtual, mesmo que exista um único provedor porque o nome do provedor é diferente.

apt-cache -n search "^$package\$"
Gilles 'SO- parar de ser mau'
fonte
obrigado por esses métodos: eu não sabia sobre débitos! Além disso, li em algum lugar que, quando você instala um metapacote com o apt-get, é exatamente como se você tivesse instalado cada dependência manualmente manualmente, o que significa que a remoção do pacote original não removerá imediatamente suas dependências, enquanto que nos pacotes normais, remove irá remova as dependências instaladas. Isso é verdade? Se sim, como o apt-get pode dizer a diferença? Esta poderia ser explorada também ... (também parece que a aptidão não se importa se sua meta ou não, isso é verdade?)
Ciro Santilli新疆改造中心法轮功六四事件
@cirosantilli O recurso de remover automaticamente dependências não está relacionado aos metapacotes. Isso acontece porque, se você não solicitar um pacote explicitamente, ele será marcado como instalado automaticamente , e um pacote marcado como instalado automaticamente será removido se nenhum pacote que depende dele estiver instalado. Veja apt-get autoremove, aptitude (un)markautoo Mcomando na interface interativa aptitude.
Gilles 'SO- stop be evil'
@cirosantilli Pensando bem, eu me pergunto se você tinha em mente pacotes virtuais e não metapacotes? Veja minha resposta atualizada.
Gilles 'SO- stop be evil'
Eu realmente não sabia sobre pacotes virtuais, mas acho que o texlive-full não é virtual, pois o apt-cache show texlive-full mostra os resultados usuais. Mesmo assim, depois que fiz isso apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremovenão removeu todas as dependências instaladas. Li em algum lugar que isso ocorre porque texlive-full era um metapacote e que esse era o comportamento normal de um metapacote, mas talvez isso estivesse errado. por outro lado, o aptitude parecia remover muito bem as dependências instaladas automaticamente.
Ciro Santilli
2

Você pode tentar entrar

apt-cache search 'metapackage | meta-package'

que fornecerá uma lista longa e, em seguida, use greppara, digamos, mostrar todos os metapacotes relacionados à ciência com

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

Isso retornará uma lista longa ( abreviei -a aqui)

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

Você pode usar qualquer número de alternativas para a ciência, como KDEencontrar todos os KDEmetapacotes.

Provavelmente, é o melhor que você pode fazer apt-cache, mas deve localizar rapidamente a maioria dos metapacotes que deseja encontrar. Se ele não encontrar exatamente tudo o que você estava procurando, a coisa mais simples é procurar na seção de metapacote em Synaptic.


fonte