Neuinstallation aller Debian-Pakete

19

Ich habe versehentlich einen dpkg-Prozess beendet, der im Hintergrund ausgeführt wird, und ich möchte alle Pakete neu installieren, um sicherzustellen, dass alles in Ordnung ist.

Zuerst habe ich versucht, eine Liste aller Pakete zu erhalten und sie neu zu installieren

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log
apt-get install --reinstall $(cat list.log)

Aber es gibt Nachrichten wie:

E: Couldn't configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle.

Ich habe es versucht apt-get -f install, ohne Erfolg.

Als letzten Ausweg habe ich alle Programme neu installiert, bei denen die Prüfsummen fehlgeschlagen sind:

dpkg -l | grep ^ii | awk '{ print $2 }' | xargs debsums -s -a

Was soll ich tun, um alles neu zu installieren?

Edit: Problem gelöst. Das Problem war etwas anderes (siehe die Kommentare). Ich verstehe, dass es etwas ist, das man mit Debian vermeiden sollte.

alex_reader
quelle
1
Ich hatte vor kurzem einen Absturz beim Versuch, ein Paket zu installieren. Als ich neu gestartet und versucht habe, das Paket erneut zu installieren, wurde die Meldung "E: dpkg wurde unterbrochen. Sie müssen" dpkg --configure -a "manuell ausführen, um das Problem zu beheben." Durch Ausführen dieses Befehls wurden das Paket und die Konfigurationsdateien entfernt. Ich konnte das Paket dann von Grund auf neu installieren. Versuchen Sie, diesen Befehl auszuprobieren.
embedded.kyle
Es hat nichts getan, also ist wohl nichts kaputt. Ich werde später versuchen, zu überprüfen, ob meine Treiberprobleme behoben sind.
alex_reader
1
Neuinstallation aller Pakete == wirklich schlechte Idee. (a) Es ist fast immer unnötig (b) es wird wahrscheinlich versagen (c) Wenn Ihr System wirklich so durcheinander ist, installieren Sie es einfach neu. Beheben Sie einfach die Probleme, die Sie tatsächlich sehen.
Faheem Mitha

Antworten:

9

Probieren Sie es aus und denken Sie daran, dass ich es nicht getestet habe:

dpkg --get-selections > selections
sudo dpkg --clear-selections
sudo dpkg --set-selections < selections
sudo apt-get --reinstall dselect-upgrade

Quellen:

Marco Sulla
quelle
Mein Problem war ganz anders: Ich habe nicht den richtigen Kernel gebootet (!). Ich werde Ihre Antwort annehmen, da sie zu tun scheint, was ich wollte (aber auch ungetestet).
alex_reader
Dies wird nicht funktionieren und das System vollständig zerstören. In Zeile 3 wird apt deinstalliert, sodass anschließend nicht mehr alles neu installiert werden kann.
rkjnsn
@rkjnsn: Ich habe die Antwort aktualisiert und überprüft, ob sie funktioniert.
Marco Sulla
1
Wenn Sie dies versuchen, wird nichts erneut installiert, obwohl die Auswahldatei ausgefüllt ist: pi @ prodpi ~ $ sudo apt-get --reinstall dselect-upgrade Paketlisten lesen ... Fertig Abhängigkeitsbaum erstellen Statusinformationen lesen ... Fertig 0 aktualisiert , 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert. irgendeine Idee?
Andig
Ein Grund, warum ich denke, dass Ihr Code nicht funktioniert, ist, dass die Befehlsliste dpkg --get-selectionsauch Pakete deinstalliert.
Ortomala Lokni
2

Versuchen Sie für alle Fälle, jedes Paket neu zu installieren :

for i in $(cat list.log); do apt-get install --reinstall "$i"; done

Sie können auch die Option "Ja" für alle Fragen hinzufügen.

Feigling
quelle
cat: list.log: Keine solche Datei oder Verzeichnis
IgorGanapolsky
2
@IgorGanapolsky Führen Sie dpkg --get-selections > list.logzuerst.
QwertyChouskie
2
list.logwird aus der Frage genommen.
Stephen Kitt
2

In einer der von Lucas Malor zitierten Quellen habe ich ein Skript namens populator gefunden, das der Lösung nahe zu sein scheint. Wenn Sie die Paketauswahlvariable auf die Liste aller Ihrer Pakete setzen

PKGLIST=$(dpkg --get-selections | grep -v deinstall| cut -f1)

