Falando UNIX: Conheça o Ksplice

Dê boot aos reboots

O Ksplice aplica correções do kernel dinamicamente—sem necessidade de reboot—em uma fração de segundo. Aqui está um guia prático para realizar atualizações de sistema facilmente

Martin Streicher, Software Developer, Pixel, Byte, and Comma

author photo - martin streicherMartin Streicher é desenvolvedor autônomo de Ruby on Rails e o editor-chefe anterior da Linux Magazine. Martin é Mestre em Ciência da Computação pela Purdue University e faz programação de sistemas do tipo UNIX desde 1986. Ele coleciona arte e brinquedos.



20/Ago/2010

As máquinas UNIX® executam e executam (e executam). Um sistema de desktop ou móvel pode ser deixado de lado por semanas, até meses, e o tempo de atividade do servidor pode se estender a um ano ou mais. De fato, se pudesse impedir falhas de hardware e a Mãe Natureza, um sistema UNIX ficaria em execução eternamente. Infelizmente, o hardware é imperfeito, a Mãe Natureza tem sua própria vontade, e o software sofre erros. O mecanismo precisa de substituição. Tempestades podem acontecer e acontecem. E os sistemas precisam de correções e reinicializações. Assim como a morte e os impostos, o tempo de inatividade é uma certeza.

No entanto, diferentemente da morte e dos impostos, é possível minimizar o tempo de inatividade. Uma manutenção do sistema proativa e regular e peças de reposição impulsionam a disponibilidade, assim como em um robusto datacenter repleto de capacidade de backup e conexões redundantes à Internet. Felizmente, também, a maioria dos aplicativos e bibliotecas pode ser atualizada continuamente e on demand usando ferramentas como rpm, Aptitude e yum.

Infelizmente, as atualizações do kernel—modificações para abranger vulnerabilidades e falhas no software do sistema principal—não são tão fáceis. Uma atualização do kernel é muito perturbante, exigindo um tempo de inatividade programado para interromper temporariamente todos os serviços em toda e qualquer máquina afetada. Embora essa manutenção seja necessária e vital, acompanhar as atualizações do kernel pode, contudo, tornar as operações algo parecido com um ioiô. A saber, as linhas de tempo na figura 1 mostram a frequência das atualizações críticas do kernel de um número de sistemas operacionais populares entre janeiro de 2009 e fevereiro de 2010. Cada ícone de ciclo representa uma reinicialização obrigatória (imagem cortesia da Ksplice, Inc.).

Figura 1. Frequência de atualizações do kernel por sistema operacional
Frequency of kernel updates by operating system

Mas agora, é possível corrigir seu kernel enquanto ele é executado, eliminando a interrupção maciça causada por uma reinicialização. Em outras palavras, atualizações programadas não precisam mais de programação.

O Ksplice é um conjunto de ferramentas para corrigir o kernel in situ, enquanto está sendo executado—sem necessidade de reboot. Dado um kernel existente, seu código de origem e um ou mais arquivos diff unificados (um diff unificado é a forma canônica das correções do kernel), o Ksplice substitui o código do objeto existente e errôneo no kernel residente por um novo código do objeto. O Ksplice pode substituir código do programa e estruturas de dados. Melhor ainda, um kernel splice interrompe a operação normal do sistema por uma mera fração de milissegundo, deixando daemons, processos e conexões intactos.

Vamos ver rapidamente como o Ksplice funciona e aprender como usar suas ferramentas para manter um kernel atualizado. Há três maneiras de usar o Ksplice:

  1. GUI (Graphical user interface - Interface gráfica com o usuário)
  2. Utilitários de linha de comandos equivalentes de alto nível
  3. Ferramentas brutas do Ksplice (se você possui a origem do seu kernel)

Um usuário da versão Ubuntu 9.04 ou versão 9.10, por exemplo, pode fazer o download e instalar um aplicativo de apontar e clicar para escolher e aplicar as modificações no kernel. Todas as três variantes do Ksplice serão introduzidas aqui.

Correção de um kernel ativo

