I can’t install or update a package because I get (something like) this:
error: could not prepare transaction
error: failed to commit transaction (conflicting files)
libname: /insert/file/name/here exists in filesystem
Errors occurred, no packages were upgraded.
Why is this happening?
The package manager,
pacman , has detected an unexpected file already exists on disk. By design it will not overwrite files that already exist. This is a design feature, not a flaw - package managers are designed to keep track of installed files.
This issue normally happens because you’ve manually added, copied, or created a file. It can also happen when you install software using a downloaded executable, run a
make install , or use a third-party package system such as
conda . It also occurs when you install an AUR package which installs files that conflict with a repo package.
When using a third-party installer you should always specify an alternative installation location, such as under your home directory, or under
/usr/local/ . Never install directly under
How can I fix this?
The better way
The first step is to identify which, if any, package owns the file. This can be easily done with:
pacman -Qo /path/to/file
If this identifies a conflicting package you can decide to remove it with
pacman -R . If no package is identified you can delete the file, e.g.
rm /path/to/file (or move it to a backup location, e.g.
mv /path/to/file /path/to/file.backup ).
The faster way
pacman has an
--overwrite option which will allow it to overwrite files. If you are sure you want to, you can tell it to
sudo pacman -S $PACKAGE --overwrite path/to/*
This will (re)install the
$PACKAGE and overwrite any files under the directory
This can be very useful if your local database has “lost” a package you’ve already installed (and so every file in the package “conflicts”).
The “I don’t care” way
sudo pacman -S $PACKAGE --overwrite '*'
Here’s an example of how to decide what to write:
So the command could be:
sudo pacman -S languagetool --overwrite usr/bin/languagetool,usr/share/java/languagetool/*
Where can I read more?
This post was inspired by (and adapted from):
The above post also has links to further reading.