¿Cómo puedo verificar la lista de dependencias para un paquete deb


94

¿Cómo puedo verificar la lista de dependencias para un paquete deb? Estoy ejecutando Ubuntu 11.10 y he hecho una copia de seguridad de todos los paquetes de Deb var/cache/apt/archives. Quiero formatear mi PC y reinstalar solo las aplicaciones seleccionadas. Además, ¿cómo puedo obtener la lista de paquetes instalados y dependencias?


Para su segunda pregunta, consulte askubuntu.com/questions/17823/…
htorque el

Para obtener una lista completa de los paquetes instalados, usedpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino,

Respuestas:


73

Además del dpkgmétodo, puede verificar las dependencias de los paquetes en el repositorio:

apt-cache depends package-name

EDITAR Actualizado con la recomendación de @ Tino. El comentario de @ Tigran ya no se aplica.


3
Nota: esto solo funciona si el paquete ya está instalado.
Tigran Saluev

@TigranSaluev Tenga en cuenta que dpkg -I packagesolo funciona para paquetes instalados. apt-cachefunciona para todos los paquetes que se conocen después de haberlo hecho apt-get update.
Tino

1
apt-cache depends packagees una mejor manera, en ese caso, ya showpkgque no dice si una dependencia es una recomendación, conflicto, etc., por lo que es un poco desconcertante. Para un script que se dependscombina con showpkgver unix.stackexchange.com/a/362866/23450
Tino

100

Esto le mostrará toda la información sobre el paquete:

dpkg -I package.deb

Eso ya no funciona en 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 Running 14.04 aquí y funciona perfectamente en mi caso. Debe ser la respuesta aceptada en mi humilde opinión.
magic_al

No olvide poner /var/cache/apt/archives/antes del nombre del paquete y usar la pestaña de finalización para encontrar el nombre completo del paquete con la versión, por ejemplo dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb.
Jason R. Coombs

1
No veo ninguna información de dependencia
Nick

Podría agregar que el paquete se puede obtener sin (re) instalarlo (lo cual es probablemente un caso de uso popular) con sudo apt-get install --reinstall --download-only [package name].
Karl Richter

2

apt-cache depends [Package-Name]funcionará tan bien Aunque si obtiene el .debpaquete desde fuera de su lista de fuentes, cosas como apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]podrían mostrar información desactualizada o podrían no sincronizarse con el paquete instalado real, por dpkg -I [Package-Name]lo tanto , funcionarían mejor en ese caso.


2

Para 14.04 y posterior:

dpkgno tiene -Imás y tiene que usar dpkg-debpara mostrar información del paquete, incluidas las dependencias:

dpkg-deb -I package.deb

1
Hola Fabby, dpkg no tiene la opción -I actualmente. Probado en Ubuntu 12.04 y 16.04. Tienes que usar dpkg-deb en su lugar.
Rup Narayan

Comentario retirado; respuesta aclarada y votada
Fabby

0

Aquí hay algunos postprocesos descuidados, y probablemente no muy exhaustivos, que puede hacer para dpkg -Igenerar elementos de dependencia como una lista:

Condensado para computadoras

# 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(',')
    ])
"

Esto hará eco de los paquetes que dependen de 'foo.deb' y aún no se han instalado: dpkg -I foo.deb | para i en $ (awk -F ',' '/ Depende: / {gsub (/: /, ","); para (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); do dpkg -s $ i &> / dev / null || echo $ i; hecho | tr '\ n' ''
Gregory Burd

@ GregoryBurd, siéntase libre de editar mi respuesta / psot todo lo que quiera, lo publiqué como wiki de la comunidad por este motivo ^ u ^
ThorSummoner

Cuando ejecuto este comando en elasticsearch, emite libc6\nadduser\n Installed-Size\n. Es decir, parece coincidir más que solo la línea Depende.
Jason R. Coombs

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.