Xen 4.0 no Debian Squeeze

De Eriberto Wiki
Ir para navegação Ir para pesquisar

<absHTML>

<tbody> </tbody>
Esta página está em construção e deverá estar pronta em poucos dias. Por favor, volte depois ou consulte-a agora com cautela e paciência.

</absHTML>

Este artigo foi escrito para Debian Debian Squeeze que, atualmente, encontra-se como testing no Projeto Debian. Serão utilizados alguns pacotes existentes no repositório unstable. Este aviso será modificado assim que alguma dessas situações se alterar, até que o Squeeze se torne estável.

by (C) João Eriberto Mota Filho <eriberto (a) eriberto pro br>

Artigo criado em: 15 de junho de 2010.

Última atualização: veja o rodapé desta página.

Tiny URL ou bit.ly: http://tiny.cc/xen_squeeze



O Xen

O Xen (pronuncia-se Zêin) é um sistema de virtualização assistida (hypervisor) que pode ser instalado em arquiteturas x86, x86_64, IA64, ARM e outras. Sobre essas arquiteturas de hardware, os seguintes sistemas operacionais podem ser virtualizados: MS Windows, GNU/Linux, Solaris e alguns BSDs. Este artigo é uma atualização da página "Debian Sarge + Xen 3.0 + LVM + ReiserFS", publicada em 2006, e utilizará o Xen 4.0 com filesystem Ext4 e Debian Squeeze (6.0).

Para acompanhar os acontecimentos referentes ao pacote Xen no Debian, cadastre o seu e-mail em http://packages.qa.debian.org/x/xen.html. Se quiser acompanhar o kernel Linux 2.6, cadastre-se em http://packages.qa.debian.org/l/linux-latest-2.6.html.

No Xen, a máquina real ou hospedeira recebe a demominação de dom0. A máquina virtual é chamada de domU. No Debian i386, o kernel Xen já possui PAE, ou seja, consegue endereçar a memória até 64 GB. Uma outra alternativa é utilizar o Debian AMD64. Escolha o que for melhor para o seu caso.

Este artigo foi criado na mesma semana da entrada do Xen 4.0 na release unstable. Nessa oportunidade, foram abertos alguns bugs relativos ao funcionamento do Xen no Debian AMD64. Com certeza, em breve, os problemas serão resolvidos e esta mensagem será removida.



O download e a instalação do Debian Squeeze (testing)

Inicialmente, faça o download do Debian testing (Squeeze) NetInst no seguinte link:

http://cdimage.debian.org/cdimage/daily-builds/daily/current
Escolha a arquitetura desejada e, a seguir, entre no diretório iso-cd. Clique em debian-testing-<arch>-netinst.iso, onde <arch> representa a arquitetura selecionada.

Depois do download, instale normalmente o Debian, deixando uma partição livre para cada máquina virtual que for criar. Sugiro que faça swap em arquivo na máquina real e nas virtuais. Isso vai reduzir a quantidade de partições utilizadas. Se você for construir mais de duas máquinas virtuais, sugiro também a utilização de LVM (cada máquina virtual estará sobre uma "partição" LVM diferente). Também aconselho a utilização do Ext4 na raiz do sistema, por ser um filesystem moderno e com muita estabilidade.

A instalação dos pacotes mínimos necessários

Inicialmente, instale os pacotes que serão úteis para a operação da máquina hopedeira (máquina real ou dom0):

# apt-get install less ntpdate tcpdump
Se for necessário, instale pacotes adicionais que sejam essenciais para você, como algum editor de textos diferente ou algo assim.

Agora, edite o arquivo /etc/apt/sources.list e crie a entrada para o repositório unstable. Para isso, acresça a linha abaixo no final do arquivo:

deb http://ftp.us.debian.org/debian/ unstable main

A seguir, atualize a lista local de pacotes:

# apt-get update

Instale os pacotes de virtualização:

# apt-get install xen-hypervisor-4.0-i386 xen-utils-4.0 xen-linux-system-2.6.32-5-xen-686
Se você estiver utilizando a arquitetura AMD64, substitua o pacote xen-hypervisor-4.0-i386 por xen-hypervisor-4.0-amd64 e o pacote xen-linux-system-2.6.32-5-xen-686 por xen-linux-system-2.6.32-5-xen-amd64.



Configuração do GRUB2

Para configurar o GRUB para realizar o boot pelo Xen, crie o arquivo /etc/grub.d/09_xen e insira o seguinte conteúdo (considerando que você instalou o Debian em /dev/sda1 e está utilizando a versão 686):

#!/bin/bash
exec tail -n +3 $0

