wiki.archlinux.org Open in urlscan Pro
2a01:4f9:c010:a4eb::1  Public Scan

URL: https://wiki.archlinux.org/title/pacman
Submission: On September 12 via manual from US — Scanned from FI

Form analysis 1 forms found in the DOM

/index.php

<form action="/index.php" id="searchform" class="vector-search-box-form">
  <div id="simpleSearch" class="vector-search-box-inner" data-search-loc="header-moved">
    <input class="vector-search-box-input" type="search" name="search" placeholder="Search ArchWiki" aria-label="Search ArchWiki" autocapitalize="sentences" title="Search ArchWiki [alt-shift-f]" accesskey="f" id="searchInput" autocomplete="off">
    <input type="hidden" name="title" value="Special:Search">
    <input id="mw-searchButton" class="searchButton mw-fallbackSearchButton" type="submit" name="fulltext" title="Search the pages for this text" value="Search">
    <input id="searchButton" class="searchButton" type="submit" name="go" title="Go to a page with this exact name if it exists" value="Go">
  </div>
</form>

Text Content

 * Home
 * Packages
 * Forums
 * Wiki
 * Bugs
 * Security
 * AUR
 * Download

Jump to content
Toggle sidebar ArchWiki
Search

 * Create account

Personal tools
Create account
Log in

Pages for logged out editors learn more

 * Dark mode

Navigation
 * Main page
 * Table of contents
 * Getting involved
 * Wiki news
 * Random page

Interaction
 * Help
 * Contributing
 * Recent changes
 * Recent talks
 * New pages
 * Statistics
 * Requests

Tools
 * What links here
 * Related changes
 * Special pages
 * Printable version
 * Permanent link
 * Page information



Contents move to sidebar hide

 * Beginning
 * 1Usage
   Toggle Usage subsection
   * 1.1Installing packages
     * 1.1.1Installing specific packages
       * 1.1.1.1Virtual packages
     * 1.1.2Installing package groups
   * 1.2Removing packages
   * 1.3Upgrading packages
   * 1.4Querying package databases
     * 1.4.1Pactree
     * 1.4.2Database structure
   * 1.5Cleaning the package cache
   * 1.6Additional commands
   * 1.7Installation reason
   * 1.8Search for a package that contains a specific file
   * 1.9What happens during package install/upgrade/removal
 * 2Configuration
   Toggle Configuration subsection
   * 2.1General options
     * 2.1.1Comparing versions before updating
     * 2.1.2Enabling parallel downloads
     * 2.1.3Skip package from being upgraded
     * 2.1.4Skip package group from being upgraded
     * 2.1.5Skip file from being upgraded
     * 2.1.6Skip files from being installed to system
     * 2.1.7Maintain several configuration files
     * 2.1.8Hooks
   * 2.2Repositories and mirrors
     * 2.2.1Package cache directory
     * 2.2.2Package security
 * 3Troubleshooting
   Toggle Troubleshooting subsection
   * 3.1"Failed to commit transaction (conflicting files)" error
   * 3.2"Failed to commit transaction (invalid or corrupted package)" error
   * 3.3"Failed to init transaction (unable to lock database)" error
   * 3.4Packages cannot be retrieved on installation
   * 3.5Pacman crashes during an upgrade
     * 3.5.1pacman: command not found
   * 3.6Manually reinstalling pacman
     * 3.6.1Using pacman-static
     * 3.6.2Using an external pacman
     * 3.6.3By manually extracting
   * 3.7"Unable to find root device" error after rebooting
   * 3.8"Warning: current locale is invalid; using default "C" locale" error
   * 3.9Pacman does not honor proxy settings
   * 3.10How do I reinstall all packages, retaining information on whether
     something was explicitly installed or as a dependency?
   * 3.11"Cannot open shared object file" error
   * 3.12Freeze of package downloads
   * 3.13Failed retrieving file 'core.db' from mirror
   * 3.14error: 'local-package.pkg.tar': permission denied
   * 3.15error: could not determine cachedir mount point /var/cache/pacman/pkg
   * 3.16error: GPGME error: No data
 * 4See also

11 languages
 * Deutsch
 * Español
 * فارسی
 * Suomi
 * Français
 * 日本語
 * Português
 * Polski
 * Русский
 * Svenska
 * 中文(简体)

Toggle the table of contents


PACMAN

 * Page
 * Discussion

English

 * Read
 * View source
 * View history

More
 * Read
 * View source
 * View history

From ArchWiki

Related articles

 * Creating packages
 * Downgrading packages
 * pacman/Package signing
 * pacman/Pacnew and Pacsave
 * pacman/Restore local database
 * pacman/Rosetta
 * pacman/Tips and tricks
 * FAQ#Package management
 * System maintenance
 * Arch build system
 * Official repositories
 * Arch User Repository

