From 84177721dfa1ab7c6cbe71f56e1e81dd7927901c Mon Sep 17 00:00:00 2001 From: nnz1024 <0comffdiz@inbox.ru> Date: Tue, 27 Aug 2013 19:08:00 +0400 Subject: [PATCH] Version v15.7 (2013-08-27 19:08) [AUTO] --- s4a.tex | 106 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 61 insertions(+), 45 deletions(-) diff --git a/s4a.tex b/s4a.tex index 40d4cf1..3c581d1 100644 --- a/s4a.tex +++ b/s4a.tex @@ -2662,8 +2662,9 @@ Linux уже очень давно, но при этом практически простыми в использовании, чтобы заинтересовать администраторов и апстримных разработчиков. Вот краткий перечень наиболее интересных возможностей\footnote{Прим. перев.: В приведенном здесь списке не~упомянута -встроенная в systemd поддержка фильтров seccomp, так как она была добавлена уже -после написания исходной статьи.}: +встроенная в systemd поддержка фильтров seccomp (опция +SystemCallFilter=+), +так как она была добавлена уже после написания исходной статьи, в выпуске +systemd 187.}: \begin{itemize} \item Изолирование служб от сети \item Предоставление службам независимых каталогов +/tmp+ @@ -2674,9 +2675,11 @@ Linux уже очень давно, но при этом практически \end{itemize} Все эти опции описаны в 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, вне зависимости от использования SELinux или любой другой реализации MAC. @@ -3338,8 +3341,8 @@ StartLimitAction=reboot-force Да, и еще: если у вас возникнет вопрос, имеется ли в вашей системе аппаратный таймер~--- скорее всего да, если ваш компьютер не~очень старый. Чтобы получить точный ответ, вы можете воспользоваться утилитой -\href{http://karelzak.blogspot.de/2012/05/eject1-sulogin1-wdctl1.html}{wdctl}, -включенной в последний релиз util-linux\footnote{Прим. перев.: Утилита wdctl +\hreftt{http://karelzak.blogspot.de/2012/05/eject1-sulogin1-wdctl1.html}{wdctl}, +включенной в последний релиз util-linux\footnote{Прим. перев.: Утилита +wdctl+ присутствует в util-linux, начиная с версии~2.22, которая, на~момент написания этих строк, еще не~вышла.}. Эта программа выведет всю необходимую информацию о вашем аппаратном сторожевом таймере. @@ -3499,7 +3502,7 @@ getty\footnote{Отметим, что +systemctl enable+ \emph{для экзем /etc/systemd/system/getty.target.wants/serial-getty@ttyS2.service ; systemctl daemon-reload}.}\footnote{\label{ftn:enableserial}Прим. перев.: На самом деле, работать с символьными ссылками придется даже в современных версиях systemd (на -момент написания этих строк, последней является версия 204), так как +момент написания этих строк, последней является версия 206), так как разработчики забыли включить в файл +serial-getty@.service+ секцию +[Install]+, в результате чего попытка выполнения +systemctl enable+ для экземпляра соответствующей службы ведет к закономерной ошибке. Впрочем, исправить это @@ -3617,7 +3620,7 @@ Journal был включен в Fedora начиная с F17. В Fedora~18 jour \item Все отметки времени сформированы с учетом вашего часового пояса. \item Для навигации по тексту используется просмотрщик (pager), по умолчанию +less+\footnote{Прим. перев.: В инструментах systemd, - включая journalctl, просмотрщик включается только при прямом + включая +journalctl+, просмотрщик включается только при прямом выводе на экран, и отключается при перенаправлении вывода в файл или передаче его по каналу (shell pipe).}. \item Выводятся \emph{все} доступные данные, включая информацию из @@ -3680,7 +3683,10 @@ $ journalctl -f При вызове +journalctl+ без параметров, она выводит все сообщения, начиная с самого первого из сохраненных. Разумеется, это огромный объем информации. На практике иногда бывает достаточно ограничиться сообщениями, сгенерированными с -момента последней загрузки системы: +момента последней загрузки системы\footnote{Прим. перев.: Начиная с systemd +версии 206, синтаксис опции <<+-b+>> был расширен: теперь она позволяет +просматривать логи не~только за текущую, но и за предыдущие загрузки, например, +<<+-b -1+>>~--- прошлая загрузка, <<+-b -2+>>~--- позапрошлая и т.д.}: \begin{Verbatim} $ journalctl -b \end{Verbatim} @@ -3999,19 +4005,19 @@ CPUShares=1500 основного файла. Все вышесказанное относится и к другим примерам из этого раздела.}. Сохраняем файл, приказываем systemd перечитать конфигурацию, и перезапускаем Apache, чтобы настройки вступили в силу\footnote{Прим. перев.: -systemd версий до 197 включительно, не~имел штатного механизма для изменения -параметров контрольных групп <<на лету>> (без перезапуска службы). Но вы можете -узнать контрольную группу службы командой наподобие -+systemctl show -p ControlGroup avahi-daemon.service+, и выполнить настройки -любым удобным для вас способом, например, через запись значений в псевдофайлы -cgroupfs (разумеется, при следующем запуске службы к ней будут применены -параметры, указанные в конфигурационном файле). В версиях systemd со 198 по 204, -в программе +systemctl+ поддерживались команды +set-cgroup-attr+, -+unset-cgroup-attr+ и +get-cgroup-attr+, позволявшие манипулировать практически -всеми параметрами контрольных групп. Начиная с systemd 205, они были заменены -командой +set-property+. Установленных таким образом параметры сохраняются во -вспомогательных конфигурационных файлах в +.d+-каталогах (см. примечание -выше).}: +systemd версий до 197 (включительно) не~имел штатного механизма для изменения +параметров контрольных групп <<на лету>> (без перезапуска службы). Если у вас +все же возникнет такая необходимость, вы можете узнать контрольную группу службы +командой +systemctl show -p ControlGroup имя_службы.service+, и выполнить +требуемые настройки напрямую через запись значений в псевдофайлы cgroupfs +(разумеется, при следующем запуске службы к ней будут применены параметры, +указанные в конфигурационном файле). В версиях systemd со 198 по 204, +программа +systemctl+ поддерживала команды +set-cgroup-attr+, ++unset-cgroup-attr+ и +get-cgroup-attr+, позволявшие манипулировать настройками +контрольных групп. Начиная с systemd 205, они были заменены командой ++set-property+, работающей с параметрами конфигурации юнитов. Установленные +через +systemctl+ настройки сохраняются во вспомогательных конфигурационных +файлах, которые размещаются в +.d+-каталогах (см. примечание выше).}: \begin{Verbatim} systemctl daemon-reload systemctl restart httpd.service @@ -4139,7 +4145,7 @@ BlockIOReadBandwith=/var/log 5M недостаточно~--- допустим, вам нужно задать низкоуровневую настройку cgroups, для которой мы (пока) не~добавили высокоуровневого аналога. На этот случай мы предусмотрели универсальных механизм задания таких опций в конфигурационных -файлах юнитов\footnote{Прим. перев.: Описываемый механизм управления +файлах юнитов\footnote{Прим. перев.: Описываемый здесь механизм управления низкоуровневыми настройками контрольных групп (+ControlGroupAttribute=+) присутствовал в systemd до 204 версии включительно. Начиная с версии 205, он был удален по требованию разработчиков cgroups. Также были удалены возможности @@ -4429,8 +4435,12 @@ systemd 197 (и, соответственно, с Fedora~19), мы добави в systemd простейшим контейнерным менеджером~--- \hyperref[sec:chroots]{systemd-nspawn}. Мы надеемся, что соответствующая возможность вскоре появится и в -\href{http://libvirt.org/drvlxc.html}{libvirt-lxc}. А пока, за отсутствие -альтернатив, рассмотрим использование этого механизма на примере systemd-nspawn. +\href{http://libvirt.org/drvlxc.html}{libvirt-lxc}\footnote{Прим. перев.: +\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+ во время работы такой службы просто создаст \emph{еще один контейнер}. Хотя корневой каталог у них один и тот же, пространства имен (например, списки -процессов) у каждого будут свои. Впрочем, данная задача может быть решена -утилитой +nsenter+, которая должна войти в следующий релиз util-linux -(предположительно, 2.23).}. Чтобы исправить это упущение, настроим на контейнере -SSH-сервер, причем таким образом, что подключение к его порту активировало весь -контейнер, а затем активировало сервер, работающий внутри. Начнем с того, что -прикажем хосту слушать порт SSH для контейнера. Для этого создадим на хосте файл +процессов) у каждого будут свои. Подключиться к работающему контейнеру можно при +помощи утилиты +nsenter+, которая включена в состав util-linux начиная с версии +2.23 (на момент написания исходной статьи этой утилиты еще не~существовало).}. +Чтобы исправить это упущение, настроим на контейнере SSH-сервер, причем таким +образом, что подключение к его порту активировало весь контейнер, а затем +активировало сервер, работающий внутри. Начнем с того, что прикажем хосту +слушать порт SSH для контейнера. Для этого создадим на хосте файл +/etc/systemd/system/mycontainer.socket+: \begin{Verbatim} [Unit] @@ -4497,13 +4508,12 @@ ListenStream=23 списки процессов и точек монтирования, но не~сетевые стеки, поэтому порты хоста и гостей не~должны конфликтовать\footnote{Прим. перев.: Ограниченные возможности виртуализации сети в +systemd-nspawn+ значительно затрудняют использование -описываемой технологии. Ее практическое применение будет иметь смысл после -реализации соответствующей поддержки в lxc-libvirt, либо расширения возможностей -nspawn. Впрочем, опытные администраторы легко могут найти обходные пути, -например: присваивание хосту дополнительного IP-адреса (безо всякой -виртуализации, командой +ip addr add+) и привязка слушающих сокетов к конкретным -адресам (в параметре +ListenStream=+ сокет-файлов и/или в директиве -+ListenAddress+ файла +sshd_config+ хоста).}. +описываемой технологии. Ее практическое применение будет иметь смысл +либо в lxc-libvirt, либо после расширения возможностей nspawn. Впрочем, опытные +администраторы легко могут найти обходные пути, например: присваивание хосту +дополнительного IP-адреса (безо всякой виртуализации, командой +ip addr add+) и +привязка слушающих сокетов к конкретным адресам (в параметре +ListenStream=+ +сокет-файлов и/или в директиве +ListenAddress+ файла +sshd_config+ хоста).}. Пока что systemd, работающий внутри контейнера, не~знает, что делать с тем сокетами, которые ему передает systemd хоста. Если вы попробуете подключиться к @@ -4521,7 +4531,7 @@ nspawn. Впрочем, опытные администраторы легко +StandardInput=socket+, которые не~задействованы на хосте. Это обусловлено тем фактом, что внутри контейнера сокет-активация производится в стиле inetd (служба получает только один сокет, причем замкнутый на ее потоки STDIN и STDOUT), в то -время как на стороне хоста используется родной стиль активации systemd, при +время как на стороне хоста используется штатный стиль активации systemd, при котором запущенному процессу (в данном случае +systemd-nspawn+) просто передаются открытые файловые дескрипторы (+fd+) всех сокетов. Одно из достоинств такого подхода~--- возможность передавать сразу несколько сокетов, что позволяет @@ -4573,8 +4583,8 @@ systemd начнет прослушивать TCP-порт 23. При подкл сокеты, для которых соответствующих юнитов не~найдется, будут закрыты\footnote{Прим. перев.: Стоит особо отметить, что описанная технология работает только для служб, поддерживающих сокет-активацию в режимах inetd (все -классические inetd-службы, кроме встроенных) или systemd (зависят от библиотеки -+libsystemd-daemon.so+, либо содержат в исходниках заголовочный файл +классические inetd-службы, кроме встроенных) или systemd (обычно зависят от +библиотеки +libsystemd-daemon.so+, либо содержат в исходниках заголовочный файл +sd-daemon.h+). Службы, которые сами открывают себе слушающий сокет и не~содержат кода для приема уже открытого сокета, так активировать нельзя.}, а те сокеты, которые будут настроены для прослушивания внутри контейнера, но @@ -4728,7 +4738,7 @@ systemd 198, необязательно копировать файл целик нужно поместить соответствующую символьную ссылку в каталог +getty.target.wants/+\footnote{Прим. перев.: Приведенная в оригинале команда +systemctl enable serial-getty@ttyS2.service+ работать не~будет (по крайней -мере, в версиях до 204 включительно). Подробнее +мере, в версиях до 206 включительно). Подробнее см.~примечание~\ref{ftn:enableserial}.}: \begin{Verbatim} # ln -s /usr/lib/systemd/system/serial-getty@.service \ @@ -5475,7 +5485,12 @@ systemd/udev\footnote{Прим. перев.: См. коммит \item Имена интерфейсов остаются неизменными при добавлении или удалении устройств. \item Имена интерфейсов остаются неизменными при обновлении/изменении - ядра и драйверов. + ядра и драйверов\footnote{Прим. перев.: На самом деле, не~все + так просто. Если, в результате обновлении ядра/драйверов, в них + появится ранее отсутствовавшая поддержка вашей прошивки, + не~исключена вероятность, что имена некоторых интерфейсов + перейдут с третьей схемы на первую или вторую. Будьте готовы к + такому развитию событий.}. \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, поддерживается параметр загрузки +net.ifnames=0+, позволяющий отключить механизм предсказуемых имен (указание его -в конфигурации загрузчика эквивалентно первому из вышеперечисленных вариантов). +в файле конфигурации загрузчика эквивалентно первому из вышеперечисленных +вариантов). \subsection{Как именно работает новая схема?}