Criando Box CentOS 5 para Vagrant com o VirtualBox

Primeiramente, gostaria de citar o artigo de Chris Bednarski, de onde extrai praticamente todas as informações necessárias para escrever este artigo.

O objetivo desse artigo é fornecer um passo a passo para a criação de um box CentOS 5.10 para o Vagrant.

Antes de iniciar o passo a passo, vale citar que existem ferramentas que automatizam a criação de boxes para Vagrant, veewee e bento, vale a pena dar uma olhada após a leitura do artigo.

Instalação do Vagrant

Vagrant é um software que permite a criação de ambientes de desenvolvimento utilizando máquinas virtuais. Para fazer o download e obter mais informações sobre o Vagrant, acesse: http://www.vagrantup.com/.

Até a escrita do artigo, a última versão disponível do Vagrant era a 1.4.3. Como estou utilizando Fedora, vou utilizar o rpm disponibilizado no site do vagrant.

# wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.4.3_x86_64.rpm
# yum install vagrant_1.4.3_x86_64.rpm

Para mais opções de downloads do Vagrant, versões e plataformas, acesse: http://www.vagrantup.com/downloads.html.

VirtualBox

No meu ambiente estou utilizando o VirtualBox 4.2.18. Já existem versões mais novas que podem ser obtidas em https://www.virtualbox.org/.

$ VBoxManage -v

Criação da Máquina Virtual CentOS 5.10

No VirtualBox criar uma máquina virtual, com as seguintes configurações:

  • Nome: centos5x64
  • Tipo: Linux
  • Versão: Red Hat (64 bits)
  • Tamanho da memória: 1024MB
  • Disco: Criei um novo disco VDI dinamicamente alocado com 40GB
  • Uma interface de rede configurada com NAT
  • Desabilitar o Som
  • Desabilitar a controladora USB

Durante a instalação do CentOS 5.10, atente para as seguintes configurações:

  • Nome da máquina: vagrant-centos5x64
  • Não precisa configurar a rede agora, deixe como DHCP
  • Senha do root: vagrant
  • Pode escolher qualquer layout de particionamento, contanto que dê para realizar o boot
  • Escolher somente o pacote Server para instalação

Aguarde a instalação completar e depois logue na nova máquina como root.

Desabilitar o Firewall

Desativar o firewall é para não termos que nos preocupar se alguma regra está impossibilitando o funcionamento correto algum outro serviço.

# /etc/init.d/iptables stop
# /etc/init.d/ip6tables stop
# chkconfig iptables off
# chkconfig ip6tables off

Desabilitar o SELinux

A desativação do SELinux tem o mesmo motivo da desabilitação do firewall.

Edite /etc/selinux/config
Troque SELINUX=enforcing para SELINUX=disabled

Agora reinicie a máquina virtual.

# reboot

Remover referências ao macaddress nas configurações de rede

É necessário remover qualquer referência ao macaddress nas configurações de rede.

Edite /etc/sysconfig/network-scripts/ifcfg-eth0
Remover a linha com HWADDR

Instalação do VirtualBox Guest Additions

Primeiramente é necessário instalar alguns pacotes que possibilitem a instalação do Guest Additions. No menu Devices, monte CD/DVD do CentOS utilizado na instalação e execute os seguintes comandos:

# mkdir /media/cdrom
# mount /dev/cdrom /media/cdrom
# yum --disablerepo=\* --enablerepo=c5-media install -y gcc make perl kernel-devel kernel-headers openssh-server
# umount /media/cdrom

Depois de instalado os pacotes acima, acesse o menu Devices > Install Guest Additions.

# mount /dev/cdrom /media/cdrom
# /media/cdrom/VBoxLinuxAdditions.run
# umount /media/cdrom

Configurar o Usuário Vagrant

Para o vagrant funcionar corretamente é necessário criar um usuário chamado vagrant com permissão de uso de sudo.

