19.7. Operação Sem Disco (Diskless Operation)

Atualizado por Jean-François Dockès.

Uma máquina FreeBSD pode ser inicializada pela rede e operar sem um disco local, usando sistemas de arquivos montados de um servidor NFS. Nenhuma modificação é necessária no sistema, além dos arquivos de configuração. Tal sistema é fácil de configurar porque todos os elementos necessários estão prontamente disponíveis:

Existem muitas formas de configurar estações sem disco. Muitos elementos estão envolvidos, e a maioria pode ser personalizada para atender uma preferência local. A seguir será descrita a configuração de um sistema completo, enfatizando a simplicidade e compatibilidade com os scripts padrão do FreeBSD. O sistema descrito tem as seguintes características:

Cuidado Como descrito, este sistema é inseguro. Ele deve morar em uma área protegida da rede, e não ser confiado por outras máquinas.

19.7.1. Instruções de Configuração

19.7.1.1. Configurando o DHCP/BOOTP

Existem dois protocolos que são comumente usados para inicializar uma estação de trabalho que recupera seus arquivos de configuração através da rede: BOOTP e DHCP. Eles são usados em diversos pontos na partida da estação de trabalho:

  • O etherboot usa o DHCP (por padrão) ou BOOTP (precisa de uma opção de configuração) para encontrar o kernel. (PXE usa DHCP).

  • O kernel usa BOOTP para localizar a raiz NFS.

É possível configurar um sistema para usar somente BOOTP. O programa servidor bootpd(8) está incluído no sistema base do FreeBSD.

Entretanto, o DHCP tem diversas vantagens sobre o BOOTP (melhores arquivos de configuração, possibilidade de usar PXE, mais muitas outras não diretamente relacionadas à operação sem disco), e nós vamos descrever ambas as configurações, BOOTP puro e BOOTP+DHCP, com ênfase no último, o qual vai usar o pacote de software DHCP da ISC.

19.7.1.1.1. Configuração Usando o DHCP da ISC

O servidor isc-dhcp pode responder tanto requisições BOOTP como DHCP.

Desde o lançamento (release) 4.4, o isc-dhcp 3.0 não é parte do sistema base. Você primeiro vai precisar instalar o port net/isc-dhcp3 ou o pacote (package) correspondente. Por favor, veja Capítulo 4 para informações gerais sobre ports e packages.

Uma vez que o isc-dhcp estiver instalado, ele precisa de um arquivo de configuração para rodar, (normalmente chamado /usr/local/etc/dhcpd.conf). Aqui segue um exemplo comentado:

     default-lease-time 600;
      max-lease-time 7200;
      authoritative;

      option domain-name "exemplo.com";
      option domain-name-servers 192.168.4.1;
      option routers 192.168.4.1;

      subnet 192.168.4.0 netmask 255.255.255.0 {
        use-host-decl-names on; (1)
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.4.255;

        host margaux {
          hardware ethernet 01:23:45:67:89:ab;
          fixed-address margaux.exemplo.com;
          next-server 192.168.4.4;(2)
          filename "/tftpboot/kernel.diskless";(3)
          option root-path "192.168.4.4:/data/misc/diskless";(4)
        }
      }
     
(1)
Esta opção diz ao dhcpd para enviar o valor nas declarações host como o nome do sistema para a máquina sem disco. Uma alternativa seria adicionar um option host-name margaux dentro das declarações host.
(2)
A diretiva next-server designa o servidor TFTP (o padrão é usar o mesmo sistema que o servidor DHCP).
(3)
A diretiva filename define que o arquivo que o etherboot vai carregar como o kernel.

Nota: O PXE parece preferir um nome de arquivo relativo, e ele carrega pxeboot, não o kernel (option filename "pxeboot").

(4)
A opção root-path define o caminho do sistema de arquivo raiz, na notação NFS usual.

19.7.1.1.2. Configuração Usando o BOOTP

Aqui segue uma configuração bootpd equivalente. Isto seria encontrado em /etc/bootptab.

