Criando uma box CentOS customizada para Vagrant

Nesse texto vou mostrar passo a passo como criar uma box customizada para Vagrant utilizando VirtualBox. No exemplo eu utilizo o CentOS mas os passos podem ser reproduzidos em qualquer distribuição Linux.

Começamos criando uma nova VM no VirtualBox com as configurações abaixo:

  • Nome: vagrant-centos7
  • Tipo: Linux
  • Versão: Red Hat (64 bit)
  • Memória: 1024 MB
  • Disco: VDI (VirtualBox Disk Image) dinamicamente alocado com 10 GB
  • Placa de Rede: NAT
  • Desabilitar Áudio e USB
  • Adicionar a imagem ISO de instalação

Eu optei por fazer a instalação mínima do CentOS com os detalhes abaixo:

  • Software Selection: Minimal Install
  • Hostname: vagrat-centos7
  • Network: DHCP ativado
  • Root password: vagrant

Após a instalação e reboot, logar com usuário root. Eu gosto de nesse momento fazer upgrade de todos os pacotes instalados e rebootar novamente:

1
2
yum update
reboot

Na sequência instalar os pacotes abaixo:

1
yum install nano wget gcc bzip2 make kernel-devel kernel-headers dkms

Através da interface do VirtualBox apresente o CD de Guest Additions:

Faça a instalação do Guest Additions com os passos abaixo. Para outras versões de Linux os passos podem ser ligeiramente diferentes, confira os detalhes na documentação do VirtualBox.

1
2
3
4
5
6
export KERN_DIR=/usr/src/kernels/$(uname -r)
mkdir /media/VirtualBoxGuestAdditions
mount -r /dev/cdrom /media/VirtualBoxGuestAdditions
cd /media/VirtualBoxGuestAdditions
./VBoxLinuxAdditions.run
reboot

Após o reboot criar e configurar o usuário vagrant:

1
2
3
4
5
6
7
8
9
groupadd vagrant
useradd vagrant -g vagrant -G wheel
echo "vagrant" | passwd --stdin vagrant
echo "vagrant ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/vagrant
chmod 0440 /etc/sudoers.d/vagrant   
mkdir -pm 700 /home/vagrant/.ssh
wget https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keys
chmod 0600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant /home/vagrant/.ssh

Remover necessidade de TTY para execução do sudo:

1
sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers

Desabilitar a opção UseDNS no servidor SSH:

1
echo "UseDNS no" >> /etc/ssh/sshd_config

A partir desse ponto essa VM já tem tudo que precisa para ser um box do Vagrant. Qualquer customização que você precise fazer para essa VM pode ser feita agora. Como exemplo eu vou ativar os repositórios EPEL e fazer instalação do agente Puppet. Os links usados abaixo são para as versões mais atuais no momento em que escrevo esse texto.

1
2
3
rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
yum install puppet

Finalizadas as customizações, basta limpar os dados do yum, o histórico de comandos e desligar o servidor:

1
2
yum clean all
cat /dev/null > ~/.bash_history && history -c && shutdown -h now

Tenha certeza que não temos nenhuma imagem ISO apresentada para a VM antes de prosseguir. No console do host VirtualBox vamos empacotar a nova VM:

1
vagrant package --base vagrant-centos7 --output vagrant-centos7.box

O argumento --base recebe o nome da VM no VirtualBox e --output o nome do arquivo a ser gerado. Esse arquivo é a box propriamente dita, pronta para ser usada. Vamos validar adicionando essa nova box no Vagrant e iniciando um novo server com ela:

1
2
3
vagrant box add vagrant-centos7 vagrant-centos7.box
vagrant init vagrant-centos7
vagrant up

Se tudo correu bem até aqui, você já tem uma nova VM provisionada pelo Vagrant conforme você instalou e customizou.

Comentários