Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b853acbc75 | ||
|
|
51dbc5ede3 | ||
|
|
eb7a6ce4b1 |
145
s4a.tex
145
s4a.tex
@@ -1870,12 +1870,12 @@ shed)~--- если первое из этих решений принимает
|
||||
|
||||
Начнем с небольшого исторического экскурса. Каталог +/etc/sysconfig+ появился в
|
||||
дистрибутивах Red Hat и SUSE задолго до того, как я присоединился к этим
|
||||
проектам, так что можно смело утверждать, что это было очень давно.
|
||||
Через некоторое время, в Debian появился аналогичный по смыслу каталог
|
||||
проектам~--- иными словами, это было очень давно.
|
||||
Некоторое время спустя, в Debian появился аналогичный по смыслу каталог
|
||||
+/etc/default+. Многие дистрибутивы используют такие каталоги, называя их
|
||||
по-разному. Они имеются даже в некоторых ОС семейства Unix. (Например, в SCO.
|
||||
Если эта тема вас заинтересовала~--- рекомендую обратиться к вашему знакомому
|
||||
ветерану Unix, он расскажет куда подробнее и интереснее, чем я.) Несмотря на то,
|
||||
ветерану Unix, он расскажет подробнее и интереснее, чем я.) Несмотря на то,
|
||||
что подобные каталоги широко используются в Linux и Unix, они совершенно
|
||||
не~стандартизированы~--- ни в POSIX, ни в LSB/FHS, и результате мы имеем целый
|
||||
зоопарк их различных реализаций в разных дистрибутивах.
|
||||
@@ -1889,7 +1889,144 @@ shell это соответствует оператору-точке <<+.+>>.
|
||||
что и основной код, и при возвращении в основной скрипт сохраняются переменные
|
||||
окружения, определенные во включаемом коде. Как правило, код для включения
|
||||
не~содержит shebang'а (+#!/bin/sh+ в начале файла).} shell-скриптами, содержащими,
|
||||
главным образом, определения переменных.
|
||||
главным образом, определения переменных. Большинство файлов из этих каталогов
|
||||
включаются в одноименные скриптами SysV init. Этот принцип отражен в
|
||||
\href{http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit}{Debian
|
||||
Policy Manual (раздел 9.3.2)} и в
|
||||
\href{http://fedoraproject.org/wiki/Packaging:SysVInitScript}{Fedora Packaging
|
||||
Guidelines}, однако в обоих этих дистрибутивах иногда встречаются файлы,
|
||||
не~соответствующие такой схеме, например, не~имеющие соответствующего
|
||||
init-скрипта, или даже сами не~являющиеся скриптами.
|
||||
|
||||
Но почему вообще появились эти каталоги? Чтобы ответить на этот вопрос,
|
||||
обратимся к истории развития концепции SysV init-скриптов. Исторически, они
|
||||
располагаются в каталоге под названием +/etc/rc.d/init.d+ (или что-то похожее).
|
||||
Отметим, что каталог +/etc+ вообще-то предназначен для хранения файлов
|
||||
конфигурации, а не~исполняемого кода (в частности, скриптов). Однако, в начале
|
||||
своей истории, init-скрипты рассматривались именно как файлы конфигурации,
|
||||
и редактирование их администратором было общепринятой практикой. Но со временем,
|
||||
по мере роста и усложнения этих скриптов, их стали рассматривать уже не~как
|
||||
файлы конфигурации, а как некие программы. Чтобы упростить их настройку и
|
||||
обеспечить безопасность процесса обновления, настройки были вынесены в отдельные
|
||||
файлы, загружаемые при работе init-скриптов.
|
||||
|
||||
Попробуем составить некоторое представление о настройках, которые можно сделать
|
||||
через эти файлы. Вот краткий неполный список различных параметров, которые могут
|
||||
быть заданы через переменные окружения в таких файлах (составлен мною по
|
||||
результатам исследования соответствующих каталогов в Fedora и Debian):
|
||||
\begin{itemize}
|
||||
\item Дополнительные параметры командной строки для бинарника демона.
|
||||
\item Настройки локали для демона.
|
||||
\item Тайм-аут остановки для демона.
|
||||
\item Режим остановки для демона.
|
||||
\item Системные настройки, например, системная локаль, часовой пояс,
|
||||
параметры клавиатуры для консоли.
|
||||
\item Избыточные информация о системных настройках, например, указание,
|
||||
установлены ли аппаратные часы по Гринвичу или по местному
|
||||
времени.
|
||||
\item Списки правил брандмауэра, не~являются скриптом (!).
|
||||
\item Привязки к процессорным ядрам для демона.
|
||||
\item Настройки, не~относящиеся к процессу загрузки, например,
|
||||
информация по установке пакетов с новыми ядрами, конфигурация
|
||||
nspluginwrapper, разрешение на выполнение
|
||||
предварительного связывания (prelinking) библиотек.
|
||||
\item Указание, нужно ли запускать данную службу или нет.
|
||||
\item Настройки сети.
|
||||
\item Перечень модулей ядра, которые должны быть подгружены
|
||||
принудительно.
|
||||
\item Нужно ли отключать питание компьютера при остановке системы
|
||||
(+poweroff+) или нет (+halt+).
|
||||
\item Права доступа для файлов устройств (!).
|
||||
\item Описание соответствующей SysV службы.
|
||||
\item Идентификатор пользователя/группы, значение umask для демона.
|
||||
\item Ограничения по ресурсам для демона.
|
||||
\item Приоритет OOM killer'а для демона.
|
||||
\end{itemize}
|
||||
|
||||
А теперь давайте ответим на вопрос: что плохого в +/etc/sysconfig+
|
||||
(+/etc/default+) и почему этим каталогам нет места в мире systemd?
|
||||
\begin{itemize}
|
||||
\item Прежде всего, утрачены основная цель и смысл существования этих
|
||||
каталогов: файлы конфигурации юнитов systemd не~являются
|
||||
программами, в отличие от init-скриптов SysV. Эти файлы
|
||||
представляют собой простые, декларативные описания конкретных
|
||||
задач и функций, и обычно содержат не~более шести строк. Они
|
||||
легко могут быть сгенерированы и проанализованы без
|
||||
использования Bourne shell. Их легко читать и понимать. Кроме
|
||||
того, их легко модифицировать: достаточно скопировать их из
|
||||
+/lib/systemd/system+ в +/etc/systemd/system+, после чего внести
|
||||
необходимые изменения в скопированный файл. При этом можно быть
|
||||
уверенным, что изменения не~будут затерты пакетным менеджером.
|
||||
Изначальная причина появления обсуждаемых каталогов~---
|
||||
необходимость разделять код и параметры конфигурации~--- больше
|
||||
не~существует, так как файлы описания юнитов не~являются кодом.
|
||||
Проще говоря, обсуждаемые каталоги пытаются решить проблему,
|
||||
которой уже не~существует.
|
||||
\item Обсуждаемые каталоги и файлы в них очень сильно привязаны к
|
||||
специфике дистрибутивов. Мы же планируем, используя systemd,
|
||||
способствовать стандартизации и унификации дистрибутивов. В
|
||||
частности, одним из факторов такой стандартизации является
|
||||
рекомендация распространять соответствующие файлы конфигурации
|
||||
юнитов сразу с апстримным продуктом, а не~возлагать эту работу
|
||||
на создателей пакетов, как это делалась во времена SysV.
|
||||
Так как расположение обсуждаемых каталогов и настраиваемые через
|
||||
них параметры сильно отличаются от дистрибутива к дистрибутиву,
|
||||
пытаться поддерживать их в апстримных файлах конфигурации юнитов
|
||||
просто бессмысленно. Хранение конфигурации в обсуждаемых
|
||||
каталогов~--- один из факторов, превращающих Linux в зоопарк
|
||||
несовместимых решений.
|
||||
\item Большинство настроек, задаваемых через эти каталоги, являются
|
||||
избыточными в мире systemd. Например, различные службы позволяют
|
||||
задать таким методом параметры исполнения процесса, в частности,
|
||||
идентификатор пользователя/группы, ограничения ресурсов,
|
||||
привязки к ядрам CPU, приоритет OOM killer'а. Однако, эти
|
||||
настройки поддерживаются лишь некоторыми init-скриптами, причем
|
||||
одна и та же настройка в различных скриптах может называться
|
||||
по-разному. С другой стороны, в мире systemd, все эти настройки
|
||||
доступны для всех служб без исключения, и всегда задаются
|
||||
одинаково, через одни и те же параметры конфигурационных файлов.
|
||||
\item Файлы конфигурации юнитов имеют множество удобных и простых в
|
||||
использовании настроек среды исполнения процесса, гораздо
|
||||
больше, чем могут предоставить файлы из +/etc/sysconfig+.
|
||||
\item Необходимость в некоторых из этих настроек весьма сомнительна.
|
||||
Например, возьмем вышеупомянутую возможность задавать
|
||||
идентификатор пользователя/группы для процесса. Эту задачу
|
||||
должен решать разработчик ПО или дистрибутива. Вмешательство
|
||||
администратора в эту настройку, как правило, лишено смысла~---
|
||||
только разработчик располагает всей информацией,
|
||||
позволяющий предотвратить конфликты идентификаторов и имен
|
||||
пользователей и групп.
|
||||
\item Формат файлов, используемых для сохранения настроек, плохо
|
||||
подходит для данной задачи. Так как эти файлы, как правило,
|
||||
являются включаемыми shell-скриптами, ошибки при их чтении очень
|
||||
трудно отследить. Например, ошибка в имени переменной приведет к
|
||||
тому, что переменная не~будет изменена, однако никакого
|
||||
предупреждения при этом не~выводится.
|
||||
\item Кроме того, такая организация не~исключает влияния
|
||||
конфигурационных параметров на среду исполнения: например,
|
||||
изменение перменных +IFS+ и +LANG+ может существенно повлиять на
|
||||
результат интерпретации init-скрипта.
|
||||
\item Интерпретация этих файлов требует запуска еще одного экземпляра
|
||||
оболочки, что приводит к задержкам при загрузке\footnote{Прим.
|
||||
перев.: Здесь автор несколько заблуждается. Скрипты, включенные
|
||||
через директиву +source+, исполняются тем же экземпляром
|
||||
оболочки, что и вызвавший их скрипт.}.
|
||||
\item Файлы из +/etc/sysconfig+ часто пытаются использовать в качетсве
|
||||
суррогатной замены файлов конфигурации для тех демонов, которые
|
||||
не~имеют встроенной поддержки конфигурационных файлов. В
|
||||
частности, вводятся специальные переменные, позволяющие задать
|
||||
аргументы командной строки, используемые при запуске демона.
|
||||
Встроенная поддержка конфигурационных файлов является более
|
||||
удобной альтернативой такому подходу, ведь глядя на ключи
|
||||
<<+-k+>>, <<+-a+>>, <<+-f+>>, трудно догадаться об их
|
||||
назначении. Очень часто, из-за ограниченности словаря, на
|
||||
различных демонов одни и те же ключи действуют совершенно
|
||||
по-разному. (Для одного демона ключ <<+-f+>> содержит указание
|
||||
демонизироваться при запуске, в то время как для другого эта
|
||||
опция действует прямо противоположным образом.) В отличие от
|
||||
конфигурационных файлов, строка запуска не~может включать
|
||||
полноценных комментариев.
|
||||
\end{itemize}
|
||||
|
||||
\end{document}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user