De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


UserMode Linux

Colaboração: Augusto Campos

Data de Publicação: 24 de Novembro de 2003

Fonte: http://brlinux.linuxsecurity.com.br/artigos/dicas_uml.html{br} Texto originalmente publicado na [6]Revista do Linux.

A idéia de rodar uma versão virtual do Linux "dentro" do Linux, simulando a presença de um segundo computador, totalmente virtual e incluindo seus próprios discos, arquivos, configurações e processos não parece nada fora do comum para quem quer que já tenha utilizado softwares como o VMware (vmware.com), sistema comercial que emula um computador PC virtual rodando totalmente em software, permitindo acrobacias como rodar uma sessão de Windows dentro do Linux ou vice-versa, sem interferir no funcionamento do computador hospedeiro.

De fato, o conceito de máquinas virtuais é muito mais antigo que softwares como o VMware, e é lugar comum há muito tempo em arquiteturas de maior porte. Mas o sistema analisado neste mês, embora guarde alguma semelhança com o VMware e as máquinas virtuais dos mainframes, apresenta também características técnicas surpreendentes, que veremos em detalhes a seguir.

O User-mode Linux

Se você acompanha esta seção da RdL, já sabe que o kernel do Linux é a interface entre os programas do usuário e os recursos físicos do equipamento, tais como portas seriais, discos, o console, a memória e os demais componentes do seu computador. Como o Linux atualmente suporta uma série de arquiteturas diferentes, como os PCs, Macs, SPARCs e Alphas, o seu kernel inclui código específico para lidar com as particularidades de cada uma delas.

O User-mode Linux (ou UML, mas cuidado para não confundir com a mais bem conhecida Unified Modeling Language, que também adota a mesma sigla) é especial neste particular, pois ele é uma implementação do kernel do Linux onde a arquitetura suportada é... outro kernel do Linux! É isto mesmo - vamos explicar melhor: normalmente, os programas aplicativos fazem suas requisições ao kernel, que por sua vez aciona os recursos de hardware da máquina conforme solicitado (sem esquecer que este kernel sempre é específico para a arquiteura do computador em questão). Mas no caso do UML, os programas do usuário fazem requisições ao kernel e, embora eles não suspeitem disso (ou seja, você não precisa realizar nenhuma configuração especial neles), este kernel vai passar todas as requisições para o kernel "real" da máquina hospedeira, e este sim vai fazer a comunicação com o hardware.

Como funciona

A descrição acima é muito árida e pode não dar uma idéia completa do que ocorre quando você cria uma máquina virtual com o UML. Para transmitir melhor a idéia, vamos a uma descrição completa de uma sessão de emulação.

Para começar, você precisará do kernel do UML e de um sistema de arquivos especialmente preparado no qual ele possa dar boot (contendo os diretórios /dev, /etc e todos os demais componentes necessários para a execução normal do Linux). O site oficial do projeto (user-mode-linux.sourceforge.net) contém este kernel, bem como sistemas de arquivos completos de várias distribuições (tais como Debian, Slackware e SuSE), já preparados e prontos para você fazer o download e instalar.

Para o exemplo deste artigo, obtive o kernel 2.4.1 e um sistema de arquivos populado com a distribuição Debian 2.2, totalizando menos de 20MB de download (ou 45 minutos em um modem doméstico). Após a descompactação de praxe, minha instalação do UML se resumia a dois arquivos: linux-2.4.1 e root_fs_debian2.2_small, sendo que o primeiro é o kernel do UML (e deve ser tornado executável, através do comando 'chmod a+x linux-2.4.1'), e o segundo é a concatenação de um sistema de arquivos contendo uma distribuição Debian 2.2 completa. (Note que por razões didáticas e de espaço eu optei por não compilar ou preparar nada, simplesmente fiz o download diretamente do site e descompactei. Se você se interessar, pode montar seu próprio sistema de arquivos e preparar seu próprio kernel...)

Após descompactar os arquivos e o usar comando chmod conforme descrito acima, minha primeira ação foi executar o UML, sem antes tentar nenhum tipo de configuração. Cruzei os dedos, abri um xterm e digitei:

  ./linux-2.4.1 ubd0=root_fs_debian2.2_small

Para aumentar minha admiração pelas surpresas que o software livre nos reserva, imediatamente vi as mensagens típicas do boot do kernel do Linux e da inicialização do Debian - reconhecimento de memória e dispositivos, inicialização dos daemons, checagem de sistemas de arquivos, etc. Ao final do boot do UML, dois xterms adicionais foram abertos (cada um equivale a um console virtual) e em todos vi a familiar mensagem:

  Debian GNU/Linux 2.2 usermode ttys/1
  usermode login:

E enquanto isto, na janela ao lado, o editor de textos onde este artigo estava sendo escrito continuava em operação normalmente, alheio ao fato de que um segundo kernel do Linux estava em operação na máquina, e que havia uma instância do Debian GNU/Linux rodando em paralelo ao SuSE Linux que já estava em operação na máquina. Para ter uma melhor noção das diferenças entre a máquina virtual rodando Debian e a máquina real hospedeira rodando SuSE, usei ferramentas de diagnóstico comuns, como os comandos 'ps' e 'free', e exames nos arquivos do /proc (exemplo: 'cat /proc/interrupts'), podendo perceber que o kernel do UML roda sobre uma máquina virtual que não necessariamente corresponde à sua configuração física, incluindo os dispositivos, sistemas de arquivos, quantidade de memória, interfaces de rede e tudo o mais. Aliás, a máquina virtual do UML suporta interface de rede, podendo ter seu próprio IP e comunicar-se com o hospedeiro e com outras máquinas da sua rede local. Você pode até rodar múltiplas máquinas virtuais no seu computador, cada uma com seu próprio IP comunicando-se com as demais!

Conclusão

O uso de uma máquina virtual pode ser útil em várias situações. Que tal finalmente descobrir o que acontece se você digitar 'rm -rf /' no seu sistema? Ou testar programas que precisam ser rodados como root, sem colocar em risco o seu computador como um todo? Você pode até mesmo usar o UML para testar e experimentar novos kernels sem ter que ficar reiniciando fisicamente o computador - o velho sonho de testar o boot do sistema sem ter que fechar o Netscape e o IRC subitamente torna-se realidade, sem que para isto você tenha que adquirir um segundo computador.

De fato, a estabilidade e os usos potenciais do UML são tão grandes que, segundo a edição de 15 de fevereiro do Linux Weekly News, Linus Torvalds e Alan Cox consideram sua inclusão na árvore "oficial" do kernel do Linux, como uma nova arquitetura suportada.

Experimentar o uso do UML não exige experiência avançada com o kernel do Linux, e de fato a maior dificuldade nas instalações de teste foi o download dos arquivos. Certamente você poderá encontrar utilidades criativas para este recurso, e seu uso é mais do que recomendado!

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Augusto Campos