Artigo: Um guia sobre como implementar um terminal diskless X

Jerry Kendall

    
  

28-December-1996

FreeBSD is a registered trademark of the FreeBSD Foundation.

3Com and HomeConnect are registered trademarks of 3Com Corporation.

Microsoft, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media and Windows NT are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.

Sun, Sun Microsystems, Java, Java Virtual Machine, JavaServer Pages, JDK, JRE, JSP, JVM, Netra, Solaris, StarOffice, Sun Blade, Sun Enterprise, Sun Fire, SunOS, and Ultra are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the " or the ® symbol.

Com a ajuda de alguns amigos da lista FreeBSD-hackers, eu pude criar um terminal X diskless. A criação do terminal X necessitou incialmente da criação de um sistema diskless com utilitários minimos montados via NFS. Estes mesmos passos foram utilizados para criar 2 sistemas diskless distintos. O primeiro é o altair.example.com. Um terminal X diskless o qual eu executo no meu velho 386DX-40. Ele possui um HD de 340 Mb, mas eu não quiz mudá-lo. Assim, ele da boot a partir do antares.example.com através da rede Ethernet. O segundo sistema é um 486DX2-66. Eu o configurei um FreeBSD Diskless, o qual não utiliza o disco local. O servidor neste caso é uma SUN 670MP executando SunOS" 4.1.3. O mesmo procedimento de configuração foi necessário em ambos.

Tenho certeza de que existem itens que precisam ser adicionados a este tutorial. Por favor enviem-me qualquer comentário.


1. Criando o diskete de boot (No sistema diskless)

Uma vez que os carregadores de boot via rede podem não funcionar corretamente com alguns dos TSRs (programas residentes em memória) que o MS-DOS® utiliza, é melhor criar um disco de boot dedicado ou, se você puder, crie um menu MS-DOS (através dos arquivos config.sys/autoexec.bat) o qual irá perguntar qual configuração carregar quando o sistema iniciar. Este último é o método que eu utilizo e ele funciona muito bem. O meu menu MS-DOS (6.x) está abaixo.

Exemplo 1. config.sys

[menu]
menuitem=normal, normal
menuitem=unix, unix
[normal]
....
normal config.sys stuff
...
[unix]

Exemplo 2. autoexec.bat

@ECHO OFF
goto %config%

:normal
...
normal autoexec.bat stuff
...
goto end

:unix
cd \netboot
nb8390.com

:end

2. Obtendo o programa de boot via rede (No servidor)

Compile os programas de net-boot os quais estão localizados no diretório /usr/src/sys/i386/boot/netboot. Você deve ler os comentários no topo do arquivo Makefile. Ajuste-o como necessário. Faça backup do original para o caso de algo sair errado. Quando a compilação terminar, deverá haver 2 executáveis MS-DOS, nb8390.com e nb3c509.com no diretório. Um destes 2 arquivos será o que você vai necessitar para executar na estação Diskless. Ele irá carregar o kernel a partir do servidor de boot. Neste momento, copie ambos os programas para o diskete de boot MS-DOS criado anteriormente.


3. Determinando qual programa executar (No sistema diskless)

Se você sabe qual o chipset da sua placa de rede ethernet, isto é fácil. Se você possui um chipset NS8390 ou um chipset baseado no chipset NS8390, utilize o nb8390.com. Se possui um chipset baseado no 3Com® 509, utilize o programa de boot nb3C509.com. Se você não estiver certo sobre qual você possui, tente um deles, se ele exibir a mensagem No adapter found, tente o outro. Beyond that, you are pretty much on your own.


4. Dando boot através da rede

De boot no sistema diskless sem utilizar o arquivo config.sys e o autoexec.bat. Tente executar o programa de boot para o sua placa de rede.

A minha placa de rede é uma WD8013 mode 16 bit, logo eu utilizo o arquivo nb8390.com

C:> cd \netboot
C:> nb8390

Boot from Network (Y/N) ?  Y

BOOTP/TFTP/NFS bootstrap loader     ESC for menu

Searching for adapter..
WD8013EBT base 0x0300, memory 0x000D8000, addr 00:40:01:43:26:66

Searching for server...

Neste momento, o meu sistema diskless está tentando encontrar uma maquina para atuar como um servidor de boot. Observe a linha de endereço (addr) acima, você vai precisar deste núumero mais tarde. Resete o sistema diskless e modifique os seus arquivos config.sys e autoexec.bat para que eles executem estes passos automaticamente para você. Talvez em um menu. Se você tiver que executar o nb3c509.com ao invés do nb8390.com o output será o mesmo que o mostrado acima. Se você receber a mensagem No adapter found como retorno após a mensagem Searching for adapter..., verifique se você ajustou corretamente as definições de tempo de compilação no arquivo Makefile.


5. Permitindo que os sistemas deem boot através da rede (No servidor)

Certifique-se que o arquivo /etc/inetd.conf Possui as entradas para os serviços de tftp e bootps. As minhas entradas estão listadas abaixo:

tftp   dgram   udp     wait    nobody  /usr/libexec/tftpd      tftpd /tftpboot
bootps  dgram  udp  wait  root  /usr/libexec/bootpd bootpd /etc/bootptab

