Compare commits

...

1 Commits
v6.2 ... v6.3

Author SHA1 Message Date
nnz1024
48c2f930a4 Version v6.3 (2011-06-03 20:56) [AUTO] 2017-08-17 23:05:37 +03:00

198
s4a.tex
View File

@@ -45,22 +45,23 @@ pdfauthor={Lennart Poettering, Sergey Ptashnick}}
\tableofcontents%\newpage \tableofcontents%\newpage
\sectiona{Предисловие автора} \sectiona{Предисловие автора}
Многие из вас, наверное, уже знают, что Многие из вас, наверное, уже знают, что
\href{http://www.freedesktop.org/wiki/Software/systemd}{systemd}~--- это \href{http://www.freedesktop.org/wiki/Software/systemd}{systemd}~--- это новая
новая система инициализации дистрибутива Fedora, начиная с система инициализации дистрибутива Fedora, начиная с Fedora~14\footnote{Прим.
Fedora~14\footnote{Прим. перев.: к сожалению, разработчики Fedora приняли перев.: к сожалению, разработчики Fedora приняли решение оставить в Fedora~14 в
решение оставить в Fedora~14 в качестве системы инициализации по умолчанию качестве системы инициализации по умолчанию upstart, однако systemd все равно
upstart, однако systemd все равно будет включен в этот релиз и может быть включен в этот релиз и может быть использован в качестве альтернативной системы
использован в качестве альтернативной системы инициализации}. Помимо Fedora, инициализации. Окончательный переход на systemd произошел лишь в Fedora~15.}.
systemd также поддерживает и другие дистрибутивы, в частности, Помимо Fedora, systemd также поддерживает и другие дистрибутивы, в частности,
\href{http://en.opensuse.org/SDB:Systemd}{OpenSUSE}. \href{http://en.opensuse.org/SDB:Systemd}{OpenSUSE}\footnote{Прим. перев.:
systemd предоставляет администраторам целый ряд новых возможностей, сейчас systemd поддерживается практически во всех популярных дистрибутивах для
значительно упрощающих процесс обслуживания системы. Эта статья является настольных систем.}. systemd предоставляет администраторам целый ряд новых
первой в серии публикаций, планируемых в ближайшие месяцы. В каждой из этих возможностей, значительно упрощающих процесс обслуживания системы. Эта статья
статей я попытаюсь рассказать об очередной новой возможности systemd. является первой в серии публикаций, планируемых в ближайшие месяцы. В каждой из
этих статей я попытаюсь рассказать об очередной новой возможности systemd.
Большинство этих возможностей можно описать легко и просто, и подобные статьи Большинство этих возможностей можно описать легко и просто, и подобные статьи
должны быть интересны довольно широкой аудитории. Однако, время от времени должны быть интересны довольно широкой аудитории. Однако, время от времени мы
мы будем рассматривать ключевые новшества systemd, что может потребовать будем рассматривать ключевые новшества systemd, что может потребовать несколько
несколько более подробного изложения. более подробного изложения.
\begin{flushright} \begin{flushright}
Lennart P\"{o}ttering, 23 августа 2010~г. Lennart P\"{o}ttering, 23 августа 2010~г.
\end{flushright} \end{flushright}
@@ -240,7 +241,7 @@ CGI-программы, а демон cron~--- команды, предписа
вследствие ошибок в коде и/или конфигурации программ, но и в результате злого вследствие ошибок в коде и/или конфигурации программ, но и в результате злого
умысла. Например, очень часто встречается ситуация, когда установленный на умысла. Например, очень часто встречается ситуация, когда установленный на
взломанном сервере процесс-бэкдор маскируется под нормального демона, меняя взломанном сервере процесс-бэкдор маскируется под нормального демона, меняя
себе имя, скажем, на httpd}. себе имя, скажем, на httpd.}.
systemd предлагает простой путь для решения обсуждаемой задачи. Запуская systemd предлагает простой путь для решения обсуждаемой задачи. Запуская
очередной новый процесс, systemd помещает его в отдельную контрольную группу очередной новый процесс, systemd помещает его в отдельную контрольную группу
@@ -648,7 +649,7 @@ Bug Reporting Tool, службы, занимающейся сбором crash du
+MTA+ или +smtpdaemon+ (Fedora), +smtp+ +MTA+ или +smtpdaemon+ (Fedora), +smtp+
(openSUSE), +mail-transport-agent+ (Debian и Ubuntu), (openSUSE), +mail-transport-agent+ (Debian и Ubuntu),
+mail-transfer-agent+. Таким образом, можно утверждать, что +mail-transfer-agent+. Таким образом, можно утверждать, что
стандарт LSB не~справляется с возложенной на него задачей}, стандарт LSB не~справляется с возложенной на него задачей.},
содержащий информацию о зависимостях. systemd, базирующийся содержащий информацию о зависимостях. systemd, базирующийся
на идеях socket-активации, обычно не~требует явного описания на идеях socket-активации, обычно не~требует явного описания
зависимостей (либо требует самого минимального описания). зависимостей (либо требует самого минимального описания).
@@ -711,7 +712,7 @@ WantedBy=multi-user.target
реализации, явное указание +After=syslog.target+ будет избыточным, так реализации, явное указание +After=syslog.target+ будет избыточным, так
как соответствующая функциональность поддерживается автоматически. Однако, как соответствующая функциональность поддерживается автоматически. Однако,
эту строчку стоит все-таки указать для обеспечения совместимости с системами, эту строчку стоит все-таки указать для обеспечения совместимости с системами,
использующими устаревшие реализации демона системного лога}. Эта информация, использующими устаревшие реализации демона системного лога.}. Эта информация,
как мы помним, была указана в LSB-заголовке исходного init-скрипта. В нашем как мы помним, была указана в LSB-заголовке исходного init-скрипта. В нашем
конфигурационном файле мы указываем зависимость от демона системного лога при конфигурационном файле мы указываем зависимость от демона системного лога при
помощи директивы +After+, указывающей на юнит +syslog.taget+. Это помощи директивы +After+, указывающей на юнит +syslog.taget+. Это
@@ -749,7 +750,7 @@ systemd считает службу запущенной с момента за
+multi-user.target+. Это специальный юнит, примерно соответствующий роли +multi-user.target+. Это специальный юнит, примерно соответствующий роли
третьего уровня исполнения классического SysV\footnote{В том контексте, в третьего уровня исполнения классического SysV\footnote{В том контексте, в
котором он используется в большинстве дистрибутивов семейства Red Hat, а котором он используется в большинстве дистрибутивов семейства Red Hat, а
именно, многопользовательский режим без запуска графической оболочки}. именно, многопользовательский режим без запуска графической оболочки.}.
Директива +WantedBy+ никак не~влияет на уже работающую службу, но она Директива +WantedBy+ никак не~влияет на уже работающую службу, но она
играет важную роль при выполнении команды +systemctl enable+, задавая, в каких играет важную роль при выполнении команды +systemctl enable+, задавая, в каких
условиях должен активироваться устанавливаемый юнит. В нашем примере, служба условиях должен активироваться устанавливаемый юнит. В нашем примере, служба
@@ -759,7 +760,7 @@ abrtd будет активироваться при переходе в сос
в SysV) является надстройкой над режимом многопользовательской консольной в SysV) является надстройкой над режимом многопользовательской консольной
загрузки (+multi-user.target+, аналог runlevel 3 в SysV). Таким загрузки (+multi-user.target+, аналог runlevel 3 в SysV). Таким
образом, все службы, запускаемые в режиме +multi-user.target+, будут образом, все службы, запускаемые в режиме +multi-user.target+, будут
также запускаться и в режиме +graphical.target+} (к <<ненормальным>> также запускаться и в режиме +graphical.target+.} (к <<ненормальным>>
можно отнести, например, загрузки в режиме +emergency.target+, который можно отнести, например, загрузки в режиме +emergency.target+, который
является аналогом первого уровня исполнения в классической SysV). является аналогом первого уровня исполнения в классической SysV).
@@ -818,7 +819,7 @@ systemd сложнее определить, какой из порожденн
воспользовались типом запуска +dbus+. Он подходит для всех служб, которые в воспользовались типом запуска +dbus+. Он подходит для всех служб, которые в
конце процесса инициализации регистрируют свое имя на шине D-Bus\footnote{В конце процесса инициализации регистрируют свое имя на шине D-Bus\footnote{В
настоящее время практически все службы дистрибутива Fedora после запуска настоящее время практически все службы дистрибутива Fedora после запуска
регистрируется на шине D-Bus}. ABRTd относится к ним. С новыми настройками, регистрируется на шине D-Bus.}. ABRTd относится к ним. С новыми настройками,
systemd запустит процесс abrtd, который уже не~будет форкаться (согласно systemd запустит процесс abrtd, который уже не~будет форкаться (согласно
указанным нами ключам <<+-d -s+>>), и в качестве момента окончания периода указанным нами ключам <<+-d -s+>>), и в качестве момента окончания периода
запуска данной службы systemd будет рассматривать момент регистрации имени запуска данной службы systemd будет рассматривать момент регистрации имени
@@ -906,7 +907,7 @@ Apache, crond, atd, которые по роду служебной деятел
пользователем или службой не~создаст значительных проблем с отзывчивостью пользователем или службой не~создаст значительных проблем с отзывчивостью
системы у других пользователей и служб. Таким образом, в качестве основной системы у других пользователей и служб. Таким образом, в качестве основной
угрозы форк-бомбардировки остаются лишь возможности исчерпания памяти и угрозы форк-бомбардировки остаются лишь возможности исчерпания памяти и
идентификаторов процессов (PID)}. идентификаторов процессов (PID).}.
В некоторый случах возникает необходимость отправить сигнал именно основному В некоторый случах возникает необходимость отправить сигнал именно основному
процессу службы. Например, используя +SIGHUP+, мы можем заставить демона процессу службы. Например, используя +SIGHUP+, мы можем заставить демона
@@ -1105,35 +1106,35 @@ systemd и на этот случай есть простое решение, и
\href{http://linux.die.net/man/1/chroot}{chroot-окружениями}. Системный вызов \href{http://linux.die.net/man/1/chroot}{chroot-окружениями}. Системный вызов
+chroot()+ позволяет задать для определенного процесса (и его потомков) каталог, +chroot()+ позволяет задать для определенного процесса (и его потомков) каталог,
который они будут рассматривать как корневой +/+, тем самым ограничивая для них который они будут рассматривать как корневой +/+, тем самым ограничивая для них
область видимости иерархии файловой системы отдельным поддеревом. Большинство область видимости иерархии файловой системы отдельной ветвью. Большинство
применений chroot-окружений можно отнести к двум классам задач: применений chroot-окружений можно отнести к двум классам задач:
\begin{enumerate} \begin{enumerate}
\item Обеспечение безопасности. Потенциально уязвимый демон chroot'ится \item Обеспечение безопасности. Потенциально уязвимый демон chroot'ится
в отдельный каталог, и даже в случае успешной атаки, взломщик в отдельный каталог и, даже в случае успешной атаки, взломщик
увидит лишь содержимое этого каталога, а не~всю файловую увидит лишь содержимое этого каталога, а не~всю файловую
систему~--- он окажется в ловушке chroot'а. систему~--- он окажется в ловушке chroot'а.
\item Подготовка и управление образом операционной системы при отладке, \item Подготовка и управление образом операционной системы при отладке,
тестировании, компиляции, установке или восстановлении. При этом тестировании, компиляции, установке или восстановлении. При этом
вся иерархия файловых систем гостевой ОС монтируется или вся иерархия файловых систем гостевой ОС монтируется или
создается в каталоге системы-хоста, и при запуске оболочки (или создается в каталоге системы-хоста, и при запуске оболочки (или
любого другого приложения) внутри этой иерархии, их корень любого другого приложения) внутри этой иерархии, в качестве
сдвигается в этот каталог. Система, которую <<видят>> такие корня используется этот каталог. Система, которую <<видят>>
программы, может сильно отличаться от ОС хоста. Например, это такие программы, может сильно отличаться от ОС хоста. Например,
может быть другой дистрибутив, или даже другая аппаратная это может быть другой дистрибутив, или даже другая аппаратная
архитектура (запуск i386-гостя на x86\_64-хосте). Гостевая ОС архитектура (запуск i386-гостя на x86\_64-хосте). Гостевая ОС
не~может увидеть полной иерархии ОС хоста. не~может увидеть полного дерева каталогов ОС хоста.
\end{enumerate} \end{enumerate}
В системах, использующих классический SysV init, использовать chroot-окружения В системах, использующих классический SysV init, использовать chroot-окружения
сравнительно несложно. Например, чтобы запустить выбранного демона внутри сравнительно несложно. Например, чтобы запустить выбранного демона внутри дерева
иерархии гостевой ОС, достаточно смонтировать внутри этой иерархии +/proc+, каталогов гостевой ОС, достаточно смонтировать внутри этого дерева +/proc+,
+/sys+ и остальные API ФС, воспользоваться программой +chroot(1)+ для входа в +/sys+ и остальные API ФС, воспользоваться программой +chroot(1)+ для входа в
окружение, и выполнить соответствующий init-скрипт, запустив +/sbin/service+ окружение, и выполнить соответствующий init-скрипт, запустив +/sbin/service+
внутри окружения. внутри окружения.
Но в системах, использующих systemd, уже не~все так просто. Одно из важнейших Но в системах, использующих systemd, уже не~все так просто. Одно из важнейших
достоинств systemd состоит в том, что параметры среды, в которой запускаются достоинств systemd состоит в том, что параметры среды, в которой запускаются
демоны, никак не~зависит от метода их запуска. В системах, использующих SysV демоны, никак не~зависят от метода их запуска. В системах, использующих SysV
init, многие параметры среды выполнения (в частности, лимиты на системные init, многие параметры среды выполнения (в частности, лимиты на системные
ресурсы, переменные окружения, и т.п.) наследуются от оболочки, из которой был ресурсы, переменные окружения, и т.п.) наследуются от оболочки, из которой был
запущен init-скрипт. При использовании systemd ситуация меняется радикально: запущен init-скрипт. При использовании systemd ситуация меняется радикально:
@@ -1154,8 +1155,8 @@ init-подсистемой (и это, в общем, неплохо, а есл
chroot-окружения в системах на основе systemd? Что ж, постараемся дать подробный chroot-окружения в системах на основе systemd? Что ж, постараемся дать подробный
и всесторонний ответ на этот вопрос. и всесторонний ответ на этот вопрос.
Для начала рассмотрим первое из перечисленных выше применений chroot: изоляция в Для начала, рассмотрим первое из перечисленных выше применений chroot: изоляция
целях безопасности. Прежде всего, стоит заметить, что защита, предоставляемая в целях безопасности. Прежде всего, стоит заметить, что защита, предоставляемая
chroot'ом, весьма эфемерна и ненадежна, так как chroot не~является <<дорогой с chroot'ом, весьма эфемерна и ненадежна, так как chroot не~является <<дорогой с
односторонним движением>>. Выйти из chroot-окружения сравнительно несложно, и односторонним движением>>. Выйти из chroot-окружения сравнительно несложно, и
соответствующее предупреждение даже соответствующее предупреждение даже
@@ -1164,17 +1165,18 @@ chroot'ом, весьма эфемерна и ненадежна, так как
методиками. В большинстве случаев, это возможно только при наличии поддержки методиками. В большинстве случаев, это возможно только при наличии поддержки
chroot в самой программе. Прежде всего, корректное конфигурирование 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, и управлять ими точно так же, как и другими.
@@ -1222,7 +1224,7 @@ RootDirectoryStartOnly=yes
характерные для chroot. systemd позволяет использовать при конфигурировании характерные для chroot. systemd позволяет использовать при конфигурировании
юнитов некоторые возможности, предоставляемые FSNS. В частности, использование юнитов некоторые возможности, предоставляемые FSNS. В частности, использование
FSNS часто является гораздо более простой и удобной альтернативой созданию FSNS часто является гораздо более простой и удобной альтернативой созданию
полноценных chroot-окружений. Используя директивы +ReadOnlyDirectories=+, полновесных chroot-окружений. Используя директивы +ReadOnlyDirectories=+,
+InaccessibleDirectories=+, вы можете задать ограничения по использованию +InaccessibleDirectories=+, вы можете задать ограничения по использованию
иерархии файловых систем для заданной службы: ее корнем будет системный корневой иерархии файловых систем для заданной службы: ее корнем будет системный корневой
каталог, однако указанные в этих директивах подкаталоги будут доступны только каталог, однако указанные в этих директивах подкаталоги будут доступны только
@@ -1248,28 +1250,28 @@ Avahi и ReltimeKit в ближайшем будущем перейдут с +ch
FSNS. FSNS.
Итак, мы рассмотрели вопросы использования chroot для обеспечения безопасности. Итак, мы рассмотрели вопросы использования chroot для обеспечения безопасности.
Переходим ко второму пункту: Подготовка и управление образом операционной Переходим ко второму пункту: подготовка и управление образом операционной
системы при отладке, тестировании, компиляции, установке или восстановлении. системы при отладке, тестировании, компиляции, установке или восстановлении.
chroot-окружения, по сути, весьма примитивно: они изолируют только иерархии chroot-окружения, по сути, весьма примитивны: они изолируют только иерархии
файловых систем. Даже после chroot'а в определенный подкаталог, процесс файловых систем. Даже после chroot'а в определенный подкаталог, процесс
по-прежнему имеет полный доступ к системным вызовам, может убить любой процесс по-прежнему имеет полный доступ к системным вызовам, может убивать процессы,
из основной системы, и т.п. Вследствие этого, запуск полноценной ОС (или ее запущенные в основной системе, и т.п. Вследствие этого, запуск полноценной ОС
части) внутри chroot'а несет угрозу для хост-системы: у гостя и хоста отличаются (или ее части) внутри 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'нутая система будут иметь общую
разделяемую память SysV (SysV shared memory), общие сокеты из абстрактных разделяемую память SysV (SysV shared memory), общие сокеты из абстрактных
пространств имен (abstract namespace sockets) и другие элементы IPC. Для пространств имен (abstract namespace sockets) и другие элементы IPC. Для
отладки, тестирования, компиляции, установки и восстановлении ОС не~требуется отладки, тестирования, компиляции, установки и восстановлении ОС не~требуется
абсолютно безопасная изоляция, однако нужна защита от \emph{случайного} абсолютно неуязвимая изоляция~--- нужна лишь надежная защита от
воздействия на ОС хоста изнутри chroot-окружения, иначе вы можете получить целый \emph{случайного} воздействия на ОС хоста изнутри chroot-окружения, иначе вы
букет проблем, как минимум, от пост-инсталляционных скриптов при установке можете получить целый букет проблем, как минимум, от пост-инсталляционных
пакетов в chroot-окружении. скриптов при установке пакетов в chroot-окружении.
systemd имеет целый ряд возможностей, полезных для работы с chroot-системами: systemd имеет целый ряд возможностей, полезных для работы с chroot-системами:
@@ -1296,7 +1298,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, которая позиционируется как современная альтернатива классическому
@@ -1363,15 +1365,15 @@ systemd уже подготовлен для работы внутри таки
шаге вызывает не~+reboot()+, а просто +exit()+. шаге вызывает не~+reboot()+, а просто +exit()+.
Стоит отметить, что +systemd-nspawn+ все же не~является полноценной системой Стоит отметить, что +systemd-nspawn+ все же не~является полноценной системой
контейнерной виртуализации/изоляции~--- если нужно именно это, воспользуйтесь контейнерной виртуализации/изоляции~--- если вам нужно такое решение,
\href{ http://lxc.sourceforge.net/}{LXC}. Этот проект использует те же самые воспользуйтесь \href{ http://lxc.sourceforge.net/}{LXC}. Этот проект использует
механизмы ядра, но предоставляет куда более широкие возможности, включая те же самые механизмы ядра, но предоставляет куда более широкие возможности,
виртуализацию сети. Если вам угодно, +systemd-nspawn+ как реализация контейнера включая виртуализацию сети. Могу предложить такую аналогию: +systemd-nspawn+ как
похожа на GNOME~3~--- компактна и проста в использовании, опций для настройки реализация контейнера похожа на GNOME~3~--- компактна и проста в использовании,
очень мало. В то время как LXC больше похож на KDE: опций для настройки больше, опций для настройки очень мало. В то время как LXC больше похож на KDE: опций
чем строк кода. Я создал +systemd-nspawn+ специально для тестирования, отладки, для настройки больше, чем строк кода. Я создал +systemd-nspawn+ специально для
сборки, восстановления. Именно для этих задач вам стоит ее использовать~--- она тестирования, отладки, сборки, восстановления. Именно для этих задач вам стоит
неплохо с ними справляется, куда лучше, чем +chroot(1)+. ее использовать~--- она неплохо с ними справляется, куда лучше, чем +chroot(1)+.
Что ж, пора заканчивать. Итак: Что ж, пора заканчивать. Итак:
\begin{enumerate} \begin{enumerate}
@@ -1476,7 +1478,7 @@ $ systemd-analyze blame
мы можем с этим сделать? Эта служба выполняет очень простую задачу: она ожидает, мы можем с этим сделать? Эта служба выполняет очень простую задачу: она ожидает,
пока udev завершит опрос устройств, после чего завершается. Опрос же устройств пока udev завершит опрос устройств, после чего завершается. Опрос же устройств
может занимать довольно много времени. Например, в нашем случае опрос устройств может занимать довольно много времени. Например, в нашем случае опрос устройств
занимает более 6~секунд из-за встроенного в компьютер 3G-модема, в котором занимает более 6~секунд из-за подключенного к компьютеру 3G-модема, в котором
отсутствует SIM-карта. Этот модем очень долго отвечает на запросы udev. Опрос отсутствует SIM-карта. Этот модем очень долго отвечает на запросы udev. Опрос
устройств является частью схемы, обеспечивающей работу ModemManager'а и устройств является частью схемы, обеспечивающей работу ModemManager'а и
позволяющей NetworkManager'у упростить для вас настройку 3G. Казалось бы, позволяющей NetworkManager'у упростить для вас настройку 3G. Казалось бы,
@@ -1562,12 +1564,12 @@ cryptsetup, что снижение этого времени с 1 секунд
нужно сделать так, чтобы этот каталога автоматически монтировался при загрузке, нужно сделать так, чтобы этот каталога автоматически монтировался при загрузке,
но процесс загрузки не~ожидал завершения работы +cryptsetup+, +fsck+ и +mount+ но процесс загрузки не~ожидал завершения работы +cryptsetup+, +fsck+ и +mount+
для этого раздела. Как же сделать точку монтирования доступной, не~ожидая, пока для этого раздела. Как же сделать точку монтирования доступной, не~ожидая, пока
завершится процесс монтирования? Это можно сделать, воспользовавшись магической завершится процесс монтирования? Этого можно достичь, воспользовавшись
силой systemd~--- просто добавим опцию монтирования +comment=systemd.automount+ магической силой systemd~--- просто добавим опцию монтирования
в +/etc/fstab+. После этого, systemd будет создавать в +/home+ точку +comment=systemd.automount+ в +/etc/fstab+. После этого, systemd будет создавать
автоматического монтирования, и при первом же обращении к этому каталогу, в +/home+ точку автоматического монтирования, и при первом же обращении к этому
если файловая система еще не~будет готова к работе, каталогу, если файловая система еще не~будет готова к работе, systemd подготовит
systemd подготовит соответствующее устройство, проверит и смонтирует ее. соответствующее устройство, проверит и смонтирует ее.
После внесения изменений в +/etc/fstab+ и перезагрузки мы получаем: После внесения изменений в +/etc/fstab+ и перезагрузки мы получаем:
\begin{Verbatim} \begin{Verbatim}
@@ -1647,7 +1649,7 @@ Fedora~15 <<из коробки>>.
\section{Новые конфигурационные файлы} \section{Новые конфигурационные файлы}
Одно из наиболее масштабных нововведений Одно из ключевых достоинств
\href{http://www.freedesktop.org/wiki/Software/systemd}{systemd}~--- наличие \href{http://www.freedesktop.org/wiki/Software/systemd}{systemd}~--- наличие
полного набора программ, необходимых на ранних стадиях загрузки, причем эти полного набора программ, необходимых на ранних стадиях загрузки, причем эти
программы написаны на простом, быстром, надежном и легко поддающемся программы написаны на простом, быстром, надежном и легко поддающемся
@@ -1658,12 +1660,12 @@ shell-скриптов, разработанных для этих задач р
оставляет желать лучшего, но все же неплохо передает основную идею.} увенчался оставляет желать лучшего, но все же неплохо передает основную идею.} увенчался
полным успехом. Уже сейчас возможности предоставляемого нами инструментария полным успехом. Уже сейчас возможности предоставляемого нами инструментария
покрывают практически все нужды настольных и встраиваемых систем, а также покрывают практически все нужды настольных и встраиваемых систем, а также
большую часть потребностей серверных систем: б\'{о}льшую часть потребностей серверов:
\begin{itemize} \begin{itemize}
\item Проверка и монтирование всех файловых систем. \item Проверка и монтирование всех файловых систем.
\item Обновление и активация квот на всех файловых системах. \item Обновление и активация квот на всех файловых системах.
\item Установка имени хоста. \item Установка имени хоста.
\item Конфигурирование интерфейса обратной петли (+lo+). \item Настройка сетевого интерфейса обратной петли (+lo+).
\item Подгрузка правил SELinux, обновление \item Подгрузка правил SELinux, обновление
меток безопасности в динамических каталогах +/run+ и +/dev+. меток безопасности в динамических каталогах +/run+ и +/dev+.
\item Регистрация в ядре дополнительных бинарных форматов (например, \item Регистрация в ядре дополнительных бинарных форматов (например,
@@ -1698,11 +1700,11 @@ LVM, RAID и multipath). Если они вам не~нужны, вы легко
дистрибутивов, и поэтому реализация их поддержки в наших инструментах дистрибутивов, и поэтому реализация их поддержки в наших инструментах
не~представляла особого труда. Например, это относится к файлам +/etc/fstab+, не~представляла особого труда. Например, это относится к файлам +/etc/fstab+,
+/etc/crypttab+, +/etc/sysctl.conf+. Однако множество других, нестандартно +/etc/crypttab+, +/etc/sysctl.conf+. Однако множество других, нестандартно
расположенных файлов и каталогов вынуждали нас добавлять множество операторов расположенных файлов и каталогов вынуждали нас добавлять в код огромное
+#ifdef+, чтобы обеспечить поддержку различных вариантов расположения количество операторов +#ifdef+, чтобы обеспечить поддержку различных вариантов
конфигураций в разных дистрибутивах. Такой положение дел сильно усложняет расположения конфигураций в разных дистрибутивах. Такой положение дел сильно
жизнь нам всем, и при этом ничем не~оправдано~--- все эти файлы решают одни и те усложняет жизнь нам всем, и при этом ничем не~оправдано~--- все эти файлы решают
же задачи, но делают это немного по-разному. одни и те же задачи, но делают это немного по-разному.
Чтобы улучшить ситуацию и установить единый стандарт расположения базовых Чтобы улучшить ситуацию и установить единый стандарт расположения базовых
конфигурационных файлов во всех дистрибутивах, мы заставили systemd пользоваться конфигурационных файлов во всех дистрибутивах, мы заставили systemd пользоваться
@@ -1768,7 +1770,7 @@ LVM, RAID и multipath). Если они вам не~нужны, вы легко
перечень возможных названий файлов. Проект LSB попытался создать перечень возможных названий файлов. Проект LSB попытался создать
такой инструмент~--- такой инструмент~---
\hreftt{http://refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/lsbrelease.html}{lsb\_release}~--- \hreftt{http://refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/lsbrelease.html}{lsb\_release}~---
однако реализация такой простой вещи через скрипт на Python'е однако реализация столь простой функции через скрипт на Python'е
является не~самым оптимальным решением. Чтобы исправить является не~самым оптимальным решением. Чтобы исправить
сложившуюся ситуацию, мы решили перейти к единому простому сложившуюся ситуацию, мы решили перейти к единому простому
формату представления этой информации. формату представления этой информации.
@@ -1796,12 +1798,12 @@ LVM, RAID и multipath). Если они вам не~нужны, вы легко
конфигурационные файлы в ваших инструментах для настройки системы. Если ваши конфигурационные файлы в ваших инструментах для настройки системы. Если ваши
конфигурационные фронтенды будут использовать новые файлы, а не~их старые конфигурационные фронтенды будут использовать новые файлы, а не~их старые
аналоги, это значительно облегчит портирование таких фронтендов между аналоги, это значительно облегчит портирование таких фронтендов между
дистрибутивами, и вы внесете свой вклад в стандартизацию Linux, и в конечном дистрибутивами, и вы внесете свой вклад в стандартизацию Linux. В конечном счете
счете упростится жизнь и у администраторов, и для пользователей. Разумеется, на это упростит жизнь и администраторам, и пользователям. Разумеется, на текущий
текущий момент эти файлы полностью поддерживаются только дистрибутивами, момент эти файлы полностью поддерживаются только дистрибутивами, основанными на
основанными на 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}{подготовил} соответствующие пакеты,
@@ -1822,7 +1824,7 @@ LVM, RAID и multipath). Если они вам не~нужны, вы легко
дистрибутивов механизмы поддержки бинарных форматов больше не~нужны, и ваш дистрибутивов механизмы поддержки бинарных форматов больше не~нужны, и ваш
проект будет работать одинаково хорошо во всех дистрибутивах. Аналогичное проект будет работать одинаково хорошо во всех дистрибутивах. Аналогичное
предложение мы обращаем и ко всем разработчикам программ, которым требуется предложение мы обращаем и ко всем разработчикам программ, которым требуется
автоматическое создание/очистка временных файлов и каталогов при загрузке, автоматическое создание/очистка временных файлов и каталогов,
например, в каталоге +/run+ (\href{http://lwn.net/Articles/436012/}{ранее например, в каталоге +/run+ (\href{http://lwn.net/Articles/436012/}{ранее
известном} как +/var/run+). Таким проектам достаточно просто поместить известном} как +/var/run+). Таким проектам достаточно просто поместить
соответствующий конфигурационный файл в +/etc/tmpfiles.d/+, тоже средствами соответствующий конфигурационный файл в +/etc/tmpfiles.d/+, тоже средствами
@@ -1838,8 +1840,14 @@ shell-скриптов, выполняющих тривиальные задач
и форматы конфигурационных файлов. Но нам все же нужно было что-то выбрать, и мы и форматы конфигурационных файлов. Но нам все же нужно было что-то выбрать, и мы
выбрали то, что должно устроить большинство людей. Форматы конфигурационных выбрали то, что должно устроить большинство людей. Форматы конфигурационных
файлов максимально просты, и их можно легко читать и записывать даже из файлов максимально просты, и их можно легко читать и записывать даже из
shell-скриптов. (Эх, а ведь +/etc/bikeshed.conf+ могло бы быть неплохим именем shell-скриптов. Да, +/etc/bikeshed.conf+ могло бы быть неплохим именем
для файла конфигурации!) для файла конфигурации!\footnote{Прим. перев.: здесь автор намекает на
\href{http://en.wikipedia.org/wiki/Parkinson's_Law_of_Triviality}{Паркинсоновский
Закон Тривиальности}, который гласит, что самые жаркие споры возникают вокруг
наиболее простых вопросов. В частности, в качестве примера Паркинсон приводит
обсуждение строительства атомной электростанции и гаража для велосипедов (bike
shed)~--- если первое из этих решений принимается довольно быстро, то вокруг
второго разгорается множество дискуссий по самым разным аспектам.}
\textbf{Помогите нам стандартизировать Linux! Используйте новые конфигурационные \textbf{Помогите нам стандартизировать Linux! Используйте новые конфигурационные
файлы! Поддерживайте их в апстриме, поддерживайте их во всех дистрибутивах!} файлы! Поддерживайте их в апстриме, поддерживайте их во всех дистрибутивах!}