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

Автор Тема: pra-porteus-initrd + обычное aufs ядро  (Прочитано 29010 раз)

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

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
  • Автор темы
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #30 : 29 Январь 2016, 11:18:46 »
У меня - blkid fat видит, но mount не монтирует (модули fat vfat загружены)
У меня так было пока не подгрузил модули nls_*

В итоге загрузился, именно с фат флешки, но пока, как писал, вторым слоем давал ему initrd со всеми модулями вообще.
Попробовал подсунуть initrd-mj44+.xz -не пошло, почему-то модулей ядра не нашел вовсе, возможно из-за того, что они там в /usr/lib, а не в /lib.  Пробовал создавать ссылки, пока не помогло.

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
  • Автор темы
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #31 : 31 Январь 2016, 00:33:02 »
Короче говоря, слегка покореженный портеусовский initrd вполне может грузить ядро от manjaro.
Что делал.
Как уже писал, в начало вставил загрузку с поиском по /sys/bus
(кстати, так и не понял, почему в скрипте, который DdShurick показывал, написано обязательно сохранять это
в переменную, вроде бы вполне работает и так)
Потом принудительно подгружаются модули файловых систем и nls_*.  В параметры монтирования vfat вписал codepage=866,iocharset=utf8, тогда nls_cp437 и nls_iso8859-1 в общем-то и не нужны.
000-kernel из base не берется, вместо него берется из /tst/ на флешке, там от manjaro лежит
(понятно, это допустимо только для тестового initrd, не для рабочего).  Прикрепляю этот тестовый initrd
Инитрд с модулями сделал свой, модули там в /lib, а не в /usr/lib, набора модулей хватает для загрузки с флешки и работы
клавиатуры в режиме debug, по крайней мере на моем железе. Список модулей прикрепляю, сам initrd-mj44mod.xz получился все же немного больше мегабайта и сюда не лезет.
в menu2.lst из pra64 1601 добавил пункт для тестовой загрузки:
Код
title  PRA64 %l%. test manjaro
set d=pra64/1601
kernel /tst/vmlinuz-4.4-x86_64 dir=%d% %s% %x% %v% debug
initrd /tst/initrd.m.xz /tst/initrd-mj44mod.xz
- всякие переменные там остались от прежнего варианта загрузки, так что это все нормально вот сейчас загрузилось в pra64 с xfce без нетворкменеджера, с Minirc.  Без debug тоже грузит.
manjaro ядро, оба initrd и 000-kernel лежат в /mnt/sdb1/tst, pra64 в /mnt/sdb1/pra64/1601, menu*.lst, весь набор из iso,
в /mnt/sdb1/pra64
sdb1 - фат раздел на флешке

Все это не значит, что надо бросаться использовать именно большие ядра и именно на портеусе.  В чем-то neobht прав, портеус сильно запутан, я, к примеру, никак не врублюсь, чего он там по несколько раз перемонтирует при поиске
файла-сигнатуры.
Однако, как видно и тащить udev в initrd совсем не обязательно.  Может быть, действительно имеет смысл изучить init от Дяди Шурика да и добавить туда поддержку больших ядер.

Оффлайн neobht

  • Ветеран
  • *****
  • Сообщений: 1031
  • Репутация: +15/-0
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #32 : 31 Январь 2016, 07:49:18 »
Чтобы научить initrd DDSh работать с большими ядрами - достаточно слоем подключить модули ядра.

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33974
  • Репутация: +231/-0
    • PuppyRus-A
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #33 : 31 Январь 2016, 08:22:09 »
Дайте пример кода

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #34 : 31 Январь 2016, 11:23:12 »
Код
if [ -f /mnt/${PDEV}${PDIR}/base/kernel-${KERNELVER}.sfs ]; then
if [ "$PCOPY" = "yes" ]; then
cp /mnt/${PDEV}${PDIR}/base/kernel-${KERNELVER}.sfs /mnt/tmpfs
mount -o loop /mnt/tmpfs/kernel-${KERNELVER}.sfs /kernel || check_status 1
else
mount -o loop /mnt/${PDEV}${PDIR}/base/kernel-${KERNELVER}.sfs /kernel || check_status 1
fi
 ZLAYER=':/kernel=ro'
fi
Моноблок 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

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33974
  • Репутация: +231/-0
    • PuppyRus-A
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #35 : 31 Январь 2016, 11:55:24 »
Код
if [ -f /mnt/${PDEV}${PDIR}/base/kernel-${KERNELVER}.sfs ]; then
Не тут то было. Это не наше спецядро.
Чтобы увидеть PDEV надо загрузить модули ядра, которые у нас в теле ядра
Как Вы написали можно сетевые модули подгружать - так в портеусе именно так и сделано