Por favor, note que o etherboot precisa ser compilado com a opção não padrão NO_DHCP_SUPPORT para usar o BOOTP, e que o PXE precisa do DHCP. A única vantagem óbvia do bootpd é que ele existe no sistema base.

     .def100:\
        :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\
        :sm=255.255.255.0:\
        :ds=192.168.4.1:\
        :gw=192.168.4.1:\
        :hd="/tftpboot":\
        :bf="/kernel.diskless":\
        :rp="192.168.4.4:/data/misc/diskless":

      margaux:ha=0123456789ab:tc=.def100
     

19.7.1.2. Preparando um Programa de Boot com Etherboot

O Sítio Web do Etherboot contém extensa documentação direcionada principalmente a sistemas Linux, mas apesar de tudo, contendo informações úteis. O texto a seguir vai apenas delinear como você usaria o etherboot em um sistema FreeBSD.

Primeiro você precisa instalar o port ou pacote net/etherboot. O port etherboot pode normalmente ser encontrado em /usr/ports/net/etherboot. Se a árvore dos ports está instalada em seu sistema, apenas digitando make neste diretório deve resolver tudo. Do contrário, veja Capítulo 4 para informações sobre ports e pacotes (packages).

Para nossa configuração, usaremos um disquete de inicialização. Para outros métodos (PROM, ou programa DOS), veja, por favor, a documentação do etherboot.

Para fazer um disquete de inicialização, insira o disquete no leitor na máquina onde você instalou o etherboot, então mude seu diretório atual para o diretório src na árvore etherboot e digite:

     # gmake bin32/devicetype.fd0
   

O devicetype depende do tipo de interface Ethernet na estação de trabalho sem disco. Veja o arquivo NIC no mesmo diretório para determinar o devicetype correto.

19.7.1.3. Configurando os Servidores TFTP e NFS

você precisa ativar o tftpd no servidor TFTP:

  1. Crie um diretório de onde o tftpd vai fornecer arquivos, p.ex. /tftpboot.

  2. Adicione esta linha ao seu /etc/inetd.conf:

    tftp    dgram   udp     wait    root  /usr/libexec/tftpd    tftpd -s /tftpboot
    

    Nota: Parece que pelo menos algumas versões de PXE querem a versão TCP do TFTP. Neste caso, adicione a segunda linha, substituindo dgram udp por stream tcp.

  3. Diga ao inetd para reler seu arquivo de configuração:

    # kill -HUP `cat /var/run/inetd.pid`
    

Você pode colocar o diretório tftpboot em qualquer lugar no servidor. Certifique-se de que a localização está configurada em ambos inetd.conf e dhcpd.conf.

Você também precisa ativar o NFS e exportar o sistema de arquivo adequado no servidor NFS.

  1. Adicione isto ao /etc/rc.conf:

    nfs_server_enable="YES"
    
  2. Exporte o sistema de arquivo onde está localizado o diretório raiz da estação de trabalho sem disco, adicionando o seguinte ao /etc/exports (ajuste o ponto de montagem do volume e troque margaux pelo nome da estação de trabalho sem disco):

    /data/misc -alldirs -ro margaux
    
  3. Diga ao mountd para reler seu arquivo de configuração. Se você realmente precisasse ativar o NFS no /etc/rc.conf no primeiro passo, você provavelmente iria preferir reinicializar.

    # kill -HUP `cat /var/run/mountd.pid`
    

19.7.1.4. Construindo um Kernel Sem Disco

Crie um arquivo de configuração de kernel para o cliente sem disco com as seguintes opções (em acréscimo às opções usuais):

     options     BOOTP      # Use BOOTP to obtain IP address/hostname
      options     BOOTP_NFSROOT  # NFS mount root filesystem using BOOTP info
      options     BOOTP_COMPAT   # Workaround for broken bootp daemons.
   

Você também pode querer usar BOOTP_NFSV3 e BOOTP_WIRED_TO (veja o LINT).

Construa o kernel (Veja Capítulo 9), e copie-o para o diretório do tftp, sob o nome listado em dhcpd.conf.

