Servidor de Aplicações em Contêineres
A estrutura
- Sistema Operacional de gerência (instalado em máquina virtual VMWare): Container Linux by CoreOS 1409.8.0 (Ladybug);
- Versão da distribuição: 1409.8.0;
- Nome da versão da distribuição: Ladybug;
- Nome da distribuição: Container Linux by CoreOS;
- Contêiner Docker com sistema base Debian 8 (Jessie), dispondo das seguintes aplicações:
- Quartus 13.0sp1 com Modelsim Altera 10.1d;
- Quartus 16.0 com Modelsim Altera 10.4d;
- MatLab 2015a;
- Octave 4.2.1;
- Omnet++ 5.0;
- Gdrive;
- Contêiner Docker com sistema base Debian 9 (Stretch).
- Aluno responsável: Gustavo Paulo Medeiros da Silva;
- Professor orientador: Ramon Mayor Martins;
- Aplicações: Node.js, csdr;
- Site: IFSC-SDR
O CoreOS
O CoreOS é um sistema operacional de código aberto voltado à execução de contêineres. Seu objetivo é permitir a execução de aplicações em qualquer ambiente. Fornece ferramentas de gerência de contêineres como Docker e Rocket, que é feito pela mesma equipe que criou o Container Linux. Possui suporte ao Kubernetes, que é uma poderosa ferramenta de gerência de contêineres, baseada na experiência que a Google teve. O CoreOS também tem seu código no GitHub.
Instalação do Container Linux
Para a instalação do CoreOS, baixe a ISO da versão de produção do sistema através deste link. A versão de produção é a mais indicada para ambientes que necessitam de uma maior estabilidade no sistema operacional. Após baixada a ISO, grave-a em um pendrive usando o comando "dd", ou outro gravador de imagens em dispositivos de sua preferência. Em seguida, de boot do sistema, que começará a ser carregado e irá concluir e uma tela com o login já feito. Digite sudo su para se tornar root. Neste momento, os sistema está apenas carregado em memória. Antes de instalá-lo, primeiramente a rede deve ser corretamente configurada, já o script de instalação baixa uma imagem que é o sistema a ser gravado no disco rígido. É possível utilizar o comando "ifconfig", o comando "ip" ou o serviço "systemd-networkd" para a configuração da rede, além do comando "route" para definir o gateway. De modo que a configuração seja mais rápida, optar-se-á pela utilização do comando "ifconfig" para a configuração da rede, como mostrado no exemplo abaixo:
ifconfig eth0 191.36.8.33/27
route add default gw 191.36.8.62
No uso do comando ifconfig, a interface de rede eth0 foi definida com o endereço IP 191.36.8.33 com máscara de sub-rede 255.255.255.224 ou /27. No uso do comando route, foi definico como roteador principal o endereço IP 191.36.8.62.
Após a configuração de rede, instale o Container Linux utilizando o seguinte script presente em /bin:
coreos-install -C stable -d /dev/sda
O script coreos-install está localizado em /bin e é um shell script. Ao utilizar o argumento -C e o parâmetro stable, definiu-se canal de atualizações bem como o estágio de desenvolvimento da imagem que será baixada,verificada e gravada no HD. O argumento -d vem de device e especifica o dispositivo o qual a imagem baixada será gravada.
Após isso, reinicie o sistema utilizando o comando reboot. O sistema será rapidamente desligado e ligado novamente, é importante ser rápido quando a tela do grub
Scripts para criação de usuários
Devido à falta de informações suficientes providas pelo LDAP, não foi possível usar os usuários de rede dos alunos. De maneira a agilizar a criação e remoção de contas, foram criados scripts para realizar essas funções.
O script abaixo verifica o nome completo do aluno e retorna o seu nome de usuário. Caso retorne mais de um nome de usuário ou não retorne nenhum nome de usuário, o mesmo deve ter seu nome retirado da lista e ser criado manualmente:
Abaixo, a sintaxe de utilização do script de verificação:
root@quartus-matlab:/# ./ler-lista lista
No comando acima, o script obtém o nome completo dos usuário a partir do arquivo "lista". A lista do com o nome completo dos usuários tem o formato CSV (comma separated value), como no exemplo abaixo:
MATRÍCULA,NOME,SOBRENOME
123456789-0,MARIO,DE ANDRADE
246801357-9,JOAO,VITOR DOS PASSOS
Abaixo, o script de verificação:
#!/bin/bash
FILE=$1
while IFS=, read -r matricula nome sobrenome
do
echo "Usuario $nome $sobrenome de matricula $matricula."
ldap=$(ldapsearch -h 191.36.8.12 -b "dc=cefetsc,dc=edu,dc=br" -x "(&(cn=$nome)(sn=$sobrenome))" | grep uid: |cut -f2 -d " ")
echo "$ldap"
echo " "
done < $1
Após utlizar o script de verificação e realizar os ajustes necessários na lista, o script abaixo pode usado para criar os usuários:
root@quartus-matlab:/# ./criar-usuarios lista curso
Abaixo, o script de criação dos usuários dos alunos via lista:
#!/bin/bash
FILE=$1
curso=$2
verificar=$(cut -d: -f1 /etc/passwd)
while IFS=, read -r matricula nome sobrenome
do
echo "Usuario $nome $sobrenome de matricula $matricula"
ldap=$(ldapsearch -h 191.36.8.12 -b "dc=cefetsc,dc=edu,dc=br" -x "(&(cn=$nome)(sn=$sobrenome))" | grep uid: |cut -f2 -d " ")
usuariolocal=$(echo "$verificar" |grep -w "^$ldap")
if [ "$usuariolocal" = "$ldap" ]; then
echo "O usuário $usuariolocal já existe no sistema!."
echo " "
else
echo "Criando usuario $ldap para o aluno $nome $sobrenome do curso $curso."
useradd -m -d /home/alunos/$ldap -s /bin/bash -c "$nome $sobrenome,$curso,$matricula" $ldap
echo "Usando a matricula $matricula como senha temporária do usuario $ldap."
echo "$ldap:$matricula" |chpasswd
echo "Obrigando usuário $ldap a mudar senha no proximo login."
chage -d 0 $ldap
echo "Adicionando usuário $ldap ao grupo alunos."
addgroup $ldap alunos
echo "Mudando a permissão da pasta /home/alunos/$ldap."
chmod -R 700 /home/alunos/$ldap
echo "Mudando grupo dono da pasta /home/alunos/$ldap."
chown -R $ldap:alunos /home/alunos/$ldap
echo "Dando permissão de leitura aos usuários do grupo professores."
setfacl -m g:professores:r /home/alunos/$ldap
echo "Conta $ldap do usuário $nome $sobrenome criada"
echo " "
fi
done < $1
Há também um script para a criação manual de usuários de alunos, caso seja encontrado mais de um nome de usuário para o mesmo aluno ou caso não seja encontrado nenhum nome de usuário.
A sintaxe de utilização é:
root@quartus-matlab:/# ./criar-usuario-aluno "nome_de_usuario" "NOME COMPLETO" "matrícula" "curso"
root@quartus-matlab:/# ./criar-usuario-aluno "maria.fs" "MARIA FONSECA DE SOUZA" "246801357-9" "Engenharia de Telecomunicações"
O código do script é:
#!/bin/bash
nomedeusuario=$1
nomecompleto=$2
matricula=$3
curso=$4
echo "Criando usuario $nomedeusuario para o aluno $nomecompleto"
useradd -m -d /home/alunos/$nomedeusuario -s /bin/bash -c "$nomecompleto,$curso,$matricula" $nomedeusuario
echo "Usando a matricula $matricula como senha do usuario $nomedeusuario."
echo "$nomedeusuario:$matricula" |chpasswd
echo "Obrigando usuario a mudar senha no proximo login."
chage -d 0 $nomedeusuario
echo "Adicionando usuario $nomedeusuario ao grupo alunos"
addgroup $nomedeusuario alunos
echo "Mudando grupo dono da pasta /home/alunos/$nomedeusuario."
chown -R $nomedeusuario:alunos /home/alunos/$nomedeusuario
echo "Mudando a permissao da pasta /home/alunos/$nomedeusuario"
chmod -R 700 /home/alunos/$nomedeusuario
echo "Conta $nomedeusuario do usuario $nomecompleto criada"
echo " "
E há um script para a criação de usuários para os professores, usando a seguinte sintaxe:
root@quartus-matlab:/# ./criar-usuario-professor "usuario" "Nome Completo" "senhatemporaria"
#!/bin/bash
nomedeusuario=$1
nomecompleto=$2
senha=$3
echo "Criando usuário $nomedeusuario para o professor $nomecompleto."
useradd -m -d /home/professores/$nomedeusuario -s /bin/bash -c "$nomecompleto" $nomedeusuario
echo "Usando $senha como senha temporária do usuario $nomedeusuario."
echo "$nomedeusuario:$senha" |chpasswd
echo "Obrigando usuário a mudar senha no próximo login."
chage -d 0 $nomedeusuario
echo "Adicionando usuário $nomedeusuario ao grupo professores."
addgroup $nomedeusuario professores
echo "Mudando a permissão da pasta /home/professores/$nomedeusuario."
chmod -R 700 /home/professores/$nomedeusuario
echo "Conta $nomedeusuario do usuário $nomecompleto criada."
echo " "
Uso do Gdrive
O Gdrive é uma ferramenta de gerência, em modo texto, de arquivos e diretórios no Google Drive. Abaixo, serão listados comandos úteis para o uso da ferramenta.
- Uso
$ gdrive list → Lista os arquivos e pastas do diretório raiz. Na primeira vez que for executado, informará um link para que você acesse pelo navegador. Acessando o link, você receberá um código, copie e cole esse código no terminal ao lado de "Enter verification code:". Após isso você poderá usar a aplicação para manipular os arquivo da sua conta do Google Drive.
$ gdrive upload arquivo → envia um arquivo para o diretório raiz do Google Drive.
$ gdrive upload --parent ID_DA_PASTA arquivo → enviar um arquivo para uma pasta específica.
$ gdrive upload -r /caminho/da/pasta/no/pc → envia uma pasta com todo seu contéudo para o diretório raiz do sistema.
$ gdrive upload --parent ID_DA_PASTA -r /caminho/da/pasta/no/pc → envia uma pasta com todo seu conteúdo para uma pasta específica.
O ID da pasta pode ser obtido pela URL do Google Drive: https://drive.google.com/drive/u/0/folders/ID_DA_PASTA ;
$ gdrive download ID_DO_ARQUIVO → baixa um arquivo.
Programando Localmente a FPGA via JTAG na Nuvem
Executar os comandos abaixo na maquina local
/opt/altera/13.0sp1/nios2eds/nios2_command_shell.sh jtagd jtagconfig --enableremote senha jtagconfig
Verificar se a porta 6XXXX está em uso
ssh usuario@191.36.8.33 netstat -lnt | grep 127.0.0.1:60[0-9][0-9][0-9]
Estabelecer um tunel ssh reverso fazendo um bind entre 6XXXX não utilizada e a porta da jtag local
ssh -XC -R 6XXXX:localhost:1309 usuario@191.36.8.33
Para o número da porta a sugestão é utilizar o ID do usuário.
No Quartus é necessário abrir o programador [Tools > Programmer] em seguida [Edit > Hardware Setup] na aba [JTAG Settings] [Add Server] preencher os campos:
Server name: 127.0.0.1:6XXXX Server password: senha
Em seguida é necessário selecionar a JTAG na aba [Hardware Settings]