The pacman package manager is one of the major distinguishing features of Arch
Linux. It combines a simple binary package format with an easy-to-use build
system. The goal of pacman is to make it possible to easily manage packages,
whether they are from the official repositories or the user's own builds.

Pacman keeps the system up-to-date by synchronizing package lists with the
master server. This server/client model also allows the user to download/install
packages with a simple command, complete with all required dependencies.

Pacman is written in the C programming language and uses the bsdtar(1) tar
format for packaging.

Tip: The pacman package contains tools such as makepkg and vercmp(8). Other
useful tools such as pactree and checkupdates are found in pacman-contrib
(formerly part of pacman). Run pacman -Ql pacman pacman-contrib | grep -E
'bin/.+' to see the full list.


USAGE

What follows is just a small sample of the operations that pacman can perform.
To read more examples, refer to pacman(8).

Tip: For those who have used other Linux distributions before, there is a
helpful Pacman Rosetta article.


INSTALLING PACKAGES

A package is an archive containing:

 * all of the (compiled) files of an application
 * metadata about the application, such as application name, version,
   dependencies, etc.
 * installation files and directives for pacman
 * (optionally) extra files to make your life easier, such as a start/stop
   script

Arch's package manager pacman can install, update, and remove those packages.
Using packages instead of compiling and installing programs yourself has various
benefits:

 * easily updatable: pacman will update existing packages as soon as updates are
   available
 * dependency checks: pacman handles dependencies for you, you only need to
   specify the program and pacman installs it together with every other program
   it needs
 * clean removal: pacman has a list of every file in a package; this way, no
   files are unintentionally left behind when you decide to remove a package.

Note:
 * Packages often have optional dependencies which are packages that provide
   additional functionality to the application but not strictly required for
   running it. When installing a package, pacman will list a package's optional
   dependencies, but they will not be found in pacman.log. Use the #Querying
   package databases command to view the optional dependencies of a package.
 * When installing a package which you require only as a (optional) dependency
   of some other package (i.e. not required by you explicitly), it is
   recommended to use the --asdeps option. For details, see the #Installation
   reason section.

Warning: When installing packages in Arch, avoid refreshing the package list
without upgrading the system (for example, when a package is no longer found in
the official repositories). In practice, do not run pacman -Sy package_name
instead of pacman -Syu package_name, as this could lead to dependency issues.
See System maintenance#Partial upgrades are unsupported and BBS#89328.

INSTALLING SPECIFIC PACKAGES

To install a single package or list of packages, including dependencies, issue
the following command:

# pacman -S package_name1 package_name2 ...


To install a list of packages with regex (see this forum thread):

# pacman -S $(pacman -Ssq package_regex)


Sometimes there are multiple versions of a package in different repositories
(e.g. extra and testing). To install the version from the extra repository in
this example, the repository needs to be defined in front of the package name:

# pacman -S extra/package_name


To install a number of packages sharing similar patterns in their names, one can
use curly brace expansion. For example:

# pacman -S plasma-{desktop,mediacenter,nm}


This can be expanded to however many levels needed:

# pacman -S plasma-{workspace{,-wallpapers},pa}


VIRTUAL PACKAGES

A virtual package is a special package which does not exist by itself, but is
provided by one or more other packages. Virtual packages allow other packages to
not name a specific package as a dependency, in case there are several
candidates. Virtual packages cannot be installed by their name, instead they
become installed in your system when you have installed a package providing the
virtual package.

Tip: When there are multiple candidates, the list of choices presented will sort
first by repositories in the order they appear in pacman.conf, then
alphabetically when multiple results exist from the same repository.

INSTALLING PACKAGE GROUPS

Some packages belong to a group of packages that can all be installed
simultaneously. For example, issuing the command:

# pacman -S gnome


will prompt you to select the packages from the gnome group that you wish to
install.

Sometimes a package group will contain a large amount of packages, and there may
be only a few that you do or do not want to install. Instead of having to enter
all the numbers except the ones you do not want, it is sometimes more convenient
to select or exclude packages or ranges of packages with the following syntax:

Enter a selection (default=all): 1-10 15


which will select packages 1 through 10 and 15 for installation, or:

Enter a selection (default=all): ^5-8 ^2


which will select all packages except 5 through 8 and 2 for installation.

To see what packages belong to the gnome group, run:

# pacman -Sg gnome


Also visit https://archlinux.org/groups/ to see what package groups are
available.

