Вход:  Пароль:  
FreeSource: DmitrijMaslennikov ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Это старая версия DmitrijMaslennikov за 2008-01-28 18:31:08..

Здесь я собираюсь описать мои наработки по внедрению init-ng в Alt Linux.
Главным требованием в работе буду считать обеспечение максимальной совместимости с текущей системой инициализации.
Главным успехом — заметное увеличение скорости загрузки.
Работа сильно перекликается с TZ/initscripts.

Профилирование

Первое, что необходимо сделать — это замерить текущее время запуска системы. Ниже я привожу способ, который показался мне найболее простым и действенным.
Инициализация системы целиком написана на sh скриптах. Они запускаются процессом /sbin/init непосредственно. Что именно запускается можно посмотреть в файле настройки /etc/inittab. Формат файла описан в соответствующем руководстве. Из него следует, что основные действия производят всего два скрипта /etc/rc.d/rc.sysinit и /etc/rc.d/rc. Последний запускается с параметром соответствующим текущему runlevel. Как правило, для десктопа, это 5. Оба этих скрипта запускают другие скрипты из директории /etc/rc.d/init.d.
Самый простой способ, который пришел мне в голову, заключается в том, что раз все скрипты выполняются интерпретатором записанным в первой строке файла, то можно его подменить. Но вый интерпретатор просто запускает bash, ждет завершения, а потом записывает время выполнения. Одна тонкость связана с тем, что время выполнения части скриптов корень файловой системы доступен только для чтения, поэтому необходимо подождать некоторое время, пока он не будет примонтирован как rw. Программа по замеру времени пишется легко на C++ и, думаю в дополнительных разъяснениях не нуждается (сюда можно как-нибудь файл залить???)
Компилируем ее командой
$g++ rinit.cpp -o rinit -lboost_filesystem
Полученный в результате бинарник кидаем в /bin. И заменяем /bin/bash или /bin/sh на /bin/rinit в первых строках интересующих нас файлов (я это сделал скриптом; могу выложить). После перезагрузки результат можно посмотреть с помощью следующего скрипта (залью его когда узнаю как или куда).


Это пока все о профилировании. Тот же способ использовался мной и при профилировании init-ng.

Установка init-ng

Проблем с компиляцией и установкой init-ng у меня не возникло. Сборка осуществляется с помощью cmake. Я собрал и rpm для Alt Linux, но пока не выкладываю его, так как негде :). В результате сборки init-ng получаем просто бинарник который приспособлен к тому, чобы стартовать первым в системе. Но чтобы система правильно инициализировалась необходимо большое количество скриптов, аналогичных тем, что лежат в /etc/rc.d/init.d Они в init-ng пишутся не на bash, а в специальном формате, который достаточно понятно описан на их сайте. Набор таких файлов (они называются ifiles) доступен на сайте проекта, но нам они не подходят, так как они сильно зависят от дистрибутива, а Alt Linux в числе поддерживаемых не значится. Правда, замечу, что почти все нужное мне заработало после недолгой обработки предлагаемых на сайте файлов. Но нашей целью является полная совместимость с существующей системой. Поэтому мы напишем такие файлы сами. Тем более что это не сложно.
Итак, немного теории.
В init-ng существует два типа запускаемых при старте служб


Все важное, на мой взгляд, об init-ng, чтобы не искать информацию повсюду


Ссылок на эту страницу нет


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]