Comment vérifier la liste de dépendances d'un paquet deb


94

Comment puis-je vérifier la liste de dépendance pour un paquet deb. J'utilise Ubuntu 11.10 et j'ai sauvegardé tous les paquets deb de var/cache/apt/archives. Je souhaite formater mon ordinateur et réinstaller uniquement les applications sélectionnées. Aussi, comment puis-je obtenir la liste des packages installés et des dépendances.


Pour votre deuxième question, consultez askubuntu.com/questions/17823/…
htorque

Pour la liste complète des paquetages installés utilisésdpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

Réponses:


73

En plus de la dpkgméthode, vous pouvez vérifier les dépendances des packages dans le référentiel:

apt-cache depends package-name

EDIT Mis à jour avec la recommandation de @ Tino. Le commentaire de @ Tigran ne s'applique plus.


3
Remarque: cela ne fonctionne que si le paquet est déjà installé.
Tigran Saluev

@TigranSaluev Notez que cela dpkg -I packagene fonctionne que pour les packages installés. apt-cachefonctionne pour tous les paquets connus après que vous ayez fini apt-get update.
Tino

1
apt-cache depends packageest une meilleure solution, dans ce cas, car showpkgelle ne dit pas si une dépendance est une recommandation, un conflit, etc., donc c’est un peu déroutant. Pour un script dependscombiné avec showpkgvoir unix.stackexchange.com/a/362866/23450
Tino

100

Cela vous montrera toutes les informations sur le paquet:

dpkg -I package.deb

Cela ne fonctionne plus sur 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 ici et cela fonctionne parfaitement dans mon cas. Devrait être la réponse acceptée à mon humble avis.
magic_al

N'oubliez pas de mettre /var/cache/apt/archives/avant le nom du paquet et d'utiliser la complétion de tabulation pour trouver le nom complet du paquet avec sa version, par exemple dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb.
Jason R. Coombs

1
Je ne vois aucune information relative à la dépendance
Nick le

Vous pouvez ajouter que le paquet peut être obtenu sans (ré) l’installer (ce qui est probablement un cas d’utilisation courant) avec sudo apt-get install --reinstall --download-only [package name].
Karl Richter

2

apt-cache depends [Package-Name]fonctionnera aussi bien. Cependant, si vous sourcez le .debpackage en dehors de votre liste de sources, des éléments tels apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]que des informations obsolètes ou ne pas être synchronisés avec le package réellement installé dpkg -I [Package-Name]fonctionneraient mieux dans ce cas.


2

Pour 14.04 et plus tard:

dpkgn'en a -Iplus et vous devez utiliser dpkg-debpour afficher les informations sur le paquet, y compris les dépendances:

dpkg-deb -I package.deb

1
Bonjour Fabby, dpkg n'a pas d'option -I pour le moment. Testé sur Ubuntu 12.04 et 16.04. Vous devez utiliser dpkg-deb à la place.
Rup Narayan

Commentaire retiré réponse clarifiée et votée
Fabby

0

Voici quelques traitements négligés, et probablement pas très complets, que vous pouvez faire pour dpkg -Igénérer des éléments de dépendance sous forme de liste:

Condensé pour ordinateurs

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

Développé pour les humains:

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

Cela fera écho aux paquets qui dépendent de 'foo.deb' et qui n'ont pas encore été installés: dpkg -I foo.deb | pour i dans $ (awk -F ',' '/ Depends: / {gsub (/: /, ","); pour (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); do dpkg -s $ i &> / dev / null || echo $ i; fait | tr '\ n' ''
Gregory Burd

@GregoryBurd, n'hésitez pas à éditer ma réponse à votre guise, je l'ai postée comme wiki de communauté pour cette raison ^ u ^
ThorSummoner

Lorsque je lance cette commande sur elasticsearch, elle émet libc6\nadduser\n Installed-Size\n. C'est-à-dire qu'il semble y avoir plus que la ligne Depends.
Jason R. Coombs

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.