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.
|