Vraag Hoe kan ik de afhankelijkheidslijst voor een deb-pakket controleren?


Hoe kan ik de afhankelijkheidslijst voor een deb-pakket controleren? Ik run Ubuntu 11.10 en ik heb back-ups gemaakt van alle deb-pakketten var/cache/apt/archives. Ik wil mijn pc opmaken en alleen geselecteerde applicaties opnieuw installeren. Ook hoe kan ik de lijst met geïnstalleerde pakketten en afhankelijkheden krijgen.


73
2017-11-19 07:55


oorsprong


Zie voor je tweede vraag askubuntu.com/questions/17823/... - htorque
Gebruik de volledige lijst met geïnstalleerde pakketten dpkg --get-selections | sed -n 's/[[:space:]]install$//p' - Tino


antwoorden:


In aanvulling op de dpkg methode, kunt u de afhankelijkheden van pakketten in de repository controleren:

apt-cache depends package-name

BEWERK Bijgewerkt met de aanbeveling van @ Tino. @ Tigran's opmerking is niet langer van toepassing.


53
2017-11-19 08:16



Opmerking: dit werkt alleen als het pakket al is geïnstalleerd. - Tigran Saluev
@TigranSaluev Let op dat dpkg -I package werkt alleen voor geïnstalleerde pakketten. apt-cache werkt voor alle pakketten die bekend zijn nadat u het hebt gedaan apt-get update. - Tino
apt-cache depends package is een betere manier, in dat geval, als showpkg vertelt niet of een afhankelijkheid een aanbeveling is, een conflict, enz., dus het is een beetje verwarrend. Voor een script dat dat wel doet depends gecombineerd met showpkg zien unix.stackexchange.com/a/362866/23450 - Tino


Dit toont u alle informatie over het pakket:

dpkg -I package.deb

83
2017-11-19 08:03



Dat werkt niet meer op 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 hier en het werkt gewoon perfect in mijn geval. Moet het geaccepteerde antwoord IMHO zijn. - magic_al
Vergeet niet te zetten /var/cache/apt/archives/ vóór de naam van het pakket en gebruik de tab-voltooiing om de volledige pakketnaam met versie te vinden, bijvoorbeeld dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb. - Jason R. Coombs
Ik zie geen afhankelijkheidsinformatie - Nick
Je zou kunnen toevoegen dat het pakket kan worden verkregen zonder het (opnieuw) te installeren (wat waarschijnlijk een populaire use case is) sudo apt-get install --reinstall --download-only [package name]. - Karl Richter


apt-cache depends [Package-Name] zal ook werken. Hoewel als u het .deb pakket van buiten je bronnenlijst, dingen zoals apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name] kan verouderde info tonen of kan daarom niet worden gesynchroniseerd met het daadwerkelijk geïnstalleerde pakket dpkg -I [Package-Name] zou in dat geval het beste werken.


2
2018-02-26 15:58





Hier is wat slordige en waarschijnlijk niet erg omvattende post-processing die je kunt doen dpkg -I output om afhankelijkheid items als een lijst te krijgen:

Gecondenseerd voor computers

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

Uitgebreid voor mensen:

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

0



Dit zal echo's zijn van de pakketten die afhankelijk zijn van 'foo.deb' en die nog moeten worden geïnstalleerd: dpkg -I foo.deb | voor i in $ (awk -F ',' '/ Depends: / {gsub (/: /, ","); for (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); doe dpkg -s $ i &> / dev / null || echo $ i; gedaan | tr '\ n' '' - Gregory Burd
@GregoryBurd, Voel je vrij om mijn antwoord / psot te bewerken naar eigen goeddunken, ik heb het om deze reden gepost als communitywiki ^ u ^ - ThorSummoner
Wanneer ik dit commando op elasticsearch uitvoer, wordt het weergegeven libc6\nadduser\n Installed-Size\n. Dat wil zeggen, het lijkt meer te zijn dan alleen de regel Afhankelijk van elkaar. - Jason R. Coombs