Mudanças entre as edições de "Laboratório de Baixo Custo com Contêineres"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(36 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
=Estrutura=
+
=Objetivo=
[[File:Servidor-labalu.jpg|500px|thumb|Servidor físico]]
+
 
*'''Local:''' LabIC
+
O objetivo é prover uma estrutura que fornece um ambiente de trabalho remoto completo afim de permitir a utilização de dispositivos de baixo custo na ponta, diminuindo os custos com equipamentos, no caso, computadores, além de flexibilizar a gerência de toda a estrutura tirando vantagem do uso de contêineres. Dessa forma, tendo o Docker como gestor, permite-se a replicação dos ambientes de trabalho para cada dispositivo, além de cada cliente ter um ambiente isolado.<br />
*'''Máquina física (Dell Optiplex 755):'''
+
Este projeto visa eliminar algumas limitações do [https://wiki.sj.ifsc.edu.br/index.php/Uso_de_thin_clients_e_LTSP_como_solu%C3%A7%C3%A3o_para_economia_de_recursos_e_reutiliza%C3%A7%C3%A3o_de_hardwares_obsoletos modelo anterior] cuja impelementação foi o ponta pé inicial para o desenvolvimento dessa segunda versão. Uma das limitações a serem diminuídas é o uso de dispositivos USB, como SDR, FPGAs, Arduíno, Pen Drives, etc. <br />
**'''Memória RAM:''' 8 GB;
+
Este projeto é um segmento do projeto [https://wiki.sj.ifsc.edu.br/index.php/Nuvem_Computacional_para_a_%C3%81rea_de_Telecomunica%C3%A7%C3%B5es Nuvem Computacional para a Área de Telecomunicações], o qual foi utilizada a estrutura em contêineres para gestão dos ambientes acessados pelos alunos. Neste segmento de projeto, está sendo utilizando como sistema operacional de gerência o [http://rancher.com/rancher-os/ RancherOS], que é um sistema operacional extremamente leve e toda sua estrutura é feita em contêineres, o que o torna muito modular e de tamanho diminuto, pois possui apenas Docker como o gestor do sistema operacional.
**'''CPU:''' Intel Dual Core, 2,66 GHz, 2 núcleos;
 
**'''Armazenamento:''' Disco rígido Samsung de 7200 RPM com capacidade para 250 GB;
 
*'''Sistema Operacional de gerência (instalado em baremetal):''' RancherOS v1.1.3;
 
**'''Versão da distribuição:''' v1.1.3;
 
**'''Nome da distribuição:''' RancherOS;
 
**'''Versão do kernel Linux:''' 4.9.75-rancher
 
*Contêineres Docker virtualizando as seguintes aplicações:
 
**[http://191.36.9.253:5000 Interface web de gerência Rancher Server]
 
**[http://191.36.9.253:9000 Interface web de gerência para o Docker]
 
**Contêiner baseado em Debian Stretch que provê uma interface de área de trabalho completa a fim de promover a criação de um laboratório de informática de baixo custo com o auxílio de contêineres.  
 
**Contêineres relacionados ao Rancher Server;
 
*Contêineres do System-Docker executando os seguintes serviços:
 
**Console Debian do RancherOS;
 
**Crontab do RancherOS;
 
**Configuração de rede do RancherOS;
 
**Configuração de dispositivos do RancherOS;
 
**Configuração de horário do RancherOS;
 
**Contêiner contendo o Docker a nível de usuário;
 
  
----
+
=Servidores=
[[File:Servidor-labalu.jpg|500px|thumb|Servidor físico]]
+
[[File:IMG 20190215 111651038.jpg|200px|thumb|Servidor físico]]
*'''Local:''' Laboratório de Alunos
+
*'''Local:''' CTIC (Coordenadoria de Tecnologia da Informação e Comunicação);
*'''Máquina física (Dell Optiplex 990):'''
+
*'''Atende:''' Laboratório de Alunos, Monitoria de Alunos, Laboratório Interativo;
**'''Memória RAM:''' 8 GB;
+
*'''Máquina física (HP Z220 Workstation):'''
**'''CPU:''' Intel(R) Core(TM) i5-2400, 3,1 GHz, 4 núcleos;
+
**'''Memória RAM:''' 32 GB;
 +
**'''Área de troca:''' 0 B;
 +
**'''CPU:''' Intel(R) Xeon(R) CPU E3-1225 V2 @ 3.20GHz, 4 núcleos;
 
**'''Armazenamento:''' Disco rígido Samsung de 7200 RPM com capacidade para 320 GB;
 
**'''Armazenamento:''' Disco rígido Samsung de 7200 RPM com capacidade para 320 GB;
*'''Sistema Operacional de gerência (instalado em baremetal):''' RancherOS v1.1.3;
+
*'''Sistema Operacional de gerência (instalado em baremetal):''' RancherOS v1.5.1;
**'''Versão da distribuição:''' v1.1.3;
+
**'''Versão da distribuição:''' v1.5.1;
 
**'''Nome da distribuição:''' RancherOS;
 
**'''Nome da distribuição:''' RancherOS;
**'''Versão do kernel Linux:''' 4.9.75-rancher
+
**'''Versão do kernel Linux:''' 4.14.85-rancher
 
*Contêineres Docker virtualizando as seguintes aplicações:
 
*Contêineres Docker virtualizando as seguintes aplicações:
**Contêiner baseado em Debian Stretch que provê uma interface de área de trabalho completa a fim de promover a criação de um laboratório de informática de baixo custo com o auxílio de contêineres.  
+
**Contêiner ''labalu-cli0-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
**Contêineres relacionados ao Rancher Server;
+
**Contêiner ''labalu-cli1-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labalu-cli2-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labalu-cli3-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labalu-cli4-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labalu-cli5-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 6.5 GB de memória RAM.'''
 +
**Contêiner ''labalu-cli6-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 6.5 GB de memória RAM.'''
 +
**Contêiner ''labint-cli0-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli1-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli2-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli3-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli4-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli5-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli6-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli7-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli8-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli9-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli10-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli11-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 +
**Contêiner ''labint-cli12-aluno'' baseado em Debian Stretch que provê a interface de área de trabalho. '''Este contêiner pode alocar até 3 GB de memória RAM.'''
 
*Contêineres do System-Docker executando os seguintes serviços:
 
*Contêineres do System-Docker executando os seguintes serviços:
**Console Debian do RancherOS;
+
**Console Debian do RancherOS → Imagem jpmsb/os-debian-extrasconsole:v1.5.1;
 
**Crontab do RancherOS;
 
**Crontab do RancherOS;
 
**Configuração de rede do RancherOS;
 
**Configuração de rede do RancherOS;
Linha 45: Linha 47:
 
**Contêiner contendo o Docker a nível de usuário;
 
**Contêiner contendo o Docker a nível de usuário;
  
 +
= Preparação do servidor=
 
== O RancherOS ==
 
== O RancherOS ==
 
[[File:RancherOS.png|500px|thumb|Logomarca do RancherOS]]
 
[[File:RancherOS.png|500px|thumb|Logomarca do RancherOS]]
Linha 106: Linha 109:
 
[[File:Rancheros3-1.png|600px]]
 
[[File:Rancheros3-1.png|600px]]
  
Neste momento, o sistema é sendo executado em memória RAM, e tudo que for feito nele será perdido após o reinício da máquina. No entanto, é possível utilizar o sistema sempre a partir da ISO e ainda assim salvar os dados. Para que as alterações feitas não se percam, basta criar uma partição em um armazenamento local como o nome de '''RANCHER_STATE''', que salvará todas as modificações feitas no sistema. Isso pode ser interessante para salvar um pouco mais de espaço em disco e também útil em casos de atualizações. <br />
+
Neste momento, o sistema está sendo executado em memória RAM, e tudo que for feito nele será perdido após o reinício da máquina. No entanto, é possível utilizar o sistema sempre a partir da ISO e ainda assim salvar os dados. Para que as alterações feitas não se percam, basta criar uma partição em um armazenamento local com o rótulo '''RANCHER_STATE''', que salvará todas as modificações feitas no sistema. Isso pode ser interessante para salvar um pouco mais de espaço em disco e também útil em casos de atualizações. <br />
 
Digite ''sudo su'' para virar ''root'':
 
Digite ''sudo su'' para virar ''root'':
  
Linha 149: Linha 152:
 
[[File:Rancheros12.png|600px]]
 
[[File:Rancheros12.png|600px]]
  
Após o reinício do sistema, o menu LILO aparecerá, sendo este o mesmo presente na mídia de instalação.
+
Após o reinício do sistema, o menu SYSLINUX aparecerá, sendo este o mesmo presente na mídia de instalação.
  
 
[[File:Rancheros13.png|600px]]
 
[[File:Rancheros13.png|600px]]
Linha 234: Linha 237:
 
===== Configuração de interface pelo endereço MAC do dispositivo =====
 
===== Configuração de interface pelo endereço MAC do dispositivo =====
  
É possível configurar a interface de rede pelo endereço MAC da mesma, assim, caso haja mais de uma placa de rede, evita-se que uma eventual troca de nomes, cause problemas. Abaixo um exemplo de configuração do dispositivo de rede através do endereço MAC da mesma:
+
É possível configurar a interface de rede pelo endereço MAC da mesma, assim, caso haja mais de uma placa de rede, evita-se que uma eventual troca de nomes cause problemas. Abaixo um exemplo de configuração do dispositivo de rede através do endereço MAC da mesma:
  
 
<syntaxhighlight lang=bash>
 
<syntaxhighlight lang=bash>
Linha 276: Linha 279:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Instalação do GRUB2===
+
==== Habilitar módulos extras do kernel ====
  
Por padrão, o RancherOS utiliza o [http://www.syslinux.org/wiki/index.php?title=The_Syslinux_Project SYSLINUX] como gerenciador de inicilização. Optou-se por utilizar o [https://pt.wikipedia.org/wiki/GNU_GRUB GRUB 2] devido à sua flexibilidade e possibilidades de proteção com usuário e senha, impedindo, assim, vandalismos por parte dos usuários, bem como o acesso ao sistema através do ''autologin''. <br />
+
Uma das vantagens do RancherOS é que o mesmo possui um vasto conjunto de drivers e módulos prontos para serem ativos. Todo este conjunto fica dentro de um contêiner. Para habilitar os módulos extras, basta digitar os comandos abaixo:
A instalação do GRUB2 é feita através da aplicação ''grub-install'', geralmente presente nos sistemas operacionais com o referido gerenciador de inicialização.
 
  
=Objetivo=
+
<syntaxhighlight lang=bash>
  
O objetivo é prover uma estrutura que fornece um ambiente de trabalho remoto completo afim de permitir a utilização de dispositivos de baixo custo na ponta, diminuindo os custos com equipamentos, no caso, computadores, além de flexibilizar a gerência de toda a estrutura tirando vantagem do uso de contêineres. Dessa forma, tendo o Docker como gestor ou o Kubernetes para o caso de estrutura em ''cluster'', permite a replicação dos ambientes de trabalho para dispositivo.<br />
+
# ros service enable kernel-extras
Este projeto é um segmento do projeto [https://wiki.sj.ifsc.edu.br/index.php/Nuvem_Computacional_para_a_%C3%81rea_de_Telecomunica%C3%A7%C3%B5es Nuvem Computacional para a Área de Telecomunicações], o qual foi utilizada a estrutura em contêineres para gestão dos ambientes acessados pelos alunos. Neste segmento de projeto, está sendo utilizando como sistema operacional de gerência o [http://rancher.com/rancher-os/ RancherOS], que é um sistema operacional extremamente leve e toda sua estrutura é feita em contêineres, o que o torna muito modular e de tamanho diminuto, pois possui apenas Docker como o gestor do sistema operacional.
 
  
=Script para o Cliente=
+
</syntaxhighlight>
  
'''Atenção: O script abaixo está sujeito à mudanças.''' <br />
+
Notar-se-á que uma imagem de contêiner será baixada. Para pô-la em execução basta executar o seguinte comando:
Copie e cole o script abaixo em um arquivo. Devem ser providas 6 informações. A sintaxe de uso é:
 
  
<blockquote style="color: black; border: solid thin gray;">
+
<syntaxhighlight lang=bash>
./script-cliente "nomedeusuario" "Nome Completo" "senhatemporária" "curso" "ip_do_servidor" "porta_do_contêiner"
 
</blockquote>
 
  
Por exemplo:
+
# ros service up kernel-extras
  
<blockquote style="color: black; border: solid thin gray;">
+
</syntaxhighlight>
./script-cliente "jose.mf" "José Marfino Ferreira" "minhasenhatemporaria" "Engenharia de Telecomunicações" "191.36.9.253" "700"
 
</blockquote>
 
  
<syntaxhighlight lang=bash>
+
O serviço é ativo. Basta reiniciar o sistema que todos os módulos já estarão pronto para uso. É possível utilizar recursos como USBIP, por exemplo, além de outros dispositivos presentes na máquina que antes não funcionavam por causa da falta de ''drivers''.
  
#!/bin/bash
+
===Instalação do GRUB 2===
  
nomedeusuario=$1
+
Por padrão, o RancherOS utiliza o [http://www.syslinux.org/wiki/index.php?title=The_Syslinux_Project SYSLINUX] como gerenciador de inicilização. Optou-se por utilizar o [https://pt.wikipedia.org/wiki/GNU_GRUB GRUB 2] devido à sua flexibilidade e possibilidades de proteção com usuário e senha, impedindo, assim, vandalismos por parte dos usuários, bem como o acesso ao sistema através do ''autologin''. <br />
nomecompleto=$2
+
A instalação do GRUB 2 é feita através da aplicação ''grub-install'', geralmente presente nos sistemas operacionais com o referido gerenciador de inicialização. <br />
senha=$3
+
Para realizar a instalação a partir do próprio RancherOS, basta criar um contêiner usando o ''system-docker'':
curso=$4
 
servidor=$5
 
porta=$6
 
  
# Cria o usuário no arquivo passwd
+
<syntaxhighlight lang=bash>
echo "Criando usuario $nomedeusuario para o aluno $nomecompleto"
 
useradd -m -d /home/$nomedeusuario -s /bin/bash -c "$nomecompleto,$curso" $nomedeusuario
 
  
# Define a senha temporária
+
# system-docker run -it --name boot --privileged -v /boot:/boot -v /dev:/dev debian:stretch
echo "Usando a matricula $matricula como senha do usuario $nomedeusuario."
 
echo "$nomedeusuario:$senha" |chpasswd
 
  
echo "Conta $nomedeusuario do usuario $nomecompleto criada"
+
</syntaxhighlight>
  
# Cria o arquivo .xinitrc com o seguinte conteúdo:
+
Dentro do contêiner, basta instalar o pacote ''grub-pc'' e um editor de texto (nano, vim, pico):
echo "Criando arquvo .xinitrc..."
 
echo 'exec x2goclient --hide --sessionid=20170929183410524' > /home/$nomedeusuario/.xinitrc
 
  
# Muda a permissão do arquivo .xinitrc
+
<syntaxhighlight lang=bash>
echo "Mudando permissão do arquivo .xinitrc..."
 
chown root:root /home/$nomedeusuario/.xinitrc
 
chmod 444 /home/$nomedeusuario/.xinitrc
 
  
# Faz o ponto de montagem do diretório /media/nomedeusuario
+
root@iddoconteiner# apt update && apt -y -q install grub-pc nano
  
# Adiciona o comando startx no arquivo .profile para que o comando que invoca
+
</syntaxhighlight>
# o X2Go seja executado assim que o usuário fizer login
 
echo "Adicionando o comando startx ao arquivo .profile..."
 
echo "startx" >> /home/$nomedeusuario/.profile
 
  
# Cria a pasta .x2goclient
+
=Preparação do cliente=
mkdir /home/$nomedeusuario/.x2goclient
 
  
# Cria pasta .ssh
+
==O sistema operacional==
mkdir /home/$nomedeusuario/.ssh
+
O sistema operacional escolhido foi o Debian, sendo a versão atual usada a 9 (Stretch), que necessita ser atualizado para a versão mais recente, a 10 (Buster).
  
# Copia um arquivo modelo de sessão do X2Go para .x2goclient
+
=Repositórios=
cp -r /opt/sessions /home/$nomedeusuario/.x2goclient/
 
  
# Adiciona as informações faltantes ao arquivo sessions
+
== Docker Hub ==
echo "Adicionando o servidor..."
 
echo "host=$servidor" >> /home/$nomedeusuario/.x2goclient/sessions
 
echo "Adicionando usuário..."
 
echo "key=/home/$nomedeusuario/.ssh/$nomedeusuario" >> /home/$nomedeusuario/.x2goclient/sessions
 
echo "Adicionando a porta SSH..."
 
echo "sshport=$porta" >> /home/$nomedeusuario/.x2goclient/sessions
 
  
# Gera as chaves públicas e privadas
+
* [https://hub.docker.com/r/jpmsb/gui/ Aqui] encontra-se o repositório principal com a imagem para a criação do contêiner. A interface gráfica é o Mate.
echo "Gerando chaves SSH..."
+
* [https://hub.docker.com/r/jpmsb/gui-lxde/ Aqui] encontra-se o repositório com a imagem de interface gráfica LXDE com o tema do Raspberry Pi.
ssh-keygen -t rsa -N "" -f /home/$nomedeusuario/.ssh/$nomedeusuario
 
echo "Chaves SSH geradas! Agora copie o conteúdo de $nomedeusuario.pub, EXPOSTO ABAIXO,  para a pasta .ssh dentro do contêiner do usuário, com o nome de authorized_keys!!!"
 
chave=$(cat /home/$nomedeusuario/.ssh/$nomedeusuario.pub)
 
echo ""
 
echo "$chave"
 
echo ""
 
  
</syntaxhighlight>
+
== GitHub ==
  
=Repositórios=
+
* [https://github.com/jpmsb/gui Aqui] encontra-se o repositório principal com a maioria dos arquivos utilizados. A interface gráfica é o Mate.
 +
* [https://github.com/jpmsb/gui-lxde Aqui] encontra-se o repositório referente a imagem de interface gráfica LXDE com o tema do Raspberry Pi.
  
== Docker Hub ==
+
=Últimas atualizações=
  
[https://hub.docker.com/r/jpmsb/gui/ Aqui] encontra-se o repositório com a imagem para a criação do contêiner.
+
* 29/11/2018 → Geração e início dos testes da imagem que usa o LibreOffice do repositório "backports" do Debian. Foi instalado também o KColor Chooser que permite selecionar cores e verificar suas combinações de vermelho, verde e azul. Além disso, foi adicionada a fonte "Open Sans".
 +
* 27/11/2018 → Melhoramento no ''script'' "rede", adicionando "-oStrictHostKeyChecking=no" para facilitar a troca de imagens uma vez que não é mais necessário confirmar que a chave mudou.
 +
* 23/10/2018 → Adição de terminal remoto no TTY 6, o que pode facilitar o encerramento de processos que travem a interface gráfica.
 +
* 05/10/2018 → Navegação e respostas à nomes extremamente lenta.
 +
** A solução foi remover um dos endereços DNS, que havia sido desativado.
 +
* 03/10/2018 → Interrupção inesperada do sistema, todos os contêineres foram afetados.
 +
** Um erro na leitura do arquivo cloud-config.yml fez com o que o sistema ficasse desconfigurado.
 +
** RancherOS passou a armazenar os dados do Docker do usuário em ''/var/lib/user-docker'' ao invés de ''/var/lib/docker'', resultando na perda aparente do todos os contêineres.
 +
** A ação tomada foi copiar o conteúdo remanescente em ''/var/lib/docker'' para ''/var/lib/user-docker''. Em princípio foi bem sucedido, no entanto, houve problemas no permissionamento, já que ''cp -ra'' não foi usado.
 +
** A ação tomada foi apagar todo o conteúdo copiado para ''/var/lib/user-docker'' e recriar todas as pastas mantendo-as vazias. Após a recriação dos contêineres, o problema foi resolvido.
 +
** Período fora do ar: das 7:00 às 19:47.
 +
** Versão do RancherOS atualizada, de 1.4.0 para 1.4.1, com Docker 18.03.1-ce e System-docker 17.06-ros4.
 +
* Habilitação da extensão BIG-REQUESTS que resolveu o erro (imagem jpmsb/gui:2018.8.31 e jpmsb/gui-lxde:2018.8.31):
 +
** Gdk-Message: vlc: Fatal IO error 2 (No such file or directory) on X server :X
 +
** Gdk-Message: python: Fatal IO error 2 (No such file or directory) on X server :X
  
== GitHub ==
+
=Melhorias Desejadas=
  
[https://github.com/jpmsb/gui Aqui] encontra-se o repositório com a maioria dos arquivos utilizados.
+
* Boot pela rede (via PXE) para não necessitar de um disco rígido. A execução é em modo ''fat client''. No entanto tal mudança pode implicar na limitação de algumas implementações, como aviso de conexões de rede e outras possíveis orientações ao usuário.

Edição atual tal como às 10h29min de 5 de agosto de 2019

Objetivo

O objetivo é prover uma estrutura que fornece um ambiente de trabalho remoto completo afim de permitir a utilização de dispositivos de baixo custo na ponta, diminuindo os custos com equipamentos, no caso, computadores, além de flexibilizar a gerência de toda a estrutura tirando vantagem do uso de contêineres. Dessa forma, tendo o Docker como gestor, permite-se a replicação dos ambientes de trabalho para cada dispositivo, além de cada cliente ter um ambiente isolado.
Este projeto visa eliminar algumas limitações do modelo anterior cuja impelementação foi o ponta pé inicial para o desenvolvimento dessa segunda versão. Uma das limitações a serem diminuídas é o uso de dispositivos USB, como SDR, FPGAs, Arduíno, Pen Drives, etc.
Este projeto é um segmento do projeto Nuvem Computacional para a Área de Telecomunicações, o qual foi utilizada a estrutura em contêineres para gestão dos ambientes acessados pelos alunos. Neste segmento de projeto, está sendo utilizando como sistema operacional de gerência o RancherOS, que é um sistema operacional extremamente leve e toda sua estrutura é feita em contêineres, o que o torna muito modular e de tamanho diminuto, pois possui apenas Docker como o gestor do sistema operacional.

Servidores

Servidor físico
  • Local: CTIC (Coordenadoria de Tecnologia da Informação e Comunicação);
  • Atende: Laboratório de Alunos, Monitoria de Alunos, Laboratório Interativo;
  • Máquina física (HP Z220 Workstation):
    • Memória RAM: 32 GB;
    • Área de troca: 0 B;
    • CPU: Intel(R) Xeon(R) CPU E3-1225 V2 @ 3.20GHz, 4 núcleos;
    • Armazenamento: Disco rígido Samsung de 7200 RPM com capacidade para 320 GB;
  • Sistema Operacional de gerência (instalado em baremetal): RancherOS v1.5.1;
    • Versão da distribuição: v1.5.1;
    • Nome da distribuição: RancherOS;
    • Versão do kernel Linux: 4.14.85-rancher
  • Contêineres Docker virtualizando as seguintes aplicações:
    • Contêiner labalu-cli0-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labalu-cli1-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labalu-cli2-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labalu-cli3-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labalu-cli4-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labalu-cli5-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 6.5 GB de memória RAM.
    • Contêiner labalu-cli6-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 6.5 GB de memória RAM.
    • Contêiner labint-cli0-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli1-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli2-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli3-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli4-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli5-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli6-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli7-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli8-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli9-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli10-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli11-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
    • Contêiner labint-cli12-aluno baseado em Debian Stretch que provê a interface de área de trabalho. Este contêiner pode alocar até 3 GB de memória RAM.
  • Contêineres do System-Docker executando os seguintes serviços:
    • Console Debian do RancherOS → Imagem jpmsb/os-debian-extrasconsole:v1.5.1;
    • Crontab do RancherOS;
    • Configuração de rede do RancherOS;
    • Configuração de dispositivos do RancherOS;
    • Configuração de horário do RancherOS;
    • Contêiner contendo o Docker a nível de usuário;

Preparação do servidor

O RancherOS

Logomarca do RancherOS

Para a execução deste projeto, foi escolhido como sistema operacional de gerência o RancherOS, que possui foco na execução de contêineres. O sistema operacional é constituído basicamente do kernel Linux e o Docker, fazendo com que sua iso de instalação tenha cerca de 60 Mb.
O sistema conteineriza serviços do sistema, como configuração de rede, configuração de dispositivos, crontab, o console que o usuário interage, módulos extras para o kernel Linux, até mesmo o próprio sistema operacional que final em execução. Há apenas uma base bem mínima para o Docker funcionar. Há dois serviços do Docker em execução: um chamado de system-docker e o outro o Docker que usuário executa suas aplicações de forma tradicional.
Digitando system-docker ps no console é dada uma saída semelhante à abaixo:

root@JPMSB:~# system-docker ps
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS                         PORTS               NAMES
100081d26178        rancher/os-base:v1.1.1                "/usr/bin/ros entrypo"   21 minutes ago      Up 9 minutes                                       ntp
a770926deb8c        rancher/os-base:v1.1.1                "/usr/bin/ros entrypo"   21 minutes ago      Up 9 minutes                                       network
556d5ccd846e        rancher/os-base:v1.1.1                "/usr/bin/ros entrypo"   21 minutes ago      Up 9 minutes                                       udev
d1d76fe3a1d0        rancher/os-acpid:v1.1.1               "/usr/bin/ros entrypo"   21 minutes ago      Up 9 minutes                                       acpid
0f2f113fc887        rancher/os-syslog:v1.1.1              "/usr/bin/entrypoint."   21 minutes ago      Up 8 minutes                                       syslog
921b11ef5571        rancher/container-crontab:v0.1.0      "container-crontab"      11 days ago         Restarting (1) 9 minutes ago                       container-cron
7125a15e074d        rancher/os-debianconsole:v1.1.0-rc3   "/usr/bin/ros entrypo"   11 days ago         Up 9 minutes                                       console
27849052b566        rancher/os-docker:17.03.2             "ros user-docker"        11 days ago         Up 9 minutes                                       docker
ee264f634dbe        rancher/container-crontab:v0.1.0      "container-crontab"      11 days ago         Up 9 minutes                                       system-cron

Há os seguintes contêineres listados acima:

  • ntp → cuida da sincronização do relógio;
  • network → faz a configuração de rede;
  • udev → faz a gerência dos dispositivos;
  • acpid → controla os recursos de energia da máquina;
  • syslog → cuida dos logs do sistema;
  • container-cron → é o temporizador dos contêineres;
  • console → console o qual o usuário interage, tanto diretamente quanto via SSH;
  • docker → contém o Docker que é utilizado a nível de usuário;
  • system-cron → é o temporizador do sistema operacional.

O comando de gerência do sistema é o ros. Com ele, é possível configurar o sistema operacional. É o responsável por validar o arquivo cloud-config.yml, localizado em /var/lib/rancher/conf, que contém as configurações do sistema. A utilização de um único arquivo para a configuração torna o uso deste sistema operacional mais eficiente em ambientes de produção. O Container Linux também pode ser configurado desta maneira, no entanto, no RancherOS, este é o método de configuração padrão, enquanto que no CoreOS, não.
Devido à sua estrutura, é possível escolher tanto a versão do Docker, quanto a versão do sistema operacional que se deseja utilizar, sendo possíveis realizar atualizações e desatualizações.


Instalação do RancherOS

Para a instalação do RancherOS, baixe a ISO do sistema aqui. Se a instalação for em máquina virtual, basta verificar como dar o boot a partir da ISO baixada. O RancherOS possui um detector de hypervisor para melhor desempenho em máquina virtual. Se a instalação for em uma máquina física, basta gravar a ISO em um pen drive e configurar a placa-mãe para dar o boot a partir do mesmo. Para a gravação, basta utlizar o comando dd:

dd if=rancheros.iso of=/dev/sdX

Neste caso, sdX é o dispositivo alvo e X é a letra que identifica o mesmo. Para achar a identificação do dispositivo, basta utilizar o comando fdisk -l.
Após o boot, chegar-se-á uma tela semelhante à imagem abaixo:

Rancheros1-1.png

Selecione a segunda opção para, ao completar o boot, o sistema já vir com um login pronto para uso. O sistema começará a ser carregado, como mostrado na imagem abaixo:

Rancheros2.png

O sistema completará o boot em uma tela semelhante à imagem abaixo:

Rancheros3-1.png

Neste momento, o sistema está sendo executado em memória RAM, e tudo que for feito nele será perdido após o reinício da máquina. No entanto, é possível utilizar o sistema sempre a partir da ISO e ainda assim salvar os dados. Para que as alterações feitas não se percam, basta criar uma partição em um armazenamento local com o rótulo RANCHER_STATE, que salvará todas as modificações feitas no sistema. Isso pode ser interessante para salvar um pouco mais de espaço em disco e também útil em casos de atualizações.
Digite sudo su para virar root:

Rancheros4-1.png

No caso de se desejar instalar o sistema no armazenamento local, basta utilizar o seguinte comando:

ros install -d /dev/sdX

Para localizar a identificação do dispositivo, basta utilizar o comando fdisk -l, como mostrado na imagem abaixo:

Rancheros5-1.png

Rancheros6.png

No caso da imagem acima, o dispositivo é /dev/sda. Digite ros install -d /dev/sda:

Rancheros7.png

O instalador perguntará se o usuário deseja prosseguir com a instalação:

Rancheros8.png

Digite "y" para prosseguir com a instalação:

Rancheros9.png

Após cerca de 30 segundos, a instalação está concluída e o instalador perguntará se o usuário deseja continuar com o reinício da máquina:

Rancheros10.png

Digite "y" para continuar com o reinício da máquina:

Rancheros11.png

Os serviços e contêineres do sistema começarão a ser parados e, por fim, o RancherOS é reiniciado:

Rancheros12.png

Após o reinício do sistema, o menu SYSLINUX aparecerá, sendo este o mesmo presente na mídia de instalação.

Rancheros13.png

Como não há nada configurado ainda, deve-se selecionar a segunda para ter o autologin com o usuário rancher. O sistema operacional começará a ser iniciado:

Rancheros14.png

Após o término da inicialização do sistema, deve aparecer uma tela semelhante à imagem abaixo:

Rancheros15.png

Neste momento, o sistema está completamente pronto para uso. Ao usar o comando "fdisk -l", é possível verificar que o armazenamento o qual o RancherOS foi instalado foi modificado.

Rancheros17.png

Configuração

A configuração do sistema dá-se através de um arquivo do tipo "yml". Neste tipo de arquivo, os espaços são importantes e definem blocos de configurações.

Configuração da Rede

A configuração da rede é feita via arquivo "cloud-config". O arquivo localiza-se em "/var/lib/rancher/conf". Para editar o arquivo "cloud-config.yml", basta usar o "vi":

vi /var/lib/rancher/conf/cloud-config.yml
Configuração de interface de rede

Abaixo, um exemplo de configuração de rede:

rancher:
  network:
    interfaces:
      eth0:
        address: 191.36.9.253/24
        gateway: 191.36.9.254
        dhcp: false

O contéudo acima define o endereço IP "191.36.9.253" na interface "eth0". Define também o endereço IP do roteador, "191.36.9.254". O parâmetro "dhcp: false", desabilita o cliente DHCP.

Configuração de pontes

É possível também configurar pontes, por exemplo:

rancher:
  network:
    interfaces:
      eth0:
        bridge: faixa191
      faixa191:
        address: 191.36.9.253/24
        bridge: true
        dhcp: false
        gateway: 191.36.9.254


Configuração de servidores DNS

Para a configuração dos servidores de nomes, basta adicionar um conteúdo parecido com o exemplo abaixo:

rancher
  network:
    dns:
      nameservers:
      - 8.8.8.8
      - 8.8.4.4
Configuração de interface pelo endereço MAC do dispositivo

É possível configurar a interface de rede pelo endereço MAC da mesma, assim, caso haja mais de uma placa de rede, evita-se que uma eventual troca de nomes cause problemas. Abaixo um exemplo de configuração do dispositivo de rede através do endereço MAC da mesma:

rancher:
  network:
    interfaces:
      "mac=ea:34:71:66:90:12:01":
         dhcp: true
Configuração de agregações de link

É possível configurar agregações de link. O exemplo abaixo ilustra isso:

rancher:
  network:
    interfaces:
      bond0:
        addresses:
        - 191.36.9.253/24
        - 172.18.19.20/24
        gateway: 191.36.9.254
        bond_opts:
          downdelay: "200"
          lacp_rate: "1"
          miimon: "100"
          mode: "4"
          updelay: "200"
          xmit_hash_policy: layer3+4
        post_up:
        - ip route add 10.0.0.0/8 via 10.88.23.128
      mac=0c:c4:d7:b2:14:d2:
        bond: bond0
      mac=0c:c4:d7:b2:14:d3:
        bond: bond0

Habilitar módulos extras do kernel

Uma das vantagens do RancherOS é que o mesmo possui um vasto conjunto de drivers e módulos prontos para serem ativos. Todo este conjunto fica dentro de um contêiner. Para habilitar os módulos extras, basta digitar os comandos abaixo:

# ros service enable kernel-extras

Notar-se-á que uma imagem de contêiner será baixada. Para pô-la em execução basta executar o seguinte comando:

# ros service up kernel-extras

O serviço é ativo. Basta reiniciar o sistema que todos os módulos já estarão pronto para uso. É possível utilizar recursos como USBIP, por exemplo, além de outros dispositivos presentes na máquina que antes não funcionavam por causa da falta de drivers.

Instalação do GRUB 2

Por padrão, o RancherOS utiliza o SYSLINUX como gerenciador de inicilização. Optou-se por utilizar o GRUB 2 devido à sua flexibilidade e possibilidades de proteção com usuário e senha, impedindo, assim, vandalismos por parte dos usuários, bem como o acesso ao sistema através do autologin.
A instalação do GRUB 2 é feita através da aplicação grub-install, geralmente presente nos sistemas operacionais com o referido gerenciador de inicialização.
Para realizar a instalação a partir do próprio RancherOS, basta criar um contêiner usando o system-docker:

# system-docker run -it --name boot --privileged -v /boot:/boot -v /dev:/dev debian:stretch

Dentro do contêiner, basta instalar o pacote grub-pc e um editor de texto (nano, vim, pico):

root@iddoconteiner# apt update && apt -y -q install grub-pc nano

Preparação do cliente

O sistema operacional

O sistema operacional escolhido foi o Debian, sendo a versão atual usada a 9 (Stretch), que necessita ser atualizado para a versão mais recente, a 10 (Buster).

Repositórios

Docker Hub

  • Aqui encontra-se o repositório principal com a imagem para a criação do contêiner. A interface gráfica é o Mate.
  • Aqui encontra-se o repositório com a imagem de interface gráfica LXDE com o tema do Raspberry Pi.

GitHub

  • Aqui encontra-se o repositório principal com a maioria dos arquivos utilizados. A interface gráfica é o Mate.
  • Aqui encontra-se o repositório referente a imagem de interface gráfica LXDE com o tema do Raspberry Pi.

Últimas atualizações

  • 29/11/2018 → Geração e início dos testes da imagem que usa o LibreOffice do repositório "backports" do Debian. Foi instalado também o KColor Chooser que permite selecionar cores e verificar suas combinações de vermelho, verde e azul. Além disso, foi adicionada a fonte "Open Sans".
  • 27/11/2018 → Melhoramento no script "rede", adicionando "-oStrictHostKeyChecking=no" para facilitar a troca de imagens uma vez que não é mais necessário confirmar que a chave mudou.
  • 23/10/2018 → Adição de terminal remoto no TTY 6, o que pode facilitar o encerramento de processos que travem a interface gráfica.
  • 05/10/2018 → Navegação e respostas à nomes extremamente lenta.
    • A solução foi remover um dos endereços DNS, que havia sido desativado.
  • 03/10/2018 → Interrupção inesperada do sistema, todos os contêineres foram afetados.
    • Um erro na leitura do arquivo cloud-config.yml fez com o que o sistema ficasse desconfigurado.
    • RancherOS passou a armazenar os dados do Docker do usuário em /var/lib/user-docker ao invés de /var/lib/docker, resultando na perda aparente do todos os contêineres.
    • A ação tomada foi copiar o conteúdo remanescente em /var/lib/docker para /var/lib/user-docker. Em princípio foi bem sucedido, no entanto, houve problemas no permissionamento, já que cp -ra não foi usado.
    • A ação tomada foi apagar todo o conteúdo copiado para /var/lib/user-docker e recriar todas as pastas mantendo-as vazias. Após a recriação dos contêineres, o problema foi resolvido.
    • Período fora do ar: das 7:00 às 19:47.
    • Versão do RancherOS atualizada, de 1.4.0 para 1.4.1, com Docker 18.03.1-ce e System-docker 17.06-ros4.
  • Habilitação da extensão BIG-REQUESTS que resolveu o erro (imagem jpmsb/gui:2018.8.31 e jpmsb/gui-lxde:2018.8.31):
    • Gdk-Message: vlc: Fatal IO error 2 (No such file or directory) on X server :X
    • Gdk-Message: python: Fatal IO error 2 (No such file or directory) on X server :X

Melhorias Desejadas

  • Boot pela rede (via PXE) para não necessitar de um disco rígido. A execução é em modo fat client. No entanto tal mudança pode implicar na limitação de algumas implementações, como aviso de conexões de rede e outras possíveis orientações ao usuário.