summaryrefslogtreecommitdiffstats
path: root/man/update-alternatives.pod
diff options
context:
space:
mode:
Diffstat (limited to 'man/update-alternatives.pod')
-rw-r--r--man/update-alternatives.pod655
1 files changed, 655 insertions, 0 deletions
diff --git a/man/update-alternatives.pod b/man/update-alternatives.pod
new file mode 100644
index 0000000..99c0e89
--- /dev/null
+++ b/man/update-alternatives.pod
@@ -0,0 +1,655 @@
+# dpkg manual page - update-alternatives(1)
+#
+# Copyright © 1997-1998 Charles Briscoe-Smith
+# Copyright © 1999 Ben Collins <bcollins@debian.org>
+# Copyright © 2000 Wichert Akkerman <wakkerma@debian.org>
+# Copyright © 2003 Adam Heath <doogie@debian.org>
+# Copyright © 2005 Scott James Remnant <scott@netsplit.com>
+# Copyright © 2006-2015 Guillem Jover <guillem@debian.org>
+# Copyright © 2008 Pierre Habouzit <madcoder@debian.org>
+# Copyright © 2009-2011 Raphaël Hertzog <hertzog@debian.org>
+#
+# This is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+=encoding utf8
+
+=head1 NAME
+
+update-alternatives - maintain symbolic links determining default commands
+
+=head1 SYNOPSIS
+
+B<update-alternatives>
+[I<option>...] I<command>
+
+=head1 DESCRIPTION
+
+B<update-alternatives>
+creates, removes, maintains and displays information about the symbolic
+links comprising the alternatives system.
+
+It is possible for several programs fulfilling the same or similar
+functions to be installed on a single system at the same time.
+For example, many systems have several text editors installed at once.
+This gives choice to the users of a system, allowing each to use a
+different editor, if desired, but makes it difficult for a program
+to make a good choice for an editor to invoke if the
+user has not specified a particular preference.
+
+The alternatives system aims to solve this problem.
+A generic name in the filesystem is
+shared by all files providing interchangeable functionality.
+The alternatives system and the system administrator
+together determine which actual file is referenced by this generic name.
+For example, if the text editors
+L<ed(1)>
+and
+L<nvi(1)>
+are both installed on the system, the alternatives system will cause
+the generic name
+I</usr/bin/editor>
+to refer to
+I</usr/bin/nvi>
+by default.
+The system administrator can override this and cause
+it
+to refer to
+I</usr/bin/ed>
+instead,
+and the alternatives system will not alter this setting until explicitly
+requested to do so.
+
+The generic name is not a direct symbolic link to the selected alternative.
+Instead, it is a symbolic link to a name in the
+I<alternatives>
+I<directory>,
+which in turn is a symbolic link to the actual file referenced.
+This is done so that the system administrator's changes can be confined
+within the
+I<%CONFDIR%>
+directory: the FHS (q.v.) gives reasons why this is a Good Thing.
+
+When each package
+providing a file with a particular functionality is
+installed, changed or removed,
+B<update-alternatives>
+is called to update information about that file in the alternatives system.
+B<update-alternatives>
+is usually called from the following Debian package maintainer scripts,
+B<postinst>
+(configure) to install the alternative and from
+B<prerm> and B<postrm>
+(remove) to remove the alternative.
+B<Note>: in most (if not all) cases no other maintainer script actions should
+call B<update-alternatives>, in particular neither of B<upgrade> nor
+B<disappear>, as any other such action can lose the manual state of an
+alternative, or make the alternative temporarily flip-flop, or completely
+switch when several of them have the same priority.
+
+It is often useful for a number of alternatives to be synchronized,
+so that they are changed as a group; for example, when several versions
+of the
+L<vi(1)>
+editor are installed, the manual page referenced by
+I</usr/share/man/man1/vi.1>
+should correspond to the executable referenced by
+I</usr/bin/vi>.
+B<update-alternatives>
+handles this by means of
+I<master>
+and
+I<slave>
+links; when the master is changed, any associated slaves are changed
+too.
+A master link and its associated slaves make up a
+I<link>
+I<group>.
+
+Each link group is, at any given time,
+in one of two modes: automatic or manual.
+When a group is in automatic mode, the alternatives system will
+automatically decide, as packages are installed and removed,
+whether and how to update the links.
+In manual mode, the alternatives system will retain the choice of
+the administrator and avoid changing the links (except when something is
+broken).
+
+Link groups are in automatic mode when they are first introduced to
+the system.
+If the system administrator makes changes to the system's
+automatic settings,
+this will be noticed the next time
+B<update-alternatives>
+is run on the changed link's group,
+and the group will automatically be switched to manual mode.
+
+Each alternative has a
+I<priority>
+associated with it.
+When a link group is in automatic mode,
+the alternatives pointed to by members of the group
+will be those which have the highest priority.
+
+When using the
+B<--config>
+option,
+B<update-alternatives>
+will list all of the choices for the link group
+of which given
+I<name>
+is the master alternative name.
+The current choice is marked with a ‘*’.
+You will then be prompted for your choice regarding this link group.
+Depending on the choice made, the link group might no longer be in
+I<auto>
+mode.
+You will need to use the
+B<--auto>
+option in order to return to the automatic mode (or you can rerun
+B<--config>
+and select the entry marked as automatic).
+
+If you want to configure non-interactively you can use the
+B<--set>
+option instead (see below).
+
+Different packages providing the same file need to do so
+B<cooperatively>.
+In other words, the usage of
+B<update-alternatives>
+is
+B<mandatory>
+for all involved packages in such case.
+It is not possible to
+override some file in a package that does not employ the
+B<update-alternatives>
+mechanism.
+
+=head1 TERMINOLOGY
+
+Since the activities of
+B<update-alternatives>
+are quite involved, some specific terms will help to explain its
+operation.
+
+=over
+
+=item generic name (or alternative link)
+
+A name, like
+I</usr/bin/editor>,
+which refers, via the alternatives system, to one of a number of
+files of similar function.
+
+=item alternative name
+
+The name of a symbolic link in the alternatives directory.
+
+=item alternative (or alternative path)
+
+The name of a specific file in the filesystem, which may be made
+accessible via a generic name using the alternatives system.
+
+=item alternatives directory
+
+A directory, by default
+I<%CONFDIR%/alternatives>,
+containing the symlinks.
+
+=item administrative directory
+
+A directory, by default
+I<%ADMINDIR%/alternatives>,
+containing
+B<update-alternatives>'
+state information.
+
+=item link group
+
+A set of related symlinks, intended to be updated as a group.
+
+=item master link
+
+The alternative link in a link group which determines how the other links in the
+group are configured.
+
+=item slave link
+
+An alternative link in a link group which is controlled by the setting of
+the master link.
+
+=item automatic mode
+
+When a link group is in automatic mode,
+the alternatives system ensures that the links in the group
+point to the highest priority alternative
+appropriate for the group.
+
+=item manual mode
+
+When a link group is in manual mode,
+the alternatives system will not make any changes
+to the system administrator's settings.
+
+=back
+
+=head1 COMMANDS
+
+=over
+
+=item B<--install> I<link name path priority> [B<--slave> I<link name path>]...
+
+Add a group of alternatives to the system.
+I<link>
+is the generic name for the master link,
+I<name>
+is the name of its symlink in the alternatives directory, and
+I<path>
+is the alternative being introduced for the master link.
+The arguments after B<--slave> are the generic name, symlink name in the
+alternatives directory and the alternative path for a slave link.
+Zero or more
+B<--slave>
+options, each followed by three arguments,
+may be specified.
+Note that the master alternative must exist or the call will fail.
+However if a slave alternative doesn't exist, the corresponding
+slave alternative link will simply not be installed (a warning will still
+be displayed).
+If some real file is installed where an alternative link
+has to be installed, it is kept unless B<--force> is used.
+
+If the alternative name specified exists already
+in the alternatives system's records,
+the information supplied will be added as a new
+set of alternatives for the group.
+Otherwise, a new group, set to automatic mode,
+will be added with this information.
+If the group is in automatic mode,
+and the newly added alternatives' priority is higher than
+any other installed alternatives for this group,
+the symlinks will be updated to point to the newly added alternatives.
+
+=item B<--set> I<name> I<path>
+
+Set the program
+I<path>
+as alternative for
+I<name>.
+This is equivalent to
+B<--config>
+but is non-interactive and thus scriptable.
+
+=item B<--remove> I<name> I<path>
+
+Remove an alternative and all of its associated slave links.
+I<name>
+is a name in the alternatives directory, and
+I<path>
+is an absolute filename to which
+I<name>
+could be linked.
+If
+I<name>
+is indeed linked to
+I<path>,
+I<name>
+will be updated to point to another appropriate alternative
+(and the group is put back in automatic mode), or
+removed if there is no such alternative left.
+Associated slave links will be updated or removed, correspondingly.
+If the link is not currently pointing to
+I<path>,
+no links are changed;
+only the information about the alternative is removed.
+
+=item B<--remove-all> I<name>
+
+Remove all alternatives and all of their associated slave links.
+I<name>
+is a name in the alternatives directory.
+
+=item B<--all>
+
+Call B<--config> on all alternatives.
+It can be usefully combined with
+B<--skip-auto> to review and configure all alternatives which are
+not configured in automatic mode.
+Broken alternatives are also displayed.
+Thus a simple way to fix all broken alternatives is to call
+B<yes '' | update-alternatives --force --all>.
+
+=item B<--auto> I<name>
+
+Switch the link group behind the alternative for
+I<name>
+to automatic mode.
+In the process, the master symlink and its slaves are updated
+to point to the highest priority installed alternatives.
+
+=item B<--display> I<name>
+
+Display information about the link group.
+Information displayed includes the group's mode
+(auto or manual),
+the master and slave links,
+which alternative the master link currently points to,
+what other alternatives are available
+(and their corresponding slave alternatives),
+and the highest priority alternative currently installed.
+
+=item B<--get-selections>
+
+List all master alternative names (those controlling a link group)
+and their status (since version 1.15.0).
+Each line contains up to 3 fields (separated by
+one or more spaces).
+The first field is the alternative name, the second
+one is the status (either B<auto> or B<manual>), and the last one contains
+the current choice in the alternative (beware: it's a filename and thus
+might contain spaces).
+
+=item B<--set-selections>
+
+Read configuration of alternatives on standard input in the format
+generated by B<--get-selections> and reconfigure
+them accordingly (since version 1.15.0).
+
+=item B<--query> I<name>
+
+Display information about the link group
+like B<--display> does, but in a machine parseable way
+(since version 1.15.0, see section L</QUERY FORMAT> below).
+
+=item B<--list> I<name>
+
+Display all targets of the link group.
+
+=item B<--config> I<name>
+
+Show available alternatives for a link group and allow the user to
+interactively select which one to use.
+The link group is updated.
+
+=item B<--help>
+
+Show the usage message and exit.
+
+=item B<--version>
+
+Show the version and exit.
+
+=back
+
+=head1 OPTIONS
+
+=over
+
+=item B<--altdir> I<directory>
+
+Specifies the alternatives directory, when this is to be
+different from the default.
+Defaults to «I<%CONFDIR%/alternatives>».
+
+=item B<--admindir> I<directory>
+
+Specifies the administrative directory, when this is to be
+different from the default.
+Defaults to «I<%ADMINDIR%/alternatives>» if B<%ADMINDIR_ENVVAR%> has not
+been set.
+
+=item B<--instdir> I<directory>
+
+Specifies the installation directory where alternatives links will be created
+(since version 1.20.1).
+Defaults to «I</>» if B<%INSTDIR_ENVVAR%> has not been set.
+
+=item B<--root> I<directory>
+
+Specifies the root directory (since version 1.20.1).
+This also sets the alternatives, installation and administrative
+directories to match.
+Defaults to «I</>» if B<%INSTDIR_ENVVAR%> has not been set.
+
+=item B<--log> I<file>
+
+Specifies the log file (since version 1.15.0), when this is to be different
+from the default (%LOGDIR%/alternatives.log).
+
+=item B<--force>
+
+Allow replacing or dropping any real file that is installed
+where an alternative link has to be installed or removed.
+
+=item B<--skip-auto>
+
+Skip configuration prompt for alternatives which are properly configured
+in automatic mode.
+This option is only relevant with B<--config> or
+B<--all>.
+
+=item B<--quiet>
+
+Do not generate any comments unless errors occur.
+
+=item B<--verbose>
+
+Generate more comments about what is being done.
+
+=item B<--debug>
+
+Generate even more comments, helpful for debugging, about what is being done
+(since version 1.19.3).
+
+=back
+
+=head1 EXIT STATUS
+
+=over
+
+=item B<0>
+
+The requested action was successfully performed.
+
+=item B<2>
+
+Problems were encountered whilst parsing the command line
+or performing the action.
+
+=back
+
+=head1 ENVIRONMENT
+
+=over
+
+=item B<%INSTDIR_ENVVAR%>
+
+If set and the B<--instdir> or B<--root> options have not been
+specified, it will be used as the filesystem root directory.
+
+=item B<%ADMINDIR_ENVVAR%>
+
+If set and the B<--admindir> option has not been specified, it will
+be used as the base administrative directory.
+
+=back
+
+=head1 FILES
+
+=over
+
+=item I<%CONFDIR%/alternatives/>
+
+The default alternatives directory.
+Can be overridden by the
+B<--altdir>
+option.
+
+=item I<%ADMINDIR%/alternatives/>
+
+The default administration directory.
+Can be overridden by the
+B<--admindir>
+option.
+
+=back
+
+=head1 QUERY FORMAT
+
+The B<--query> format is using an
+RFC822-like flat format.
+It's made of I<n> + 1 stanzas where I<n> is the number of alternatives
+available in the queried link group.
+The first
+stanza contains the following fields:
+
+=over
+
+=item B<Name:> I<name>
+
+The alternative name in the alternative directory.
+
+=item B<Link:> I<link>
+
+The generic name of the alternative.
+
+=item B<Slaves:> I<list-of-slaves>
+
+When this field is present, the B<next> lines hold all slave links
+associated to the master link of the alternative.
+There is one slave per line.
+Each line contains one space, the generic name of the slave
+alternative, another space, and the path to the slave link.
+
+=item B<Status:> I<status>
+
+The status of the alternative (B<auto> or B<manual>).
+
+=item B<Best:> I<best-choice>
+
+The path of the best alternative for this link group.
+Not present if
+there is no alternatives available.
+
+=item B<Value:> I<currently-selected-alternative>
+
+The path of the currently selected alternative.
+It can also take the magic value B<none>.
+It is used if the link doesn't exist.
+
+=back
+
+The other stanzas describe the available alternatives in the queried
+link group:
+
+=over
+
+=item B<Alternative:> I<path-of-this-alternative>
+
+Path to this stanza's alternative.
+
+=item B<Priority:> I<priority-value>
+
+Value of the priority of this alternative.
+
+=item B<Slaves:> I<list-of-slaves>
+
+When this field is present, the B<next> lines hold all slave alternatives
+associated to the master link of the alternative.
+There is one slave per line.
+Each line contains one space, the generic name of the slave
+alternative, another space, and the path to the slave alternative.
+
+=back
+
+=head2 Example
+
+ $ update-alternatives --query editor
+ Name: editor
+ Link: /usr/bin/editor
+ Slaves:
+ editor.1.gz /usr/share/man/man1/editor.1.gz
+ editor.fr.1.gz /usr/share/man/fr/man1/editor.1.gz
+ editor.it.1.gz /usr/share/man/it/man1/editor.1.gz
+ editor.pl.1.gz /usr/share/man/pl/man1/editor.1.gz
+ editor.ru.1.gz /usr/share/man/ru/man1/editor.1.gz
+ Status: auto
+ Best: /usr/bin/vim.basic
+ Value: /usr/bin/vim.basic
+
+ Alternative: /bin/ed
+ Priority: -100
+ Slaves:
+ editor.1.gz /usr/share/man/man1/ed.1.gz
+
+ Alternative: /usr/bin/vim.basic
+ Priority: 50
+ Slaves:
+ editor.1.gz /usr/share/man/man1/vim.1.gz
+ editor.fr.1.gz /usr/share/man/fr/man1/vim.1.gz
+ editor.it.1.gz /usr/share/man/it/man1/vim.1.gz
+ editor.pl.1.gz /usr/share/man/pl/man1/vim.1.gz
+ editor.ru.1.gz /usr/share/man/ru/man1/vim.1.gz
+
+=head1 DIAGNOSTICS
+
+With B<--verbose>
+B<update-alternatives>
+chatters incessantly about its activities on its standard output channel.
+If problems occur,
+B<update-alternatives>
+outputs error messages on its standard error channel and
+returns an exit status of 2.
+These diagnostics should be self-explanatory;
+if you do not find them so, please report this as a bug.
+
+=head1 EXAMPLES
+
+There are several packages which provide a text editor compatible
+with B<vi>, for example B<nvi> and B<vim>.
+Which one is used
+is controlled by the link group B<vi>, which includes links for the
+program itself and the associated manual page.
+
+To display the available packages which provide B<vi> and the current
+setting for it, use the B<--display> action:
+
+=over
+
+ update-alternatives --display vi
+
+=back
+
+To choose a particular B<vi> implementation, use this command as root
+and then select a number from the list:
+
+=over
+
+ update-alternatives --config vi
+
+=back
+
+To go back to having the B<vi> implementation chosen automatically, do
+this as root:
+
+=over
+
+ update-alternatives --auto vi
+
+=back
+
+=head1 SEE ALSO
+
+L<ln(1)>,
+FHS (the Filesystem Hierarchy Standard).