Например, `depinfo sha256` на i586 ругается. На x86_64 тоже, если убрать sha256-ssse3.ko и sha256-mb.ko.
На каком ядре вы это получили ?
# depinfo sha256 module /lib/modules/4.19.8-un-def-alt1/kernel/arch/x86/crypto/sha256-ssse3.ko.gz module /lib/modules/4.19.8-un-def-alt1/kernel/arch/x86/crypto/sha256-mb/sha256-mb.ko.gz module /lib/modules/4.19.8-un-def-alt1/kernel/crypto/mcryptd.ko.gz x86_64, Sisyphus
похоже что от версии ядра это не зависит. А depinfo умеет вообще builtin модули искать ? # zcat /proc/config.gz|fgrep -i sha256 CONFIG_CRYPTO_SHA256_SSSE3=m CONFIG_CRYPTO_SHA256=y # depinfo sha256 module /lib/modules/4.4.82-std-def-alt0.M80P.1/kernel/arch/x86/crypto/sha256-ssse3.ko
Вероятно, проблема не в depinfo а в содержимом /lib/modules/4.4.82-std-def-alt0.M80P.1/modules.builtin.bin
Уберите sha256-ssse3.ko и sha256-mb.ko или пробуйте на i586.
(В ответ на комментарий №3) > похоже что от версии ядра это не зависит. А depinfo умеет вообще builtin модули > искать ? # grep crc16 /lib/modules/4.15.0-lks-wks-alt7/modules.builtin kernel/lib/crc16.ko # depinfo crc16 builtin crc16 Умеет.
(В ответ на комментарий №1) > На каком ядре вы это получили ? i586 4.19.9
(В ответ на комментарий №4) > Вероятно, проблема не в depinfo а в содержимом > /lib/modules/4.4.82-std-def-alt0.M80P.1/modules.builtin.bin Очень на это похоже.
В общем всё просто - # depinfo sha256_generic builtin sha256_generic depinfo почему-то не умеет находить модуль по алиасу, если он вкомпилён в ядро.
(В ответ на комментарий №9) > В общем всё просто - > # depinfo sha256_generic > builtin sha256_generic > > depinfo почему-то не умеет находить модуль по алиасу, если он вкомпилён в ядро. # grep sha256_generic /lib/modules/4.15.0-lks-wks-alt7/modules.* /lib/modules/4.15.0-lks-wks-alt7/modules.builtin:kernel/crypto/sha256_generic.ko Что значит почему-то ? Очевидно почему )) depinfo не может найти по алиасу потому что он ничего про него не знает. Если модуль вкомпилен, то алиаса не будет в базе. Только упоминание в modules.builtin.
с файлом modules.builtin всё хорошо. # fgrep sha256 /lib/modules/4.19.8-un-def-alt1/modules.builtin kernel/crypto/sha256_generic.ko Нужно что бы depinfo научился читать алиасы вкомпилённых в ядро модулей.
А modprobe умеет же учитывать алиасы вкомпилированных модулей ? может быть есть какой-то интерфейс для того, что бы их прочитать.
Это не я придумал. Так работает kmod. Если бы ядро клало инфу про вкомпиленные модули куда-нибудь, то kmod мог бы с этим работать.
(В ответ на комментарий №12) > А modprobe умеет же учитывать алиасы вкомпилированных модулей ? Он использует ту же библиотеку libkmod. > может быть есть какой-то интерфейс для того, что бы их прочитать. Я не знаю такого.
(В ответ на комментарий №11) > Нужно что бы depinfo научился читать алиасы вкомпилённых в ядро модулей. Для начала нужно научиться при собрке ядра их вынимать и класть в modules.*.
Если алиасы будут в modules.alias, то depinfo будет их искать. И кстати: # modinfo sha256_generic modinfo: ERROR: Module sha256_generic not found. # modprobe -D sha256_generic builtin sha256_generic # modprobe -D sha256 insmod /lib/modules/4.15.0-lks-wks-alt7/kernel/arch/x86/crypto/sha256-ssse3.ko.xz insmod /lib/modules/4.15.0-lks-wks-alt7/kernel/crypto/mcryptd.ko.xz insmod /lib/modules/4.15.0-lks-wks-alt7/kernel/arch/x86/crypto/sha256-mb/sha256-mb.ko.xz # depinfo sha256 module /lib/modules/4.15.0-lks-wks-alt7/kernel/arch/x86/crypto/sha256-ssse3.ko.xz module /lib/modules/4.15.0-lks-wks-alt7/kernel/arch/x86/crypto/sha256-mb/sha256-mb.ko.xz module /lib/modules/4.15.0-lks-wks-alt7/kernel/crypto/mcryptd.ko.xz depinfo ведёт себя как modprobe.
Да да, я тоже это нашёл.
(В ответ на комментарий №15) > Для начала нужно научиться при собрке ядра их вынимать и класть в modules.*. depmod это тогда должен уметь делать.
modprobe, кстати, каким-то образом узнаёт что sha256 вкомпилён в ядро как sha256_generic и его не надо грузить специально.
(В ответ на комментарий №19) > modprobe, кстати, каким-то образом узнаёт что sha256 вкомпилён в ядро как > sha256_generic и его не надо грузить специально. Не узнаёт. Достаточно убрать в сторонку sha256-ssse3.ko и sha256-mb.ko . # modprobe sha256 modprobe: FATAL: Module sha256 not found in directory /lib/modules/4.19.9-un-def-alt1
В libkmod явно есть код, который пытается получить список алиасов для builtin модулей. См. kmod_lookup_alias_from_builtin_file
> (В ответ на комментарий №15) > > Для начала нужно научиться при собрке ядра их вынимать и класть в modules.*. > depmod это тогда должен уметь делать. depmod это всего лишь утилита. В модулях вся информация содержится и depmod её складывает в файлы. Про вкомпиленные модули инфы взять просто неоткуда. В /boot/vmlinuz её нет. Ребят, это старая песня про зависимости. И это всё скорее про kmod и ядро чем про depinfo.
(В ответ на комментарий №21) > В libkmod явно есть код, который пытается получить список алиасов для builtin > модулей. > См. kmod_lookup_alias_from_builtin_file Это поиск по modules.builtin.
(В ответ на комментарий №21) > См. kmod_lookup_alias_from_builtin_file kmod_lookup_alias_is_builtin
(В ответ на комментарий №23) > > См. kmod_lookup_alias_from_builtin_file > Это поиск по modules.builtin. kmod_lookup_alias_is_builtin такой, а kmod_lookup_alias_from_builtin_file еще пытается делать kmod_module_new_from_name.
(В ответ на комментарий №25) > (В ответ на комментарий №23) > > > См. kmod_lookup_alias_from_builtin_file > > Это поиск по modules.builtin. > kmod_lookup_alias_is_builtin такой, а kmod_lookup_alias_from_builtin_file еще > пытается делать kmod_module_new_from_name. Серёг, и что ? kmod_module_new_from_name просто делает структуру по имени модуля, где alias будет пустым. Эта функция не делает ничего волшебного. kmod НЕ может получить информацию о alias из builtin модулей. Эта информация должна предоставляться ядром потому что они все там.
(В ответ на комментарий №26) > kmod_module_new_from_name просто делает структуру по имени модуля, где alias > будет пустым. Эта функция не делает ничего волшебного. Ну, я её не читал и надеялся на волшебство. :-)
В принципе в ядре в /proc есть другая полезная информация, из которой можно определить наличие нужных нам builtin модулей (/proc/crypto, /proc/kallsyms), но она естественно доступна только для работающего ядра. А тут действительно - надо или выносить всем модули crypto из ядра, или придумывать какой-то механизм, герерирующий алиасы для builtin модулей на этапе сборки.
(В ответ на комментарий №27) > > kmod_module_new_from_name просто делает структуру по имени модуля, где alias > > будет пустым. Эта функция не делает ничего волшебного. > Ну, я её не читал и надеялся на волшебство. :-) В depinfo я пытался выжать всё что можно из libkmod (( Тут нужно что-то типа /boot/config-*, но для модулей. Я вообще не уверен, что инфу по алиасам можно вытянуть в момент компиляции. Наверно всё-таки можно. (В ответ на комментарий №28) > В принципе в ядре в /proc есть другая полезная информация, из которой можно > определить наличие нужных нам builtin модулей (/proc/crypto, /proc/kallsyms), > но она естественно доступна только для работающего ядра. Угу. Поэтому это не вариант. Есть ещё /boot/config-VER, где можно по CONFIG_* поискать, но это достаточно ненадёжно и условно получается. Плюс зависит от версии ядра. > А тут действительно - надо или выносить всем модули crypto из ядра, или > придумывать какой-то механизм, герерирующий алиасы для builtin модулей на этапе > сборки. Именно.
sha256_generic вынести из ядра не получится, он нужен для kexec.
Виталий и Сергей, не знаете, можно ли каким-то образом вычленить алиасы builtin модулей из собранного ядра ? Ну или на этапе сборки получить тот же список.
(В ответ на комментарий №30) > sha256_generic вынести из ядра не получится, он нужен для kexec. У меня есть некоторый хак для обхода зависимостей: https://github.com/legionus/make-initrd/tree/master/kmodule.deps.d
> можно ли каким-то образом вычленить алиасы builtin модулей из собранного ядра ? Этой информации нет в vmlinux. Она создается только для будущих модулей (у кого CONFIG_X=m) в секции .modinfo. Для built-in модулей секция .modinfo не создается. Пролетали патчи, которые её создают, но они не прошли. http://lkml.iu.edu/hypermail//linux/kernel/0512.0/0024.html http://lkml.iu.edu/hypermail//linux/kernel/0501.3/2388.html > Ну или на этапе сборки получить тот же список. Только запарсить исходники ядра на MODULE_ALIAS.
Тогда есть предложение расширять логику make-initrd по определению builtin модулей.
Как второй вариант - пренебречь размером initramfs и укладывать в него все существующие модули ядра, включая firmware.
(В ответ на комментарий №34) > Тогда есть предложение расширять логику make-initrd по определению builtin > модулей. Антон, это предложение из серии "сделайте мне зашибись". Если информации нет, то я затрудняюсь написать фичу использующую тёмную сторону Силы. Ситхи просили меня не пользоваться ею для написания программ. Я конечно могу "запарсить исходники ядра на MODULE_ALIAS" и дополнить информацию в modules.alias, но тогда для создания initrd будут требоваться исходники ядра. С другой стороны, если бы это происходило во время сборки ядра и сохранялось например в /lib/modules/KVER/modules.builtin.alias, то это можно было бы использовать при генерации initrd. Есть ещё вариант использовать System.map, но это хардкор и может захакать только конкретную проблему, а не общее решение. (В ответ на комментарий №35) > Как второй вариант - пренебречь размером initramfs и укладывать в него все > существующие модули ядра, включая firmware. Ну это всегда пожалуйста: MODULES_ADD = ^. и будет ubuntu-way
Нет, я про то, что бы добавить явную зависимость у luks на sha256 в самом make-initrd. Прям вот только для этого случая.
(В ответ на комментарий №37) > Нет, я про то, что бы добавить явную зависимость у luks на sha256 в самом > make-initrd. > > Прям вот только для этого случая. Ты про вот эту зависимость: https://github.com/legionus/make-initrd/blob/master/features/luks/config.mk#L8 ?
Антон, а можно ли у нас придумать какие-нибудь post-%install-скрипты для ядра, чтобы можно было после сборки ядра покопаться в RPM/BUILD и сгенерировать дополнительную инфу ? Тогда я бы мог сделать скрипт для дерева ядра и ответную часть в фичу оформить.
Про зависимость: да - зависимость эта, но как-то нужно make-initrd сказать что у нас sha256_generic всегда builtin. Про скрипты: Можно придумать, почему нет. Я же правильно понял - тебя интересует некий rpm макрос, который будет выполняться сразу после сборки и установки ядра ? boyarsh@ : Антон, нет возражений ?
(В ответ на комментарий №39) > Антон, а можно ли у нас придумать какие-нибудь post-%install-скрипты для ядра, > чтобы можно было после сборки ядра покопаться в RPM/BUILD и сгенерировать > дополнительную инфу ? Если будет какой-то скрипт, то запускать его в процессе сборки наших ядер -- не проблема.
(В ответ на комментарий №40) > Про зависимость: да - зависимость эта, но как-то нужно make-initrd сказать что > у нас sha256_generic всегда builtin. Нужно подумать как это лучше сделать. > Про скрипты: Можно придумать, почему нет. > Я же правильно понял - тебя интересует некий rpm макрос, который будет > выполняться сразу после сборки и установки ядра ? Да. Я попробую сделать утилиту, которая будет собирать дополнительную информацию про ядро. Если его выполнять при сборке ядра и паковать результаты, то make-initrd будет умнее. Такой у меня план.
Created attachment 7929 [details] kernel builtin modinfo Мы тут с Глебом попили пиво и получился вот такой патч. Нужно будет ещё научить kmod читать и понимать эту информацию.
Антон, приложите пожалуйста патчик к ядрам в сизифе.
(В ответ на комментарий №44) > Антон, приложите пожалуйста патчик к ядрам в сизифе. Ага, что-то я пропустил письмо с патчем, видимо, по случаю нового года, приложу.
(В ответ на комментарий №45) > (В ответ на комментарий №44) > > Антон, приложите пожалуйста патчик к ядрам в сизифе. > > Ага, что-то я пропустил письмо с патчем, видимо, по случаю нового года, > приложу. Будет в следующем std-def в Сизифе
Ещё к un-def, пожалуйста.
make-initrd с поддержкой kernel.builtin.modinfo уже в сизифе.
При наличии kernel.builtin.modinfo depinfo из make-initrd-2.2.8 ищет по алиасам вкомпиленных модулей.
make-initrd-2.3.0-alt1.x86_64 5.4.11-un-def-alt1 # grep sha256 modules.builtin kernel/crypto/sha256_generic.ko kernel/lib/crypto/libsha256.ko В modules.builtin.modinfo буквы "sha256_generic" тоже есть. Удаляю sha256-ssse3.ko.gz, делаю `depmod -a`, после чего # depinfo sha256 depinfo: ERROR: Module sha256 not found.
make-initrd, соответственно: Adding modules (postload) ... add-module: No module "sha256" found for kernel 5.4.11-un-def-alt1 make: *** [/usr/share/make-initrd/features/add-modules/rules.mk:31: load-modules] Ошибка 1 make: *** [/usr/share/make-initrd/mk/make-initrd.mk:29: all] Ошибка 1
Исправлено в make-initrd-2.4.0-alt1