StandaloneApp - Sistema Operacional integrado a uma plataforma

Propaganda
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.
Download