Simlab

De MediaWiki

Índice

Introdução

Este sistema tem como objetivo automatizar o processo de instalação e manutenção dos computadores do DIN.

O processo de instalação e manutenção tem os seguintes requisitos:

  1. Particionamento automático
  2. Instalação e atualização automática do Linux (Ubuntu)
  3. Instalação e atualização automática do Windows (instalado em uma máquina virtual)
  4. Permitir a instalação e atualização do Windows ( manualmente)
  5. Permitir a utilização de diversos esquemas de autenticação e armazenamento dos dados:
    • autenticação e armazenamento remotos (laboratórios lin01 e lin02)
    • autenticação remota e armazenamento local (laboratório do mestrado, lecad, etc.)
    • autenticação e armazenamento locais (professores)
  1. Prover mecanismos para atualização em massa

O software básico usado para o sistema de instalação é o systemimager. O systemimager não atende todos os requisitos deste projeto, desta forma, o systemimager foi modificado e complementado para atender todos os requisitos. Esta documentação tenta descrever de forma compacta, mas completa, o funcionamento do sistema, em caso de dúvidas, favor consultar o Subversion código do projeto e a documentação do systemimager.

Instalação

A instalação é realizada com o cd do systemimager. Para cada cliente o systemimager exige que seja indicado (no servidor faia) diversas opções, entre elas a imagem a ser utilizada.

Para facilitar a instalação, o script inicial executado pelo systemimager durante o boot do cliente, foi alterado. As alterações incluem no processo de boot um menu interativo para configuração da instalação e escolha da imagem a ser instalada. Através deste menu é possível escolher que sistemas serão instalados (Linux e Windows na máquina virtual, Linux e Windows, apenas Linux), e o método de autenticação: remoto ou local, entre outras opções.

O systemimager fornece um mecanismo para acompanhar o progresso da instalação. Para tanto é necessário que o deamon si_monitor esteja funcionado na máquina faia. Para iniciar o deamon, basta executar como root o comando si_monitor. As máquinas que estão sendo instaladas reportam o progresso para este deamon.

Para acessar a interface de acompanhamento, execute o programa si_monitortk na máquina faia. Observe que este programa é gráfico, é necessário acessar a máquina com a opção -X do ssh. O cliente

Cliente

A instalação do Linux contém diversos mecanismo para controle do sistema.
Toda vez que um cliente é ligado o script din-home-scheme é executado. Este script faz o download do arquivo de configuração que está na alecrim (/var/www/config) e decide o tipo de autenticação e a forma de acesso a área do usuário. Veja o script e o arquivo de configuração para mais informações.
O arquivo de configuração na alecrim também é usado para controlar a execução do Windows (din-start-windows) e o script de desligamento (din-auto-shutdown).
Como o sistema depende deste arquivo de configuração, e ele é obtido pela rede, se a rede não estiver funcionando, o sistema torna-se inutilizável.

Problemas

Alguns problemas podem ocorrer durante a instalação. Destacamos alguns problemas e suas possíveis soluções.

A placa de rede não foi detectada

O cd do systemimager usa um kernel antigo, é possível que não tenha suporte as placas mais novas, principalmente as gigabits. A melhor solução neste caso, é colocar uma placa off-board compatível e fazer a instalação. Outra opção é atualizar o systemimager, mas pode haver incompatibilidade com o script desenvolvido, esta alternativa tem que ser planejada e testada.

Não é possível conectar-se ao servidor de imagem

Verifique se o servidor de imagem está em execução na máquina faia. Reinicie a máquina se for o caso.

A instalação do Windows na máquina virtual fica estagnado

Verifique se o servidor http (alecrim) que contém o torrent está no ar. Tente fazer o download do torrent manualmente executando o comando
wget http://alecrim.din.uem.br/torrents/windows.img.torrent
Se o download for realizado com sucesso, o problema não está no servidor http.
Verifique se o seeder está funcionado na máquina faia, execute o comando
ps aux | grep windows.img
Se existir um processo, o seeder está funcionando. Tente reiniciar a máquina.

