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

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

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

Оффлайн Zay

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1536
  • Репутация: +25/-0
  • Автор темы
LiveInit - каким он должен быть
« : 08 Январь 2014, 22:12:29 »
Предлагаю подумать о создании универсального файла initrd для любых дистрибутивов Linux с многослойной файловой системой.
Тема не для технических подробностей и не для выбора основы (porteus / dracut / etc.), а для обсуждения общего функционала.


Думаю что необходим следующий минимальный функционал:

   Возможность подключить в верхний (перезаписываемый) слой файл или раздел с ФС ext2/3/4, либо каталог на таком разделе одним параметром.
   Примеры:
      rw=userfile.ext  (поиск в корне всех разделов файла или каталога 'savefile.ext' до первого найденного).
      rw=userdir  (поиск в корне всех разделов файла или каталога 'userdir' до первого найденного).
      rw=/dev/sda3  (подключить sda3 как слой RW).

   Возможность подключить в нижние (не перезаписываемые) слои любое количество файлов или разделов с ФС ext2/3/4 или SquashFS (независимо от расширения) одним параметром.
   Примеры:
      ro=program.sfs  (поиск в корне всех разделов файла 'program.sfs' и подключение этого файла).
      ro=catalog  (поиск в корне всех разделов каталога 'catalog' и подключение всех файлов из этого каталога).
      ro=program.pfs;program.sfs;program.xzm;catalog/subcatalog  (комбинированное использование).

   Возможность скопировать все ReadOnly-слои в оперативную память (если её достаточно) и отмонтировать загрузочный раздел.

   Возможность задать параметром размер tmpfs для / (если не указан RW-слой).

   Возможность чтения параметров не только из строки загрузчика, но и из конфиг. файла на диске.
  
   При желании можно добавить загрузку по сети и др. "плюшки", если получится.

Информацию о файловой системе Init должен получать сам, а не ориентироваться на расширение файла.
Для полной универсальности в initrd не должно быть обязательных модулей ядра.


Всё это, разумеется, ИМХО. Всем, кому это интересно, предлагаю высказать мнение о том, каким должен быть универсальный initrd.
« Последнее редактирование: 10 Январь 2014, 15:37:06 от Zay »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8633
  • Репутация: +187/-2
  • Старый чайник
Re:LiveInit - каким он должен быть
« Ответ #1 : 08 Январь 2014, 23:10:23 »
поиск в корне всех разделов файла или каталога 'savefile.ext' до первого найденного
поиск в корне всех разделов файла или каталога 'userdir' до первого найденного
Это лишнее. В последней версии init я отказался от поиска.
Возможность подключить в нижние (не перезаписываемые) слои любое количество файлов
Это запросто.
     ro=program.sfs  (поиск в корне всех разделов файла 'program.sfs' и подключение этого файла).
      ro=catalog  (поиск в корне всех разделов каталога 'catalog' и подключение всех файлов из этого каталога).
      ro=program.pfs;program.sfs;program.xzm;catalog/subcatalog  (комбинированное использование)
Не надо.
  Возможность скопировать все ReadOnly-слои в оперативную память (если её достаточно) и отмонтировать загрузочный раздел.
Это есть
  Возможность задать параметром размер tmpfs для /tmp (в случае если не указан слой RW - он будет создан внутри /tmp).
Зачем?
  Возможность чтения параметров не только из строки загрузчика, но и из конфиг. файла на диске.
Зачем "плодить сущности"
 
   При желании можно добавить загрузку по сети и др. "плюшки", если получится..
Это уже было и вполне получалось.

Информацию о файловой системе Init должен получать сам, а не ориентироваться на расширение файла.
Вот это не понял

Для полной универсальности в initrd не должно быть обязательных модулей ядра.
Уже полгода как нет
« Последнее редактирование: 08 Январь 2014, 23:12:18 от DdShurick »
Моноблок 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

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:LiveInit - каким он должен быть
« Ответ #2 : 09 Январь 2014, 08:21:47 »
Расширение в ряде случаев удобно использовать.

Например когда необходимо, чтобы файл цеплялся в разных режимах.
К примеру файл с ext2,3,4,.... в одних случаях был RO , в других RW.

Весьма интересная вещь- это множество слоев RW, поэтому без расширения не обойтись.

У нас названия расширений такие:
*.ROM - RO слой
*.RWM - RW слой

Еще для криптованых разделов процедура определения не тривиальна.
Поэтому у нас используется приставка расширения *.ENC :
*.RWM.ENC - RW слой криптованый
*.ROM.ENC - RO слой криптованый

Еще ввиду множественности параметров ядра стоит ввести префикс параметров.
Например uird (unified init ram disk):
uird.from=
uird.copy2ram=
uird.ramsize=

Возможно стоит для структуризации ввести 2 уровня:
base - попадают модули базовой системы
modules - попадают дополнительные модули (пользовательские и т.д.)

И тогда должно быть 2 параметра:
uird.base=path/base;base.iso;http://path2/base
uird.modules=path/modules;http://path/modules/user1


Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8633
  • Репутация: +187/-2
  • Старый чайник
Re:LiveInit - каким он должен быть
« Ответ #3 : 09 Январь 2014, 10:17:13 »
Расширение в ряде случаев удобно использовать.
Удобно тому кто знает, а как быть простому пользователю?
Весьма интересная вещь- это множество слоев RW, поэтому без расширения не обойтись.
И где это применить на практике?
Еще ввиду множественности параметров ядра стоит ввести префикс параметров.
Например uird (unified init ram disk):
uird.from=
uird.copy2ram=
uird.ramsize=
Унас для этого есть pfix=
Возможно стоит для структуризации ввести 2 уровня:
base - попадают модули базовой системы
modules - попадают дополнительные модули (пользовательские и т.д.)

