LINUX.ORG.RU

Почему XZ модули не загружаются?

 ,


0

1

Есть такой сборочный скрипт (CRUX Pkgbuild), который включает сжатие модулей посредством XZ и другие настройки ядра скриптом scripts/config, который поставляется вместе с исходниками ядра. Нет необходимости тащить за собой весь .config, рано или поздно позабыв чем он отличается от ванильки (inb4 scripts/diffconfig), а так всё «на виду», тем более что, надо-то всего несколько опций включать.

Так вот, при загрузке ОС выполняются правила iptables -t nat, а iptable_nat подхватывается как модуль (значение в ядре по-умолчанию), а поскольку модуль имеет .ko.xz формат, ядро ругается, что такого модуля нет. Сделав unxz модуль успешно загрузился вручную через modprobe.

ЧЯДНТ? Как сделать чтобы сжатые XZ модули подгружались ядром? В других дистрибутивах это работает!

name=linux
version=5.7.2
release=1
source=(https://cdn.kernel.org/pub/linux/kernel/v5.x/$name-$version.tar.xz)

build() {
        cd $name-$version
        make defconfig
        make kvmconfig

        # KO (Kernel Objects)
        scripts/config -e MODULE_COMPRESS
        scripts/config -e MODULE_COMPRESS_XZ

        # Virtualization
        scripts/config -m KVM
        scripts/config -m KVM_INTEL
        scripts/config -m KVM_AMD

        # SquashFS + OverlayFS
        scripts/config -e OVERLAY_FS

        scripts/config -e SQUASHFS
        scripts/config -e SQUASHFS_XZ

        # Sound
        scripts/config -e SND_HDA_INPUT_BEEP
        scripts/config -e SND_HDA_PATCH_LOADER
        scripts/config -e SND_HDA_CODEC_REALTEK
        scripts/config -e SND_HDA_CODEC_HDMI
        scripts/config -e SND_USB_AUDIO

        # AMD GPU
        scripts/config -m DRM_AMDGPU
        scripts/config -e DRM_AMD_ACP

        # nVidia GPU
        scripts/config -m DRM_NOUVEAU

        # "GIGABYTE X470 AORUS ULTRA GAMING" ethernet
        scripts/config -m CONFIG_IGB
        scripts/config -m CONFIG_IGBVF

        make olddefconfig
        make
        install -D -m 0644 "$(make -s image_name)" $PKG/lib/modules/$version/vmlinuz
        make INSTALL_MOD_PATH="$PKG" modules_install
        rm $PKG/lib/modules/$version/{source,build}
}

И чтобы не плодить треды сразу вопрос про distcc.

1. Чтобы distcc работало корректно на каждой «ноде» должна быть абсолютная точная конфигурация системы, включая все пакеты, все заголовочные файлы и прочая? Или нет? Просто на любом хосте, на любом дистрибутиве, может быть даже на любой архитектуре ставишь distcc и он творит такую магию, возвращая корретные скомпилированные бинарники?

2. Если происходит второй вариант с «магией», то может быть я создам загрузочный ISO с дистрибутивом, чтобы каждый желающий, кто хочет поделиться вычислительными ресурсами, просто загружал этот ISO в своей виртуалке/железке, становясь частью «улья», сообщая «матке» свой IP, куда далее все кому нужна быстрая сборка через distcc, «вступают и компилируют»?

3. Из второго варианта вытекает третий, если это может быть небезопасно, что вместо корректного бинарника тебе отправят условный майнер, может внедрить систему подписей или вроде того, как у пакетов дистрибутивов? Вообще, если пользователи линукс доверяют бинарным дистрибутивам в принципе, то не вижу оснований не доверять удалённым distcc нодам, которые собирают те же самые бинарники.

Где я ошибся? Заранее спасибо.

★★★★★

Ответ на: комментарий от anonymous

да, но после defconfig опция xz включается.

и в конце делается olddefconfig чтобы «по зависимостям» ядро само включило что ему нехватает, на основании того что было включено.

Spoofing ★★★★★ ()
Ответ на: комментарий от Spoofing

olddefconfig чтобы «по зависимостям» ядро само включило что ему нехватает, на основании того что было включено

судя по описанию из make help, опция olddefconfig просто ставит в дефолт новые символы, отсутствующие в .config. не уверен, что зависимости сами разрешаются в этом случае. попробовал сейчас через menuconfig включить опцию, там точно включаются ещё эти символы:

CONFIG_HAVE_KERNEL_XZ=y
CONFIG_MODULE_COMPRESS=y
CONFIG_MODULE_COMPRESS_XZ=y
CONFIG_XZ_DEC=y
CONFIG_DECOMPRESS_XZ=y
anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.