Depois da instalação a máquina não inicia

Neste caso, o mais provável é algum problema com o nome das partições (hdx vs sdx). Inicie o computador com um cd de boot e verifique as configurações do grub, tente passar a opção noresume na linha do kernel.

Atualização

O Golden Client está instalado em uma máquina virtual qemu na máquina urucum. Para iniciar a máquina virtual, entre no diretório /virtualmachines/qemu/din-ubuntu-edgy/ e execute, como root, o comando ./start. A máquina virtual é inicializada em background, o acesso pode ser feito via ssh (ssh manut@din-ubuntu-edgy) ou via vnc (vncviewer localhost:0). É necessário aguardar alguns minutos até que a máquina virtual seja inicializada. O fato do golden client estar em uma máquina virtual deixa o processo lento, o ideal seria ter um computador real só para o golden client.

Todas as alterações realizadas no golden client serão posteriormente replicadas nas máquinas clientes. Em determinadas situações existe o interesse de especificar que alguns arquivos (como o arquivo de configuração do X) nas máquinas cliente não devem ser substituidas pelos do golden client durante a atualização. Estes arquivos são especificados no arquivo de configuração /etc/systemimager/updateclient.local.exclude. Observe que o próprio arquivo de configuração é copiado do golden client.

O servidor do systemimager está instalado na máquina faia. Após o golden client ter sido alterado, estas alterações devem ser copiadas para o servidor.

No golden client execute, como root, o comando din-prepare-client start (observe que o nome do servidor está no script, se o servidor for alterado, o script deve ser alterado também). Após este comando, um servidor rsync estará funcionando no golden client.

Execute um ssh para a máquina faia. Como root, entre no diretório /root/bin/ e execute ./si-getclient-lin-ubuntu-edgy (observe que o nome do golden client está no script, se o golden client for alterado, o script deve ser alterado também). Este comando faz com que a imagem do golden client que está no servidor (no diretório /var/lib/systemimager/images/din-ubuntu-edgy) seja atualizada. A atualização é feita via rsync. Se ocorrer algum erro, verifique se o rsync está funcionando no golden client. Ao final do processo de atualização, o script perguntará se o script de instalação deve ser atualizado, responda não.

Para parar o rsync no golden client execute din-prepare-client stop. O golden client pode ser desligado.

Agora que o servidor contém a imagem mais recente do golden client, os clientes podem ser atualizados. Para atualizar um único cliente, execute um ssh para este cliente (ou acesse físicamente a máquina), e, como root, execute din-update-cliente faia din-ubuntu-edgy, onde faia é o nome do servidor e din-ubuntu-edgy é o nome da imagem no servidor. Se ocorrer algum erro, execute novamente o comando, se o erro persistir, faça uma verificação no sistema de arquivos, se o erro ainda persistir, faça uma nova instalação.

Para atualização em massa, veja o programa de gerenciamento.

Windows

O systemimager é utilizado para replicação de imagens de sistemas Unix. Apesar de existirem softwares de replicação de instalação Windows, em geral são proprietários e não permitem a atualização de uma imagem após a instalação. Para instalação e atualização do Windows foi elaborada uma solução alternativa.

Máquina virtual

O Windows é instalado em uma máquina virtual do vmware (está foi uma péssima escolha dado que o vmware não é software livre, no futuro pode haver uma migração para o virtualbox ou qemu). Os arquivos de configuração da máquina virtual estão do diretório /usr/local/vmware/windows/.

A máquina virtual tem dois modos de operação: o persistente e o não-persistente. O persiste é utilizado pelos analistas para instalarem novos programas e configurar o Windows, estas alterações são permanentes. O modo não-persistente é utilizada pelos usuários comuns para acessar o Windows, eles podem alterar de qualquer forma o sistema, mas uma vez que a máquina virtual seja desligada, as alterações são descartadas.

