Esta contribuição está participando do sorteio da Mochila Targus Matrix. Envie seu texto e participe você também, você contribui com outros usuários e ainda pode faturar uma mochila novinha em folha para o seu laptop. Saiba mais sobre como participar.
Sobre o Autor:
Fabricio Vaccari Constanski (fvc) || Linux User 295747
fabriciovc[em]gmail.com || http://www.fabriciovc.eti.br
Introdução
Xen é um monitor de máquinas virtuais de código aberto. Ele foi desenvolvido com a capacidade de executar até 100 (cem) sistemas operacionais em um único computador. Ele segue o conceito de para-virtualização, onde um mesmo hardware (fisico) é compartilhado entre várias instalações de linux, onde as mesmas trabalham de maneira totalmente individual, apenas utilizando o mesmo kernel da máquina real em todas as máquinas virtuais.
Aproveito também para indicar a leitura do tutorial de João Eriberto Mota Filho (1), que ajuda bastante o entendimento do uso do XEN, incluindo opções de uso com LVM (item que eu não abordo aqui). Vamos às etapas:
Instalação do Debian
Crie uma instalação limpa (vanilla) do Debian Etch. Selecione apenas os pacotes básicos do sistema ou outros pacotes que lhe sejam necessários.
Caso você tenha duvidas neste processo, poderá consultar o manual oficial de instalação do Debian Etch GNU/Linux em http://www.debian.org/releases/stable/i386/.
Atualizando o sistema
Antes de continuarmos vamos atualizar o sistema recém instalado.
Configure seu apt (sources.list) da seguinte forma:
# /etc/apt/sources.list
deb ftp://ftp.br.debian.org/debian etch main contrib non-free
deb ftp://ftp.br.debian.org/debian etch-proposed-updates main contrib non-free
deb http://security.debian.org/ etch/updates main contrib non-free
Salve o arquivo, atualize a lista de pacotes do repositório e atualize a distro.
root@maq_etch_real:~# apt-get update
root@maq_etch_real:~# apt-get dist-upgrade
Instalando alguns pacotes extras
Instale os seguinte pacotes extras:
* apmd
* less
* ntpdate
* rcconf
* vim
* vim-scripts
* ctags
root@maq_etch_real:~# apt-get install
Outras configurações
Precisamos renomear o diretório /lib/tls para que o mesmo permaneça desabilitado. O TLS (Thread Local Storage) pode causar lentidão no XEN. É por isso que o desabilitamos.
root@maq_etch_real:~# mv /lib/tls /lib/tls.disabled
Instalação do Xen
Instale os seguintes pacotes:
* xen-hypervisor-3.0.3-1-i386
* xen-utils-3.0.3-1
* xen-docs-3.0
* xen-tools
root@maq_etch_real:~# apt-get install
Instalação do Kernel XEN
Após o sistema e o XEN prontos, precisamos agora preparar o kernel XEN para o boot. Para isso, vamos instalar o kernel XEN disponível no repositório do debian. Atualmente, o pacote está disponível para a versão 2.6.18-5 (686), versão atual do kernel linux do Debian Etch.
* linux-image-2.6.18-5-xen-686
* linux-modules-2.6.18-5-xen-686
Note que esta versão, disponível no repositório, é para processadores 686 e compatíveis, caso você possua um processador AMD (K7), essa versão do kernel não irá funcionar.
Existe um repositório backport com algumas outras versões de kernel, inclusive o XEN, incluindo AMD. Claro, por serem pacotes backports, não estão disponíveis no repositório oficial. Caso esse seja sua situação, com a minha, acrescente o repositório backport no sources.list e atualize a lista de pacotes.
# /etc/apt/sources.list
deb http://puga.vdu.lt/debian etch main
deb-src http://puga.vdu.lt/debian etch main
root@maq_etch_real:~# apt-get update
Neste repositório, você vai encontrar vários pacotes do kernel linux disponíveis para 686 e para K7. Recomendo instalar os pacotes oficiais para 686, mas para a K7, os pacotes disponíveis atualmente no repositório backport, que inclusive estão funcionando perfeitamente aqui são:
* linux-image-2.6.18-3-xen-k7
* linux-modules-2.6.18-3-xen-k7
root@maq_etch_real:~# apt-get install
Nota: Aqui na minha máquina, possuo 1G de memória RAM, porem depois que reiniciei a máquina com o kernel XEN, foi detectado apenas 712M. Isso é por questões de uso de memória entra a máquina real e a XEN. De acordo com a documentação oficial, a memória utilizada pela máquina real não pode ser utilizada pelas virtuais, com isso, temos
aproximadamente 384M de memória disponível para as duas máquinas virtuais que iremos criar.
Configurando o Grub
Bom, instalado a versão do kernel linux com suporte a XEN, podemos conferir se o grub foi atualizado com sucesso. Normalmente ele é atualizado automaticamente.
Veja exemplo do /boot/grub/menu.lst a seguir.
# /boot/grub/menu.lst
default 0
timeout 5
color cyan/blue white/blue
title Debian GNU/Linux, kernel 2.6.18-3-xen-k7 / Xen 3.0.3-1-i386
root (hd0,0)
kernel /xen-3.0.3-1-i386.gz
module /vmlinuz-2.6.18-3-xen-k7 root=/dev/hda3 ro console=tty0
module /initrd.img-2.6.18-3-xen-k7
savedefault
title —-
root (hd0,0)
title Debian GNU/Linux, kernel 2.6.18-5-k7
root (hd0,0)
kernel /vmlinuz-2.6.18-5-k7 root=/dev/hda3 ro
initrd /initrd.img-2.6.18-5-k7
savedefault
Com isso, a instalação e a configuração do grub está concluída. Reinicie a máquina e carregue o kernel linux com o suporte ao XEN que você acabou de adicionar.
Como citado anteriormente, aqui estaremos com uma limitação de memória RAM devido a reserva da mesma para as máquinas virtuais. De acordo com pesquisas, encontrei essas possibilidades a seguir a serem colocanas no grub, porém, não foram testadas.
# /boot/grub/menu.lst
kernel /xen-3.0.3-1-i386.gz dom0_mem=131072
module /vmlinuz-2.6.18-3-xen-k7 root=/dev/hda3 ro console=tty0 mem=1G
Configurando a rede
Outro item importante é configurar a rede do seu sistema real para que possa atender a rede da máquina virtual. Para isso, altere o arquivo /etc/network/interfaces e o deixe da seguinte maneira:
# /etc/network/interfaces
auto lo
iface lo inet loopback
auto xen
iface xen inet static
address 10.0.15.2
netmask 255.255.255.0
network 10.0.15.0
broadcast 10.0.15.255
gateway 10.0.15.120
bridge_ports eth0
bridge_maxwait 0
Note que no parâmetro bridge_ports estamos relacionando a bridge de rede com a placa eth0. Caso você possua mais placas de rede, relacione à placa correspondente.
Caso esta placa de rede trabalhe com endereçamento dinâmico (dhcp), a configuração fica da seguinte maneira:
# /etc/network/interfaces
auto lo
iface lo inet loopback
auto xen
iface xen inet dhcp
bridge_ports eth0
bridge_maxwait 0
Criando a máquina virtual XEN
Aqui iremos mostrar os passos da criação de uma máquina virtual Debian Etch GNU/Linux e um Mandriva 2007 Spring, ou seja, após a conclusão dessas etapas, estaremos com três máquinas operando simultânemanente. Uma máquina real e duas máquinas virtuais.
Criando a máquinas virtual XEN Debian 4.0
O comando a seguir está incluso no pacote xen-tools. Elel irá criar uma máquina virtual Debian etch em um arquivo local (.img) para ser iniciado pelo XEN. Crie um arquivo script com as informações a seguir. Altere as opções desejadas e execute o mesmo para que a máquina seja criada.
Este comando irá criar a máquina virtual em um arquivo, juntamente com um arquivo swap. Essas duas imagens serão criadas em /home/xen/domains/etch/arquivos.img já configuradas com nome de máquina, ip, tamanho, etc.
# /etc/xen/xen-create-image.sh
xen-create-image \
–initrd /boot/initrd.img-2.6.18-3-xen-k7 \
–kernel /boot/vmlinuz-2.6.18-3-xen-k7 \
–memory 128Mb \
–swap 256Mb \
–size 2Gb \
–image sparse \
–fs xfs \
–dist etch \
–debootstrap \
–mirror ftp://ftp.br.debian.org/debian \
–ip 192.168.0.10 \
–netmask 255.255.255.0 \
–gateway 192.168.0.10 \
–dir /home/xen \
–passwd \
–hostname etch
Nota: Para maiores informações sobre os parâmetros do comando xen-create-image, execute:
root@maq_etch_real:~# xen-create-image –help
Executando o script recém criado para a criação da máquina virtual.
root@maq_etch_real:~# chmod u+x /etc/xen/xen-create-image.sh
root@maq_etch_real:~# /etc/xen/xen-create-image.sh
Ajustes necessários
Após a instalação, teremos as imagens em /home/xen (como já falado) e ainda o arquivo com as configurações da máquina virtual para que a mesma funcione corretamente. Este arquivo está no diretório /etc/xen/etch.cfg.
Um exemplo do mesmo esta mostrado a seguir, já com as alterações necessárias para que a máquina funcione perfeitamente.
# /etc/xen/etch.cfg
kernel = ‘/boot/vmlinuz-2.6.18-3-xen-k7’
ramdisk = ‘/boot/initrd.img-2.6.18-3-xen-k7’
memory = ‘128’
root = ‘/dev/sda1 ro’
disk = [ ‘file:/home/xen/domains/etch/disk.img,sda1,w’,
‘file:/home/xen/domains/etch/swap.img,sda2,w’ ]
name = ‘etch’
# Altere esta opção
vif = [ ‘bridge=xen’ ]
on_poweroff = ‘destroy’
on_reboot = ‘restart’
on_crash = ‘restart’
Criando a máquinas virtual XEN Mandriva 2007 Spring
Esta parte do howto foi baseado no manual oficial da Mandriva descrito no wiki da mesma (2).
Nota: É necessário estar em uma máquina do mandriva 2007 spring para que esses passos possam realizados de maneira correta, pois o sistema base é usado para a geração da máquina virtual.
Primeiramente precisamos criar um arquivo .img que irá armazenar a nossa instalação virtual do Mandriva 2007 Spring. Netsa etapa, iremos criar dois arquivos. O primeiro será o arquivo que conterá o sistema instaldo (raiz – /) e o outro, a área de swap.
Criando e formatandos os arquivos de imagem
Iniciamos então com a criação dos arquivos de imagens.
root@maq_mdv_real:~# mkdir -p /home/xen/domains/mdv2007.1
root@maq_mdv_real:~# dd if=/dev/zero
of=/home/xen/domains/mdv2007.1/disk.img bs=1024 count=2097152
root@maq_mdv_real:~# dd if=/dev/zero
of=/home/xen/domains/mdv2007.1/swap.img bs=1024 count=262144
E claro, não podemos esquecer de formatá-las.
root@maq_mdv_real:~# mkfs.ext3 /home/xen/domains/mdv2007.1/disk.img
root@maq_mdv_real:~# mkfs.swap /home/xen/domains/mdv2007.1/swap.img
Preparando o ambiente
Primeiramente vamos criar uma variável de ambiente para que possamos usá-la no decorrer do processo.
root@maq_mdv_real:~# export raizvirtual=/mnt/disk.img
Agora vamos criar o ponto de montagem e montar o arquivo de imagem que será utilizada para a instalação da máquina virtual.
root@maq_mdv_real:~# mkdir -p $raizvirtual
root@maq_mdv_real:~# mount -o loop
/home/xen/domains/mdv2007.1/disk.img $raizvirtual
Instalando a máquina virtual com Urpmi
Primeiramente, vamos criar um repositório RPM na máquina local:
Um exemplo desta criação é:
root@maq_mdv_real:~# urpmi.removemedia -a
root@maq_mdv_real:~# urpmi.addmedia main
ftp://mirror.cricyt.edu.ar/MandrivaLinux/official/2007.1/i586/media/main/release
root@maq_mdv_real:~# urpmi.addmedia –update main_updates
ftp://mirror.cricyt.edu.ar/MandrivaLinux/official/2007.1/i586/media/main/updates
root@maq_mdv_real:~# urpmi.addmedia contrib
ftp://mirror.cricyt.edu.ar/MandrivaLinux/official/2007.1/i586/media/contrib/release
root@maq_mdv_real:~# urpmi.addmedia –update contrib_updates
ftp://mirror.cricyt.edu.ar/MandrivaLinux/official/2007.1/i586/media/contrib/updates
Agora podemos criar a estrutura de instalação RPM para a máquina virtual.
root@maq_mdv_real:~# mkdir -p $raizvirtual/var/lib/rpm
root@maq_mdv_real:~# rpm –initdb –root $raizvirtual
Em seguida, o comando para a instalação do mandriva na máquina virtual.
root@maq_mdv_real:~# urpmi –root $raizvirtual basesystem urpmi
Copiando e criando arquivos necessários
Instalado o sistema base na máquina virtual, vamos copiar mais alguns arquivos necessários para que a máquina virtual funcione corretamente.
root@maq_mdv_real:~# cp /etc/resolv.conf $raizvirtual/etc
root@maq_mdv_real:~# cp /etc/fstab $raizvirtual/etc
root@maq_mdv_real:~# cp /etc/sysconfig/network-scripts/ifcfg-eth0
$raizvirtual/etc/sysconfig/network-scripts
Em seguida, alteramos a raiz do sistema para a raiz do sistema virtual
root@maq_mdv_real:~# chroot $raizvirtual
E criamos alguns arquivos necessários
root@maq_mdv_chroot:~# touch /etc/mtab /etc/urpmi/urpmi.cfg
/var/lib/urpmi/MD5SUM
Agora criamos o arquivo de senha do sistema e setamos uma senha para o usuario root.
root@maq_mdv_chroot:~# pwconv
root@maq_mdv_chroot:~# passwd root
Em seguida habilite a rede na máquina virtual editando o arquivo /etc/sysconfig/network e configure a rede da máquina virtual no arquivo /etc/sysconfig/network-scripts/ifcfg-eth0.
# $raizvirtual/etc/sysconfig/network
NETWORKING=yes
# $raizvirtual/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.15.4
NETMASK=255.255.255.0
NETWORK=10.0.15.0
BROADCAST=10.0.15.255
GATEWAY=10.0.15.120
DNS1=10.0.15.120
ONBOOT=yes
METRIC=10
MII_NOT_SUPPORTED=yes
Antes de finalizarmos, precisamos alterar o arquivo /etc/fstab da máquina virtual para que a mesma seja carregada de maneira correta no XEN.
# $raizvirtual/etc/fstab
/dev/sda1 / ext3 defaults 0 2
proc /proc proc rw,nodev,nosuid,noexec 0 0
/dev/sda2 none swap sw 0 0
Por fim, saia do ambiente chroot e desmonte o arquivo de imagem.
root@maq_mdv_chroot:~# exit
root@maq_mdv_real:~# umount $raizvirtual
Ajustes necessários
Por fim, precisamos criar o arquivo de configuração em /etv/xen para que a máquina virtual do mandriva possa ser carregada de maneira correta.
# /etc/xen/mdv2007.1.cfg
kernel = ‘/boot/vmlinuz-2.6.18-3-xen-k7’
ramdisk = ‘/boot/initrd.img-2.6.18-3-xen-k7’
memory = ‘128’
root = ‘/dev/sda1 ro’
disk = [ ‘file:/home/xen/domains/mdv2007.1/disk.img,sda1,w’,
‘file:/home/xen/domains/mdv2007.1/swap.img,sda2,w’ ]
name = ‘mdv2007.1’
# Altere esta opção
vif = [ ‘bridge=xen’ ]
on_poweroff = ‘destroy’
on_reboot = ‘restart’
on_crash = ‘restart’
Problemas com módulos no Mandriva
Um problema que acontece com esse método de instalação do mandriva, é em relação aos módulos do kernel. Como o kernel executado na máquina virtual e na real é o mesmo, o mandriva não terá os módulos do kernel da máquina real. Para isso, você precisa copiar os módulos da máquina real para a virtual. Vamos ao processo.
Primeiramente inicie a máquina virtual do mandriva. Mesmo com erros de módulos, ela será iniciada normalmente. Agora você precisa configurar os repositórios Urpmi na máquina
virtual, como já realizado na máquina mandriva real (explicado anteriormente).
Instale os seguintes pacotes:
* openssh
* openssh-server
* openssh-clients
root@maq_mdv_virtual:~# urpmi
Agora realize a cópia do módulos da máquina real para a virtual.
root@maq_mdv_virtual:~# scp -r
ip_maquina_real:/lib/modules/2.6.18-3-xen-k7/ /lib/modules
Agora apenas reinicie a máquina virtual.
Comando de gerenciamento das máquinas virtuais
Para iniciar uma máquina virtual, execute:
root@maq_etch_real:~# xm create -c maquina_virtual.cfg
A opção “-c” habilita o tty1 após o boot da máquina virtual. Caso você opte por carregar a máquina virtual em background, execute o mesmo comando sem a opção “-c”.
Caso você tenha optado por carregar a máquina com console, para sair desta console sem desabilitá-la, utilize a combinação de teclas: “Ctrl]”.
Para voltar da máquina real para a máquina virtual carregada em background, execute:
root@maq_etch_real:~# xm console maquina_virtual
Nota: Sua máquina virtual é idêntica a uma máquina real. Todos os comandos, arquivos de configuração, etc, funcionam normalmente. A única diferença é que o kernel que está sendo utilizado pela máquina virtual é o mesmo kernel que está sendo utilizado pela máquina real. É ele que possibilita o gerenciamento do mesmo hardware pelas várias
máquinas estanciadas.
Para desligar uma máquina virtual, execute:
root@maq_etch_real:~# xm shutdown -H maquina_virtual
Para reiniciar uma máquina virtual em execução, execute:
root@maq_etch_real:~# xm reboot maquina_virtual
Para desligar uma máquina virtual em execução sem realizar o
sincronismo dos discos, execute:
root@maq_etch_real:~# xm destroy maquina_virtual
Cuidado: Este comando é similar ao uso do “kill -9 PID”, ou seja este comando poderá causar danos à máquina virtual, portanto, só o utilize em casos extremos.
Para listar as máquina(s) virtual(is) em execução, execute:
root@maq_etch_real:~# xm list
Obs: Você vai notar que serão mostradas letras de identificação de estado das máquinas listadas. Essas letras identificam:
* b (blocked): máquina bloqueada
* c (crashed): máquina sofreu um “crash”
* d (dying): máquina saindo do ar. Normalmente ocorre em um desligamento ou “crash”.
* p (paused): máquina pausada
* r (running): máquina em execução
* s (shutdown): máquina em processo de desligamento
Para verificar o uso de recursos de uma máquina virtual em execução, execute:
root@maq_etch_real:~# xm top
Para paralizar uma máquina virtual em execução, execute:
root@maq_etch_real:~# xm pause maquina_virtual
Para desparalizar uma máquina virtual paralizada, execute:
root@maq_etch_real:~# xm unpause maquina_virtual
Para redefinir a quantidade de memória de uma máquina virtual em execução, execute:
root@maq_etch_real:~# xm mem-set maquina_virtual 256
Midias removíveis na máquina virtual
Para isso, apenas acrescente a entrada da unidade removível (ex: cdrom) no /etc/fstab e altere o arquivo de configuração do xen (/etc/xen/maquina.cfg) informando o dispositível móvel a ser disponibilizado.
# /etc/fstab
/dev/sda1 / ext3 defaults 0 2
proc /proc proc rw,nodev,nosuid,noexec 0 0
/dev/sda2 none swap sw 0 0
/dev/hdc /mnt iso9660 ro,user,noauto 0 0
# /etc/xen/maquina_virtual.cfg
disk = [ ‘file:/home/xen/domains/etch/disk.img,sda1,w’,
‘file:/home/xen/domains/etch/swap.img,sda2,w’, ‘phy:/dev/hdc,hdc,ro’ ]
Carregando máquinas virtuais automaticamente
Para carregar as máquinas virtuais automaticamente junto ao boot da máquina real, realize os seguintes comando para cada máquina virtual:
root@maq_etch_real:~# mkdir /etc/xen/auto
root@maq_etch_real:~# cd /etc/xen/auto
root@maq_etch_real:~# ln -s /etc/xen/maquina.cfg
Hardware Utilizado
* Processador: AMD Athlon™ XP 1700+ (1.46 Ghz)
* Memória RAM: 1GB
* Placa Mãe: Asus A7V266 MX
* Disco: 40 GB 7200 RPM Seagate