Compare commits

...

3 Commits
v7.0 ... v7.3

Author SHA1 Message Date
nnz1024
b853acbc75 Version v7.3 (2011-08-19 19:26) [AUTO] 2017-08-17 23:05:38 +03:00
nnz1024
51dbc5ede3 Version v7.2 (2011-08-03 17:29) [AUTO] 2017-08-17 23:05:38 +03:00
nnz1024
eb7a6ce4b1 Version v7.1 (2011-08-01 18:05) [AUTO] 2017-08-17 23:05:38 +03:00

145
s4a.tex
View File

@@ -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}