quinta-feira, 31 de março de 2011

Gentoo paravirtualizado (domU) no XenServer

Olá pessoas, conforme prometido anteriormente, estou disponibilizando agora um howto de como instalar um Gentoo paravirtualizado, rodando sob o XenServer, com xs-tools instalado. :)

Para tal vamos precisar de:
- Um servidor com XenServer
- Um cd com o Gentoo (aqui estou usando o minimal)
- Conhecimento prévio sobre o processo de instalação do Gentoo.
- Um pouco de paciência (mas só um pouco)
- Uma máquina com windows (tá, tá, eu sei...) rodando o XenCenter.

Vou demonstrar apenas os passos mínimos para ter o SO rodando, sem me preocupar com o restante dos pacotes que vocês já devem estar acostumados a instalar nesta distro.

Então, vamos lá, o primeiro passo é criar a máquina virtual lá no XenCenter, para isto basta clicar no botão New VM (ou digitar Ctrl-N).
Abrirá uma tela para você configurar esta máquina virtual. Preencha de acordo com o exemplo abaixo (sinta-se à vontade para configurar de maneira diferente).

Primeiro item, Template: Escolha Other install media;
Name: Preencha com 'Gentoo Exemplo', sem descrição;
Installation Media: Deixe selecionado a unidade de CD/DVD do servidor;
Home Server: Selecione em qual servidor esta máquina irá residir;
CPU & Memory: Ajuste de acordo com suas necessidades;
Storage: Crie um disco para conter o seu SO, como exemplo, criei um com 8 GB.
Networking: Aceite o padrão.
Finish: Lembre-se de colocar o CD do Gentoo no drive do servidor, desmarque a opção para ele iniciar a máquina virtual e clique em Finish.

Aguarde a máquina ser criada, e logo após, selecione-a. Vá para a aba storage e verifique se o dispositivo (HD criado) está na posição 0. Caso não esteja, a forma mais rápida de colocá-lo como 0 é desanexando e reanexando em seguida (Detach, Attach).
Clique agora em Start e logo o boot será efetuado. Acompanhe o processo de boot pelo XenCenter (selecione a máquina virtual à esquerda, e no painel da direita, abra a aba console).

Após o prompt ser apresentado, vamos instalar efetivamente o nosso Gentoo. A instalação é praticamente igual ao que faríamos num Gentoo normal.

Para isso, vamos começar com o particionamento do disco. Neste exemplo, criarei 2 partições apenas, o / e o swap.

dê um fdisk -l para saber qual dispositivo foi criado para você, no meu caso, o HD foi reconhecido como /dev/sda:
# fdisk -l
.
.
Disk /dev/sda doesn't contain a valid partition table
 Com o disco reconhecido, vamos particioná-lo, no esquema comentado acima (uma partição com 7GB para o / e o restante para swap). As duas partições como primárias.

Na sequência, formatamos elas:
# mkfs.ext3 /dev/sda1
# mkswap /dev/sda2
e as montamos
# mount /dev/sda1 /mnt/gentoo
# swapon /dev/sda2
Com isso, agora basta baixar e descompactar o stage3 e o portage, conforme o usual.
# cd /mnt/gentoo
# wget stage3_do_seu_mirror_preferido
# wget portage_do_seu_mirror_preferido
# # Pessoalmente, eu faço o download pelo links :)
# tar xpf stage3_baixado
# cd usr
# tar xf ../portage_baixado
Como você pode ter percebido, até aqui, nada além do mínimo esperado na instalação. A partir daqui a coisa começa a ficar interessante. Após a descompactação dos arquivos baixados, entramos no sistema propriamente dito, com o chroot.
Não instalaremos todos os pacotes que normalmente são instalados (syslog, cron, etc...), vamos apenas baixar o que realmente é necessário para fazer o gentoo funcionar. Mas, se preferir, sinta-se à vontade para fazê-lo.
Então, mãos à obra:
# mount -t proc none /mnt/gentoo/proc
# cp /etc/resolv.conf /mnt/gentoo/etc
# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile
# emerge --sync
# # Pra mim, acusou atualização no portage, recomendável fazê-lo.
# emerge portage
# emerge gentoo-sources
# cd /usr/src/linux
# make menuconfig
# # O que ? Eu não uso o genkernel? Hehe, não.
Configure o kernel como de costume, mas, obrigatoriamente você deve selecionar as seguintes opções:

