
Я работаю в Nimbix и имею доступ к некоторым довольно мощным многоядерным системам. Я намерен создать сервис компиляции ядра.
Системы могут иметь до 128 ядер, и в моем первоначальном тесте с 32 ядрами я смог выполнить компиляцию очень быстро — вот время для make -j32
Linux 4.8.12:
real 2m16.366s
user 29m18.732s
sys 2m28.616s
На моем ноутбуке Dell Precision 6500 компиляция так и не была выполнена спустя 25 минут.
Мой первый эксперимент — попытка собрать ядро для моей собственной системы (Arch Linux).
Я скопировал каталог bzImage /lib/modules
из удаленной системы в мою систему.
Теперь, когда я пытаюсь сделать это, mkinitcpio
я получаю ошибку:
==> ERROR: '/lib/modules/4.8.14-2-ck-nehalem' is not a valid kernel module directory
(Я взял базовый файл конфигурации ядра из /proc/config.gz - у меня версия ядра ck-nehalem)
Как мне это сделать? Каков общий способ переноса модулей из другой системы в ту, где собран образ initramfs? Можно ли собрать initramfs удаленно?
Немного поинтересовавшись, будет ли такой сервис компиляции ядра полезен для разработчиков и мастеров ядра? Стоимость использования вычислительного кластера составляет около 3$ в час, так что одна компиляция в итоге почти ничего не стоит.
решение1
Поэтому я отвечаю на свой собственный вопрос, возможно, это будет полезно кому-то еще.
Вы определенно можете создать initramfs удаленно, если вы запустите
make modules_install
на удаленной системе - однако, я так и не смог получить образ, содержащий необходимые мне модули - особенно md raido. ,Я не смог создать initramfs, который бы загружал мою систему. Но я думаю, что это можно сделать, если вы явно укажете все модули в mkinitcpio.conf
Некоторые модули, такие как nvidia, также требуют запуска dkms для сборки необходимых модулей.
Если вы копируете модули из /lib/modules/ в локальную систему, вам придется переделать ссылки build
и source
указать на каталог, содержащий исходный код ядра Linux — ссылки, созданные на удаленной стороне, будут недействительными.
решение2
Что касается отсутствующих модулей md raid в initramfs - есть также способ открыть файл initramfs и добавить любые необходимые модули, а затем воссоздать новый initramfs на основе оригинального, но включив в этот раз добавленные вами модули. Я делал это в Fedora несколько раз, и я считаю, что это можно сделать и в Arch linux. В качестве альтернативы, возможно, это можно сделать через настройку файла mkinitcpio.conf или с помощью параметра mkinitcpio.
Рами Розен
решение3
Вам следует скомпилировать ядро локально, собрать скомпилированное ядро как пакет .deb/.rpm и установить его удаленно. Так же, как вы установили бинарное ядро из репозиториев.