14 novembro, 2006

 

Usando o User-mode Linux para fins educacionais


Há um ano publiquei um estudo sobre User-mode Linux (UML). No preâmbulo pode ler-se: this study intends to show practical examples of networks running UML, ou seja, "este estudo pretende mostrar exemplos práticos de redes, usando-se para tal o UML": http://moreira.dnsalias.net/my_uml/...pdf.

Na primeira figura pode ver-se a intranet física (rede local) e depois mostro, através de exemplos, uma rede (constituida por servidores virtuais). A primeira dificuldade para quem nunca utilizou UML é perceber o conceito: trata-se de um programa que corre num servidor (denominado host system) e que emula uma máquina Linux, esta designada por visitante (guest, no original).

Na realidade esse programa não é mais do que um desagradável patch ao Kernel (penoso para quem queira saber exactamente qual a versão do Kernel a utilizar, da série 2.4, ou porventura acertar com a versão estável da árvore do Kernel 2.6; talvez 2.6.xx, xx>=12?) com a flag de compilação (*):
(*) Encontram um tutorial minimalista em http://user-mode-linux.sourceforge.net/compile.html

Depois de escolher um file-system adequado (pool_h01), optar pelas opções correctas de lançamento do executável que resultou da compilação especial do Kernel, terá a agradável surpresa de ver lançada a sua máquina virtual. Até aqui tudo corre de forma linear, embora a curva de aprendizagem seja fortemente dependente da forma como pretende entender o que se passa. Por outras palavras, se quiser experimentar um sistema qualquer, o melhor será usar o Debian, e instalar o pacote 'linux', correndo na linha de comando, como um qualquer utilizador (não necessariamente root), o executável 'linux'.

À primeira vista, é tão simples que até arrepia, mas existem enúmeras opções que farão desesperar o hacker mais hábil. As opções de utilização da consola! Certamente terá à primeira tentativa coisas como: a consola não fica visível, o utilizador root é recusado, a rede é inexistente ou mal configurada, ou, se tudo mais correr bem, o mounting point raíz do sistema (slash, i.e. '/') é /dev/ubd/0 (ou /dev/ubd0) -- em vez do habitual /dev/hda1 (ou /dev/hd?? no caso de um disco IDE).

No último caso, para o file-system Debian Woody (pool_h01/fs_deb3C_1.ex2.bz2), verá previsivelmente o seguinte:

...
Serial line 0 assigned device '/dev/ptyp0'
Virtual console 2 assigned device '/dev/pts/8'
Debian GNU/Linux testing/unstable fazpipe ttys/0
fazpipe login: root
Password:
Login incorrect
fazpipe login: guest
Password:
Last login: Sun Nov 12 13:47:50 2006 from 10.1.0.254 on pts/0
Linux venus 2.4.24-1um #3 Sun Apr 18 14:11:25 WEST 2004 i686
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have mail.

A password standard para estes file-systems pre-feitos é guest, usando-se geralmente o utilizador guest. Neste caso o executável UML é baseado no Kernel 2.4.24, patch do Blaisorblade, um dos patches que eu considero mais estável -- para obter um guest system com qualidade e estabilidade.

fazpipe:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/ubd/0 485M 409M 51M 90% /
tmpfs 31M 0 31M 0% /dev/shm
fazpipe:~# cat /proc/swaps
Filename Type Size Used Priority
/dev/ubd/1 partition 131064 33576 -1

Estes dois comandos no guest (cujo nome escolhido é 'fazpipe') são interessantes: primeiro verificamos que o sistema de raíz está montado algures, e usamos uma partição de swap (já veremos onde está fisicamente).

O host, por seu lado, poderá (ou melhor, para ser mais performante, deverá) ter suporte para Skas-3 mode:
Linux fuji 2.4.26skas #8 SMP Sun Jun 6 20:37:52 WEST 2004 i686 unknown

Eu não percebo grande coisa ao nível do Kernel para dissecar as diferenças entre o mode thread (TT) versus Skas-3, apenas posso referir que este modo optimiza a execução dos diversos guests que o sistema anfitrião (host) aloja. Dito de outro modo, os recursos do host são utilizados mais eficientemente quando se usa o modo Skas, em particular o modo Skas-3 (que é a última geração do modo Skas). De forma mais directa, se depois de lançar um guest verificar que existem múltiplas threads do processo (o nome do processo é linux) está em modo TT; se por outro lado verificar apenas duas threads para o guest lançado, então está a usar um Kernel com suporte para modo Skas.

Um aspecto importante na gestão dos sistemas existentes é a possibilidade de se utilizar um sistema de layers do próprio file-system, o qual se denomina por Copy On Write, ou COW. A par do file-system utilizado, pode utilizar outro file-system especial -- COW -- para evitar estar a escrever no file-system original. Há enúmeras vantagens para esta utilização, das quais destaco a poupança de espaço: vários guests podem ser lançados a partir do mesmo file-system de base, sem que para tal tenha que replicar literalmente toda a informação. Vejamos um exemplo simples: o file-system Debian Woody (cujo cog-nome é deb3H) tem cerca de 500 Mbytes; se utilizar um COW file-system ficará com um segundo ficheiro (no host, obviamente) que, embora aparente ter um tamanho semelhante (na ordem dos 500 Mbytes, conforme o exemplo em baixo), e que espelha as alterações que se vão fazendo no deb3H, é na realidade um ficheiro sparsed (com o comando 'du -k' verá que se trata apenas de uns meros 85 Kbytes de tamanho no disco).

host% ls -l...
524288000 Oct 22 01:17 fs_deb3H_3.ex2
520497664 Nov 15 00:15 fs_deb3H.cow
O tamanho real do ficheiro COW:
(Kbytes)(File-system name)
512504 fs_deb3H_3.ex2
85476 fs_deb3H.cow
Outra vantagem significativa da utilização do COW é a possibilidade de voltar atrás (undo) num simples passo: basta para tal parar o guest, apagar o ficheiro COW e relançar o guest novamente com a opção de COW.

Voltando ao assunto que aqui me trouxe: o UML tem uma aplicabilidade directa nas universidades, para teste e desenvolvimento de produtos (como por exemplo permitir a coexistência de diversas compilation farms minimizando o equipamento necessário para tal) e
igualmente para fins comerciais. São exemplos de companhias de sucesso aquelas que, pela utilização do UML, conseguiram disponibilizar servidores na internet a um custo de cerca de 1/5 do preço. Este benefício é inerente à possibilidade de se instalarem diversos sistemas guests para o mesmo servidor físico, o que constitui uma poupança real nos custos do provider -- que se traduz de forma quase directa no custo dos clientes interessados.

(**) Na imagem deste artigo podem ver o host (hkernel2.4.26skas-8...), o router (Freesco), e duas máquinas virtuais (guest systems) ligadas a uma bridge virtual.

Comments:
Coloquei um desafio na Wikipedia na página que explica o UML.

Podem consultar em:
http://pt.wikipedia.org/wiki/Discuss%C3%A3o:User-mode_Linux

Alguém que crie um file-system para a Caixa-Mágica.

Aguardo com expectativa: até hoje só vi file-systems de distribuições em inglês.
 
Enviar um comentário



<< Home

This page is powered by Blogger. Isn't yours?