Sábado, 4 de Fevereiro de 2012



XEN Ubuntu

Por: Flavio Torres - ftorres[@]ymail.com
Publicado em: 27/09/2007


O que é o XEN?

O Xen é mais um virtualizador que permite rodar várias instâncias do Linux, FreeBSD ou Windows no mesmo servidor, algo similar ao VMware, mas implementado de forma diferente.

Em resumo, o Xen utiliza um conceito chamado paravirtualização, onde o sistema operacional rodando dentro da máquina virtual tem a ilusão de estar sendo executado diretamente sobre o hardware. O Xen se encarrega de organizar as requisições feitas pelas máquinas virtuais e repassá-las ao sistema principal. Ele se limita a repassar as instruções, sem interpretá-las como faria um emulador (como por exemplo o Qemu), o que causa uma diminuição de desempenho muito pequena.

O VMware usa uma técnica similar, mas incluindo uma série de funções de checagem destinadas a eliminar problemas de compatibilidade com diversos sistemas operacionais. Isso faz com que o VMware rode diretamente a maioria das versões do Windows, Linux e outros sistemas diretamente, bastando instalá-los na máquina virtual.

No caso do Xen, o sistema que vai ser executado dentro da máquina virtual precisa ser modificado. Ou seja, você precisaria de uma versão específica do Fedora, por exemplo, para poder executá-lo dentro do Xen é necessário instalar um patch no Kernel para isso.

O objetivo inicial do Xen não é ser uma solução fácil de usar como o VMware, ele é mais voltado para uso em servidores, permitindo rodar vários servidores virtuais numa única máquina. Mesmo assim o projeto está sendo desenvolvido de forma bastante ativa, com participação de empresas como a IBM, Sun, Red Hat e com o apoio da Microsoft para que seja compatível com o seu sistema. É de se esperar que o Xen se torne um sistema mais conhecido no futuro e que possa suportar outras plataformas, quem sabe...

Estou utilizando o Ubuntu Feisty Fawn (i386) para o host slave3 (dom0), e vou utilizar o Ubuntu Dapper para o slave4 (domU).

Para instalar o XEN com todas as dependências, basta fazer:

apt-get install ubuntu-xen-server

Neste pacote também acompanha o xen-tools, que usaremos para criar os Servidores Virtuais.

Agora edite o arquivo /etc/xen/xend-config.sxp, você pode comentar as linhas, e somente colar o abaixo:

vi /etc/xen/xend-config.sxp
(xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$')
(network-script network-bridge)
(vif-script vif-bridge)
(dom0-min-mem 256)
(dom0-cpus 0)
		  
		  

Precisamos também adicionar o módulo de loop para o kernel carregar todas as vezes que nós realizarnos o boot do sistema. Edite o arquivo /etc/modules e adicione a seguinte linha no final do arquivo:

vi /etc/modules
[...]
loop max_loop=64

		  

Agora, vamos ver se está tudo instalado no /boot.

linuxuser@slave1:~$ ls -lah /boot/
total 19M
drwxr-xr-x  3 root root 4.0K 2007-07-07 22:51 .
drwxr-xr-x 22 root root 4.0K 2007-07-07 22:58 ..
-rw-r--r--  1 root root 405K 2007-04-15 05:07 abi-2.6.20-15-generic
-rw-r--r--  1 root root  72K 2007-04-05 03:08 config-2.6.19-4-server
-rw-r--r--  1 root root  82K 2007-04-15 02:33 config-2.6.20-15-generic
drwxr-xr-x  2 root root 4.0K 2007-07-07 22:53 grub
-rw-r--r--  1 root root 6.2M 2007-07-07 22:53 initrd.img-2.6.19-4-server
-rw-r--r--  1 root root 6.7M 2001-09-13 23:54 initrd.img-2.6.20-15-generic
-rw-r--r--  1 root root  93K 2006-10-20 08:44 memtest86+.bin
-rw-r--r--  1 root root 765K 2007-04-05 03:08 System.map-2.6.19-4-server
-rw-r--r--  1 root root 789K 2007-04-15 05:08 System.map-2.6.20-15-generic
-rw-r--r--  1 root root 1.7M 2007-04-05 03:08 vmlinuz-2.6.19-4-server
-rw-r--r--  1 root root 1.7M 2007-04-15 05:07 vmlinuz-2.6.20-15-generic
-rw-r--r--  1 root root 253K 2007-03-24 13:03 xen-3.0-i386-pae.gz
		  


O arquivo /boot/vmlinuz-2.6.19-4-server é o kernel do Xen que foi instalado junto com o pacote ubuntu-xen-server, e /boot/initrd.img-2.6.19-4-server é o ramdisk.

Agora, crie o diretório onde será armazenado as máquinas virtuais, eu criei na partição /, é o único lugar onde sobrou um espaço em disco :):

