Сайт | Скачать | Видео | Wiki

Автор Тема: LiveInit - каким он должен быть  (Прочитано 13879 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zay

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1536
  • Репутация: +25/-0
  • Автор темы
Re:LiveInit - каким он должен быть
« Ответ #15 : 10 Январь 2014, 11:56:46 »
Цитата
Тема не для технических подробностей и не для выбора основы (porteus / dracut / etc.), а для обсуждения общего функционала.
Это необходимо. Главное на данном этапе - определить что именно хотелось бы получить в результате.
Описанный в теме функционал, как мне кажется, можно без особых сложностей приделать почти к любому варианту Init'а.
Но пока нет ясной запланированной цели - никакой совместной работы не получится.


Первый важный вопрос - какие задачи должен решать универсальный Live Initrd.
В шапке темы описан "минимальный функционал". Есть возражения и/или дополнения?
Могу аргументировать пользу каждого пункта.


Одна из основных задач при создании универсального Initrd - простое и логичное, интуитивно понятное управление.

Объяснить новичку суть и преимущества многослойной ФС не так уж сложно.
Но дальше объяснений дело не пойдёт, потому что простого и удобного способа использовать неспециализированный Linux-дистрибутив с корневой ФС типа AUFS не существует.

Сложнее объяснить особенности конкретной реализации - "сохранёнки", "модули" и т.п. Расширения файлов, нагромождение параметров, не очевидные префиксы - в этом трудно разобраться даже человеку, хорошо знающему суть, но не знакомому с конкретной реализацией. Это надо обязательно исправить, снизить порог вхождения в Linux на многослойной ФС.

Управление LiveInit'ом должно быть максимально простым и очевидным, чтобы в нём можно было легко разобраться.
Параметры rw= / ro= , как мне кажется, наиболее простой и понятный способ управления. Их назначение даже объяснять не надо, и так понятно что к чему.


А использование конфиг. файла пригодится, скорее всего, разработчикам конкретных дистрибутивов. Типовой конфиг. файл можно поставлять вместе с системой, или же формировать при установке (чтобы учесть особенности реализации системы).

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #16 : 10 Январь 2014, 12:39:06 »
Тема не для технических подробностей и не для выбора основы
разделите на свой вкус
Первый важный вопрос - какие задачи должен решать универсальный Live Initrd.
С porteus почти все получилось. Не проще ли обсудить, чего в нем лишнее , чего не хватает...
Например : zz - в PRA спорное решение
Зачем изобретать велосипед?

Цитата
  Возможность подключить в верхний (перезаписываемый) слой файл или раздел с ФС ext2/3/4, либо каталог на таком разделе одним параметром.
http://wiki.puppyrus.org/soft/porteus-initrd#changes
Цитата
  Возможность подключить в нижние (не перезаписываемые) слои любое количество файлов или разделов с ФС ext2/3/4 или SquashFS (независимо от расширения) одним параметром.
Как расставишь по алфавиту - так и будет
Цитата
  Возможность скопировать все ReadOnly-слои в оперативную память (если её достаточно) и отмонтировать загрузочный раздел.
http://wiki.puppyrus.org/soft/porteus-initrd#copy2ram
Цитата
  Возможность задать параметром размер tmpfs для /tmp (в случае если не указан слой RW - он будет создан внутри /tmp).
Зачем? http://wiki.puppyrus.org/soft/porteus-initrd#ramsize
Цитата
  Возможность чтения параметров не только из строки загрузчика, но и из конфиг. файла на диске.
Зачем?  
Цитата
  При желании можно добавить загрузку по сети и др. "плюшки", если получится.
Есть, но желания пока нет
Цитата
Информацию о файловой системе Init должен получать сам, а не ориентироваться на расширение файла.
file файл  Зачем?
« Последнее редактирование: 10 Январь 2014, 12:45:21 от sfs »

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:LiveInit - каким он должен быть
« Ответ #17 : 10 Январь 2014, 13:32:55 »
Префикс - это часть названия параметров. С ним правильнее.
Что делать, когда название пересечется с параметрами ядра или которое может использоваться в специфике того или иного дистрибутива?

Предложенная схема с rw=, ro= - не удовлетворяет желаемым вариантам использования. Почему - я написал ранее.

Из наблюдения обсуждений на форуме - функционал porteus init  для большинства вариантов использования puppy более чем за глаза.
Для  magos - он не достаточен.

Для перспективы - функционал magos тоже хотелось бы сделать еще более гибким.

Поэтому, если ориентироваться при построении универсального решения  - на потребность конкретно в данный момент и для конкретного варианта использования, то у нас не получится универсальности и работы совместно. Гораздо проще будет просто взять функционал magos или porteus, убрать из него специфические вещи, сделать скрипты сборки под любое ядро и все. Но в таком случае мне почти не интересно работать, потому что это все уже есть. А тестировать работоспособность самостоятельно для других дистрибутивов будет сложно ввиду их многообразия.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #18 : 10 Январь 2014, 14:21:39 »
porteus init  для большинства вариантов использования puppy более чем за глаза.
Для  magos - он не достаточен.
Просто пока есть более насущные проблемы
Сетевые и пр. фичи magos мне интересны, но пока руки не дошли
взять функционал magos или porteus, убрать из него специфические вещи, сделать скрипты сборки под любое ядро и все.
porteus в этом объеме скоро выложу. Сборка полу костыльно - ручная  :'(
Но в таком случае мне почти не интересно работать, потому что это все уже есть.
Написать с нуля - хорошо бы, но долго и можно надорваться (мы уже >полгода обсуждаем, а результат 0)
Если Вас вдохновляет - делайте. Чем смогу - помогу

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:LiveInit - каким он должен быть
« Ответ #19 : 10 Январь 2014, 14:52:23 »
Результат 0 - потому что никто не проверяет, кроме sfs.
Нам он не интересен сам по себе, потому что это обычный перенос нашего функционала на dracut. А поскольку существующая схема сборки у нас собирает каждый раз под новое ядро init, то переход на dracut - это чисто условность будет и потенциально новые ошибки. Идти на это смысла мало. А вот изменение в сторону расширенного функционала - это хороший повод перехода, несмотря на возможные ошибки.

Я постепенно начал писать черновой вариант спецификации того, как я вижу систему initrd: https://github.com/magos-linux/magos-linux/wiki/MagOS-Initrd-Structure

Конечно же с 0 писать функции не надо. Все уже есть, надо только собрать все вместе и начать тестировать.

Оффлайн Zay

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1536
  • Репутация: +25/-0
  • Автор темы
Re:LiveInit - каким он должен быть
« Ответ #20 : 10 Январь 2014, 15:35:04 »
Возможность задать параметром размер tmpfs для /tmp (в случае если не указан слой RW - он будет создан внутри /tmp).
Зачем? http://wiki.puppyrus.org/soft/porteus-initrd#ramsize
Пожалуй этого достаточно.

Возможность чтения параметров не только из строки загрузчика, но и из конфиг. файла на диске.
Зачем? 
В сообщении выше:
Цитата
А использование конфиг. файла пригодится, скорее всего, разработчикам конкретных дистрибутивов. Типовой конфиг. файл можно поставлять вместе с системой, или же формировать при установке (чтобы учесть особенности реализации системы).

Информацию о файловой системе Init должен получать сам, а не ориентироваться на расширение файла.
file файл  Зачем?
Чтобы не создавать лишних сложностей, и не иметь проблем в случае использования нестандартных (для нас) расширений.

Оффлайн Zay

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1536
  • Репутация: +25/-0
  • Автор темы
Re:LiveInit - каким он должен быть
« Ответ #21 : 10 Январь 2014, 15:35:27 »
Что делать, когда название пересечется с параметрами ядра или которое может использоваться в специфике того или иного дистрибутива?
Палка о двух концах. С одной стороны - возможные накладки, а с другой - простые параметры легче запомнить (особенно актуально при ручной настройке из консоли загрузчика).

Предложенная схема с rw=, ro= - не удовлетворяет желаемым вариантам использования. Почему - я написал ранее.
Я не совсем понял, почему не удовлетворяет желаемым вариантам использования.
Суть rw= / ro= в том, что это минимальный функционал. Такой LiveInit можно будет легко использовать с любым Linux.
При этом вполне возможно реализовать плюс к этим и другие параметры, для более гибкой настройки.


Я постепенно начал писать черновой вариант спецификации того, как я вижу систему initrd: https://github.com/magos-linux/magos-linux/wiki/MagOS-Initrd-Structure
Вот это уже интересно, хотя бы тем, что есть чёткая структура.
На первый взгляд кажется что слишком много параметров (хотя их использование, вероятно, оправдано).

Цитата
Для уровней вводится 2 параметра:
uird.base=path/base;base.iso;httр://path2/base
uird.modules=path/modules;httр://path/modules/user1
Почему не использовать простой порядок указания слоёв (что указано первым - то в верхний слой) ?
  Например: rw=path/base;path/modules;httр://path/modules/user1

А если захочется больше уровней?
ИМХО - разделение на "базу" и "не базу" минус для универсальности.
В AUFS нет никакой базы, зачем "плодить сущности" ?


До сих про мне не понятен смысл нескольких RW-слоёв. Как это работает, если верхний слой в AUFS всегда один?

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #22 : 10 Январь 2014, 15:50:32 »
Результат 0 - потому что никто не проверяет, кроме sfs.
К классическому пупи , на мой взгляд , стандартный initrd не прикрутить. Поэтому и интерес только у меня с прицелом на PRA

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:LiveInit - каким он должен быть
« Ответ #23 : 10 Январь 2014, 16:08:19 »
base , modules - это уровни структуры модулей, а не слоев.
 
У нас из практики в base лежит модулями система такая, какую мы пользователям собираем (в ней мы стараемся гарантировать работоспособность компонент и ее поддерживаем официально), а в modules пользователи собирают модули сами, кликая мышкой в пакетном менеджере, ну или дополнительные модули там лежат.

Можно не делить совсем. Тут надо думать.

А уровни или слои AUFS - это другое. Они определяются порядком перечисления источников и порядком наименования модулей.

Расширение необходимо как раз для того, чтобы осуществлять монтирование модулей на нужном уровне в нужном режиме (RO, RW), т.е. самый верхний уровень - это необязательно RW сохраненка.
rw= подразумевает режим rw. Если там только один элемент - директория, модуль, файл, то это сохраненка и я оставил это под uird.changes=, но это для совместимости с тем, что сейчас есть. При множественных rw бранчах aufs это не требуется, там сохраненка может быть в разных местах и под разными уровнями. Как это использовать можно? например создаете файл-образ - etc.rwm и при подключении все изменения в /etc попадают в этот образ, создаете файл var_baalalalalal.rwm - храните там /var/log/bdbbdbdbdbd (любые каталоги). То есть раздельное в режиме RW сохранение.



Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:LiveInit - каким он должен быть
« Ответ #24 : 10 Январь 2014, 16:14:11 »
Результат 0 - потому что никто не проверяет, кроме sfs.
К классическому пупи , на мой взгляд , стандартный initrd не прикрутить. Поэтому и интерес только у меня с прицелом на PRA
только потому что размер большой и это критично.
В остальном - ложите модули squashfs (SFS,PFS,PET и прочие) в base и в требуемом порядке их именуете. ВСЕ!

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:LiveInit - каким он должен быть
« Ответ #25 : 10 Январь 2014, 20:13:39 »
Почти завершил описывать основную концепцию того, каким я вижу liveinit в минимальном исполнении: https://github.com/magos-linux/magos-linux/wiki/MagOS-Initrd-Structure

Постепенно реализация будет ее воплощать.

Кому интересно - тестируйте реализацию, предлагайте свои идеи.
На мой взгляд, все идеи, которые я встречал у вас на форуме, легко воплощаются таким liveinit. Если не прав - поправьте.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #26 : 11 Январь 2014, 08:02:21 »
Почти завершил описывать основную концепцию
Серьезный подход. Но простотой не отличается. Куча сетевых наворотов. А на кого вообще нацелен MOS?
Нужно ли обычному юзеру это дома...
По опыту портеус-инитрд. Уж куда проще - 3 папки. Остальные навороты опциональны и документированы. Так и то народ умудряется в них заблудиться.
По Вашей разработке не хватает доки как по самому дракут так и по параметрам Вашего инитрд (вероятно у меня из-за этого не работает).
Не помешает сделать упрощенный инитрд без сети и пр.

Я закончил свои эксперименты с mkinitcpio+porteus. Все получилось. Доделываю демо-исо. Смотрел и дракут - показалось сложным. в mkinitcpio - всего 2 строки параметров. Итоговый дракут-инитрд получается большой

Распишите прелести дракут. Сделайте демо-исо. Например на том же PRA (без Х мегабайт 30 выйдет))
https://wiki.archlinux.org/index.php/Mkinitcpio_(Русский) - все просто и понятно. Все на bash - можно прямо по скриптам разбираться. Даже в юбунте запускается и похоже, работает
https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html - такое надо симестр в институте изучать. Хорошо что Дядя Шурик не видел. Щас бы всем тут "концептуалистам" попало бы  :D
Надо какое-то вводное руковадство. С чего начать

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8633
  • Репутация: +187/-2
  • Старый чайник
