Xen 4.0 no Debian Squeeze: mudanças entre as edições
mSem resumo de edição |
|||
Linha 291: | Linha 291: | ||
<br><br> | <br><br> | ||
== O boot da nova máquina virtual == | == O boot da nova máquina virtual == | ||
Para inicializar a primeira máquina virtual, utilize o comando: | |||
# xm create -c vm0-teste | |||
{{exclamação1|A opção ''-c'' força a disponibilização de um console durante o boot e após o mesmo. Para realizar um "boot em background", omita o ''-c''.}} | |||
Durante ou após o boot, para voltar para a máquina real, sem retirar a virtual do ar, utilize as teclas ''Ctrl ]''. | |||
A partir da máquina real, para retornar à máquina virtual, utilize o comando: | |||
# xm console vm0-teste | |||
Dentro da VM é possível emitir os comandos ''# halt'' e ''# reboot''. | |||
<br><br> | <br><br> | ||
== Comandos básicos para máquinas virtuais Xen == | == Comandos básicos para máquinas virtuais Xen == | ||
<br><br> | <br><br> | ||
{{rodapé|http://www3.clustrmaps.com/user/284b9300|http://www3.clustrmaps.com/stats/maps-no_clusters/tiny.cc-xen_squeeze-thumb.jpg|15 jun. 10}} | {{rodapé|http://www3.clustrmaps.com/user/284b9300|http://www3.clustrmaps.com/stats/maps-no_clusters/tiny.cc-xen_squeeze-thumb.jpg|15 jun. 10}} |
Edição das 09h46min de 22 de junho de 2010
<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.
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
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 }
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
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
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 próximo passo será criar a configuração que ativará a máquina virtual. Para tanto, crie o arquivo /etc/xen/vm0-teste, com o seguinte conteúdo:
import commands KERNEL0=commands.getoutput('uname -r') kernel='/boot/vmlinuz-' + KERNEL0 ramdisk='/boot/initrd.img-' + KERNEL0 memory=400 vif=[ 'bridge=br-xen' ] disk=[ 'phy:/dev/sda2,xvda1,w' ] extra='root=/dev/xvda1 ro rootdelay=10'
Você poderá substituir o nome teste pelo nome da máquina virtual em questão. Exemplo: vm0-aquarius. |
Na configuração anterior, temos as seguintes linhas com as seguintes funções:
- import commands: esta linha é utilizada para permitir a execução de comandos oriundos do sistema operacional.
- KERNEL0=commands.getoutput('uname -r'): com esta linha, o Xen obterá a versão do kernel utilizado no DomU. Isso facilitará a configuração, uma vez que se houver a troca do kernel, o arquivo de configuração se adaptará sozinho.
- kernel='/boot/vmlinuz-' + KERNEL0: aqui será informado o kernel a ser utilizado. Em outras palavras, esta linha é responsável por chamar o kernel da máquina real (Dom0) para atuar também como kernel da máquina hospedada (máquina virtual, DomU). Note a presença da variável KERNEL0.
- ramdisk='/boot/initrd.img-' + KERNEL0: agora está sendo informado o arquivo initrd a ser utilizado. Novamene vemos a variável KERNEL0.
- memory=400: esta linha está especificando que a máquina virtual (DomU) utilizará 400 MB de RAM.
- vif=[ 'bridge=br-xen' ]: a linha vif (Virtual Interface) é responsável por especificar as configurações de rede. Com isso, a interface br-xen, que é uma bridge na máquina real, servirá as máquinas virtuais.
- disk=[ 'phy:/dev/sda2,xvda1,w' ]: nesta linha, a partição real /dev/sda2 está sendo associada à partição /dev/xvda1 da máquina real e em modo leitura/escrita (w).
- extra='root=/dev/xvda1 ro rootdelay=10': algumas opções extras. Todos os dados são referentes ao boot da máquina virtual. A raiz do sistema, dentro da DomU, será /dev/xvda1. Inicialmente, como em todo boot, tudo ocorrerá em regime read only. Ainda, caso a raiz do sistema não seja encontrada para que haja ao boot corretamente, haverá novas tentativas somente durante 10 segundos.
O boot da nova máquina virtual
Para inicializar a primeira máquina virtual, utilize o comando:
# xm create -c vm0-teste
A opção -c força a disponibilização de um console durante o boot e após o mesmo. Para realizar um "boot em background", omita o -c. |
Durante ou após o boot, para voltar para a máquina real, sem retirar a virtual do ar, utilize as teclas Ctrl ].
A partir da máquina real, para retornar à máquina virtual, utilize o comando:
# xm console vm0-teste
Dentro da VM é possível emitir os comandos # halt e # reboot.
Comandos básicos para máquinas virtuais Xen
Redes sociais
- Twitter: Para novidades sobre artigos, livros e palestras, siga-me em eribertomota.