mkdir /xen

Para criar as máquinas virtuais, nós iremos utilizar o xen-tools http://xen-tools.org/software/xen-tools/ , como disse antes, ele vem instalado junto com o ubuntu-xen-server. Para isto, vamos editar o arquivo de configuração:

vi /etc/xen-tools/xen-tools.conf

Para facilitar, novamente mando meu arquivo limpo:

linuxuser@slave1:~$ grep -v ^# /etc/xen-tools/xen-tools.conf | sed '/^$/d' 
dir = /xen
dist   = edgy
size   = 4Gb      # Disk image size.
memory = 128Mb    # Memory size
swap   = 128Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = etch     # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.
gateway   = 10.1.1.1
netmask   = 255.255.255.0
passwd = 1
mirror = http://de.archive.ubuntu.com/ubuntu/
kernel = /boot/vmlinuz-2.6.16-2-xen-686
initrd = /boot/initrd.img-2.6.16-2-xen-686
mirror = http://ftp.us.debian.org/debian/
		  
		  


A linha dist diz qual é a distribuição default que você vai instalar. No próprio arquivo, tem uma relação das distribuições suportadas.

A linha kernek contém o nosso Kernel Xen, e a linha initrd seta o ramdisk.

A linha passwd = 1 força você especificar uma senha root quando você cria um novo dominio. E a linha mirror diz de onde vamos baixar o bootstrap.

Tenha certeza de especificar um gateway e netmask. Se você não fizer isto, e não especificar quando utilizar o xen-create-image, não funcionará a rede para o novo domínio.

Reiniciando o sistema:

shutdown -r now

Se reiniciou sem problemas, então vamos para o próximo passo.

linuxuser@slave1:~$ uname -r
2.6.19-4-server
linuxuser@slave1:~$ free -m
            total       used       free     shared    buffers     cached
Mem:            90         79         10          0          0         27
-/+ buffers/cache:         51         38
Swap:          486          4        481
		  

É, eu só tinha 128 MB de memória, vemos que o XEN já pegou a parte dele :)

Agora, criaremos o servidor Virtual:

xen-create-image --hostname=slave03.hympi.com --debootstrap --ip=192.168.0.98

Para quem deseja fazer manualmente:

xen-create-image --hostname=slave3.hympi.com --size=2Gb --swap=256Mb --ide \
--ip=10.1.1.6 --netmask=255.255.255.0 --gateway=10.1.1.1 --force \
--dir=/xen --memory=64Mb --arch=i386 --kernel=/boot/vmlinuz-2.6.19-4-server \
--initrd=/boot/initrd.img-2.6.19-4-server --debootstrap --dist=dapper \
--mirror=http://de.archive.ubuntu.com/ubuntu/ --passwd

Para saber mais sobre o comando:

man xen-create-image

