SistemaDeConfiguracaoOnline - UFSC/moodle-provas-livecd-provas GitHub Wiki

Sistema de Configuração Online

O sistema de configuração online permite que algumas variáveis do LiveCD de Provas sejam definidas através de um arquivo JSON, que deve ser mantido em um servidor web HTTPS (sem autenticação), este arquivo será carregado pelo LiveCD a partir do servidor remoto quando a sessão do usuário iniciar. A estrutura deste arquivo JSON permite a configuração de múltiplas instituições, isto significa que o mesmo LiveCD pode ser utilizado em instituições diferentes, desde que o arquivo JSON seja configurado com os dados de cada uma destas instituições, assim quando o sistema do LiveCD carregar, será exibida uma tela com as instituições cadastradas e o usuário poderá selecionar a instituição desejada, após selecioná-la, o sistema será configurado com os valores definidos para aquela instituição.

OBS: Este recurso foi adicionado na versão 3.1 do LiveCD de Provas em março de 2015.

Funcionamento

O sistema é formado pelo arquivo de configuração citado, no formato JSON e um programa escrito em Python3, que fica dentro do LiveCD em /opt/provas/online_update.py.

O programa /opt/provas/online_update.py é disparado pelo script /opt/provas/start_user_apps.sh após ele verificar que a conexão com a internet já está funcionando e também verificar se no LiveCD não existe o arquivo /opt/provas/moodle_provas_online.conf, então este programa fará uma requisição do arquivo JSON ao servidor remoto, definido pela variável $livecd_online_config_url no arquivo /opt/provas/moodle_provas.conf (config/moodle_provas.conf no sistema de geração da ISO).

Caso o arquivo JSON recebido contenha mais de uma instituição, uma tela com a lista das instituições encontradas será exibida para o usuário, para que ele selecione a que deseja utilizar, após ele selecionar e prosseguir, o ambiente será configurado com o valor das variáveis associados àquela instituição. Se existir apenas uma instituição no arquivo JSON, ela será carregada sem exibir qualquer tela.

A Estrutura do Arquivo de Configuração JSON

O arquivo JSON pode ser nomeado como for desejado, pois sua URL completa é definida no arquivo de configuração do LiveCD em /opt/provas/moodle_provas.conf (config/moodle_provas.conf no sistema de geração da ISO), através da variável $livecd_online_config_url. O principal requerimento desta parte, é que o arquivo JSON seja hospedado em um servidor web com HTTPS ativado e que não haja autenticação forçada no diretório onde ele ficará (basta testar se você consegue acessar o arquivo diretamente pela URL).

Descrição das seções e dos parâmetros:

online_config_version - Este parâmetro serve apenas para informar ao desenvolvedor a versão da estrutura do arquivo JSON, ele não é verificado pelo sistema do LiveCD. A versão deve ser atualizada sempre que a estrutura do arquivo JSON mudar.

livecd_minimum_version - Versão mínima do LiveCD que ainda é suportada, se o usuário utilizar uma versão inferior à definida aqui, ele receberá uma mensagem de erro dizendo que o LiveCD não é mais suportado. Este recurso só funciona a partir do LiveCD versão 3.1.

require_load_confirmation - Valores válidos: yes/no - Quando estiver definido como 'yes', exibirá uma mensagem para o usuário solicitando a confirmação da instituição selecionada na lista, para evitar que ele selecione a instituição errada e prossiga.

mainstream_log_server_settings - Seção com os parâmetros do servidor de "logs" principal, responsável por receber os "arquivos de log" (Arquivo com dados coletados de um computador onde o LiveCD foi executado com a opção de "enviar logs para diagnóstico" selecionada).

  • log_script_url - URL do script que receberá o arquivo (Script disponível em extra/provas-receive-logs/).
  • log_script_token - Token de autenticação do script.
  • log_system_files - Lista de arquivos do sistema de arquivos que devem ser copiados também, a lista deve ser separada por espaço simples e o curinga '' é permitido, por exemplo: '/var/log/'.

institutions - Seção que contém um array com as instituições cadastradas.

  • institution_name - Nome da instituição.
  • institution_moodle_support_email - Endereço de e-mail do suporte ao Moodle da instituição.
  • moodle_provas_url - URL do site do Moodle Provas.
  • moodle_provas_receive_data_path - Caminho para o script do bloco local-exam_authorization, responsável por receber os dados enviados pelo script executado pelo cron no LiveCD.
  • allowed_tcp_out_ipv4 - Lista de endereços IPv4 + porta que devem ser liberados no firewall, cada item tem o formato: IPV4#PORTA, cada item deve ser separado com um espaço simples. As portas liberadas são apenas de saída e TCP.
  • allowed_tcp_out_ipv6 - Lista de endereços IPv6 + porta que devem ser liberados no firewall, cada item tem o formato: IPV6#PORTA, cada item deve ser separado com um espaço simples. As portas liberadas são apenas de saída e TCP.
  • ntp_servers - Lista de servidores NTP, separados por espaço simples. Serão utilizados pelo LiveCD para atualizar a data e hora do computador.
  • show_institution_name_in_desktop - Valores válidos: yes/no -Quando estiver definido como 'yes', exibirá o nome da instituição no desktop.
  • custom_log_server_settings - Se esta seção permite definir um servidor de "logs" diferente, quando ela estiver definida, os valores da seção mainstream_log_server_settings serão sobreescritos pelos definidos aqui.
    • log_script_url - URL do script que receberá o arquivo (Script disponível em extra/provas-receive-logs/).
    • log_script_token - Token de autenticação do script.
    • log_system_files - Lista de arquivos do sistema de arquivos que devem ser copiados também, a lista deve ser separada por espaço simples e o curinga '' é permitido, por exemplo: '/var/log/'.

