Blog

OpenStack: Mirantis Fuel no Ubuntu Server

Tendo conseguido instalar uma versão do OpenStack usando o Mirantis Fuel em um ambiente VirtualBox hospedado em uma máquina Windows, meu próximo passo foi fazer o mesmo em um ambiente VirtualBox hospedado em uma máquina Ubuntu 14.04.

Eu sei, já existe versão LTS mais recente. Me deixe em paz, panela velha é que faz comida boa.

Peguei um HD de 300 e poucos GB de um notebook velho que tinha aqui e pluguei na mesma máquina de antes (um Core i5 com 8GB de RAM). É o que o sistema oferece. Tive o cuidado de remover meu HD com o Windows. Só Jesus salva.

Com meu Ubuntu fresquinho, fiz a prece do recém-instalado:

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get autoremove

Instalando o VirtualBox com Interface Gráfica WEB:

Parti então para a instalação do VirtualBox. Para tanto, usei este tutorial. Só modifiquei as versões usadas. Vou repetir os passos usados:

apt-get install build-essential dkms

Crie o seguinte arquivo:

vi /etc/apt/sources.list.d/virtualbox.list

e coloque nele o seguinte conteúdo:

deb http://download.virtualbox.org/virtualbox/debian trusty contrib

Baixe e instale a chave:

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -

e instale o VirtualBox. A minha versão difere do tutorial. Para verificar a versão mais recente vá no site do VirtualBox e troque o número da versão de acordo.

sudo apt-get update && sudo apt-get install VirtualBox-5.1

Minha versão do Extension Pack também é diferente (vá para seu diretório home):

wget http://download.virtualbox.org/virtualbox/5.1.2/Oracle_VM_VirtualBox_Extension_Pack-5.1.2-108956.vbox-extpack

instale:

VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.1.2-108956.vbox-extpack

Esse próximo passo é importante. É necessário criar um usuário para acessar o VirtualBox pelo PHP. Eu não tinha me ligado nisso e quando instalei o OpenStack usei o meu usuário como root em modo sudo (sudo -i) então não pude ver as máquinas virtuais criadas. Tive que fazer tudo denovo do início. Use o mesmo usuário aqui e na instalação do OpenStack. Para instalar o OpenStack ele precisará ter poderes de root. Eu usei o usuário padrão da instalação do Ubuntu (primeiro usuário).

Neste ponto o tutorial manda criar um usuário, mas eu vou usar o meu usuário padrão do Ubuntu.

Verifique a instalação do VirtualBox:

sudo /etc/init.d/vboxdrv status

Caso algo esteja errado, execute:

sudo /etc/init.d/vboxdrv setup

É necessário um servidor Apache e o PHP. Se já tiver, pule esta etapa e verifique a pasta de destino se confere com sua instalação (/var/www/html/). Não esqueça também de conferir se os demais pacotes do PHP estão instalados:

sudo apt-get install apache2 php5 php5-common php-soap php5-gd

Baixei o PHPVirtualBox. Minha versão é diferente da do tutorial (vá para seu diretório home).

wget http://sourceforge.net/projects/phpvirtualbox/files/phpvirtualbox-5.0-5.zip

Descompacte o arquivo. Se não tiver o unzip, o apt-get resolve seu problema.

unzip phpvirtualbox*.zip

Copiar o PHPVirtualBox para o servidor Apache.

sudo mv phpvirtualbox-5.0-5 /var/www/html/phpvirtualbox

Criar o arquivo de configuração e configurar o usuário que irá controlar o VirtualBox e suas máquinas. Precisa ser o mesmo que irá instalar o OpenStack (com poderes sudo).

sudo cp /var/www/html/phpvirtualbox/config.php-example /var/www/html/phpvirtualbox/config.php
sudo vi /var/www/html/phpvirtualbox/config.php

Modifique as seguintes linhas:

[...]
var $username = 'magno';
var $password = 'minhasenha';
[...]

O próximo passo é informar ao VirtualBox este usuário. Crie o seguinte arquivo:

sudo vi /etc/default/virtualbox

e coloque a seguinte linha nele (claro que você vai trocar meu nome pelo usuário que existe na sua instalação):

VBOXWEB_USER=magno

Reinicie o VirtualBox WebService:

sudo /etc/init.d/vboxweb-service start

agora é só navegar para o seu novo servidor:

http://<SEU_IP>/phpvirtualbox/
Usuário: admin
Senha: admin

Na minha instalação eu recebi o seguinte erro após logar no painel do PhpVirtualBox:

This version of phpVirtualBox (5.0-5) is incompatible with VirtualBox 5.1.2. You probably need to download the latest phpVirtualBox 5.1-x.

O caso é que coloquei a versão mais recente do VirtualBox e do PhpVirtualBox mas elas não estavam ainda equiparadas. Mas até agora não tive maiores problemas com isso.

Mas tudo isso é desnecessário se você for fera na linha de comando do VirtualBox. Eu não sou e preciso muito da interface gráfica do VirtualBox. O mais legal disso é que você poderá pegar a console de qualquer máquina virtualizada usando o Console Remoto do Windows apontando para o IP da máquina host (sim da host, não da máquina virtual). O VirtualBox te dirá qual máquina está escutando em que porta).

Instalando o Fuel:

A partir daqui, o procedimento foi igual ao descrito no primeiro post da série. Copiei a imagem ISO para a pasta iso do pacote de scripts e executei dessa vez a versão para 8GB, pois agora estou ostentando recursos.

Precisei informar ao script de instalação que agora não há mais interface gráfica no VirtualBox. Isso é muito importante, pois o script não vai conseguir iniciar as VM corretamente. Para tanto, editei o arquivo config.sh:

Localize a linha contendo o código a seguir:

# Set to 1 to run VirtualBox in headless mode
headless=0

e troque para 

headless=1

Após isso, executei a instalação.

./launch_8GB.sh

Fiquei impressionado com a melhora no tempo de instalação. Incrivelmente mais rápido. Após tudo instalado, o sistema me informou o mesmo modo de acesso de antes:

http://10.20.0.2:8443

Só tem um probleminha: essa rede não está exposta para minha rede local e não posso modificar nada do ambiente de rede do Fuel sem danificar nada. A interface que controla a rede 10.20.0.0 é host only. Logo, só posso acessar o painel do Fuel a partir da máquina host e não tenho interface gráfica para isso.

Deixei uns dois dias esse problema de molho na minha cabeça e concluí que a solução não estava no VirtualBox, mas no próprio Ubuntu (e é uma solução até bem simples, se você sabe para onde olhar).

Resolvi criar um redirecionamento de portas da interface de rede da máquina host (que dá para minha rede local) para a interface de rede virtual que controla a rede 10.20.0.0. Na verdade, só tive a ideia poque tenho conhecimentos de infraestrutura de redes, mas não tinha a menor ideia de como fazer isso, pois não domino muito bem o iptables do linux. Tá bom, eu confesso: não entendo uma vírgula disso.

Recorri ao pessoal do Unix StackExchange e a resposta veio rápido. Primeiro postei a configuração das interfaces de rede da máquina host:

root@AKRAB:~# ifconfig
lo        Link encap:Loopback Local
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACK RUNNING  MTU:65536  Métrica:1
          pacotes RX:19685 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:19685 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:0
          RX bytes:7674590 (7.6 MB) TX bytes:7674590 (7.6 MB)

vboxnet0  Link encap:Ethernet  Endereço de HW 0a:00:27:00:00:00
          inet end.: 10.20.0.1  Bcast:10.20.0.255  Masc:255.255.255.0
          endereço inet6: fe80::800:27ff:fe00:0/64 Escopo:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:167 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000
          RX bytes:0 (0.0 B) TX bytes:22260 (22.2 KB)

vboxnet1  Link encap:Ethernet  Endereço de HW 0a:00:27:00:00:01
          inet end.: 172.16.0.254  Bcast:172.16.0.255  Masc:255.255.255.0
          endereço inet6: fe80::800:27ff:fe00:1/64 Escopo:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:437 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000
          RX bytes:0 (0.0 B) TX bytes:137886 (137.8 KB)

vboxnet2  Link encap:Ethernet  Endereço de HW 0a:00:27:00:00:02
          inet end.: 172.16.1.1  Bcast:172.16.1.255  Masc:255.255.255.0
          endereço inet6: fe80::800:27ff:fe00:2/64 Escopo:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:464 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000
          RX bytes:0 (0.0 B) TX bytes:150336 (150.3 KB)

wlan0     Link encap:Ethernet  Endereço de HW 00:13:46:94:18:c1
          inet end.: 192.168.25.25  Bcast:192.168.25.255  Masc:255.255.255.0
          endereço inet6: fe80::213:46ff:fe94:18c1/64 Escopo:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:2354945 erros:0 descartados:4 excesso:0 quadro:0
          Pacotes TX:1237088 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000
          RX bytes:3455421823 (3.4 GB) TX bytes:103231994 (103.2 MB)

root@AKRAB:~#

O que me interessa é a interface exposta na minha rede local (wlan0) e a interface que responde pela rede 10.20.0.0 (vboxnet0). Então a dica para o redirecionamento de pacotes que recebi foi:

iptables -I FORWARD -d 10.20.0.2 -m comment --comment "Accept to forward Fuel DashBoard traffic" -m tcp -p tcp --dport 8443 -j ACCEPT

iptables -I FORWARD -m comment --comment "Accept to forrward Fuel DashBoard return traffic" -s 10.20.0.2 -m tcp -p tcp --sport 8443 -j ACCEPT

iptables -t nat -I PREROUTING -m tcp -p tcp --dport 8443 -m comment --comment "redirect pkts to virtual machine" -j DNAT --to-destination 10.20.0.2:8443

iptables -t nat -I POSTROUTING -m comment --comment "NAT the src ip" -d 10.20.0.2 -o vboxnet0 -j MASQUERADE

Isso ainda não resolve o problema. É necessário informar ao linux que eu quero ativar o IP Forwarding:

echo 1 > /proc/sys/net/ipv4/ip_forward

Ainda não basta. Ao reiniciar o servidor tudo isso será perdido. É necessário editar o arquivo

/etc/sysctl.conf

e remover o comentário da linha

net.ipv4.ip_forward=1

Ainda, o iptables vai evaporar também ao reiniciar o servidor. Para tornar permanente as regras de redirecionamento, é necessário gravar as regras atuais para um arquivo

sudo iptables-save > /etc/iptables.conf

e então editar o seguinte arquivo:

/etc/rc.local

e colocar o seguinte conteúdo nele (antes do “exit 0”):

# Load iptables rules from this file
iptables-restore < /etc/iptables.conf

Pronto. Agora foi possível acessar o painel de controle do Fuel através do endereço

https://<IP_DO_SERVIDOR>:8443

Ele irá redirecionar o acesso para a máquina virtual master no IP 10.20.0.2 na mesma porta.

Não sei se isso é algum problema da instalação do VirtualBox, mas o caso é que, ao reiniciar o servidor, minha interface wlan0 sobe mas não conecta com a rede. Estou precisando executar um ifdown seguido de ifup em wlan0 para ela conectar. Fica a dica se você tiver somente uma interface Wi-Fi e acontecer aí.

No próximo post: e agora José?

 

 

0

About the Author:

Java EE developer and OSM Mapper.

  Related Posts
  • No related posts found.

You must be logged in to post a comment.