Se você precisou alterar o arquivo /etc/inetd.conf envie um sinal de HUP para o inetd(8). Para fazer isso, obtenha o número de processo do inetd com o comando ps -ax | grep inetd | grep -v grep. Uma vez que você saiba qual é o número do processo, envie o sinal de HUP Faça isso através do comando kill -HUP <pid>. Isto irá forçar o inetd a reler o seu arquivo de configuração.

Você se lembrou de anotar a linha de endereço do output do boot loader no sistema diskless? Se não, descubra qual é, pois você vai precisar dele agora.

Adicione uma entrada ao arquivo /etc/bootptab ( Você pode precisar criar o arquivo). Ele deve ser idêntico a este:

altair:\
        :ht=ether:\
        :ha=004001432666:\
        :sm=255.255.255.0:\
        :hn:\
        :ds=199.246.76.1:\
        :ip=199.246.76.2:\
        :gw=199.246.76.1:\
        :vm=rfc1048:

O significado das linhas é o seguintes:

altair O nome do sistema diskless sem o nome de domíinio.
ht=ether Especifica o tipo de hardware como ethernet.
ha=004001432666 O endereço de hardware da placa de rede (MAC Address).
sm=255.255.255.0 A mascara de rede.
hn Diz ao servidor para enviar o hostname do cliente para o cliente.
ds=199.246.76.1 Diz ao cliente quem é o servidor de domíinio.
ip=199.246.76.2 Diz ao cliente qual é o seu endereço IP.
gw=199.246.76.1 Diz ao cliente qual é o seu gateway padrão.
vm=rfc1048 Apenas deixe ele aqui, não se preocupe com ele agora  

Nota: Certifique-se de configurar o seu endereço IP corretamente, o endereço acima é o meu ;) .

Crie o diretório /tftpboot no servidor que irá conter os arquivos de configuração do sistema diskless ao qual o servidor irá servir. Estes arquivos serão nomeados cfg.ip onde ip é o endereço IP do sistema diskless. O arquivo de configuração para o host altair é o /tftpboot/cfg.199.246.76.2. E o seu conteúdo é o seguinte:

rootfs 199.246.76.1:/DiskLess/rootfs/altair
hostname altair.example.com

A linha hostname altair.example.com simplesmente instrui o sistema diskless sobre qual é o seu nome de domíinio completo.

A linha rootfs 199.246.76.1:/DiskLess/rootfs/altair instrui o sistema diskless sobre onde o seu sistema de arquivos raiz montável via NFS está localizado.

Nota: O sistema de arquivo raiz, montado via NFS, será montado em modo de apenas leitura.

Se for preciso a hierarquia de diretórios do sistema diskless pode ser re-montada permitindo operações de leitura e escrita.

Eu utilizo o meu 386DX-40 reserva como um terminal X dedicado.

A hierarquia para o host altair é:

/
/bin
/etc
/tmp
/sbin
/dev
/dev/fd
/usr
/var
/var/run

A lista atual de arquivos é seguinte:

-r-xr-xr-x  1 root  wheel  779984 Dec 11 23:44 ./kernel
-r-xr-xr-x  1 root    bin  299008 Dec 12 00:22 ./bin/sh
-rw-r--r--  1 root  wheel     499 Dec 15 15:54 ./etc/rc
-rw-r--r--  1 root  wheel    1411 Dec 11 23:19 ./etc/ttys
-rw-r--r--  1 root  wheel     157 Dec 15 15:42 ./etc/hosts
-rw-r--r--  1 root    bin    1569 Dec 15 15:26 ./etc/XF86Config.altair
-r-x------  1 bin     bin  151552 Jun 10  1995 ./sbin/init
-r-xr-xr-x  1 bin     bin  176128 Jun 10  1995 ./sbin/ifconfig
-r-xr-xr-x  1 bin     bin  110592 Jun 10  1995 ./sbin/mount_nfs
-r-xr-xr-x  1 bin     bin  135168 Jun 10  1995 ./sbin/reboot
-r-xr-xr-x  1 root    bin   73728 Dec 13 22:38 ./sbin/mount
-r-xr-xr-x  1 root  wheel    1992 Jun 10  1995 ./dev/MAKEDEV.local
-r-xr-xr-x  1 root  wheel   24419 Jun 10  1995 ./dev/MAKEDEV

Se você não estiver utilizando o devfs(5) (o que é default no FreeBSD 5.X), você não deve se esquecer de de executar o comando MAKEDEV all dentro do diretório dev.

O meu arquivo /etc/rc no host altair é o que se segue:

#!/bin/sh
#
PATH=/bin:/
export PATH
#
# configura o localhost
/sbin/ifconfig lo0 127.0.0.1
#
# configura a placa de rede
/sbin/ifconfig ed0 199.246.76.2 netmask 0xffffff00
#
# monta o sistema de arquivos raiz via NFS
/sbin/mount antares:/DiskLess/rootfs/altair /
#
# monta o sistema de arquivos /usr via NFS
/sbin/mount antares:/DiskLess/usr /usr
#
/usr/X11R6/bin/XF86_SVGA -query antares -xf86config /etc/XF86Config.altair > /dev/null 2>&1
#
# Reboota depois que sair do X
/sbin/reboot
#
# Finaliza o script
exit 1

Qualquer comentário e todas as perguntas são bem vindas.


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>.