# useradd -m vagrant
# usermod -aG wheel vagrant
# echo vagrant | passwd vagrant --stdin
# echo "vagrant ALL=(ALL) ALL" >> /etc/sudoers
# echo "%wheel ALL=NOPASSWD: ALL" >> /etc/sudoers
# echo 'Defaults env_keep="SSH_AUTH_SOCK"' >> /etc/sudoers

Depois, no arquivo /etc/sudoers adicione ! a frente de requiretty na linha que contém Defaults requiretty. Isso permite que o Vagrant realize sudo remotamente.

Defaults !requiretty

Desabilitar a Opção UseDNS em /etc/ssh/sshd_config

# echo "UseDNS no" >> /etc/ssh/sshd_config

Adicionar a Chave Pública do Vagrant

Para permitir que o usuário vagrant se conecte à máquina virtual, temos que adicionar a chave pública do vagrant ao arquivo authorized_keys do usuário.

# mkdir -m 0700 /home/vagrant/.ssh
# echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" > /home/vagrant/.ssh/authorized_keys
# chown -R vagrant:vagrant /home/vagrant/.ssh
# chmod -R 0600 /home/vagrant/.ssh/*

Essa chave pública pode ser obtida em: https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub.

Agora desligue a VM

# shutdown -h now

Criação do Arquivo .box

Vá até o diretório onde os arquivos da sua VM estão, no meu caso:

$ cd ~/virtualbox/centos5x64

Primeiramente, vamos compactar o disco da VM para que o nosso box final tenha o menor tamanho possível.

$ VBoxManage modifyhd centos5x64.vdi --compact

Antes de exportar, tenha certeza que:

  • O som da VM está desabilitado
  • A controladora USB está desabilitada
  • Nenhum ISO está sendo montado como storage

Agora vamos exportar a VM em um pacote ovf para que o vagrant possa utilizá-lo.

Isso pode ser feito pela interface gráfica do VirtualBox, no menu File > Export Appliance. Ao clicar nesse menu, selecione a máquina virtual centos5x64, depois escolha o local para onde a VM será exportada, marque o checkbox Write Manifest File, salve o arquivo como centos5x64.ovf e, por fim, exporte a VM.

Esse processo leva um pouco de tempo, e quando terminar, você deve ter os seguintes arquivos na pasta da exportação:

  • centos5x64-disk1.vmdk
  • centos5x64.mf
  • centos5x64.ovf

O próximo passo é renomear centos5x64.ovf para box.ovf.

$ mv centos5x64.ovf box.ovf

Agora precisamos criar o arquivo metadata.json, com o seguinte conteúdo:

{
    "provider":"virtualbox"
}

Também precisamos criar o arquivo Vagrantfile, com um macaddress padrão, por exemplo:

Vagrant.configure("2") do |config|
    config.vm.base_mac = "0800275E4052"
end

Para finalizar, criamos o pacote .box do Vagrant:

$ tar -czvf vagrant-centos5x64.box ./*

Ao final desse processo, o box gerado deve ter cerca de 540MB de tamanho.

Testando o Novo Vagrant Box

Primeiramente, vamos adicioná-lo ao nosso vagrant:

$ vagrant box add centos5x64 vagrant-centos5x64.box

Agora, em alguma outra pasta vazia, crie o arquivo Vagrantfile, com o seguinte conteúdo:

Vagrant.configure("2") do |config|

    config.vm.synced_folder "./", "/vagrant", id: "vagrant-root"

    config.vm.define :centos5x64 do |centos5x64|
        centos5x64.vm.box = "centos5x64"
        centos5x64.vm.hostname = "centos5x64-hostname"
    end 
end

E agora, vamos subir ao nosso box com vagrant:

$ vagrant up

Se sua máquina virtual subiu e você consegue acesso pelo comando vagrant ssh, então a criação do box foi feita com sucesso.

Para conhecer mais comandos e configurações do vagrant, acesse http://www.vagrantup.com/.