O mac adress do XEN

Eu estava fazendo estudos e perdi algumas boas horas dias por um problema simples.

Sintoma: minhas máquinas virtuais com Slackware não navegavam, já as máquinas Debian, criadas por um script, navegavam normalmente.

Analisei o trafego de rede, os filtros do iptables e nada. O kernel que carregava as 2 máquinas era o mesmo…. Parecia-me que era alguma coisa no conf da máquina virtual.

As máquinas virtuais do Xen, precisam ter seu mac address iniciado por 00:16:3E. Se não for este o início do mac address a maquina não navega.

A título de curiosidade, a documentação oficial do Xen, disponível em XenNetworking, não fala sobre a obrigatoriedade utilizar 00:16:3E como mac address, mas faz a sua recomendação.

Mais informações:

XenNetworking

A ídeia por de traz do Xen não é complicada, mas sua instalação e configuração envolve uma série de dicas e truques…

Uma mensagem curiosa

Ao iniciar o Slackware com Xen pela primeira vez, recebi a seguinte mensagem:

***************************************************************
***************************************************************
** WARNING: Currently emulating unsupported memory accesses  **
**          in /lib/tls glibc libraries. The emulation is    **
**          slow. To ensure full performance you should      **
**          install a 'xen-friendly' (nosegneg) version of   **
**          the library, or disable tls support by executing **
**          the following as root:                           **
**          mv /lib/tls /lib/tls.disabled                    **
** Offending process: init (pid=1004)                        **
***************************************************************
***************************************************************

Entretanto, para minha surpresa, não existia o arquivo indicado.

Consultando a documentação encontrei uma página que descreve e explica este problema. De acordo com o site, em plataformas x86, o Xen utiliza segmentação para prover proteção da memória usada para o hipervisor. Isso resulta em alguns problemas de desempenho já que seguimentos “wrap-around”, como os usados pela glibc, necessitam de um tratamento com custo maior de CPU maior. Para obter mais informações sobre como o Xen utiliza segmentação, veja XenSegments.

Para resolver esses problemas, em sistemas como RedHat, CentOS, Debian e Ubuntu, você pode simplesmente mover o arquivo, conforme o determinado na mensagem. No entanto, no Slackware é necessário recompilar e reinstalar a glibc.

Compilando a glibc para Slackware 12.2

Seguem os passos para a compilação da glibc.

wget ftp://ftp.slackware-brasil.com.br/slackware-12.2/source/l/glibc/*

Edite o arquivo glibc.SlackBuild e aplique o seguinte patch:

c8
< TMP=${TMP:-/glibc-tmp-$(mcookie)}
---
> TMP=$CDW/glibc-tmp-$(mcookie)
162c162
< CFLAGS="-g $OPTIMIZ" \
---
> CFLAGS="-g $OPTIMIZ -mno-tls-direct-seg-refs" \
166d165
<   --with-headers=/usr/src/linux-${KERNEL_HEADERS}/include \

e execute o comando

su -c glibc.SlackBuild

Ao final da execução deste script, você terá os novos pacotes para Slackware da glibc otimizada para funcionamento com o Xen. São eles:

glibc-2.7-i486-17.tgz
glibc-i18n-2.7-noarch-17.tgz
glibc-solibs-2.7-i486-17.tgz
glibc-debug-2.7-i486-17.tgz
glibc-profile-2.7-i486-17.tgz
glibc-zoneinfo-2.7-noarch-17.tgz

Considerações sobre a glibc

  • A glibc é uma biblioteca muito importante para o correto funcionamento do sistema. Por isto, tenha certeza do que está fazendo.
  • Alguns programas podem ser compilados estaticamente. Assim, pode acontecer de algum aplicativo que você utilize com o Slackware apresente a mensagem de erro do TLS

A ídeia por de traz do Xen não é complicada, mas sua instalação e configuração envolve uma série de dicas e truques...

Kernel domU (linux-2.6.18) para Slackware

Compilando o DomU

Para compilar o DomU execute os seguintes passos.
Verifique se a opção Privileged Guest (domain 0), backends e outros drivers que não serão usados estão desabilitados. Verifique se módulos de frontends do estão habilitados.

A seguir, prossiga com estes passos:

make linux-2.6-xenU-config CONFIGMODE=menuconfig

Dar enter para todas as perguntas:

