Criando um box para o Vagrant

13 de nov de 2016 - Paulo Dias


O Vagrant é um projeto que permite gerenciar ambientes virtuais de forma simples e eficiente. Ele possui suporte as principais soluções de virtualização e também para várias ferramentas de provisionamento, como Puppet e Chef·

O Vagrant empacota as máquinas virtuais em boxes que podem ser criados e depois disponibilizados no site oficial do projeto. Nesse artigo, quero mostrar como criar e disponibilizar uma box para o Vagrant. A maneira mais simples de criar um box é a partir de um box já existente, mas vou optar por criar um box do zero.

O site do Vagrant já possui boxes para as distribuições GNU/Linux mais conhecidas... Então, para criar algo diferente, vou utilizar uma distribuição menos conhecida, o Slitaz. Trata-se de uma distribuição independente( não é baseada em outra distribuição ) que na versão mais completa, com ambiente gráfico e outros programas de uso geral, cabe em uma imagem .ISO com menos de 50MB. O trabalho realizado pelos desenvolvedores do Slitaz é excelente e pode ser conferido em detalhes no site http://www.slitaz.org/en/.

Como a ideia é criar um box para o Vagrant, vou utilizar o sabor base do Slitaz que possui apenas o ambiente em modo texto e, consequentemente, uma imagem .ISO ainda menor. O download pode ser feito nesse endereço http://mirror.slitaz.org/iso/4.0/flavors/.

Para configurar o Slitaz como um box, é necessário instalá-lo em uma máquina virtual, instalar um conjunto de pacotes e configurar alguns arquivos. Para iniciar, é necessário ter o Vagrant e o VirtualBox instalados na máquina física. No Debian Jessie e em distribuições Debian-like, a instalação pode ser feita com o seguinte comando:

 
sudo apt-get install vagrant virtualbox
 

Feito isso, basta criar um máquina no VirtualBox e iniciar a imagem do Slitaz. O processo de boot é extremamente rápido, serão feitas algumas perguntas para localização do ambiente e o sistema já está pronto para ser utilizado. O usuário 'root' por padrão usa a senha 'root'.

Por enquanto o Slitaz está rodando no modo live a partir da imagem de CD, para realizar a instalação, o primeiro passo é particionar o HD. Isso pode ser feito com o comando fdisk, assim:

Observação: Os próximos comandos devem ser executados na máquina virtual do Slitaz.

 
fdisk /dev/sda

No fdisk pressionando 'm' as opções disponíveis são listadas. Para criar um partição primaria, pressione 'n', depois 'p', escolha o número para partição( 1 ), escolha o inicio da partição( 1 ) e o tamanho da partição( +8000M ). Para sair do fdsik, pressione 'w'.

Depois de criar a partição, adicione um sistema de arquivo com o comando:

 
mkfs.ext4 /dev/sda1

O próximo passo é copiar os arquivos do Slitaz para a partição do HD. A partição e o CD do Slitaz( a imagem .ISO que está no VirtualBox ) devem ser montadas com os comandos:

 
mount /dev/sda1 /mnt

mount /dev/cdrom /media/cdrom

Então, para copiar o kernel, faça:

 
mkdir /mnt/boot/

cp -a /dev/cdrom/boot/vmlinuz* /mnt/boot/

Depois, copie e descompacte o filesystem :


cp /media/cdrom/boot/rootfs.gz /mnt/

cd /mnt/

unlzma < rootfs.gz | cpio -id 

rm rootfs.gz init

Feito isso, o Slitaz já está instalado, mas antes de continuar ainda é necessário instalar o GRUB ( a primeira versão, também chamado de GRUB legacy ). Execute o comando:


grub-install --root-directory=/mnt/ /dev/sda 

E crie o arquivo de configuração /mnt/boot/grub/menu.lst com o seguinte conteúdo:


timeout 5

default 0

title Slitaz
     root( hd0, 0 )
     kernel /boot/vmlinuz-2.6.37-slitaz root=/dev/sda1 vga=normal

