Tenho tentado carregar um arquivo initrd.img atualizado com drivers atualizados ao inicializar o Centos 7.6 ISO, mas parece que ainda carrega o driver antigo, embora eu tenha substituído o driver.
Passos dados:
Imagem initrd extraída da ISO:
- Montado CentOS 7.6 ISO
- Copiou o initrd.img de isolinux/initrd.img para a pasta temporária (/tmp/image)
- Criou uma nova pasta em /tmp/image/initrd
- Extraiu o initrd.img da pasta executando
xz -dc < ../initrd.img | cpio -idmv
Criado o arquivo do driver e1000e.ko.kz
- Baixe o driver da NIC e1000e mais recente no site da Intel: link para baixar e1000e
- Extraiu o arquivo tar
tar xvf e1000e-3.6.0.tar.gz
Faça o código fonte, garantindo que as bibliotecas gcc e kernel-devel estejam instaladas
cd e1000e-3.6.0/src make install
Nota: este driver foi compilado em um ambiente Linux criado pelo CentOS 7.6 ISO.
Copie o arquivo e1000e.ko criado para a pasta temporária (/tmp/image)
Compacte-o no formato .kz
xz -k e1000e.ko
Substitua o driver antigo e reempacote a imagem initrd.img
Copie o arquivo compactado do driver para substituir o driver existente
cp e1000e.ko.kz /tmp/image/initrd/files/lib/modules/3.10.0.957.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000e
- Reembale o initrd.img
cd /tmp/image/initrd find . 2>/dev/null | cpio -c -o | xz -9 --check=crc32 > ../initrd.img
- Copie o initrd.img gerado de volta para o ISO em isolinux/initrd.img e images/pxe/initrd.img
resultados esperados
Depois de atualizar o driver no initrd.img e copiá-lo para o ISO, espero que o novo driver (e1000e versão 3.6.0) seja carregado após a conclusão do processo de inicialização da instalação do ISO.
Resultados reais
Consigo inicializar a partir do ISO e instalar o Centos 7 a partir dele, porém após instalar o Centos, execute o seguinte comando:
modinfo e1000e
Fornece a versão antiga do driver que estava inicialmente no initrd.img (e1000e versão 3.2.6) em vez da versão 3.6.0 que carreguei na imagem initrd.img.
Não tenho muita certeza do que estou fazendo de errado, se estou criando o driver incorretamente, carregando o driver incorretamente, criando o initrd.img incorretamente ou qualquer outra coisa.
Qualquer ajuda seria apreciada, pois tenho tentado fazer isso funcionar nos últimos dias. Esta é minha primeira postagem, então deixe-me saber se estou fazendo algo errado ou se alguma informação adicional é necessária para depurar esse problema.
Saúde
Responder1
Acabei de descobrir isso. Os drivers também estão em LiveOS/squashfs.img rootfs.img. Portanto, os módulos initrd são sobrepostos ao rootfs.img. Isso ocorre durante o processo de instalação, mas assim que o sistema instalado inicializa, o driver vem de um RPM instalado (provavelmente o kernel neste caso), então o initrd não tem mais nada a ver com isso. Você precisaria atualizar esse RPM ou adicionar um RPM separado com o driver atualizado para que funcione no sistema instalado.