Kompilieren eines Kernels auf einem anderen System

Kompilieren eines Kernels auf einem anderen System

Ich arbeite für Nimbix und habe Zugriff auf einige ziemlich leistungsstarke Multicore-Systeme. Ich beabsichtige, einen Dienst zur Kernel-Kompilierung zu erstellen.

Die Systeme können bis zu 128 Kerne haben und in meinem ersten Test mit 32 Kernen konnte ich wirklich schnell kompilieren – dies sind die Zeiten für make -j32Linux 4.8.12:

real    2m16.366s
user    29m18.732s
sys     2m28.616s

Auf meinem Dell Precision 6500-Laptop war es nach etwa 25 Minuten immer noch nicht kompiliert.

Mein erster Test ist der Versuch, einen Kernel für mein eigenes System (Arch Linux) zu erstellen.

Ich habe das bzImage- /lib/modulesVerzeichnis vom Remote-System auf mein System kopiert.

Wenn ich jetzt versuche, eins auszuführen, mkinitcpioerhalte ich die folgende Fehlermeldung:

==> ERROR: '/lib/modules/4.8.14-2-ck-nehalem' is not a valid kernel module directory

(Ich habe die .config-Datei des Basiskernels aus /proc/config.gz genommen – ich habe diese ck-nehalem-Kernelversion)

Wie bekomme ich das zum Laufen? Wie übertrage ich Module im Allgemeinen von einem anderen System auf das System, auf dem das Initramfs-Image erstellt wird? Kann das Initramfs auch remote erstellt werden?

Um ein wenig abzuschweifen: Wäre ein solcher Kernel-Kompilierungsdienst für Kernel-Entwickler und -Bastler nützlich? Die Kosten für die Nutzung des Computerclusters betragen etwa 3 $ pro Stunde, sodass eine einzelne Kompilierung kaum etwas kostet.

Antwort1

Daher beantworte ich meine eigene Frage, falls sie für jemand anderen nützlich ist.

Sie können definitiv ein initramfs remote erstellen, solange Sie

make modules_install

auf dem Remote-System - allerdings konnte ich das Image nie so einrichten, dass es die Module enthielt, die ich brauchte - insbesondere das MD-Raido-Zeug. Ich konnte kein Initramfs erstellen, das mein System booten würde. Aber ich denke, es ist möglich, wenn Sie alle Module explizit in mkinitcpio.conf angeben

Für einige Module wie NVIDIA muss zum Erstellen der benötigten Module auch DKMS ausgeführt werden.

Wenn Sie die Module in /lib/modules/ auf Ihr lokales System kopieren, müssen Sie die Links neu erstellen buildund sourceauf ein Verzeichnis verweisen, das die Linux-Kernelquelle enthält – die auf der Remote-Seite erstellten Links sind ungültig.

Antwort2

Bezüglich der fehlenden MD-RAID-Module in Initramfs – es gibt auch eine Möglichkeit, eine Initramfs-Datei zu öffnen und die benötigten Module hinzuzufügen und dann ein neues Initramfs auf Basis des Originals zu erstellen, diesmal jedoch mit den von Ihnen hinzugefügten Modulen. Ich habe dies mehrmals in Fedora gemacht und ich glaube, dass dies auch in Arch Linux möglich ist. Alternativ kann dies möglicherweise durch Konfigurieren der Datei mkinitcpio.conf oder durch einen Parameter für mkinitcpio erfolgen.

Rami Rosen

Antwort3

Sie sollten den Kernel lokal kompilieren, den kompilierten Kernel als .deb/.rpm-Paket erstellen und ihn remote installieren, so, als hätten Sie den binären Kernel aus Repos installiert.

verwandte Informationen