На остальное ответил здесь. Общие обсуждения - давайте там и продолжать. Здесь не оффтопим
« Последнее редактирование: 31 Январь 2016, 11:57:32 от sfs »

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33974
  • Репутация: +231/-0
    • PuppyRus-A
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #36 : 31 Январь 2016, 12:27:41 »
На всякий случай свежий оригинальный портеус из nemesis.

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33974
  • Репутация: +231/-0
    • PuppyRus-A
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #37 : 02 Февраль 2016, 16:00:16 »
Доделал без udev http://www.puppyrus.org/~melvik/puppyrus/ftp/puppyrus/puppyrus-a64/kernel/4.4.0-1-MANJARO/initrd160202.xz
Код
title PRA64. manj44 + pra-porteus-initrd (загруска\выгрузка модулей ядра через шину)
set d=pra64
find --set-root --ignore-floppies --ignore-cd /%d%/initrd.xz
kernel /%d%/vmlinuz-4.4-x86_64 %bl%   dir=%d%  noswap  quiet %c%.
initrd  /%d%/initrd160202.xz /%d%/initrd-mj44+с.xz

Пришлось всетаки после
Код
for bus in pci usb hid acpi platform scsi; do 

догрузить напрямую
Код
    for x in cdrom isofs sr_mod ata_piix \
        usbhid usb_storage \
        loop lz4_compress aufs squashfs \
        vfat fuse ntfs nls_cp437 nls_cp866 nls_iso8859-1 nls_utf8 \
        atkbd libps2 serio i8042; do modprobe $x ; done
Проверил на сд (iso в vbox), fat-флэш, ext-hdd
Кто проверит на ntfs - отпишитесь

Добавил ключ ядра ukm:
Выгружает перед chroot лишние модули ядра, кроме
Код
lsmod |tail -n+2 |cut -d\  -f1 |grep -v -E 'atkb|loop|fuse|fs|ata|hci'
без ata|hci на флэшке не грузилось
Возможно вообще не надо этим заморачиваться...

