Compilando un kernel en un sistema diferente

Compilando un kernel en un sistema diferente

Trabajo para Nimbix y tengo acceso a algunos sistemas multinúcleo bastante potentes. Tengo la intención de crear un servicio de compilación del kernel.

Los sistemas pueden tener hasta 128 núcleos y en mi prueba inicial con 32 núcleos, puedo compilar muy rápido; estos son los tiempos para make -j32Linux 4.8.12:

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

En mi computadora portátil Dell Precision 6500, todavía no se había compilado después de unos 25 minutos.

Mi primera prueba es intentar construir un kernel para mi propio sistema (Arch Linux).

Obtuve bzImage, el /lib/modulesdirectorio del sistema remoto, copiado a mi sistema.

Ahora cuando intento hacer algo mkinitcpiome sale el error:

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

(Tomé el archivo .config del kernel base de /proc/config.gz; tengo esa versión del kernel ck-nehalem)

¿Cómo hago para que esto funcione? ¿Cuál es la forma general de transferir módulos de otro sistema a aquel donde se construye la imagen initramfs? ¿Se pueden construir initramfs también de forma remota?

En una ligera tangente, ¿sería útil un servicio de compilación del kernel de este tipo para los desarrolladores y aficionados al kernel? El costo de usar el clúster de cómputo es de aproximadamente $3 por hora, por lo que una sola compilación apenas cuesta nada.

Respuesta1

Así que respondo mi propia pregunta por si a alguien más le resulta útil.

Definitivamente puedes construir un initramfs de forma remota siempre que ejecutes

make modules_install

en el sistema remoto; sin embargo, nunca pude lograr que la imagen contuviera los módulos que necesitaba, especialmente el material md raido. No pude crear un initramfs que iniciara mi sistema. Pero creo que se puede hacer si mencionas explícitamente todos los módulos en mkinitcpio.conf.

Algunos módulos como nvidia también requieren que se ejecute dkms para construir los módulos necesarios.

Si copia los módulos en /lib/modules/ a su sistema local, debe rehacer los enlaces buildy sourceapuntar a un directorio que contenga la fuente del kernel de Linux; los enlaces realizados en el lado remoto no serán válidos.

Respuesta2

Con respecto a los módulos md raid que faltan en initramfs, también hay una manera de abrir un archivo initramfs y agregar los módulos que necesite, y luego recrear un nuevo initramfs basado en el original, pero incluyendo esta vez los módulos que agregó. Lo hice en Fedora varias veces y creo que también se puede hacer en Arch Linux. Alternativamente, tal vez esto se pueda hacer configurando el archivo mkinitcpio.conf o mediante un parámetro para mkinitcpio.

Rami Rosen

Respuesta3

Debe compilar el kernel en local y compilar el kernel compilado como paquete .deb/.rpm e instalarlo en forma remota, como si instalara el kernel binario desde repositorios.

información relacionada