mirror of
https://github.com/moparisthebest/pacman
synced 2024-11-17 23:05:00 -05:00
0da96abc90
This patch utilizes the power of sync.c to fix FS#3492 and FS#5798. Now an upgrade transaction is just a sync transaction internally (in alpm), so all sync features are available with -U as well: * conflict resolving * sync dependencies from sync repos * remove unresolvable targets See http://www.archlinux.org/pipermail/pacman-dev/2009-June/008725.html for the concept. We use "mixed" target list, where PKG_FROM_FILE origin indicates local package file, PKG_FROM_CACHE indicates sync package. The front-end can add only one type of packages (depending on transaction type) atm, but if alpm resolves dependencies for -U, we may get a real mixed trans->packages list. _alpm_pkg_free_trans() was modified so that it can handle both target types _alpm_add_prepare() was removed, we use _alpm_sync_prepare() instead _alpm_add_commit() was renamed to _alpm_upgrade_targets() sync.c (and deps.c) was modified slightly to handle mixed target lists, the modifications are straightforward. There is one notable change here: We don't create new upgrade trans in sync.c, we replace the pkgcache entries with the loaded package files in the target list (this is a bit hackish) and call _alpm_upgrade_targets(). This implies a TODO (pkg->origin_data.db is not accessible anymore), but it doesn't hurt anything with pacman front-end, so it will be fixed later (otherwise this patch would be huge). I updated the documentation of -U and I added a new pactest, upgrade090.py, to test the syncdeps feature of -U. Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu> Signed-off-by: Dan McGee <dan@archlinux.org>
407 lines
16 KiB
Plaintext
407 lines
16 KiB
Plaintext
/////
|
|
vim:set ts=4 sw=4 syntax=asciidoc noet:
|
|
/////
|
|
pacman(8)
|
|
=========
|
|
|
|
Name
|
|
----
|
|
pacman - package manager utility
|
|
|
|
|
|
Synopsis
|
|
--------
|
|
'pacman' <operation> [options] [packages]
|
|
|
|
|
|
Description
|
|
-----------
|
|
Pacman is a package management utility that tracks installed packages on a Linux
|
|
system. It features dependency support, package groups, install and uninstall
|
|
hooks, and the ability to sync your local machine with a remote ftp server to
|
|
automatically upgrade packages. Pacman packages are a zipped tar format.
|
|
|
|
Since version 3.0.0, pacman has been the frontend to linkman:libalpm[3], the
|
|
``Arch Linux Package Management'' library. This library allows alternative
|
|
front ends to be written (for instance, a GUI front end).
|
|
|
|
|
|
Operations
|
|
----------
|
|
*-Q, \--query*::
|
|
Query the package database. This operation allows you to view installed
|
|
packages and their files, as well as meta-information about individual
|
|
packages (dependencies, conflicts, install date, build date, size). This
|
|
can be run against the local package database or can be used on
|
|
individual '.tar.gz' packages. In the first case, if no package names
|
|
are provided in the command line, all installed packages will be
|
|
queried. Additionally, various filters can be applied on the package
|
|
list. See <<QO,Query Options>> below.
|
|
|
|
*-R, \--remove*::
|
|
Remove package(s) from the system. Groups can also be specified to be
|
|
removed, in which case every package in that group will be removed.
|
|
Files belonging to the specified package will be deleted, and the
|
|
database will be updated. Most configuration files will be saved
|
|
with a `.pacsave` extension unless the '\--nosave' option is used.
|
|
See <<RO,Remove Options>> below.
|
|
|
|
*-S, \--sync*::
|
|
Synchronize packages. Packages are installed directly from the ftp
|
|
servers, including all dependencies required to run the packages. For
|
|
example, `pacman -S qt` will download and install qt and all the
|
|
packages it depends on. If a package name exists in more than one repo, the
|
|
repo can be explicitly specified to clarify the package to install:
|
|
`pacman -S testing/qt`. You can also specify version requirements:
|
|
`pacman -S "bash>=3.2"`. (Quotes are needed, otherwise your shell
|
|
interprets ">" as redirection to file.)
|
|
+
|
|
In addition to packages, groups can be specified as well. For example, if
|
|
gnome is a defined package group, then `pacman -S gnome` will install every
|
|
package in the gnome group, as well as the dependencies of those packages.
|
|
+
|
|
Packages which provide other packages are also handled. For example, `pacman -S
|
|
foo` will first look for a foo package. If foo is not found, packages which
|
|
provide the same functionality as foo will be searched for. If any package is
|
|
found, it will be installed.
|
|
+
|
|
You can also use `pacman -Su` to upgrade all packages that are out of date. See
|
|
<<SO,Sync Options>> below. When upgrading, pacman performs version comparison
|
|
to determine which packages need upgrading. This behavior operates as follows:
|
|
|
|
Alphanumeric:
|
|
1.0a < 1.0alpha < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0
|
|
Numeric:
|
|
1 < 1.0 < 1.1 < 1.1.1 < 1.2 < 2.0 < 3.0.0
|
|
|
|
*-T, \--deptest*::
|
|
Check dependencies; this is useful in scripts such as makepkg to check
|
|
installed packages. This operation will check each dependency specified and
|
|
return a list of those which are not currently satisfied on the system.
|
|
This operation accepts no other options. Example usage: `pacman -T qt
|
|
"bash>=3.2"`.
|
|
|
|
*-U, \--upgrade*::
|
|
Upgrade or add package(s) to the system and install the required
|
|
dependencies from sync repos. Either a URL or file path can be
|
|
specified. This is a ``remove-then-add'' process. See <<HCF,Handling Config
|
|
Files>> for an explanation on how pacman takes care of config files.
|
|
|
|
*-V, \--version*::
|
|
Display version and exit.
|
|
|
|
*-h, \--help*::
|
|
Display syntax for the given operation. If no operation was supplied
|
|
then the general syntax is shown.
|
|
|
|
|
|
Options
|
|
-------
|
|
*\--asdeps*::
|
|
Install packages non-explicitly; in other words, fake their install reason
|
|
to be installed as a dependency. This is useful for makepkg and other
|
|
build from source tools that need to install dependencies before building
|
|
the package.
|
|
|
|
*\--asexplicit*::
|
|
Install packages explicitly; in other words, fake their install reason to
|
|
be explicitly installed. This is useful if you want to mark a dependency
|
|
as explicitly installed so it will not be removed by the '\--recursive'
|
|
remove operation.
|
|
|
|
*-b, \--dbpath* <'path'>::
|
|
Specify an alternative database location (a typical default is
|
|
``/var/lib/pacman''). This should not be used unless you know what you are
|
|
doing. *NOTE*: if specified, this is an absolute path and the root path is
|
|
not automatically prepended.
|
|
|
|
*-d, \--nodeps*::
|
|
Skips all dependency checks. Normally, pacman will always check a
|
|
package's dependency fields to ensure that all dependencies are
|
|
installed and there are no package conflicts in the system.
|
|
|
|
*-f, \--force*::
|
|
Bypass file conflict checks and overwrite conflicting files. If the
|
|
package that is about to be installed contains files that are already
|
|
installed, this option will cause all those files to be overwritten.
|
|
This option should be used with care, ideally not at all.
|
|
|
|
*-r, \--root* <'path'>::
|
|
Specify an alternative installation root (default is ``/''). This should
|
|
not be used as a way to install software into ``/usr/local'' instead of
|
|
``/usr''. This option is used if you want to install a package on a
|
|
temporary mounted partition which is "owned" by another system.
|
|
*NOTE*: if database path or logfile are not specified on either the
|
|
command line or in linkman:pacman.conf[5], their default location will
|
|
be inside this root path.
|
|
|
|
*-v, \--verbose*::
|
|
Output paths such as as the Root, Conf File, DB Path, Cache Dirs, etc.
|
|
|
|
*\--debug*::
|
|
Display debug messages. When reporting bugs, this option is recommended
|
|
to be used.
|
|
|
|
*\--cachedir* <'dir'>::
|
|
Specify an alternative package cache location (a typical default is
|
|
``/var/cache/pacman/pkg''). Multiple cache directories can be specified,
|
|
and they are tried in the order they are passed to pacman. *NOTE*: this
|
|
is an absolute path, the root path is not automatically prepended.
|
|
|
|
*\--config* <'file'>::
|
|
Specify an alternate configuration file.
|
|
|
|
*\--logfile* <'file'>::
|
|
Specify an alternate log file. This is an absolute path, regardless of
|
|
the installation root setting.
|
|
|
|
*\--noconfirm*::
|
|
Bypass any and all ``Are you sure?'' messages. It's not a good idea to do
|
|
this unless you want to run pacman from a script.
|
|
|
|
*\--noprogressbar*::
|
|
Do not show a progress bar when downloading files. This can be useful
|
|
for scripts that call pacman and capture the output.
|
|
|
|
*\--noscriptlet*::
|
|
If an install scriptlet exists, do not execute it. Do not use this
|
|
unless you know what you are doing.
|
|
|
|
*\--arch* <'arch'>::
|
|
Specify an alternate architecture.
|
|
|
|
Query Options[[QO]]
|
|
-------------------
|
|
*-c, \--changelog*::
|
|
View the ChangeLog of a package. Not every package will provide one but
|
|
it will be shown if available.
|
|
|
|
*-d, \--deps*::
|
|
Restrict or filter output to packages installed as dependencies. This
|
|
option can be combined with '-t' for listing real orphans- packages that
|
|
were installed as dependencies but are no longer required by any
|
|
installed package. ('-Qdt' is equivalent to the pacman 3.0.X '-Qe'
|
|
option.)
|
|
|
|
*-e, \--explicit*::
|
|
Restrict or filter output to packages explicitly installed. This option
|
|
can be combined with '-t' to list top-level packages- those packages
|
|
that were explicitly installed but are not required by any other
|
|
package. ('-Qet' is equivalent to the pacman 2.9.X '-Qe' option.)
|
|
|
|
*-g, \--groups*::
|
|
Display all packages that are members of a named group. If a name is not
|
|
specified, list all grouped packages.
|
|
|
|
*-i, \--info*::
|
|
Display information on a given package. The '-p' option can be used if
|
|
querying a package file instead of the local database. Passing two
|
|
'\--info' or '-i' flags will also display the list of backup files and
|
|
their modification states.
|
|
|
|
*-k \--check*::
|
|
Check that all files owned by the given package(s) are present on the
|
|
system. If packages are not specified or filter flags are not provided,
|
|
check all installed packages.
|
|
|
|
*-l, \--list*::
|
|
List all files owned by a given package. Multiple packages can be
|
|
specified on the command line.
|
|
|
|
*-m, \--foreign*::
|
|
Restrict or filter output to packages that were not found in the sync
|
|
database(s). Typically these are packages that were downloaded manually
|
|
and installed with '\--upgrade'.
|
|
|
|
*-o, \--owns* <'file'>::
|
|
Search for the package that owns file. The path can be relative or
|
|
absolute.
|
|
|
|
*-p, \--file*::
|
|
Signifies that the package supplied on the command line is a file and
|
|
not an entry in the database. The file will be decompressed and queried.
|
|
This is useful in combination with '\--info' and '\--list'.
|
|
|
|
*-q, \--quiet*::
|
|
Show less information for certain query operations. (This is useful when
|
|
pacman's output is processed in a script.) Search will only show package
|
|
names and not version, group, and description information; owns will
|
|
only show package names instead of "file is owned by pkg" messages; group
|
|
will only show package names and omit group names; list will only show
|
|
files and omit package names; check will only show pairs of package names
|
|
and missing files; a bare query will only show package names
|
|
rather than names and versions.
|
|
|
|
*-s, \--search* <'regexp'>::
|
|
This will search each locally-installed package for names or
|
|
descriptions that match `regexp`. When you include multiple search
|
|
terms, only packages with descriptions matching ALL of those terms will
|
|
be returned.
|
|
|
|
*-t, \--unrequired*::
|
|
Restrict or filter output to packages not required by any currently
|
|
installed package.
|
|
|
|
*-u, \--upgrades*::
|
|
Restrict or filter output to packages that are out of date on the local
|
|
system. (Only package versions are used to find outdated packages,
|
|
replacements are not checked here.) This option works best if the sync
|
|
database is refreshed using '-Sy'.
|
|
|
|
|
|
Remove Options[[RO]]
|
|
--------------------
|
|
*-c, \--cascade*::
|
|
Remove all target packages, as well as all packages that depend on one
|
|
or more target packages. This operation is recursive, and must be used
|
|
with care since it can remove many potentially needed packages.
|
|
|
|
*-k, \--keep*::
|
|
Removes the database entry only. Leaves all files in place.
|
|
|
|
*-n, \--nosave*::
|
|
Instructs pacman to ignore file backup designations. Normally, when a
|
|
file is removed from the system the database is checked to see if the
|
|
file should be renamed with a ``.pacsave'' extension.
|
|
|
|
*-s, \--recursive*::
|
|
Remove each target specified including all of their dependencies, provided
|
|
that (A) they are not required by other packages; and (B) they were not
|
|
explicitly installed by the user. This operation is recursive and analogous
|
|
to a backwards '\--sync' operation, and helps keep a clean system without
|
|
orphans. If you want to omit condition (B), pass this option twice.
|
|
|
|
*-u, \--unneeded*::
|
|
Removes the targets that are not required by any other packages.
|
|
This is mostly useful when removing a group without using the '-c' option,
|
|
to avoid breaking any dependencies.
|
|
|
|
|
|
Sync Options[[SO]]
|
|
------------------
|
|
*-c, \--clean*::
|
|
Remove packages that are no longer installed from the cache as well as
|
|
currently unused sync databases to free up disk space. When pacman
|
|
downloads packages, it saves them in a cache directory. In addition,
|
|
databases are saved for every sync DB you download from, and are not
|
|
deleted even if they are removed from the configuration file
|
|
linkman:pacman.conf[5]. Use one '\--clean' switch to only remove
|
|
packages that are no longer installed; use two to remove all packages
|
|
from the cache. In both cases, you will have a yes or no option to
|
|
remove packages and/or unused downloaded databases.
|
|
+
|
|
If you use a network shared cache, see the 'CleanMethod' option in
|
|
linkman:pacman.conf[5].
|
|
|
|
*-g, \--groups*::
|
|
Display all the members for each package group specified. If no group
|
|
names are provided, all groups will be listed; pass the flag twice to
|
|
view all groups and their members.
|
|
|
|
*-i, \--info*::
|
|
Display dependency and other information for a given package. This will
|
|
search through all repositories for a matching package.
|
|
|
|
*-l, \--list*::
|
|
List all packages in the specified repositories. Multiple repositories
|
|
can be specified on the command line.
|
|
|
|
*-p, \--print-uris*::
|
|
Print out URIs for each package that will be installed, including any
|
|
dependencies yet to be installed. These can be piped to a file and
|
|
downloaded at a later time, using a program like wget.
|
|
|
|
*-q, \--quiet*::
|
|
Show less information for certain sync operations. (This is useful when
|
|
pacman's output is processed in a script.) Search will only show package
|
|
names and not repo, version, group, and description information; list
|
|
will only show package names and omit databases and versions; group will
|
|
only show package names and omit group names.
|
|
|
|
*-s, \--search* <'regexp'>::
|
|
This will search each package in the sync databases for names or
|
|
descriptions that match `regexp`. When you include multiple search
|
|
terms, only packages with descriptions matching ALL of those terms will
|
|
be returned.
|
|
|
|
*-u, \--sysupgrade*::
|
|
Upgrades all packages that are out of date. Each currently-installed
|
|
package will be examined and upgraded if a newer package exists. A
|
|
report of all packages to upgrade will be presented and the operation
|
|
will not proceed without user confirmation. Dependencies are
|
|
automatically resolved at this level and will be installed/upgraded if
|
|
necessary. Pass this option twice to enable package downgrade; in this
|
|
case pacman will select sync packages whose version does not match with
|
|
the local version. This can be useful when the user switches from a testing
|
|
repo to a stable one. Additional targets can also be specified manually, so
|
|
that '-Su foo' will do a system upgrade and install/upgrade the foo package in
|
|
the same operation.
|
|
|
|
*-w, \--downloadonly*::
|
|
Retrieve all packages from the server, but do not install/upgrade
|
|
anything.
|
|
|
|
*-y, \--refresh*::
|
|
Download a fresh copy of the master package list from the server(s)
|
|
defined in linkman:pacman.conf[5]. This should typically be used each time
|
|
you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y' flags
|
|
will force a refresh of all package lists even if they are thought to be up
|
|
to date.
|
|
|
|
*\--needed*::
|
|
Don't reinstall the targets that are already up-to-date.
|
|
|
|
*\--ignore* <'package'>::
|
|
Directs pacman to ignore upgrades of package even if there is one
|
|
available. Multiple packages can be specified by separating them
|
|
with a comma.
|
|
|
|
*\--ignoregroup* <'group'>::
|
|
Directs pacman to ignore upgrades of all packages in 'group' even if
|
|
there is one available. Multiple groups can be specified by
|
|
separating them with a comma.
|
|
|
|
|
|
Handling Config Files[[HCF]]
|
|
----------------------------
|
|
Pacman uses the same logic as rpm to determine action against files that are
|
|
designated to be backed up. During an upgrade, 3 md5 hashes are used for each
|
|
backup file to determine the required action: one for the original file
|
|
installed, one for the new file that's about to be installed, and one for the
|
|
actual file existing on the filesystem. After comparing these 3 hashes, the
|
|
follow scenarios can result:
|
|
|
|
original=X, current=X, new=X::
|
|
All three files are the same, so overwrites are not an issue Install the
|
|
new file.
|
|
|
|
original=X, current=X, new=Y::
|
|
The current file is the same as the original but the new one differs.
|
|
Since the user did not ever modify the file, and the new one may contain
|
|
improvements or bugfixes, install the new file.
|
|
|
|
original=X, current=Y, new=X::
|
|
Both package versions contain the exact same file, but the one on the
|
|
filesystem has been modified. Leave the current file in place.
|
|
|
|
original=X, current=Y, new=Y::
|
|
The new file is identical to the current file. Install the new file.
|
|
|
|
original=X, current=Y, new=Z::
|
|
All three files are different, so install the new file with a '.pacnew'
|
|
extension and warn the user. The user must then manually merge any
|
|
necessary changes into the original file.
|
|
|
|
|
|
Configuration
|
|
-------------
|
|
See linkman:pacman.conf[5] for more details on configuring pacman using the
|
|
'pacman.conf' file.
|
|
|
|
|
|
See Also
|
|
--------
|
|
linkman:pacman.conf[5], linkman:makepkg[8], linkman:libalpm[3]
|
|
|
|
include::footer.txt[]
|