It's been a month since I upgraded my Arch Linux desktop. Today, I tried to update my Arch Linux system, and ran into an error that said "error: failed to commit transaction (conflicting files) stfl: /usr/lib/libstfl.so.0 exists in filesystem". It looks like one library (/usr/lib/libstfl.so.0) that exists on my filesystem and pacman can't upgrade it. If you're encountered with the same error, here is a quick fix to resolve it.
Solve "error: failed to commit transaction (conflicting files)" In Arch Linux
You have three options. 1. Simply ignore the problematic stfl library from being upgraded and try to update the system again. Refer this guide to know how to ignore package from being upgraded. 2. Overwrite the package using command:
$ sudo pacman -Syu --overwrite /usr/lib/libstfl.so.0
3. Remove stfl library file manually and try to upgrade the system again. Please make sure the intended package is not a dependency to any important package. And also check the archlinux.org there are mentions of this conflict.
$ sudo rm /usr/lib/libstfl.so.0
Now, try to update the system:
$ sudo pacman -Syu
I chose the third option and just deleted the file and upgraded my Arch Linux system. It worked just fine!
Related read:
- How To Restore Broken Arch Linux To Previous Working State
- How To Fix “unable to lock database” Error In Arch Linux
- How To Fix “invalid or corrupted package (PGP signature)” Error In Arch Linux
- How To Solve “Starting full system upgrade… there is nothing to do” Issue In Arch Linux
- How To Fix “pacman: error while loading shared libraries” Error In Arch Linux
5 comments
I did the same (remove the conflicting file), but instead of deleting it, I just renamed the file to originalfilename.old, to have a way of going back if things broke.
So what if the existing file list is extensive (i’ve installed a package with make install, and now i want to go back to the package in the Arch repos)?
How do you overwrite all without prompt and without writing the path to all files that need to be overwritten?
Option 2 works like a charm, many thanks.
# pacman -S package > list
Open the list file and remove the beginning and the end of every line containing a file name. Then delete the last line and the heading lines before the file list. Save and close.
Next do
# rm $(cat list)
# pacman -S package
Works like a charm for long lists. You can always use an editor, of course, or sed, if you are so inclined (but if you can use Sed, then you problably know the answer already.
removing the conflicting file worked for me (option 3); thank you