De forma sucinta, o Ksplice corrige um kernel em execução substituindo uma ou mais funções vulneráveis ou com falhas por implementações corretas e mais recentes. Para efetuar a substituição, a ferramenta repara uma imagem do kernel em execução com o código do objeto das novas funções e injeta um obstáculo para cada função existente para chamar seu novo correspondente. Praticamente o kernel inteiro permanece inalterado, exceto pelo novo código do objeto e algumas instruções para redirecionar as chamadas de função.

Além disso, o Ksplice pode afetar estruturas de dados, embora com um pouco de programação extra. O Ksplice pode executar código durante uma atualização para facilitar a alteração. O Ksplice também fornece um par de ganchos para executar a configuração e destruir o código imediatamente antes e imediatamente depois que o kernel é atualizado. Também é possível adicionar novas funções para aumentar o kernel; novas funções simplesmente não possuem correspondentes no kernel original.

É possível aplicar o Ksplice em praticamente qualquer kernel, mesmo aqueles que foram enviados antes do Ksplice ser desenvolvido. Para unir um kernel, é preciso ter seu código de origem, o conjunto de correções que você quer aplicar e um compilador capaz de isolar cada função e estrutura de dados no kernel em sua própria seção no código do objeto. Por exemplo, o GCC (GNU Compiler Collection - Coleção do Compilador GNU) fornece os sinalizadores -ffunction-sections e -fdata-sections, respectivamente, para esses fins exatos (Outros compiladores, como o Intel®C Compiler, possuem capacidades semelhantes). Esse código do objeto "modular" é mais facilmente manipulado pelo Ksplice. É necessário que o kernel em execução a ser corrigido não tenha sido compilado com as mesmas opções especiais.

O Ksplice se refere ao kernel compilado da fonte original como pré- kernel. O novo kernel construído a partir da origem corrigida é o pós- kernel. E o kernel em execução é apelidado de kernel de execução. O Ksplice falha se o pré não é o mesmo que o de execução—uma indicação clara de que o código de origem não corresponde ao kernel que está sendo executado. Exceto por essa condição especial, o Ksplice compara o pré ao pós e cada diferença se torna uma junção. Todas as junções são empacotadas em um arquivo de objeto único pronto para ser injetado no kernel.

O Ksplice usa o recurso stop_machine (ou seu equivalente, dependendo da sua escolha de UNIX) para se preparar para unir código novo. Pense no stop_machine como um sinal de tráfego; ele permite que uma única CPU prossiga enquanto as outras ficam inativas. Depois de executar stop_machine, o Ksplice analisa cada função marcada para substituição para determinar se ela está ativa. Mesmo se um único ponteiro de instrução de encadeamento se referir a um código de função na memória ou se uma única pilha de kernel de encaminhamento se referir a um endereço de retorno dentro da função, a função é considerada ativa e não pode ser substituída. De outro modo, a função é considerada inativa e é substituída. O Ksplice tenta repetidamente fazer uma substituição, mas ele pode, no fim das contas, abandonar o esforço. Se isso acontece, ele relata um erro e para.


A correção do kernel nunca foi tão fácil

Se você executar uma das distribuições mais populares de UNIX, o Ksplice não poderia ser mais fácil de usar. Os autores do Ksplice fornecem um aplicativo cliente customizado para a sua distribuição Linux. É possível manter seu kernel atualizado por uma taxa nominal de menos de 5 dólares por sistema por mês. É possível encontrar uma lista dos sistemas operacionais suportados no Web site do Ksplice (consulte Recursos). O software Ksplice software está disponível gratuitamente para Ubuntu 9.04 (Jaunty Jackalope) e Ubuntu 9.10.

Para fins de demonstração, este artigo usa Ubuntu 9.10 e une seu kernel. Para usar o Ksplice em Ubuntu, é preciso fazer o download e instalar o Ksplice Uptrack cliente (consulte Recursos para obter um link). O Uptrack gerencia as atualizações de kernel sem reboot disponíveis para o seu sistema. É possível visualizar e instalar atualizações do Ksplice, e você pode revisar alertas quando novas atualizações do kernel estiverem disponíveis. O software é fornecido como pacote Debian. Também é possível fazer o download do software a partir da linha de comando usando uma ferramenta como wget ou cURL.

A seguir, use gdebi para instalar o pacote. Se você ainda não possui gdebi, é possível instalá-lo com o comando:

sudo apt-get install gdebi

Se preferir um cliente gráfico, é possível instalar o Ksplice com o comando:

sudo gdebi-gtk ksplice-uptrack.deb

gdebi instala o Uptrack e suas dependências, que incluem kerneloops, a biblioteca YAML, Python e a biblioteca cURL (veja a listagem 1).

Listagem 1. Instalação do Uptrack e suas dependências
$ wget http://www.ksplice.com/uptrack/dist/karmic/ksplice-uptrack.deb
$ sudo gdebi ksplice-uptrack.deb
Reading package lists: Done
Reading state information: Done
Reading state information: Done
Reading state information: Done
Reading state information: Done

Requires the installation of the following packages:
kerneloops  curl  libcurl3  python-yaml  libyaml-0-1
Client for the Ksplice Uptrack service
The Ksplice Uptrack service enables you to keep your system
up to date and secure without rebooting it.
This package contains the command-line and graphical Uptrack clients.
Do you want to install the software package? [y/N]:y
...

Depois que você aceitar os termos de serviço e que a instalação terminar, o Uptrack é iniciado automaticamente. O instalador também coloca um ícone do Ksplice —uma grande letra K na barra de tarefas—para acesso fácil. A figura 2 mostra o Uptrack Manager sendo ativado pela primeira vez em uma instalação limpa de Ubuntu 9.10. Para corrigir o kernel, clique em Install all updates.

Figura 2. Ativação do Uptrack Manager
Launching the Uptrack Manager

Uma barra de progresso, mostrada na figura 3, mostra cada correção conforme é instalada. Corrigir o kernel leva apenas alguns minutos, mesmo quando um bom número de correções está pendente. E, é claro, nenhum reboot é necessário.

Figura 3. A barra de progresso do Ksplice
Ksplice progress bar

Quando concluído, o Uptrack Manager se atualiza para mostrar o novo estado do seu sistema, como mostrado na figura 4. Uma marca de seleção verde indica que a correção nomeada foi aplicada com sucesso e agora está ativa no seu kernel em execução. Clique em Check para procurar correções adicionais do kernel disponíveis para seu sistema. Clique em Close para liberar a janela. Não é necessário executar o uptrack-manager como raiz; o software solicita uma senha de administrador antes de qualquer modificação ser aplicada.

Figura 4. O estado atual do sistema no Uptrack Manager
Current system state

É possível abrir o Uptrack Manager a qualquer momento com o comando uptrack-manager, ou clicando no ícone K na barra de tarefas. O Ksplice é executado continuamente depois de ativado. Se preferir, é possível configurar o Ksplice para aplicar correções no kernel em execução automaticamente ou somente para alertar quando houver atualizações disponíveis. Por exemplo, para escolher esta última opção, edite o arquivo /etc/uptrack/uptrack.conf e altere a linha autoinstall para ler:

autoinstall = yes

Além do gerenciador de atualização, o Uptrack Manager inclui três outros utilitários de linha de comandos para mais praticidade. (Esses utilitários são diferentes das ferramentas usadas para trabalhar com a origem do kernel diretamente, que são demonstradas na próxima seção.) uptrack-upgrade instala as atualizações do kernel mais recentes disponíveis, enquanto o uptrack-remove id remove a atualização do kernel marcado com ID id. Se você digitar uptrack-remove --all, uptrack-remove limpa todas as atualizações instaladas. uptrack-show mostra um inventário das atualizações que estão atualmente instaladas.

E é essencial lembrar que o Uptrack Manager não rouba o papel do gerente do pacote padrão da sua distribuição. Todas as alterações que o Ksplice faz são aplicadas no kernel em execução e só existem na memória. Portanto, todas as correções do Ksplice são perdidas no encerramento. Continue a atualizar seu kernel em disco com um procedimento de manutenção de software tradicional, como executar:

apt-get update; apt-get upgrade

Execute-o como raiz regularmente ou quando sua distribuição informá-lo sobre novas atualizações de sistema. Manter o kernel atualizado no disco garante que seu sistema inicialize o melhor kernel disponível quando seu sistema eventualmente solicitar uma reinicialização.


Atualização de kernels customizados