menuentry "Debian GNU/Linux, XEN 4 with Linux 2.6.32-5-xen-686" --class debian --class gnu-linux --class gnu --class os {
        insmod ext2
        set root='(hd0,1)'
        multiboot /boot/xen-4.0-i386.gz
        module /boot/vmlinuz-2.6.32-5-xen-686 dummy=dummy root=/dev/sda1 ro quiet
        module /boot/initrd.img-2.6.32-5-xen-686
}
Na configuração anterior, nas linhas centrais, ou seja, todas as linhas exceto a primeira e a última, entre o início da linha e o próximo parâmetro, foi pressionada a tecla TAB. No momento de criar o arquivo final do GRUB, o sistema respeitará esse TAB.

Caso opte pelo kernel AMD64, utilize a seguinte configuração:

#!/bin/bash
exec tail -n +3 $0

menuentry "Debian GNU/Linux, XEN 4 with Linux 2.6.32-5-amd64" --class debian --class gnu-linux --class gnu --class os {
        insmod ext2
        set root='(hd0,1)'
        multiboot /boot/xen-4.0-amd64.gz
        module /boot/vmlinuz-2.6.32-5-amd64 dummy=dummy root=/dev/sda1 ro quiet
        module /boot/initrd.img-2.6.32-5-amd64
}

A seguir, para gerar o novo GRUB, execute:

# chmod 755 /etc/grub.d/09_xen
# update-grub

Por fim, teste a configuração realizando o boot do sistema operacional a partir do kernel Xen instalado. Após o boot, verifique o kernel ativo com o comando:

# uname -a



O ajuste da rede na máquina real (dom0)

A rede da máquina real (dom0) deverá trabalhar como bridge para que as máquinas virtuais (domU) possam utilizá-la. Para tanto, se estiver utilizando endereço IP fixo, edite o arquivo /etc/network/interfaces e deixe-o como no exemplo a seguir:

auto lo
iface lo inet loopback

allow-hotplug br-xen
iface br-xen inet static
        address 10.0.0.10
        netmask 255.0.0.0
        gateway 10.0.0.100
        bridge_ports eth0
        bridge_maxwait 0
Ajuste o exemplo anterior à realidade da sua rede, trocando, se necessário, a designação do adaptador de rede, o endereço IP, a máscara de rede e o gateway. Ainda, caso a interface de rede não entre no ar após o boot, mesmo com tentativas manuais, altere a linha allow-hotplug eth0 para auto eth0.

Caso queira utilizar DHCP na máquina real, utilize a seguinte configuração:

auto lo
iface lo inet loopback

allow-hotplug br-xen
iface br-xen inet dhcp
        bridge_ports eth0
        bridge_maxwait 0



A criação da máquina modelo

A máquina modelo, na verdade, é um diretório que conterá a estrutura de uma máquina virtual pré-configurada que será copiada para gerar cada máquina domU.

Inicialmente, crie um diretório chamado modelo na raiz do sistema:

# mkdir /modelo

A seguir, com o comando debootstrap, crie um Debian Squeeze dentro do diretório /modelo:

# apt-get install debootstrap
# debootstrap squeeze /modelo http://ftp.us.debian.org/debian

Copie os arquivos /etc/fstab, /etc/hosts e /etc/network/interfaces para dentro do diretório /modelo:

# cp /etc/fstab /modelo/etc/
# cp /etc/hosts /modelo/etc/
# cp /etc/network/interfaces /modelo/etc/network

Depois, enjaule-se dentro do diretório /modelo:

# chroot /modelo

A seguir, já dentro da jaula, mount o diretório /proc:

# mount /proc

Será necessário definir as configurações de localização e internacionalização do Debian. Execute:

# apt-get update
# apt-get install locales
# dpkg-reconfigure locales

Na janela de diálogo que irá surgir, em Locales a serem gerados, selecione pt_BR ISO-8859-1 e pt_BR.UTF-8 UTF-8 para gerar a configuração correta. Isso irá interferir no idioma e em outros fatores. Na tela seguinte, em Default locale for the system environment, selecione pt_BR.UTF-8.

Como próximo passo, é chegado o momento de configurarmos o fuso horário. Execute o comando a seguir:

# dpkg-reconfigure tzdata

Selecione America e Sao_Paulo (ou outro fuso específico, caso você esteja em uma região que não siga o horário de Brasília).

Instale pacotes essenciais:

# apt-get install less linux-image-2.6-xen-686 ntpdate tcpdump
Dentre os pacotes instalados, está o linux-image-2.6-xen-686. Na verdade, na paravirtualização, a máquina DomU utilizará o kernel nativo da Dom0. Assim, o referido pacote está sendo instalado para que a DomU possua os módulos de kernel necessários no momento do seu boot. Se você estiver utilizando AMD64, substitua o pacote linux-image-2.6-xen-686 por linux-image-2.6-xen-amd64.