Sie können dann das Skript ausführen und alle Pakete neu installieren, aber das System wird wahrscheinlich einige Probleme haben. Es ist besser, es zuerst in einer virtuellen Maschine zu testen.

Hier ist eine Variante des Skripts über den obigen Link:

#!/bin/bash
#
# Script to pre-populate apt-get proxy for faster later downloads.
# It uses apt-get and wget to pull all the specified packages.
#

# Make sure only root can run our script
if [[ $EUID -ne 0 ]]; then
   echo "You're not root, are you?" 1>&2
   exit 1
fi

# Specify wanted packages
PKGLIST="exaile" 

# Clears out the local repository of retrieved package files
apt-get clean

# Resynchronize the package index files from their sources
apt-get update

# Re-install specified packages at the newest version. 
apt-get install --reinstall $PKGLIST

Wenn der Fehler angezeigt wird, dass bestimmte Pakete nicht erneut installiert werden können, führen Sie diesen Befehl aus, um es erneut zu versuchen:

sudo apt-get -y autoremove
Ortomala Lokni
quelle
1

Versuchen Sie dies stattdessen, da dies Ihre Ausgabe beansprucht und eine riesige Zeile mit Leerzeichen zwischen den Dateinamen ergibt.

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log awk '$1=$1' ORS=' ' list.log > newlist.log apt-get install --reinstall $(cat newlist.log)

Die einzige Änderung an Ihrem ursprünglichen Beitrag ist das Hinzufügen der zweiten awk-Anweisung. Dies könnte wahrscheinlich parallel zur ersten erfolgen, um die gewünschte Datei zu erstellen.

Diese Änderung erzwingt, dass apt-get die Pakete und alle fehlenden Abhängigkeiten, die nicht zum ersten Mal installiert wurden, korrekt erneut herunterlädt und sie der Reihe nach neu installiert.

Wenn wir es inline machen, würde es meiner Meinung nach dann so aussehen:

dpkg --get-selections | grep -v deinstall | awk '{print $1}' | awk '$1=$1' ORS=' ' > list.log

Und stellen Sie dann sicher, dass das System wirklich die richtigen Pakete (oder die neuesten) enthält, bereinigen Sie den apt-Cache, aktualisieren Sie ihn und laden Sie alle Dateien erneut herunter (Sie können die ersten beiden Schritte überspringen, wenn Sie nur das wollen, was Sie im Cache haben neu installiert):

apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)

Ich hatte über 2k Pakete auf einem System installiert, auf dem ich ein Upgrade durchgeführt habe und das einen Hangup hatte. Mit dpkg --configure -a wurde die Installation abgeschlossen (es war in der letzten Phase). Ich habe dieses dann ausgeführt, um alles neu zu installieren.

Oder wie unter /superuser/298912/reinstall-debian-while-keeping-installed-packages-and-data angegeben :

sudo apt-get install --reinstall $(dpkg --get-selections | grep -w 'install$' | cut -f1)

Stellen Sie einfach sicher, dass Sie zuerst ein "init 2" ausführen, bevor Sie eine Neuinstallation durchführen, da einige der Komponenten von X oder Ihrem bevorzugten Fenstermanager möglicherweise nicht neu installiert werden möchten.

Anonymer Feigling
quelle
Wenn Sie IFS nicht geändert haben, wird ein $(cat file)Token ohne Anführungszeichen in einem Leerzeichen eingefügt, und es wird genau das gleiche Ergebnis erzielt, unabhängig davon, ob die Datei durch Zeilenumbrüche oder Leerzeichen begrenzt ist. --reinstallkönnte helfen wurde aber schon zweimal vorher gegeben.
Dave_thompson_085
0

Wenn Sie Aptitude verwenden, gibt es eine einfache und schnelle Möglichkeit:

sudo aptitude reinstall '~i'

Dadurch werden alle derzeit installierten Pakete neu installiert.

Goetzc
quelle
-1

Wenn Sie mit RPM arbeiten und die Paketdatenbank beschädigt wird, besteht die Möglichkeit, diese Datenbank neu zu erstellen, sodass Sie im Grunde genommen keine Neuinstallation durchführen müssen. Wie ein Benutzer hier darauf hingewiesen hat, geschieht dies in Debian von dpkg --configure -a.

mdpc
quelle
1
Die Aufgabe von dpkg --configure -aist es, alle entpackten und nicht konfigurierten Pakete zu konfigurieren. Siehe Manpages von dpkgund dpkg-reconfigureund auch debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html
Ortomala Lokni