So verwalten Sie beschädigte Pakete

So verwalten Sie beschädigte Pakete

Von Zeit zu Zeit stoßen Ubuntu-Benutzer auf Fehler vonaptoderapt-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-allzum 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-allnicht 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 aptundhttps://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 --reconfigureentweder vom Benutzer oder durch ein Upgrade ein Aufruf ausgeführt, oder der Benutzer versucht irgendwann, das Paket sudo apt-get --reinstall foooder 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

  1. 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.

  2. 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.

  3. 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 auch sudo apt-get -f installund/oder ausführen.sudo dpkg --configure -a

  4. 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
    
  5. Suchen und entfernen Sie nur bei Bedarf alle verbleibenden Dateien auf dem System manuell. Dies ist ein manueller Vorgang und kann Konfigurationsdateien, /etcManpages 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 -Rfohne zu wissen, was der jeweilige Befehl bewirkt. rm -iist wahrscheinlich besser, da die -iOption 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/infound 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.

verwandte Informationen