Note: If a package in the list is already installed on the system, it will be
reinstalled even if it is already up-to-date. This behavior can be overridden
with the --needed option.


REMOVING PACKAGES

To remove a single package, leaving all of its dependencies installed:

# pacman -R package_name


To remove a package and its dependencies which are not required by any other
installed package:

# pacman -Rs package_name


Warning: When removing a group, such as gnome, this ignores the install reason
of the packages in the group, because it acts as though each package in the
group is listed separately. Install reason of dependencies is still respected.

The above may sometimes refuse to run when removing a group which contains
otherwise needed packages. In this case try:

# pacman -Rsu package_name


To remove a package, its dependencies and all the packages that depend on the
target package:

Warning: This operation is recursive, and must be used with care since it can
remove many potentially needed packages.

# pacman -Rsc package_name


To remove a package, which is required by another package, without removing the
dependent package:

Warning: The following operation can break a system and should be avoided. See
System maintenance#Avoid certain pacman commands.

# pacman -Rdd package_name


Pacman saves important configuration files when removing certain applications
and names them with the extension: .pacsave. To prevent the creation of these
backup files use the -n option:

# pacman -Rn package_name


Note: Pacman will not remove configurations that the application itself creates
(for example "dotfiles" in the home directory).


UPGRADING PACKAGES

Warning:
 * Users are expected to follow the guidance in the System maintenance#Upgrading
   the system section to upgrade their systems regularly and not blindly run the
   following command.
 * Arch only supports full system upgrades. See System maintenance#Partial
   upgrades are unsupported and #Installing packages for details.

Pacman can update all packages on the system with just one command. This could
take quite a while depending on how up-to-date the system is. The following
command synchronizes the repository databases and updates the system's packages,
excluding "local" packages that are not in the configured repositories:

# pacman -Syu



QUERYING PACKAGE DATABASES

Pacman queries the local package database with the -Q flag, the sync database
with the -S flag and the files database with the -F flag. See pacman -Q --help,
pacman -S --help and pacman -F --help for the respective suboptions of each
flag.

Pacman can search for packages in the database, searching both in packages'
names and descriptions:

$ pacman -Ss string1 string2 ...


Sometimes, -s's builtin ERE (Extended Regular Expressions) can cause a lot of
unwanted results, so it has to be limited to match the package name only; not
the description nor any other field:

$ pacman -Ss '^vim-'


To search for already installed packages:

$ pacman -Qs string1 string2 ...


To search for package file names in remote packages:

$ pacman -F string1 string2 ...


To display extensive information about a given package:

$ pacman -Si package_name


For locally installed packages:

$ pacman -Qi package_name


Passing two -i flags will also display the list of backup files and their
modification states:

$ pacman -Qii package_name


To retrieve a list of the files installed by a package:

$ pacman -Ql package_name


To retrieve a list of the files installed by a remote package:

$ pacman -Fl package_name


To verify the presence of the files installed by a package:

$ pacman -Qk package_name


Passing the k flag twice will perform a more thorough check.

To query the database to know which package a file in the file system belongs
to:

$ pacman -Qo /path/to/file_name


To query the database to know which remote package a file belongs to:

$ pacman -F /path/to/file_name


To list all packages no longer required as dependencies (orphans):

$ pacman -Qdt


To list all packages explicitly installed and not required as dependencies:

$ pacman -Qet


See pacman/Tips and tricks for more examples.

PACTREE

Note: pactree(8) is not part of the pacman package anymore. Instead it can be
found in pacman-contrib.

To view the dependency tree of a package:

$ pactree package_name


To view the dependant tree of a package, pass the reverse flag -r to pactree, or
use whoneeds from pkgtoolsAUR.

DATABASE STRUCTURE

The pacman databases are normally located at /var/lib/pacman/sync. For each
repository specified in /etc/pacman.conf, there will be a corresponding database
file located there. Database files are gzipped tar archives containing one
directory for each package, for example for the which package:

$ tree which-2.21-5

which-2.21-5
|-- desc


The desc file contains meta data such as the package description, dependencies,
file size and MD5 hash.


CLEANING THE PACKAGE CACHE

Pacman stores its downloaded packages in /var/cache/pacman/pkg/ and does not
remove the old or uninstalled versions automatically. This has some advantages:

 1. It allows to downgrade a package without the need to retrieve the previous
    version through other means, such as the Arch Linux Archive.
 2. A package that has been uninstalled can easily be reinstalled directly from
    the cache directory, not requiring a new download from the repository.

However, it is necessary to deliberately clean up the cache periodically to
prevent the directory to grow indefinitely in size.

The paccache(8) script, provided within the pacman-contrib package, deletes all
cached versions of installed and uninstalled packages, except for the most
recent three, by default:

