Como posso verificar a lista de dependências para um pacote deb


94

Como posso verificar a lista de dependências para um pacote deb. Estou executando o Ubuntu 11.10 e fiz backup de todos os pacotes deb de var/cache/apt/archives. Quero formatar meu PC e reinstalar apenas os aplicativos selecionados. Além disso, como posso obter a lista de pacotes e dependências instalados.


Para sua segunda pergunta, consulte askubuntu.com/questions/17823/…
htorque 19/11/11

Para obter a lista completa dos pacotes instalados, use dpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

Respostas:


73

Além do dpkgmétodo, você pode verificar as dependências dos pacotes no repositório:

apt-cache depends package-name

EDIT Atualizado com a recomendação de @ Tino. O comentário de @ Tigran não se aplica mais.


3
Nota: isso funciona apenas se o pacote já estiver instalado.
Tigran Saluev 9/09/16

@TigranSaluev Observe que dpkg -I packagefunciona apenas para pacotes instalados. apt-cachefunciona para todos os pacotes conhecidos após a conclusão apt-get update.
Tino

1
apt-cache depends packageé uma maneira melhor, nesse caso, como showpkgnão indica se uma dependência é uma recomendação, conflito etc., por isso é um pouco intrigante. Para um script dependscombinado com showpkgconsulte unix.stackexchange.com/a/362866/23450
Tino

100

Isso mostrará todas as informações sobre o pacote:

dpkg -I package.deb

Isso não funciona mais no Ubuntu 14.04:dpkg -I splunkforwarder-6.3.3-f44afce176d0-linux-2.6-amd64.deb new debian package, version 2.0. size 15881308 bytes: control archive=3104 bytes. 153 bytes, 5 lines control 6058 bytes, 207 lines * postinst #!/bin/bash 2912 bytes, 93 lines * preinst #!/bin/bash Package: splunkforwarder Version: 6.3.3 Maintainer: Splunk Inc. <info@splunk.com> Architecture: amd64 Description: Splunk The platform for machine data.
Craig S. Anderson

@ CraigS.Anderson Correndo 14.04 aqui e funciona perfeitamente no meu caso. Deve ser a resposta aceita IMHO.
magic_al

Não se esqueça de colocar /var/cache/apt/archives/antes do nome do pacote e usar a conclusão da guia para encontrar o nome completo do pacote com a versão, por exemplo dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb.
Jason R. Coombs

1
Não vejo qualquer informação dependência
Nick

Você pode adicionar que o pacote pode ser obtido sem (re) instalá-lo (o que provavelmente é um caso de uso popular) sudo apt-get install --reinstall --download-only [package name].
Karl Richter

2

apt-cache depends [Package-Name]irá funcionar também. Embora se você originar o .debpacote de fora da sua lista de fontes, coisas como apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]podem mostrar informações desatualizadas ou podem não ser sincronizadas com o pacote instalado real, portanto dpkg -I [Package-Name], funcionaria melhor nesse caso.


2

Para 14.04 e posterior:

dpkgnão tem -Imais e você precisa usar dpkg-debpara mostrar informações de pacotes, incluindo dependências:

dpkg-deb -I package.deb

1
Oi Fabby, o dpkg não tem nenhuma opção -I atualmente. Testado no Ubuntu 12.04 e 16.04. Você precisa usar o dpkg-deb.
Rup Narayan 28/04

Comentário retraído; resposta esclarecida e votada
Fabby

0

Aqui estão alguns pós-processamento desleixado e provavelmente não muito abrangente que você pode fazer na dpkg -Isaída para obter itens de dependência como uma lista:

Condensado para computadores

# dpkg -I package.deb | python -c "import sys, re; t=re.split(r'\n(?= ?[\w]+:)|:', sys.stdin.read()); print '\n'.join([i.strip() for i in {key.strip(): value.strip() for key, value in zip(t[::2], t[1::2])}['Depends'].split(',')])"
#

Expandido para humanos:

dpkg -I package.deb | python -c "
    import sys, re;
    # Split keys and values into pairs (zipped together later)
    t=re.split(
        r'\n(?= ?[\w]+:)|:', 
        sys.stdin.read()
    ); 
    # Newline separate each dependency
    print '\n'.join([
        # Trim each dependency value
        i.strip() for i in {
            # Build assoc array from package metadata
            key.strip(): value.strip() 
            for key, value in zip(t[::2], t[1::2])
        }['Depends'].split(',')
    ])
"

Isso fará eco dos pacotes que dependem do 'foo.deb' e ainda precisam ser instalados: dpkg -I foo.deb | para i em $ (awk -F ',' '/ Depende: / {gsub (/: /, ","); for (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); faça dpkg -s $ i &> / dev / null || eco $ i; feito | tr '\ n' '' '
Gregory Burd

@GregoryBurd, Sinta-se livre para editar a minha resposta / psot tudo que você gosta, eu postei isso como uma comunidade wiki por este motivo ^ u ^
ThorSummoner

Quando executo esse comando na elasticsearch, ele é emitido libc6\nadduser\n Installed-Size\n. Ou seja, parece estar combinando mais do que apenas a linha Depends.
Jason R. Coombs

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.