[devel] [RFC] make-initrd

Alexey Gladkov legion на altlinux.ru
Вт Янв 14 17:58:43 MSK 2014


Привет!

Недавно мне пришла мысль о переделке runtime части make-initrd с целью
повышения гибкости и увеличения сфер применения.

Первая идея состоит в том, чтобы использовать в initramfs не скрипт
притворяющий init'ом, а использовать там вполне себе настоящий init.
Проведя некоторые исследования я пришёл к выводу, что обычный
немодифицированный sysv-init может уже рассматриваться как вполне себе
встраиваемое решение: sysv-init ~40K, upstart ~160K, systemd ~1,1M.

Ещё одна особенность sysv-init, которую я обнаружил у него это
возможность запустить вместо себя совершенно любой процесс.
Особенность очень полезная применительно к задачам в initramfs.

В случае использования sysv-init все стадии работы initramfs
превращаются в сервисы с зависимостями между собой (я использовал LSB
заголовки). Это поможет решить ряд вопросов с очисткой системы перед
переходом в реальную систему (например lo). А также наоборот с
пробросом в реальную систему сервисов (например plymouth) или ресурсов.

Потому что сейчас мы фактически изобретаем всё тоже самое: у нас есть
модули, у нас есть cleanup-стадия, убийство лишних процессов и т.д.
Вот только написано это очень примитивно.

Также этот подход позволит упростить некоторые существующие решения на
основе initramfs позволяя добавлять и отключать любые или почти любые
стадии/сервисы.

Для того чтобы понять возможна ли реализация этого на практике я
сделал очень грубый прототип:

http://git.altlinux.org/people/legion/packages/make-initrd.git?a=shortlog;h=refs/heads/sysinit

В нём есть поддержка загрузки только с обычного раздела и
тестировалось это лишь в qemu, но если кому интересно, то получить
представление о загрузке можно. Этот код сделан в основном для того
чтобы можно было посмотреть на новую компоновку initramfs.

-- 
Rgrds, legion



Подробная информация о списке рассылки Devel