И тогда должно быть 2 параметра:
uird.base=path/base;base.iso;http://path2/base
uird.modules=path/modules;http://path/modules/user1
Пробовал уже, система "непрозрачной" получается, видны только верхние два слоя, хотя подключены все.
Моноблок 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

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:LiveInit - каким он должен быть
« Ответ #4 : 09 Январь 2014, 12:00:06 »
Пробовал уже, система "непрозрачной" получается, видны только верхние два слоя, хотя подключены все.
Видны ровно столько, сколько сделать. Это же определяет разработчик.

pfix= - это уже параметр без префикса.
можно конечно им и задавать остальные параметры:
pfix=uird uird.copy2ram uird.from=/path/

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

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #5 : 09 Январь 2014, 12:37:17 »
Для полной универсальности в initrd не должно быть обязательных модулей ядра.
Тогда "под любое ядро" не получится
Без модулей ядра - чем не устраивает porteus-initrd ?
Основное требование: наличие системы сборки initrd под любое aufs ядро
Поэтому надо определиться dracut mkinitcpio или что и пилить под них hook-и
Тема не для технических подробностей и не для выбора основы (porteus / dracut / etc.), а для обсуждения общего функционала.
Принципиально не согласен
Опять переоцениваем свои силы. Не напишем с нуля. Опять будут обсуждения и ноль на вызоде
2 самых коротких пути:
1. Приделать к porteus опциональную возможность использования любого ядра (т.е. добавить модули) и написать скрипт его сборки
2. Взять mkinitcpio и допилить rootaufs до функционала шапки
Т.к функционал porteus более чем достаточен и может быть расширен наработками magos - предлагаю 1 - как самый простой
Кто готов поучаствовать?

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:LiveInit - каким он должен быть
« Ответ #6 : 09 Январь 2014, 14:07:16 »
dracut собирает указанные модули в initrd, если они необходимы.
Если они монолитом в ядре, то они просто не будут скопированы ввиду их отсутствия.

Скрипт писать самому нет смысла почти вообще.
1. нет смысла, потому что нужен скрипт сборки.
2. Взять mkinitcpio - можно без проблем. Надо аналогично тому, как я делаю в dracut повешать хук с вызовом porteus initrc. То есть использовать лишь инфраструктуру от mkinitcpio.

Я сторонник dracut -  как инфраструктуры, и двух компонент инициализации - библиотеки функций и скрипта инициализации, которые могут и самостоятельно находясь внутри любого initrd производить инициализацию.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:LiveInit - каким он должен быть
« Ответ #7 : 09 Январь 2014, 14:11:21 »
я конечно извиняюсь, но вопрос ВСЕМ, init у вас от ядра если не зависит, зачем его пересобирать да еще с помощью специальных скриптов?
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #8 : 09 Январь 2014, 14:42:30 »
Чтобы иметь возможность использовать  не только спец-ядра от Porteus и PR(A) ,с монолитными вкомпилениями модулей, а любые aufs. Модуль aufs можно скомпилить под любое ядро где его нет

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:LiveInit - каким он должен быть
« Ответ #9 : 09 Январь 2014, 14:54:33 »
т.е. зависимость от ядра таки остается?

помимо aufs возможно придется включать squashfs модуль т.е. без доставания исходников и пересборки ядра не обойтись, а в этом случае есть смысл и aufs и squashfs включить монолитно в ядро.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #10 : 09 Январь 2014, 14:55:19 »
Скрипт писать самому нет смысла почти вообще.
1. нет смысла, потому что нужен скрипт сборки.
Можно взять готовое в http://www.linux-live.org/
2. Взять mkinitcpio - можно без проблем. Надо аналогично тому, как я делаю в dracut повешать хук с вызовом porteus initrc. То есть использовать лишь инфраструктуру от mkinitcpio.
Я сторонник dracut -  как инфраструктуры, и двух компонент инициализации - библиотеки функций и скрипта инициализации, которые могут и самостоятельно находясь внутри любого initrd производить инициализацию.
А я так и не понял чем dracut лучше - поэтому мне пока без разницы
mkinitcpio+rootaufs - я написал потому что они уже работают , дистронезависимо и функционал наиболее близок к porteus
В аттаче еще хуки из AUR
Вместо rootaufs использовать porteus - было бы идеально, но я не знаю как его таким образом переделать под dracut или mkinitcpio

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #11 : 09 Январь 2014, 14:59:47 »
т.е. зависимость от ядра таки остается?
В идеале иметь ее опционально
Т.е. юзаешь pr(a)-porteus ядро - их нет. Взял любое готовое aufs - они есть (т.к. без них не загрузится)
Мы же в этой теме не про PR(A) пишем, а про универсальное решение...

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:LiveInit - каким он должен быть
« Ответ #12 : 09 Январь 2014, 15:45:03 »
идеал недостижим, все равно целевую систему предварительно придется установить,да еще в виде таком чтобы можно было компилировать, а при установленной системе frugal зачем, почему непонятно.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #13 : 09 Январь 2014, 15:56:46 »
идеал недостижим, все равно целевую систему предварительно придется установить
Зачем? archbang и runtu я не устанавливал. runtu можно даже не перепаковывать, если размер не напрягает
,да еще в виде таком чтобы можно было компилировать, а при установленной системе frugal зачем, почему непонятно.
Зачем ? запустил фругал, ПМ, установил нужное , запаковал changes в .pfs
Это наверное лучше в LF тему...

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33953
  • Репутация: +231/-0
    • PuppyRus-A
Re:LiveInit - каким он должен быть
« Ответ #14 : 10 Январь 2014, 09:57:56 »
1. Приделать к porteus опциональную возможность использования любого ядра (т.е. добавить модули)
получилось
написать скрипт его сборки
в процессе