Processor type and features --->
    [*] Paravirtualized guest support --->
        [*] Xen guest support
Device Drivers --->
    [*] Block devices (NEW) --->
        <*> Xen virtual block device support (NEW)
    [*] Network devices support --->
        <*> xen network device frontend driver (NEW)
    Input device support --->
        <*> Xen virtual keyboard and mouse support
    Graphics support --->
        <*> Xen virtual frame buffer support (NEW)
    Xen driver support --->
        [*] Xen memory balloon driver (NEW)
        [*]    Scrub pages before returning them to system (NEW)
        <*> Xen /dev/xen/evtchn device (NEW)
        <*> Xen filesystem (NEW)
        [*]    Create compatibility mount pount /proc/xen (NEW)
        [*] Create xen entries under /sys/hypervisor (NEW)
        <M> xen platform pci device driver (NEW)
Kernel configurado, é hora de compilar ele e jogá-lo para o diretório padrão:

# make -j2 && make -j2 modules_install
# cp arch/x86/boot/bzImage /boot/kernel-2.6.36-xen
# # Anote o nome do kernel usado aqui.
Importante, não instale o grub. Ele não é necessário.
Criamos então a configuração do grub para que o Xen consiga dar boot nesta nova máquina virtual.
# mkdir /boot/grub
# nano /boot/grub/grub.conf
Jogue o seguinte conteúdo para dentro deste arquivo:
default 0
timeout 10
title Gentoo paravirtualizado - 2.6.36-Xen
    root (hd0,0)
    kernel /boot/kernel-2.6.36-xen root=/dev/xvda1 ro console=hvc0
Ei, espera um pouco, eu to configurando o /dev/sda, e não o /dev/xvda. Sim, exato. Estamos mexendo com sda justamente por que o Gentoo não tá rodando sob o XenServer de forma paravirtualizada. Quando paravirtualizarmos ele, o primeiro disco virará xvda.

Agora, vamos fazer alguns ajustes na configuração:
No arquivo /etc/fstab, elimine a linha /dev/BOOT, e altere as linhas /dev/ROOT e /dev/SWAP para
/dev/xvda1    /    ext3    noatime    0 1
/dev/xvda2    none    swap    sw    0 0
respectivamente e acrescente a seguinte linha
none   /proc/xen    xenfs    defaults   0 0
No arquivo /etc/securetty, acrescente uma linha contendo
hvc0
No arquivo /etc/inittab, adicione a linha
h0:12345:respawn:/sbin/agetty -L 9600 hvc0 screen
Estamos quase lá, troque a senha do root para o que preferir (enquanto estou instalando, eu gosto de usar alguma senha fraca, de fácil digitação, como 'a' ou '123').
Configure também sua rede, e, por precaução, deixe o sshd inicializando no boot (caso o console não funcione por algum motivo).

# nano /et/conf.d/net
# rc-update add sshd default
# rc-update add net.eth0 default
# exit
# cd /
# umount /mnt/gentoo/proc
# umount /mnt/gentoo
# swapoff /dev/sda2
# halt

Assim que a máquina virtual desligar, retire o CD do drive do servidor.
Com isso, acabamos a primeira parte. Instalamos o kernel e configuramos o sistema com os parâmetros necessários para o bom funcionamento sob o XenServer.

