Instalação OpenBSD num sparc por netboot
Neste tutorial irei mostra-vos como podem fazer netboot com o vosso sparc, de maneira a instalar o OpenBSD. Isto é útil quando não temos uma drive de disquetes ou de CDROM no mesmo. Vou usar um ftp mirror para fazer download de alguns ficheiros para a instalação, no entanto se tiver um CD set do OpenBSD (como eu) encontrará os ficheiros necessários no CD 3.
Qualquer comentário é bem vindo: rgouveia (at) cosmico (.) net
Passos a seguir
1: Entender como as coisas funcionam
2: O que vamos precisar do sparc
3: Configurar o servidor
3.1: /etc/ethers
3.2: /etc/hosts
3.3: Arranjar o bootloader para o sparc
3.4: Criar o /tftpboot/ e meter lá dentro o bootloader
3.5: /etc/bootparams
3.6: /etc/exports e o kernel
3.7: /etc/rc.conf.local
4: Arrancar o sparc
5: Problemas
1. Entender como as coisas funcionam
Seguindo a man page diskless(8) podemos ver que existem 3 fases neste processo :
Fase 1 - A PROM carrega um programa de arranque;
Fase 2 - O programa de arranque, por sua vez, carrega o kernel;
Fase 3 - O kernel monta, através de NFS, as partições root e swap.
Na primeira fase, a PROM carrega o programa de arranque. No nosso caso o sparc vai usar o RARP para determinar o seu endereço IP e depois usar o TFTP para fazer download do programa de arranque que está alojado num servidor, que por sua vez respondeu ao pedido inicial do RARP.
Na fase 2, o programa de arranque (boot.net) vai carregar o kernel (bsd.rd: "RAM disk kernel", que também vai montar a partição root e outros programas essenciais à instalação do OpenBSD na RAM, daí o seu nome). Mais precisamente é isto que acontece: o programa de arranque obtém o endereço IP através do RARP, de seguida tenta obter o nome do sparc e o endereço IP do servidor fazendo um broadcast com um pedido RPC/ BOOTPARAMS / WHOAMI com o seu próprio endereço IP. De seguida vai obter a path no servidor onde está localizada a partição root do sparc usando, para isso um pedido RPC / BOOTPARAMS / GETFILE desta vez com o seu nome.
Depois disto tudo vai obter o "root file handle" chamando o mountd(8) com a path da partição root do sparc, seguindo-se a localização do "kernel file handle" chamando novamente o NFS para procurar no "root file handle". No fim irá carregar o kernel através de NFS e ler as "calls" no "kernel file handle", acabando por transferir o controlo para "kernel entry point".
Chegado a este ponto não precisamos de continuar para a fase 3 (onde o kernel iria montar as partições root e swap, por NFS) porque o nosso kernel (bsd.rd) vai montar na RAM o seu próprio sistema de ficheiros.
2. O que vamos precisar do sparc
Vamos precisar do endereço MAC da placa de rede. Podemos obte-lo, quando o sparc está iniciando. Temos de atribuir um endereço IP ao mesmo também.
Vou usar o 192.168.0.5 como exemplo até ao fim deste tutorial. Vamos ter de converter este IP para hexadecimal e adicionar um ponto no seu fim seguido da arquitectura sun do nosso sparc (o meu é SUN4M: sparcstation 4). Tente descobrir o seu aqui ou procure no google.
Podemos usar o bc(1) para fazer a conversão: $ bc obase=16 192 C0 168 A8 0 0 5 5
Portanto ficaria em C01680005.SUN4M
Se tiverem problemas em usar o bc(1), vejam a parte de "Problemas" para uma alternativa.
3. Configurar o servidor
Iremos agora configurar o servidor. Eu estou usando o meu ibook, correndo OpenBSD 3.4. Iremos editar alguns ficheiros e começar alguns daemons. Ao sparc vai ser dado o nome "sparc", com o endereço IP "192.168.0.5"
3.1. Adicione o endereço MAC do sparc ao ficheiro /etc/ethers(5)no servidor, deste modo:
8:0:20:7:C5:C7 sparc
Se não tiver o ficheiro, crie-o.
3.2. Adicione agora uma entrada para o sparc, no ficheiro /etc/hosts(5):
192.168.0.5 sparc
3. Faça download do bootloader (boot.net) para sparc dum OpenBSD mirror por exemplo
ftp://ftp.openbsd.org.ua/pub/OpenBSD/3.4/sparc/boot.net
3.4. Crie o directório /tftpboot/ e copie o ficheiro boot.net para lá. Este directório, que destina-se ao TFTPD(8) daemon, será onde o sparc irá buscar o bootloader. Temos de mudar o nome do bootloader (boot.net) para o nome que o sparc vai fazer o pedido para o servidor (use o nome que obteve em cima usando o bc(1) junto com a arquitectura sun do seu sparc)
3.5. Vamos agora configurar o ficheiro do bootparamd(8). Este daemon será usado na fase dois. Adicionamos o "sparc" à base de dados do bootparamd, no ficheiro /etc/bootparams(5):
sparc root=servidor_netboot:/export/sparc/root
3.6. Vamos agora configurar o ficheiro do nfsd(8), de maneira a que possa distribuir ficheiros. Crie o ficheiro /etc/exports, e ponha o seguinte directório:
/export/sparc/ -maproot=root sparc
No nosso caso iremos usar o directório acima para distribuir o nosso kernel. Portanto ponha o kernel lá dentro. Pode obter o kernel também através dum mirror OpenBSD: ftp://ftp.openbsd.org.ua/pub/OpenBSD/3.4/sparc/bsd.rd "sparc" é o cliente que terá accesso ao directório /export/sparc/
3.7. Vamos configurar os daemons que irão servir o nosso sparc. No meu sistema OpenBSD 3.4, adicionei ao /etc/rc.conf.local(8) o seguinte:
portmap=YES nfs_server=YES rarpd_flags="-a" bootparamd_flags=""
Edite o ficheiro /etc/inetd.conf(8) e tire o "#" da seguinte linha:
tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot
O INETD(8) já estava configurado para arrancar no boot, por isso não o adicionei ao rc.conf.local. Em alternativa podiamos ter começado desde já os daemons e não usar o rc.conf.local, mas eu prefiro fazer desta maneira.
Reinicie o seu servidor, de maneira que as alterações no rc.conf.local tenham efeito.
4. Arrancar o sparc
Agora arranque o seu sparc com o seguinte comando: "boot net bsd.rd", ou nalguns sparcs tem de ser: "boot net-tpe bsd.rd". Após alguns momentos deverá ver o kernel do OpenBSD a carregar parando num prompt a perguntar
se quer instalar ou fazer um upgrade ao sistema.
5. Problemas
A edição de ficheiros deve ser feita com utilizador root, utilizando o sudo(8) por exemplo;
Tenha certeza que está usando o bsd.rd e não o bsd;
Use o tcpdump(8) no servidor e veja o que se está a passar. É também útil para descobrimos o nome que o sparc irá fazer o pedido (no passo 4), invés de usar o bc(1).
Mais informação aqui:
diskless(8) e as várias man pages referenciadas aí;
o NetBSD Diskless HOWTO;
OpenBSD website sobre sparc e o ficheiro de instalação de sparc também; e claro a FAQ do OpenBSD.
Copyright (c) 2004 Rodolfo Gouveia.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found here.