Version v8.5 (2012-01-02 01:38) [AUTO]
This commit is contained in:
357
s4a.tex
357
s4a.tex
@@ -43,7 +43,8 @@ pdfauthor={Lennart Poettering, Sergey Ptashnick}}
|
|||||||
\author{Lennart P\"{o}ttering (автор)\thanks{Первоисточник (на английском
|
\author{Lennart P\"{o}ttering (автор)\thanks{Первоисточник (на английском
|
||||||
языке) опубликован на сайте автора: \url{http://0pointer.de/blog/projects}}\\%
|
языке) опубликован на сайте автора: \url{http://0pointer.de/blog/projects}}\\%
|
||||||
Сергей Пташник (русский перевод)\thanks{Актуальная версия перевода
|
Сергей Пташник (русский перевод)\thanks{Актуальная версия перевода
|
||||||
доступна на портале OpenNet: \url{http://wiki.opennet.ru/Systemd}}\\%
|
доступна на личной странице переводчика:
|
||||||
|
\url{http://www2.kangran.su/~nnz/pub/s4a/}}\\%
|
||||||
\small Данный документ доступен на условиях лицензии
|
\small Данный документ доступен на условиях лицензии
|
||||||
\href{http://creativecommons.org/licenses/by-sa/3.0/legalcode}{CC-BY-SA}}
|
\href{http://creativecommons.org/licenses/by-sa/3.0/legalcode}{CC-BY-SA}}
|
||||||
\maketitle
|
\maketitle
|
||||||
@@ -58,7 +59,7 @@ pdfauthor={Lennart Poettering, Sergey Ptashnick}}
|
|||||||
инициализации. Окончательный переход на systemd произошел лишь в Fedora~15.}.
|
инициализации. Окончательный переход на systemd произошел лишь в Fedora~15.}.
|
||||||
Помимо Fedora, systemd также поддерживает и другие дистрибутивы, в частности,
|
Помимо Fedora, systemd также поддерживает и другие дистрибутивы, в частности,
|
||||||
\href{http://en.opensuse.org/SDB:Systemd}{OpenSUSE}\footnote{Прим. перев.:
|
\href{http://en.opensuse.org/SDB:Systemd}{OpenSUSE}\footnote{Прим. перев.:
|
||||||
сейчас systemd поддерживается практически во всех популярных дистрибутивах для
|
Сейчас systemd поддерживается практически во всех популярных дистрибутивах для
|
||||||
настольных систем.}. systemd предоставляет администраторам целый ряд новых
|
настольных систем.}. systemd предоставляет администраторам целый ряд новых
|
||||||
возможностей, значительно упрощающих процесс обслуживания системы. Эта статья
|
возможностей, значительно упрощающих процесс обслуживания системы. Эта статья
|
||||||
является первой в серии публикаций, планируемых в ближайшие месяцы. В каждой из
|
является первой в серии публикаций, планируемых в ближайшие месяцы. В каждой из
|
||||||
@@ -78,9 +79,9 @@ pdfauthor={Lennart Poettering, Sergey Ptashnick}}
|
|||||||
systemd эти сообщения будут пробегать все быстрее и быстрее, вследствие чего,
|
systemd эти сообщения будут пробегать все быстрее и быстрее, вследствие чего,
|
||||||
читать их будет все труднее. К тому же, многие пользователи применяют
|
читать их будет все труднее. К тому же, многие пользователи применяют
|
||||||
графические оболочки загрузки (например, Plymouth), полностью скрывающие эти
|
графические оболочки загрузки (например, Plymouth), полностью скрывающие эти
|
||||||
сообщения. Тем не~менее, информация, которую несут эти сообщения, была и
|
сообщения. Тем не~менее, информация, которую они несут, была и остается
|
||||||
остается чрезвычайно важной~--- они показывают, успешно ли запустилась каждая
|
чрезвычайно важной~--- они показывают, успешно ли запустилась каждая служба, или
|
||||||
служба, или попытка ее запуска закончилась ошибкой (зеленое
|
попытка ее запуска закончилась ошибкой (зеленое
|
||||||
\texttt{[~\textcolor{green}{OK}~]} или красное
|
\texttt{[~\textcolor{green}{OK}~]} или красное
|
||||||
\texttt{[~\textcolor{red}{FAILED}~]} соответственно). Итак, с ростом скорости
|
\texttt{[~\textcolor{red}{FAILED}~]} соответственно). Итак, с ростом скорости
|
||||||
загрузки систем, возникает неприятная ситуация: информация о результатах
|
загрузки систем, возникает неприятная ситуация: информация о результатах
|
||||||
@@ -208,7 +209,9 @@ ntpd.service - Network Time Service
|
|||||||
\end{Verbatim}
|
\end{Verbatim}
|
||||||
|
|
||||||
systemd сообщает нам, что ntpd был запущен (с идентификатором процесса 953) и
|
systemd сообщает нам, что ntpd был запущен (с идентификатором процесса 953) и
|
||||||
аварийно завершил работу (с кодом выхода 255).
|
аварийно завершил работу (с кодом выхода 255)\footnote{Прим. перев.:
|
||||||
|
Впоследствии, про просьбам пользователей, считавших, что слово <<maintenance>>
|
||||||
|
недостаточно точно отражает ситуацию, оно было заменено на <<failed>>.}.
|
||||||
|
|
||||||
В последующих версиях systemd, мы планируем добавить возможность вызова в
|
В последующих версиях systemd, мы планируем добавить возможность вызова в
|
||||||
таких ситуациях ABRT (Automated Bug Report Tool), но для этого необходима
|
таких ситуациях ABRT (Automated Bug Report Tool), но для этого необходима
|
||||||
@@ -242,7 +245,7 @@ CGI-программы, а демон cron~--- команды, предписа
|
|||||||
к разработке демонов). Также, не~будем забывать, что процесс легко может
|
к разработке демонов). Также, не~будем забывать, что процесс легко может
|
||||||
изменить свое имя посредством +PR_SETNAME+, или задав значение
|
изменить свое имя посредством +PR_SETNAME+, или задав значение
|
||||||
+argv[0]+, что также усложняет процесс его опознания\footnote{Прим.
|
+argv[0]+, что также усложняет процесс его опознания\footnote{Прим.
|
||||||
перев.: стоит отметить, что перечисленные ситуации могут возникнуть не~только
|
перев.: Стоит отметить, что перечисленные ситуации могут возникнуть не~только
|
||||||
вследствие ошибок в коде и/или конфигурации программ, но и в результате злого
|
вследствие ошибок в коде и/или конфигурации программ, но и в результате злого
|
||||||
умысла. Например, очень часто встречается ситуация, когда установленный на
|
умысла. Например, очень часто встречается ситуация, когда установленный на
|
||||||
взломанном сервере процесс-бэкдор маскируется под нормального демона, меняя
|
взломанном сервере процесс-бэкдор маскируется под нормального демона, меняя
|
||||||
@@ -584,7 +587,7 @@ systemd именует группы в соответствии с назван
|
|||||||
службам, но и процессов, запущенных в рамках пользовательских сеансов. В
|
службам, но и процессов, запущенных в рамках пользовательских сеансов. В
|
||||||
последующих статьях мы обсудим этот вопрос более подробно.
|
последующих статьях мы обсудим этот вопрос более подробно.
|
||||||
|
|
||||||
\section{HOW-TO: преобразование SysV init-скрипта в systemd service-файл}
|
\section{Преобразование SysV init-скрипта в systemd service-файл}
|
||||||
\label{sec:convert}
|
\label{sec:convert}
|
||||||
|
|
||||||
Традиционно, службы Unix и Linux (демоны) запускаются через SysV init-скрипты.
|
Традиционно, службы Unix и Linux (демоны) запускаются через SysV init-скрипты.
|
||||||
@@ -867,7 +870,7 @@ service-файлы. Но, к счастью, <<проблемных>> скрип
|
|||||||
Впрочем, этот метод не~вполне корректен, так как он действует не~только на
|
Впрочем, этот метод не~вполне корректен, так как он действует не~только на
|
||||||
самого демона, но и на другие процессы с тем же именем. Иногда подобное
|
самого демона, но и на другие процессы с тем же именем. Иногда подобное
|
||||||
поведение может привести к неприятным последствиям. Более правильным будет
|
поведение может привести к неприятным последствиям. Более правильным будет
|
||||||
использование pid-файла: +kill $(cat /var/run/syslogd.pid)$+. Вот, вроде
|
использование pid-файла: \verb+kill $(cat /var/run/syslogd.pid)+. Вот, вроде
|
||||||
бы, и все, что вам нужно\ldots{} Или мы упускаем еще что-то?
|
бы, и все, что вам нужно\ldots{} Или мы упускаем еще что-то?
|
||||||
|
|
||||||
Действительно, мы забываем одну простую вещь: существуют службы, такие, как
|
Действительно, мы забываем одну простую вещь: существуют службы, такие, как
|
||||||
@@ -905,15 +908,17 @@ Apache, crond, atd, которые по роду служебной деятел
|
|||||||
как бы она ни пыталась сбежать из-под нашего контроля при помощи двойного
|
как бы она ни пыталась сбежать из-под нашего контроля при помощи двойного
|
||||||
форка или
|
форка или
|
||||||
\href{http://ru.wikipedia.org/wiki/Fork-%D0%B1%D0%BE%D0%BC%D0%B1%D0%B0}{форк-бомбардировки}%
|
\href{http://ru.wikipedia.org/wiki/Fork-%D0%B1%D0%BE%D0%BC%D0%B1%D0%B0}{форк-бомбардировки}%
|
||||||
\footnote{Прим. перев.: стоит особо отметить, что использование контрольных
|
\footnote{Прим. перев.: Стоит особо отметить, что использование контрольных
|
||||||
групп не~только упрощает процесс уничтожения форк-бомб, но и значительно
|
групп не~только упрощает процесс уничтожения форк-бомб, но и значительно
|
||||||
уменьшает ущерб от работающей форк-бомбы. Так как systemd автоматически
|
уменьшает ущерб от работающей форк-бомбы. Так как systemd автоматически помещает
|
||||||
помещает каждую службу и каждый пользовательский сеанс в свою контрольную
|
каждую службу и каждый пользовательский сеанс в свою контрольную группу по
|
||||||
группу по ресурсу процессорного времени, запуск форк-бомбы одним
|
ресурсу процессорного времени, запуск форк-бомбы одним пользователем или службой
|
||||||
пользователем или службой не~создаст значительных проблем с отзывчивостью
|
не~создаст значительных проблем с отзывчивостью системы у других пользователей и
|
||||||
системы у других пользователей и служб. Таким образом, в качестве основной
|
служб. Таким образом, в качестве основной угрозы форк-бомбардировки остаются
|
||||||
угрозы форк-бомбардировки остаются лишь возможности исчерпания памяти и
|
лишь возможности исчерпания памяти и идентификаторов процессов (PID). Впрочем, и
|
||||||
идентификаторов процессов (PID).}.
|
их тоже можно легко устранить: достаточно задать соответствующие лимиты в
|
||||||
|
конфигурационном файле службы (см.
|
||||||
|
\href{http://www.0pointer.de/public/systemd-man/systemd.exec.html}{systemd.exec(5)}).}.
|
||||||
|
|
||||||
В некоторый случах возникает необходимость отправить сигнал именно основному
|
В некоторый случах возникает необходимость отправить сигнал именно основному
|
||||||
процессу службы. Например, используя +SIGHUP+, мы можем заставить демона
|
процессу службы. Например, используя +SIGHUP+, мы можем заставить демона
|
||||||
@@ -1048,7 +1053,13 @@ systemd и на этот случай есть простое решение, и
|
|||||||
\end{Verbatim}
|
\end{Verbatim}
|
||||||
|
|
||||||
Итак, блокировка сводится к созданию символьной ссылки
|
Итак, блокировка сводится к созданию символьной ссылки
|
||||||
с именем соответствующей службы, указывающей на +/dev/null+.
|
с именем соответствующей службы, указывающей на
|
||||||
|
+/dev/null+\footnote{Прим. перев.: Впоследствии в программу
|
||||||
|
+systemctl+ была добавлена поддержка команд +mask+ и +unmask+,
|
||||||
|
упрощающих процесс блокирования и разблокирования юнитов.
|
||||||
|
Например, для блокирования службы +ntpd.service+ теперь
|
||||||
|
достаточно команды +systemctl mask ntpd.service+. Фактически
|
||||||
|
она сделает то же самое, что и приведенная выше команда +ln+.}.
|
||||||
После такой операции служба не~может быть запущена ни~вручную,
|
После такой операции служба не~может быть запущена ни~вручную,
|
||||||
ни~автоматически. Символьная ссылка создается в каталоге
|
ни~автоматически. Символьная ссылка создается в каталоге
|
||||||
+/etc/systemd/system/+, а ее имя должно соответствовать имени
|
+/etc/systemd/system/+, а ее имя должно соответствовать имени
|
||||||
@@ -1077,7 +1088,7 @@ systemd и на этот случай есть простое решение, и
|
|||||||
файлом из пакета).
|
файлом из пакета).
|
||||||
|
|
||||||
Стоит отметить, что блокировка службы, как и ее отключение,
|
Стоит отметить, что блокировка службы, как и ее отключение,
|
||||||
является перманентной мерой\footnote{Прим. перев.: подробно
|
является перманентной мерой\footnote{Прим. перев.: Подробно
|
||||||
описав принцип работы блокировки службы (юнита), автор забывает
|
описав принцип работы блокировки службы (юнита), автор забывает
|
||||||
привести практические примеры ситуаций, когда эта возможность
|
привести практические примеры ситуаций, когда эта возможность
|
||||||
оказывается полезной.
|
оказывается полезной.
|
||||||
@@ -1090,21 +1101,14 @@ systemd и на этот случай есть простое решение, и
|
|||||||
ошибочно указано +systemctl restart+ (+service restart+), что
|
ошибочно указано +systemctl restart+ (+service restart+), что
|
||||||
является прямым указанием на запуск службы, если она еще
|
является прямым указанием на запуск службы, если она еще
|
||||||
не~запущена. Вследствие таких ошибок, отключенная служба может
|
не~запущена. Вследствие таких ошибок, отключенная служба может
|
||||||
<<ожить>> в самый неподходящий момент.
|
<<ожить>> в самый неподходящий момент.}.
|
||||||
|
|
||||||
Другой пример~---
|
|
||||||
ограничение возможностей непривилегированного пользователя при
|
|
||||||
управлении системой. Даже если такому пользователю делегировано
|
|
||||||
(через механизмы sudo или PolicyKit) право на использование
|
|
||||||
+systemctl+, это еще не~означает, что он сможет запустить
|
|
||||||
заблокированную службу~--- права на выполнение +rm+ (удаление
|
|
||||||
блокирующей символьной ссылки) выдаются отдельно.}.
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
После прочтения изложенного выше, у читателя может возникнуть вопрос: как
|
После прочтения изложенного выше, у читателя может возникнуть вопрос: как
|
||||||
отменить произведенные изменения? Что ж, ничего сложного тут нет:
|
отменить произведенные изменения? Что ж, ничего сложного тут нет:
|
||||||
+systemctl start+ отменяет действия +systemctl stop+, +systemctl enable+
|
+systemctl start+ отменяет действия +systemctl stop+, +systemctl enable+
|
||||||
отменяет действие +systemctl disable+, а +rm+ отменяет действие +ln+.
|
отменяет действие +systemctl disable+, а +rm+ отменяет действие
|
||||||
|
+ln+.
|
||||||
|
|
||||||
\section{Смена корня}
|
\section{Смена корня}
|
||||||
|
|
||||||
@@ -1144,8 +1148,8 @@ systemd и на этот случай есть простое решение, и
|
|||||||
init, многие параметры среды выполнения (в частности, лимиты на системные
|
init, многие параметры среды выполнения (в частности, лимиты на системные
|
||||||
ресурсы, переменные окружения, и т.п.) наследуются от оболочки, из которой был
|
ресурсы, переменные окружения, и т.п.) наследуются от оболочки, из которой был
|
||||||
запущен init-скрипт. При использовании systemd ситуация меняется радикально:
|
запущен init-скрипт. При использовании systemd ситуация меняется радикально:
|
||||||
пользователь просто уведомляет init-демона о необходимости запустить ту или иную
|
пользователь просто уведомляет процесс init о необходимости запустить ту или
|
||||||
службу, и тот запускает демона в чистом, созданном <<с нуля>> и тщательно
|
иную службу, и тот запускает демона в чистом, созданном <<с нуля>> и тщательно
|
||||||
настроенном окружении, параметры которого никак не~зависят от настроек среды, из
|
настроенном окружении, параметры которого никак не~зависят от настроек среды, из
|
||||||
которой была отдана команда. Такой подход полностью отменяет традиционный метод
|
которой была отдана команда. Такой подход полностью отменяет традиционный метод
|
||||||
запуска демонов в chroot-окружениях: теперь демон порождается процессом init
|
запуска демонов в chroot-окружениях: теперь демон порождается процессом init
|
||||||
@@ -1173,19 +1177,19 @@ chroot в самой программе. Прежде всего, коррект
|
|||||||
chroot-окружения требует глубокого понимания принципов работы программы.
|
chroot-окружения требует глубокого понимания принципов работы программы.
|
||||||
Например, нужно точно знать, какие каталоги нужно bind-монтировать из основной
|
Например, нужно точно знать, какие каталоги нужно bind-монтировать из основной
|
||||||
системы, чтобы обеспечить все необходимые для работы программы каналы связи. С
|
системы, чтобы обеспечить все необходимые для работы программы каналы связи. С
|
||||||
учетом вышесказанного, эффективная chroot-защита обеспечивается в том случае,
|
учетом вышесказанного, эффективная chroot-защита обеспечивается только в том
|
||||||
когда она реализована в коде самого демона. Именно разработчик лучше других
|
случае, когда она реализована в коде самого демона. Именно разработчик лучше
|
||||||
знает (\emph{обязан} знать), как правильно сконфигурировать chroot-окружение, и
|
других знает (\emph{обязан} знать), как правильно сконфигурировать
|
||||||
какой минимальный набор файлов, каталогов и файловых систем необходим внутри
|
chroot-окружение, и какой минимальный набор файлов, каталогов и файловых систем
|
||||||
него для нормальной работы демона. Уже сейчас существуют демоны, имеющие
|
необходим внутри него для нормальной работы демона. Уже сейчас существуют
|
||||||
встроенную поддержку chroot. К сожалению, в системе Fedora, установленной с
|
демоны, имеющие встроенную поддержку chroot. К сожалению, в системе Fedora,
|
||||||
параметрами по умолчанию, таких демонов всего два:
|
установленной с параметрами по умолчанию, таких демонов всего два:
|
||||||
\href{http://avahi.org/}{Avahi} и RealtimeKit. Оба они написаны одним очень
|
\href{http://avahi.org/}{Avahi} и RealtimeKit. Оба они написаны одним очень
|
||||||
хитрым человеком ;-) (Вы можете собственноручно убедиться в этом, выполнив
|
хитрым человеком ;-) (Вы можете собственноручно убедиться в этом, выполнив
|
||||||
команду +ls -l /proc/*/root+.)
|
команду +ls -l /proc/*/root+.)
|
||||||
|
|
||||||
Возвращаясь к теме нашего обсуждения: разумеется, systemd позволяет помещать
|
Возвращаясь к теме нашего обсуждения: разумеется, systemd позволяет помещать
|
||||||
выбранных демонов в chroot, и управлять ими точно так же, как и другими.
|
выбранных демонов в chroot, и управлять ими точно так же, как и остальными.
|
||||||
Достаточно лишь указать параметр +RootDirectory=+ в соответствующем
|
Достаточно лишь указать параметр +RootDirectory=+ в соответствующем
|
||||||
service-файле. Например:
|
service-файле. Например:
|
||||||
\begin{Verbatim}
|
\begin{Verbatim}
|
||||||
@@ -1252,7 +1256,7 @@ InaccessibleDirectories=/home
|
|||||||
руководства}.)
|
руководства}.)
|
||||||
|
|
||||||
Фактически, FSNS по множеству параметров превосходят +chroot()+. Скорее всего,
|
Фактически, FSNS по множеству параметров превосходят +chroot()+. Скорее всего,
|
||||||
Avahi и ReltimeKit в ближайшем будущем перейдут с +chroot()+ к использованию
|
Avahi и RealtimeKit в ближайшем будущем перейдут от +chroot()+ к использованию
|
||||||
FSNS.
|
FSNS.
|
||||||
|
|
||||||
Итак, мы рассмотрели вопросы использования chroot для обеспечения безопасности.
|
Итак, мы рассмотрели вопросы использования chroot для обеспечения безопасности.
|
||||||
@@ -1267,7 +1271,7 @@ chroot-окружения, по сути, весьма примитивны: о
|
|||||||
отличается лишь содержимое файловой системы, все остальное у них общее.
|
отличается лишь содержимое файловой системы, все остальное у них общее.
|
||||||
Например, если вы обновляете дистрибутив, установленный в chroot-окружении, и
|
Например, если вы обновляете дистрибутив, установленный в chroot-окружении, и
|
||||||
пост-установочный скрипт пакета отправляет +SIGTERM+ процессу init для его
|
пост-установочный скрипт пакета отправляет +SIGTERM+ процессу init для его
|
||||||
перезапуска\footnote{Прим. перев.: во избежание путаницы отметим, что перезапуск
|
перезапуска\footnote{Прим. перев.: Во избежание путаницы отметим, что перезапуск
|
||||||
процесса init (PID~1) <<на лету>> при получении +SIGTERM+ поддерживается только
|
процесса init (PID~1) <<на лету>> при получении +SIGTERM+ поддерживается только
|
||||||
в systemd, в классическом SysV init такой возможности нет.}, на него среагирует
|
в systemd, в классическом SysV init такой возможности нет.}, на него среагирует
|
||||||
именно хост-система! Кроме того, хост и chroot'нутая система будут иметь общую
|
именно хост-система! Кроме того, хост и chroot'нутая система будут иметь общую
|
||||||
@@ -1288,7 +1292,7 @@ systemd имеет целый ряд возможностей, полезных
|
|||||||
Таким образом, пакетные скрипты смогут включить/отключить запуск <<своих>> служб
|
Таким образом, пакетные скрипты смогут включить/отключить запуск <<своих>> служб
|
||||||
при загрузке (или в других ситуациях), однако команды наподобие
|
при загрузке (или в других ситуациях), однако команды наподобие
|
||||||
+systemctl restart+ (обычно выполняется при обновлении пакета) не~дадут никакого
|
+systemctl restart+ (обычно выполняется при обновлении пакета) не~дадут никакого
|
||||||
эффекта внутри chroot-окружения\footnote{Прим. перев.: автор забывает отметить
|
эффекта внутри chroot-окружения\footnote{Прим. перев.: Автор забывает отметить
|
||||||
не~вполне очевидный момент: такое поведение +systemctl+ проявляется только в
|
не~вполне очевидный момент: такое поведение +systemctl+ проявляется только в
|
||||||
<<мертвых>> окружениях, т.е. в тех, где не~запущен процесс init, и
|
<<мертвых>> окружениях, т.е. в тех, где не~запущен процесс init, и
|
||||||
соответственно отсутствуют управляющие сокеты в +/run/systemd+. Такая ситуация
|
соответственно отсутствуют управляющие сокеты в +/run/systemd+. Такая ситуация
|
||||||
@@ -1304,7 +1308,7 @@ debootstrap/febootstrap. В этом случае возможности +system
|
|||||||
+chroot(1)+~--- она не~только подменяет корневой каталог, но и создает отдельные
|
+chroot(1)+~--- она не~только подменяет корневой каталог, но и создает отдельные
|
||||||
пространства имен для дерева файловых систем (FSNS) и для идентификаторов
|
пространства имен для дерева файловых систем (FSNS) и для идентификаторов
|
||||||
процессов (PID NS), предоставляя легковесную реализацию системного
|
процессов (PID NS), предоставляя легковесную реализацию системного
|
||||||
контейнера\footnote{Прим. перев.: используемые в +systemd-nspawn+ механизмы
|
контейнера\footnote{Прим. перев.: Используемые в +systemd-nspawn+ механизмы
|
||||||
ядра Linux, такие, как FS NS и PID NS, также лежат в основе
|
ядра Linux, такие, как FS NS и PID NS, также лежат в основе
|
||||||
\href{http://lxc.sourceforge.net/}{LXC}, системы контейнерной изоляции для
|
\href{http://lxc.sourceforge.net/}{LXC}, системы контейнерной изоляции для
|
||||||
Linux, которая позиционируется как современная альтернатива классическому
|
Linux, которая позиционируется как современная альтернатива классическому
|
||||||
@@ -1323,7 +1327,7 @@ Linux, которая позиционируется как современна
|
|||||||
ему в штатном режиме. Также, в отличие от +chroot(1)+, внутри окружения
|
ему в штатном режиме. Также, в отличие от +chroot(1)+, внутри окружения
|
||||||
будут автоматически смонтированы +/proc+ и +/sys+.
|
будут автоматически смонтированы +/proc+ и +/sys+.
|
||||||
|
|
||||||
Следующий пример иллюстрирует возможность запустить Debian в на Fedora-хосте
|
Следующий пример иллюстрирует возможность запустить Debian на Fedora-хосте
|
||||||
всего тремя командами:
|
всего тремя командами:
|
||||||
\begin{Verbatim}
|
\begin{Verbatim}
|
||||||
# yum install debootstrap
|
# yum install debootstrap
|
||||||
@@ -1342,15 +1346,18 @@ Linux, которая позиционируется как современна
|
|||||||
После быстрой загрузки вы получите приглашение оболочки, запущенной внутри
|
После быстрой загрузки вы получите приглашение оболочки, запущенной внутри
|
||||||
полноценной ОС, функционирующей в контейнере. Изнутри контейнера невозможно
|
полноценной ОС, функционирующей в контейнере. Изнутри контейнера невозможно
|
||||||
увидеть процессы, которые находятся вне его. Контейнер сможет пользоваться сетью
|
увидеть процессы, которые находятся вне его. Контейнер сможет пользоваться сетью
|
||||||
хоста, однако не~имеет возможности изменить ее настройки (это может привести к
|
хоста\footnote{Прим. перев.: Впоследствии в +systemd-nspawn+ была добавлена
|
||||||
серии ошибок в процессе загрузки гостевой ОС, но ни~одна из этих ошибок
|
опция +--private-network+, изолирующая систему внутри контейнера от сети хоста:
|
||||||
не~должна быть критической). Контейнер получает доступ к +/sys+ и +/proc/sys+,
|
такая система будет видеть только свой собственный интерфейс обратной петли.},
|
||||||
однако, во избежание вмешательства контейнера в конфигурацию ядра и аппаратного
|
однако не~имеет возможности изменить ее настройки (это может привести к серии
|
||||||
обеспечения хоста, эти каталоги будут смонтированы только для чтения. Обратите
|
ошибок в процессе загрузки гостевой ОС, но ни~одна из этих ошибок не~должна быть
|
||||||
внимание, что эта защита блокирует лишь \emph{случайные}, \emph{непредвиденные}
|
критической). Контейнер получает доступ к +/sys+ и +/proc/sys+, однако, во
|
||||||
попытки изменения параметров. При необходимости, процесс внутри контейнера,
|
избежание вмешательства контейнера в конфигурацию ядра и аппаратного обеспечения
|
||||||
обладающий достаточными полномочиями, сможет перемонтировать эти файловые
|
хоста, эти каталоги будут смонтированы только для чтения. Обратите внимание, что
|
||||||
системы в режиме чтения-записи.
|
эта защита блокирует лишь \emph{случайные}, \emph{непредвиденные} попытки
|
||||||
|
изменения параметров. При необходимости, процесс внутри контейнера, обладающий
|
||||||
|
достаточными полномочиями, сможет перемонтировать эти файловые системы в режиме
|
||||||
|
чтения-записи.
|
||||||
|
|
||||||
Итак, что же такого хорошего в +systemd-nspawn+?
|
Итак, что же такого хорошего в +systemd-nspawn+?
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
@@ -1500,41 +1507,40 @@ $ systemd-analyze blame
|
|||||||
|
|
||||||
Но почему эта служба вообще присутствует в нашем процессе загрузки? На самом
|
Но почему эта служба вообще присутствует в нашем процессе загрузки? На самом
|
||||||
деле, мы можем прекрасно обойтись и без нее. Она нужна лишь как часть
|
деле, мы можем прекрасно обойтись и без нее. Она нужна лишь как часть
|
||||||
используемой в Fedora схемы инициализации устройств хранения, а именно,
|
используемой в Fedora схемы инициализации устройств хранения, а именно, набора
|
||||||
набора скриптов, выполняющих настройку LVM, RAID и multipath-устройств. На
|
скриптов, выполняющих настройку LVM, RAID и multipath-устройств. На сегодняшний
|
||||||
сегодняшний день, реализация этих систем не~поддерживает собственного механизма
|
день, реализация этих систем не~поддерживает собственного механизма поиска и
|
||||||
поиска и опроса устройств, и поэтому их запуск должен производиться только после
|
опроса устройств, и поэтому их запуск должен производиться только после того,
|
||||||
того, как эта работа уже проделана~--- тогда они могут просто последовательно
|
как эта работа уже проделана~--- тогда они могут просто последовательно
|
||||||
перебирать все диски. Однако, такой подход противоречит одному из
|
перебирать все диски. Однако, такой подход противоречит одному из
|
||||||
фундаментальных требований к современным компьютерам:
|
фундаментальных требований к современным компьютерам: возможности подключать и
|
||||||
возможности подключать и отключать оборудование в любой момент, как при
|
отключать оборудование в любой момент, как при выключенном компьютере, так и при
|
||||||
выключенном компьютере, так и при включенном. Для некоторых
|
включенном. Для некоторых технологий невозможно точно определить момент
|
||||||
технологий невозможно точно определить момент завершения формирования списка устройств
|
завершения формирования списка устройств (например, это характерно для USB и
|
||||||
(например, это характерно для USB и iSCSI), и поэтому процесс опроса
|
iSCSI), и поэтому процесс опроса таких устройств обязательно должен включать
|
||||||
таких устройств обязательно должен включать некоторую фиксированную задержку,
|
некоторую фиксированную задержку, гарантирующую, что все подключенные устройства
|
||||||
гарантирующую, что все подключенные устройства успеют отозваться. С точки зрения
|
успеют отозваться. С точки зрения скорости загрузки это, безусловно, негативный
|
||||||
скорости загрузки это, безусловно, негативный эффект: соответствующие скрипты
|
эффект: соответствующие скрипты заставляют нас ожидать завершения опроса
|
||||||
заставляют нас ожидать завершения опроса устройств, хотя большинство этих
|
устройств, хотя большинство этих устройств не~являются необходимыми на данной
|
||||||
устройств не~являются необходимыми на данной стадии загрузки. В частности, в
|
стадии загрузки. В частности, в рассматриваемой нами системе LVM, RAID и
|
||||||
рассматриваемой нами системе LVM, RAID и multipath вообще
|
multipath вообще не~используются!\footnote{Наиболее правильным решением в данном
|
||||||
не~используются!\footnote{Наиболее правильным решением в данном случае будет
|
случае будет ожидание событий подключения устройств (реализованное через libudev
|
||||||
ожидание событий подключения устройств (реализованное через libudev или
|
или аналогичную технологию) с соответствующей обработкой каждого такого
|
||||||
аналогичную технологию) с соответствующей обработкой каждого такого события~---
|
события~--- подобный подход позволит нам продолжить загрузку, как только будут
|
||||||
подобный подход позволит нам продолжить загрузку, как только будут готовы все
|
готовы все устройства, необходимые для ее продолжения. Для того, чтобы загрузка
|
||||||
устройства, необходимые для ее продолжения. Для того, чтобы загрузка была
|
была быстрой, мы должны ожидать завершения инициализации только тех устройств,
|
||||||
быстрой, мы должны ожидать завершения инициализации только тех устройств, которые
|
которые \emph{действительно} необходимы для ее продолжения на данной стадии.
|
||||||
\emph{действительно} необходимы для ее продолжения на данной стадии. Ожидать
|
Ожидать остальные устройства в данном случае смысла нет. Кроме того, стоит
|
||||||
остальные устройства в данном случае смысла нет. Кроме того, стоит отметить, что
|
отметить, что в числе программ, не~приспособленных для работы с динамически
|
||||||
в числе программ, не~приспособленных для работы с динамически меняющимся
|
меняющимся оборудованием и построенных в предположении о неизменности списка
|
||||||
оборудованием и построенных в предположении о неизменности списка устройств,
|
устройств, кроме служб хранения, есть и другие подсистемы. Например, в нашем
|
||||||
кроме служб хранения, есть и другие подсистемы. Например, в нашем случае работа
|
случае работа initrd занимает так много времени главным образом из-за того, что
|
||||||
initrd занимает так много времени главным образом из-за того, что для запуска
|
для запуска Plymouth необходимо дождаться завершения инициализации всех
|
||||||
Plymouth необходимо дождаться завершения инициализации всех устройств
|
устройств видеовывода. По неизвестной причине (во всяком случае, неизвестной для
|
||||||
видеовывода. По неизвестной причине (во всяком случае, неизвестной для меня)
|
меня) подгрузка модулей для моих видеокарт Intel занимает довольно
|
||||||
подгрузка модулей для моих видеокарт Intel занимает довольно продолжительное
|
продолжительное время, что приводит к беспричинной задержке процесса загрузки.
|
||||||
время, что приводит к беспричинной задержке процесса загрузки. (Нет, я протестую
|
(Нет, я возражаю не~против опроса устройств как такового, но против
|
||||||
не~против опроса устройств, но против необходимости ожидать его завершения, чтобы
|
необходимости ожидать его завершения, чтобы продолжить загрузку.)}
|
||||||
продолжить загрузку.)}
|
|
||||||
|
|
||||||
С учетом вышесказанного, мы можем спокойно исключить +udev-settle.service+ из
|
С учетом вышесказанного, мы можем спокойно исключить +udev-settle.service+ из
|
||||||
нашего процесса загрузки, так как мы не~используем ни~LVM, ни~RAID,
|
нашего процесса загрузки, так как мы не~используем ни~LVM, ни~RAID,
|
||||||
@@ -1549,8 +1555,8 @@ Plymouth необходимо дождаться завершения иници
|
|||||||
После перезагрузки мы видим, что загрузка стала на одну секунду быстрее. Но
|
После перезагрузки мы видим, что загрузка стала на одну секунду быстрее. Но
|
||||||
почему выигрыш оказался таким маленьким? Из-за второго осквернителя нашей
|
почему выигрыш оказался таким маленьким? Из-за второго осквернителя нашей
|
||||||
загрузки~--- cryptsetup. На рассматриваемой нами системе зашифрован раздел
|
загрузки~--- cryptsetup. На рассматриваемой нами системе зашифрован раздел
|
||||||
+/home+. Специально для тестирования я записал пароль в файл, чтобы исключить
|
+/home+. Специально для нашего тестирования я записал пароль в файл, чтобы
|
||||||
влияние скорости ручного набора пароля. К сожалению, для подключения
|
исключить влияние скорости ручного набора пароля. К сожалению, для подключения
|
||||||
шифрованного раздела cryptsetup требует более пяти секунд. Будем ленивы, и
|
шифрованного раздела cryptsetup требует более пяти секунд. Будем ленивы, и
|
||||||
вместо того, чтобы исправлять ошибку в cryptsetup\footnote{На самом деле, я
|
вместо того, чтобы исправлять ошибку в cryptsetup\footnote{На самом деле, я
|
||||||
действительно пытался исправить эту ошибку. Задержки в cryptsetup, по
|
действительно пытался исправить эту ошибку. Задержки в cryptsetup, по
|
||||||
@@ -1567,7 +1573,7 @@ cryptsetup, что снижение этого времени с 1 секунд
|
|||||||
может продолжить загрузку и приступить к запуску служб. Но первое обращение
|
может продолжить загрузку и приступить к запуску служб. Но первое обращение
|
||||||
к +/home+ (в отличие, например, от +/var+), происходит на поздней стадии
|
к +/home+ (в отличие, например, от +/var+), происходит на поздней стадии
|
||||||
процесса загрузки (когда пользователь входит в систему). Следовательно, нам
|
процесса загрузки (когда пользователь входит в систему). Следовательно, нам
|
||||||
нужно сделать так, чтобы этот каталога автоматически монтировался при загрузке,
|
нужно сделать так, чтобы этот каталог автоматически монтировался при загрузке,
|
||||||
но процесс загрузки не~ожидал завершения работы +cryptsetup+, +fsck+ и +mount+
|
но процесс загрузки не~ожидал завершения работы +cryptsetup+, +fsck+ и +mount+
|
||||||
для этого раздела. Как же сделать точку монтирования доступной, не~ожидая, пока
|
для этого раздела. Как же сделать точку монтирования доступной, не~ожидая, пока
|
||||||
завершится процесс монтирования? Этого можно достичь, воспользовавшись
|
завершится процесс монтирования? Этого можно достичь, воспользовавшись
|
||||||
@@ -1737,7 +1743,7 @@ LVM, RAID и multipath). Если они вам не~нужны, вы легко
|
|||||||
конфигурация общесистемной локали.
|
конфигурация общесистемной локали.
|
||||||
\item
|
\item
|
||||||
\hreftt{http://0pointer.de/public/systemd-man/modules-load.d.html}{/etc/modules-load.d/*.conf}:
|
\hreftt{http://0pointer.de/public/systemd-man/modules-load.d.html}{/etc/modules-load.d/*.conf}:
|
||||||
каталог\footnote{Прим. перев.: для описания этого и трех
|
каталог\footnote{Прим. перев.: Для описания этого и трех
|
||||||
последующих каталогов автор пользуется термином <<drop-in
|
последующих каталогов автор пользуется термином <<drop-in
|
||||||
directory>>. Этот термин означает каталог, в который можно
|
directory>>. Этот термин означает каталог, в который можно
|
||||||
поместить множество независимых файлов настроек, и при чтении
|
поместить множество независимых файлов настроек, и при чтении
|
||||||
@@ -1791,8 +1797,8 @@ LVM, RAID и multipath). Если они вам не~нужны, вы легко
|
|||||||
наличия уникального и постоянного идентификатора компьютера.
|
наличия уникального и постоянного идентификатора компьютера.
|
||||||
\item
|
\item
|
||||||
\hreftt{http://0pointer.de/public/systemd-man/machine-info.html}{/etc/machine-info}:
|
\hreftt{http://0pointer.de/public/systemd-man/machine-info.html}{/etc/machine-info}:
|
||||||
новый конфигурационный файл, хранящий информации о полном имени
|
новый конфигурационный файл, хранящий информации о полном
|
||||||
(описательном) хоста (например, <<Компьютер Леннарта>>) и
|
(описательном) имени хоста (например, <<Компьютер Леннарта>>) и
|
||||||
значке, которым он будет обозначаться в графических оболочках,
|
значке, которым он будет обозначаться в графических оболочках,
|
||||||
работающих с сетью (раньше этот значок мог определяться,
|
работающих с сетью (раньше этот значок мог определяться,
|
||||||
например, файлом +/etc/favicon.png+). Данный конфигурационный
|
например, файлом +/etc/favicon.png+). Данный конфигурационный
|
||||||
@@ -1809,18 +1815,18 @@ LVM, RAID и multipath). Если они вам не~нужны, вы легко
|
|||||||
момент эти файлы полностью поддерживаются только дистрибутивами, основанными на
|
момент эти файлы полностью поддерживаются только дистрибутивами, основанными на
|
||||||
systemd, но уже сейчас в их число входят практически все ключевые дистрибутивы,
|
systemd, но уже сейчас в их число входят практически все ключевые дистрибутивы,
|
||||||
\href{http://www.ubuntu.com/}{за исключением
|
\href{http://www.ubuntu.com/}{за исключением
|
||||||
одного}\footnote{Прим. перев.: в конце 2010~года энтузиаст Andrew Edmunds
|
одного}\footnote{Прим. перев.: В конце 2010~года энтузиаст Andrew Edmunds
|
||||||
\href{http://cgit.freedesktop.org/systemd/commit/?id=858dae181bb5461201ac1c04732d3ef4c67a0256}{добавил}
|
\href{http://cgit.freedesktop.org/systemd/commit/?id=858dae181bb5461201ac1c04732d3ef4c67a0256}{добавил}
|
||||||
в systemd базовую поддержку Ubuntu и
|
в systemd базовую поддержку Ubuntu и
|
||||||
\href{https://wiki.ubuntu.com/systemd}{подготовил} соответствующие пакеты,
|
\href{https://wiki.ubuntu.com/systemd}{подготовил} соответствующие пакеты,
|
||||||
однако его инициатива не~встретила поддержки среди менеджеров Canonical. На
|
однако его инициатива не~встретила поддержки среди менеджеров Canonical. На
|
||||||
момент написания этих строк (май 2011 года) проект остается заброшенным уже пять
|
момент написания этих строк (май 2011 года) проект остается заброшенным уже пять
|
||||||
месяцев (с середины декабря 2010~г.).}. В этом есть что-то от <<пролемы курицы и
|
месяцев (с середины декабря 2010~г.).}. В этом есть что-то от <<проблемы курицы
|
||||||
яйца>>: стандарт становится начинает работать как стандарт только тогда, когда
|
и яйца>>: стандарт становится настоящим стандартом только тогда, когда ему
|
||||||
ему начинают следовать. В будущем мы намерены аккуратно форсировать процесс
|
начинают следовать. В будущем мы намерены аккуратно форсировать процесс перехода
|
||||||
перехода на новые конфигурационные файлы: поддержка старых файлов будет удалена
|
на новые конфигурационные файлы: поддержка старых файлов будет удалена из
|
||||||
из systemd. Разумеется, этот процесс будет идти медленно, шаг за шагом. Но
|
systemd. Разумеется, этот процесс будет идти медленно, шаг за шагом. Но конечной
|
||||||
конечной его целью является переход всех дистрибутивов на единый набор базовых
|
его целью является переход всех дистрибутивов на единый набор базовых
|
||||||
конфигурационных файлов.
|
конфигурационных файлов.
|
||||||
|
|
||||||
Многие из этих файлов используются не~только программами для настройки системы,
|
Многие из этих файлов используются не~только программами для настройки системы,
|
||||||
@@ -1847,7 +1853,7 @@ shell-скриптов, выполняющих тривиальные задач
|
|||||||
выбрали то, что должно устроить большинство людей. Форматы конфигурационных
|
выбрали то, что должно устроить большинство людей. Форматы конфигурационных
|
||||||
файлов максимально просты, и их можно легко читать и записывать даже из
|
файлов максимально просты, и их можно легко читать и записывать даже из
|
||||||
shell-скриптов. Да, +/etc/bikeshed.conf+ могло бы быть неплохим именем
|
shell-скриптов. Да, +/etc/bikeshed.conf+ могло бы быть неплохим именем
|
||||||
для файла конфигурации!\footnote{Прим. перев.: здесь автор намекает на
|
для файла конфигурации!\footnote{Прим. перев.: Здесь автор намекает на
|
||||||
\href{http://en.wikipedia.org/wiki/Parkinson's_Law_of_Triviality}{Паркинсоновский
|
\href{http://en.wikipedia.org/wiki/Parkinson's_Law_of_Triviality}{Паркинсоновский
|
||||||
Закон Тривиальности}, который гласит, что самые жаркие споры возникают вокруг
|
Закон Тривиальности}, который гласит, что самые жаркие споры возникают вокруг
|
||||||
наиболее простых вопросов. В частности, в качестве примера Паркинсон приводит
|
наиболее простых вопросов. В частности, в качестве примера Паркинсон приводит
|
||||||
@@ -1887,7 +1893,7 @@ shed)~--- если первое из этих решений принимает
|
|||||||
зоопарк их различных реализаций в разных дистрибутивах.
|
зоопарк их различных реализаций в разных дистрибутивах.
|
||||||
|
|
||||||
Назначение этих каталогов определено весьма расплывчато. Абсолютное большинство
|
Назначение этих каталогов определено весьма расплывчато. Абсолютное большинство
|
||||||
находящихся в них файлов являются включаемыми\footnote{Прим. перев.: здесь автор
|
находящихся в них файлов являются включаемыми\footnote{Прим. перев.: Здесь автор
|
||||||
использует термин sourcable, происходящий от bash'овской директивы +source+,
|
использует термин sourcable, происходящий от bash'овской директивы +source+,
|
||||||
обеспечивающей включение в скрипт кода из внешнего файла. В классическом POSIX
|
обеспечивающей включение в скрипт кода из внешнего файла. В классическом POSIX
|
||||||
shell это соответствует оператору-точке <<+.+>>. В отличие от прямого запуска
|
shell это соответствует оператору-точке <<+.+>>. В отличие от прямого запуска
|
||||||
@@ -1927,7 +1933,7 @@ init-скрипта, или даже сами не~являющиеся скри
|
|||||||
\item Режим остановки для демона.
|
\item Режим остановки для демона.
|
||||||
\item Общесистемные настройки, например, системная локаль, часовой пояс,
|
\item Общесистемные настройки, например, системная локаль, часовой пояс,
|
||||||
параметры клавиатуры для консоли.
|
параметры клавиатуры для консоли.
|
||||||
\item Избыточные информация о системных настройках, например, указание,
|
\item Избыточная информация о системных настройках, например, указание,
|
||||||
установлены ли аппаратные часы по Гринвичу или по местному
|
установлены ли аппаратные часы по Гринвичу или по местному
|
||||||
времени.
|
времени.
|
||||||
\item Списки правил брандмауэра, не~являются скриптами (!).
|
\item Списки правил брандмауэра, не~являются скриптами (!).
|
||||||
@@ -2056,11 +2062,13 @@ systemd?
|
|||||||
Одно из немногих исключений из этого правила~--- к сожалению, в
|
Одно из немногих исключений из этого правила~--- к сожалению, в
|
||||||
настоящее время не~поддерживается автоматическая загрузка
|
настоящее время не~поддерживается автоматическая загрузка
|
||||||
модулей на основании информации о возможностях процессора,
|
модулей на основании информации о возможностях процессора,
|
||||||
однако это будет исправлено в ближайшем будущем. В случае, если
|
однако это будет исправлено в ближайшем будущем\footnote{Прим.
|
||||||
нужный вам модуль ядра все же не~может быть подгружен
|
перев.: Патчи от разработчиков systemd уже приняты в ядро, и
|
||||||
автоматически, все равно существует гораздо более удобные методы
|
соответствующая функция поддерживается Linux, начиная с версии
|
||||||
указать его принудительную подгрузку~--- например, создав
|
3.3.}. В случае, если нужный вам модуль ядра все же не~может
|
||||||
соответствующий файл в каталоге
|
быть подгружен автоматически, все равно существует гораздо более
|
||||||
|
удобные методы указать его принудительную подгрузку~---
|
||||||
|
например, путем создания соответствующего файла в каталоге
|
||||||
\hreftt{http://0pointer.de/public/systemd-man/modules-load.d.html}{/etc/modules-load.d/}
|
\hreftt{http://0pointer.de/public/systemd-man/modules-load.d.html}{/etc/modules-load.d/}
|
||||||
(стандартный метод настройки принудительной подгрузки модулей).
|
(стандартный метод настройки принудительной подгрузки модулей).
|
||||||
\item И наконец, хотелось бы отметить, что каталог +/etc+ определен как
|
\item И наконец, хотелось бы отметить, что каталог +/etc+ определен как
|
||||||
@@ -2091,16 +2099,16 @@ systemd?
|
|||||||
\item Найдите для них более подходящее место. Например, в случае с
|
\item Найдите для них более подходящее место. Например, в случае с
|
||||||
некоторыми общесистемными настройками (такими, как локаль или
|
некоторыми общесистемными настройками (такими, как локаль или
|
||||||
часовой пояс), мы надеемся аккуратно подтолкнуть дистрибутивы в
|
часовой пояс), мы надеемся аккуратно подтолкнуть дистрибутивы в
|
||||||
правильно направлении (см. предыдущий эпизод).
|
правильно направлении (см. предыдущую главу).
|
||||||
\item Добавьте их поддержку в штатную систему настройки демона через
|
\item Добавьте их поддержку в штатную систему настройки демона через
|
||||||
собственные файлы конфигурации. К счастью, большинство служб,
|
собственные файлы конфигурации. К счастью, большинство служб,
|
||||||
работающих в Linux, являются свободным программным обеспечением,
|
работающих в Linux, являются свободным программным обеспечением,
|
||||||
так что сделать это довольно просто.
|
так что сделать это довольно просто.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
Существует лишь одна причина поддерживать эти файлы еще некоторое
|
Существует лишь одна причина поддерживать файлы +/etc/sysconfig+ еще некоторое
|
||||||
время: необходимо обеспечить совместимость при обновлении. Тем не~менее, как
|
время: необходимо обеспечить совместимость при обновлении. Тем не~менее, как
|
||||||
минимум в новых пакетах, от этих файлов лучше отказаться.
|
минимум в новых пакетах, от таких файлов лучше отказаться.
|
||||||
|
|
||||||
Если требование совместимости критично, вы можете задействовать эти
|
Если требование совместимости критично, вы можете задействовать эти
|
||||||
конфигурационные файлы даже в том случае, если настраиваете службы через
|
конфигурационные файлы даже в том случае, если настраиваете службы через
|
||||||
@@ -2143,7 +2151,15 @@ systemd?
|
|||||||
\emph{foobar}~--- строка, идентифицирующая службу (проще говоря, ее имя), а
|
\emph{foobar}~--- строка, идентифицирующая службу (проще говоря, ее имя), а
|
||||||
+.service+~--- суффикс, присутствующий в именах всех файлов конфигурации служб.
|
+.service+~--- суффикс, присутствующий в именах всех файлов конфигурации служб.
|
||||||
Сами эти файлы могут находиться в каталогах +/etc/systemd/systemd+ и
|
Сами эти файлы могут находиться в каталогах +/etc/systemd/systemd+ и
|
||||||
+/lib/systemd/system+ (а также, возможно, и в других). Для служб, работающих в
|
+/lib/systemd/system+ (а также, возможно, и в других\footnote{Прим. перев.: В
|
||||||
|
качестве <<других>> каталогов, в которых выполняется поиск юнит-файлов, можно
|
||||||
|
упомянуть +/run/systemd/system+, в который помещаются временные файлы
|
||||||
|
конфигурации, созданные администратором или программами-генераторами и
|
||||||
|
действующие только текущем сеансе, и +/usr/lib/systemd/system+, в котором
|
||||||
|
находятся юнит-файлы для обычных служб, запускаемых на поздних стадиях загрузки
|
||||||
|
(то время, как в упомянутом каталоге +/lib/systemd/system+ находятся файлы
|
||||||
|
конфигурации ключевых системных юнитов, которые требуются на раннем этапе
|
||||||
|
загрузки, до монтирования +/usr+).}). Для служб, работающих в
|
||||||
нескольких экземплярах, эта схема становится немного сложнее:
|
нескольких экземплярах, эта схема становится немного сложнее:
|
||||||
\emph{foobar}+@+\emph{quux}+.service+, где \emph{foobar}~--- имя службы,
|
\emph{foobar}+@+\emph{quux}+.service+, где \emph{foobar}~--- имя службы,
|
||||||
общее для всех экземпляров, а \emph{quux}~--- идентификатор конкретного
|
общее для всех экземпляров, а \emph{quux}~--- идентификатор конкретного
|
||||||
@@ -2190,7 +2206,7 @@ RestartSec=0
|
|||||||
нем используются спецификаторы \%I и \%i. В момент загрузки юнита, systemd
|
нем используются спецификаторы \%I и \%i. В момент загрузки юнита, systemd
|
||||||
заменяет эти спецификаторы на идентификатор экземпляра службы. В нашем случае,
|
заменяет эти спецификаторы на идентификатор экземпляра службы. В нашем случае,
|
||||||
при обращении к экземпляру +serial-getty@ttyUSB0.service+, они заменяются на
|
при обращении к экземпляру +serial-getty@ttyUSB0.service+, они заменяются на
|
||||||
<<+ttyUSB0+>>. Результат этой замены можно проверить, например, запросив
|
<<+ttyUSB0+>>. Результат такой замены можно проверить, например, запросив
|
||||||
состояние для этой службы:
|
состояние для этой службы:
|
||||||
\begin{Verbatim}[commandchars=\\\{\}]
|
\begin{Verbatim}[commandchars=\\\{\}]
|
||||||
$ systemctl status serial-getty@ttyUSB0.service
|
$ systemctl status serial-getty@ttyUSB0.service
|
||||||
@@ -2234,21 +2250,21 @@ systemd и заложен предварительный поиск файла
|
|||||||
В приведенном выше файле, в некоторых местах используется спецификатор +%I+, а
|
В приведенном выше файле, в некоторых местах используется спецификатор +%I+, а
|
||||||
в других~--- +%i+. У вас может возникнуть закономерный вопрос~--- чем они
|
в других~--- +%i+. У вас может возникнуть закономерный вопрос~--- чем они
|
||||||
отличаются? +%i+ всегда точно соответствует идентификатору экземпляра, в то
|
отличаются? +%i+ всегда точно соответствует идентификатору экземпляра, в то
|
||||||
время, как +%I+ соответствует экранированной (escaped) версии этого
|
время, как +%I+ соответствует неэкранированной (unescaped) версии этого
|
||||||
идентификатора. Когда идентификатор не~содержит спецсимволов (например,
|
идентификатора. Когда идентификатор не~содержит спецсимволов (например,
|
||||||
+ttyUSB0+). Но имена устройств, например, содержат слеши (<</>>), которые
|
+ttyUSB0+), результат в обоих случаях одинаковый. Но имена устройств, например,
|
||||||
не~могут присутствовать в имени юнита (и в имени файла на Unix). Поэтому, перед
|
содержат слеши (<</>>), которые не~могут присутствовать в имени юнита (и в имени
|
||||||
использованием такого имени в качестве идентификатора устройства, оно должно
|
файла на Unix). Поэтому, перед использованием такого имени в качестве
|
||||||
быть экранировано~--- <</>> заменяются на <<->>, а большинство других
|
идентификатора устройства, оно должно быть экранировано~--- <</>> заменяются на
|
||||||
специальных символов (включая <<->>) заменяются последовательностями вида
|
<<->>, а большинство других специальных символов (включая <<->>) заменяются
|
||||||
+\xAB+, где AB~--- ASCII-код символа, записанный в шестнадцатеричной системе
|
последовательностями вида +\xAB+, где AB~--- ASCII-код символа, записанный в
|
||||||
счисления\footnote{Согласен, этот алгоритм дает на выходе не~очень читабельный
|
шестнадцатеричной системе счисления\footnote{Согласен, этот алгоритм дает на
|
||||||
результат. Но этим грешат практически все алгоритмы экранирования. В данном
|
выходе не~очень читабельный результат. Но этим грешат практически все алгоритмы
|
||||||
случае, были использован механизм экранирования из udev, с одним изменением. В
|
экранирования. В данном случае, был использован механизм экранирования из udev,
|
||||||
конце концов, нам нужно было выбрать что-то. Если вы собираетесь комментировать
|
с одним изменением. В конце концов, нам нужно было выбрать что-то. Если вы
|
||||||
наш алгоритм экранирования~--- пожалуйста, оставьте свой адрес, чтобы я
|
собираетесь комментировать наш алгоритм экранирования~--- пожалуйста, оставьте
|
||||||
мог приехать к вам и раскрасить ваш сарай для велосипедов в синий с желтыми
|
свой адрес, чтобы я мог приехать к вам и раскрасить ваш сарай для велосипедов в
|
||||||
полосами. Спасибо!}. Например, чтобы обратиться
|
синий с желтыми полосами. Спасибо!}. Например, чтобы обратиться к
|
||||||
последовательному USB-порту по его адресу на шине, нам нужно использовать имя
|
последовательному USB-порту по его адресу на шине, нам нужно использовать имя
|
||||||
наподобие +serial/by-path/pci-0000:00:1d.0-usb-0:1.4:1.1-port0+. Экранированная
|
наподобие +serial/by-path/pci-0000:00:1d.0-usb-0:1.4:1.1-port0+. Экранированная
|
||||||
версия этого имени~---
|
версия этого имени~---
|
||||||
@@ -2260,7 +2276,12 @@ systemd и заложен предварительный поиск файла
|
|||||||
спецификатор используется для ссылки на юнит +dev-%i.device+, соответствующий
|
спецификатор используется для ссылки на юнит +dev-%i.device+, соответствующий
|
||||||
одноименному устройству). В то время как +%I+ удобно использовать в командной
|
одноименному устройству). В то время как +%I+ удобно использовать в командной
|
||||||
строке (+ExecStart+) и для формирования читабельных строк описания. Рассмотрим
|
строке (+ExecStart+) и для формирования читабельных строк описания. Рассмотрим
|
||||||
работу этих принципов на примере нашего юнит-файла:
|
работу этих принципов на примере нашего юнит-файла\footnote{Прим. перев.: как
|
||||||
|
видно из нижеприведенного примера, в командной строке +systemctl+ необходимо
|
||||||
|
указывать экранированное имя юнита, что создает определенные трудности даже при
|
||||||
|
наличии в оболочке <<умного>> автодополнения. Однако, на момент написания этих
|
||||||
|
строк, в TODO проекта содержится пункт о добавлении в systemctl поддержки
|
||||||
|
неэкранированных имен юнитов.}:
|
||||||
\begin{landscape}
|
\begin{landscape}
|
||||||
\begin{Verbatim}[fontsize=\small,commandchars=|\{\}]
|
\begin{Verbatim}[fontsize=\small,commandchars=|\{\}]
|
||||||
# systemctl start 'serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.service'
|
# systemctl start 'serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.service'
|
||||||
@@ -2275,7 +2296,7 @@ serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.
|
|||||||
\end{landscape}
|
\end{landscape}
|
||||||
Как видите, в качестве идентификатора экземпляра используется экранированная
|
Как видите, в качестве идентификатора экземпляра используется экранированная
|
||||||
версия, в то время как в строке описания и в командной строке +getty+
|
версия, в то время как в строке описания и в командной строке +getty+
|
||||||
используется неэкранированная версия. Как и предполагалось.
|
фигурирует неэкранированный вариант, как и предполагалось.
|
||||||
|
|
||||||
(Небольшое замечание: помимо +%i+ и +%I+, существует еще несколько
|
(Небольшое замечание: помимо +%i+ и +%I+, существует еще несколько
|
||||||
спецификаторов, и большинство из них доступно и в обычных файлах конфигурации
|
спецификаторов, и большинство из них доступно и в обычных файлах конфигурации
|
||||||
@@ -2290,32 +2311,32 @@ serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.
|
|||||||
преобразовать SysV init-скрипт в юнит-файл systemd. В этой главе мы рассмотрим,
|
преобразовать SysV init-скрипт в юнит-файл systemd. В этой главе мы рассмотрим,
|
||||||
как провести аналогичное преобразование для служб inetd.
|
как провести аналогичное преобразование для служб inetd.
|
||||||
|
|
||||||
Начнем с небольшого экскурса в историю вопроса. По давно устоявшейся традиции,
|
Начнем с небольшого экскурса в историю вопроса. Уже многие годы
|
||||||
inetd считается одной из базовых служб Unix-систем. Работая как суперсервер, он
|
inetd считается одной из базовых служб Unix-систем. Работая как суперсервер, он
|
||||||
слушает сетевые сокеты от имени различных служб, и активирует соответствующие
|
слушает сетевые сокеты от имени различных служб, и активирует соответствующие
|
||||||
службы при поступлении на эти сокеты входящих соединений. Таким образом, он
|
службы при поступлении на эти сокеты входящих соединений. Таким образом, он
|
||||||
обеспечивает механизм активации по запросу (on-demand activation). Подобный
|
обеспечивает механизм активации по запросу (on-demand activation). Подобный
|
||||||
подход избавляет от необходимости держать постоянно работающими все серверные
|
подход избавляет от необходимости держать постоянно работающими все серверные
|
||||||
процессы, что позволяет поддерживать множество служб даже на системах с очень
|
процессы, что позволяет поддерживать множество служб даже на системах с очень
|
||||||
ограниченными ресурсами. На протяжении многих лет, дистрибутивы Linux
|
ограниченными ресурсами. В дистрибутивах Linux можно встретить
|
||||||
поставляются с различными реализациями inetd. Наиболее популярные из них~--- BSD
|
несколько различных реализаций inetd. Наиболее популярные из них~--- BSD
|
||||||
inetd и xinetd. Хотя inetd во многих дистрибутивах до сих пор устанавливается по
|
inetd и xinetd. Хотя inetd во многих дистрибутивах до сих пор устанавливается по
|
||||||
умолчанию, сейчас уже он редко используется для запуска сетевых служб~--- теперь
|
умолчанию, сейчас он уже редко используется для запуска сетевых служб~--- теперь
|
||||||
большинство из них запускаются автономно при загрузке системы (основной
|
большинство из них запускаются автономно при загрузке системы (основной
|
||||||
аргумент в пользу такой схемы~--- она позволяет обеспечить более высокую
|
аргумент в пользу такой схемы~--- она позволяет обеспечить более высокую
|
||||||
производительность служб).
|
производительность служб).
|
||||||
|
|
||||||
Одной из ключевых возможностей systemd (а также launchd от Apple) является
|
Одной из ключевых возможностей systemd (а также launchd от Apple) является
|
||||||
сокет-активация~--- тот самый механизм, давным-давно реализованный inetd,
|
сокет-активация~--- тот же самый механизм, давным-давно реализованный inetd,
|
||||||
однако в данном случае ключевые цели немного другие. Сокет-активация в стиле
|
однако в данном случае ключевые цели немного другие. Сокет-активация в стиле
|
||||||
systemd прежде всего ориентирована на локальные сокеты (+AF_UNIX+), хотя
|
systemd прежде всего ориентирована на локальные сокеты (+AF_UNIX+), хотя
|
||||||
поддерживаются также и сетевые сокеты (+AF_INET+). И более важное отличие~---
|
поддерживаются также и сетевые сокеты (+AF_INET+). И более важное отличие~---
|
||||||
сокет-активация в systemd обеспечивает не~только экономию системных ресурсов,
|
сокет-активация в systemd обеспечивает не~только экономию системных ресурсов,
|
||||||
но также и эффективную параллелизацию работы (так как она
|
но также и эффективную параллелизацию работы (так как она позволяет запускать
|
||||||
позволяет запускать клиентов и серверы одновременно, непосредственно после
|
клиентские и серверные процессы одновременно, непосредственно после создания
|
||||||
создания сокета), упрощение процесса конфигурации (отпадает необходимость явно
|
сокета), упрощение процесса конфигурации (отпадает необходимость явно указывать
|
||||||
указывать зависимости между службами) и увеличение надежности (служебный или
|
зависимости между службами) и увеличение надежности (перезапуск службы,
|
||||||
экстренный, в случае падения, перезапуск службы не~приводит к недоступности
|
служебный или экстренный~--- в случае падения~--- не~приводит к недоступности
|
||||||
сокета). Тем не~менее, systemd ничуть не~хуже inetd может запускать службы в
|
сокета). Тем не~менее, systemd ничуть не~хуже inetd может запускать службы в
|
||||||
ответ на входящие сетевые соединения.
|
ответ на входящие сетевые соединения.
|
||||||
|
|
||||||
@@ -2328,7 +2349,7 @@ systemd прежде всего ориентирована на локальны
|
|||||||
Однако, интерфейс, традиционно используемый в inetd, еще проще. Он позволяет
|
Однако, интерфейс, традиционно используемый в inetd, еще проще. Он позволяет
|
||||||
передавать запускаемой службе только один сокет, который формируется из потоков
|
передавать запускаемой службе только один сокет, который формируется из потоков
|
||||||
STDIN и STDOUT запущенного процесса. Поддержка этого механизма также
|
STDIN и STDOUT запущенного процесса. Поддержка этого механизма также
|
||||||
присутствует в systemd~--- для обеспечения совместимости с множеством служб
|
присутствует в systemd~--- для обеспечения совместимости со множеством служб,
|
||||||
поддерживающих сокет-активацию только в стиле inetd.
|
поддерживающих сокет-активацию только в стиле inetd.
|
||||||
|
|
||||||
Прежде, чем мы перейдем к примерам, рассмотрим три различных схемы, использующих
|
Прежде, чем мы перейдем к примерам, рассмотрим три различных схемы, использующих
|
||||||
@@ -2339,7 +2360,7 @@ STDIN и STDOUT запущенного процесса. Поддержка эт
|
|||||||
загрузки, и единственный экземпляр службы тут же начинает
|
загрузки, и единственный экземпляр службы тут же начинает
|
||||||
обслуживать все поступающие запросы. Такая схема подходит для
|
обслуживать все поступающие запросы. Такая схема подходит для
|
||||||
часто используемых системных служб~--- очевидно, что такие
|
часто используемых системных служб~--- очевидно, что такие
|
||||||
службы лучше запускать как можно раньше, и по вомзожности
|
службы лучше запускать как можно раньше, и по возможности
|
||||||
параллельно. В качестве примера можно привести D-Bus и Syslog.
|
параллельно. В качестве примера можно привести D-Bus и Syslog.
|
||||||
\item \textbf{Сокет-активация для одиночных служб:} сокеты создаются на
|
\item \textbf{Сокет-активация для одиночных служб:} сокеты создаются на
|
||||||
ранних стадиях загрузки, и единственный экземпляр службы
|
ранних стадиях загрузки, и единственный экземпляр службы
|
||||||
@@ -2456,7 +2477,7 @@ ExecStart=-/usr/sbin/sshd -i
|
|||||||
StandardInput=socket
|
StandardInput=socket
|
||||||
\end{Verbatim}
|
\end{Verbatim}
|
||||||
|
|
||||||
Большинство представленных здесь опции, как и раньше, понятны интуитивно. Особое
|
Большинство представленных здесь опций, как всегда, понятны интуитивно. Особое
|
||||||
внимание стоит обратить лишь на +StandardInput=socket+, которая, собственно, и
|
внимание стоит обратить лишь на +StandardInput=socket+, которая, собственно, и
|
||||||
включает для данной службы режим совместимости с inetd-активацией. Опция
|
включает для данной службы режим совместимости с inetd-активацией. Опция
|
||||||
+StandardInput=+ позволяет указать, куда будет подключен поток STDIN процесса
|
+StandardInput=+ позволяет указать, куда будет подключен поток STDIN процесса
|
||||||
@@ -2464,14 +2485,14 @@ StandardInput=socket
|
|||||||
\href{http://0pointer.de/public/systemd-man/systemd.exec.html}{на странице
|
\href{http://0pointer.de/public/systemd-man/systemd.exec.html}{на странице
|
||||||
руководства}). Задав для нее значение +socket+, мы обеспечиваем подключение
|
руководства}). Задав для нее значение +socket+, мы обеспечиваем подключение
|
||||||
этого потока к сокету соединения, как того и требует механизм inetd-активации.
|
этого потока к сокету соединения, как того и требует механизм inetd-активации.
|
||||||
Заметим, что явно указывать опцию +StandardInput=+ в данном случае
|
Заметим, что явно указывать опцию +StandardOutput=+ в данном случае
|
||||||
необязательно~--- она автоматически устанавливается в то же значение, что и
|
необязательно~--- она автоматически устанавливается в то же значение, что и
|
||||||
+StandardInput+, если явно не~указано что-то другое. Кроме того, можно отметить
|
+StandardInput+, если явно не~указано что-то другое. Кроме того, можно отметить
|
||||||
наличие <<+-+>> перед именем бинарного файла sshd. Таким образом мы указываем
|
наличие <<+-+>> перед именем бинарного файла sshd. Таким образом мы указываем
|
||||||
systemd игнорировать код выхода процесса sshd. По умолчанию, systemd сохраняет
|
systemd игнорировать код выхода процесса sshd. По умолчанию, systemd сохраняет
|
||||||
коды выхода для всех экземпляров службы, завершившихся с ошибкой (сбросить эту
|
коды выхода для всех экземпляров службы, завершившихся с ошибкой (сбросить эту
|
||||||
информацию можно командой +systemctl reset-failed+). SSH
|
информацию можно командой +systemctl reset-failed+). SSH
|
||||||
периодически откалывает подобные номера, и мы разрешаем systemd
|
довольно часто завершается с ненулевым кодом выхода, и мы разрешаем systemd
|
||||||
не~регистрировать подобные <<ошибки>>.
|
не~регистрировать подобные <<ошибки>>.
|
||||||
|
|
||||||
Служба +sshd@.service+ предназначена для работы в виде независимых экземпляров
|
Служба +sshd@.service+ предназначена для работы в виде независимых экземпляров
|
||||||
@@ -2508,7 +2529,7 @@ sshd.socket - SSH Socket for Per-Connection Servers
|
|||||||
|
|
||||||
Итак, наш сокет уже прослушивается, но входящих соединений на него пока
|
Итак, наш сокет уже прослушивается, но входящих соединений на него пока
|
||||||
не~поступало (счетчик +Accepted:+ показывает количество принятых соединений
|
не~поступало (счетчик +Accepted:+ показывает количество принятых соединений
|
||||||
с момента запуска сокета, счетчик +Connected:+~--- количество активных
|
с момента создания сокета, счетчик +Connected:+~--- количество активных
|
||||||
соединений на текущий момент).
|
соединений на текущий момент).
|
||||||
|
|
||||||
Подключимся к нашему серверу с двух разных хостов, и посмотрим на список служб:
|
Подключимся к нашему серверу с двух разных хостов, и посмотрим на список служб:
|
||||||
@@ -2529,46 +2550,46 @@ sshd.socket loaded active listening SSH So
|
|||||||
# systemctl kill sshd@172.31.0.52:22-172.31.0.4:47779.service
|
# systemctl kill sshd@172.31.0.52:22-172.31.0.4:47779.service
|
||||||
\end{Verbatim}
|
\end{Verbatim}
|
||||||
|
|
||||||
Вот и все, что вам нужно знать о портировании inetd-служб в systemd и дальнейшем
|
Вот, пожалуй, и все, что вам нужно знать о портировании inetd-служб в systemd и
|
||||||
их использовании.
|
дальнейшем их использовании.
|
||||||
|
|
||||||
Приметительно к SSH, в большинстве случаев схема с inetd-активацией позволяет
|
Применительно к SSH, в большинстве случаев схема с inetd-активацией позволяет
|
||||||
сэкономить системные ресурсы и поэтому оказывается более эффективным решением,
|
сэкономить системные ресурсы и поэтому оказывается более эффективным решением,
|
||||||
чем использование обычного service-файла sshd, обеспечивающего запуск одиночной
|
чем использование обычного service-файла sshd, обеспечивающего запуск одиночной
|
||||||
службы без использования сокет-активации (поставляется в составе пакета и может
|
службы без использования сокет-активации (поставляется в составе пакета и может
|
||||||
быть включен при необходимости). В ближайшее время я собираюсь направить
|
быть включен при необходимости). В ближайшее время я собираюсь направить
|
||||||
соответсвующий запрос относительно нашего пакета SSH в багтрекер Fedora.
|
соответствующий запрос относительно нашего пакета SSH в багтрекер Fedora.
|
||||||
|
|
||||||
В завершение нашей дискуссии, сравним возможности xinetd и systemd, и выясним,
|
В завершение нашей дискуссии, сравним возможности xinetd и systemd, и выясним,
|
||||||
может ли systemd полностью заменить xinetd, или нет. Вкратце: systemd
|
может ли systemd полностью заменить xinetd, или нет. Вкратце: systemd
|
||||||
поддерживает далеко не~все возможности xinetd и поэтому отнюдь не~является его
|
поддерживает далеко не~все возможности xinetd и поэтому отнюдь не~является его
|
||||||
полноценной заменой на все случаи жизни. В частности, если вы загляните
|
полноценной заменой на все случаи жизни. В частности, если вы загляните в
|
||||||
в \href{http://linux.die.net/man/5/xinetd.conf}{список параметров конфигурации}
|
\href{http://linux.die.net/man/5/xinetd.conf}{список параметров конфигурации}
|
||||||
xinetd, вы заметите, что далеко не~все эти опции доступны в systemd. Например, в
|
xinetd, вы заметите, что далеко не~все эти опции доступны в systemd. Например, в
|
||||||
systemd нет и не~будет встроенных служб +echo+, +time+, +daytime+, +discard+ и
|
systemd нет и никогда не~будет встроенных служб +echo+, +time+, +daytime+,
|
||||||
т.д. Кроме того, systemd не~поддерживает TCPMUX и RPC. Впрочем, большинство этих
|
+discard+ и т.д. Кроме того, systemd не~поддерживает TCPMUX и RPC. Впрочем,
|
||||||
опций уже не~актуальны в наше время. Подавляющее большинство inetd-служб
|
большинство этих опций уже не~актуальны в наше время. Подавляющее большинство
|
||||||
не~используют эти опции (в частности, все имеющиеся в Fedora xinetd-службы
|
inetd-служб не~используют эти опции (в частности, ни~одна из имеющихся в Fedora
|
||||||
принадлежат к этому большинству, и не~используют перечисленные опции). Стоит
|
xinetd-служб не~требует поддержки перечисленных опций). Стоит отметить, что
|
||||||
отметить, что xinetd поддерживает некоторые интересные возможности,
|
xinetd имеет некоторые интересные возможности, отсутствующие в systemd,
|
||||||
отсутствующие в systemd, например, списки контроля доступа для IP-адресов (IP
|
например, списки контроля доступа для IP-адресов (IP ACL). Однако, большинство
|
||||||
ACL). Однако, большинство администраторов, скорее всего, согласятся, что
|
администраторов, скорее всего, согласятся, что настройка барндмауэра является
|
||||||
настройка барндмауэра является более эффективным решением подобных задач,
|
более эффективным решением подобных задач, а для ценителей устаревших технологий
|
||||||
а для ценителей устаревших технологий systemd предлагает поддержку tcpwrap.
|
systemd предлагает поддержку tcpwrap. С другой стороны, systemd тоже
|
||||||
С другой стороны, systemd тоже предоставляет ряд возможностей, отсутствующих в
|
предоставляет ряд возможностей, отсутствующих в xinetd, в частности,
|
||||||
xinetd, в частности, индивидуальный контроль над каждым экземпляром службы (см.
|
индивидуальный контроль над каждым экземпляром службы (см. выше), и куда более
|
||||||
выше), и куда более полный
|
полный
|
||||||
\href{http://0pointer.de/public/systemd-man/systemd.exec.html}{список настроек}
|
\href{http://0pointer.de/public/systemd-man/systemd.exec.html}{список настроек}
|
||||||
для контроля окружения, в котором запускаются экземпляры. Я надеюсь, что
|
для контроля окружения, в котором запускаются экземпляры. Я надеюсь, что
|
||||||
возможностей systemd должно быть достаточно для решения большинства задач, а в
|
возможностей systemd должно быть достаточно для решения большинства задач, а в
|
||||||
тех редких случаях, когда вам потребуются специфические опции xinetd~--- ничто
|
тех редких случаях, когда вам потребуются специфические опции xinetd~--- ничто
|
||||||
не~мешает вам запустить его в дополнение к systemd. Таким образом, уже сейчас в
|
не~мешает вам запустить его в дополнение к systemd. Таким образом, уже сейчас в
|
||||||
большинстве случаев xinetd можно выкинуть из числа обязательных системных
|
большинстве случаев xinetd можно выкинуть из числа обязательных системных
|
||||||
компонентов. В некотором смысле, systemd возвращает функциональность
|
компонентов. Можно сказать, что systemd не~просто возвращает функциональность
|
||||||
классического юниксового inetd и вновь возвращает ей ключевую роль в
|
классического юниксового inetd, но еще и восстанавливает ее ключевую
|
||||||
Linux-системах.
|
роль в Linux-системах.
|
||||||
|
|
||||||
Теперь, вооруженные этими занниями, вы можете портировать свои службы с inetd на
|
Теперь, вооруженные этими знаниями, вы можете портировать свои службы с inetd на
|
||||||
systemd. Но, конечно, будет лучше, если этим займутся разработчики из апстрима
|
systemd. Но, конечно, будет лучше, если этим займутся разработчики из апстрима
|
||||||
приложения, или сопровождающие вашего дистрибутива.
|
приложения, или сопровождающие вашего дистрибутива.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user