19.7.1.5. Preparando o Sistema de Arquivo Raiz

você precisa criar um sistema de arquivo raiz para as estações de trabalho sem disco, no local listado como root-path no dhcpd.conf.

A forma mais fácil de fazê-lo é usar o shell script /usr/share/examples/diskless/clone_root. Este script precisa ser personalizado, pelo menos para ajustar o lugar onde o sistema de arquivo será criado (a variável DEST).

Refira aos comentários no topo do script para instruções. Elas explicam como o sistema de arquivo base é construído, e como os arquivos podem ser seletivamente cancelados por versões específicas para operação sem disco, para uma subrede ou, para uma estação de trabalho individual. Eles também dão exemplos para os arquivos /etc/fstab e /etc/rc.conf para operação sem disco.

Os arquivos README em /usr/share/examples/diskless contêm muitas informações técnicas , mas, juntamente com outros exemplos no diretório diskless, eles na realidade documentam um método de configuração que é diferente do usado por clone_root e /etc/rc.diskless[12], o que é um pouco confuso. Use-os apenas para referência, exceto se você preferir o método por eles descrito, sendo que, neste caso, você vai precisar de scripts rc modificados.

19.7.1.6. Configurando o Arquivo de Troca (Swap)

Se necessário, um arquivo de troca (swap) localizado no servidor pode ser acessado via NFS. As opções exatas do bootptab ou dhcpd.conf não são claramente documentadas neste momento. As seguintes sugestões de configuração foram reportadas como funcionais em algumas instalações usando o isc-dhcp 3.0rc11.

  1. Adicione as seguintes linhas ao dhcpd.conf:

             # Global section
              option swap-path code 128 = string;
              option swap-size code 129 = integer 32;
    
              host margaux {
            ... # Standard lines, see above
            option swap-path "192.168.4.4:/netswapvolume/netswap";
            option swap-size 64000;
              }
           
    

    A idéia é que, pelo menos para o cliente FreeBSD, a opção código 128 é o caminho para o arquivo de troca (swap) do NFS, e a opção código 129 é o tamanho do arquivo de troca, em kilobytes. Versões anteriores do dhcpd permitiam uma sintaxe option option-128 "..., que parece não mais funcionar.

    O /etc/bootptab, ao invés, usaria a seguinte sintaxe:

    T128="192.168.4.4:/netswapvolume/netswap":T129=64000

  2. No servidor de arquivo de troca (swap), crie o(s) arquivo(s) de troca:

             # mkdir /netswapvolume/netswap
              # cd /netswapvolume/netswap
              # dd if=/dev/zero bs=1024 count=64000 of=swap.192.168.4.6
              # chmod 0600 swap.192.168.4.6
           
    

    192.168.4.6 é o endereço IP do cliente sem disco.

  3. No servidor de arquivo de troca (swap) NFS, adicione a seguinte linha ao /etc/exports:

             /netswapvolume  -maproot=0:10 -alldirs margaux
           
    

    Então diga ao mountd para reler o arquivo exports, como acima.

19.7.1.7. Casos Diversos

19.7.1.7.1. Rodando com um /usr Somente-Leitura

Se estação de trabalho sem disco está configurada para rodar X, você precisará ajustar o arquivo de configuração xdm, o qual coloca o registro (log) de erros em /usr, por padrão.

19.7.1.7.2. Usando um Servidor Não-FreeBSD

Quando o servidor do sistema de arquivo raiz não roda FreeBSD, você terá que criar o sistema de arquivo raiz em uma máquina FreeBSD e depois copiá-lo para seu destino, usando o tar ou cpio.

Nesta situação, às vezes existem alguns problemas com arquivos especiais em /dev, por causa de tamanhos inteiros maior/menor (major/minor) diferentes. A solução para este problema é exportar um diretório da máquina não-FreeBSD para criar as entradas de dispositivos corretas (FreeBSD 5.0 e posteriores usam devfs(5) para alocar nós de dispositivos - device nodes - transparentemente para o usuário, executar MAKEDEV nestas versões é inútil).

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.