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.