Adopt-a-Hydrant

Fonte: Wikiversidade
Saltar para a navegação Saltar para a pesquisa

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:

package.io, processo de instalação dos pacotes gerados

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.

Referências[editar | editar código-fonte]