Von Zeit zu Zeit stoßen Ubuntu-Benutzer auf Fehler vonapt
oderapt-get
, von der Form:
The package some-package needs to be reinstalled, but I can't find an archive for it.
Ich möchte wissen, was diesen Fehler verursacht, damit ich ihn reproduzieren und versuchen kann, sichere Möglichkeiten zur Behebung zu finden, selbst wenn das beschädigte Paket wichtig ist und viele Abhängigkeiten aufweist.Dieses bisschendesAPT-Quellcodegibt vielleicht einen kleinen Hinweis, aber ich weiß nicht, wie Pakete den Status erhalten, der den Fehler verursacht.
Wie kann ich diesen Fehler zum Testen auf meinem (Ubuntu MATE 17.10) System erzeugen?
Auslöser dafür istdiese aktuelle Frage zu „Ask Ubuntu“und mein langjähriges Unbehagen beim Schließen von Fragen zu diesem Fehler gegenApt/Synaptic muss das Paket neu installieren, kann aber das Archiv dafür nicht finden, dessen Antwort dpkg --force-all
zum Entfernen des fehlerhaften Pakets verwendet wird.Anonymes Feedbackschlägt vor, dass diese Lösung für viele Benutzer funktioniert hat, aber ich bin nicht sicher, ob die Verwendung --force-all
nicht später zu Problemen führt oder ob es eine gute Idee ist, diese Methode zum Entfernen wichtiger Pakete wie APT zu verwenden.
Antwort1
Der Fehler „Apt/Synaptic muss das Paket neu installieren, kann aber das Archiv dafür nicht finden“ ist manchmal unspezifisch.
Am häufigsten tritt dieser Fehler beim Upgrade von Ubuntu von einer Version auf eine andere auf.
Notiz: Ubuntu konvertiert von apt-get zu apt , aber ich verwende in diesem Beitrag apt-get. Weitere Informationen finden Sie unter man apt
undhttps://www.debian.org/doc/manuals/debian-reference/ch02.en.html
Die häufigste Ursache für diesen Fehler ist, wenn ein Benutzer ein Paket installiert und dann die .deb-Datei entfernt hat, normalerweise mitsudo apt-get clean
http://manpages.ubuntu.com/manpages/zesty/man8/apt-get.8.html
sauber
clean clears out the local repository of retrieved package files. It removes everything but the lock file from /var/cache/apt/archives/ and /var/cache/apt/archives/partial/
Dann wird irgendwann dpkg --reconfigure
entweder vom Benutzer oder durch ein Upgrade ein Aufruf ausgeführt, oder der Benutzer versucht irgendwann, das Paket sudo apt-get --reinstall foo
oder eine Variante davon erneut zu installieren.
Wenn Apt die .deb-Datei im Repository nicht finden kann, entweder weil die Pakete entfernt wurden (selten), das Repository vom System entfernt wurde oder ein Upgrade durchgeführt wurde und das Paket nicht im neuen Repository ist, erhalten Sie die Fehlermeldung „Apt/Synaptic muss das Paket neu installieren, kann aber das Archiv dafür nicht finden“.
Der Fehler kann aber auch andere Ursachen haben.
Zitieren Sie die relevanten Abschnitte aus der Manpage von dpkg (siehehttp://manpages.ubuntu.com/manpages/trusty/man1/dpkg.1.htmlfür Details )
INFORMATIONEN ÜBER PAKETE dpkg verwaltet einige nützliche Informationen über verfügbare Pakete. Die Informationen sind in drei Klassen unterteilt: Zustände, Auswahlzustände und Flags. Diese Werte sollen hauptsächlich mit dselect geändert werden.
Paketzustände
not-installed The package is not installed on your system. config-files Only the configuration files of the package exist on the system. half-installed The installation of the package has been started, but not completed for some reason. unpacked The package is unpacked, but not configured. half-configured The package is unpacked and configuration has been started, but not yet completed for some reason. triggers-awaited The package awaits trigger processing by another package. triggers-pending The package has been triggered. installed The package is unpacked and configured OK.
AKTIONEN
-i, --install package-file... Install the package. If --recursive or -R option is specified, package-file must refer to a directory instead. Installation consists of the following steps: 1. Extract the control files of the new package. 2. If another version of the same package was installed before the new installation, execute prerm script of the old package. 3. Run preinst script, if provided by the package. 4. Unpack the new files, and at the same time back up the old files, so that if something goes wrong, they can be restored. 5. If another version of the same package was installed before the new installation, execute the postrm script of the old package. Note that this script is executed after the preinst script of the new package, because new files are written at the same time old files are removed. 6. Configure the package. See --configure for detailed information about how this is done.
--Paket konfigurieren...|-a|--pending
Configure a package which has been unpacked but not yet configured. If -a or --pending is given instead of package, all unpacked but unconfigured packages are configured. To reconfigure a package which has already been configured, try the dpkg-reconfigure(8) command instead. Configuring consists of the following steps: 1. Unpack the conffiles, and at the same time back up the old conffiles, so that they can be restored if something goes wrong. 2. Run postinst script, if provided by the package. /var/lib/dpkg/status Statuses of available packages. This file contains information about whether a package is marked for removing or not, whether it is installed or not, etc. See section INFORMATION ABOUT PACKAGES for more info.
Wenn die Manpage(s) tl;dr sind -> Als Teil der Installation führt .deb / dpkg / apt Pre-/Post-Installationsskripte und andere Funktionen aus. Wenn diese Installations-/Entfernungsskripte aus verschiedenen Gründen fehlschlagen, wird ein Paket als „halb installiert“ (oder in einem anderen Zustand als nicht installiert / installiert) markiert. In diesem unsauberen Zustand wird manchmal auch der Fehler „Apt/Synaptic muss das Paket neu installieren, kann aber das Archiv dafür nicht finden“ angezeigt. In diesem Beispiel ist das Problem nicht ein fehlendes Archiv, sondern ein Problem in den Pre-/Post-Installationsskripten, das nicht durch erneutes Ausführen behoben werden kann. Daher ist der Fehler manchmal nicht spezifisch.
So verwalten Sie beschädigte Pakete
Versuchen Sie zunächst, Abhängigkeiten zu beheben, indem Sie sicherstellen, dass die entsprechenden PPA/Repositorys aktiviert sind, beispielsweise Universe oder welche Repositorys auch immer benötigt werden.
Dann die berüchtigten
sudo apt-get install -f
Lesenalle Ausgaben und Fehlermeldungen und posten Sie den Befehl und die Ausgabe hier, wenn Sie Hilfe benötigen.
Versuchen Sie, neu zu konfigurieren
sudo dpkg --configure -a
Dadurch werden die Konfigurationsskripte ausgeführt. Sie können anstelle von -a ein Paket angeben, aber -a ist hilfreicher, wenn Sie Probleme haben.
Lesenalle Ausgaben und Fehlermeldungen und posten Sie den Befehl und die Ausgabe hier, wenn Sie Hilfe benötigen.
Versuchen Sie, sich alle fehlerhaften Skripts anzusehen und, wenn möglich, den Fehler/das Problem im Skript zu beheben.
Versuchen Sie, das fehlerhafte Paket zu entfernen, notfalls mit Gewalt. Dabei müssen Sie sehr vorsichtig sein, da Sie sonst die Entfernung eines kritischen Pakets oder, schlimmer noch, einer Reihe kritischer Pakete erzwingen können. Die folgenden Befehle reichen von höflich über weniger höflich bis hin zu direktem Erzwingen. Probieren Sie sie der Reihe nach aus.
sudo dpkg --remove $broken_package sudo dpkg --remove --force-remove-reinstreq $broken_package sudo dpkg --remove --force-all $broken_package
Wenn eine dieser Optionen funktioniert, führen Sie aus
sudo apt-get update && sudo apt-get upgrade
. Möglicherweise müssen Sie auchsudo apt-get -f install
und/oder ausführen.sudo dpkg --configure -a
Wenn dies fehlschlägt, müssen Sie die Pakete manuell entfernen. Dazu müssen Sie möglicherweise alle Komponenten auf Ihrem System suchen und manuell löschen.
Gehen Sie folgendermaßen vor
Entfernen Sie die Dpkg-Informationen (siehe oben).
cd /var/lib/dpkg/info sudo rm -i package_name*
Achten Sie darauf, dass Sie hier nicht mehr entfernen als nötig.
Entfernen Sie abschließend das fehlerhafte Paket
sudo dpkg --remove --force-remove-reinstreq package_name
Sie sollten dann in der Lage sein, apt zu verwenden
sudo apt-get update sudo apt-get install -f sudo apt-get upgrade
Suchen und entfernen Sie nur bei Bedarf alle verbleibenden Dateien auf dem System manuell. Dies ist ein manueller Vorgang und kann Konfigurationsdateien,
/etc
Manpages oder gemeinsam genutzte Daten umfassen. Verwenden Sie „find“ oder „locate“, um möglicherweise verbleibende Dateien zu identifizieren.Natürlich sollten Sie beim Löschen von Systemdateien sehr vorsichtig sein. Löschen Sie keine Dinge, die Sie nicht verstehen, und verwenden Sie sie nicht,
rm -Rf
ohne zu wissen, was der jeweilige Befehl bewirkt.rm -i
ist wahrscheinlich besser, da die-i
Option eine Bestätigung verlangt.
Reproduzieren Sie dieses Problem
Sie können diese Fehlermeldung möglicherweise reproduzieren, indem Sie die Dpkg-Statusdatei eines beliebigen Pakets manuell bearbeiten /var/lib/dpkg/info
und den Status auf halb installiert ändern.
sudo nano /var/lib/dpkg/info/some_package
Bearbeiten Sie die Statuszeile, so dass sie lautet:
Status: purge reinstreq halb installiert
Versuchen Sie dann zu rennen apt-get
.
Wenn das nicht funktioniert, installieren Sie ein Paket von einem PPA, führen Sie „apt-get clean“ aus, entfernen Sie das PPA und versuchen Sie dann, das Paket neu zu installieren oder neu zu konfigurieren.
Entschuldigen Sie den langen Beitrag, aber ich hoffe, dass er Ihnen einen Einblick in die Ursache und Lösung dieser komplexen Fehlermeldung „Apt/Synaptic muss das Paket neu installieren, kann aber das Archiv dafür nicht finden“ gibt.