В итоге:
Работает в 3х режимах (переключается автоматически):
1. initrd160202.xz - обычный (только для спец-ядер)
2. initrd160202.xz /%d%/initrd-mj44+c.xz - загружает\выгружает  модули ядра через опрос /sys/bus/${bus}/devices/*/modalias.
3. initrd160202.xz /%d%/initrd-mj44+c.xz /%d%/initrd-udev.xz - модули грузит udev.

initrd-mj44+c делал http://www.puppyrus.org/~melvik/puppyrus/ftp/puppyrus/puppyrus-a/pra03/pfs/mkinitcpio-0.11.2-lf.pfs (работает и в ПРА64) с конфигом

Таким образом можно прикрутить любое aufs ядро

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
  • Автор темы
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #38 : 02 Февраль 2016, 23:49:42 »
К списку шин можно добавить serio, у меня клавиатура оттуда сама нашлась, libps2, кстати, грузится как зависимость atkbd, я ее принудительно не грузил.
Eсли при монтировании vfat явно указать параметры codepage=866,iocharset=utf8, то nls_cp437 и nls_iso8859-1 не нужны, они используются только "по умолчанию".
Поскольку aufs собирается уже после того, как файлы системы найдены, то ее модуль можно в initrd+ не включать, а погружать чуть позже, уже из подключенного 000-kernel.  Собственно, если не нужна отладка на самом раннем этапе, можно то же сделать и с клавиатурными драйверами.

И в свете возможности грузиться с разными ядрами назревает вопрос, что делать с 000-kernel.pfs, подменять его в base неудобно.
Предлагаю так.  В дополнение к base/modules/optional завести еще папку kernel, в ней несколько подпапок типа `uname -r`,
в каждой из них свое ядро, initrd+ к нему, 000-kernel и все pfs с модулями ядра, включая драйвера видеокарт.  Тогда не придется при смене ядра шариться по всем папкам, выискивая несовпадающие модули, все будет в одном месте и при загрузке по зависимостям можно на `uname -r` ориентироваться.
« Последнее редактирование: 03 Февраль 2016, 00:02:37 от ander »

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33974
  • Репутация: +231/-0
    • PuppyRus-A
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #39 : 03 Февраль 2016, 09:39:38 »
К списку шин можно добавить serio, у меня клавиатура оттуда сама нашлась, libps2, кстати, грузится как зависимость atkbd, я ее принудительно не грузил.
Можно попробовать, но atkbd по любому должен грузиться - какая разница насколько правильно это произойдет
Для экстремальной оптимизации - можно грузить только при наличии параметра debug
Eсли при монтировании vfat явно указать параметры codepage=866,iocharset=utf8, то nls_cp437 и nls_iso8859-1 не нужны, они используются только "по умолчанию".
Может тогда в MOPT= это добавить.... т.е.в дефолт... Побочных эффектов не будет?
Поскольку aufs собирается уже после того, как файлы системы найдены, то ее модуль можно в initrd+ не включать, а погружать чуть позже, уже из подключенного 000-kernel. 
Да
Собственно, если не нужна отладка на самом раннем этапе, можно то же сделать и с клавиатурными драйверами.
Нужна. не стоит
И в свете возможности грузиться с разными ядрами назревает вопрос, что делать с 000-kernel.pfs, подменять его в base неудобно.
Предлагаю так.  В дополнение к base/modules/optional завести еще папку kernel, в ней несколько подпапок типа `uname -r`,
в каждой из них свое ядро, initrd+ к нему, 000-kernel и все pfs с модулями ядра, включая драйвера видеокарт.  Тогда не придется при смене ядра шариться по всем папкам, выискивая несовпадающие модули, все будет в одном месте и при загрузке по зависимостям можно на `uname -r` ориентироваться.
000-kernel.pfs - наболевший вопрос. конечно теряем некоторую совместимость с оригинальным портеусом.... Только зачем она нам нужна...
С папками - как-то сложновато.
Может для начала добавить 000-kernel-`uname -r`.pfs и фильтровать nVidia amd-catalyst (это уже стандартизировано) + k`uname -r`

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33974
  • Репутация: +231/-0
    • PuppyRus-A
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #40 : 03 Февраль 2016, 17:02:13 »
перенес дискуссию с Дядей Шуриком

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
  • Автор темы
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #41 : 03 Февраль 2016, 20:28:21 »
Eсли при монтировании vfat явно указать параметры codepage=866,iocharset=utf8, то nls_cp437 и nls_iso8859-1 не нужны, они используются только "по умолчанию".
Может тогда в MOPT= это добавить.... т.е.в дефолт... Побочных эффектов не будет?
В MOPT, я думаю, не стоит.  Он же применяется для всех файловых систем, а codepage/iocharset специфичны для fat.  Конечно, mount все непонятное должен проигнорировать, но лучше все же вписывать там, где монтируется тип vfat, условие там все равно уже есть и какие-то дополнительные опции монтирования в том месте дописываются (можно и quiet туда же добавить, чтобы и от флешки с системой меньше ругани было)
Кстати, в конечном итоге флешка все равно оказывается смонтированной с codepage=866,iocharset=utf8, откуда берутся еще не отследил.

С папками - как-то сложновато.
Может для начала добавить 000-kernel-`uname -r`.pfs и фильтровать nVidia amd-catalyst (это уже стандартизировано) + k`uname -r`
А что особо сложного-то?  Все, относящееся к конкретному ядру - в одном месте.
А представьте себе замену ядра при существующей раскладке:
Ядро и initrd+ - в pra
Основная часть модулей 000-kernel - в pra/base
Модули virtualbox (а может и еще чего-нибудь) - в pra/modules
Модули для видеокарт - в pra/optional
Тут, заменяя ядро, пропустить чего-нибудь - запросто.

Чтобы все резко не менять, можно по отдельным директориям раскладывать только те же манджаровские ядра, в initrd+ для них предусмотреть файл-сигнатуру и в linuxrc в начале анализировать ее наличие.  Нету - все грузится, как и раньше.  Есть - значит грузится модульное ядро и надо выполнить поиск по шинам, подгрузить нужные файловые системы и nls, брать 000-kernel и видеодрайверы из отдельной директории и т.п.
Так и правки в linuxrc в части поддержки модульных ядер будет проще вносить, они пойдут отдельными блоками.
« Последнее редактирование: 03 Февраль 2016, 20:33:08 от ander »

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33974
  • Репутация: +231/-0
    • PuppyRus-A
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #42 : 04 Февраль 2016, 09:29:25 »
Интересная тема надо попробовать реализовать. Возьметесь? Чтобы не в 4 руки делать?

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
  • Автор темы
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #43 : 04 Февраль 2016, 22:22:42 »
Вот, на основе 160202.
Не проверял пока, сегодня некогда было, завтра попробую погонять.
Сигнатура, в общем то, сама образовалась, там уже проверялось наличие модулей ядра в инитрд и заводилась переменнная kmlist.
Вот по ее непустому состоянию 000-kernel и драйвера nvidea/amd и будут браться из kernel/$(uname -r)/
Туда же удобно положить и само ядро с дополнительным initrd.
А если модулей в инитрд нет, все останется как раньше.

Оффлайн sfs

  • Администратор
  • Ветеран
  • ****
  • Сообщений: 33974
  • Репутация: +231/-0
    • PuppyRus-A
Re:pra-porteus-initrd + обычное aufs ядро
« Ответ #44 : 08 Февраль 2016, 18:10:15 »
Проверил 160204 - работает. Два 000-kernel.pfs - дают ошибку, похоже, монтируются в одну директорию
Модули ядер надо 000-kernel`uname -r`.pfs - так удобнее
Непустой $kmlist - значит только для больших ядер... Почему бы для всех не сделать? Т.е. поубирать [ "$kmlist" ] &&

Чего-то сложновато и неудобно kernel/`uname -r`/
Мне кажется лучше base/000-kernel`uname -r`.pfs и если он есть - фильтрануть остальные 000-kernel* , чтобы не грузились ...
Определение видях криво работает и сигнатуры устарели - лучше вообще убрать