Ich möchte alle Pakete auflisten, die eine bestimmte Datei verwenden. Ich bin bereit, ein beliebiges Tool (wie dpkg, dlocate, apt-file usw.) zu verwenden. Bitte beachten Sie, wenn ich 'use' sage, dass ich nicht unbedingt nur die Datei besitze / installiere, würde ich gerne wissen welches Paket auch darauf verweisen, dagegen verlinken usw.
Hier ist mein Anwendungsfall:
Ich habe sowohl KVM als auch VirtualBox installiert und habe letztendlich nur VirtualBox verwendet, da es sich herausstellt, dass VirtualBox und KVM um Ressourcen konkurrieren. Glücklicherweise verwende ich KVM nicht und habe es einfach deinstalliert.
durch Ausgabe von:
sudo apt-get purge kvm
Aber es war nicht genug und als ich versuchte, VirtualBox bei einem nachfolgenden Start auszuführen, bekam ich den folgenden Fehler:
Fehler: Maschine konnte nicht gestartet werden. Fehlermeldung: VirtualBox kann nicht im VMX-Root-Modus ausgeführt werden. Bitte deaktivieren Sie die KVM-Kernel-Erweiterung, kompilieren Sie Ihren Kernel neu und starten Sie ihn neu (VERR_VMX_IN_VMX_ROOT_MODE)
Ein Blick auf die geladenen Module ergab, dass die kvm-Kernelmodule noch geladen waren
mcradle:~> lsmod | grep -i kvm
kvm_intel 39416 0
kvm 244969 1 kvm_intel
abgestimmt auf eine Websuche, die vorschlug, qemu-kvm zu löschen
sudo apt-get purge qemu-kvm
das hat geholfen, jetzt ist meine frage: wie hätte ich systematisch zu diesem schluss kommen können ohne den web-magic-dust? Insbesondere wäre es schön zu wissen, wie man erkennen kann, welches Paket von einer bestimmten Datei abhängt .
Bitte beachten Sie, dass dlocate -S nicht gut genug ist, da es das Eigentümerpaket der Datei anzeigt und ich das Paket finden wollte, das das Laden von 'kvm.ko' verursacht!
mcradle:/etc# dlocate -S kvm.ko
linux-image-2.6.32-25-generic-pae: /lib/modules/2.6.32-25-generic-pae/kernel/arch/x86/kvm/kvm.ko
Wenn 'apt-rdepends -r' Dateien anstelle von Paketen akzeptiert hätte, die genau das gewesen wären, wonach ich gesucht habe.
Vielen Dank im Voraus und ich hoffe die Frage ist klar.
quelle
Antworten:
Es gibt keine allgemeine Möglichkeit, Pakete zu finden, die eine bestimmte Datei verwenden. Sie können kombinieren
dpkg -S
oderdlocate
herausfinden, welches Paket eine Datei enthält,apt-rdepends
um herauszufinden, welche Pakete von diesem Paket abhängen. Dies deckt jedoch nicht alle Fälle ab und gibt keinen Aufschluss darüber, von welchen Dateien jedes Paket abhängt (nicht, dass dies wirklich von Bedeutung ist: Abhängigkeiten gelten für Pakete insgesamt und können häufig nicht auf eine bestimmte Datei genau festgelegt werden im abhängigen Paket).Ein Fall, den Sie durch Abhängigkeiten nicht finden können, sind Abhängigkeiten von wichtigen Paketen (die in den Metadaten enthalten sind
Essential: yes
). Jedes System muss über die vollständige Sammlung der wesentlichen Pakete verfügen. Wenn Sie möchten, wird davon ausgegangen, dass jedes Paket von jedem wesentlichen Paket abhängt. Ein typisches Beispiel:kvm.ko
Ist ein Kernelmodul, das zum Kernelpaket gehört und von wesentlicher Bedeutung ist.Ein weiterer Fall, den Sie nicht immer durch Abhängigkeiten finden können, sind Plug-Ins. Viele Programme laden alle installierten Plug-Ins und werden auch dann ausgeführt, wenn das Plug-In nicht vorhanden ist. Daher gibt das Programm normalerweise keine Abhängigkeit vom Plug-In an. (Das Plug-In kann eine Abhängigkeit von einem Plug-In-Framework deklarieren, von dem das Paket abhängt, das die ausführbare Hauptprogrammdatei bereitstellt.
kvm
Dies ist jedoch nicht immer der Fall.) Beispiel: Das Kernelmodul ist eine optionale Komponente von kvm virtuelle Maschine; Sie können/usr/bin/kvm
daskvm
Kernelmodul auch dann ausführen , wenn es nicht geladen ist. Es ist nur langsamer.Hier ist die Nachricht von VirtualBox so allgemein und sicher, dass sie irreführend ist. Die Meldung geht davon aus, dass die KVM-Erweiterung im Kernel kompiliert ist, auf Ihrem System jedoch ein Modul, das entladen werden kann. Lediglich das Entladen des Moduls genügt, um VirtualBox zufrieden zu stellen: einfach ausführen
rmmod kvm_amd kvm_intel kvm
. Sie können dasqemu-kvm
Paket auch daran hindern, daskvm
Modul zu laden, indem Sie es bearbeiten/etc/init.d/qemu-kvm
oder/etc/init/qemu-kvm.conf
(abhängig davon, ob Ihre Ubuntu-Version ein SysVinit-Skript oder ein Upstart-Skript enthält) und die Zeile zum Laden des Moduls auskommentieren oder den Dienst daran hindern, beim Booten zu starten.quelle
kvm
Modul möglicherweise von derqemu
ausführbaren Datei anstatt von einem Startskript geladen ).Web Pixie Staub? Durch die Kombination ihrer Kräfte wird ein Team von Paketwerkzeugen ein blendendes Licht erstrahlen lassen und die Dunkelheit zum Rückstoß bringen!
dlocate -S
, um das Eigentümerpaket zu findenaptitude remove -sy $pkg
, um alle abhängigen Pakete herauszufinden (-syD
um Details hinzuzufügen;aptitude why
um nur eine Abhängigkeitskette zu finden).Oder in einem Schritt:
aptitude remove -sy $(dlocate -S /path/to/file |sed 's#:.*##' |uniq )
quelle
-sy
simuliert tatsächlich eine Deinstallation und sagt Ihnen, was vom Paket abhängt. Es läuft ohne root-Rechte.apt-file sollte dafür funktionieren. Das habe ich nicht getestet
quelle