Ich bin gelaufen sudo pacman -Syu
und habe einige interessante Fehler gelesen:
Fehler: Transaktion konnte nicht festgeschrieben werden (in Konflikt stehende Dateien)
und eine lange Liste von Dateien, gefolgt von exists in filesystem
. Die vollständige Ausgabe finden Sie hier: http://ix.io/lLw
Es scheint, dass viele dieser Dateien nicht mit einem Paket verknüpft sind, als ich sie überprüft habe pacman -Qo <path-to-file>
, aber ich habe sie nicht alle überprüft. Ich hatte eine schwache Verbindung, als ich lief pacman -Syu
, aber ich erhalte die gleichen Fehler, wenn ich später aktualisiere: http://ix.io/lLx
Was sollte ich tun? Soll ich alle Dateien überprüfen und diejenigen löschen, denen kein Paket zugeordnet ist? Sollte ich ein Update erzwingen (mit sudo pacman -S --force <package-name>
?)
Aktualisieren
Ich habe versucht zu rennen sudo pacman -S --force <package-name>
und habe folgendes herausgefunden:
[my-pc]/home/average-joe$ pacman -Qo /usr/lib/python3.5/site-packages/PyYAML-3.11-py3.5.egg-info
error: No package owns /usr/lib/python3.5/site-packages/PyYAML-3.11-py3.5.egg-info
Es sieht so aus, als würde pacman -S --force <package
es keine Verzeichnisse überschreiben, die Dateien enthalten. Vom mann:
Mit --force kann kein Verzeichnis mit einer Datei überschrieben oder Pakete mit in Konflikt stehenden Dateien und Verzeichnissen installiert werden.
Sollte ich nur die widersprüchlichen Verzeichnisse löschen? (Sie haben keine zugeordneten Pakete)
quelle
/usr/local/
/usr/
sudo pip install -U docker-compose==1.5.0rc3
auf dieser Seite installiert habe . Vielleichtsudo pip install
Konflikte mit Pacman?-S
Updates ( Teilinstallationen usw.) erhalten, können Sie dieses Szenario ausführen . Bei mir--force
hat alles mal geklappt.Antworten:
Okay, es sieht so aus
sudo pacman -S --force <package-name>
, als würde es funktionieren, aber es löst keine Konflikte zwischen Verzeichnissen. In solchen Fällen wirdsudo rm -rf
auf den in Konflikt stehenden Verzeichnissen ausgeführt, gefolgt vonsudo pacman -S --force <package-name>
Works.Jetzt
pacman -Syu
löst sich mein gut auf.quelle
sudo pacman -Syu --force
arbeitete für mich, aber Überschreiben wurde nicht erkannt.tl; dr: Deinstallieren Sie die in Konflikt stehende Anwendung, bevor Sie sie ausführen
pacman
.pacman
(und andere Paketmanager) führen einen Index der von ihnen verwalteten Pakete und Dateien (pacman --query --list
). Einige Dateien, z. B. die Konfiguration, werden als änderbar markiert und während des Upgrades nicht überschrieben (außer in besonderen Fällen, in denen der Paketmanager normalerweise die alte Datei entfernt, bevor er die neue erstellt). Andere Dateien werden als nicht änderbar markiert. Wenn eine andere Anwendung diese Dateien auf irgendeine Weise ändert, ohne den Index entsprechend zu aktualisieren, kann der Paketmanager während eines Upgrades nicht wissen, was mit diesen Dateien zu tun ist.Viele Anwendungen, die mit dem Standardmuster installiert wurden,
./configure && make && sudo make install
können mit deinstalliert werdensudo make uninstall
. Wenn Sie die Anwendung auf eine andere Weise installiert haben, müssen Sie möglicherweise etwas anderes deinstallieren. Im Allgemeinen kann es eine gute Idee, um eine Kopie der Installationsdateien zu halten irgendwo (zum Beispiel~/install
) in der Lage deinstallieren sie zuverlässig in solchen Fällen zu sein. Wenn Sie nur die in Konflikt stehenden Dateien entfernen, bleiben wahrscheinlich noch andere Dateien übrig, die möglicherweise andere Probleme verursachen könnten.Bei der Installation von Software mit anderen Paketmanagern gibt es Möglichkeiten, diese von den Systemdateien zu isolieren. Dies ist eine bewährte Methode, zum Beispiel während der Softwareentwicklung, bei der Sie Versionen konsistent halten und Konflikte mit anderer Software vermeiden möchten. Beispiele beinhalten:
quelle
sudo pip install
Befehl. Vielleicht sollte ich Pip mit Sudo vermeiden?Ich habe Pakete installiert, die ich normalerweise mit pip via pacman installiere. Aber einige Pakete sind nicht in Pacman Repos zu finden. Ich denke, wir sollten es vermeiden, pip mit sudo-Berechtigungen und istead zu installieren:
--user flag legt fest, dass Pip-Installationspakete stattdessen in Ihrem Ausgangsverzeichnis gespeichert werden, für das keine besonderen Berechtigungen erforderlich sind. https://stackoverflow.com/questions/42988977/what-is-the-purpose-pip-install-user
quelle
TLDR;
sudo pacman -Syu
erneut aus.bearbeitet, um TLDR hinzuzufügen und Tippfehler zu beheben
Obwohl ich mir ziemlich sicher bin, dass ich nichts Dummes getan habe, hatte ich dieses Problem vielleicht jedes Mal, wenn ich versucht habe, ein Update durchzuführen, seit ich Manjaro verwendet habe. drei oder vier mal innerhalb von zwei Monaten. Punkt zu sein, das behebt es.
Holen Sie sich eine Liste Ihrer Dateien.
Wenn das Update in Ihrem Terminalfenster fehlschlägt, erhalten Sie Folgendes:
... und vieles mehr.
Kopieren Sie die Ausgabe vom Terminal und speichern Sie sie in einer Datei. Ich habe nano verwendet und meine "files" genannt, wie in ~ / work / files .
Streifenfremde Infos:
cat files | awk '{print $2}' >> ~/work/files2
Dies nimmt das zweite "Wort" aus jeder Zeile und druckt es in files2.
Beschäftige dich mit den Akten
Sie können sie löschen, verschieben oder umbenennen.
Wenn etwas kaputt geht, ist es am einfachsten, es zu reparieren, indem wir es verschieben, anstatt es zu löschen oder umzubenennen:
mkdir ~/work/oldfiles while read -r file; do sudo mv -- "$file" ~/work/oldfiles/$file; done < files2
Wenn Sie sie wirklich löschen möchten, gibt es keinen Grund, dies zu tun ( GEFAHR GEFAHR ): while read -r file; do sudo rm - "$ file"; fertig <files2
Aktualisierung
Damit --overwrite funktioniert, was wir tun müssen, damit pacman erkennt, dass das Paket nicht kaputt ist, benötigen Sie die folgende Syntax:
sudo pacman -S package_name --overwrite /location/of/thing
sudo pacman -S libidn2 --overwrite /usr/lib/libidn2.so.0
sudo pacman -S libx000 --overwrite /usr/lib/libx000.so.f.u.loser
Ich hatte ein nettes Problem, bei dem, wenn ich den Symlink libidn2.so.0 löschte, nichts funktionierte und wenn ich ihn zurücksetzte, der Fehler "Existiert im Dateisystem" auftrat. Das Obige mit --overwrite war alles, was für mich funktioniert hat.
Endlich:
sudo pacman -Syu
quelle
Wenn Sie wie ich viele Dateien haben,
löst alle Probleme.
quelle
Nachdem Pacman die
--force
Option endgültig verworfen hat und die Ersatzoption--overwrite
wie erwartet funktioniert, sollte das folgende Verwendungsmuster beachtet werden.Ein äquivalenter Befehl zum Reproduzieren der
--force
Option, mit der alles, was in Konflikt steht, blind überschrieben wird, lautet:Oder
Der knifflige Teil besteht darin, dem Glob zu entkommen, um zu vermeiden, dass die Shell ihn zuerst erweitert.
quelle