Version v15.7 (2013-08-27 19:08) [AUTO]

This commit is contained in:
nnz1024
2013-08-27 19:08:00 +04:00
parent 06c29b851c
commit 84177721df

106
s4a.tex
View File

@@ -2662,8 +2662,9 @@ Linux уже очень давно, но при этом практически
простыми в использовании, чтобы заинтересовать администраторов и апстримных простыми в использовании, чтобы заинтересовать администраторов и апстримных
разработчиков. Вот краткий перечень наиболее интересных разработчиков. Вот краткий перечень наиболее интересных
возможностей\footnote{Прим. перев.: В приведенном здесь списке не~упомянута возможностей\footnote{Прим. перев.: В приведенном здесь списке не~упомянута
встроенная в systemd поддержка фильтров seccomp, так как она была добавлена уже встроенная в systemd поддержка фильтров seccomp (опция +SystemCallFilter=+),
после написания исходной статьи.}: так как она была добавлена уже после написания исходной статьи, в выпуске
systemd 187.}:
\begin{itemize} \begin{itemize}
\item Изолирование служб от сети \item Изолирование служб от сети
\item Предоставление службам независимых каталогов +/tmp+ \item Предоставление службам независимых каталогов +/tmp+
@@ -2674,9 +2675,11 @@ Linux уже очень давно, но при этом практически
\end{itemize} \end{itemize}
Все эти опции описаны в man-страницах systemd, главным образом, в Все эти опции описаны в man-страницах systemd, главным образом, в
\href{http://0pointer.de/public/systemd-man/systemd.exec.html}{systemd.exec(5)}. \href{http://0pointer.de/public/systemd-man/systemd.exec.html}{systemd.exec(5)}%
Если вам потребуются какие-либо уточнения, пожалуйста, обратитесь к этим \footnote{Прим. перев.: Начиная с systemd версии 206, значительная часть
страницам. обсуждаемых здесь настроек вынесена в отдельную страницу
\href{http://0pointer.de/public/systemd-man/systemd.cgroup.html}{systemd.cgroup(5)}%
.}. Если вам потребуется дополнительная информация, вы можете обратиться к ним.
Все эти опции доступны на системах с systemd, вне зависимости от использования Все эти опции доступны на системах с systemd, вне зависимости от использования
SELinux или любой другой реализации MAC. SELinux или любой другой реализации MAC.
@@ -3338,8 +3341,8 @@ StartLimitAction=reboot-force
Да, и еще: если у вас возникнет вопрос, имеется ли в вашей системе аппаратный Да, и еще: если у вас возникнет вопрос, имеется ли в вашей системе аппаратный
таймер~--- скорее всего да, если ваш компьютер не~очень старый. Чтобы получить таймер~--- скорее всего да, если ваш компьютер не~очень старый. Чтобы получить
точный ответ, вы можете воспользоваться утилитой точный ответ, вы можете воспользоваться утилитой
\href{http://karelzak.blogspot.de/2012/05/eject1-sulogin1-wdctl1.html}{wdctl}, \hreftt{http://karelzak.blogspot.de/2012/05/eject1-sulogin1-wdctl1.html}{wdctl},
включенной в последний релиз util-linux\footnote{Прим. перев.: Утилита wdctl включенной в последний релиз util-linux\footnote{Прим. перев.: Утилита +wdctl+
присутствует в util-linux, начиная с версии~2.22, которая, на~момент написания присутствует в util-linux, начиная с версии~2.22, которая, на~момент написания
этих строк, еще не~вышла.}. Эта программа выведет всю необходимую этих строк, еще не~вышла.}. Эта программа выведет всю необходимую
информацию о вашем аппаратном сторожевом таймере. информацию о вашем аппаратном сторожевом таймере.
@@ -3499,7 +3502,7 @@ getty\footnote{Отметим, что +systemctl enable+ \emph{для экзем
/etc/systemd/system/getty.target.wants/serial-getty@ttyS2.service ; systemctl /etc/systemd/system/getty.target.wants/serial-getty@ttyS2.service ; systemctl
daemon-reload}.}\footnote{\label{ftn:enableserial}Прим. перев.: На самом деле, daemon-reload}.}\footnote{\label{ftn:enableserial}Прим. перев.: На самом деле,
работать с символьными ссылками придется даже в современных версиях systemd (на работать с символьными ссылками придется даже в современных версиях systemd (на
момент написания этих строк, последней является версия 204), так как момент написания этих строк, последней является версия 206), так как
разработчики забыли включить в файл +serial-getty@.service+ секцию +[Install]+, разработчики забыли включить в файл +serial-getty@.service+ секцию +[Install]+,
в результате чего попытка выполнения +systemctl enable+ для экземпляра в результате чего попытка выполнения +systemctl enable+ для экземпляра
соответствующей службы ведет к закономерной ошибке. Впрочем, исправить это соответствующей службы ведет к закономерной ошибке. Впрочем, исправить это
@@ -3617,7 +3620,7 @@ Journal был включен в Fedora начиная с F17. В Fedora~18 jour
\item Все отметки времени сформированы с учетом вашего часового пояса. \item Все отметки времени сформированы с учетом вашего часового пояса.
\item Для навигации по тексту используется просмотрщик (pager), по \item Для навигации по тексту используется просмотрщик (pager), по
умолчанию +less+\footnote{Прим. перев.: В инструментах systemd, умолчанию +less+\footnote{Прим. перев.: В инструментах systemd,
включая journalctl, просмотрщик включается только при прямом включая +journalctl+, просмотрщик включается только при прямом
выводе на экран, и отключается при перенаправлении вывода в файл выводе на экран, и отключается при перенаправлении вывода в файл
или передаче его по каналу (shell pipe).}. или передаче его по каналу (shell pipe).}.
\item Выводятся \emph{все} доступные данные, включая информацию из \item Выводятся \emph{все} доступные данные, включая информацию из
@@ -3680,7 +3683,10 @@ $ journalctl -f
При вызове +journalctl+ без параметров, она выводит все сообщения, начиная с При вызове +journalctl+ без параметров, она выводит все сообщения, начиная с
самого первого из сохраненных. Разумеется, это огромный объем информации. На самого первого из сохраненных. Разумеется, это огромный объем информации. На
практике иногда бывает достаточно ограничиться сообщениями, сгенерированными с практике иногда бывает достаточно ограничиться сообщениями, сгенерированными с
момента последней загрузки системы: момента последней загрузки системы\footnote{Прим. перев.: Начиная с systemd
версии 206, синтаксис опции <<+-b+>> был расширен: теперь она позволяет
просматривать логи не~только за текущую, но и за предыдущие загрузки, например,
<<+-b -1+>>~--- прошлая загрузка, <<+-b -2+>>~--- позапрошлая и т.д.}:
\begin{Verbatim} \begin{Verbatim}
$ journalctl -b $ journalctl -b
\end{Verbatim} \end{Verbatim}
@@ -3999,19 +4005,19 @@ CPUShares=1500
основного файла. Все вышесказанное относится и к другим примерам из этого основного файла. Все вышесказанное относится и к другим примерам из этого
раздела.}. Сохраняем файл, приказываем systemd перечитать конфигурацию, и раздела.}. Сохраняем файл, приказываем systemd перечитать конфигурацию, и
перезапускаем Apache, чтобы настройки вступили в силу\footnote{Прим. перев.: перезапускаем Apache, чтобы настройки вступили в силу\footnote{Прим. перев.:
systemd версий до 197 включительно, не~имел штатного механизма для изменения systemd версий до 197 (включительно) не~имел штатного механизма для изменения
параметров контрольных групп <<на лету>> (без перезапуска службы). Но вы можете параметров контрольных групп <<на лету>> (без перезапуска службы). Если у вас
узнать контрольную группу службы командой наподобие все же возникнет такая необходимость, вы можете узнать контрольную группу службы
+systemctl show -p ControlGroup avahi-daemon.service+, и выполнить настройки командой +systemctl show -p ControlGroup имя_службы.service+, и выполнить
любым удобным для вас способом, например, через запись значений в псевдофайлы требуемые настройки напрямую через запись значений в псевдофайлы cgroupfs
cgroupfs (разумеется, при следующем запуске службы к ней будут применены (разумеется, при следующем запуске службы к ней будут применены параметры,
параметры, указанные в конфигурационном файле). В версиях systemd со 198 по 204, указанные в конфигурационном файле). В версиях systemd со 198 по 204,
в программе +systemctl+ поддерживались команды +set-cgroup-attr+, программа +systemctl+ поддерживала команды +set-cgroup-attr+,
+unset-cgroup-attr+ и +get-cgroup-attr+, позволявшие манипулировать практически +unset-cgroup-attr+ и +get-cgroup-attr+, позволявшие манипулировать настройками
всеми параметрами контрольных групп. Начиная с systemd 205, они были заменены контрольных групп. Начиная с systemd 205, они были заменены командой
командой +set-property+. Установленных таким образом параметры сохраняются во +set-property+, работающей с параметрами конфигурации юнитов. Установленные
вспомогательных конфигурационных файлах в +.d+-каталогах (см. примечание через +systemctl+ настройки сохраняются во вспомогательных конфигурационных
выше).}: файлах, которые размещаются в +.d+-каталогах (см. примечание выше).}:
\begin{Verbatim} \begin{Verbatim}
systemctl daemon-reload systemctl daemon-reload
systemctl restart httpd.service systemctl restart httpd.service
@@ -4139,7 +4145,7 @@ BlockIOReadBandwith=/var/log 5M
недостаточно~--- допустим, вам нужно задать низкоуровневую настройку cgroups, недостаточно~--- допустим, вам нужно задать низкоуровневую настройку cgroups,
для которой мы (пока) не~добавили высокоуровневого аналога. На этот случай мы для которой мы (пока) не~добавили высокоуровневого аналога. На этот случай мы
предусмотрели универсальных механизм задания таких опций в конфигурационных предусмотрели универсальных механизм задания таких опций в конфигурационных
файлах юнитов\footnote{Прим. перев.: Описываемый механизм управления файлах юнитов\footnote{Прим. перев.: Описываемый здесь механизм управления
низкоуровневыми настройками контрольных групп (+ControlGroupAttribute=+) низкоуровневыми настройками контрольных групп (+ControlGroupAttribute=+)
присутствовал в systemd до 204 версии включительно. Начиная с версии 205, он был присутствовал в systemd до 204 версии включительно. Начиная с версии 205, он был
удален по требованию разработчиков cgroups. Также были удалены возможности удален по требованию разработчиков cgroups. Также были удалены возможности
@@ -4429,8 +4435,12 @@ systemd 197 (и, соответственно, с Fedora~19), мы добави
в systemd простейшим контейнерным менеджером~--- в systemd простейшим контейнерным менеджером~---
\hyperref[sec:chroots]{systemd-nspawn}. Мы надеемся, что соответствующая \hyperref[sec:chroots]{systemd-nspawn}. Мы надеемся, что соответствующая
возможность вскоре появится и в возможность вскоре появится и в
\href{http://libvirt.org/drvlxc.html}{libvirt-lxc}. А пока, за отсутствие \href{http://libvirt.org/drvlxc.html}{libvirt-lxc}\footnote{Прим. перев.:
альтернатив, рассмотрим использование этого механизма на примере systemd-nspawn. \href{https://www.redhat.com/archives/libvir-list/2013-July/msg00825.html}{Патчи},
реализующие эту возможность, были подготовлены и приняты разработчиками libvirt
во второй декаде июля 2013 г., и входят в libvirt начиная с версии~1.1.1.}. А
пока, за отсутствием альтернатив, рассмотрим использование этого механизма на
примере systemd-nspawn.
Начнем с установки файлов ОС контейнера в выбранный каталог. Детальное Начнем с установки файлов ОС контейнера в выбранный каталог. Детальное
рассмотрение этого вопроса выходит далеко за рамки нашего обсуждения, и рассмотрение этого вопроса выходит далеко за рамки нашего обсуждения, и
@@ -4476,12 +4486,13 @@ KillMode=process
перев.: Ручной запуск на хосте соответствующей команды +systemd-nspawn -b+ во перев.: Ручной запуск на хосте соответствующей команды +systemd-nspawn -b+ во
время работы такой службы просто создаст \emph{еще один контейнер}. Хотя время работы такой службы просто создаст \emph{еще один контейнер}. Хотя
корневой каталог у них один и тот же, пространства имен (например, списки корневой каталог у них один и тот же, пространства имен (например, списки
процессов) у каждого будут свои. Впрочем, данная задача может быть решена процессов) у каждого будут свои. Подключиться к работающему контейнеру можно при
утилитой +nsenter+, которая должна войти в следующий релиз util-linux помощи утилиты +nsenter+, которая включена в состав util-linux начиная с версии
(предположительно, 2.23).}. Чтобы исправить это упущение, настроим на контейнере 2.23 (на момент написания исходной статьи этой утилиты еще не~существовало).}.
SSH-сервер, причем таким образом, что подключение к его порту активировало весь Чтобы исправить это упущение, настроим на контейнере SSH-сервер, причем таким
контейнер, а затем активировало сервер, работающий внутри. Начнем с того, что образом, что подключение к его порту активировало весь контейнер, а затем
прикажем хосту слушать порт SSH для контейнера. Для этого создадим на хосте файл активировало сервер, работающий внутри. Начнем с того, что прикажем хосту
слушать порт SSH для контейнера. Для этого создадим на хосте файл
+/etc/systemd/system/mycontainer.socket+: +/etc/systemd/system/mycontainer.socket+:
\begin{Verbatim} \begin{Verbatim}
[Unit] [Unit]
@@ -4497,13 +4508,12 @@ ListenStream=23
списки процессов и точек монтирования, но не~сетевые стеки, поэтому порты хоста списки процессов и точек монтирования, но не~сетевые стеки, поэтому порты хоста
и гостей не~должны конфликтовать\footnote{Прим. перев.: Ограниченные возможности и гостей не~должны конфликтовать\footnote{Прим. перев.: Ограниченные возможности
виртуализации сети в +systemd-nspawn+ значительно затрудняют использование виртуализации сети в +systemd-nspawn+ значительно затрудняют использование
описываемой технологии. Ее практическое применение будет иметь смысл после описываемой технологии. Ее практическое применение будет иметь смысл
реализации соответствующей поддержки в lxc-libvirt, либо расширения возможностей либо в lxc-libvirt, либо после расширения возможностей nspawn. Впрочем, опытные
nspawn. Впрочем, опытные администраторы легко могут найти обходные пути, администраторы легко могут найти обходные пути, например: присваивание хосту
например: присваивание хосту дополнительного IP-адреса (безо всякой дополнительного IP-адреса (безо всякой виртуализации, командой +ip addr add+) и
виртуализации, командой +ip addr add+) и привязка слушающих сокетов к конкретным привязка слушающих сокетов к конкретным адресам (в параметре +ListenStream=+
адресам (в параметре +ListenStream=+ сокет-файлов и/или в директиве сокет-файлов и/или в директиве +ListenAddress+ файла +sshd_config+ хоста).}.
+ListenAddress+ файла +sshd_config+ хоста).}.
Пока что systemd, работающий внутри контейнера, не~знает, что делать с тем Пока что systemd, работающий внутри контейнера, не~знает, что делать с тем
сокетами, которые ему передает systemd хоста. Если вы попробуете подключиться к сокетами, которые ему передает systemd хоста. Если вы попробуете подключиться к
@@ -4521,7 +4531,7 @@ nspawn. Впрочем, опытные администраторы легко
+StandardInput=socket+, которые не~задействованы на хосте. Это обусловлено тем +StandardInput=socket+, которые не~задействованы на хосте. Это обусловлено тем
фактом, что внутри контейнера сокет-активация производится в стиле inetd (служба фактом, что внутри контейнера сокет-активация производится в стиле inetd (служба
получает только один сокет, причем замкнутый на ее потоки STDIN и STDOUT), в то получает только один сокет, причем замкнутый на ее потоки STDIN и STDOUT), в то
время как на стороне хоста используется родной стиль активации systemd, при время как на стороне хоста используется штатный стиль активации systemd, при
котором запущенному процессу (в данном случае +systemd-nspawn+) просто котором запущенному процессу (в данном случае +systemd-nspawn+) просто
передаются открытые файловые дескрипторы (+fd+) всех сокетов. Одно из достоинств передаются открытые файловые дескрипторы (+fd+) всех сокетов. Одно из достоинств
такого подхода~--- возможность передавать сразу несколько сокетов, что позволяет такого подхода~--- возможность передавать сразу несколько сокетов, что позволяет
@@ -4573,8 +4583,8 @@ systemd начнет прослушивать TCP-порт 23. При подкл
сокеты, для которых соответствующих юнитов не~найдется, будут сокеты, для которых соответствующих юнитов не~найдется, будут
закрыты\footnote{Прим. перев.: Стоит особо отметить, что описанная технология закрыты\footnote{Прим. перев.: Стоит особо отметить, что описанная технология
работает только для служб, поддерживающих сокет-активацию в режимах inetd (все работает только для служб, поддерживающих сокет-активацию в режимах inetd (все
классические inetd-службы, кроме встроенных) или systemd (зависят от библиотеки классические inetd-службы, кроме встроенных) или systemd (обычно зависят от
+libsystemd-daemon.so+, либо содержат в исходниках заголовочный файл библиотеки +libsystemd-daemon.so+, либо содержат в исходниках заголовочный файл
+sd-daemon.h+). Службы, которые сами открывают себе слушающий сокет и +sd-daemon.h+). Службы, которые сами открывают себе слушающий сокет и
не~содержат кода для приема уже открытого сокета, так активировать нельзя.}, а не~содержат кода для приема уже открытого сокета, так активировать нельзя.}, а
те сокеты, которые будут настроены для прослушивания внутри контейнера, но те сокеты, которые будут настроены для прослушивания внутри контейнера, но
@@ -4728,7 +4738,7 @@ systemd 198, необязательно копировать файл целик
нужно поместить соответствующую символьную ссылку в каталог нужно поместить соответствующую символьную ссылку в каталог
+getty.target.wants/+\footnote{Прим. перев.: Приведенная в оригинале команда +getty.target.wants/+\footnote{Прим. перев.: Приведенная в оригинале команда
+systemctl enable serial-getty@ttyS2.service+ работать не~будет (по крайней +systemctl enable serial-getty@ttyS2.service+ работать не~будет (по крайней
мере, в версиях до 204 включительно). Подробнее мере, в версиях до 206 включительно). Подробнее
см.~примечание~\ref{ftn:enableserial}.}: см.~примечание~\ref{ftn:enableserial}.}:
\begin{Verbatim} \begin{Verbatim}
# ln -s /usr/lib/systemd/system/serial-getty@.service \ # ln -s /usr/lib/systemd/system/serial-getty@.service \
@@ -5475,7 +5485,12 @@ systemd/udev\footnote{Прим. перев.: См. коммит
\item Имена интерфейсов остаются неизменными при добавлении или \item Имена интерфейсов остаются неизменными при добавлении или
удалении устройств. удалении устройств.
\item Имена интерфейсов остаются неизменными при обновлении/изменении \item Имена интерфейсов остаются неизменными при обновлении/изменении
ядра и драйверов. ядра и драйверов\footnote{Прим. перев.: На самом деле, не~все
так просто. Если, в результате обновлении ядра/драйверов, в них
появится ранее отсутствовавшая поддержка вашей прошивки,
не~исключена вероятность, что имена некоторых интерфейсов
перейдут с третьей схемы на первую или вторую. Будьте готовы к
такому развитию событий.}.
\item Имена интерфейсов остаются неизменными при замене сломанных \item Имена интерфейсов остаются неизменными при замене сломанных
сетевых карт новыми. сетевых карт новыми.
\item Имена формируются автоматически, безо всякого вмешательства \item Имена формируются автоматически, безо всякого вмешательства
@@ -5529,7 +5544,8 @@ cp /usr/lib/udev/rules.d/80-net-name-slot.rules /etc/udev/rules.d/80-net-name-sl
Кроме того, начиная с systemd версии 199, поддерживается параметр загрузки Кроме того, начиная с systemd версии 199, поддерживается параметр загрузки
+net.ifnames=0+, позволяющий отключить механизм предсказуемых имен (указание его +net.ifnames=0+, позволяющий отключить механизм предсказуемых имен (указание его
в конфигурации загрузчика эквивалентно первому из вышеперечисленных вариантов). в файле конфигурации загрузчика эквивалентно первому из вышеперечисленных
вариантов).
\subsection{Как именно работает новая схема?} \subsection{Как именно работает новая схема?}