root@slave1:/home/linuxuser# xen-create-image --hostname=slave3 --size=2Gb --swap=256Mb --ide \
> --ip=10.1.1.7 --netmask=255.255.255.0 --gateway=10.1.1.1 --force \
> --dir=/xen --memory=64Mb --arch=i386 --kernel=/boot/vmlinuz-2.6.19-4-server \
> --initrd=/boot/initrd.img-2.6.19-4-server --debootstrap --dist=dapper \
> --mirror=http://de.archive.ubuntu.com/ubuntu/ --passwd
General Infomation
--------------------
Hostname       :  slave3
Distribution   :  dapper
Fileystem Type :  ext3 
Size Information
----------------
Image size     :  2Gb
Swap size      :  256Mb
Image type     :  sparse
Memory size    :  64Mb
Kernel path    :  /boot/vmlinuz-2.6.19-4-server
Initrd path    :  /boot/initrd.img-2.6.19-4-server
Networking Information
----------------------
IP Address 1   : 10.1.1.7
Netmask        : 255.255.255.0
Gateway        : 10.1.1.1
Creating swap image: /xen/domains/slave3/swap.img
Done
Creating disk image: /xen/domains/slave3/disk.img
Done
Creating ext3 filesystem on /xen/domains/slave3/disk.img
Done
Installing your system with debootstrap mirror http://de.archive.ubuntu.com/ubuntu/
Done
Running hooks
Done
No role script specified.  Skipping
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
All done
Logfile produced at:
        /var/log/xen-tools/slave3.log
root@slave1:/home/linuxuser#
			
			

E o nosso arquivo de configuração limpo:

root@slave1:/home/linuxuser# sed '/^$/d;/^#/d' /etc/xen/slave3.cfg
kernel = '/boot/vmlinuz-2.6.19-4-server'
ramdisk = '/boot/initrd.img-2.6.19-4-server'
memory  = '64'
root    = '/dev/hda1 ro'
disk    = [ 'file:/xen/domains/slave3/disk.img,hda1,w', 'file:/xen/domains/slave3/swap.img,hda2,w' ]
name    = 'slave3'
vif  = [ 'ip=10.1.1.7' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'		  
		  

Para iniciar a Máquina Virtual:

xm create /etc/xen/slave3.cfg
Using config file "/etc/xen/slave3.cfg".
Error: I need 65536 KiB, but dom0_min_mem is 262144 and shrinking to 262144 KiB would leave only -162532 KiB free.

Tudo bem, belo detalhe, minha máquina só tem 128 de memória, a solução é baixar o valor no /etc/xen/xend-config.sxp

(dom0-min-mem 64)

Reinicie a máquina.

E crie novamente a VM.

xm create /etc/xen/slave3.cfg

Para rodar:

xm console slave3

Para listar a VM:

xm list

Para desligá-la:

xm shutdown slave3

Se você deseja adicionar a VM para iniciar automaticamente no próximo boot, então:

ln -s /etc/xen/slave3.cfg /etc/xen/auto

Aqui estão os comando mais importantes:

xm create -c /path/to/config - Inicia a VM.
xm shutdown [nome] - Pára a VM.
xm destroy [nome] - Pára a VM SEM Shutdown. Como desligar o cabo de energia.
xm list - Lista as VM ativas.
xm console [nome] - Login na VM.
xm help - Básico!
		  

Passos rápidos para criar uma segunda VM:

xen-create-image --hostname=slave4 --size=2Gb --swap=256Mb --ide \
--ip=10.1.1.7 --netmask=255.255.255.0 --gateway=10.1.1.1 --force \
--dir=/xen --memory=64Mb --arch=i386 --kernel=/boot/vmlinuz-2.6.19-4-server \
--initrd=/boot/initrd.img-2.6.19-4-server --debootstrap --dist=edgy \
--mirror=http://de.archive.ubuntu.com/ubuntu/ --passwd
		  

Iniciando:

xm create /etc/xen/slave4.cfg

Shutdown:

xm shutdown slave2

E para listar todas as VM que foram criadas:

xen-list-images

É isto.

NOTA: Ao instalar uma VM com o Debian 4, e fazer ssh eu tenho a seguinte mensagem:

stdin: is
not a tty, and no console.

Para resolver isto, basta instalar o udev na máquina virtual.

 

 


Copyright© 2006 flaviotorres.com.br . Todos os direitos reservados.