Para tentar ganhar algum desempenho na execução da máquina virtual com Windows, optou-se por usar uma partição do disco real (ao invés de criar um arquivo no sistema de arquivos do Linux) para instalar a máquina virtual. Esta escolha teve algumas implicações. A primeira é que a máquina virtual deve ser executada como root. Diversos scripts foram criado para permitir que um usuário comum execute a máquina virtual como root, são eles: din-start-windows, din-start-windows-persistent, din-vmplayer-windows e din-vmplayer-windows-persistent (para saber mais, veja os scripts). A segunda é que o vmware quando é copiado de uma máquina para outra (como é caso com a replicação do systemimager) reclama que a tabela de partição foi alterada.

Para resolver este problema um script que muda as configurações do vmware foi escrito: din-vmware-create-physicaldisk. Este script é executado antes da máquina virtual ser iniciada. Em um próximo momento, deve-se avaliar a opção de criar um arquivo de imagem no sistema de arquivos do Linux, isto simplificaria o processo.

O problema

O systemimager usa o rsync para copiar/atualizar as imagens. O fato do Windows estar instalado em uma partição implica que não é possível copiar o Windows (partição) usando o systemimager (rsync). Ainda que a imagem do Windows estivesse instalado em um arquivo comum (com uns 10GB), o rsync não é ideal para atualizar um arquivo muito grande, ele demora muito. O problema não é copiar pela primeira vez a imagem do Windows (o rsync seria suficiente), o problema é atualizar o arquivo de imagem depois que o Windows é alterado.

A solução

O BitTorrent é um sistema sofisticado de compartilhamento (peer 2 peer) de arquivos. Apesar de não ter sido desenvolvido para atualizar um determinado arquivo que foi alterado (sem copiar o arquivo inteiro, apenas as partes que foram alteradas) ele pode ser usado para esta função.

A "golden client" do Windows está instalado na urucum2 (na verdade, qualquer máquina do laboratório pode ser considerado um golden client, o ideal é uma máquina exclusiva para o golden client do Linux e do Windows). O servidor http onde o torrent será publicado é a alecrim. O seeder da imagem do windows está na máquina faia.

O processo pode ser divido em 6 passos:

Modificar o Windows da maneira desejada

Na máquina urucum2 execute o Windows em modo persistente (como root) com o comando ./din-start-windows-persistent. Modifique o Windows da maneira desejada. Finalize a máquina virtual.

Criar uma imagem da partição onde o Windows está instalado

Na máquina urucum2, execute o comando:

 ntfsclone --save-image -o - /dev/hda3 | gzip -c | ssh root@faia 'cat - > /dados1/windows/windows.tar.gz'

Provavelmente o comando ficará esperando a senha do ssh, digite a senha (mesmo se não aparecer Password: ou algo assim) para prosseguir. No comando, /dev/hda3 é a partição que o Windows está instalado. Este comando copia (e compacta) a partição do Windows e envia (via ssh) para a máquina faia (arquivo /dados1/windows/windows.tar.gz). Neste caso é melhor usar o ntfsclone do que o dd, isto porque o ntfsclone só copia os blocos que estão sendo usados, ao contrário do dd que copia todos os blocos da partição.

Criar um torrent da imagem do Windows

Na máquina faia, entre no diretório /dados1/windows/ e execute o comando (como root) make. Este comando descompacta a imagem (recém copiada) do Windows e cria um arquivo torrent. Em seguida, copia o arquivo torrent para o servidor http da alecrim. (Veja o arquivo Makefile)

Publicar o torrent em um servidor http

Realizado pelo comando anterior.

Iniciar um seeder para distribuir o arquivo de imagem

O seeder fica na máquina faia. Provavelmente o seeder já esteja em execução, verifique com o comando ps aux | grep windows.img, se existir um processo executando, finalize o processo. Em seguida, execute invoke-rc.d seeder start (o script /etc/init.d/seeder foi desenvolvido neste projeto, veja o código). Este comando reiniciara o seeder (que tinha acabado de ser finalizado). Se preferir, reinicia a máquina.