Cache clean pages in transcendent memory (PRECACHE) [N/y/?] (NEW)
Swap pages to transcendent memory (PRESWAP) [N/y/?] (NEW)
PCI Device Reservation for Passthrough (PCI_GUESTDEV) [Y/n/?] (NEW)
PCI Device IO Multiplex for Passthrough (PCI_IOMULTI) [Y/n/?] (NEW)
PCI IO/MEMORY space reserve (PCI_RESERVE) [Y/n/?] (NEW)
PCI IOV support (PCI_IOV) [N/y/?] (NEW)
IMQ target support (IP_NF_TARGET_IMQ) [N/m/?] (NEW)
IMQ target support (IP6_NF_TARGET_IMQ) [N/m/?] (NEW)
IMQ (intermediate queueing device) support (IMQ) [N/m/y/?] (NEW)
Intel(R) 82575 Gigabit Ethernet support (IGB) [N/m/y/?] (NEW)
Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support (E1000E) [N/m/y/?] (NEW)
Intel(R) 10GbE PCI Express adapters support (IXGBE) [N/m/y/?] (NEW)
Intel Core (2) Duo/Solo temperature sensor (SENSORS_CORETEMP) [N/m/?] (NEW)
PC-style 'CMOS' (RTC_DRV_CMOS) [M/n/?] (NEW)
USB backend driver (XEN_USB_BACKEND) [M/n/?] (NEW)
USB frontend driver (XEN_USB_FRONTEND) [M/n/?] (NEW)
Taking the HCD statistics (for debug) (XEN_USB_FRONTEND_HCD_STATS) [Y/n/?] (NEW)
HCD suspend/resume support (DO NOT USE) (XEN_USB_FRONTEND_HCD_PM) [N/y/?] (NEW)
make linux-2.6-xenU-build
cd dist/install
sudo /sbin/makepkg -l y -c n /tmp/xen-3.4.2-linux-2.6.18.8-xenU-i686-1.tgz
cd ../.. && rm -rf dist/install

Pronto. Seu pacote com o Kernel para guest está pronto para ser utilizado.

Instalando Xen (dom0) no Slackware

Uma vez que você tenha criado os pacotes do Slackware, conforme descritos nos posts anteriores, você já pode fazer a sua instalação. Se você ainda não criou os pacotes, recomendamos que leia e refaça os seguintes posts em sequência:

Para facilitar, vamos começar utilizando o GRUB como gerenciador de boot. O grubconfig irá questionar sobre qual partição está sua pasta /boot.

sudo /usr/sbin/slackpkg install grub
sudo /usr/sbin/grubconfig

Instale os pacotes gerados:

sudo /sbin/installpkg coreutils-7.4-i486-1.tgz
sudo /sbin/installpkg xen-3.4.2-hypervisor-i686-1.tgz
sudo /sbin/installpkg xen-3.4.2-stubdom-i686-1.tgz
sudo /sbin/installpkg xen-3.4.2-docs-noarch-1.tgz
sudo /sbin/installpkg xen-3.4.2-linux-2.6.18.8-xen0-i686-1.tgz
sudo /sbin/installpkg xen-3.4.2-tools-i686-1.tgz

Edite o arquivo /boot/grub/menu.lst e adicione as seguintes entradas:

title Xen 3.4.2 - linux 2.6.18.8 xen 0- Slackware 12.2
root (hd0,0)
kernel /boot/xen-3.4.2.gz dom0_mem=256M
module /boot/vmlinuz-2.6.18.8-xen0 root=/dev/sda1 ro

Edite o arquivo /etc/rc.d/rc.local e adicione as seguintes entradas:

/usr/sbin/xend start

Pronto. Você já pode reiniciar seu computador, escolhendo o Xen como boot. Se tudo estiver em ordem, seu Domain0 estará funcionando!

Kernel dom0 (linux-2.6.18) para Slackware

O Xen trabalha com o conceito de paravirtualização. E é a implementação deste conceito que dá ao Xen o ganho em performance, comparado aos outros softwares de virtualização, que trabalham com o conceito de virtualização completa, ou full virtualization.

Dito isto, é importante esclarecer que iremos trabalhar com 2 kernels. Um kernel para o host (hoespedeiro) e outro kernel para as máquinas guests (visitantes). O kernel para o host, também chamado de Domain0 (dom0) deverá ter suporte ao Xen, em modo Dom0, além de todos os outros drivers que permintam o funcionamento do hardware existente em seu PC.

Atenção: Não esqueça de habilitar os módulos de drives de seu hardware!!!

O objetivo deste post é a mostrar como criar o pacote do kernel dom0, com o kernel Xen official, linux-2.6.18 no Slackware. Uma apresentação mais minuciosa dos módulos necessários em cada kernel será feita em um outro post.

Compilando o Dom0

Para compilar o Dom0 execute os seguintes passos:

make linux-2.6-xen0-config CONFIGMODE=menuconfig

Dar enter para todas as perguntas, e no menuconfig configure o kernel de acordo com suas necessidades.

Cache clean pages in transcendent memory (PRECACHE) [N/y/?] (NEW)
Swap pages to transcendent memory (PRESWAP) [N/y/?] (NEW)
PCI Device Reservation for Passthrough (PCI_GUESTDEV) [Y/n/?] (NEW)
PCI Device IO Multiplex for Passthrough (PCI_IOMULTI) [Y/n/?] (NEW)
PCI IO/MEMORY space reserve (PCI_RESERVE) [Y/n/?] (NEW)
PCI IOV support (PCI_IOV) [N/y/?] (NEW)
IMQ target support (IP_NF_TARGET_IMQ) [N/m/?] (NEW)
IMQ target support (IP6_NF_TARGET_IMQ) [N/m/?] (NEW)
IMQ (intermediate queueing device) support (IMQ) [N/m/y/?] (NEW)
Intel(R) 82575 Gigabit Ethernet support (IGB) [N/m/y/?] (NEW)
Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support (E1000E) [N/m/y/?] (NEW)
Intel(R) 10GbE PCI Express adapters support (IXGBE) [N/m/y/?] (NEW)
Intel Core (2) Duo/Solo temperature sensor (SENSORS_CORETEMP) [N/m/?] (NEW)
PC-style 'CMOS' (RTC_DRV_CMOS) [M/n/?] (NEW)
USB backend driver (XEN_USB_BACKEND) [M/n/?] (NEW)
USB frontend driver (XEN_USB_FRONTEND) [M/n/?] (NEW)
Taking the HCD statistics (for debug) (XEN_USB_FRONTEND_HCD_STATS) [Y/n/?] (NEW)
HCD suspend/resume support (DO NOT USE) (XEN_USB_FRONTEND_HCD_PM) [N/y/?] (NEW)

Para gerar o pacote com o Kernel para o Domain0:

make linux-2.6-xen0-build
cd dist/install
sudo /sbin/makepkg -l y -c n /tmp/xen-3.4.2-linux-2.6.18.8-xen0-i686-1.tgz
cd ../.. && rm -rf dist/install

Pronto! Já temos o pacote com o kernel dom0 para o slackware!

Xen Live Migration: guest Windows 2008

Este vídeo apresenta um sistema Xen de Alta Disponibilidade (HA) fazendo a live migration. Durante a migração, um vídeo é exibido através da sessão RDP no máquina virtual com Windows 2008 R2.

The Book of Xen

Editato pela No Starch, o livro The Boot of Xen, pode ser encomendado em papel, por US$49,95 ou no formato eletrônico, por US$39,95. Para divulgação, a editora disponibilizou online o capítulo 7 do livro, que descreve como hospedar usuários não-confiáveis no Xen.

Se você usa o Linux e deseja disponibilizar o Xen em produção, tbox é o livro para você.

Release do Livro

Xen, a ferramenta de virtualização de código aberto, é o sonho dos administradores de sistemas. Xen é um monitor de máquina virtual de alto desempenho que permite consolidar o seu hardware e, finalmente, colocar a CPU não utilizada para uso, sem sacrificar a confiabilidade, desempenho e escalabilidade.

O Livro explica tudo que você precisa saber para poder usar o Xen de forma eficaz, incluindo a instalação de redes, gerenciamento de memória e armazenamento virtualizado. Você também vai aprender a usar o Xen e as ferramentas padrão do Linux para fazer backups instantâneo, executar operações de QoS no tráfego de rede e limitar usuários com acesso à disco agressivo.

Autores Chris Takemura e Lucas S. Crawford mostrar-lhe como:

  • Fornecer hospedagem virtual para dezenas de usuários, cada um com suas próprias necessidades individuais
  • Instalar e gerenciar vários convidados, incluindo vários sabores de Linux, NetBSD, Solaris e Windows
  • Escolher corretamente as opções de armazenamento virtual para suas necessidades
  • Migrar seus sistemas de forma transparente e criar novas imagens
  • Configurar e aferir os seus sistemas para torná-los o mais rápido possível
  • Solucionar problemas mais comuns do Xen como a rede e gerenciamento de memória

Os pareceres dos experts é inestimável quando se trata de gerir uma complexa tecnologia de virtualização de código aberto como o Xen. Você obterá o conselho que você precisa em O Livro do Xen.

Avaliação

Richard Bejtlich, do taosecurity, avaliou o livro The Book of Xen, de Chris Takemura e Luke S. Crawford.

De acordo com sua avaliação, “o Livro de Xen (tbox) é um grande livro para administradores de sistemas Linux que desejam implantar o Xen. Seus autores possuem mais de quatro anos de experiência executando Xen como servidores virtuais privados”.

Autores

  • Takemura Chris é um antigo administrador de sistemas *nix, hacker Perl, amante da tecnologia. Ele vem usando o Xen desde seus primeiros dias, e ajudou a construir a reputação de prgmr.com como ”hospedagem para os adeptos  de tecnologia”.
  • Luke S. Crawford utilizou a virtualização em produção desde antes que entrasse na onda, virtualizando centenas de servidores para pequenas e grandes empresas. Ele lançou o prgmr.com, serviço VPS (Virtualização Privada de Servidores) em 2005, vendendo servidores virtuais baseados em jails FreeBSD antes de mudar para o Xen em um esforço para alocar recursos de forma mais justa.