StandaloneApp - Sistema Operacional integrado a uma plataforma de gerenciamento Luis Gustavo Spern Barreto1 , Carlos Vinicius Rasch Alves1 1 Curso de Análise e Desenvolvimento de Sistemas Faculdade de Tecnologia SENAC Pelotas (FATEC) Rua Gonçalves Chaves 602 – 96015560 – Pelotas – RS – Brazil [email protected] [email protected] Abstract. The purpose of this meta-paper is to present the development of StandAloneApp, an GNU/Linux based operating system integrated with a Web management platform, where you can group devices into domains, mass deploy applications and monitoring the real-time status of a device installed with StandaloneApp. Resumo. O objetivo desse artigo é apresentar o desenvolvimento do StandaloneApp, que é um sistema operacional baseado em GNU/Linux integrado a uma plataforma de gerenciamento na Web, onde é possı́vel agrupar dispositivos em domı́nios, automatizar o processo de implantação de aplicativos em larga escala e acompanhar em tempo real o status dos dispositivos instalados com o sistema operacional StandaloneApp. 1. Introdução Na atualidade grande parte dos aplicativos para appliances existentes, são implantadas na versão desktop do sistema operacional Windows, da Microsoft, que é um software proprietário sendo necessário adquirir uma licença de uso [Microsoft 2015a], aumentando assim o custo final de implantação desses tipos de aplicativos. Além disso, as versões para desktop do Microsoft Windows são projetadas para uso em computadores pessoais, contendo diversos aplicativos para uso cotidiano do computador como editor de texto, editor de imagem, reprodutor de música e vı́deo, entre outros [Microsoft 2015b]. Tal gama de aplicativos tem um empacto significativo no uso de recursos computacionais como armazenamento em disco e uso de memória RAM [Microsoft 2015c], aumentando ainda mais o custo final das soluções que utilizam aplicativos para appliances. Dessa forma, foi possı́vel detectar a necessidade do desenvolvimento de um sistema operacional leve, com um ambiente gráfico restrito para a execução de aplicativos para pontos de venda, quiosques e sinalização digital, onde o usuário não consegue acessar funções básicas contidas em um sistema operacional de propósito geral como Windows e distribuições Linux para desktop. Este presente trabalho tem como objetivo desenvolver um sistema operacional baseado em Linux dedicado a execução de aplicativos para appliances além de uma plataforma Web para o gerenciamento remoto de dispositivos instalados com este sistema operacional. 1.1. Sistema Operacional Segundo [SILBERSCHATZ 2000], um sistema operacional é um programa que atua como intermediador entre o usuário e hardware de um dispositivo computacional. O propósito de um sistema operacional é propiciar um ambiente no qual o usuário possa executar programas de forma conveniente e eficiente. Segundo [Tanenbaum and Machado Filho 1995], todos sistemas operacionais possuem conceitos básicos, alguns estão brevemente descritos abaixo: Processo Um processo é basicamente um programa em execução. Processos podem criar um ou mais processos, sendo que todos eles são identificados por número conhecido como PID e podem se comunicar um com o outro. Gerenciamento de Memória É um controle realizado pelo sistema operacional sobre a memória, permitindo que mais de um programa permaneça em memória em segurança. Entrada e Saı́da Os periféricos de um sistema computacional são os dispositivos de entrada e saı́da, geralmente teclado, mouse e monitor. Esses periféricos são gerenciados pelo sistema operacional e permite ao usuário enviar dados (entrada) a um aplicativo e verificar os dados executados (saı́da). Arquivos O sistema operacional é responsável por manter a organização interna dos arquivos em um dispositivo de armazenamento. Em geral, um diretório é utilizado para agrupar arquivos. Cada diretório pode conter vários outros diretórios, e este conjunto de diretórios, organizado de forma hierárquica, recebe o nome de sistema de arquivos. Interpretador de Comandos O interpretador de comandos não é parte do sistema operacional, mas faz uso intensivo de muitos aspectos dele. Segundo [Tanenbaum and Machado Filho 1995], ele é também a interface principal entre o usuário à frente de seu terminal e o sistema operacional, a menos que o usuário esteja usando uma interface gráfica de usuário. 1.2. Linux Segundo [Filho 2007], Linux é somente o kernel e portanto não pode ser considerado um sistema operacional. O que chamamos de sistema operacional Linux chama-se, na verdade, GNU/Linux. O sistema operacional GNU/Linux é o conjunto do kernel Linux com os aplicativos GNU da Free Software Fundation, onde podem ser destacados o compilador, a biblioteca padrão de C e um interpretador de comandos. 1.3. JeOS JeOS (Just Enought Operating System), que em português significa ”somente o necessário do sistema operacional”, é um tipo de sistema operacional que atende somente as necessidades de uma aplicação ou solução em especial. Isso inclui um núcleo, bibliotecas básicas e utilitários necessários o aplicativo da appliance. Dessa forma o sistema operacional tende a ser pequeno, rápido (para iniciar e executar o aplicativo em particular) e potencialmente mais seguro que um sistema operacional para computadores pessoais. 1.3.1. Aplicativos para appliances Um aplicativo para appliance é executado assim que possı́vel pelo sistema operacional e mantido em primeiro plano a fim de estar sempre pronto para interagir com usuárioS através de dispositivos de entrada (mouse, teclado, touchscreen) e exibir informações utilizando um dispositivo de saı́da (monitor). Aplicativos para pontos de vendas, terminais de auto atendimento e sinalizadores digitais são exemplos de aplicativos para appliances. Esse tipo de aplicativo pode ser combinado com um sistema operacional do tipo JeOS (Just Enought Operating System) para otimizar os recursos computacionais disponı́veis em um dispositivo. 2. Desenvolvimento do Sistema Nessa seção serão apresentados os processos de desenvolvimento do sistema, desde as tecnologias utilizadas, métodologias adotadas, modelagem do banco de dados até a especificação do protocolo de comunicação entre os microservices da aplicação. 2.1. Arquitetura do Software Arquitetura do Software. 2.2. Model-View-Controller A Plataforma Web do StandaloneApp adere o modelo de arquitetura MVC (Model-ViewController). 2.3. Microservices Microservices é um estilo de arquitetura de software [Fowler 2014]. Diferentemente de um software monolı́tico onde toda a aplicação é executada em único processo, a arquitetura baseada em Microservices tem como principal caracterı́stica a separação da aplicação em vários processos separados, trocando informações entre sı́ utilizando um mecanismo leve de comunicação entre processos como o Redis. A Figura 1 é possı́vel verificar os diferentes microservices implementados no desenvolvimento do StandaloneApp. O Redis é o centralizador da comunicação entre os microservices de notificação, mensagens e servidor de arquivos. 2.4. Diagrama Entidade Relacionamento O Diagrama de Entidade de Relacionamento (Figura 2) foi gerado com base nas tabelas do banco de dados da plataforma Web do StandaloneApp. Figura 1. Microservices do StandaloneApp 2.5. Tecnologias Utilizadas O StandaloneApp - Sistema Operacional integrado a uma plataforma de gerenciamento foi desenvolvido com diferentes linguagens de programação, com o objetivo de aproveitar os recursos mais interessantes para cada tipo de aplicação envolvida no projeto. 2.5.1. Ruby on Rails Ruby on Rails é um framework open source para desenvolvimento de aplicações Web utilizando a linguagem de programação Ruby. Foi criado por David Heinemeier Hansson em 2004 para ser utilizado no desenvolvimento do gerenciador de projetos Basecamp [Grimmer 2006]. Entretanto em 2005 sua primeira versão foi liberada para a comunidade e desde 2006 quando foi distribuı́do juntamente com o Mac OS X v10.5 ”Leopard”passou a ganhar muita atenção da comunidade de desenvolvimento Web e ser utilizado por grandes empresas como Twitter, Slideshare, Groupon e Locaweb [Caelum 2013]. Aplicações que utilizam o framework Ruby on Rails são necessariamente aderentes ao padrão de arquitetura de software MVC (Model-View-Controller) e compatı́veis com o esquema de roteamento REST (Representational State Transfer). 2.5.2. Node.js Node.js é um interpretador de códigos escritos com a linguagem de programação JavaScript. Diferentemente do uso convencional de JavaScript, onde o código é interpretado no client side (Navegador Web), Node.js interpreta o código JavaScript do backend de uma aplicação Web, ou seja, com Node.js é possı́vel escrever aplicações Web inteiramente em JavaScript [Joyent 2015]. Figura 2. Diagrama Entidade Relacionamento A principal caracterı́stica de Node.js é sua natureza baseada em eventos, que permite que sua API de entrada e saı́da seja assı́ncrona, permitindo assim que uma operação de IO seja executada sem interromper o fluxo de execução do programa. Devido a essa caracterı́stica, Node.js é utilizado em aplicações Web de tempo real que necessitam de grande poder de escalabilidade [Finley 2001]. 2.5.3. Live Build O Live Build é uma framework criado pelo projeto Debian para geração de distribuições baseadas em pacotes binários do Debian GNU/Linux [Project 2013]. Esse framework contém uma série de scripts que utilizam configurações para automatizar e configurar todos os aspectos da construção de uma distribuição derivada de Debian GNU/Linux. 2.6. Qt O Qt é um framework multiplataforma para o desenvolvimento de aplicativos em C++ que podem ser executados em vários tipos de sistemas sem (ou quase nenhuma) modificação no código fonte. Criado originalmente pela Trolltech e depois adquirido pela Nokia, hoje é mantido pela Digia. O framework está disponı́vel em versões comerciais e open source, licenciada sob a licença LGPL. 2.7. Websocket O Websocket é um protocolo para comunicação bidirecional sobre um socket do tipo Transmission Control Protocol (TCP) [Foundation 2011], ou seja, é apenas uma camada sobre um socket TCP, ficando na camada de aplicação a responsabilidade de organizar as informações que são trocadas entre o cliente e o servidor, assim como o HTTP é utilizado sobre o protocolo TCP. Originalmente concebido para comunicação entre o servidor e cliente em aplicações Web, seu uso estendeu-se para as mais variadas aplicações que necessitam de um protocolo para comunicação entre processos. 3. StandaloneApp O desenvolvimento do StandaloneApp foi divido em dois macro projetos, um sistema operacional e uma Plataforma Web de gerenciamento, ambos descritos nesta seção. 3.1. Sistema Operacional Um sistema operacional do tipo JeOS baseado em GNU/Linux foi desenvolvido especificamente para integração com a plataforma Web de gerenciamento. Esse sistema contém o mı́nimo necessário para execução de aplicações Java e HTML, contendo o núcleo do Linux, bibliotecas básicas, servidor gráfico, máquina virtual JAVA e um agente de integração com a plataforma Web que utiliza Websockets para trocar mensagens com a Plataforma Web. Os requisitos mı́nimos necessários para instalação desse sistema operacional são: 512 MB de espaço em disco, 256 MB de memória RAM e processador de 1 Ghz. Possuı́ndo uma imagem de instalação de 345 MB que pode ser inicializada por CD-ROM ou USB, com apenas um clique e poucos minutos de espera o disco é preparado e o sistema de arquivos é copiado para o mesmo. alsa-utils - Utilitários para o sistema de som do Linux network-manager - Gerenciador de conexões de rede parted - Particionador de disco syslinux - Bootloader dosfstools - Ferramentas para manipulação de sistemas de arquivos FAT live-boot - Conjunto de scripts responsáveis por iniciar o sistema pelo CD-ROM e USB live-config - Conjunto de scripts que auxiliam na configuração automatizada do sistema openjdk-7-jre - Máquina virtual java xserver-xorg - Servidor gráfico xserver-xorg-video-vesa - Drivers de vı́deo VESA xserver-xorg-video-intel - Drivers de vı́deo de placas da Intel nodm - Display Manager simples openbox - Gerenciador de janelas Após a instalação e inicialização do sistema operacional é possı́vel parear com a plataforma Web. Na Figura 3 é possı́vel visualizar a tela de pareamento com o PIN code que deve ser inserido na Plataforma Web de gerenciamento. Uma vez que o dispositivo esteja pareado, o mesmo está pronto para executar a aplicação definida através da Plataforma Web de gerenciamento pelo administrador. Figura 3. Tela de pareamento do dispositivo 3.2. Plataforma Web de gerenciamento A plataforma Web de gerenciamento é responsável por permitir o gerenciamento de uma infinidade de dispositivos instalados com o sistema operacional StandaloneApp. Esses dispositivos, uma vez pareados com um domı́nio, podem ser configurados para executarem uma aplicação (em Java ou HTML) enviadas a Plataforma Web. Na Figura 4 é possı́vel verificar a interação do administrador com a Plataforma Web. Figura 4. Diagrama de Caso de Uso. 4. Conclusões Nessa seção serão abordadas as conclusões do projeto, como ”Dificuldades Encontradas”, os ”Projetos Futuros”e as ”Considerações Finais”. 4.1. Dificuldades Encontradas Dentre as dificuldades encontradas neste projeto, a maioria estavam relacionadas a dificuldade em encontrar referências sobre outros sistemas com a mesma finalidade do sistema desenvolvido. Em relação a implementação a maior dificuldade encontrado deu-se em relação a implantação dos microservices envolvidos no sistema desenvolvido. A solução encontrada foi a criação de um container aplicações com todos os microservices, dessa forma ao iniciar o container todos os microservices eram iniciados automaticamente. 4.2. Projetos Futuros Algumas funcionalidades não foram implementadas para esta primeira versão do StandaloneApp, ficando os seguintes itens como proposta para projetos futuros. O StandaloneApp suporta apenas computadores de arquitetura x86 com 32 ou 64 bits, porém uma versão para a plataforma ARM possibilitaria ao sistema atingir um nicho de mercado mais amplo, os dispositivos embarcados como Raspberry Pi e BeagleBone. A implementação do suporte a aplicações conteinerizadas conferirá ao StandaloneApp a capacidade de executar qualquer tipo de aplicativos para Linux, uma vez que um container pode oferecer um conjunto de bibliotecas necessárias para uma aplicação. Na sua primeira versão o suporte a aplicativos no StandaloneApp é limitado a aplicativos escritos em Java e HTML5, duas linguagens muito utilizadas atualmente, entretando o suporte a qualquer tipo de aplicativo seria um diferencial para atrair mais usuários. Referências Caelum (2013). Ruby on rails - desenvolvimento Ágil para web. http://www. caelum.com.br/apostila-ruby-on-rails/ruby-on-rails. Acesso em: 22/06/2015. Filho, J. E. M. (2007). Descobrindo o Linux. Novatec. Finley, K. (2001). Wait, what’s node.js good for again? http://readwrite. com/2011/01/25/wait-whats-nodejs-good-for-aga. Acesso em: 22/06/2015. Foundation, M. (2011). Websockets - mdn. Disponı́vel https://developer.mozilla.org/en/WebSockets. Acesso em: 19/06/2015. em: Fowler, M. (2014). Microservices. http://martinfowler.com/articles/ microservices.html. Acesso em: 22/06/2015. Grimmer, L. (2006). Interview with david heinemeier hansson from ruby on rails. https://web.archive.org/web/20130225091835/ http://dev.mysql.com/tech-resources/interviews/ david-heinemeier-hansson-rails.html. Acesso em: 22/06/2015. Joyent (2015). About node.js. https://nodejs.org/en/about/. Acesso em: 22/06/2015. Microsoft (2015a). Licenciamento por volume da microsoft. http: //www.microsoft.com/pt-br/licenciamento/about-licensing/ windows7.aspx. Acessado em: 01/10/2015. Microsoft (2015b). Recursos do windows 10. https://www.microsoft.com/ pt-br/windows/features. Acessado em: 01/10/2015. Microsoft (2015c). Requisitos de sistema e especifiações do windows 10. https://www.microsoft.com/pt-br/windows/ windows-10-specifications. Acessado em: 01/10/2015. Project, D. L. (2013). Debian live manual. http://live.debian.net/manual/ 3.x/html/live-manual/toc.en.html. Acesso em: 22/06/2015. SILBERSCHATZ, Abraham; GALVIN, P. G. G. (2000). Sistemas Operacionais Conceitos e Aplicações, volume 1. Prentice-Hall. Tanenbaum, A. S. and Machado Filho, N. (1995). Sistemas operacionais modernos, volume 3. Prentice-Hall.