Neste ponto, o gentoo está configurado para ser paravirtualizado, mas o XenServer não sabe disso. Configurar o XenServer para que ele funcione da maneira correta é simples, e é aqui que toda a mágica acontece.
Ainda no XenCenter, selecione o servidor XenServer e abra a aba console.
neste prompt de comando, execute:
# xe vm-list
encontre a máquina recém criada e anote o UUID dela, e em seguida:
# xe vm-param-set uuid=UUID_ANOTADO PV-kernel=/boot/kernel-2.6.36-xen PV-bootloader=pygrub HVM-boot-policy=""
Isto ensina o XenServer que esta máquina deve ser paravirtualizada (mais especificamente o parâmetro HVM-boot-policy, onde estamos dizendo que ela não roda mais no modo HVM - o que sobra é a paravirtualização).
Selecione no XenCenter a máquina virtual criada, selecione a primeira aba (General) e clique em Properties.
Selecione a opção Startup Options, e dentro dela, mude o boot de DVD para HD.

Clique em Start novamente, e, se tudo ocorreu como o esperado, sua máquina irá dar boot. :)

Agora, vamos nos preocupar em instalar o XenTools para podermos usufruir de tudo que o XenServer nos proporciona.
Na aba Console, selecione em DVD Drive 1 a imagem xs-tools.iso.
Faça login como root na sua nova máquina (às vezes, o console não funciona como esperado, mas, se você configurou a rede, você deve acesso SSH).
Instale o pacote rpm2targz e
# emerge rpm2targz
# mount /dev/xvdd /mnt/cdrom
# cp /mnt/cdrom/Linux/xe-guest-utilities-xenstore-5.6.100-647.x86_64.rpm .
# cp /mnt/cdrom/Linux/xe-guest-utilities-5.6.100-647.x86_64.rpm .
# rpm2targz xe-guest-utilities-xenstore-5.6.100-647.x86_64.rpm# rpm2targz xe-guest-utilities-5.6.100-647.x86_64.rpm
# cd /
# tar xf root/xe-guest-utilities-xenstore-5.6.100-647.x86_64.tar.gz
# tar xf root/xe-guest-utilities-5.6.100-647.x86_64.tar.gz
# rc-update add xe-linux-distribution default
# /etc/init.d/xe-linux-distribution start
No final do último comando, você deve ter visto algo como
Detecting Linux distribution version: Failed
Starting xe daemon: OK
A primeira linha não importa muito, já que é apenas para reconhecer a versão do linux instalada.
O importante é a segunda linha, com o OK. Isto quer dizer que a integração com o XenServer está completa. Para ter certeza, basta voltar ao XenCenter, selecionar o servidor XenServer onde a máquina virtual está localizada e selecionar a aba Search.
Note que agora não tem mais a linha dizendo que não tem o xentools instalado. Além desta mudança, você também verá o uso da CPU, memória, disco, rede, endereços IP e o uptime.

Com isto, chegamos ao final deste passo-a-passo de instalação. Espero ter ajudado vocês (e não ter esquecido de nada).

A quem interessar, posso disponibilizar a configuração do kernel que eu tenho aqui. :) Peçam nos comentários.

Uma versão em inglês deste tutorial está a caminho.

Grande abraço

sexta-feira, 25 de março de 2011

Apresentações / motivações

Olá amigos.

Este é o primeiro post deste blog. Gostaria de dar as boas vindas a todos que aqui chegaram.

Me motivei a criar este blog para ajudar vocês, que como eu, sofreram (ou talvez, ainda sofram) com a instalação de distribuições linux paravirtualizadas rodando sob o XenServer.

Minha primeira briga (e este será o assunto do próximo post) foi para instalar um Gentoo (www.gentoo.org) totalmente paravirtualizado, com xentools, live migration e tudo mais.

Foi uma briga bonita (para não dizer medonha), houve muita pesquisa, muito google sendo usado. Mas, devido a um golpe de sorte, consegui concluir.

Hoje sou um cara um pouco mais feliz, já tenho o gentoo rodando redondinho.

Minha intenção é pegar algumas distribuições principais que não tem suporte oficial (nem templates já preparados) e gerar templates prontos para serem usados, disponibilizando-os livremente.

Talvez, se eu tiver paciência, eu monte algumas receitinhas de bolo de como fiz os templates.

Grande abraço, e até o próximo post.