Traveling Will
Plano de Gerência de Configuração de Software
editarIntrodução
editarVisão Geral
editarEste documento tem como objetivo definir o planejamento da gerência de configuração de software do jogo Traveling Will.
Propósito
editarApós a aplicação da gerência de configuração de software no projeto supracitado, deve estar concluído:
- O empacotamento do jogo em formato .deb
Escopo
editarTraveling Will é um jogo desenvolvido na disciplina de Introdução a Jogos Eletrônicos no primeiro semestre de 2016, consistindo em um jogo 2D plataforma implementado em C++ utilizando a biblioteca gráfica SDL, na versão 2.0. Na disciplina de Gerência de Configuração de Software, pretende-se gerar um pacote deb do mesmo, ou seja, empacotá-lo.
Repositório
editarO repositório que conterá o trabalho da disciplina pode ser acessado pelo link abaixo:
Atividades
editarAs atividades a serem realizadas durante a aplicação do plano de gerência de configuração de software estão listadas abaixo:
- Atualização da ferramenta de geração de builds do Make para o CMake
- Automatização da configuração do jogo (instalação de dependências e instalação do jogo)
- Configuração do ambiente para empacotamento .deb
- Empacotamento .deb
- Configuração do ambiente para empacotamento .rpm
- Empacotamento .rpm
- Elaborar manual de instalação e configuração do jogo
- Elaborar manual de instruções do jogo
Gerenciamento de Configuração de Software
editarOrganização, Responsabilidades e Interfaces
editarPapel | Responsabilidade | Responsável |
---|---|---|
Desenvolvedor de software | Desenvolver o jogo | Igor Ribeiro Barbosa Duarte, João Paulo Busche da Cruz, João Vitor Araujo Moura, Vitor Barbosa de Araujo |
Gerente de Configuração de Software | Planejar e gerenciar atividades relacionada à gerência de configuração do software escolhido | Victor Matias Navarro, Vitor Barbosa de Araujo |
Auditor de Configuração de Software | Verificar e validar os artefatos produzidos e atividades realizadas durante o projeto | Matheus de Sousa Faria |
Ferramentas, Ambiente e Infraestrutura
Ferramenta | Descrição |
---|---|
Vagrant | Vagrant é um software que faz o interfaceamento com um software de gerência de máquinas virtuais. |
VirtualBox | VirtualBox é um software que faz o gerenciamento de máquinas virtuais e é utilizado em conjunto com o Vagrant. |
Github | Plataforma de sistema de controle de versão utilizada no desenvolvimento do jogo e que será utilizada no empacotamento do mesmo |
Debian (Jessie) | Sistema operacional que será utilizado na máquina virtual de empacotamento. |
Git | Sistema de controle de versão utilizado em conjunto com o Github. |
Cronograma
editarAtividade | Data |
---|---|
Elaboração do Plano de Gerência de Configuração de Software | 24/04/2017 |
Trocar geração de build para o CMake | 05/05/2017 |
Automatizar configuração do jogo | 12/05/2017 |
Configurar ambiente para realizar empacotamento .deb | 19/05/2017 |
Empacotamento .deb | 02/06/2017 |
Configurar ambiente para realizar empacotamento .rpm | 05/06/2017 |
Empacotamento .rpm | 13/06/2017 |
Elaboração do manual de instalação do jogo | 19/06/2017 |
Execução do Projeto
editarManual de Instalação
editarPara instalar o Traveling Will, deve-se seguir os seguintes passos:
- Certifique-se de ter todos os pacotes necessários instalados:
sudo apt-get install libsdl2-2.0-0 libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dev libsdl2-ttf-2.0-0 libsdl2-ttf-dev git libsdl2-mixer-2.0-0 libsdl2-mixer-dev
- Clone o repositório do Traveling Will.
git clone https://github.com/LManaslu/Traveling_Will
- Clone a engine construída na disciplina de IJE.
git clone https://github.com/fgagamedev/ijengine
- Entre na pasta da Engine e compile o projeto.
cd ijengine && make && sudo make install && cd ..
- Crie a pasta "libs" dentro de Traveling Will.
mkdir Traveling_Will/libs
- Copie o arquivo kernel.so.0.1.0 para dentro de libs.
cp ijengine/kernel/sdl2/kernel.so.0.1.0 Traveling_Will/libs
- Compile o projeto do Traveling Will.
cd Traveling_Will && make crun
Progresso do Projeto
editarPara o ponto de controle do dia 29/05, era esperado o cumprimento de 3 tarefas, segundo o cronograma:
- Trocar geração de build pra CMake
- Automatizar configuração do jogo
- Configurar ambiente para realizar empacotamento .deb do jogo
Houveram algumas dificuldades inesperadas com o CMake, de forma que optou-se por já automatizar a configuração do jogo e configurar o ambiente de uma máquina de empacotamento para não atrasar de forma drástica o cronograma.
Imagens do jogo
editarAbaixo (ou neste link) estão contidas algumas imagens do jogo em execução.
Vídeo do jogo
editarUm vídeo demonstrando o gameplay do jogo pode ser visto no seguinte link.
Automatização com CMake
editarPara automatizar a compilação do software do projeto, foi utilizada a ferramenta CMake. O CMake é um gerenciador de Makefiles que gera os mesmos a partir das diretrizes definidas em um arquivo na raíz do projeto com o nome "CMakeLists.txt". Nesse arquivo, pode-se criar várias condições com a sintaxe do programa, dentre as quais pode-se citar:
- Versão do C++
- Flags de compilação
- Links com bibliotecas geradas por outros CMakes
No projeto, utilizou-se três arquivos CMakeLists. O primeiro encontra-se na raíz do projeto, o segundo encontra-se sob a pasta "Engine" e o terceiro sob a pasta SDL2. Os três cumpriram papéis diferentes:
- CMakeLists na raíz do projeto: Tem como principal propósito gerar o executável do jogo com a linkagem da biblioteca gerada pelo CMakeLists da pasta Engine.
- CMakeLists na pasta Engine: Tem como objetivo usar os arquivos da engine para gerar uma biblioteca estática que servirá para a compilação do programa.
- CMakeLists sob a pasta SDL2: Tem como próposito gerar a biblioteca compartilhada kernel.0.1.0.so, necessária para a execução do jogo.
Cada CMakeList é dependente do outro, do primeiro ao último. Por isso, ao rodar "cmake" no principal fará com que todos os arquivos sejam interepretados, na ordem do mais inferior em sistema de arquivo ao mais superior.
Abaixo é possível conferir o CMakeLists na raiz do projeto:
cmake_minimum_required(VERSION 3.0.2)
project(traveling-will LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set (ENGINE_DIR "${PROJECT_SOURCE_DIR}/engine")
set (KERNEL_DIR "${PROJECT_SOURCE_DIR}/engine/kernel/sdl2")
set (INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include")
set (SRC_DIR "${PROJECT_SOURCE_DIR}/src")
set (ASSETS_DIR "${PROJECT_SOURCE_DIR}/res")
file(MAKE_DIRECTORY "libs")
file(GLOB_RECURSE SOURCES "${SRC_DIR}/*.cpp")
include_directories("${INCLUDE_DIR}")
add_subdirectory(${ENGINE_DIR})
include_directories(${ENGINE_INCLUDE_DIR})
add_subdirectory(${KERNEL_DIR})
include_directories(${KERNEL_DIR})
# The CMAKE_DL_LIBS is to prevent C++11 errors
add_executable(traveling-will ${SOURCES})
set_property(TARGET traveling-will PROPERTY CXX_STANDARD 11)
target_link_libraries(traveling-will
engine
kernel
SDL2 SDL2_image SDL2_ttf SDL2_mixer
${CMAKE_DL_LIBS})
add_custom_command(TARGET traveling-will COMMAND ${CMAKE_COMMAND} -E copy traveling-will ${PROJECT_SOURCE_DIR})
install(TARGETS traveling-will DESTINATION "/bin")
install(DIRECTORY res DESTINATION "/opt/traveling-will" DIRECTORY_PERMISSIONS
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_WRITE GROUP_READ GROUP_EXECUTE
WORLD_WRITE WORLD_READ WORLD_EXECUTE
FILE_PERMISSIONS
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_WRITE GROUP_READ GROUP_EXECUTE
WORLD_WRITE WORLD_READ WORLD_EXECUTE
)
install(DIRECTORY libs DESTINATION "/opt/traveling-will" DIRECTORY_PERMISSIONS
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_WRITE GROUP_READ GROUP_EXECUTE
WORLD_WRITE WORLD_READ WORLD_EXECUTE
FILE_PERMISSIONS
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_WRITE GROUP_READ GROUP_EXECUTE
WORLD_WRITE WORLD_READ WORLD_EXECUTE
)
SET(CPACK_GENERATOR "DEB")
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Victor Navarro and Vitor Barbosa")
SET(CPACK_PACKAGE_NAME "traveling-will")
SET(CPACK_PACKAGE_DESCRIPTION "2D musical platform game made with C++ and SDL2")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Traveling Will is a musical platform game which involves time travel. Will is the main characther, who travels to different times, each one with a single musical style. Each level happens in a different time and place, reflecting both in the design and the soundtrack.")
SET(CPACK_PACKAGE_VENDOR "Victor Navarro and Vitor Barbosa")
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md")
SET(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libsdl2-2.0-0, libsdl2-image-2.0-0, libsdl2-mixer-2.0-0, libsdl2-ttf-2.0-0")
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
SET(CPACK_DEBIAN_PACKAGE_SECTION "misc")
SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
# RPM only
SET(CPACK_RPM_PACKAGE_SUMMARY "Traveling Will is a musical platform game which involves time travel. Will is the main characther, who travels to different times, each one with a single musical style. Each level happens in a different time and place, reflecting both in the design and the soundtrack.")
SET(CPACK_RPM_PACKAGE_NAME "traveling-will")
SET(CPACK_RPM_PACKAGE_VERSION "1.0.0")
SET(CPACK_RPM_PACKAGE_RELEASE "1")
SET(CPACK_RPM_PACKAGE_LICENSE "MIT")
SET(CPACK_RPM_PACKAGE_GROUP)
SET(CPACK_RPM_PACKAGE_VENDOR "Victor Navarro and Vitor Barbosa")
SET(CPACK_RPM_PACKAGE_DESCRIPTION "2D musical platform game made with C++ and SDL2")
INCLUDE(CPack)
Neste arquivo são definidos os caminhos para as pastas do projeto, além de incluir os cabeçalhos de engine/ e engine/kernel/sdl2/ na raíz do projeto. Após isso é gerado o executável do jogo com suas devidas bibliotecas (tanto da engine quanto da própria SDL). Por fim, são realizados os comandos INSTALL (para copiar o executável e os diretórios necessários para a raíz da máquina no qual o jogo será instalado) e são definidas as variáveis para a utilização do CPack, que será explicado mais adiante.
Construção de Pacotes
editarSem CPack
editar.deb
editarPara a construção do pacote .deb sem a utilização do CPack, o processo consistiu em:
- Criar um diretório debian
- Sob debian, criar um diretório DEBIAN.
- Sob debian, criar um diretório opt
- Sob debian, criar um diretório usr
- Sob usr, criar um diretório bin
- Sob opt, criar um diretório traveling_will
- Sob o diretório traveling_will, criar um diretório libs e um diretório res
É importante notar que as pastas criadas fora do diretório DEBIAN representam o caminho onde cada conteúdo sob elas estará no computador que tiver o pacote instalado. Dessa forma, se existe um executável sob usr/bin/ acima, quer dizer que o executável do jogo estará em /usr/bin/ no computador que instalar o pacote. Tendo criado essa estrutura de pastas, pode-se prencher os conteúdos:
- Em res, fica todos os arquivos de imagens e sons do jogo. É o assets de um projeto comum.
- Em libs, fica o arquivo de biblioteca dinâmica kernel.0.1.0.so procurado pelo jogo para sua execução.
- Em bin, fica o executável do jogo gerado pelo CMake.
- Em DEBIAN, ficam os arquivos control e copyright necessários para descrever informações do pacote.
O conteúdo do arquivo control é:
Package: travelingwill
Version: 1.0-0
Section: base
Priority: optional
Architecture: amd64
Dependencie: libsdl2-2.0-0, libsdl2-image-2.0-0, libsdl2-ttf-2.0-0, libsdl2-mixer-2.0-0
Maintainer: Victor Navarro and Vitor Barbosa
Description: Game developed in IJE
O conteúdo do arquivo copyright está descrito na licença do projeto no Github. Por fim, para gerar o pacote deve-se apenas rodar o seguinte comando sob a pasta debian:
dpkg-deb --build . ..
Dessa forma, o pacote será gerado na pasta imediatamente anterior à debian com as informações descritas por todos os arquivos dentro de DEBIAN.
Com CPack
editarO CMakeLists configurado para a geração de pacotes Debian e RPM se encontra neste link
Independente do sistema para o qual será gerado o pacote, para executar o CPack são necessários os seguinte passos:
# Na raíz do projeto
mkdir build
cd build
# Compilar o projeto
cmake ..
# Gerar o pacote
cpack ..
.deb
editarPara a construção do pacote .deb do jogo, foi utilizada a ferramenta CPack, que vem sendo distribuída juntamente com o CMake desde a versão 2.4.2. Ela contém uma série de abstrações para a criação de pacotes em diversas arquiteturas (Debian, RedHat, MacOS, Windows, etc.)
add_executable(traveling-will ${SOURCES})
set_property(TARGET traveling-will PROPERTY CXX_STANDARD 11)
target_link_libraries(traveling-will
engine
kernel
SDL2 SDL2_image SDL2_ttf SDL2_mixer
${CMAKE_DL_LIBS})
install(TARGETS traveling-will DESTINATION "/bin")
install(DIRECTORY res DESTINATION "/opt/traveling-will" DIRECTORY_PERMISSIONS
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_WRITE GROUP_READ GROUP_EXECUTE
WORLD_WRITE WORLD_READ WORLD_EXECUTE
FILE_PERMISSIONS
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_WRITE GROUP_READ GROUP_EXECUTE
WORLD_WRITE WORLD_READ WORLD_EXECUTE
)
install(DIRECTORY libs DESTINATION "/opt/traveling-will" DIRECTORY_PERMISSIONS
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_WRITE GROUP_READ GROUP_EXECUTE
WORLD_WRITE WORLD_READ WORLD_EXECUTE
FILE_PERMISSIONS
OWNER_WRITE OWNER_READ OWNER_EXECUTE
GROUP_WRITE GROUP_READ GROUP_EXECUTE
WORLD_WRITE WORLD_READ WORLD_EXECUTE
)
SET(CPACK_GENERATOR "DEB")
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Victor Navarro and Vitor Barbosa")
SET(CPACK_PACKAGE_NAME "traveling-will")
SET(CPACK_PACKAGE_DESCRIPTION "2D musical platform game made with C++ and SDL2")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Traveling Will is a musical platform game which involves time travel. Will is the main characther, who travels to different times, each one with a single musical style. Each level happens in a different time and place, reflecting both in the design and the soundtrack.")
SET(CPACK_PACKAGE_VENDOR "Victor Navarro and Vitor Barbosa")
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md")
SET(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libsdl2-2.0-0, libsdl2-image-2.0-0, libsdl2-mixer-2.0-0, libsdl2-ttf-2.0-0")
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
SET(CPACK_DEBIAN_PACKAGE_SECTION "misc")
SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
# RPM only
SET(CPACK_RPM_PACKAGE_SUMMARY "Traveling Will is a musical platform game which involves time travel. Will is the main characther, who travels to different times, each one with a single musical style. Each level happens in a different time and place, reflecting both in the design and the soundtrack.")
SET(CPACK_RPM_PACKAGE_NAME "traveling-will")
SET(CPACK_RPM_PACKAGE_VERSION "1.0.0")
SET(CPACK_RPM_PACKAGE_RELEASE "1")
SET(CPACK_RPM_PACKAGE_LICENSE "MIT")
SET(CPACK_RPM_PACKAGE_GROUP)
SET(CPACK_RPM_PACKAGE_VENDOR "Victor Navarro and Vitor Barbosa")
SET(CPACK_RPM_PACKAGE_DESCRIPTION "2D musical platform game made with C++ and SDL2")
INCLUDE(CPack)
Para a construção do pacote .deb são necessários os seguintes passos:
1 - Definir o gerador de pacotes a ser utilizado (no caso, SET(CPACK_GENERATOR "DEB"))
2 - Definir as variáveis de ambiente que serão utilizadas para a construção do pacote. Dentre essas variáveis, podem ser citadas: Nome do pacote, versão do pacote, descrição breve, descrição completa, dependências, prioridade, seção, etc.
3 - Utilizar o comando INSTALL para, quando o pacote for ser gerado, o CMake copiar os arquivos especificados para as pastas definidas. No projeto, são instalados na máquina os seguintes arquivos e diretórios:
- traveling-will (binário, instalado em /bin)
- res/ (pasta que contém músicas, imagens e arquivos de configuração do jogo, salva em opt/traveling-will)
- libs/ (pasta que contém a biblioteca da engine utilizada no projeto, salva em opt/traveling-will)
4 - Por fim, deve-se incluir a ferramenta CPack, por meio do comando INCLUDE(CPack)
.rpm
editarPara o empacotamento RPM são necessário mais dois passos:
1 - Mudar o gerador de pacotes para RPM
2 - Adicionar variáveis de ambiente específicas da construção de pacotes RPM
Após isso, será gerado o pacote RPM no local onde foi executado o comando.
Para que, ao criar pacotes para diferentes sistemas, não seja necessário ficar modificando o código toda vez, pode-se optar por fazer o seguinte:
- Ao executar o comando cpack pode-se passar uma flag -G e o nome do gerador de pacotes. Por exemplo:
# Criar pacote Debian cpack -G DEB # Criar pacote RPM cpack -G RPM
Referências Bibliográficas
editarTraveling Will. Disponível em: <https://github.com/LManaslu/Traveling_Will/>
IJengine. Disponível em: <https://github.com/fgagamedev/ijengine>