14. Самодокументированный процесс загрузки

Нам часто приходится слышать жалобы, что процесс загрузки при использовании systemd очень сложен для понимания. Не могу с этим согласиться. Более того, я берусь даже утверждать обратное: по сравнению с тем, что мы имели раньше (когда для того, чтобы разобраться в загрузке, нужно было иметь хорошие навыки программирования на языке Bourne Shell), процесс загрузки стал более простым и прозрачным. Но определенная доля истины в этом критическом замечании все же есть: даже опытному Unix-администратору при переходе на systemd нужно изучить некоторые новые для себя вещи. Мы, разработчики systemd, обязаны максимально упростить такое обучение. Решая поставленную задачу, мы подготовили для вас кое-какие приятные сюрпризы, и предоставили хорошую документацию даже там, где это казалось невозможным. Уже сейчас systemd располагает довольно обширной документацией, включая страницы руководства (на данный момент, их около сотни), wiki-сайт проекта, а также ряд статей в моем блоге. Тем не менее, большое количество документации еще не гарантирует простоты понимания. Огромные груды руководств выглядят пугающе, и неподготовленный читатель не может разобраться, с какого места ему начинать чтение, если его интересует просто общая концепция. Чтобы решить данную проблему, мы добавили в systemd небольшую, но очень изящную возможность: самодокументированный38 процесс загрузки. Что мы под этим подразумеваем? То, что для каждого элемента процесса загрузки теперь имеется документация, прозрачно привязанная к этому элементу, так что ее поиск не представляет трудности. Иными словами, все штатные юниты systemd (которые, собственно, и формируют процесс загрузки, вызывая соответствующие программы) включают ссылки на страницы документации, описывающие назначение юнита/программы, используемые ими конфигурационные файлы и т.д. Если пользователь хочет узнать, для чего предназначен какой-либо юнит, какова его роль в процессе загрузки и как его можно настроить, может получить ссылки на соответствующую документацию, просто воспользовавшись давно известной командой systemctl status. Возьмем для примера systemd-logind.service:


На первый взгляд, в выводе этой команды почти ничего не изменилось. Но если вы вглядитесь повнимательнее, то заметите новое поле Docs, в котором приведены ссылки на документацию по данной службе. В нашем случае случае это два URI, ссылающихся на man-страницы, и один URL, указывающий на веб-страницу. man-страницы описывают соответственно предназначение службы и ее настройки, а веб-страница — базовые концепции, которые реализуются этой службой.
Тем, кто использует современные графические эмуляторы терминала, чтобы открыть соответствующую страницу документации, достаточно щелкнуть мышью по URI39. Иными словами, доступ к документации компонентов загрузки становится предельно простым: достаточно вызвать systemctl status, после чего щелкнуть по полученным ссылкам. Если же вы используете не графический эмулятор терминала (где можно просто щелкнуть по URI), а настоящий терминал, наличие URI где-то в середине вывода systemctl status вряд ли покажется вам удобным. Чтобы упростить обращение к соответствующим страницам документации без использования мыши и копирования/вставки, мы ввели новую команду


systemctl help systemd-logind.service


которая просто откроет в вашем терминале соответствующие man-страницы. URI, ссылающиеся на документацию, формируются в соответствии со страницей руководства uri(7). Поддерживаются схемы http/https (URL для веб-страниц) и man/info (локальные страницы руководства). Разумеется, добавленная нами возможность не обеспечивает полной очевидности абсолютно всего, хотя бы потому, что пользователь должен как минимум знать про команду systemctl status (а также вообще про программу systemctl и про то, что такое юнит). Но при наличии этих базовых знаний, пользователю уже не составит труда получить информацию по интересующим его вопросам.
Мы надеемся, что добавленный нами механизм для связи работающего кода и соответствующей документации станет значительным шагом к полностью прозрачному и предельно простому для понимания процессу загрузки. Описанная функциональность частично присутствует в Fedora 17, а в полном объеме она будет представлена в Fedora 18.
В завершение, стоит отметить, что использованная нами идея не является такой уж новой: в SMF, системе инициализации Solaris, уже используется практика указания ссылок на документацию в описании службы. Однако, в Linux такой подход является принципиально новым, и systemd сейчас является наиболее документированной и прозрачной системой загрузки для данной платформы. Если вы занимаетесь разработкой или сопровождением пакетов и создаете файл конфигурации юнита, пожалуйста, включите в него ссылки на документацию. Это очень просто: достаточно добавить в секции [Unit] поле Documentation= и перечислить в нем соответствующие URI. Подробнее об этом поле см. на странице руководства systemd.unit(5). Чем больше будет документированных юнитов, тем проще станет работа системного администратора. (В частности, я уже направил в FPC предложение внести соответствующие пожелания в нормативные документы, регулирующие подготовку пакетов для Fedora.)

Да, кстати: если вас интересует общий обзор процесса загрузки systemd, то вам стоит обратить внимание на новую страницу руководства, где представлена псевгдорафическая потоковая диаграмма, описывающая процесс загрузки и роль ключевых юнитов.

Содержание
Вперед - Сторожевые таймеры
Назад - Отчет о состоянии службы и ее журнал