Ksplice - atualizando o kernel sem necessidade de reboot

Para quem tem problemas em atualizar o kernel ou aplicar patches em seus servidores, pois existem processos críticos sendo rodados e que não podem se dar ao luxo de parar para o reboot do sistema, eis a solução: Ksplice.

[ Hits: 15.972 ]

Por: flavio augusto marques adao em 18/08/2009


Instalando e utilizando



Para instalar é só seguir os passos, ou se você usa Ubuntu ou algum outro parente do Debian pode recorrer ao pacote .deb fornecido em http://www.ksplice.com.

Através do pacote binário:

wget http://www.ksplice.com/dist/ksplice-0.9.8-bin-i386.tar.gz
tar zxf ksplice-0.9.8-bin-i386.tar.gz
$ cd ksplice-0.9.8
$ ./configure
$ make
$ su root
# make install


Através do fonte:

wget http://www.ksplice.com/dist/ksplice-0.9.8-src.tar.gz
tar zxf ksplice-0.9.8-src.tar.gz
$ cd ksplice-0.9.8
$ ./configure
$ make
$ su root
# make install


Preparando o diretório:

mkdir ~/linux-source/ksplice
$ cp /boot/config-2.6.22-1-686-smp ~/linux-source/ksplice/.config
$ cp /boot/System.map-2.6.22-1-686-smp ~/linux-source/ksplice/System.map
$ ln -s /lib/modules/2.6.22-1-686-smp/build ~/linux-source/ksplice/build


Aplicando patches

Explicarei como aplicar o patch do printk, mas o mesmo procedimento serve para qualquer outro.

wget http://www.ksplice.com/doc/printk.patch
ksplice-create --patch=printk.patch ~/linux-source
Ksplice update tarball written to ksplice-8c4o6ucj.tar.gz

# ksplice-apply ./ksplice-8c4o6ucj.tar.gz
Done!

Estes comandos anteriores podem ser dados em qualquer diretório do sistema. Para testar seu funcionamento:

# dmesg | tail -n2
Quoth the kernel:
ksplice: Update 8c4o6ucj applied successfully

Se algo parecido foi exibido na tela, quer dizer que está tudo ok e podemos prosseguir.

Para alguns kernels mais antigos é necessário digitar:

# dmesg | tail -n3
Quoth the kernel:
Quoth the kernel:
ksplice: Update 8c4o6ucj applied successfully

Para ver as atualizações em ação:

# rmmod loop
# modprobe loop
# dmesg | tail -n2

Quoth the kernel:
loop: loaded (max 8 devices)

Revertendo as alterações

Exibindo as atualizações:

# ksplice-view
8c4o6ucj
# ksplice-view --id=8c4o6ucj
Ksplice id 8c4o6ucj is present in the kernel and is applied.

Here is the source code patch associated with this update:
--- linux-2.6/kernel/printk.c 2008-06-28 22:26:15.000000000 -0400
+++ linux-2.6-new/kernel/printk.c       2008-06-29 00:19:16.000000000 -0400
@@ -609,6 +609,7 @@
        va_list args;
        int r;

+       vprintk("Quoth the kernel:\n", NULL);
        va_start(args, fmt);
        r = vprintk(fmt, args);
        va_end(args);


Revertendo:

# ksplice-undo 8c4o6ucj
# dmesg | tail -n1

ksplice: Update 8c4o6ucj reversed successfully

Qualquer dúvida, uma maior documentação pode ser encontrada em: http://www.ksplice.com/manpages

Conclusão

Após estes procedimentos, aplicar patches ao kernel se tornará tarefa fácil de ser executada e não mais uma dor de cabeça como era para mim e suponho que para muitos também.

Um reboot de um servidor pode demorar vários minutos e agora pode ser simplificado em menos de 1 segundo.

Espero que tenham gostado e tirado algum proveito do artigo, pois esta é uma tecnologia nova e muitos não tem conhecimento. Meu papel não é de fazer um artigo técnico e sim divulgar esse programa, que é uma mão na roda para quem não pode reiniciar seus computadores.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Instalando e utilizando
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Compile e empacote o kernel com processadores ociosos em sua rede utilizando distcc, ccache e kernel-package no Debian

Compilando o kernel no Slackware com pacotes pré-compilados

Kernel atualizado no Debian - Parte II

NetFilter Hook em Kernel 2.6

Instalando automounter e configurando o autofs no Debian Sarge

  
Comentários
[1] Comentário enviado por snails em 19/08/2009 - 12:52h

Muito bom artigo, mas tenho uma dúvida.

No caso de atualização de kernel...por exemplo...eu tenhu um kernel de versão mais atual do que está operando. Eu o compilei em uma máquina de desenvolvimento a parte e gostaria de descompactá-lo no meu sistema. Ao realizar este procedimento eu consigo subir o kernel novo, mas preciso do reboot para que os módulos e o sistema suba neste kernel novo.

Gostaria de saber se, consigo gerar um patch com o kernel compilado novo, e fazer com que o ksplice suba os serviços neste kernel novo sem reboot.

Obrigado pela atenção e aguardo um retorno.

Snails

[2] Comentário enviado por gersonraymond em 19/08/2009 - 17:32h

Muito bom o artigo amigo e sinceramente meus parabéns pela ferramenta de extrema utilidade, sem comentários adicionais ... o próprio artigo já responde por si mesmo.

Um abraço.


[3] Comentário enviado por dfsantos em 20/08/2009 - 14:31h

Otimo artigo....parabens!

[4] Comentário enviado por ragen em 24/08/2009 - 18:12h

Olá Flávio,

Me tira uma dúvida:

E se por acaso o kernel não bootar, como um kernel que dá panic porque alguma recurso foi mal aplicado, ou conflitante com um kernel "não padrão" como muita gente que usa/usava patches do PaX/GrSec em seus servidores.

O Ksplice dá a opção de recover?


[5] Comentário enviado por flaviodm em 24/08/2009 - 23:28h

Ola ragen,

Tem jeito sim. Basta usar o ksplice-undo, por exemplo:

ksplice-apply ./ksplice-lalalalala.tar.gz
para remover basta digitar

ksplice-undo lalalalala

Quanto ao post do snails eu ainda nao testei mais parece que tem como atualizar os modulos sim.

ksplice-create --prebuild KERNEL_SOURCE
ksplice-apply --partial

Acho que isso deve resolver seu problema, qualquer duvida estou a disposiçao.
Abraços.

[6] Comentário enviado por aaron.binner em 26/08/2009 - 01:09h

Opa, não sabia sobre esta ferramenta. E com certeza é de grande valia para nós. Ótimo artigo parabéns.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts