# Mapas Observatório LGBT
## Introdução
#### Visão Geral

O Observatório da Política Nacional de Saúde Integral LGBT (Observatório da Saúde LGBT) tem por finalidade gerar informações e conhecimento sobre as principais características que constituem a realidade da Política Nacional de Saúde Integral da População LGBT no âmbito do SUS, constituindo um banco de dados que é ampliado e qualificado gradativamente.
O mapa das redes foi desenvolvido pela equipe do Observatório da Saúde LGBT no intuito de mapear as redes de ativismo, ação, pesquisa, publicação, acesso e acolhimento da população LGBT no serviço de saúde. A metodologia proposta é de que a rede seja auto referenciada, e que as pessoas e instituições apoiem a sua construção com questões referentes aos diversos temas pertinentes a garantia e a expansão de direitos.

#### Propósito

O Plano de Gerenciamento de Configuração de Software tem como finalidade descrever as atividades que serão executadas durante o projeto no que tange o controle de configuração e mudanças do Mapa das Redes do Observatório da Saúde LGBT. O plano apresenta o cronograma de atividades, as responsabilidades dos membros do projeto e os recursos necessários para a execução do mesmo.

#### Escopo

O projeto foi desenvolvido em Ruby on Rails e, atualmente, está disponível em um repositório no GitHub com licença GPL3. As melhorias propostas para serem desenvolvidas no projeto são:
* Integração Contínua com GitLab CI
* Ambiente de Desenvolvimento com Vagrant
* Empacotamento .deb

#### Repositório Git

Mapa das Redes

## Gerência de Configuração de Software
#### Organização e Responsabilidades

| Papel | Responsabilidade | Responsável |
| Gestor de configuração do projeto | Acompanha as alterações dos itens de configuração. | Alex Alves, Vanessa Soares |
| Gestor de ferramentas de gerência de configuração de software | Mantém a infraestrutura necessária para a gerência de configuração. | Alex Alves, Vanessa Soares |
| Gestor de configuração de software | Aprova e gerencia as atividades. | Alex Alves, Vanessa Soares |
| Auditor de configuração de software | Realiza as auditorias. | Alex Alves, Vanessa Soares |
| Desenvolvedores | Desenvolvem os itens de configuração que serão gerenciados. | Alex Alves, Vanessa Soares |

#### Ferramentas, Ambiente e Infraestrutura

| Ferramenta | Função |
| Vagrant | Criar e configurar ambientes de desenvolvimento leves, reprodutíveis e portateis |
| VirtualBox | Criação de máquinas virtuais |
| Gitlab CI | Serviço de integração contínua |

## Cronograma

| Data | Atividade |
| 30/09 | Planejamento do Projeto |
| 04/10 | Pesquisa e Estudo Integração Contínua |
| 11/10 | Configurar Integração Contínua |
| 14/10 | Pesquisa e estudo Vangrant |
| 21/10 | Configurar Ambiente de Desenvolvimento (Vagrant) |
| 31/10 | Andamento do Projeto |
| 30/10 | Pesquisa e estudo Empacotamento .deb |
| 16/11 | Empacotamento .deb |
| 21/11 | Apresentação Final |

## Relatório do Projeto
### Integração Contínua

Para implementação da integração contínua optou-se pela adoção do Gitlab CI, serviço de integração contínua oferecido pelo próprio Gitlab, gerenciador de repositório onde o código do proejto está hospedado.
A configuração do serviço é simples e exige apenas a adição do arquivo .gitlab-ci.yml no diretório raiz do repositório então cada solicitação de merge ou push dispara seu pipeline CI. O arquivo .gitlab-ci.yml informa ao GitLab runner o que fazer. Por padrão, ele executa um pipeline com três etapas: create, test e deploy. Você não precisa usar todos os três estágios já que as etapas não implementadas são ignoradas.
Para o este projeto o arquivo foi configurao .gitlab-ci.yml da seguinte forma:

### Vagrant

Vagrant é uma ferramenta para construção de ambientes de desenvolvimento completos, com um fluxo de trabalho de fácil utilização e foco na automatização o Vagrant reduz o tempo de configuração do ambiente de desenvolvimento e resolve problemas de diferença de ambientes e máquinas para os desenvolvedores.
A instalação, configuração e o uso do Vagrant são simples.
Para instalação do Vagrant no Ubuntu, basta executar o comando:
* $ sudo apt-get install vagrant
Após a instalação da ferramenta, deve-se navegar até o diretório do projeto e executar o comando:
Esse comando irá inicializar o Vagrant para o projeto, criando o arquivo de configuração Vagrantfile. É nesse arquivo onde se define detalhes da configuração da máquina virtual que será criada. O Vagrantfile criado para o projeto ficou com a seguinte estrutura:
Nesse arquivo estão sendo feitas as seguintes definições:
* Linha 3 define que o sistema a ser instalado na máquina virtual é o Ubuntu (Trusty) de 64 bits. O próprio Vagrant se encarrega de baixar a imagem e instalar o sistema definido.
* Linha 16 define o tipo de provisionamento. Neste caso o provisionamento irá utilizar o SHELL.
* Nas linhas 11 - 14 são os arquivos responsáveis pelos comando shell de instalação do ruby, rvm e do postgresql. Os scripts são apresentados em seguida
install-rvm.sh
install-ruby.sh
install-postgresql.sh
Após definias essas configurações, o Vagrant está pronto para ser executado. Ao rodar o comando:
Esse comando irá criar toda a máquina virtual. Caso seja sua primeira execução, ele irá, inclusive, baixar a imagem do sistema. E também irá rodar o provisionamento, deixando o sistema totalmente configurado.
Após a finalização do Vagrant Up, a máquina virtual já está inicializada, então deve-se rodar o comando:
Esse comando irá iniciar o shell da máquina virtual, e todos os comandos executados a partir desse momento serão feitos diretamente na máquina virtual.
Para o projeto, a pasta /vagrant da máquina virtual é uma pasta compartilhada com o sistema original, no caso, é a pasta raiz do projeto.

### Empacotamento .deb

O empacotamento .deb e a assinatura de pacote são atividades simples de serem executadas. Utilizando os pacotes rng-tools, dh-make, build-essential e devscripts.
Antes de começar o processo do empacotamento, foi criada uma chave para assinatura do pacote utilizando o rng-tools:
Após a instalação do programa, deve ser executado o comando:
E então, para gerar a chave:
Nesse passo serão solicitadas ações para criação e configuração da chave.
Após a chave criada, deve-se começar o processo de empacotamento .deb.
O primeiro passo é criar um tarball da pasta do projeto, com o nome formatado no padrão <NOME DO PROJETO>_<VERSÃO>.orig.tar.gz. No momento da criação do pacote, o dh-make irá buscar por esse padrão de nomeclatura na pasta superior à pasta do projeto:
Então, deve-se entrar dentro da pasta do projeto e executar:
Esse comando irá criar a pasta debian dentro do diretório do projeto. Neste passo, todos os arquivos dentro dessa pasta com a extensão .ex podem ser apagados pois são apenas de exemplo.
O arquivo debian/control deve ser editado para preenchimento dos dados do projeto, lembrando de preencher as dependências do mesmo.
E o arquivo debian/changelog deve ser preenchido com o nome e email exatamente iguais aos configurados no momento da criação da chave de assinatura:
Antes da criação do pacote .deb, deve certificar que os pacotes de dependência do projeto estão instalados:
E, para finalizar, basta executar o seguinte comando, que irá ler os arquivos de configuração e gerar o .deb: