Tabela de conteúdo |
Xen é um software livre de virtualização para as arquiteturas x86, x86-64, IA-32, IA-64 e PowerPC. Xen permite a execução de vários sistemas operacionais, simultaneamente, sobre um mesmo hardware. Versões modificadas de Linux e NetBSD podem ser usadas como base. Diversos sistemas Unix modificados podem ser executados. Desde a versão 3.0, o Microsoft Windows e outros sistemas operacionais podem ser executados sobre o Xen.
A arquitetura utilizada neste exemplo será amd64(64 bits), porém, há a possibilidade de ser instalada em uma arquitetura i386(32 bits). A única diferença esta apenas na nomenclatura final dos pacotes utilizados.
A seguir, os pacotes à serem instalados:
# apt-get install xen-docs-4.0 xen-hypervisor-4.0-amd64 xen-linux-system-2.6.32-5-xen-amd64 xenstore-utils xen-tools xen-utils-4.0 xen-utils-common xenwatch
Após terminar a instalação, basta reinicializar o computador para que a instância do XEN seja carregada.
# reboot
Após a reinicialização, execute o comando:
# xm dmesg
Caso a saída seja algo desse tipo:
WARNING! Can't find hypervisor information in sysfs! Error: Unable to connect to xend: No such file or directory. Is xend running?
Como no nosso caso, isso significa que está rodando o kernel do Xen, porém não está sendo executado o Hypervisor, ou seja, não é possível inicializar as máquinas virtuais. Para corrigir isso, basta alterar a ordem de inicilização, com os seguintes comandos:
# mv /etc/grub.d/10_linux /etc/grub.d/50_linux # update-grub2
Agora basta reiniciar a máquina.
# reboot
Feito isso, execute novamente:
# xm dmesg
Agora, a saída deve ser algo totalmente diferente.
A configuração do XEN permite algumas formas sobre a conectividade da rede:
Como nós queremos que as máquinas virtuais trabalhem como servidores reais, então escolhemos o modo Bridge.
Para tal, modificaremos o arquivo de configuração:
# vim /etc/xen/xend-config.sxp
descomentando/adicionando as seguintes linhas:
(network-script 'network-bridge antispoof=yes') (vif-script vif-bridge)
Agora basta apenas reiniciar o serviço:
# /etc/init.d/xend restart
Atualmente, vários servidores estão ligados em várias sub-redes, e as máquinas virtuais podem estar ligadas a essas sub-redes ou não, para ativar Multi-Bridge no Xen, basta criar um script dentro do diretório /etc/xen/scripts:
# vim /etc/xen/scripts/multi-bridge
#!/bin/bash
set -e
dir=$(dirname “$0”)
ifaces="eth0 eth1 eth2 eth3"
for i in $ifaces; do
ip addr show dev $i | grep inet > /dev/null 2>&1
if [ $? == 0 ]; then
ip link set $i down
"$dir/network-bridge" "$@" netdev=$i start
ip link set $i up
fi
done
No nosso caso, há quatro interfaces(eth0, eth1, eth2 e eth3). Basta torná-lo executavél:
# chmod +x /etc/xen/scripts/multi-bridge
E modificar a linha:
(network-script 'network-bridge antispoof=yes')
para:
(network-script 'multi-bridge antispoof=yes')
do arquivo /etc/xen/xend-config.sxp.
Após isso, basta reiniciar o serviço:
# /etc/init.d/xend restart
Em nossa instalação, utilizamos LVM com o grupo chamado vg0. Agora, editaremos o arquivo de configuração do xen-tools:
# vim /etc/xen/tools/xen-tool.conf lvm = vg0 install-method = debootstrap size = 4Gb # Disk image size. memory = 128Mb # Memory size swap = 256Mb # Swap size fs = ext3 # use the EXT3 filesystem for the disk image. dist = squeeze # Default distribution to install. image = sparse # Specify sparse vs. full disk images. cache = yes passwd = 1 kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` arch = amd64 mirror = http://mirror.pop-ms.rnp.br/debian/ ext3_options = noatime,nodiratime,errors=remount-ro ext2_options = noatime,nodiratime,errors=remount-ro xfs_options = defaults reiser_options = defaults serial_device = hvc0 disk_device = xvda
Este arquivo contém as configurações default para criação das máquinas virtuais, porém, pode-se alterar todas essas configurações por linha de comando.
Vamos criar agora a máquina virtual utilizando o xen-tools:
# xen-create-image --hostname=NOME_DA_MAQUINA --ip IP --netmask MASCARA_SUBREDE --gateway GATEWAY --role=udev
Lembre-se de sempre passar --role=udev como argumento, pois, isso fará que a máquina virtual inicie normalmente.
Algumas operações básicas são importantes, primeiro vamos mostrar quais as máquinas virtuais que estão ativas:
# xm list
agora vamos conectar em uma das máquinas virtuais:
# xm console NOME_DA_VM ou ID
para desconectar dela digite: CRTL+]
o próximo passo é inicializar a máquina:
# xm create NOME_DA_VM.cfg
e para reinicializá-la:
# xm reboot NOME_DA_VM ou ID
se for preciso desligar a VM:
# xm shutdown NOME_DA_VM ou ID
qualquer dúvida quanto ao comando:
# xm help
--Fabricio Carvalho 08h43min de 13 de julho de 2011 (AMT)
A primeira coisa a se verificar é a arquitetura do computador que vamos instalar, temos duas opções: i386 e amd64, a primeira para 32bits e a segunda com suporte a 64bits. A diferença muda apenas na nomeclatura final dos pacotes, no nosso caso é amd64.
Vamos instalar os pacotes necessários:
# apt-get install xen-hypervisor-3.2-1-amd64 xen-tools xen-utils linux-image-2.6-xen-amd64 xen-linux-system-2.6.26-2-xen-amd64
Após terminar a instalação, o ambiente básico estará configurado, basta reinicializar o computador para que a instância do XEN seja carregada.
# reboot
Podemos utilizar o XEN de diversas formas quanto a conectividade na rede:
preferimos neste caso simular cada VM (virtual machine) como um servidor real na rede, então a nossa opção ficou pelo modo Bridge.
Vamos editar o arquivo de configuração para ativar o compartilhamento de rede via bridge:
# vim /etc/xen/xend-config.sxp
altere a linha:
(networks-script dummy)
por:
(network-script network-bridge)
agora é necessário reinicializar o serviço para publicar as informações:
# /etc/init.d/xend restart
pronto.
É comum termos servidores que estão ligados em mais de uma subrede, e as vezes as próprias VMs podem estar vinculadas a essas subredes ou não, por isso para ativar o suporte a multi-bridges no XEN, basta criar o script abaixo em /etc/xen/scripts:
# vim /etc/xen/scripts/bridges #!/bin/bash dir=$(dirname “$0”) “$dir/network-bridge” “$@” vifnum=0 “$dir/network-bridge” “$@” vifnum=1 “$dir/network-bridge” “$@” vifnum=2
e depois torne-o executável:
# chmod +x /etc/xen/scripts/bridges
onde cada linha do network-bridge significa uma placa de rede, lembrando que o parâmetro vifnum deve ser diferente para cada um. Vamos agora reinicializar o serviço:
# /etc/init.d/xend restart
Vamos editar o arquivo de configuração do Xen-tools, imaginando que estamos usando um LVM chamado vg0, que foi configurado durante a instalação do servidor:
# vim /etc/xen/tools/xen-tool.conf lvm = vg0 install-method = debootstrap size = 4Gb # Disk image size. memory = 256Mb # Memory size swap = 256Mb # Swap size fs = ext3 # use the EXT3 filesystem for the disk image. dist = lenny # Default distribution to install. image = sparse # Specify sparse vs. full disk images. cache = yes passwd = 1 accounts = 1 kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` arch=amd64 mirror = http://mirror.pop-ms.rnp.br/debian/ ext3_options = noatime,nodiratime,errors=remount-ro ext2_options = noatime,nodiratime,errors=remount-ro xfs_options = defaults reiser_options = defaults extension = .cfg
Este arquivo de configuração contém as configurações pra criação de maquinas virtuais a partir de agora, mas nada impede de usar a linha de comando para definir em tempo de criação as configurações da VM.
Vamos criar agora a maquina virtual utilizando o Xen-tools:
# xen-create-image --hostname=NOME_DA_MAQUINA --ip IP --netmask MASCARA_SUBREDE --gateway GATEWAY
feito isso, após algum tempo, vai se executado o hook pedindo a senha do root e depois disso sua VM estará criada, contudo já existe um problema inicial que deve ser sanado, o /etc/inittab não tem entrava para o hvc0 utilizado pela VM e nem o pacote udev utilizado para criação dinâmica dos dispositivos, vamos corrigir isso:
depois adicione a seguinte linha no /etc/inittab:
1:2345:respawn:/sbin/getty 38400 hvc0
e mude a entrada:
1:2345:respawn:/sbin/getty 38400 tty1
para:
2:2345:respawn:/sbin/getty 38400 hvc0
depois que isso foi alterado, é hora de sair e desmontar o dispositivo:
# exit # umount /mnt
isso vai resolver o problema.
Algumas operações básicas são importantes, primeiro vamos mostrar quais as máquinas virtuais que estão ativas:
# xm list
agora vamos conectar em uma das máquinas virtuais:
# xm console NOME_DA_VM ou ID
para desconectar dela digite: CRTL+]
o próximo passo é inicializar a máquina:
# xm create NOME_DA_VM.cfg
e para reinicializá-la:
# xm reboot NOME_DA_VM ou ID
se for preciso desligar a VM:
# xm shutdown NOME_DA_VM ou ID
qualquer dúvida quanto ao comando:
# xm help
--Brivaldo 17h49min de 30 de julho de 2010 (UTC)