Compilando um kernel em um sistema diferente

Compilando um kernel em um sistema diferente

Trabalho na Nimbix e tenho acesso a alguns sistemas multicore bastante poderosos, pretendo fazer um serviço de compilação de kernel.

Os sistemas podem ter até 128 núcleos e no meu teste inicial com 32 núcleos, consigo compilar muito rápido - esses são os horários para make -j32o Linux 4.8.12:

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

No meu laptop Dell Precision 6500, ele ainda não havia sido compilado após cerca de 25 minutos.

Meu primeiro teste é tentar construir um kernel para meu próprio sistema (Arch Linux).

Eu /lib/modulescopiei o bzImage do diretório do sistema remoto para o meu sistema.

Agora, quando tento fazer, mkinitcpiorecebo o erro:

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

(Peguei o arquivo .config do kernel base em /proc/config.gz - tenho aquela versão do kernel ck-nehalem)

Como faço para que isso funcione? Qual é a maneira geral de transferir módulos de outro sistema para aquele onde a imagem initramfs é construída? O initramfs também pode ser construído remotamente?

Em uma ligeira tangente, esse serviço de compilação de kernel seria útil para desenvolvedores e criadores de kernel? O custo de usar o cluster de computação é de cerca de 3$ por hora, então uma única compilação acaba custando quase nada.

Responder1

Portanto, estou respondendo minha própria pergunta caso seja útil para outra pessoa.

Definitivamente, você pode construir um initramfs remotamente, desde que execute

make modules_install

no sistema remoto - no entanto, nunca consegui fazer com que a imagem contivesse os módulos necessários - especialmente o material do md raido. , não consegui criar um initramfs que inicializasse meu sistema. Mas acho que isso pode ser feito se você mencionar explicitamente todos os módulos em mkinitcpio.conf

Alguns módulos como o nvidia também exigem que o dkms seja executado para construir os módulos necessários.

Se você copiar os módulos em /lib/modules/ para o seu sistema local, você terá que refazer os links builde sourceapontar para um diretório que contém a fonte do kernel Linux - os links feitos no lado remoto serão inválidos.

Responder2

Em relação aos módulos md raid ausentes no initramfs - também há uma maneira de abrir um arquivo initramfs e adicionar os módulos necessários e, em seguida, recriar um novo initramfs baseado no original, mas desta vez incluindo os módulos que você adicionou. Já fiz isso várias vezes no Fedora, e acredito que isso também pode ser feito no Arch linux. Alternativamente, talvez isso possa ser feito configurando o arquivo mkinitcpio.conf ou por um parâmetro para mkinitcpio.

Rami Rosen

Responder3

Você deve compilar o kernel localmente e construir o kernel compilado como pacote .deb/.rpm e instalar no remoto. Da mesma forma que você instalou o kernel binário dos repositórios.

informação relacionada