Linux alternatives что это

Linux alternatives что это

Часто существуют два или больше пакетов для Fedora, которые делают одно и то же. Система alternatives обеспечивает механизм для выбора активного приложения из нескольких доступных.

Работа alternatives основана на создании символических ссылок в своей папке (/etc/alternatives) с именем программы, а затем — выбора нужной ссылки из этой директории. Такой же механизм используется для переключения между страничками man.

Пример: sendmail и postfix оба являются агентами передачи и приема почты (mail transfer agent или MTA) — они могут отсылать и принимать почту. По различным причинам, одни администраторы предпочитают sendmail, а другие — postfix. При установке оба эти пакета требуют наличия системы alternatives (а именно, файла /usr/sbin/alternatives):

# rpm -q —requires sendmail | grep alternatives
/usr/sbin/alternatives

# rpm -q —requires postfix | grep alternatives
/usr/sbin/alternatives

Во многих скриптах для вызова sendmail прописан /usr/sbin/sendmail, и, соответственно, этот скрипт имеет две версии: для работы с sendmail и для работы с postfix. На самом деле /usr/sbin/sendmail — это символическая ссылка на /etc/alternatives/mta:

# ls -l /usr/sbin/sendmail
lrwxrwxrwx 1 root root 21 Dec 20 00:25 /usr/sbin/sendmail -> /etc/alternatives/mta

А /etc/alternatives/mta — это символическая ссылка на одну из программ — на /usr/sbin/sendmail.sendmail или на /usr/sbin/sendmail.postfix, в зависимости от предпочтений системного администратора. Допустим, на какой-то системе она ссылается на /usr/sbin/sendmail.sendmail:

# ls -l /etc/alternatives/mta
lrwxrwxrwx 1 root root 27 Mar 13 22:52 /etc/alternatives/mta -> /usr/sbin/sendmail.sendmail

На первый взгляд, для переключения на использование postfix нужно просто удалить ссылку mta и создать новую, ссылающуюся на /usr/sbin/sendmail.postfix. Однако, файл в папке /usr/sbin/sendmail — это только один файл из всех файлов, относящихся к MTA объекту; также к нему относятся различные утилиты, такие, как newaliases и mailq, страницы man, и init-скрипты для запуска MTA при старте системы. Чтобы упростить процесс переключения между двумя пакетам, Fedora предоставляет специальные команды.

После установки пакета postfix выполните данную команду:

/usr/sbin/alternatives —install /usr/sbin/sendmail mta /usr/sbin/sendmail.postfix 30 \
—slave /usr/bin/mailq mta-mailq /usr/bin/mailq.postfix \
—slave /usr/bin/newaliases mta-newaliases /usr/bin/newaliases.postfix \
—slave /etc/pam.d/smtp mta-pam /etc/pam.d/smtp.postfix \
—slave /usr/bin/rmail mta-rmail /usr/bin/rmail.postfix \
—slave /usr/lib/sendmail mta-sendmail /usr/lib/sendmail.postfix \
—slave /usr/share/man/man1/mailq.1.gz mta-mailqman /usr/share/man/man1/mailq.postfix.1.gz \
—slave /usr/share/man/man1/newaliases.1.gz mta-newaliasesman /usr/share/man/man1/newaliases.postfix.1.gz \
—slave /usr/share/man/man8/sendmail.8.gz mta-sendmailman /usr/share/man/man1/sendmail.postfix.1.gz \
—slave /usr/share/man/man5/aliases.5.gz mta-aliasesman /usr/share/man/man5/aliases.postfix.5.gz \
—initscript postfix

После установки sendmail выполните следующую команду:

