Alternatives

Alternatives — механизм выбора предпочтительного ПО среди нескольких вариантов в некоторых дистрибутивах Linux.

Впервые появился в Debian, откуда попал в дистрибутивы, производные от Debian (такие, как Ubuntu). Также был перенесён в Red Hat Linux, откуда попал во многие RPM-based дистрибутивы.

История

Определённые функции могут предоставляться несколькими программами, однако, в силу тех или иных причин, в качестве «главной» (основной) может использоваться только одна. Например, «слушать» какой-либо порт в один момент времени может только одна программа, таким образом, например, в качестве почтового сервера (принимающего почту по стандартному порту SMTP) может работать только одна программа. Аналогично, разные почтовые серверы имеют различное устройство, однако все они должны предоставлять интерфейс программы sendmail.

Изначально для этого использовались создаваемые вручную символические ссылки (например, /usr/bin/sendmail делался симлинком на соответствующую программу из пакета программ почтового сервера (такого, как Exim, Postfix и т. д.).

В дальнейшем этот метод был расширен на многие применения и был стандартизирован.

update-alternatives написан Яном Джексоном (Ian Jackson) в 1995 и входит в состав пакета dpkg (менеджера пакетов Debian) и является его неотъемлемой частью.

Принципы работы

Update-alternatives управляет симлинками с заранее оговоренных имён на реальные приложения. Например, /usr/bin/x-www-browser (графический браузер) может указывать на /usr/bin/firefox, /usr/bin/konqueror, /usr/bin/opera или на другой браузер. Программе, которой нужно вызвать браузер, не нужно знать о всём многообразии браузеров или предоставлять особую настройку выбора браузера, эта программа просто вызывает /usr/bin/x-www-browser когда нужно, а правильно выбранная альтернатива предоставляет возможность администратору системы указать, каким именно этот браузер должен быть.

В рамках модели alternatives общее имя (такое, как /usr/bin/sendmail, /usr/bin/ed, /usr/bin/x-www-browser) указывает не на нужный файл напрямую, а на имя в каталоге альтернатив, которое, в свою очередь уже является симлинком на файл, предоставляющий нужную функциональность. Общее имя не обязательно должно быть программой, например, это может быть страница справки, шрифта, словаря и т. д.

При установке каждого пакета, который предоставляет специфичную функциональность, вызывается update-alternatives, который сохраняет информацию о появлении (исчезновении) какой-либо альтернативы. Обычно вызов осуществляется в секциях postinst (скрипт после установки) или prerm (скрипт до удаления). Если удаляется последний из пакетов, предоставляющих функциональность, характерную для общего имени, то симлинк и общее имя удаляются. (Например, на сервере без графической оболочки может не быть /usr/bin/x-www-browser, при отсутствующей программе рисования диаграмм не будет ссылки /usr/bin/dia и т. д.)

Дополнительно, существует возможность группировать зависимости, указывая основные ссылки (master) и вторичные (slave). Каждая ссылка может быть автоматической или заданной вручную (manual). Когда группа ссылок находится в автоматическом режиме, система управления альтернативами самостоятельно решает, какая программа является предпочтительной. В ручном режиме альтернатива задаётся системным администратором и не меняется. В автоматическом режиме выбор предпочтительной программы осуществляется на основании приоритета.

Терминология

  • общее имя (generic name) — имя, для которого формируется несколько альтернатив, например, /usr/bin/editor.
  • симлинк (symlink) — символическая ссылка в каталоге альтернатив.
  • альтернатива (alternative) — имя специфичной программы, предоставляющей функциональность для общего имени.
  • каталог альтернатив (alternative directory) — каталог с симлинками на альтернативы (в debian — /etc/alternatives)
  • административный каталог (administrative directory) — каталог с информацией update-alternatives о статусе альтернатив (в debian — /var/lib/dpkg/alternatives)
  • группа ссылок (link group) — набор связанных симлинков на альтернативы, которые должны меняться синхронно
  • основная ссылка (master link) — ссылка, определяющая значения вторичных ссылок
  • вторичные ссылки (slave link) — ссылки в группе ссылок, зависящие от первичной ссылки
  • автоматический режим (automatic mode) — режим, при котором выбор альтернативы для общего имени производится исходя из приоритетов
  • ручной режим (manual mode) — режим, при котором выбор альтернативы для общего имени производится администратором вручную

Примеры общих имён

  • cc (компилятор языка Си в системе, обычно gcc)
  • ftp (ftp-клиент)
  • editor (редактор, обычно vi, vim, nano или emacs)
  • x-window-manager (оконный менеджер в X-server)
  • x-www-browser (браузер в X-server)
  • www-browser (текстовый браузер)
  • pager (программа «листания» текста, такая как more, less)
  • x-terminal-emulator (эмулятор терминала для X-server)
  • desktop-splash (изображение, показываемое при загрузке gnome)
  • x-cursor-theme (вид курсора в X-server)

/usr/bin/gcc

Несмотря на то, что /usr/bin/gcc обычно является симлинком на одну из версий gcc (например, на /usr/bin/gcc-4.3), update-alternatives не поддерживает его как общее имя (хотя, например, поддерживает /usr/bin/cc). Это связано с несовместимостью различных версий gcc между собой и важностью соблюдения конкретной версии gcc для работоспособности всей системы. Определением того, какой компилятор в данной системе является «основным» занимается разработчик дистрибутива линукс.[1]

Источники

  • страница руководства update-alternatives  (рус.),  (англ.)
  • Ральф Гильдербрандт Патрик Кеттер Postfix подробное руководство ISBN 5-93286-109-6 ISBN 978-5-93286-109-7 (англ. ISBN 1-59327-001-1)
  1. #115353 — gcc: cc & gcc should use update-alternatives mechanism — Debian Bug report logs
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.