Criando boxes Vagrant customizados com o Veewee
Eu já falei um pouco sobre o Vagrant e sobre a filosofia DevOps. No post sobre Vagrant mostrei como usar um box Ubuntu publicamente disponível e quão fácil é usar um provisionador shell para configurar um box LAMP básico.
Então eu disse que existem boxes publicamente disponíveis mas omiti o site Vagrant boxes. Por que da omissão? Simplesmente eu não os acho tão úteis e acho que as desvantagens superam os benefícios. Pegar um box que você não sabe como foi coonfigurado por levar a sérios problemas de segurança. E se o box é apenas uma instalação básica, é quase sem real utilidade já que você precisará fazer o provisionamento da sua configuração desejada a cada vez que iniciar uma VM baseada no box.
E por que não criar um box base? Veewee ao resgate!
Veewee
O Veewee é uma ferramenta para criar boxes Vagrant e imagens KVM, VirtualBox e Fusion facilmente. Mãos a obra, vamos abrir um terminal. Você precisará ter o RubyGems instalado na sua máquina para instalar o Veewee. Leia o post sobre o Vagrant para ver como instalá-lo. Vamos instalar a última versão alpha disponível (observação: os seguintes comandos foram testados em um velho e bom MacOS X Leopard).
$ sudo gem install veewee --pre
Veewee vem com muitos templates de sistemas operations que você pode usar para criar seu box base Vagrant ou imagem de VM (e é por isso que usamos a última versão alpha já que contém templates atualizados para os principais sistemas operacionais). Você pode listar os templates disponíveis usando o seguinte comando:
$ vagrant basebox templates | sort
Existem templates para distros Linux populares (Debian, Ubuntu, CentOS, Scientific Linux), alguns sabores Unix (Solaris, FreeBSD) e até mesmo a preview release 8 do Windows. Vamos criar um box Debian. Primeiro, vamos definir o nosso box base com o nome ‘squeeze64-lamp’ usando o Debian 6.0.4 AMD64.
$ mkdir -p ~/Dev/veewee/squeeze/amd64
$ cd ~/Dev/veewee/squeeze/amd64
$ vagrant basebox define squeeze64-lamp Debian-6.0.4-amd64-netboot
[vagrant] The basebox 'squeeze64-lamp' has been succesfully created from the template 'Debian-6.0.4-amd64-netboot'
[vagrant] You can now edit the definition files stored in definitions/squeeze64-lamp or build the box with:
[vagrant] vagrant basebox build 'squeeze64-lamp'
Nós podemos ver alguns arquivos no diretório definitions/squeeze64-lamp
que são usados para instalar o software necessário para um box base Vagrant:
$ ls definitions/squeeze64-lamp/
base.sh cleanup-virtualbox.sh definition.rb puppet.sh vagrant.sh zerodisk.sh
chef.sh cleanup.sh preseed.cfg ruby.sh virtualbox.sh
O principal arquivo aqui é o definition.rb
. Ele tem um hash com algumas definições da VM VirtualBox (como o número de CPUs e tamanhos de memória e disco), definições de boot e do Kickstart - que são usadas para automatizar a instalação do sistema operacional - e os arquivos de pós-instalação. Vamos configurar o mesmo box LAMP do post sobre Vagrant. Faça o download ou clone o repositório Git vagrant-shell-scripts e altere os arquivos de pós-instalação em definitions.rb
usando o seguinte trecho:
:postinstall_files => [
"base.sh",
"vagrant.sh",
"virtualbox.sh",
"ruby.sh",
"puppet.sh",
"chef.sh",
"dotdeb.sh",
"db-mysql.sh",
"dev-tools.sh",
"php5.sh",
"php5-qa.sh",
"php5-tools.sh",
"drush.sh",
"cleanup-virtualbox.sh",
"cleanup.sh",
"zerodisk.sh"
],
Dica: coloque seus arquivos de pós-instalação após o arquivo base.sh
e antes do arquivo cleanup.sh
.
Com tudo no lugar, cria seu box! Isto pode levar algum tempo já que será feito o download do Virtual Box Guest Additions e da imagem ISO do sistema operacional (mas apenas para a primeira vez).
$ vagrant basebox build squeeze64-lamp
Após criar o box, valide-o:
$ vagrant basebox validate squeeze64-lamp
Com os testes ok, exporte seu box:
$ vagrant basebox export squeeze64-lamp
Agora você tem um box base Vagrant customizado ao qual pode distribuir para o seu time de TI. Apenas adicione-o no Vagrant e comece a usá-lo!
$ vagrant box add squeeze64-lamp squeeze64-lamp.box
$ vagrant init squeeze64-lamp
$ vagrant up
$ vagrant ssh
Este post está disponível em inglês também!
Que discutir este post? Fale comigo no Twitter!