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

Автор Тема: [INITRAMFS] pinitrd - новый рамдиск для щенка, копмилируем sh-скрипты  (Прочитано 38288 раз)

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

Оффлайн Pasha__kun

  • Пользователь
  • **
  • Сообщений: 26
  • Репутация: +1/-0
  • Автор темы
Пару дней назад взялся за свой рамдиск. Посмотреть можно здесь.

Из функционала: copy2ram в двух вариантах, сохраненка в модуль, файл или каталог, планирую сетевую загрузку, сохранение при выходе и выбор/настройку дистра при запуске в псевдографическом меню (dialog). Из особых фишек - puppy_modules.order: файл рядом с ядром, в котором указываются модули, которые надо загрузить. Минимально вот такой:
Код
prar/base/000-kernel-4.15.4-pf_64.pfs
prar/base/001-prar-c-180101-sf06.pfs
prar/base/035-gtk2-2.24.31-1-180101-sf06.pfs
prar/base/075-minirc-p-sf01.pfs
prar/base/089-prar-upd-180101-sf26.pfs
:saveram
Загрузит модули из базы и сохраненку в памяти.

Про "комиляцию" скриптов можно посмотреть на гитхабе, здесь.

Пока как-то как. Идеи/предложения/баги принимаются здесь
« Последнее редактирование: 29 Май 2018, 13:56:10 от Pasha__kun »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
"комиляцию" скриптов
Не перебор? Простой sh легче править.
Моноблок 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

Оффлайн Pasha__kun

  • Пользователь
  • **
  • Сообщений: 26
  • Репутация: +1/-0
  • Автор темы
Код получается более читаемым и меньше размер скрипта. Да и собирать initrd все равно нужно, у меня все собирается простым make`ом

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
коментарии через // зачем в скриптах? все ведь привыкли к #

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

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Код получается более читаемым и меньше размер скрипта.
Размер и читабельность кода зависит от писателя.
у меня все собирается простым make`ом
А у меня простым скриптом.
"монтируем 10 раз"
Если это так (я подробно код не смотрел), то никуда не годится.

Просьба к автору подробно объяснить алгоритм и получаемые преимущества.
Моноблок 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

Оффлайн Pasha__kun

  • Пользователь
  • **
  • Сообщений: 26
  • Репутация: +1/-0
  • Автор темы
 
коментарии через // зачем в скриптах? все ведь привыкли к #
Комментарии с // удаляются, с # - остаются.


от конструкций "монтируем 10 раз" надо избавляться
Вообще они не выводятся с quiet, но в принципе можно и убрать.

10 раз проверить готовность устройства
Не совсем понял. Я и так ровно 10 раз пытаюсь смонтировать каждое устройство.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Не совсем понял. Я и так ровно 10 раз пытаюсь смонтировать каждое устройство.
вместо 10 раз выполнения действия, выполнять 10 проверку готовности и выполнять действие, когда готово.

Вообще они не выводятся с quiet, но в принципе можно и убрать.
я не про сами сообщения в логи, я про цикл в коде
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pasha__kun

  • Пользователь
  • **
  • Сообщений: 26
  • Репутация: +1/-0
  • Автор темы
вместо 10 раз выполнения действия, выполнять 10 проверку готовности и выполнять действие, когда готово
Логично, попробую.

я не про сами сообщения в логи, я про цикл в коде
Ну цикл там не просто так, модули-то монтировать надо.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Ну цикл там не просто так, модули-то монтировать надо.
ну это ясно дело
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Код
// switch_root = pivot_root + chroot
// НО switch_root не позволяет сохранить исходный корень,
// поэтому мы не используем его
cd /pup_new
pivot_root . mnt/pinitrd
exec chroot . /sbin/init
// DO NOT USE: exec switch_root /pup_new /sbin/init
Обоснуйте.
Моноблок 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

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
 В качестве linuxrc используется мой слегка изменённый init, тогда вопрос, что собственно делает pinitrd, если aufs к моменту его запуска уже собрана? Не проще сразу перейти в новую систему и запустить её родной init или systemd? Очень похоже на пятое колесо.
Моноблок 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

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Из особых фишек - puppy_modules.order: файл рядом с ядром, в котором указываются модули, которые надо загрузить.
?? Дублирует загрузку из modules. Может тогда modules выкинуть, оставить только optional?
планирую сетевую загрузку
Было, не востребовано.
Моноблок 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

Оффлайн Pasha__kun

  • Пользователь
  • **
  • Сообщений: 26
  • Репутация: +1/-0
  • Автор темы
Обоснуйте.
Как написано. В /mnt/pinitrd сохраняется корень initrd.

что собственно делает pinitrd, если aufs к моменту его запуска уже собрана
Нет, aufs не собрана. Он ее собирает.

Дублирует загрузку из modules. Может тогда modules выкинуть, оставить только optional?
В теории модули можно хранить где угодно. С puppy_modules.order не надо при каждой загрузке искать модули + нет ключей load/noload, которые всегда криво работали

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Погодите углубляться в детали реализации.
Давайте разберемся :
a. чем pinitrd будет лучше имеющихся porteus rootaufs2 uird Дяди_Шурика ...?
b. Т.е. чего не хватало в имеющихся? Или это  просто "проще написать свое , чем разбираться с чужим"
c. Надо переписывать с нуля или проще доработать имеющиеся

1.
Цитата
Современный copy2ram - распаковка модулей в память
В чем современность и вообще сиысл. Есть же rootcopy и copy2ram

2.
Цитата
Выборочный copy2ram
http://wiki.puppyrus.org/soft/porteus-initrd#rammod

3.
Цитата
Редактирование puppy_modules.order при загрузке
Чем это лучше редактирования конфига grub*

4.
Цитата
load    Список, разделитель - ,
Если планируется использование в ПРА - лучше максимально сделать синтаксис, как в имеющихся , т.е. здесь ;

5. pinitrd под спец. ядра (с вкомпиленными ФС) или любые aufs?

Оффлайн Pasha__kun

  • Пользователь
  • **
  • Сообщений: 26
  • Репутация: +1/-0
  • Автор темы
В чем современность и вообще сиысл. Есть же rootcopy и copy2ram
Больше расход памяти, но меньше нагрузка на процессор. Как rootcopy, но из модулей.

rammod
Забыл про него

Чем это лучше редактирования конфига grub*
Удобнее, имхо. Каждый модуль на отдельной строке, без всяких разделителей.

Если планируется использование в ПРА - лучше максимально сделать синтаксис, как в имеющихся , т.е. здесь ;
Это осталось из initrd DdShurick`а, могу поменять

pinitrd под спец. ядра (с вкомпиленными ФС) или любые aufs?
Пока загрузки модулей ядра нет, но я ее делаю.

Вообще в планах псевдографический конфигуратор и минимум опций ядра. Т.е. initrd для "стационарной" установки, а не для флешек.