Utilizando o Vagrant – parte 3

Vagrant-3

Relembrando que na parte anterior usei um “Vagrantfile” junto com um script externo para instalar Node.js, npm  e demais dependências para configurar em uma máquina virtual rodando Ubuntu um servidor para aplicações em Express.

Bem, agora é vez de fazer o mesmo no CentOS! 🙂

A imagem padrão do CentOS

Antes de seguir, a constatação de um pequeno problema:

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos/7'...
...
==> default: Checking for guest additions in VM... 
    default: No guest additions were detected on the base box for
    default: this VM! Guest additions are required for forwarded
    default: ports, shared folders, host only networking, and
    default: more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
...

Apesar da recomendação da HashiCorp para que sejam instaladas, quando aplicável, as ferramentas de convidado¹ elas não estão presentes na box “centos/7”. Sendo assim o redirecionamento de portas, compartilhamento de diretórios e outros recursos do Vagrant não funcionarão corretamente.

Mas até aí nenhum problema! Basta instalá-las, não há mistério algum e a forma mais fácil e rápida é  copiar o CD² para dentro da máquina virtual, montá-lo em loopback, executar o instalador e pronto!

$ sudo mount VBoxGuestAdditions_5.0.14.iso /mnt/ -o ro,loop
$ cd /mnt
$ sudo yum install gcc kernel-devel-3.10.0-327.10.1.el7.x86_64
...
$ sudo ./VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.0.14 Guest Additions for Linux............
VirtualBox Guest Additions installer
Removing installed version 5.0.14 of VirtualBox Guest Additions...
Removing existing VirtualBox non-DKMS kernel modules[  OK  ]
Copying additional installer modules ...
Installing additional modules ...
Removing existing VirtualBox non-DKMS kernel modules[  OK  ]
Building the VirtualBox Guest Additions kernel modules
Building the main Guest Additions module[  OK  ]
Building the shared folder support module[  OK  ]
Building the OpenGL support module[  OK  ]
Doing non-kernel setup of the Guest Additions[  OK  ]
Starting the VirtualBox Guest Additions [  OK  ]
Installing the Window System drivers
Could not find the X.Org or XFree86 Window System, skipping.

Certo? Na verdade não! Acontece que precisarei fazê-lo toda vez que for usar esta imagem pois esta alteração não se refletirá na box que está armazenada no cache do Vagrant.

(¹) No caso do VirtualBox mas mas o mesmo se aplica ao Hyper-V, VMware etc.

(²) Você pode usar “VBoxManage list dvds” para descobrir onde o VirtualBox armazenou a última imagem que ele baixou e que utiliza eventualmente.

Customizando uma imagem

Para customizar a imagem do CentOS e produzir uma que inclua as as ferramentas de convidado do VirtualBox criar-se um novo projeto:

$ mkdir -p ~/Virtualbox/centos7_vbox 
$ cd ~/Virtualbox/centos7_vbox 
$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
  config.vm.box = "centos/7"
  config.vm.box_check_update = true
  config.vm.provision "shell", path: "./vagrant_vboxguest_setup.sh"
end

E claro, o script que cuida de fazer a provision é este aqui (a versão automatizada dos comandos que listei mais acima):

Então é usar “vagrant up” e deixá-lo iniciar a imagem com o CentOS, fazer a instalação das ferramentas e quando terminar será possível reempacotar esta imagem em uma nova box usando “vagrant package”:

$ vagrant package --output centos7_vbox.box

Depois adicioná-la ao cache do Vagrant com “vagrant box add”:

$ vagrant box add centos7_vbox.box --provider virtualbox \
--name centos7vbox
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos7vbox' (v0) for provider: virtualbox
    box: Unpacking necessary files from: file://.../centos7_vbox.box
==> box: Successfully added box 'centos7vbox' (v0) for 'virtualbox'!

Eu poderia ter aproveitado a oportunidade para customizar ainda mais a imagem e instalar os pacotes do Node.js e do Express mas preferi não misturar as coisas.

De volta ao Express

Com a imagem do CentOS devidamente “consertada” voltamos à programação normal:

$ mkdir -p ~/Vagrant/express2
$ cd ~/Vagrant/express2
$ cat Vagrantfile 
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
  config.vm.box = "centos7vbox"
  config.vm.box_check_update = true 
  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--memory", "1024"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]
  end  
  config.vm.provision "shell", path: "./vagrant_express_setup_2.sh"
  config.vm.network "forwarded_port", guest: 3000, host: 8000
end

Este arquivo é igual ao do exemplo anterior, a única alteração que fiz foi no nome do script  e mesmo assim é opcional pois  foi para ressaltar que estou usando um arquivo diferente do anterior.

Na prática ainda é o mesmo programa, isto é, a funcionalidade é idêntica e ele apenas foi “ensinado” a saber o que fazer quando também se deparar com distribuições da família RHEL, ao invés de acreditar que todas sejam baseadas em Debian. 🙂

Então basta usar  “vagrant up” e após terminada a instalação usar “vagrant ssh -c /vagrant/run” para executar o servidor.

Fim da terceira parte

Até agora já foi visto como criar um projeto, baixar uma box contendo uma imagem específica de uma máquina virtual e até mesmo como customizá-la para uma determinada tarefa, também foi visto como criar uma nova box a partir de uma já existente. Na próxima parte será a vez de testar outros providers e também implementar um recurso específico da versão 1.7, o “vagrant push”. Até!

Anúncios

Um comentário sobre “Utilizando o Vagrant – parte 3

  1. Pingback: Vagrant – parte 4 | giovannireisnunes

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s