# paccache -r


Enable and start paccache.timer to discard unused packages weekly.

Tip: You can create a hook to run this automatically after every pacman
transaction, install pacman-cleanup-hookAUR and see other examples

You can also define how many recent versions you want to keep. To retain only
one past version use:

# paccache -rk1


Add the -u/--uninstalled switch to limit the action of paccache to uninstalled
packages. For example to remove all cached versions of uninstalled packages, use
the following:

# paccache -ruk0


See paccache -h for more options.

Pacman also has some built-in options to clean the cache and the leftover
database files from repositories which are no longer listed in the configuration
file /etc/pacman.conf. However pacman does not offer the possibility to keep a
number of past versions and is therefore more aggressive than paccache default
options.

To remove all the cached packages that are not currently installed, and the
unused sync database, execute:

# pacman -Sc


To remove all files from the cache, use the clean switch twice, this is the most
aggressive approach and will leave nothing in the cache directory:

# pacman -Scc


Warning: One should avoid deleting from the cache all past versions of installed
packages and all uninstalled packages unless one desperately needs to free some
disk space. This will prevent downgrading or reinstalling packages without
downloading them again.

pkgcachecleanAUR and pacleanerAUR are two further alternatives to clean the
cache.


ADDITIONAL COMMANDS

Download a package without installing it:

# pacman -Sw package_name


Install a 'local' package that is not from a remote repository (e.g. the package
is from the AUR):

# pacman -U /path/to/package/package_name-version.pkg.tar.zst


To keep a copy of the local package in pacman's cache, use:

# pacman -U file:///path/to/package/package_name-version.pkg.tar.zst


Install a 'remote' package (not from a repository stated in pacman's
configuration files):

# pacman -U http://www.example.com/repo/example.pkg.tar.zst


To inhibit the -S, -U and -R actions, -p can be used.

Pacman always lists packages to be installed or removed and asks for permission
before it takes action.


INSTALLATION REASON

The pacman database organizes installed packages into two groups, according to
installation reason:

 * explicitly-installed: packages that were literally passed to a generic pacman
   -S or -U command;
 * dependencies: packages that, despite never (in general) having been passed to
   a pacman installation command, were implicitly installed because they were
   required by packages explicitly installed.

When installing a package, it is possible to force its installation reason to
dependency with:

# pacman -S --asdeps package_name


The command is normally used because explicitly-installed packages may offer
optional packages, usually for non-essential features for which the user has
discretion.

Tip: Installing optional dependencies with --asdeps will ensure that, if you
remove orphans, pacman will also remove optional packages set this way.

When reinstalling a package, though, the current installation reason is
preserved by default.

The list of explicitly-installed packages can be shown with pacman -Qe, while
the complementary list of dependencies can be shown with pacman -Qd.

To change the installation reason of an already installed package, execute:

# pacman -D --asdeps package_name


Use --asexplicit to do the opposite operation.

Note: Using --asdeps and --asexplicit options when upgrading, such as with
pacman -Syu package_name --asdeps, is discouraged. This would change the
installation reason of not only the package being installed, but also the
packages being upgraded.


SEARCH FOR A PACKAGE THAT CONTAINS A SPECIFIC FILE

This article or section is a candidate for merging with pacman/Tips and tricks.

Notes: Looking at #Querying package databases this section duplicates but
expands what is already covered there. Either this should be moved inside the
previous section or merged as a pacman tip in the dedicated article, which is
already linked (Discuss in Talk:Pacman)

Sync the files database:

# pacman -Fy


Search for a package containing a file, e.g.:

$ pacman -F pacman

core/pacman 5.2.1-1 (base base-devel) [installed]
    usr/bin/pacman
    usr/share/bash-completion/completions/pacman
extra/xscreensaver 5.43-1
    usr/lib/xscreensaver/pacman


Tip: You can enable/start pacman-filesdb-refresh.timer to refresh pacman files
database weekly.

For advanced functionality, install pkgfile, which uses a separate database with
all files and their associated packages.


WHAT HAPPENS DURING PACKAGE INSTALL/UPGRADE/REMOVAL