/usr/sbin/alternatives —install /usr/sbin/sendmail mta /usr/sbin/sendmail.sendmail 90 \
—slave /usr/bin/mailq mta-mailq /usr/bin/mailq.sendmail \
—slave /usr/bin/newaliases mta-newaliases /usr/bin/newaliases.sendmail \
—slave /usr/bin/rmail mta-rmail /usr/bin/rmail.sendmail \
—slave /usr/lib/sendmail mta-sendmail /usr/lib/sendmail.sendmail \
—slave /etc/pam.d/smtp mta-pam /etc/pam.d/smtp.sendmail \
—slave /usr/share/man/man8/sendmail.8.gz mta-sendmailman /usr/share/man/man8/sendmail.sendmail.8.gz \
—slave /usr/share/man/man1/mailq.1.gz mta-mailqman /usr/share/man/man1/mailq.sendmail.1.gz \
—slave /usr/share/man/man1/newaliases.1.gz mta-newaliasesman /usr/share/man/man1/newaliases.sendmail.1.gz \
—slave /usr/share/man/man5/aliases.5.gz mta-aliasesman /usr/share/man/man5/aliases.sendmail.5.gz \
—initscript sendmail

После выполнение данных команд было создано два варианта (две альтернативы) MTA — postfix и sendmail. Главный файл каждой программы теперь стал символической ссылкой на ту программу, которая выбрана для использования в данный момент. Все файлы, относящиеся к данным программам, также будут переключаться в зависимости от выбранной программы. И init-скрипты тоже (через команду chkconfig).

Чтобы выбрать для использования один из двух пакетов в интерактивном режиме, используйте опцию —config, после которой укажите название этих пакетов:

# alternatives —config mta

There are 2 programs which provide ‘mta’.

Enter to keep the current selection[+], or type selection number:

Заметим, что выбранная программа отмечена звездочкой, а программа, которую вы выбрали сейчас, отмечена плюсом.

Для выбора текущей программы одной командой, используйте опцию —set:

# alternatives —set mta /usr/sbin/sendmail.postfix

Для того, чтобы узнать, какая программа выбрана в данный момент как текущая, используйте опцию —display:

Читайте также:  Qemu on windows host