O Uptrack Manager é uma opção prática para desktop e computadores de servidor baseados em kernels construídos e distribuídos por um fornecedor ou um projeto de uma comunidade. Ele não funcionará, no entanto, se o seu kernel for customizado e construído localmente, pois o Uptrack Manager não pode comparar seu kernel a um sistema operacional publicado e conhecido para gerar junções. No entanto, é possível usar utilitários "primitivos" do Ksplice para analisar correções públicas e criar suas próprias junções.

Descrever como construir um kernel está além do escopo deste artigo. Se você não está familiarizado com o processo, há instruções excelentes e um bom número de tutoriais satisfatórios espalhados pela Internet. Em vez disso, vamos focar as ferramentas que o Ksplice fornece e como prosseguir quando for capaz de construir algum kernel.

O Ksplice fornece um utilitário chamado ksplice-create para criar junções de kernel. O comando requer duas entradas: um arquivo de caminho e toda a árvore de origem do kernel em execução, incluindo quaisquer correções anteriores que já foram aplicadas. Dados o código de origem atual e as correções, o Ksplice gera dois kernels, como mencionado acima, e compara a revisão com seu original. O resultado de ksplice-create é uma junção que pode ser aplicada com ksplice-apply. É possível editar uma junção do kernel com ksplice-remove.

Aqui está um exemplo (retirado do estudo acadêmico dos autores e usado com permissão expressa) que cria uma atualização para "prctl vulnerability", CVE-2006-2451, usando um arquivo de caminho chamado prctl e um diretório de origem do kernel ~/src:

$ ksplice-create --patch=prctl ~/src
Ksplice update tarball written to ksplice-8c4o6u.tar.gz
$ sudo ksplice-apply ./ksplice-8c4o6u.tar.gz
Done!

O comando anterior gera um tar de código do objeto, ksplice-8c4o6u.tar.gz, para ser corrigido no kernel. O segundo comando lê o tar, calcula as renovações necessárias e aplica a junção.


Vinte e quatro, sete, trezentos e sessenta e cinco

O Ksplice é uma tecnologia comprovada. De acordo com o ensaio original e o estudo técnico do autor, o Ksplice era capaz de corrigir o® kernel Linux dinamicamente com todas as correções funcionais e de segurança emitidas entre 2006 e 2008. Destas, mais de dois terços não requeriam código especial para atualizar o kernel. Das correções restantes, uma programação especial somava uma média de 17 linhas de código por correção.

O Linux foi escolhido para provar a abordagem do Ksplice. A origem do Linux é ampla e frequentemente verificada em busca de falhas e é corrigida várias vezes para lidar com os defeitos rapidamente. No entanto, o Ksplice pode ser prontamente adaptado a qualquer kernel cujo código de origem esteja disponível, incluindo BSD e Sun Solaris. O Ksplice também suporta processadores x86, x86_64 e ARM.

Recursos

Aprender

  • Falando UNIX: Verifique outras partes desta série.
  • Ksplice: Saiba mais sobre o Ksplice no site de ferramentas.
  • Estudo técnico do Ksplice: Leia o estudo técnico para saber mais sobre como o Ksplice funciona.
  • kernel.org: Encontre informações sobre o kernel Linux e o archive do código de origem do kernel.
  • Vulnerabilidades e Exposições Comuns: Uma lista abrangente de vulnerabilidades de computador está disponível no site CVE. Cada entrada no banco de dados inclui uma breve descrição da vulnerabilidade ou exposição de segurança e referências pertinentes.
  • Zona AIX e UNIX do developerWorks : A zona AIX e UNIX fornece uma diversidade de informações relacionadas a todos os aspectos de administração de sistemas AIX e expansão das suas habilidades em UNIX.
  • Iniciante em AIX e UNIX? Visite a página Iniciante em AIX e UNIX para saber mais.
  • Livraria de tecnologia: Navegue pela livraria de tecnologia para encontrar livros sobre este e outros tópicos técnicos

Obter produtos e tecnologias

  • Ksplice Uptrack: Faça o download do software Uptrack adequado para o seu sistema.
  • Github: O Github hospeda milhares de repositórios Git, incluindo os arquivos com ponto pessoais de muitos usuários especialistas. Busque "arquivos com ponto" para encontrar exemplos. (É possível saber mais sobre Git on-line e nos Guias de Github.)

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=512588
ArticleTitle=Falando UNIX: Conheça o Ksplice
publish-date=08202010