When successful, the workflow of a transaction follows five high-level steps
plus pre/post transaction hooks:

 1. Initialize the transaction if there is not a database lock
 2. Choose which packages will be added or removed in the transaction
 3. Prepare the transaction, based on flags, by performing sanity checks on the
    sync databases, packages, and their dependencies
 4. Commit the transaction:
    1. When applicable, download packages (_alpm_sync_load)
    2. If pre-existing pacman PreTransaction hooks apply, they are executed.
    3. Packages are removed that are to-be-replaced, conflicting, or explicitly
       targeted to be removed
    4. If there are packages to add, then each package is committed
       1. If the package has an install script, its pre_install function is
          executed (or pre_upgrade or pre_remove in the case of an upgraded or
          removed package).
       2. Pacman deletes all the files from a pre-existing version of the
          package (in the case of an upgraded or removed package). However,
          files that were marked as configuration files in the package are kept
          (see /Pacnew and Pacsave).
       3. Pacman untars the package and dumps its files into the file system (in
          the case of an installed or upgraded package). Files that would
          overwrite kept, and manually modified, configuration files (see
          previous step), are stored with a new name (.pacnew).
       4. If the package has an install script, its post_install function is
          executed (or post_upgrade or post_remove in the case of an upgraded or
          removed package).
    5. If pacman PostTransaction hooks that exist at the end of the transaction
       apply, they are executed.
 5. Release the transaction and transaction resource (i.e. database lock)


CONFIGURATION

Pacman's settings are located in /etc/pacman.conf: this is the place where the
user configures the program to work in the desired manner. In-depth information
about the configuration file can be found in pacman.conf(5).


GENERAL OPTIONS

General options are in the [options] section. Read pacman.conf(5) or look in the
default pacman.conf for information on what can be done here.

COMPARING VERSIONS BEFORE UPDATING

To see old and new versions of available packages, uncomment the
"VerbosePkgLists" line in /etc/pacman.conf. The output of pacman -Syu will be
like this:

Package (6)             Old Version  New Version  Net Change  Download Size

extra/libmariadbclient  10.1.9-4     10.1.10-1      0.03 MiB       4.35 MiB
extra/libpng            1.6.19-1     1.6.20-1       0.00 MiB       0.23 MiB
extra/mariadb           10.1.9-4     10.1.10-1      0.26 MiB      13.80 MiB


ENABLING PARALLEL DOWNLOADS

Pacman 6.0 introduced the option to download packages in parallel.
ParallelDownloads under [options] needs to be set to a positive integer in
/etc/pacman.conf to use this feature (e.g., 5). Packages will otherwise be
downloaded sequentially if this option is unset.

SKIP PACKAGE FROM BEING UPGRADED

Warning: Be careful in skipping packages, since partial upgrades are
unsupported.

To have a specific package skipped when upgrading the system, add this line in
the [options] section:

IgnorePkg=linux


For multiple packages use a space-separated list, or use additional IgnorePkg
lines. Also, glob patterns can be used. If you want to skip packages just once,
you can also use the --ignore option on the command-line - this time with a
comma-separated list.

It will still be possible to upgrade the ignored packages using pacman -S: in
this case pacman will remind you that the packages have been included in an
IgnorePkg statement.

SKIP PACKAGE GROUP FROM BEING UPGRADED

Warning: Be careful in skipping package groups, since partial upgrades are
unsupported.

As with packages, skipping a whole package group is also possible:

IgnoreGroup=gnome


SKIP FILE FROM BEING UPGRADED

All files listed with a NoUpgrade directive will never be touched during a
package install/upgrade, and the new files will be installed with a .pacnew
extension.

NoUpgrade=path/to/file


Multiple files can be specified like this:

NoUpgrade=path/to/file1 path/to/file2


Note: The path refers to files in the package archive. Therefore, do not include
the leading slash.

SKIP FILES FROM BEING INSTALLED TO SYSTEM

To always skip installation of specific directories list them under NoExtract.
For example, to avoid installation of systemd units use this:

