Mantendo modulos externos na atualização do Kernel do RHEL 4 (ES/AS)

Posted by kairo on Sat 28 July 2007

Contexto

Servidor contém por exemplo o módulo de uma controladora RAID (a320raid no exemplo prático). Este módulo não tem suporte no Kernel padrão do Red Hat Enterprise Linux (RHEL), desta forma ele não está incluso no initrd gerado pós instalação.

Essa documentação mostra uma forma simples de incluir este modulo no initrd.

Pré-requesistos

1. Instalar Kernel novo;
2. Instalar pacote devel do Kernel novo;
3. Fazer backup do initrd atual existente no /boot/.

Procedimento

1. Copiar o modulo do kernel atual (rodando) para o novo kernel (instalado);
2. Gerar novo initrd com o módulo;
3. Certificar que o modulo está no novo initrd.

Na prática:

Pré-requesistos

1. Instalar Kernel novo:

[root@kfaserver kairo]# rpm -ivh kernel-smp-2.6.9-55.0.2.EL.i686.rpm –test Preparing… ########################################### [100%] [root@kfaserver kairo]# rpm -ivh kernel-smp-2.6.9-55.0.2.EL.i686.rpm Preparing… ########################################### [100%] 1:kernel-smp ########################################### [100%] WARNING: No module a320raid found for kernel 2.6.9-55.0.2.ELsmp, continuing anyway [root@kfaserver kairo]#

Veja que no WARNING acima o Sistema Operacional já informa que um modulo não foi encontrado.
Justamente este que estaremos incluindo.

2. Instalar pacote devel do Kernel novo:

Este pacote contem os sources necessários.
`[root@kfaserver kairo]# rpm -ivh kernel-smp-devel-2.6.9-55.0.2.EL.i686.rpm –test Preparing…

##################################### [100%] [root@kfaserver

kairo]# rpm -ivh kernel-smp-devel-2.6.9-55.0.2.EL.i686.rpm Preparing…

##################################### [100%] 1:kernel-smp-devel
##################################### [100%] [root@kfaserver

kairo]#`

Fazer backup do initrd atual existente no /boot/: Este backup nos garante um fallback.

[root@kfaserver kairo]# cp initrd-2.6.9-55.0.2.ELsmp.img initrd-2.6.9-55.0.2.ELsmp.img_bkp

Procedimento

1. Copiar o modulo do kernel atual (rodando) para o novo kernel (instalado):

Verificando a versão original, nesse caso 2.6.9-11.ELsmp

[root@kfaserver kairo]# uname -a Linux kfaserver.kairo.eti.br 2.6.9-11.ELsmp #1 SMP Fri May 20 18:26:27 EDT 2005 i686 i686 i386 GNU/Linux

Acessando o diretório do novo Kernel instalado

[root@kfaserver kairo]# cd /lib/modules/2.6.9-55.0.2.ELsmp/

Localizando na versão original a localização default do módulo

[root@kfaserver 2.6.9-55.0.2.ELsmp]# find /lib/modules/2.6.9-11.ELsmp -name a320raid* /lib/modules/2.6.9-11.ELsmp/updates/a320raid.ko

Criando os diretórios existentes e o módulo. O importante é deixar o mesmo path.

[root@kfaserver 2.6.9-55.0.2.ELsmp]# mkdir updates [root@kfaserver 2.6.9-55.0.2.ELsmp]# cd updates [root@kfaserver updates]# cp /lib/modules/2.6.9-11.ELsmp/updates/a320raid.ko

2. Gerar novo initrd com o módulo:

[root@kfaserver kairo]# mkinitrd -fv –with=a320raid /boot/initrd-2.6.9-55.0.2.ELsmp.img 2.6.9-55.0.2.ELsmp [root@kfaserver kairo]# mkinitrd -v -f –with=a320raid /boot/initrd-2.6.9-55.0.2.ELsmp.img 2.6.9-55.0.2.ELsmp Creating initramfs Looking for deps of module scsi_mod Looking for deps of module sd_mod scsi_mod Looking for deps of module scsi_mod Looking for deps of module unknown Looking for deps of module a320raid Looking for deps of module aic79xx scsi_mod Looking for deps of module scsi_mod Looking for deps of module ide-disk Looking for deps of module ext3 jbd Looking for deps of module jbd Looking for deps of module a320raid Using modules: ./kernel/drivers/scsi/scsi_mod.ko ./kernel/drivers/scsi/sd_mod.ko ./a320raid.ko ./kernel/drivers/scsi/aic7xxx/aic79xx.ko ./kernel/fs/jbd/jbd.ko ./kernel/fs/ext3/ext3.ko /sbin/nash -> /tmp/initrd.EV1881/bin/nash /sbin/insmod.static -> /tmp/initrd.EV1881/bin/insmod /sbin/udev.static -> /tmp/initrd.EV1881/sbin/udev /etc/udev/udev.conf -> /tmp/initrd.EV1881/etc/udev/udev.conf copy from /lib/modules/2.6.9-55.0.2.ELsmp/./kernel/drivers/scsi/scsi_mod.ko(elf32-i386) to /tmp/initrd.EV1881/lib/scsi_mod.ko(elf32-i386) copy from /lib/modules/2.6.9-55.0.2.ELsmp/./kernel/drivers/scsi/sd_mod.ko(elf32-i386) to /tmp/initrd.EV1881/lib/sd_mod.ko(elf32-i386) copy from /lib/modules/2.6.9-55.0.2.ELsmp/./a320raid.ko(elf32-i386) to /tmp/initrd.EV1881/lib/a320raid.ko(elf32-i386) copy from /lib/modules/2.6.9-55.0.2.ELsmp/./kernel/drivers/scsi/aic7xxx/aic79xx.ko(elf32-i386) to /tmp/initrd.EV1881/lib/aic79xx.ko(elf32-i386) copy from /lib/modules/2.6.9-55.0.2.ELsmp/./kernel/fs/jbd/jbd.ko(elf32-i386) to /tmp/initrd.EV1881/lib/jbd.ko(elf32-i386) copy from /lib/modules/2.6.9-55.0.2.ELsmp/./kernel/fs/ext3/ext3.ko(elf32-i386) to /tmp/initrd.EV1881/lib/ext3.ko(elf32-i386) Loading module scsi_mod Loading module sd_mod Loading module a320raid Loading module aic79xx Loading module jbd Loading module ext3

3. Certificar que o modulo está no novo initrd:

Descompactar o novo initrd e verificar o conteúdo garantindo que o modulo esta interno

[root@kfaserver kairo]# cd /tmp [root@kfaserver tmp]# mkdir initrd [root@kfaserver tmp]# cd initrd [root@kfaserver initrd]# mkdir src [root@kfaserver initrd]# cp /boot/initrd-2.6.9-55.0.2.ELsmp.img . [root@kfaserver initrd]# cd src [root@kfaserver src]# gzip -dc ../initrd-2.6.9-55.0.2.ELsmp.img | cpio -idv . etc etc/udev etc/udev/udev.conf init dev dev/console dev/tty2 dev/tty4 dev/null dev/ram dev/systty dev/tty1 dev/tty3 lib lib/a320raid.ko lib/jbd.ko lib/scsi_mod.ko lib/sd_mod.ko lib/ext3.ko lib/aic79xx.ko sys proc bin bin/nash bin/modprobe bin/udevstart bin/udev bin/hotplug bin/insmod loopfs sysroot sbin 3078 blocks


Comments !