Para diminuir o tamanho da máquina modelo, remova os arquivos de tradução para idiomas que não são do seu interesse. Para isso, execute:

# apt-get install localepurge

A seguir, na janela Selecionando arquivos de locale, mantenha apenas os idiomas de interesse, selecionando en, pt, pt_BR e pt_BR.UTF-8.

Crie uma senha para o usuário root. Para isso, execute:

# passwd root

Edite os arquivos /etc/hostname e /etc/hosts e, nos lugares certos, altere o nome da máquina para modelo.

Ajuste a rede da máquina virtual. Para isso, edite o arquivo /etc/network/interfaces e altere o nome br-xen para eth0. Ainda, remova as linhas bridge_ports e bridge_maxwait. A seguir, um exemplo de como ficará a configuração final:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 10.0.0.1
        netmask 255.0.0.0
        gateway 10.0.0.100

Configure o arquivo /etc/resolv.conf' para que aponte para o(s) servidor(es) DNS correto(s). Em princípio, o arquivo já deverá estar corretamente ajustado.

Edite o arquivo /etc/fstab e altere as linhas existentes para que fiquem compatíveis com a máquina virtual a ser criada. Esse arquivo deverá referir-se a uma nova máquina que, normalmente, terá um esquema de partições próprio, começando em /dev/xvda1, pois dentro do Xen os HDs não são definidos como /dev/hdX ou /dev/sdX e sim /dev/xvdX. A seguir, um exemplo de configuração:

# <file system> <mount point> <type>   <options> <dump> <pass>
proc            /proc         proc     defaults  0      0
/dev/xvda1      /             ext4     defaults  0      1
/swapfile       none          swap     sw        0      0

{{exclamação1|Não se preocupe com o fato de ter utilizado /dev/xvda1 e não saber o porquê disso. Na verdade, no momento em que a máquina virtual for configurada para ir ao ar, serão atribuídas ligações entre os dispositivos em questão e as áreas de disco relativas à mesma. Assim sendo, /dev/xvda1 (máquina virtual) será correlacionado com /dev/sda2 (máquina real), por exemplo.

Crie um arquivo de swap com 500 MB (ou mais, caso ache necessário). Para isso, emita os comandos:

# dd if=/dev/zero of=/swapfile bs=10M count=50
# mkswap -f /swapfile
Em caso de dúvidas sobre os procedimentos utilizados para criar o swap em arquivo, consulte o artigo swap em arquivo.

Ajuste o arquivo /etc/inittab, de forma que o mesmo tenha um único terminal texto e que este seja voltado para o Xen (dispositivo /dev/hvc0). Para tanto, você deverá inserir a linha referente ao terminal /dev/hvc0 e comentar todas as linhas referentes aos terminais /dev/ttyX. A configuração final ficará da seguinte forma:

xen:2345:respawn:/sbin/getty 38400 hvc0
#1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
Curiosidade: hvc = Hypervisor Virtual Console.

A seguir, apague os arquivos .deb utilizados nas instalações:

# apt-get clean

Desmonte o diretório /proc:

# umount /proc

Saia da jaula:

# exit

Se todos os procedimentos foram realizados corretamente, o diretório /modelo estará pronto.

A criação da máquina virtual (domU) a partir da máquina modelo

Conforme foi dito no item O download e a instalação do Debian Squeeze (testing), deveria ser deixada uma partição livre para a cada máquina virtual a ser criada ou, se for o caso, utilizar LVM. Partirei do princípio que você optou pela partição /dev/sda2.

Inicialmente, na máquina real (Dom0), formate a partição, implementando o filesystem Ext4:

# mkfs.ext4 /dev/sda2
Caso surja o erro mkfs.ext4: /lib/libblkid.so.1: version `BLKID_2.17' not found (required by mkfs.ext4), ainda com o repositório unstable instalado, execute: # apt-get install libblkid1.

Depois de formatar a partição, monte-a em /mnt:

# mount /dev/sda2 /mnt

A seguir, copie os arquivos existentes no diretório /modelo para dentro de /mnt:

# cp -av /modelo/* /mnt

Depois de copiados os arquivos, enjaule-se em /mnt:

# chroot /mnt

Dentro da jaula, edite os arquivos /etc/hostname e /etc/hosts e altere o nome modelo para o nome da máquina virtual a ser executada. Ainda em /etc/hosts e também em /etc/network/interfaces, altere o endereço IP da máquina.

Verifique se o arquivo /etc/fstab está corretamente configurado.

Por fim, desenjaule-se e desmonte a partição /dev/sda2:

# exit
# umount /mnt



A criação da configuração Xen para a máquina virtual



O boot da nova máquina virtual



Redes sociais

  • Twitter: Para novidades sobre artigos, livros e palestras, siga-me em eribertomota.