O
Vagrant é um projeto que permite gerenciar ambientes virtuais de forma simples e eficiente. Ele possui suporte às principais soluções de virtualização e também para várias ferramentas de provisionamento, como
Puppet e
Chef.
Para saber mais acesse o site do projeto:
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:
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:
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'.
Instalação do S.O
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:
Obs.: os próximos comandos devem ser executados na máquina virtual do Slitaz.
# fdisk /dev/sda
No fdisk, a opção 'm' lista todas as opções disponíveis. Para criar um partição primaria, use '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, use '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
Obs.: 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
Configuração e empacotamento do S.O
Com o sistema instalado, é possível adicionar 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 à 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;
Obs.: 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
Obs.: 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:
Então é isso, qualquer dúvida, deixe um comentário e se quiser baixar o meu box do Slitaz, acesse: