
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 -j32
Linux 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/modules
directorio del sistema remoto, copiado a mi sistema.
Ahora cuando intento hacer algo mkinitcpio
me 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 build
y source
apuntar 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.