Compilando um kernel em um sistema diferente

3

Eu trabalho para o Nimbix e tenho acesso a alguns sistemas multicore bastante poderosos, pretendo fazer um serviço de compilação do kernel.

Os sistemas podem ter até 128 núcleos e no meu teste inicial com 32 núcleos, eu posso compilar muito rápido - estes são os tempos para make -j32 para 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 o meu próprio sistema (Arch Linux).

Eu obtive o bzImage do diretório /lib/modules do sistema remoto copiado para o meu sistema.

Agora, quando tento fazer um mkinitcpio , recebo o erro:

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

(Eu peguei o arquivo .config do kernel base do /proc/config.gz - eu tenho essa 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 em que a imagem do initramfs é construída? Os initramfs podem ser construídos remotamente também?

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

    
por rep_movsd 15.12.2016 / 13:37

3 respostas

1

Estou respondendo a minha pergunta caso seja útil para outra pessoa.

Você pode definitivamente criar um initramfs remotamente contanto que você execute

make modules_install

no sistema remoto - no entanto, nunca consegui que a imagem contivesse os módulos que eu precisava - especialmente o material do md raido. , Não consegui criar um initramfs que inicializaria meu sistema. Mas eu 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 requerem 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, terá que refazer os links build e source para apontar para um diretório que contenha a origem do kernel do Linux - os links feitos no remoto lado será inválido.

    
por 26.12.2016 / 16:55
1

Com relação aos módulos md raid ausentes no initramfs - há também uma maneira de abrir um arquivo initramfs e adicionar os módulos necessários e, em seguida, recriar um novo initramfs com base no original, mas incluindo os módulos adicionados. Eu fiz isso no Fedora várias vezes, e acredito que isso pode ser feito também no Arch linux. Alternativamente, talvez isso possa ser feito através da configuração do arquivo mkinitcpio.conf ou por um parâmetro para mkinitcpio.

Rami Rosen

    
por 26.12.2016 / 18:46
-1

Você deve compilar o kernel no local e compilar o kernel compilado como o pacote .deb / .rpm e instalar no remoto. Como você instalou o kernel binário do repositório.

    
por 15.12.2016 / 16:11