Re:LiveInit - каким он должен быть
« Ответ #27 : 11 Январь 2014, 09:37:55 »
Нужно ли обычному юзеру это дома...
Не нужно и ни разу
упрощенный инитрд
ИМХО правильный путь. Плюс доп. скрипт в корне $PSUBDIR и модуль с /lib для "неполноценных" ядер.
С чего начать
Я думаю с начала  :)
Хорошо что Дядя Шурик не видел.
Видел. Тоска взяла. К буржуйским графоманам ещё и свои добавились.
ИМХО. Сама идея пересадить все линуксы на frugal порочна.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #28 : 11 Январь 2014, 10:45:16 »
Я же говорил - попадет  :)
ИМХО. Сама идея пересадить все линуксы на frugal порочна.
Обоснуйте...
Разве пупи не реализация этой идеи?

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:LiveInit - каким он должен быть
« Ответ #29 : 11 Январь 2014, 11:15:48 »
Доки по дракут нет, потому что от дракут в таком инитрд всего 3 скрипта на баш: dracut-lib, init в корне и один на командной строке.

Остальная дока по дракут, которую можно изучать в институте - это многообразие модулей. В данном случае их нет и поэтому разбираться не в чем.

От дракут используется только инфраструктура по сути и пара скриптиков в универсальном варианте. В магос надо будет еще один скрипт на другой хук повесить.

Насчет сетевых наворотов - то это просто кому не надо, не использует. Быстродействие не изменится. При сборке эти фичи просто дракут не будет включать и все. Можно даже три строчки сетевых за комментарить и этого функционала не будет.

Сетевые навороты я разрабатываю в магос в рамках корпоративного решения для нашей организации (СибГАУ). У нас несколько десятков машин в административно-хозяйственной деятельности на ней работают и все компьютерные классы настроены на бездисковую загрузку в магос (это несколько сотен машин учебного процесса). Обычная не фругал технология требует много ресурсов на поддержание такой инфраструктуры. В данном случае все настроено в одном месте и все машины имеют общую базовую конфигурацию.