J'ai couru sudo pacman -Syu
et j'ai eu quelques erreurs intéressantes en lisant:
erreur: échec de la validation de la transaction (fichiers en conflit)
et une longue liste de fichiers suivie de exists in filesystem
. La sortie complète est ici: http://ix.io/lLw
Il semble que beaucoup de ces fichiers ne sont pas associés à un package lorsque je les ai vérifiés pacman -Qo <path-to-file>
, mais je ne les ai pas tous vérifiés. J'avais une connexion faible lors de l'exécution pacman -Syu
, mais je reçois les mêmes erreurs lors de la mise à jour ultérieure: http://ix.io/lLx
Que devrais-je faire? Dois-je vérifier tous les fichiers et supprimer ceux qui n'ont pas de paquet associé? Dois-je forcer la mise à jour (avec sudo pacman -S --force <package-name>
?)
Mise à jour
J'ai essayé de courir sudo pacman -S --force <package-name>
et j'ai eu ceci:
[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
Il semble que pacman -S --force <package
ne remplace pas les répertoires contenant des fichiers. De l'homme:
L'utilisation de --force ne permettra pas de remplacer un répertoire par un fichier ou d'installer des packages contenant des fichiers et des répertoires en conflit.
Devrais-je simplement supprimer les répertoires en conflit? (ils n'ont pas de paquets associés)
la source
/usr/local/
plutôt/usr/
)sudo pip install -U docker-compose==1.5.0rc3
de cette page . Peut-être dessudo pip install
conflits avec pacman?-S
mises à jour (installations partielles, etc.) vous permettra de réaliser ce scénario. Cas de moi a--force
travaillé tout le temps.Réponses:
Ok, cela semble fonctionner
sudo pacman -S --force <package-name>
, mais cela ne résout pas les répertoires en conflit. Dans de tels cas, en courssudo rm -rf
d' exécution sur les répertoires en conflit, suivi desudo pacman -S --force <package-name>
travaux.Maintenant ma
pacman -Syu
résolution se résout bien.la source
sudo pacman -Syu --force
travaillé pour moi, mais écraser n'a pas été reconnu.tl; dr: désinstaller l'application en conflit avant de l'exécuter
pacman
.pacman
(et d’autres gestionnaires de paquets) gardent un index des paquets et des fichiers qu’ils gèrent (pacman --query --list
). Certains fichiers, tels que la configuration, seront marqués comme étant modifiables et ne seront pas écrasés lors de la mise à niveau (sauf dans des circonstances spéciales, où le gestionnaire de packages écartera généralement l'ancien fichier avant de créer le nouveau). Les autres fichiers seront marqués comme non modifiables. Si une autre application modifie ces fichiers de quelque manière que ce soit sans mettre à jour l'index, le gestionnaire de packages n'a aucun moyen de savoir quoi faire avec ces fichiers lors d'une mise à niveau.De nombreuses applications installées à l'aide du
./configure && make && sudo make install
modèle standard peuvent être désinstallées à l'aide desudo make uninstall
. Si vous avez installé l'application d'une autre manière, vous devrez peut-être autre chose pour la désinstaller. En général, il peut être judicieux de conserver une copie des fichiers d'installation quelque part (par exemple~/install
) pour pouvoir les désinstaller de manière fiable dans de tels cas. Le simple fait de supprimer les fichiers en conflit laissera probablement d’autres fichiers traîner, ce qui pourrait éventuellement causer d’autres problèmes.Lors de l'installation de logiciels avec d'autres gestionnaires de paquets, il existe des moyens d'isoler ceux-ci des fichiers système. Il s'agit d'une meilleure pratique établie, par exemple lors du développement de logiciels, dans lequel vous souhaitez réellement conserver la cohérence des versions et éviter les conflits avec d'autres logiciels. Les exemples comprennent:
la source
sudo pip install
commande. Peut-être devrais-je éviter d'utiliser pip avec sudo?J'installais des paquets que j'installe habituellement avec pip via pacman à cause de cela. Mais certains paquets ne sont pas trouvés dans pacman repos. Je pense que nous devrions éviter d'installer pip avec les privilèges sudo et istead:
L'option --user permet à pip d'installer des paquetages dans votre répertoire personnel, ce qui ne nécessite aucun privilège spécial. https://stackoverflow.com/questions/42988977/what-is-the-purpose-pip-install-user
la source
TLDR;
sudo pacman -Syu
nouveau.édité pour ajouter TLDR et corriger les fautes de frappe
Bien que je sois à peu près sûr de n'avoir rien fait de stupide, j'ai ce problème à chaque fois que j'essaye de mettre à jour depuis que j'utilise Manjaro; trois ou quatre fois dans les deux mois. Point d'être, cela le corrige.
Obtenez une liste de vos fichiers.
Lorsque la mise à jour échoue dans la fenêtre de votre terminal, vous obtenez ceci:
... et beaucoup plus.
Copiez la sortie du terminal et mettez-la dans un fichier. J'ai utilisé nano et ai nommé le mien "fichiers", comme dans ~ / work / files .
Supprimer les informations superflues:
cat files | awk '{print $2}' >> ~/work/files2
Cela prend le deuxième "mot" de chaque ligne et l’imprime dans files2.
Traiter les fichiers
Vous pouvez les supprimer, les déplacer ou les renommer.
Si quelque chose se brise, il est plus facile de réparer si nous le cassons en le déplaçant au lieu de le supprimer ou de le renommer:
mkdir ~/work/oldfiles while read -r file; do sudo mv -- "$file" ~/work/oldfiles/$file; done < files2
Si vous voulez vraiment les supprimer, il n’ya aucune raison de le faire ( DANGER DANGER ): while read -r file; faire sudo rm - "$ file"; done <fichiers2
Mise à jour
Pour que --overwrite fonctionne, ce que nous devons faire pour que pacman réalise que le paquet n'est pas endommagé, vous avez besoin de la syntaxe suivante:
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
J'ai eu un problème mignon où si j'ai supprimé le lien symbolique libidn2.so.0, rien n'a fonctionné, et lorsque je l'ai remis en arrière, j'ai eu l'erreur "existe sur le système de fichiers". Ce qui précède, avec --overwrite, est tout ce qui a fonctionné pour moi.
Finalement:
sudo pacman -Syu
la source
Après que pacman a finalement déconseillé l’
--force
option et que l’--overwrite
option de substitution fonctionne comme prévu, il convient de noter le modèle d’utilisation suivant.Une commande équivalente pour reproduire une
--force
option qui écrase aveuglément tout ce qui est en conflit sera:Ou
La partie la plus délicate est d’échapper au glob pour éviter que le shell le développe en premier.
la source
Si vous avez beaucoup de fichiers comme moi,
résout tous les problèmes.
la source