# alternatives —display mta
mta — status is manual.
link currently points to /usr/sbin/sendmail.sendmail
/usr/sbin/sendmail.sendmail — priority 90
slave mta-pam: /etc/pam.d/smtp.sendmail
slave mta-mailq: /usr/bin/mailq.sendmail
slave mta-newaliases: /usr/bin/newaliases.sendmail
slave mta-rmail: /usr/bin/rmail.sendmail
slave mta-sendmail: /usr/lib/sendmail.sendmail
slave mta-mailqman: /usr/share/man/man1/mailq.sendmail.1.gz
slave mta-newaliasesman: /usr/share/man/man1/newaliases.sendmail.1.gz
slave mta-aliasesman: /usr/share/man/man5/aliases.sendmail.5.gz
slave mta-sendmailman: /usr/share/man/man8/sendmail.sendmail.8.gz
/usr/sbin/sendmail.postfix — priority 30
slave mta-pam: /etc/pam.d/smtp.postfix
slave mta-mailq: /usr/bin/mailq.postfix
slave mta-newaliases: /usr/bin/newaliases.postfix
slave mta-rmail: /usr/bin/rmail.postfix
slave mta-sendmail: /usr/lib/sendmail.postfix
slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
Current `best’ version is /usr/sbin/sendmail.sendmail.

Вместо выбора текущей программы вручную, вы можете включить автоматический выбор программы. Тогда текущий выбор будет изменяться при удалении и добавлении пакетов:

# alternatives —auto mta

Наиболее распространенные способы использования системы alternatives — это выбор разных реализаций java, выбор сервера печати и выбор почтового сервера. Реализация системы alternatives в Fedora — это расширение той же системы под Debian.

(Символические ссылки на программы расположены именно в папке /etc/alternatives, а не в какой-нибудь другой, так как /etc — это папка, содержащая все настройки системы, а данные ссылки также относятся к настройкам).

Материалы рубрики «Пакет дня» защищены лицензией Creative Commons Attribution-Share Alike 2.5 Canada License, оригинальные статьи: Fedora Daily Package

Источник

Linux alternatives что это

update-alternatives [опции] —remove name path

update-alternatives [опции] —auto name

update-alternatives [опции] —display name

update-alternatives [опции] —config name

ОПИСАНИЕ

Это позволяет нескольким программам, установленным в системе одновременно, выполнять одинаковые или похожие функции. Например, во многих системах одновременно установлено несколько текстовых редакторов. Это дает возможность всем пользователям системы, при желании, пользоваться различными редакторами, но создает при этом сложности для системы при вызове программы редактирования, если пользователь не определил своих предпочтений.

Предназначение подсистемы альтернатив заключается в решении этих задач. Универсальное имя в файловой системе разделено между всеми файлами, предоставляющими взаимозаменяемые функциональные возможности. Система альтернатив и системный администратор вместе определяют, к какому файлу в системе происходит обращение при помощи универсального имени. Например, если в системе одновременно установлены текстовые редакторы ed(1) и vim(1) , то подсистема альтернатив обратится к универсальному имени /usr/bin/editor для вызова /usr/bin/vim по-умолчанию. Системный администратор может изменить параметры так, что вместо этого будет произведен вызов /usr/bin/ed , и подсистема альтернатив не изменит эти установки до тех пор, пока об этом не последует явный запрос.

Универсальное имя — это не прямая символическая ссылка к выбранной альтернативе. Вместо этого создается символическая ссылка в каталоге альтернатив , которая, в свою очередь, ссылается на конкретный файл. Это сделано для того, чтобы изменения, сделанные системным администратором, ограничивались только каталогом /etc : FHS дает основания считать это хорошей идеей.

Если пакет, предоставляющий файл со специфическими функциями, установлен, изменен или удален, вызывается update-alternatives для обновления информации об этом файле, содержащемся в подсистеме альтернатив. Вызов update-alternatives обычно происходит посредством вызова post-install или pre-install скрипта, содержащегося в пакете RPM.

Зачастую бывает полезно синхронизировать изменение нескольких альтернатив, образующих группу; например, если в системе установлено несколько версий редактора vi(1) , то man-страница /usr/share/man/man1/vi.1 должна соответствовать альтернативе, определяемой /usr/bin/vi Подсистема update-alternatives управляет этим посредством главных (master) и подчиненных (slave) ссылок; если изменяется главная ссылка, подчиненные ссылки тоже изменяются. Главная ссылка и ассоциированные с ней подчиненные образуют группу ссылок .

Каждая группа ссылок в любой момент времени может находиться в одном из двух режимов: автоматическом или не автоматическом. Если группа находится в автоматическом режиме, при установке, обновлении и удалении пакетов подсистема альтернатив сама решает, какие из ссылок требуется обновить и как. В не автоматическом режиме подсистема альтернатив не делает изменений ссылок, оставляя их на усмотрение системного администратора.

Каждая группа ссылок при первой установке в систему находится в автоматическом режиме. Если системный администратор вносит изменения в автоматические установки системы, то update-alternatives при очередном запуске обнаружит изменении группы ссылок и автоматически перейдет в не автоматический режим.

Читайте также:  Sopcast player ��� linux

Каждая альтернатива имеет ассоциированный с ней приоритет — когда группа ссылок находится в автоматическом режиме, то альтернативами, указанными членами группы, будут те, которые имеют наивысший приоритет.

При использовании опции —config update-alternatives перечислит весь список вариантов в группе ссылок, соответствующий главной ссылке. Вам будет предложено определить, какой из вариантов вы желаете использовать. Если вы однажды сделаете изменения, то группа ссылок больше не будет работать в автоматическом режиме. Для возврата к автоматическому режиму вам необходимо использовать опцию —auto

ТЕРМИНОЛОГИЯ


ОПЦИИ


ПАРАМЕТРЫ


ДЕЙСТВИЯ


ФАЙЛЫ


КОДЫ ВОЗВРАТА


ДИАГНОСТИКА


ОШИБКИ

Если вы найдете любое расхождение между работой update-alternatives и настоящим руководством, то это ошибка реализации либо документации и перевода; пожалуйста, сообщите об этом.

Источник

Introduction to the alternatives command in Linux

Photo by Rodolfo Clix from Pexels

More Linux resources

Abstractions can be helpful to users because many users don’t care how their computer achieves a task as long as it’s on target. In fact, even applications don’t always care how something is achieved as long as all of its system calls are answered correctly. In theory, a Linux sysadmin can offer many system tools according to function rather than by the exact name of the executable, but that often requires a lot of symlinking and version tracking. Unless that is, you use the alternatives command.

The alternatives command began its life as, interestingly, an alternative. Originally, this was a convenience utility, written in Perl, from the Debian Linux project, called update-alternatives . Red Hat rewrote the command without Perl, and it’s been propagated throughout Fedora-based distributions such as Red Hat and CentOS, as well as other distributions that look to Red Hat for the functional definition of the Linux Standard Base (LSB).

When to use the alternatives command

A simple and realistic example: you have a command on your system called em , which launches a simple text editor. It’s been the go-to editor for your userbase for years, many people have based workflows around it and some maintain highly customized configs for it. However, your userbase has made it clear to you recently that they can’t survive any longer without emoji support in their terminal editors and em doesn’t support Unicode.

You find a Unicode-enabled fork of em called nem , but you know that 99% of your users are used to em , have scripts that call em , and will continue to think of any replacement application as em no matter what you do. The easy solution to this situation, and many other examples similar to it, is to designate the new nem binary as the preferred alternative to the em binary when the em command is used.

Manually creating a symlink might seem tempting, but that’s not resistant to updates from a package manager, nor is it centralized.

The alternatives command is most useful when managing «generic» application names. Of course in the UNIX world, «generic» isn’t always generic any more than «Kleenex» or «Xerox» is in the real world, so terms like java, (x)emacs(-nox), (n)vi(m), whois, and iptables are often some of the first to have alternatives defined for them. For truly generic terms, like EDITOR and CC , the alternatives command is not considered an appropriate solution. For those terms, because they’re environment variables and should be defined in /etc or $HOME/.profile .

Читайте также:  Почему не работает панель пуска windows 10

Creating a new alternative

Continuing with the example scenario of an old binary called em being supplanted by the new variant nem , it’s easy to create an alternative entry. In this example, you must rename the original command, although in other instances this isn’t necessary because the command isn’t exactly what people think it is in the first place ( java , for example, is rarely located in /usr/bin directly). If you do need to change the name of a binary, the right way to do that is in its RPM spec file, such that the RPM installing the command provides the binary under the new name.

In a pinch, especially if you’re phasing the command out anyway, you could remove the command from the system’s package management and just keep a custom version of the old command available /opt or similar.

For this example, assume you’ve renamed the original editor em2 (denoting its latest version number).

Now you have two binaries ( em2 and nem ) to be associated with one command: em . To help keep the different roles of terminology clear, assume that em and nem are both micro Emacs-style editors. In that case, a very generic term for the alternative being created might be µemacs (using the µ symbol to mean «micro») or uemacs for simplicity.

Create an alternative for the original by providing:

  • a location for the «generic» symlink
  • a name for the alternative (I’ve decided upon uemacs , to make it clear that it’s a reference name rather than a specific binary)
  • the binary to be executed when these symlinks are called
  • a priority level to indicate which alternative is preferred

Create an alternative for the new binary, with a high priority because it’s your preferred binary:

These commands create a new symlink, /usr/bin/em , pointing to /etc/alternatives/em , which you can in turn point to either /opt/em-legacy/em2 or /usr/local/bin/nem . The human-friendly reference to this bundle of alternatives is uemacs , which has been arbitrarily chosen by the systems administrator because it’s descriptive and memorable. You can choose the destination of the alternative symlink using the —config option:

Removing an alternative

Sometimes alternatives are long-term solutions, and other times they’re just to help users or admins to transition to something new. If you need to remove an alternative for any reason, you can do that with the —remove-all option, followed by the «generic» name of the alternative. In this example, that’s uemacs :

This removes everything about uemacs from the alternatives subsystem: the symlink in /usr/bin and /etc/alternatives . If you only want to remove one choice from an alternative, then use the —remove option, providing the alternative name ( uemacs in this example) and the path of the choice you want to drop:

Alternatives

The alternatives command has many more features, including the ability to symlink dependent components when a specific alternative is chosen. In addition to handling a lot of the heavy lifting, alternatives keeps your inconsistencies centralized. You can check in on what alternatives are in place, so you don’t have to remember from day to day that emacs is actually emacs-26.3 , or that java isn’t java-1.8 but /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0 , and so on:

Linux is all about choice and flexibility, and the alternatives command is an example of how both users and admins can benefit from some clever sleight-of-hand.

Want to try out Red Hat Enterprise Linux? Download it now for free.

Источник

Оцените статью