Есть такой сборочный скрипт (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 нодам, которые собирают те же самые бинарники.
Где я ошибся? Заранее спасибо.