Copiar/atualizar o Windows das máquinas clientes usando um cliente bittorrent.

Acesse a máquina cliente via ssh, ou fisicamente se for o caso, e execute o comando (como root) din-update-windows. Este script faz o download do arquivo torrent do servidor http da alecrim e chama o comando btdownloadheadless que faz o trabalho de procurar parceiros (neste caso a máquina faia, que é o seeder) e atualiza o Windows. Para atualização em massa, veja o programa de gerenciamento.

Gerenciamento

Para facilitar a o gerenciamento das instalações, o programa simlab foi desenvolvido. O programa simlab está instalado na máquina faia (no diretório /usr/local/bin/simlab) e pode ser executado com o comando simlab. Este comando deve ser executando como manut, isto porque as chaves que estão nos clientes é a do manut. O agente ssh deve estar funcinando, se ao executar o comando ele pedir a senha diversas vezes, isto significa que o agente ssh não esta funcionado, pare o programa (crtl+c) e execute: ssh-agent bash, e depois ssh-add, digite a senha da chave e execute o simlab novamente.

O programa simlab é bastante simples de ser operado. Ele recebe dois parâmetros, o primeiro é a ação que deve ser executada, e o segundo é uma expressão regular que determina sobre quais clientes a ação deve ser executada. O programa simlab utiliza um arquivo de configuração (/usr/local/etc/simlab.conf) para determinar quais clientes estão disponíveis.

Executar o comando sem nenhum parâmetro revela a maneira de usar:

$ simlab

Mode incorreto de usar
Mode de usar: /usr/local/bin/simlab action hosts
action
        poweron     - envia um pacote wakeonlan
        poweroff    - desliga
        show        - exibe as configurações
        status      - exibe o status
        update      - atualiza
        get-windows - instala o windows
        update-windows - atualiza o windows
hosts
        all      - todos os host do arquivo
        regex    - expressão regular para o nome do host. Ex: l1m0[1-8]

O comando poweron não está funcionando. O wake-on-lan não funciona em subredes. Todos os comando são auto-explicativos.

Por exemplo, para atualizar o Linux nas máquina l1m02 e l2m03, execute o comando:

$ simlab update "l1m02|l2m03"

Para atualizar o Windows de todas as máquinas do lin01, execute:

$ simlab update-windows l1m[0-9][0-9]

Quando o programa simlab é executado, ele escreve na saída padrão se o comando foi executado corretamente para cada uma das máquinas casadas com a expressão regular. Se a máquina em questão não estiver ligada, ele tentará ligar a máquina com pacotes wake-on-lan. Além disso, ele gera um arquivo de log (no diretório corrente) com a saída do comando executado. O nome do arquivo gerado é simlab-action-regex.log, onde action e ação executada e regex é a expressão regular. O progresso do comando pode ser acompanhado (em outro terminal) com o comando tail -f simlab-action-regex.log

Golden Client

Este documento descreve o processo de criação de uma imagem para ser clonada com o systemimager. Se você está interessado em instalar uma imagem já existe, veja o processo de instalação. Passos para instalar um sistema do zero

Passos para instalar um sistema do zero

Primeiro deve-se realizar uma instalação básica. Em seguida criar um usuário manut com poder de root (isto já deve acontecer em uma instalação padrão do Ubuntu). Para melhorar a segurança, mudar as permissões do home do root e manut para 700 (chmod 700 /root /home/manut).

Criar uma chave ssh para permitir o manut logar remotamente sem senha. Para tanto, como manut execute o comando: ssh-keygen -t dsa. Os arquivos id_dsa e id_dsa.pub serão criados no diretório ~/.ssh. Agora bastar copiar o arquivo id_dsa para authorized_keys (cp ~/.ssh/id_dsa ~/.ssh/authorized_keys). Você deve ter uma cópia do arquivo id_dsa na máquina da qual os acessos remotos serão realizados.

