HOWTO para criação de imagens para boot remoto

Frederico Henrique Goldschmidt Neto
V2.1 Janeiro de 2000


1. Introdução

    1.1 A Origem da Idéia

    1.2 Como Funciona o Processo

    1.3 Considerações Sobre o Processo

    1.4 Finalidade deste HOWTO

2. Criando as Imagens

    2.1 Arquivos Utilizados no Servidor

    2.2 Arquivos Utilizados no Cliente

    2.3 Criando Imagens para Windows 95

      2.3.1 Salvando a Imagem no Servidor

      2.3.2 Configurando Arquivos do Servidor para a Nova Imagem

    2.4 Criando Imagens para Windows NT

      2.4.1 Salvando a Imagem no Servidor

      2.4.2 Configurando Arquivos do Servidor para a Nova Imagem

    2.5 Criando Imagens para Linux

      2.5.1 Salvando a Imagem no Servidor

      2.5.2 Configurando Arquivos do Servidor para a Nova Imagem

3. Considerações finais

    3.1 Dicas

    3.2 Resolução de Problemas


1. Introdução

1.1 A Origem da Idéia

A implantação da estratégia de boot remoto para máquinas de laboratórios de informática foi iniciada no segundo semestre de 1997. Diversos fatos contribuiram para adoção desta estratégia, tais como:

  • Necessidade de diferentes configurações de software e sistemas operacionais para as aulas em laboratório.
  • Dificuldade de implantação de boot remoto para windows 95 em servidor Novell.
  • Reinstalação frequente de programas devido a problemas com softwares.
  • Constantes interrupções de aulas por falta de programas, deleção de ícones, máquinas sem sistema operacional.
  • Descontentamento de professores, alunos e funcionários com a situação dos laboratórios
  • Analisando o cenário descrito acima, tornou-se necessário a solução do problema de uma forma eficiente e definitiva. Foram analisadas diversas alternativas para solucionar o problema, tendo sido adotada a solução de Marc Vuilleumier Stückelberg, Sandro Viale e David Clerc, descrita no documento Linux Remote-Boot mini-HOWTO, com algumas modificações para adequação a nossa realidade.

    Baseado nesta documentação, adquirimos as eproms para boot remoto via tcp/ip comercializadas pela InCom, não antes sem testar a solução através de download de um demodisk disponível naquele site para simulação do processo de boot.

    Atualmente temos esta solução em uso em nossos cinco Campi (laboratórios com 21 máquinas), e em dois laboratórios no Campus principal (165 + 63 máquinas). Em todos os laboratórios o servidor responsável pela tarefa de prover o boot-remoto utiliza como sistema operacional o Linux (RedHat 5.0).

    1.2 Como Funciona o Processo

    1. Ao ligarmos a máquina, a eprom de boot remoto toma conta do processo de boot.
    2. A eprom faz uma requisição BOOTP/DHCP para obter os parametros de configuração IP
    3. Se o endereço MAC da máquina for conhecido pelo servidor (estiver no arquivo /etc/dhcpd.conf), será enviada uma resposta BOOTP/DHCP contendo informações tais como endereço IP do cliente, default gateway e qual imagem de boot deverá ser solicitada.
    4. A eprom de boot carrega via TFTP a imagem do servidor, esta imagem nada mais é do que o programa bpbatch.P, que será o responsável por interpretar as requisições em tempo de boot
    5. O interpretador procura pelo item "option-155" nas command-line options, para saber o nome do batch a ser executado.
    6. As instruções contidas no arquivo batch são executadas. Entre elas:

    Desta forma os computadores dos laboratórios podem ser desligados no botão, sem haver a necessidade de preocupações em finalizar a máquina, acabando também com os problemas de re-instalação de software, desaparecimento de ícones, papeis de parede com motivos não convencionais, etc.

    A instrução a ser dada ao aluno ou professor em caso de problemas é: Reinicia máquina que tudo volta a funcionar !!!

    1.3 Considerações Sobre o Processo

    Como o processo de criação de imagem se baseia em compressão de dados de disco rígido, quando utilizamos o windows 95 como sistema operacional, devemos atentar para a característica deste sistema de tentar reconhecer novos hardwares a cada boot, isto é, esta solução funciona adequadamente em ambientes homogêneos, com máquinas que possuam a mesma configuração de hardware, pois a criação de uma imagem para cada PC torna inviável o processo, devido ao grande espaço necessário no servidor para armazenar estas imagens.

    1.4 Finalidade deste HOWTO

    A primeira versão deste HOWTO teve como finalidade servir de material de consulta para os funcionarios responsáveis pelos laboratórios de informática existentes na UPF, pois como nossa instituição funciona em uma estrutura multi-Campi, tornava-se inviável a administração e geração de imagens de boot de forma centralizada.
    Aproveitando a oportunidade, colocamos a disposição destes mesmos funcionários a versão deste HOWTO na INTERNET, para que as atualizações, bem como resolução de possíveis problemas fossem documentadas em um único lugar.
    Em contatos mantidos com os idealizadores da idéia, acabou sendo criado um link a partir da página original para esta, para que as experiências fossem compartilhadas..
    Comentários, sugestões, correções serão bem-vindas, bastando para isto enviar-me um e-mail .


    2. Criando as Imagens

    2.1 Arquivos Utilizados no Servidor

    1. dhcpd - Arquivo residente no /usr/sbin, ja disponibilizado na distribuição do RedHat.
      Este programa é responsável pelo atendimento da solicitação BOOTP/DHCP, ou seja a configuração de rede da máquina cliente.
      Em nosso caso, como um de nossos servidores possui 3 placas de rede, para diminuir o domínio de colisão, foi necessário atualizar o dhcpd, visto que o existente não atendia requisições em mais de uma interface. Utilizamos o dhcpd existente no www.isc.org.
    2. dhcpd.conf - Arquivo residente no diretório /etc, neste arquivo identificamos os clientes a serem atendidos pelo servidor, bem como as informações a serem enviadas em resposta a uma solicitação BOOTP/DHCP. Abaixo um exemplo deste arquivo:
    3. shared-network BOOT {
              subnet 192.168.41.0 netmask 255.255.255.0 {
              option domain-name "upf.tche.br";
              option routers 192.168.41.1;
              option domain-name-servers 192.168.41.1;
              default-lease-time 7200;
              max-lease-time 86400;
              range 192.168.41.50 192.168.41.60;
              }
      }
      
      group {
              filename "/tftpboot/bpbatch.P";
              option domain-name "upf.tche.br";
              option subnet-mask 255.255.255.0;
              option broadcast-address 192.168.41.255;
              option routers 192.168.41.1;
              option domain-name-servers 192.168.41.1;
              option option-155 "menu";
              default-lease-time 7200;
              max-lease-time 86400;
              host bootp1 { hardware ethernet 08:00:00:19:67:23;
                            fixed-address 192.168.41.50; }
      }
      

      Maiores detalhes sobre os campos deste arquivo podem ser obtidos através de consulta a man page do dhcpd e dhcpd.conf.

    4. tftpd - Utilizar o fornecido pela InCom (tftpd extended). Este utilitário permite a transferência de arquivos com blocos de 1048 bytes ao invés dos 512 bytes que é o tamanho máximo de bloco quando se utiliza o in.tftpd nativo do LINUX.
      Este programa atende as solicitações de carga de arquivos das máquinas clientes.
    5. Possuímos versão compilada para Linux em nosso ftp.

    2.2 Arquivos Utilizados no Cliente

    1. mrzip.exe/mrzip - Programa responsável pela criação de imagem comprimida do disco rígido (Windows e Linux).


    2.3 Criando Imagens para Windows 95

    Adicione no servidor Linux um usuário para criação de imagens, crie no home deste usuário três diretórios:

  • imagens copie para este diretório o arquivo mrzip.exe.
  • softwares copie para este diretório os discos do windows 95, bem como outros softwares que se queira instalar via rede.
  • tftpboot diretório onde serão armazenadas as imagens para boot, copie para este diretório os arquivos bpbatch.P, bpbatch.hlp, bpbatch.ovl .
  • Crie um link simbólico do arquivo /etc/dhcpd.conf para o diretório tftpboot do usuário (não esqueça de dar permissão de escrita neste arquivo para este usuário), crie também um link simbólico do diretório tftpboot deste usuário para o diretório /, desta forma a pessoa responsável pela criação das imagens não necessita de acesso como root ao sistema.

    Crie um script de inicialização do serviço de tftp, este script pode estar localizado abaixo do diretório /etc/rc.d, sendo chamado a partir do arquivo /etc/rc.d/rc.local.
    O tftpd extended pode atender tanto na porta 59 como na 69, bastando para isto deixar comentada a linha deste serviço no arquivo /etc/inetd.conf. Exemplo abaixo:

    #!/bin/bash
    /usr/sbin/tftpd -v 1 -s 1408 59 -r -h -d /tftpboot &
    

    Instale o windows 95 em uma das máquinas que utilizarão o esquema de boot remoto, procure deixar a instalação o mais enxuta possível, isto é, elimine tudo aquilo que não será utilizado pelo usuário (Microsoft Fax, Opções de Acessibilidade, Microsoft Exchange, etc ..), não esqueça de configurar a parte de rede (tcp/ip), pois será necessário acessar o servidor linux para gravar a imagem.

    Crie um arquivo no diretório imagens do servidor, w95.mrz, por exemplo, este arquivo deverá conter instruções para o mrzip gerar a imagem do cliente (windows 95) no servidor, abaixo exemplo deste arquivo:

    showlog
    hidebootprom
    filter -"temp/*"
    filter -"*.swp"
    set FragmentSize="85 Mb"
    fullzip "c:/" "d:/w95.imz"
    

    Como a imagem será gerada a partir do disco rígido de um PC, as configurações que serão carregadas nas outras maquinas após a carga da imagem serão iguais, o que ocasionará problemas na rede, pois todas as máquinas possuirão o mesmo IP e nome.

    Para evitar tal problema, devemos alterar o registro do windows 95 em tempo de carga dos arquivos iniciais do sistema (autoexec.bat, config.sys), adotando os seguintes procedimento:

    1. Criar um arquivo com os ítens do registro que deverão ser alterados, por exemplo:
    2. REGEDIT4
      [HKEY_LOCAL_MACHINE\Network\Logon]
      "username"=""
      [HKEY_LOCAL_MACHINE\System\CurrentControlSet\control\ComputerName\ComputerName]
      "ComputerName"="${macid}"
      [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]
      "ComputerName"="${macid}"
      

      A variável "${macid}" será traduzida pelo bpbatch em tempo de boot para os seis últimos números representativos do endereço MAC da placa de rede.
      Salvar este arquivo no servidor, no diretório tftpboot com o nome de patch.ref, por exemplo.

    3. Adicionar a seguinte linha no arquivo autoexec.bat:
    4. REGEDIT /L:c:\WINDOWS\SYSTEM.DAT /R:C:\WINDOWS\USER.DAT C:\BOOT\altera.REG
      

    2.3.1 Salvando a Imagem no Servidor

    1. Informar na na janela de logon do windows o nome do usuario criado no servidor linux para criação das imagens
    2. Entrar no Windows Explorer selecionar a opção Ferramentas/Mapear Unidade de Rede, no ítem caminho informar o nome do compartilhamento no servidor que será utilizado para a geração da imagem (\\servidor\usuario)
    3. Entrar no prompt do DOS, na unidade de rede atribuída quando executado o mapeamento e executar o mrzip, por exemplo:
    4. d:\>mrzip w95
      
    5. Após a execução do comando, o disco rígido será comprimido, e a imagem será gerada no diretório de imagens do servidor (arquivo com extensão imz). Caso a imagem ultrapasse o tamanho setado através da opção SetFragmentSize, serão gerados arquivos com extensão .imN, onde N representa o número de seqüencia da imagem.
      A opção SetFragmentSize não deveria ser necessária, mas em algumas gerações de imagens houve problema de loop de carregamento de arquivo devido ao tamanho da primeira imagem ter ultrapassado os 90 Mb.

    2.3.2 Configurando Arquivos do Servidor para a Nova Imagem

    Passos a serem seguidos:

    1. Mover do diretório imagens para o diretório tftpboot os arquivos com extensão im*
    2. Criar arquivo para procedimentos de boot a serem executados pelo bpbatch. Este arquivo deverá ter o mesmo nome da imagem e a extensão bpb,abaixo exemplo deste arquivo:
    3. drawgif "logo.gif"
      hidelog
      setpartitions "bigdos:1024"
      setbootpart 1
      fullunzip "w95.imz" 1
      set macid = "$BOOTP-Client-ID"{3-6}
      patch "patch.ref" "{:1}windows/patch.reg"
      hidebootprom
      hdboot :1
      


    2.4 Criando Imagens para Windows NT

    Como o mrzip não suporta NTFS, a solução para criar uma imagem do NT é instala-lo usando a FAT16, desta forma o mrzip conseguirá ler o sistema de arquivos gerando a imagem desejada.

    O procedimento para instalação do NT é o seguinte:

  • Copie o seu w95.bpb para wnt.bpb, modificando as partições através da alteração da cláusula
  • setpatitions --> setpartitions "BIGDOS:512 BIGDOS:512"
  • Reinicie sua máquina usando o novo script
  • Instale o NT no drive C
  • Remova o windows 95 do disco
  • Edite o boot.ini (c:\boot.ini), retirando a linha que faz referencia ao boot pelo windows 95
  • Se sua imagem for utilizada em mais de uma máquina, será necessário inibir a rede do NT, pois não é possível importar dados antes da carga do sistema operacional, como é feito no windows 95, desta forma assim que a segunda máquina entrar no ar, acontecerão problemas de nomes e ips repetidos.
    Acesse as propriedades do Meu computador-->Perfis de hardware-->propriedades de configuração original, na opcão rede, marque perfil de hardware com rede desativada
  • Reinicie sua máquina, pressionando a barra de espaço para abortar o boot remoto, ou utilize a opção hdboot do bpbatch, fazendo as modificações que julgar necessário.
  • 2.4.1 Salvando a Imagem no Servidor

    Como o NT não permite acesso direto ao disco, o mrzip não consegue ler os setores de boot. A melhor maneira para gerar a imagem no servidor é usar a imagem do windows 95, rodando o mrzip de dentro de uma janela DOS. Para que isto seja feito é necessário mudar o arquivo winnt.bpb, fazendo que a imagem do windows 95 seja restaurada na segunda partição, ficando desta forma a primeira com o NT, podendo-se gerar a imagem. Abaixo como deve ficar o winnt.bpb:

    hidelog
    setpartitions "BIGDOS:512 BIGDOS:512"
    setbootpart 2
    fullunzip "win95.imz" 2
    hidebootprom
    hdboot :2
    
    1. Se você tiver algum patch (alteração de registro do windows), mude para "{:2}"
    2. Inicie sua máquina com este script, desta forma voce terá o windows 95 rodando no drive C e o todos os arquivos do NT no drive D
    3. Gere a imagem do NT exatamente como se fosse a do windows 95, trocando o drive de origem para D

    2.4.2 Configurando Arquivos do Servidor para a Nova Imagem

    1. Altere novamente o winnt.bpb como abaixo:
    2. hidelog
      setpartitions "BIGDOS:512 BIGDOS:512"
      setbootpart 1
      fullunzip "winnt.imz" 1
      clean 2
      #fullunzip "win95.imz" 2
      #hdboot :2
      hidebootprom
      hdboot :1
      
    3. A configuração do NT está pronta, você pode usar uma partição só, mas no caso de precisar gerar novamente a imagem, será necessário refazer o winnt.bpb, sendo que para fins educacionais é até bom ter a segunda partição livre, pois os alunos poderão formatá-la com o NTFS


    2.5 Criando Imagens para Linux

    1. Instale o Linux com todos os pacotes que julgar necessário.
    2. Dependendo da distribuição que for usada, será necessário atualizar o kernel pelo menos até a versao 2.0.32, pois caso se deseje acrescentar o suporte a filecache, o patch fornecido (filecache.tar.gz) é para esta versão do kernel (verifique esta informação no arquivo patch-filecache).
    3. A documentação sobre como aplicar patch ao kernel pode ser obtida no arquivo /usr/src/linux/README, enquanto que os patches para o kernel podem ser obtidos em ftp.kernel.org .
    4. Para aplicar o patch-filecache, copie este arquivo para o diretorio /usr/src, e digite o comando: cat patch-filecache | patch -p0.
    5. Rode o make menuconfig, ou make xconfig, habilitando dentro do ítem filesystems a opção filecache.
    6. Recompile e instale o novo kernel.
    7. Copie o arquivo binário filecache para o diretório /sbin.
    8. Crie um mount-point chamado /cache (mkdir /cache).
    9. Crie um arquivo no /etc com o nome de filecache.conf, adicionando as seguintes linhas:
    10. Max 100 MB 50 % #
      Cache /cache /usr
    11. Crie uma entrada no /etc/fstab para o mount-point, exemplo abaixo:
    12. /dev/hda1               /                       ext2    defaults        1 1
      /dev/hda2               swap                    swap    defaults        0 0
      /dev/fd0                /mnt/floppy             ext2    noauto          0 0
      192.168.5.99:/tftpboot/usr      /cache          nfs     defaults
      none                    /proc                   proc    defaults        0 0
      
    13. Copie o conteúdo do /usr para o servidor.
    14. Exporte no servidor, o diretório escolhido como repositório do /usr das imagens Linux atraves do /etc/exports, abaixo exemplo deste arquivo:
    15. /tftpboot/usr 192.168.73.0/255.255.255.0(no_root_squash,ro)
    16. Mova o diretório /usr para /usr.orig
    17. Crie um link simbólico do /cache para /usr ( ln -s /cache /usr).
    18. Copie o arquivo filecache.init para o diretório /etc/rc.d/init.d
    19. Crie um link simbólico de /etc/rc.d/rc3.d/S35filecache para /etc/rc.d/init.d/filecache.init. (ln -s /etc/rc.d/init.d/filecache.init /etc/rc.d/rc3.d/S35filecache).
    20. Reinicie a sua máquina com a nova configuração, verificando se tudo funciona a contento.
    21. Para que o linux use o bootp para configurar a interface de rede, é necessário alem de habilitar esta opção no kernel, alterar o arquivo /etc/sysconfig/scripts/ifcfg-eth0, veja exemplo abaixo:
    22. DEVICE=eth0
      #IPADDR=192.168.41.113
      #NETMASK=255.255.255.0
      #NETWORK=192.168.41.0
      #BROADCAST=192.168.41.255
      BOOTP=yes
      ONBOOT=yes
      
    23. Reinicie sua máquina e verifique se a interface de rede será corretamente configurada.
    24. Tudo funcionando, remova o diretório /usr.orig, e sua imagem do Linux está pronta.

    2.5.1 Salvando a Imagem no Servidor

    1. Copie o kernel atual de sua máquina para o diretório /tftpboot do servidor, com o nome de kernel.krn.
    2. Copie o arquivo mrzip para a sua máquina, para o diretório "/tmp".
    3. Crie um arquivo de instruções para o mrzip, com o nome de linux.mrz, exemplo abaixo:
    4. showlog
      filter -"tmp/*"
      fullzip "/" "/tmp/linux.imz"
    5. Execute o mrzip (./mrzip linux).
    6. Copie o arquivo linux.imz gerado no diretorio /tmp para o diretório /tftpboot do servidor.

    2.5.2 Configurando Arquivos do Servidor para a Nova Imagem

    1. Crie um arquivo linux.bpb (instruções para o bpbatch) , no diretório /tftpboot, exemplo abaixo:
    2. hidelog
      setpartitions "linux-ext2:992 linux-swap:32"
      fullunzip "linux.imz" 1
      clean 2
      linuxboot "linux.krn" "root=/dev/hda1"
    3. Inclua a opção de boot para linux em seu menu de opções.


    3. Considerações Finais

    3.1 Dicas

    1. Mantenha no servidor linux cópia dos softwares utilizados nas estações, por exemplo windows 95, office, etc.., desta forma o processo de reconfiguração de imagens poderá ser otimizado através de acesso aos arquivos de software via rede.
    2. Quando estiver no processo de geração de imagens, procure sempre usar uma segunda máquina para o teste da nova imagem, pois em caso de algum esquecimento basta corrigi-lo na máquina onde a imagem foi gerada.
    3. Crie atalhos dentro da área de trabalho dos programas mais usados no windows
    4. Em ambiente de laboratórios, procure segmentar a rede adicionando mais placas de rede ao servidor, bloqueando se possível o acesso a rede do Campus
    5. Não esqueça de executar o comando chmod 755 no diretório tftpboot, pois caso contrário o programa tftpd não conseguirá carregar os arquivos.
    6. Caso sua imagem tenha X (interface gráfica), para que as definições de teclado sejam usadas, é necessário descomentar a linha XkbDisable, no arquivo de configuração (/etc/X11/XF86Config).
    7. Mantenha uma opção escondida no menu inicial, com a cláusula interact, isto permitirá que você faça testes, ou manutenções, sem precisar alterar o arquivo dhcpd.conf.

    3.2 Resolução de Problemas

    1. Não se consegue mapear o servidor no Windows Explorer.
      Verifique se o tcp/ip está corretamente configurado, selecione o tcp/ip como protocolo padrão.
    2. Mensagem de erro alertando sobre mesmo nome de computador na rede ou desabilitando a interface de rede
      Verifique se o registro do windows foi alterado, provavelmente foi esquecida a chamada do regedit no autoexec.bat, ou a alteração do arquivo patch.ref, atraves do comando patch, dentro do arquivo bpb responsável pela carga da imagem.
    3. Problemas com a carga de imagens.
      Reinicie a máquina, este problema geralmente ocorre devido a timeout do reply do servidor de tftp.
    4. DHCP não funciona.
      Adicione a seguinte linha no /etc/rc.d/rc.local, ou outro script de inicialização:
      route add -host 255.255.255.255 eth0