NoExtract=usr/lib/systemd/system/*


Later rules override previous ones, and you can negate a rule by prepending !.

Tip: Pacman issues warning messages about missing locales when updating a
package for which locales have been cleared by localepurge or bleachbit.
Commenting the CheckSpace option in pacman.conf suppresses such warnings, but
consider that the space-checking functionality will be disabled for all
packages.

MAINTAIN SEVERAL CONFIGURATION FILES

If you have several configuration files (e.g. main configuration and
configuration with testing repository enabled) and would have to share options
between configurations you may use Include option declared in the configuration
files, e.g.:

Include = /path/to/common/settings


where /path/to/common/settings file contains the same options for both
configurations.

HOOKS

Pacman can run pre- and post-transaction hooks from the
/usr/share/libalpm/hooks/ directory; more directories can be specified with the
HookDir option in pacman.conf, which defaults to /etc/pacman.d/hooks. Hook file
names must be suffixed with .hook. Pacman hooks are not interactive.

Pacman hooks are used, for example, in combination with systemd-sysusers and
systemd-tmpfiles to automatically create system users and files during the
installation of packages. For example, tomcat8 specifies that it wants a system
user called tomcat8 and certain directories owned by this user. The pacman hooks
systemd-sysusers.hook and systemd-tmpfiles.hook invoke systemd-sysusers and
systemd-tmpfiles when pacman determines that tomcat8 contains files specifying
users and tmp files.

For more information on alpm hooks, see alpm-hooks(5).


REPOSITORIES AND MIRRORS

Besides the special [options] section, each other [section] in pacman.conf
defines a package repository to be used. A repository is a logical collection of
packages, which are physically stored on one or more servers: for this reason
each server is called a mirror for the repository.

Repositories are distinguished between official and unofficial. The order of
repositories in the configuration file matters; repositories listed first will
take precedence over those listed later in the file when packages in two
repositories have identical names, regardless of version number. In order to use
a repository after adding it, you will need to upgrade the whole system first.

Each repository section allows defining the list of its mirrors directly or in a
dedicated external file through the Include directive; for example, the mirrors
for the official repositories are included from /etc/pacman.d/mirrorlist. See
the Mirrors article for mirror configuration.

PACKAGE CACHE DIRECTORY

Pacman stores downloaded package files in cache, in a directory denoted by
CacheDir in [options] section of pacman.conf (defaults to /var/cache/pacman/pkg/
if not set).

Cache directory may grow over time, even if keeping just the freshest versions
of installed packages.

If you want to move that directory to some more convenient place, do one of the
following:

 * Set the CacheDir option in pacman.conf to new directory. Remember to retain
   the trailing slash. This is the recommended solution.
 * Mount a dedicated partition or e.g. Btrfs subvolume in
   /var/cache/pacman/pkg/.
 * Bind-mount selected directory in /var/cache/pacman/pkg/.

Warning: Do not symlink the /var/cache/pacman/pkg/ directory to some other
location. It will cause pacman to misbehave, especially when pacman attempts to
update itself.

PACKAGE SECURITY

Pacman supports package signatures, which add an extra layer of security to the
packages. The default configuration, SigLevel = Required DatabaseOptional,
enables signature verification for all the packages on a global level. This can
be overridden by per-repository SigLevel lines. For more details on package
signing and signature verification, take a look at pacman-key.


TROUBLESHOOTING


"FAILED TO COMMIT TRANSACTION (CONFLICTING FILES)" ERROR

If you see the following error: [1]

error: could not prepare transaction
error: failed to commit transaction (conflicting files)
package: /path/to/file exists in filesystem
Errors occurred, no packages were upgraded.


This is happening because pacman has detected a file conflict, and by design,
will not overwrite files for you. This is by design, not a flaw.

The problem is usually trivial to solve (although to be sure, you should try to
find out how these files got there in the first place). A safe way is to first
check if another package owns the file (pacman -Qo /path/to/file). If the file
is owned by another package, file a bug report. If the file is not owned by
another package, rename the file which "exists in filesystem" and re-issue the
update command. If all goes well, the file may then be removed.

If you had installed a program manually without using pacman, for example
through make install, you have to remove/uninstall this program with all of its
files. See also Pacman tips#Identify files not owned by any package.

Every installed package provides a /var/lib/pacman/local/package-version/files
file that contains metadata about this package. If this file gets corrupted, is
empty or goes missing, it results in file exists in filesystem errors when
trying to update the package. Such an error usually concerns only one package.
Instead of manually renaming and later removing all the files that belong to the
package in question, you may explicitly run pacman -S --overwrite glob package
to force pacman to overwrite files that match glob.

Warning: Generally avoid using the --overwrite switch. See System
maintenance#Avoid certain pacman commands.


"FAILED TO COMMIT TRANSACTION (INVALID OR CORRUPTED PACKAGE)" ERROR

Look for .part files (partially downloaded packages) in /var/cache/pacman/pkg/
and remove them (often caused by usage of a custom XferCommand in pacman.conf).

# find /var/cache/pacman/pkg/ -iname "*.part" -delete


That same error may also appear if archlinux-keyring is out-of-date, preventing
pacman from verifying signatures. See Pacman/Package signing#Upgrade system
regularly for the fix and how to avoid it in the future.


"FAILED TO INIT TRANSACTION (UNABLE TO LOCK DATABASE)" ERROR

When pacman is about to alter the package database, for example installing a
package, it creates a lock file at /var/lib/pacman/db.lck. This prevents another
instance of pacman from trying to alter the package database at the same time.

If pacman is interrupted while changing the database, this stale lock file can
remain. If you are certain that no instances of pacman are running then delete
the lock file:

# rm /var/lib/pacman/db.lck


Tip: You can run fuser /var/lib/pacman/db.lck as root to verify if there is any
process still using it.


PACKAGES CANNOT BE RETRIEVED ON INSTALLATION

This error manifests as Not found in sync db, Target not found or Failed
retrieving file.

Firstly, ensure the package actually exists. If certain the package exists, your
package list may be out-of-date. Try running pacman -Syu to force a refresh of
all package lists and upgrade. Also make sure the selected mirrors are
up-to-date and repositories are correctly configured.

It could also be that the repository containing the package is not enabled on
your system, e.g. the package could be in the multilib repository, but multilib
is not enabled in your pacman.conf.

See also FAQ#Why is there only a single version of each shared library in the
official repositories?.


PACMAN CRASHES DURING AN UPGRADE

In the case that pacman crashes with a "database write" error while removing
packages, and reinstalling or upgrading packages fails thereafter, do the
following:

 1. Boot using the Arch installation media. Preferably use a recent media so
    that the pacman version matches/is newer than the system.
 2. Mount the system's root filesystem, e.g., mount /dev/sdaX /mnt as root, and
    check the mount has sufficient space with df -h
 3. Mount the proc, sys and dev filesystems as well: mount -t proc proc
    /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
 4. If the system uses default database and directory locations, you can now
    update the system's pacman database and upgrade it via pacman --sysroot /mnt
    -Syu as root.
    * Alternatively, if you cannot update/upgrade, refer to Pacman/Tips and
      tricks#Reinstalling all packages.
 5. After the upgrade, one way to double-check for not upgraded but still broken
    packages: find /mnt/usr/lib -size 0
 6. Followed by a re-install of any still broken package via pacman --sysroot
    /mnt -S package.

PACMAN: COMMAND NOT FOUND

If /var/cache/pacman/pkg is a symlink, pacman will try to make a directory
instead and thus remove this symlink during self-upgrade. This will cause the
update to fail. As a result, /usr/bin/pacman and other contents of the pacman
package will be missing.

Never symlink /var/cache/pacman/pkg because it is controlled by pacman. Use the
CacheDir option or a bind mount instead; see #Package cache directory.

If you have already encountered this problem and broke your system, you can
manually extract /usr contents from the package to restore pacman and then
reinstall it properly; see FS#73306 and related forum thread for details.


MANUALLY REINSTALLING PACMAN

USING PACMAN-STATIC

pacman-staticAUR is a statically compiled version of pacman, so it will be able
to run even when the libraries on the system are not working. This can also come
in handy when a partial upgrade was performed and pacman can not run anymore.

The pinned comment and the PKGBUILD provides a way to directly download the
binary, which can be used to reinstall pacman or to upgrade the entire system in
case of partial upgrades.

USING AN EXTERNAL PACMAN

If even pacman-static does not work, it is possible to recover using an external
pacman. One of the easiest methods to do so is by using the archiso and simply
using --sysroot or --root to specify the mount point. See Chroot#Using chroot on
how to mount the necessary filesystems required by --sysroot.

BY MANUALLY EXTRACTING

Warning: It is extremely easy to break your system even worse using this
approach. Use this only as a last resort if the method from #Pacman crashes
during an upgrade is not an option.

Even if pacman is terribly broken, you can fix it manually by downloading the
latest packages and extracting them to the correct locations. The rough steps to
perform are:

 1. Determine the pacman dependencies to install
 2. Download each package from a mirror of your choice
 3. Extract each package to root
 4. Reinstall these packages with pacman -S --overwrite to update the package
    database accordingly
 5. Do a full system upgrade

If you have a healthy Arch system on hand, you can see the full list of
dependencies with:

$ pacman -Q $(pactree -u pacman)


But you may only need to update a few of them depending on your issue. An
example of extracting a package is

# tar -xvpwf package.tar.zst -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO


Note the use of the w flag for interactive mode. Running non-interactively is
very risky since you might end up overwriting an important file. Also take care
to extract packages in the correct order (i.e. dependencies first). This forum
post contains an example of this process where only a couple pacman dependencies
are broken.


"UNABLE TO FIND ROOT DEVICE" ERROR AFTER REBOOTING

Most likely the initramfs became corrupted during a kernel update (improper use
of pacman's --overwrite option can be a cause). There are two options; first,
try the Fallback entry.

Tip: In case you removed the Fallback entry, you can always press the Tab key
when the boot loader menu shows up (for Syslinux) or e (for GRUB or
systemd-boot), rename it initramfs-linux-fallback.img and press Enter or b
(depending on your boot loader) to boot with the new parameters.

Once the system starts, run this command (for the stock linux kernel) either
from the console or from a terminal to rebuild the initramfs image:

# mkinitcpio -p linux


If that does not work, from a current Arch release (CD/DVD or USB stick), mount
your root and boot partitions to /mnt and /mnt/boot, respectively. Then chroot
using arch-chroot:

# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd linux


Note:
 * If you do not have a current release or if you only have some other "live"
   Linux distribution laying around, you can chroot using the old fashioned way.
   Obviously, there will be more typing than simply running the arch-chroot
   script.
 * If pacman fails with Could not resolve host, please check your internet
   connection.
 * If you cannot enter the arch-chroot or chroot environment but need to
   re-install packages, you can use the command pacman --sysroot /mnt -Syu foo
   bar to use pacman on your root partition.

Reinstalling the kernel (the linux package) will automatically re-generate the
initramfs image with mkinitcpio -p linux. There is no need to do this
separately.

Afterwards, it is recommended that you run exit, umount /mnt/{boot,} and reboot.


"WARNING: CURRENT LOCALE IS INVALID; USING DEFAULT "C" LOCALE" ERROR

As the error message says, your locale is not correctly configured. See Locale.


PACMAN DOES NOT HONOR PROXY SETTINGS

Make sure that the relevant environment variables ($http_proxy, $ftp_proxy etc.)
are set up. If you use pacman with sudo, you need to configure sudo to pass
these environment variables to pacman. Also, ensure the configuration of dirmngr
has honor-http-proxy in /etc/pacman.d/gnupg/dirmngr.conf to honor the proxy when
refreshing the keys.


HOW DO I REINSTALL ALL PACKAGES, RETAINING INFORMATION ON WHETHER SOMETHING WAS
EXPLICITLY INSTALLED OR AS A DEPENDENCY?

To reinstall all the native packages: pacman -Qnq | pacman -S - or pacman -S
$(pacman -Qnq) (the -S option preserves the installation reason by default).

You will then need to reinstall all the foreign packages, which can be listed
with pacman -Qmq.


"CANNOT OPEN SHARED OBJECT FILE" ERROR

It looks like previous pacman transaction removed or corrupted shared libraries
needed for pacman itself.

To recover from this situation, you need to unpack required libraries to your
filesystem manually. First find what package contains the missed library and
then locate it in the pacman cache (/var/cache/pacman/pkg/). Unpack required
shared library to the filesystem. This will allow to run pacman.

Now you need to reinstall the broken package. Note that you need to use
--overwrite flag as you just unpacked system files and pacman does not know
about it. Pacman will correctly replace our shared library file with one from
package.

That's it. Update the rest of the system.


FREEZE OF PACKAGE DOWNLOADS

Some issues have been reported regarding network problems that prevent pacman
from updating/synchronizing repositories. [2] [3] When installing Arch Linux
natively, these issues have been resolved by replacing the default pacman file
downloader with an alternative (see Improve pacman performance for more
details). When installing Arch Linux as a guest OS in VirtualBox, this issue has
also been addressed by using Host interface instead of NAT in the machine
properties.


FAILED RETRIEVING FILE 'CORE.DB' FROM MIRROR

If you receive this error message with correct mirrors, try setting a different
name server.


ERROR: 'LOCAL-PACKAGE.PKG.TAR': PERMISSION DENIED

If you want to install a package on an sshfs mount using pacman -U and receive
this error, move the package to a local directory and try to install again.


ERROR: COULD NOT DETERMINE CACHEDIR MOUNT POINT /VAR/CACHE/PACMAN/PKG

Upon executing, e.g., pacman -Syu inside a chroot environment an error is
encountered:

error: could not determine cachedir mount point /var/cache/pacman/pkg
error: failed to commit transaction (not enough free disk space)


This is frequently caused by the chroot directory not being a mountpoint when
the chroot is entered. See the note at Install Arch Linux from existing
Linux#Downloading basic tools for a solution, and arch-chroot(8) for an
explanation and an example of using bind mounting to make the chroot directory a
mountpoint.


ERROR: GPGME ERROR: NO DATA

If you are unable to update packages and receive this error, try rm -r
/var/lib/pacman/sync/ before attempting to update.


SEE ALSO

 * Pacman Home Page
 * libalpm(3)
 * pacman(8)
 * pacman.conf(5)
 * repo-add(8)

Retrieved from "https://wiki.archlinux.org/index.php?title=Pacman&oldid=785372"
Categories:
 * Package manager
 * Arch projects
 * Commands

Hidden category:
 * Pages or sections flagged with Template:Merge

 * This page was last edited on 13 August 2023, at 18:49.
 * Content is available under GNU Free Documentation License 1.3 or later unless
   otherwise noted.

 * Privacy policy
 * About ArchWiki
 * Disclaimers