Wie installiere ich nur die Abhängigkeiten eines Pakets?

45

Beim Ausführen sudo apt-get install <PACKAGE>werden das Paket, seine Abhängigkeiten und alle anderen empfohlenen Pakete installiert.

Es scheint jedoch keine Möglichkeit zu geben, nur die Abhängigkeiten eines Pakets zu installieren und das Paket selbst auszuschließen.

Wie würde man das machen?

Nathan Osman
quelle
Nur neugierig, warum willst du das machen?
Kris Harper
@ root45: Nun, es ist ein bisschen eine einzigartige Situation: Ich habe den Quellcode eines Python-Pakets in den Repos. und es fängt nicht an. Ich muss die Abhängigkeiten für das Paket installieren, ohne das Paket selbst zu installieren (da ich bereits den Code habe).
Nathan Osman
1
Könnten Sie nicht einfach eine Probefahrt mit apt-get install machen und nachsehen, was installiert werden soll, und dann einfach alles außer der App installieren, die Sie kompilieren?
Duffydack
2
Oder installieren Sie es einfach und entfernen Sie die Anwendung (jedoch nicht deren Abhängigkeiten). Und / oder installieren Sie ein aktualisiertes / repariertes Paket, nachdem Sie es erstellt haben.
1.
Ich brauche die Fähigkeit, dies zu tun, damit ich ein Quellpaket erstellen und installieren kann, das noch nicht für meine Architektur erstellt wurde. apt-get build-depInstalliert Build-Abhängigkeiten, apt-get -b sourcefunktioniert also, aber Laufzeitabhängigkeiten sind nicht installiert, dpkg -i *.debschlägt also fehl.
Trevor Robinson

Antworten:

24

Dadurch werden alle Pakete im Feld Depends und PreDepends des Pakets installiert :

sudo apt-get install $(apt-cache depends <PACKAGE> | grep Depends | sed "s/.*ends:\ //" | tr '\n' ' ')

Grundsätzlich fragen Sie nach allen Abhängigkeiten, filtern die (Pre) Depends heraus und formatieren die Ausgabe für apt-get.

Ein Problem sind Abhängigkeiten wie

Depends: pulseaudio
  pulseaudio:i386

oder virtuelle Pakete wie

Depends: <java6-runtime-headless>
  default-jre-headless
  openjdk-6-jre-headless

Also: Vorsichtig verwenden - es funktioniert nicht in allen Fällen!

Drehmoment
quelle
1
Es gibt viele Fälle, in denen dies nicht möglich ist, z. B. wenn virtuelle Pakete (in spitzen Klammern) vollständig beschädigt werden. Beispiele finden Sie hier: askubuntu.com/questions/25361/…
Trevor Robinson
Vielen Dank für den Hinweis, obwohl ich nicht wirklich sicher bin, wie die mit all diesen Problemen umgehen. :-(
htorque
2
Wenn ich darf, würde ich gerne eine einfachere Lösung mit AWK vorschlagen:sudo apt-get install $(apt-cache depends PACKAGE-NAME-HERE | awk '$1~/Depends/{printf $2" "}')
Sergiy Kolodyazhnyy
1
Ich bin auf das oben erwähnte Problem mit virtuellen Paketen gestoßen. Aktualisierung sedin der Pipeline auf die folgenden für mich gearbeitet: sed -e "s/.*ends:\ //" -e 's/<[^>]*>//'. In meinem Fall wurde dem virtuellen Paket in < >das Paket vorangestellt, das es befriedigte, sodass das Entfernen des Elements in < >funktioniert hat.
Bis
5

apt-get build-dep <package> werde den Trick machen.

Laudeci
quelle
13
Das funktioniert nicht, weil das Paket Laufzeitabhängigkeiten hat, mit denen es nicht installiert werden kann apt-get build-dep.
Nathan Osman
5

Wenn es Ihnen nichts ausmacht, zu kopieren oder zu kopieren, simulieren Sie einfach eine apt-get-Installation mit -s. Auf diese Weise sehen Sie, welche anderen Pakete installiert und / oder aktualisiert werden. Entfernen Sie dann einfach den Paketnamen, den Sie nicht installieren möchten, von dieser Liste und voila.

sudo apt-get install -s <package>

bksunday
quelle
4

Um alle Abhängigkeiten eines Pakets aufzulisten, das nicht installiert ist, können Sie verwenden aptitude

aptitude search '!~i?reverse-depends("^PACKAGE_NAME$")'

So installieren Sie die Abhängigkeiten

aptitude search '!~i?reverse-depends("^PACKAGE_NAME$")' -F "%p" | xargs sudo apt-get install

Beispiele

  • Listen Sie die Abhängigkeiten auf

    % aptitude search '!~i?reverse-depends("^mc$")'
    p    mc-data         - Midnight Commander - a powerful file manager -- data files
    
  • Nur den Paketnamen anzeigen

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p"
    mc-data                            
    
  • Installieren Sie die Abhängigkeiten für z mc

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p" | xargs sudo apt-get install     
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following NEW packages will be installed:
      mc-data
    0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
    Need to get 1.166 kB of archives.
    After this operation, 5.550 kB of additional disk space will be used.
    Get:1 http://archive.ubuntu.com/ubuntu/ wily/universe mc-data all 3:4.8.13-3 [1.166 kB]
    Fetched 1.166 kB in 0s (1.250 kB/s)
    Selecting previously unselected package mc-data.
    (Reading database ... 606748 files and directories currently installed.)
    Preparing to unpack .../mc-data_3%3a4.8.13-3_all.deb ...
    Unpacking mc-data (3:4.8.13-3) ...
    Processing triggers for doc-base (0.10.6) ...
    Processing 1 added doc-base file...
    Registering documents with scrollkeeper...
    Processing triggers for man-db (2.7.4-1) ...
    Processing triggers for hicolor-icon-theme (0.15-0ubuntu1) ...
    Setting up mc-data (3:4.8.13-3) ...
    
AB
quelle
1

Sie können die Ausgabe einer Apt-Installationssimulation analysieren, um dies zu tun. Hier ist eine Bash-Funktion, um dies für Sie zu tun:

apt-install-depends() {
    local pkg="$1"
    apt-get install -s "$pkg" \
      | sed -n \
        -e "/^Inst $pkg /d" \
        -e 's/^Inst \([^ ]\+\) .*$/\1/p' \
      | xargs apt-get install
}

Verwendungszweck:

apt-install-depends mopidy
Trevorjay
quelle
0

Mit können Sie nur Abhängigkeiten installieren apt-cache show package | grep Depends. Dies gibt Ihnen eine Liste von Abhängigkeiten:

apt-cache show apache2 | grep Depends
Depends: apache2-mpm-worker (= 2.2.22-6ubuntu5.1) | apache2-mpm-prefork (= 2.2.22-6ubuntu5.1) | apache2-mpm-event (= 2.2.22-6ubuntu5.1) | apache2-mpm-itk (= 2.2.22-6ubuntu5.1), apache2.2-common (= 2.2.22-6ubuntu5.1)

dann kannst du mit apt-get entscheiden, welches Paket installiert werden soll. Es gibt auch aptitudeim interaktiven Modus, Sie suchen nach dem Paket, wählen es aus und installieren dann seine Abhängigkeiten:

Bildbeschreibung hier eingeben

Braiam
quelle