Adopt-a-Hydrant
Grupo: Álvaro Fernando e Fábio Texeira
Introdução
[editar | editar código-fonte]Finalidade
[editar | editar código-fonte]Este documento apresenta um plano de Gerência de Configuração de software para o Adopt-a-Hydrant. Através deste, define-se diretrizes e atividades para o controle de versões e configuração do sistema em suporte ao desenvolvimento do projeto.
Link para o repositório: https://github.com/codeforamerica/adopt-a-hydrant
Escopo
[editar | editar código-fonte]O Adopt-a-Hydrant é uma aplicação web que permite aos cidadãos "adotarem" hidrantes de sua cidade, que precisam serem "desenterrados" da neve depositada sobre eles pois a neve pode comprometer a utilização de tal estrutura. Ele é desenvolvido utilizando a linguagem de programação Ruby e o framework Rails.
Como objetivos deste trabalho, definiu-se a contribuição nos seguintes aspectos:
- Gerência de Configuração do Ambiente de Desenvolvimento;
- Empacotamento deb;
- Automatização da build da aplicação.
Definições, Acrônimos e Abreviações
[editar | editar código-fonte]Visão Geral
[editar | editar código-fonte]Nas seções seguintes deste documento, define-se um cronograma para as atividades de gerenciamento de configuração, bem como todo os resultados obtidos durante este processo. Inclui-se, portanto, a documentação da configuração e execução das tarefas executadas para alcançar os objetivos propostos.
Link para a organização do projeto de GCS: https://github.com/adopt-a-hydrant-FGA
Cronograma
[editar | editar código-fonte]Data - Início / Previsão de Término | Atividade |
---|---|
27/04 - 10/05 | Implementação da GCS do ambiente de desenvolvimento |
11/05 - 24/05 | Empacotamento DEB do projeto |
25/05 - 07/06 | Empacotamento RPM do projeto |
01/06/2016 | Marco I - Apresentação do andamento do projeto |
08/06 - 21/06 | Automação da build |
22/06/2016 | Marco II - Apresentação final do Projeto |
Ferramentas, Ambiente e Infra-estrutura
[editar | editar código-fonte]Ferramenta | Descrição |
---|---|
Github | Forge free de aplicações que utilizam do sistema de versionamento git. |
Travis CI | Ferramenta de integração continua com suporte a repositórios no github e free, desde que o software seja livre. |
Chef | Ferramenta utilizada para a criaçao de receitas que automatiza as mais diversas tarefas. |
build-essential | Pacote que contem informações de listas informativas de pacotes que são considerados essenciais para a construção de pacotes Debian. |
devscripts | O pacote devscripts fornece uma colecção de scripts que podem ser usados para desenvolvedores Debian e outros que desejam construir pacotes Debian. |
debhelper | Debhelper é usado para ajudar a construir um pacotes Debian. |
RPMbuild | RPMbuild é usada para construir os pacotes RPM. |
Vagrant | Ferramenta para facilitar a criação de ambientes virtuais. |
VirtualBox | Ferramenta para emulação de sistemas operacionais. |
Ambiente de Desenvolvimento
[editar | editar código-fonte]Foi criado uma Vagrant box para a virtualização do ambiente de desenvolvimento. Utilizou-se como base o a box do Ubuntu 14.04 ubuntu/trusty64. Neste ambiente já estão instaladas as dependências necessárias para que o sistema seja executado localmente para fins de desenvolvimento.
A box está disponível para distribuição no sistema Atlas da HashiCorp. Foi criado uma organização chamada adopt-a-hydrant-fga com a box adopt-a-hydrant.
Link: https://atlas.hashicorp.com/adopt-a-hydrant-FGA/boxes/adopt-a-hydrant
Notas Técnicas
[editar | editar código-fonte]Utilizou-se um script para redução do tamanho do arquivo de iniciação do ambiente virtualizado, desenvolvido por Adrien Brault e disponibilizado em um Github Gist. Este script também está disponível no repositório criado para o projeto da disciplina.
Link: https://github.com/adopt-a-hydrant-FGA/adopt-a-hydrant_devel
Para preparar o ambiente de desenvolvimento, foi utilizado o script disponível no link abaixo:
Link: https://github.com/adopt-a-hydrant-FGA/adopt-a-hydrant_devel/blob/master/prepare-rails-env.sh
Os passo portanto para o levantar o ambiente de desenvolvimento são:
- Instalar as últimas versões do Vagrant e do VirtualBox
- Baixar e levantar a box disponibilizada no Atlas
$ vagrant init adopt-a-hydrant-FGA/adopt-a-hydrant; vagrant up --provider virtualbox
- Parar a máquina levantada:
$ vagrant halt
- Após o download, é necessário adicionar esta linha de configuração no Vagrantfile:
config.vm.network "forwarded_port", guest: 3000, host: 3000
- Depois, basta iniciar a máquina, mudar para o diretório do projeto e executar o comando de serviço do Rails
$ vagrant up
$ vagrant ssh
$ cd adopt-a-hydrant
sudo service postgresql start
$ rails s -b 0.0.0.0
Caso já se tenha um arquivo Vagrantfile, basta inserir nele o bloco abaixo:
config.vm.define :adopt do |adopt|
adopt.vm.box = "adopt-a-hydrant-FGA/adopt-a-hydrant"
adopt.vm.network "forwarded_port", guest: 3000, host: 3000
end
E em seguida iniciar a maquina:
vagrant up adopt
vagrant ssh adopt
Empacotamento
[editar | editar código-fonte]Foi planejado o empacotamento DEB e RPM, o pacote DEB seria enviado aos desenvolvedores do projeto como uma forma de contribuição e o pacote RPM serviria apanas de aprendizado. Porém devido há alguns problemas encontrados, não conseguimos realizar nenhum dos pacotes.
Problemas encontrados:
[editar | editar código-fonte]As versões do Ruby e do Rails utilizados pela aplicação não estão disponíveis para as distribuições Ubuntu, fedora e centOS, o mesmo vale para algumas das gems utilizadas como a gem "devise".
O que tentamos fazer:
[editar | editar código-fonte]Inicialmente tentamos empacotar separadamente o Ruby e o Rails. Sendo assim pegando como base pacotes já existentes utilizando o comando:
apt-get source ruby1.9.3
apt-get source ruby-rails-4.0
Bastando então "atualiza-los" para as suas versões mais recentes, porém a complexidade interna de tais pacotes inviabilizou essa nossa tentativa.
Como não conseguimos fazer os pacotes do Ruby e do Rails para as versões necessárias, passamos então a buscar ferramentas que poderiam nos auxiliar na tarefa de empacotar a aplicação, após uma busca sobre empacotamento DEB de aplicações ruby on rails chagamos na gem pkgr que realizaria a tarefa de fazer os pacotes DEB e RPM.
Após instalada:
gem install pkgr
Basta executar:
pkgr package /path/to/application
Dessa forma, baseado no sistema operacional, a gem gera um pacote DEB ou RPM.
A gem reconhece as seguintes distribuições:
- Ubuntu 14.04 ("trusty")
- Ubuntu 12.04 ("precise")
- Debian 8 ("jessie")
- Debian 7 ("wheezy")
- RHEL/CentOS 7
- RHEL/CentOS 6
- Suse Linux Enterprise Server 12
- Fedora 20
- Amazon Linux AMI 2014
Porém como já era de se esperar, o processo automatizado de geração de pacotes dessa gem é cheio de falhas, dentre elas:
- A aplicação adopt-a-hydrant utiliza o banco de dados postgreesql, o pkgr cria o pacote utilizando o banco de dados mysql como dependência;
- O pacote gerado não fornece nenhuma dependência de servidor(apache e etc);
- No fim, o que a gem faz é basicamente "instalar" a aplicação no diretório /opt com as dependências binárias (ruby, rails, bundle e etc) e gems dentro da aplicação.
Também tentamos utilizar o serviço packager.io para a geração dos pacotes. Esse serviço é pago, mas ele oferece um período free de 14 dias. Sobre a sua utilização, ele basicamente cria os pacotes DEB e RPM para as distribuições Ubuntu 14.04, Debian-7 e centOS-6. Porém, ao analisarmos o seu log, percebemos que esse serviço utiliza a gem pkgr para a criação desses pacotes. Logo caímos nos mesmos problemas já citados anteriormente.
De diferente do pkgr esse serviço apenas facilita a instalação dos pacotes:
Sobre o pacote RPM:
[editar | editar código-fonte]Por aprendizado tentamos também criar o pacote RPM da aplicação, mas como estávamos tendo dificuldades no empacotamento DEB, que era o nosso principal objetivo, acabamos abandonando a criação desse pacote. Até o momento em que paramos a criação desse pacote tínhamos conseguido empacotar o Ruby 2.3.1 na distribuição Fedora.