Marcar como auto-instalados todos os pacotes, a menos dos pacotes ubuntu-minimal, ubuntu-standard, linux-image e grub. Isto pode ser feito usando um pouco de mágica do shell:

aptitude markauto `aptitude search ~i\!~M -F %p | sed -e /ubuntu-standard/d -e /ubuntu-minimal/d -e /linux-image/d -e /grub/d`

Em seguida, fazer uma atualização do sistema (aptitude dist-upgrade). Personalizando o sistema

Personalizando o sistema

Diversos scripts em /usr/local/bin e /usr/local/sbin foram criados.

Criar a pasta /etc/gconf/gconf.xml.defaults/system com as configurações de proxy (isto não esta funcionando).

Instalar opera do repositorio http://archive.canonical.com/ubuntu edgy-commercial main

Criar launchers para aplicações instaladas localmente: /usr/local/share/applications fp.desktop jedit4.2.desktop ktechlab.desktop netbeans-5.5.desktop protege3.2beta.desktop weka3.4.7.desktop gprolog.desktop jude.desktop poseidon4.2.0.desktop webratio4.2.desktop

Instalar a fonte CZTSans.ttf para usar o CZT com jedit

Criar e configurar as máquinas virtuais em /usr/local/vmware

Criar os diretórios /home/usr e /home/htmldocs

/etc/group: importar grupos do nis adiciondado a linha +:::

/etc/passwd: importar usuários do nis adicionado a linha +::::::/bin/bash

Instalar systemimager-common systemimager-boot-i386-standard systemimager-client do repositório http://download.systemimager.org stable/main

Instalar o pacote w32codecs: wget -c http://www.debian-multimedia.org/pool/main/w/w32codecs/w32codecs_20061022-0.0_i386.deb; dpkg -i w32codecs_20061022-0.0_i386.deb

Instalar o pacote libdvdcss2: wget -c http://www.dtek.chalmers.se/groups/dvd/deb/libdvdcss2_1.2.5-1_i386.deb; dpkg -i libdvdcss2_1.2.5-1_i386.deb

/etc/network/if-up.d/din-ethtool-wol: este script habilita o wake on lan da interface eth0 comando ethtool -s eth0 wol g

update-alternatives: update-alternatives --config editor, escolhido vim.basic

dpkg-reconfigure: dpkg-reconfigure dash, escolher não

totem-mozilla: o pacote totem-mozilla não toca todos os formatos, instalado o pacote mozilla-mplayer e movido os arquivos do pacote totem-mozilla. O pacote totem-mozilla não pode ser removido porque ubuntu-desktop depende dele, a solução foi mover os arquivos das pastas /usr/lib/mozilla/plugins/libtotem-* e '/usr/lib/firefox/plugins/libtotem-*, use os comandos (cd /usr/lib/mozilla/plugins/; mkdir totem; mv libtotem-* totem cd /usr/lib/firefox/plugins/; mkdir totem; mv libtotem-* totem)

Código modificado: Adicionado patch bittorrent-3.4.2-din.patch ao pacote bittorrent, este patch permite usar o btdownloadcurses com a opção --saveas /dev/algum_disposito

Código modificado: /usr/sbin/si_updateclient, na linha 512 alterar --delete para --delete-after

Realizadar as seguites alterações em /etc/:

