“Failed to commit transaction (conflicting files)” error je chyba, ktorá sa objavuje pri dvoch konfliktných súboroch. Existujú tri spôsoby, ako problém vyriešiť. Prvým je premenovanie, druhým odstránenie prepojenia a tretím je prepísanie. To sa ale odporúča iba pri avizovaných manuálnych intervenciách.
Samotná chybová hláška nie je významná a nejako neovplyvňuje celkový systém. Ide len o kozmetickú chybu, ktorú odstrániť nezaberie veľa času a námahy. Riešenie si opíšeme pri nemožnosti aktualizácie ovládača pre grafickú kartu Nvidia.
Chybová hláška vyzerá asi takto:
error: failed to commit transaction (conflicting files) libglvnd: /usr/lib/libGL.so.1 exists in filesystem lib32-libglvnd: /usr/lib32/libGL.so.1 exists in filesystem Errors occurred, no packages were upgraded.
Najskôr si zistíme, komu patria dané súbory:
pacman -Qo /usr/lib/libGL.so.1 pacman -Qo /usr/lib32/libGL.so.1
Vlastníkom je:
pacman -Qo /usr/lib/libGL.so.1 /usr/lib/libGL.so.1 owns nvidia-libgl 361.28-5 pacman -Qo /usr/lib32/libGL.so.1 /usr/lib32/libGL.so.1 owns lib32-nvidia-libgl 361.28-4
I keď pri nevydarenej aktualizácii sa zdá, že nikomu nepatria:
pacman -Qo /usr/lib/libGL.so.1 error: No package owns /usr/lib/libGL.so.1 pacman -Qo /usr/lib32/libGL.so.1 error: No package owns /usr/lib32/libGL.so.1
Prvý spôsob je premenovanie oboch súborov napríklad na libGL.so.1_old:
sudo mv /usr/lib/libGL.so.1 /usr/lib/libGL.so.1_old sudo mv /usr/lib32/libGL.so.1 /usr/lib32/libGL.so.1_old
Po premenovaní môžme pokračovať v aktualizácii. Po nej sa premenovaný súbor môže odstrániť:
sudo rm /usr/lib/libGL.so.1 /usr/lib/libGL.so.1_old sudo rm /usr/lib32/libGL.so.1 /usr/lib32/libGL.so.1_old
Druhým spôsobom je odstránenie prepojenia:
sudo rm /usr/lib/libGL.so.1 sudo rm /usr/lib32/libGL.so.1 sudo unlink /usr/lib/libGL.so.1 sudo unlink /usr/lib32/libGL.so.1
unlink je oklieštený alias pre rm. Nedokáže odstrániť zložky, iba súbory, nepodporuje rekurziu.
Po odstránení sa môže pokračovať v aktualizácii.
Z vlastnej skúsenosti odporúčam najskôr spustiť terminál a už ho nezatvoriť, pretože niektoré majú libGL.so.1 vo svojich závislostiach:
lxterminal: error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory
A ak sa vám to náhodou stane, tak xterm to istí. 🙂
Tretím spôsobom je prepísanie prepojenia:
Ak sme si už v úvode spomenuli, toto riešenie sa odporúča iba pri avizovaných manuálnych intervenciách. Tie sa dajú zistiť na hlavných stránkach distribúcie Arch Linux. Prepísanie sa vykonáva so samotnou aktualizáciou pomocou parametra:
--overwrite sudo pacman -Suy --overwrite usr/lib/libGL.so.1
1 comment
Autor
Článok som upravila. Pridala som možnosť s prepísaním.