Observação: O root( hd0, 0 ) é referente ao primeiro HD e a primeira partição, ou seja, /dev/sda e /dev/sda1. Se fosse a primeira partição do segundo HD seria root( hd1, 0 ).

O Slitaz e o GRUB estão instalados, retire a imagem do Slitaz do virtualBox e reinicie o sistema com o comando:


reboot

Boot em 4 segundos :O

Com o sistema instalado, é possível instalar os pacotes necessários para o Slitaz ser um box do Vagrant:


tazpkg recharge

tazpkg get-install sudo
tazpkg get-install openssh
tazpkg get-install linux-api-headers
tazpkg get-install linux-module-headers
tazpkg get-install dkms
tazpkg get-install bzip2
tazpkg get-install wget
tazpkg get-install bash

Durante a instalação do bash, o sistema vai perguntar se o sh deve ser um link para o bash, certifique-se de responder yes.

Depois, para seguir o padrão dos boxes do Vagrant, é necessário ter um usuário 'vagrant' com senha 'vagrant' e também alterar a senha do usuário 'root' para 'vagrant':


adduser vagrant

passwd

O Vagrant conecta no sistema usando SSH sem senha através do sistema de chaves, para que isso funcione, é preciso baixar a chave publica para o usuário 'vagrant'.


mkdir /home/vagrant/.ssh/

wget --no-check-certificate https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keys

chown vagrant:vagrant /home/vagrant/.ssh/ -R

chmod 0700 /home/vagrant/.ssh/
chmod 0600 /home/vagrant/.ssh/authorized_keys

O usuário 'vagrant' também precisa poder usar o sudo sem senha, isso pode ser configurado com o comando visudo adicionando a linha:


vagrant ALL=(ALL) NOPASSWD: ALL

O próximo passo é instalar os adicionais de convidado do VirtualBox, adicione a imagem de CD na máquina virtual e execute esses comandos para realizar a instalação:


mount /dev/cdrom /media/cdrom

sh /media/cdrom/VBoxLinuxAddtions.run

Feito isso, o sistema já está quase pronto para ser um box, mas antes de terminar é importante adicionar a seguinte linha, sugerida pela equipe do Vagrant, no arquivo /etc/ssh/sshd_config:


UseDNS no

E por último, como o Vagrant utiliza apenas o comando shutdown -h now para desligar o sistema, e esse comando não está presente, de forma nativa no Slitaz( ele usa o poweroff, halt e reboot ), é necessário criar uma alternativa... Um jeito simples, é criar um shell script /sbin/shutdown com o seguinte conteúdo:


#!/bin/bash

if [ $1 = '-h' -a $2 = 'now'] ; then

     poweroff;
     exit 0;

fi

echo 'Only shutdown -h now is implemented';
exit 1;


Observação: Use o comando chmod para dar permissão de execução para o script.

Pronto, com isso, o sistema já está configurado para ser um box do Vagrant. Para terminar, desligue a máquina virtual e na máquina física execute o seguinte comando:


vagrant package --base nome_vm_slitaz

Observação: Substitua nome_vm_slitaz pelo nome da máquina do Slitaz que você criou no VirtualBox.

Com isso, foi criado o box do Slitaz com o nome 'package.box'. Para testar, utilize os seguintes comandos:


vagrant box add slitaz package.box

vagrant init slitaz

vagrant up

Depois de testar o seu box, se quiser compartilhar, basta criar uma conta nesse link https://atlas.hashicorp.com/account/new.

Então é isso, qualquer dúvida, deixe um comentário e se quiser baixar o meu box do Slitaz, acesse: https://atlas.hashicorp.com/boxes/search?utf8=%E2%9C%93&sort=&provider=&q=p4ulodi4s


Paulo Dias

Graduado no curso tecnólogo em análise e desenvolvimento de sistemas. Defensor do Software Livre e da democratização da informação. Possui as certificações Linux LPIC-1 e Java OCA. Atualmente exerce a função de coordenador técnico na área de telecomunicações.

Siga-me no Twitter