Obs: antes de realizar qualquer alteração fazer uma cópia do arquivo original adicionando a extensão .ori

  • /etc/default/apport
    • desabilitar o serviço, isto impede que core dump seja gerado e encha a área do usuário
  • /etc/vmware/vmnet1/dhcpd/dhcpd.conf e /etc/vmware/vmnet8/dhcpd/dhcpd.conf wins:
    • option netbios-name-servers 200.201.30.27;
  • /etc/security/limits.conf maximo de arquivos abertos 2048
  • /etc/sudoers
    • permitir o manut executar /sbin/halt, /usr/local/sbin/din-si-updateclient, /usr/local/sbin/din-update-windows-torrent sem senha.
    • TODO: e os vmplayer da vida?
  • /etc/crontab
    • adicionadar o script /usr/local/sbin/din-auto-shutdown para executar de 5 em 5 minutos
  • /etc/systemimager/updateclient.local.exclude
    • configurar para não atualizar diversos arquivos
  • /etc/default/ntpdate
    • servidor ntp.uem.br
  • /etc/ntp.conf
    • servidor ntp.uem.br
  • /etc/security/group.conf
    • adicionar todos os usuários nos grupos users,cdrom,floppy,video,audio,games,plugdev,lpadmin,scanner,fuse
  • /etc/firefox/pref/firefox.js
    • adicionar proxy.din.uem.br
  • /etc/mozilla/prefs.js
    • adicionar proxy.din.uem.br
  • /etc/network/interfaces
    • adicionar auto dhcp eth0,eth1,eth2
  • /etc/apt/sources.list
    • habilitar repositorios universe, multiverse e edgy-commercial
  • /etc/vim/vimrc
    • habilitar syntax e set title
  • /etc/bash.bashrc
    • habilitar bash_completion e alias para cp,rm,mv usar a opção -i
  • /etc/nsswitch.conf
    • validar usuarios no nis
  • /etc/yp.conf
    • ypserver catuaba
  • /etc/defaultdomain
    • catuaba
  • /etc/environment
    • configurar http_proxy, ftp_proxy e JAVA_HOME
  • corrigindo alguns bugs o openoffice não consegue travar o arquivo no sfs /usr/lib/openoffice/program/soffice comentar a linha export SAL_ENABLE_FILE_LOCKING

Subversion

O sistema de controle de versão utilizado para os projetos é o subversion. Para aprender sobre subversion, veja este livro.

Enquanto o subversion não é integrado ao apache o acesso aos repositórios devem ser feitos via ssh . O host é seringueira.din.uem.br e o usuário é programadores.

Criando a chave de acesso

Apenas o administrador tem a senha do usuário programadores . O acesso aos repositórios devem ser feitos através de chave. Cada participante do projeto tem que ter a sua chave. Uma chave dsa pode ser criada com o seguinte comando:

$ ssh-keygen -t dsa

O arquivo $HOME/.ssh/id_dsa.pub deve ser enviado para o líder do projeto adicionar na lista de chaves. O líder de projeto deve acessar a seringueira via ssh e copiar o conteúdo do arquivo d_dsa.pub para o final do arquivo $HOME/.ssh/authorized_keys.

Acessando os repositórios

Cada projeto tem seu próprio repositório. Para copiar um determinado projeto, execute o comando:

 $ svn co svn+ssh://programadores@seringueira.din.uem.br/home/usr/outros/programadores/svnroot/nomedoprojeto/trunk nomedoprojeto

Criando um novo repositório

Executar um ssh como programadores para seringueira . Os repositórios estão no diretório svnroot . Cada projeto tem seu próprio repositório. Para criar um novo repositório, entre no diretório svnroot e execute:

 $ svnadmin create nomedoprojeto

Se por acaso o projeto for criado erroneamente, o diretório pode ser apagado. [+Cuidado para não apagar repositórios válidos!+]

Agora é necessário povoar o novo repositório com uma estrutura básica. Em outra máquina (não na seringueira) execute:

 $ mkdir nomedoprojeto; cd nomedoprojeto; mkdir trunk branches tags 
 $ svn import . svn+ssh://programadores@seringueira.din.uem.br/home/usr/outros/programadores/svnroot/nomedoprojeto/

Após este comando, o repositório foi povoado com os diretório padrões do subversion trunk , tags e branches . O diretório nomedoprojeto (na máquina local) pode ser apagado (tome cuido antes de apagar qualquer coisa!).

O novo repositório pode ser acessado normalmente.

Novo Item

Novo Subitem

Outro Item