Modelo do arquivo de configuração JSON (Também disponível em extra/online-config/modelo_config.json):

{
  "online_config_version":"1.1",
  "livecd_minimum_version":"3.1",
  "require_load_confirmation":"yes",
  "mainstream_log_server_settings":{
    "log_script_url":"https://wwwexe.inf.ufsc.br/~juliao/provas_receive_logs.php",
    "log_script_token":"f0a320fd52343c42649d48ea545915a9",
    "log_system_files":"/etc/X11/xorg* /var/log/*"
  },
  "institutions":[
    {
      "institution_name":"Universidade Federal de Santa Catarina",
      "institution_moodle_support_email":"[email protected]",
      "moodle_provas_url":"https://provas3.moodle.ufsc.br",
      "moodle_provas_receive_data_path":"/local/exam_authorization/receive_data.php",
      "allowed_tcp_out_ipv4":"150.162.1.108#443 150.162.1.49#443 150.162.1.141#443",
      "allowed_tcp_out_ipv6":"2801:84:0:1009:64e1:3d7:c3ac:f964#80 2801:84:0:1009:64e1:3d7:c3ac:f964#443",
      "ntp_servers":"ntp.ufsc.br a.ntp.br b.ntp.br",
      "show_institution_name_in_desktop":"yes",
      "custom_log_server_settings":{}
    },
    {
      "institution_name":"Instituto Federal de Santa Catarina",
      "institution_moodle_support_email":"[email protected]",
      "moodle_provas_url":"https://provas3.moodle.ifsc.br",
      "moodle_provas_receive_data_path":"/local/exam_authorization/receive_data.php",
      "allowed_tcp_out_ipv4":"150.162.1.108#443 150.162.1.49#443 150.162.1.141#443",
      "allowed_tcp_out_ipv6":"2801:84:0:1009:64e1:3d7:c3ac:f964#80",
      "ntp_servers":"ntp.ifsc.br a.ntp.br",
      "show_institution_name_in_desktop":"yes",
      "custom_log_server_settings":{
        "log_script_url":"https://www.ifsc.edu.br/provas_receive_logs.php",
        "log_script_token":"f0a320fd52383c42649d48ea545915a9",
        "log_system_files":"/etc/X11/xorg* /var/log/*"
      }
    }
  ]
}

O Arquivo /opt/provas/moodle_provas_online.conf

Este arquivo é gerado dinamicamente a partir dos dados lidos do arquivo JSON de um remoto e da instituição selecionada pelo usuário (caso exista mais de uma). Após ser gerado, ele será carregado pelo script /opt/provas/start_user_apps.sh, que fará as configurações do sistema com os dados lidos.

Caso o LiveCD seja gerado com este arquivo dentro, o sistema não carregará o arquivo JSON remoto e utilizará as configurações definidas no arquivo que está no LiveCD. Veja a seção "Desativando o Recurso de Configuração Online" para mais explicações.

Modelo do arquivo moodle_provas_online.conf gerado (Também disponível em config/moodle_provas_online.conf):

#!/bin/bash

allowed_tcp_out_ipv4="150.162.1.108#443 150.162.1.49#443 150.162.1.141#443"
allowed_tcp_out_ipv6="2801:84:0:2::10#443"
institution_moodle_support_email="[email protected]"
institution_name="Universidade Federal de Santa Catarina"
moodle_provas_receive_data_path="/local/exam_authorization/receive_data.php"
moodle_provas_url="https://provas3.moodle.ufsc.br"
ntp_servers="ntp.ufsc.br a.ntp.br b.ntp.br"
show_institution_name_in_desktop="yes"
log_script_token="f0a320fd52383c42649d48ea545915a9"
log_script_url="https://wwwexe.inf.ufsc.br/~juliao/provas_receive_logs.php"
log_system_files="/etc/X11/xorg* /var/log/*"

Desativando o Recurso de Configuração Online

Desativar a configuração online fará com que o sistema do LiveCD não carregue o arquivo JSON de um servidor remoto, porém para que o LiveCD funcione plenamente, ele precisa das variáveis que são definidas pelo arquivo /opt/provas/moodle_provas_online.conf (este arquivo é gerado a partir do arquivo JSON lido do servidor remoto), dessa forma, este recurso só pode ser desativado se o LiveCD for gerado com uma cópia do arquivo /opt/provas/moodle_provas_online.conf, configurado com os valores corretos para a instituição que utilizará o LiveCD.

O sistema de geração da ISO do LiveCD possui o parâmetro enable_hardcoded_online_config no arquivo config/livecd_provas.conf. Quando este parâmetro é ativado com o valor 'yes', o sistema gerará o pacote de configuração do LiveCD (moodle-provas-config) com uma cópia do arquivo moodle_provas_online.conf (que deve estar devidamente configurado e presente no diretório config/). Assim a ISO final gerada conterá uma cópia do arquivo /opt/provas/moodle_provas_online.conf e o LiveCD utilizará ele ao invés de carregar o arquivo JSON do servidor remoto.

OBSERVAÇÃO IMPORTANTE: Quando o servidor do Moodle Provas é o mesmo que o servidor onde o arquivo de configuração JSON se encontra, ele não precisa ser adicionado à lista de IPs liberados do arquivo JSON, mas caso a opção enable_hardcoded_online_config seja ativada, o IP do servidor do Moodle Provas deve ser adicionado à lista de IPs permitidos (allowed_tcp_out_ipv4) do arquivo /opt/provas/moodle_provas_online.conf.

⚠️ **GitHub.com Fallback** ⚠️