Essa é uma revisão anterior do documento!
Tabela de conteúdos
Create BOX
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
ERRO 1
$ sudo gem install veewee --pre ERROR: While executing gem ... (Gem::DependencyError) Unable to resolve dependencies: veewee requires net-ssh (~> 2.2.0); fog-core requires net-ssh (>= 2.1.3); net-scp requires net-ssh (>= 2.6.5)
Correção
$ sudo gem install net-scp
e tente novamente
ERRO 2
Building native extensions. This could take a while... ERROR: Error installing veewee: ERROR: Failed to build gem native extension. /usr/bin/ruby1.9.1 extconf.rb /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError) from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from extconf.rb:1:in `<main>' Gem files will remain installed in /var/lib/gems/1.9.1/gems/gherkin-2.12.2 for inspection. Results logged to /var/lib/gems/1.9.1/gems/gherkin-2.12.2/ext/gherkin_lexer_ar/gem_make.out
Correção
$ sudo apt-get install ruby-dev $ sudo gem install hpricot $ sudo gem install optiflag
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