O post de hoje é sobre uma ferramenta muito legal chamada BoxGrinder. O BoxGrinder é um projeto membro da comunidade JBoss, produzido pelo Project Odd Team e está (finalmente) nos repositórios oficiais do Fedora 15.
O objetivo dessa ferramenta é gerar imagens (appliances) de máquinas virtuais, personalizando a instalação, determinando que pacotes serão instalados e executando tarefas pós instalação. Algo muito parecido com o que o kickstart faz, mas com o foco em virtualização. Assim, o BoxGrinder tem a capacidade de gerar o seu appliance sem intervenção, nos formatos RAW, vmware e ec2, que podem ser usados pelo KVM, VmWare e pelo serviço de cloud da Amazon, respectivamente. Os formatos vmware e ec2 são gerados fazendo uma conversão a partir do RAW por meio de plugins.
Observe o esquema a seguir:
Após gerar a imagem no formato base(RAW), o BoxGrinder faz uso de plugins de conversão para os formatos vmware ou ec2. Depois disso, ainda é possível fazer a entrega do appliance usando os plugins de entrega disponíveis. Observe os SOs, formatos e métodos de entrega suportados:
Sistemas operacionais suportados
- CentOS (centos)
- Scientific Linux (sl)
- Red Hat Enterprise Linux (rhel)
- Fedora (fedora)
Formatos suportados
- VMware (vmware)
- Amazon Elastic Compute Cloud (ec2)
- VirtualBox (virtualbox)
Métodos de entrega
- Amazon Simple Storage Service (s3)
- Amazon Simple Storage Service (ami)
- Amazon Simple Storage Service (cloudfront)
- Elastic Block Storage (ebs)
- SSH File Transfer Protocol (sftp)
- ElasticHosts (elastichosts)
- Local file system (local)
O projeto BoxGrinder possui 3 componentes: build, rest e studio:

Nesse post, usaremos apenas o build, que é o utilitário para geração dos appliances. O rest é um servidor para processar nos nós (usando o build) as solicitações de geração de appliances, oferecendo uma API para interação. O studio é uma interface web que ainda não está pronta. Esse seria o ambiente completo para o BoxGrinder:

Vamos por a mão na massa que vai ficar mais fácil de entender…
O objetivo aqui é criar um appliance Fedora 14 com apache instalado e configurado para ser inicializado automaticamente. O formato será o VMware e a entrega será via sftp.
Usando o Fedora 15, primeiro, precisamos instalar o pacote do boxgrinder-build:
[root@localhost ~]# yum install rubygem-boxgrinder-build
Vou criar um diretório de trabalho:
[root@localhost ~]# mkdir appliances [root@localhost ~]# cd appliances
O segundo passo é criar um arquivo de definição para o appliance. Vou criar um arquivo chamado f14-httpd.appl, com o seguinte conteúdo:
name: f14-httpd
summary: Appliance Fedora 14 com httpd.
os:
name: fedora
version: 14
hardware:
cpus: 2
memory: 256
partitions:
"/":
size: 2
packages:
- @core
- httpd
repos:
- name: fedora
baseurl: http://fedora.c3sl.ufpr.br/linux/releases/14/Fedora/x86_64/os/
post:
base:
- "chkconfig httpd on"
Nesse arquivo definimos o OS fedora versão 14, que terá uma partição “/” de 2GB, 2 vcpus e 256MB de RAM. Serão instalados os pacotes do grupo core e o pacote httpd. Tudo isso usando o repositório especificado em repos (usar um repositório local melhora bastante o desempenho). Após a criação do formato base (RAW) será executado o comando chkconfig especificado.
(UPDATE) Os repositórios padrões de cada distro são automaticamente adicionados quando você define o “OS”. Só é necessário informar o parâmetro “repos” em caso de repositórios personalizados. Thanks Marek.
Depois disso, é necessário criar no diretório ~/.boxgrinder/ um arquivo de configuração chamado config para os plugins:
[root@localhost ~]# mkdir ~/.boxgrinder [root@localhost ~]# vi ~/.boxgrinder/config
E nesse arquivo colocar os seguintes parâmetros:
plugins:
vmware:
type: personal
thin_disk: true
sftp:
path: /var
username: root
password: minhasenha
host: vmserver.domain.com
Veja aqui todas as configurações de plugins.
Hora de executar o comando para gerar o appliance:
boxgrinder-build f14-httpd.appl -p vmware -d sftp
Podemos acompanhar a criação do appliance pelo arquivo log/boxgrinder.log
Acessando o diretório de entrega no servidor, temos:
[root@vmserver var]# ls -lah f14-httpd-1.0-fedora-14-x86_64-vmware.tgz -rw-r--r--. 1 root root 173M Jul 12 15:50 f14-httpd-1.0-fedora-14-x86_64-vmware.tgz
Descompactando o arquivo:
[root@vmserver var]# tar xvfz f14-httpd-1.0-fedora-14-x86_64-vmware.tgz f14-httpd-1.0-fedora-14-x86_64-vmware/ f14-httpd-1.0-fedora-14-x86_64-vmware/README f14-httpd-1.0-fedora-14-x86_64-vmware/f14-httpd.vmx f14-httpd-1.0-fedora-14-x86_64-vmware/f14-httpd.vmdk
Observe que agora temos o arquivo vmx, com as configurações da VM, e o vmdk, a própria imagem gerada.
Tudo pronto… você já pode subir seu appliance usando o VMware. Mas claro que você prefere o KVM!
Até o próximo post.













This is just an awesome tutorial! Great work – thank you!
Few minor comments:
1. Proper command to install BoxGrinder Build is “yum install rubygem-boxgrinder-build”.
2. Default repos for selected operating system are automatically added – you don’t need to add “repos” section in your example.
–Marek
Hi Marek. Thank you for the comments.
Sorry about mistakes… my fault. Text updated.
See you arround.