Traveling Will

Fonte: Wikiversidade

Plano de Gerência de Configuração de Software[editar | editar código-fonte]

Introdução[editar | editar código-fonte]

Visão Geral[editar | editar código-fonte]

Este documento tem como objetivo definir o planejamento da gerência de configuração de software do jogo Traveling Will.

Propósito[editar | editar código-fonte]

Apó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[editar | editar código-fonte]

Traveling 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[editar | editar código-fonte]

O repositório que conterá o trabalho da disciplina pode ser acessado pelo link abaixo:

Atividades[editar | editar código-fonte]

As 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[editar | editar código-fonte]

Organização, Responsabilidades e Interfaces[editar | editar código-fonte]

Papel 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[editar | editar código-fonte]

Atividade 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[editar | editar código-fonte]

Manual de Instalação[editar | editar código-fonte]

Para instalar o Traveling Will, deve-se seguir os seguintes passos:

  1. Certifique-se de ter todos os pacotes necessários instalados:
    1. 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
      
  2. Clone o repositório do Traveling Will.
    1. git clone https://github.com/LManaslu/Traveling_Will
      
  3. Clone a engine construída na disciplina de IJE.
    1. git clone https://github.com/fgagamedev/ijengine
      
  4. Entre na pasta da Engine e compile o projeto.
    1. cd ijengine && make && sudo make install && cd ..
      
  5. Crie a pasta "libs" dentro de Traveling Will.
    1. mkdir Traveling_Will/libs
      
  6. Copie o arquivo kernel.so.0.1.0 para dentro de libs.
    1. cp ijengine/kernel/sdl2/kernel.so.0.1.0 Traveling_Will/libs
      
  7. Compile o projeto do Traveling Will.
    1. cd Traveling_Will && make crun
      

Progresso do Projeto[editar | editar código-fonte]

Para 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[editar | editar código-fonte]

Abaixo (ou neste link) estão contidas algumas imagens do jogo em execução.

Main menu of Traveling Will
Cutscene of Traveling Will
Level selector
Traveling Will Tutorial
Second level

Vídeo do jogo[editar | editar código-fonte]

Um vídeo demonstrando o gameplay do jogo pode ser visto no seguinte link.

Automatização com CMake[editar | editar código-fonte]

Para 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[editar | editar código-fonte]

Sem CPack[editar | editar código-fonte]

.deb[editar | editar código-fonte]

Para a construção do pacote .deb sem a utilização do CPack, o processo consistiu em:

  1. Criar um diretório debian
  2. Sob debian, criar um diretório DEBIAN.
  3. Sob debian, criar um diretório opt
  4. Sob debian, criar um diretório usr
  5. Sob usr, criar um diretório bin
  6. Sob opt, criar um diretório traveling_will
  7. 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[editar | editar código-fonte]

O 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[editar | editar código-fonte]

Para 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[editar | editar código-fonte]

Para 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[editar | editar código-fonte]

Traveling Will. Disponível em: <https://github.com/LManaslu/Traveling_Will/>

IJengine. Disponível em: <https://github.com/fgagamedev/ijengine>