O autor deste apêndice é Wojciech Puchar
Este apêndice descreve o procedimento que utilizamos para instalar o NetBSD sem fazer uso do sysinst. Pode-se perguntar por que não usá-lo. Eis algumas razões:
possibilidade de usar opções não padronizadas na criação dos sistemas de arquivos.
porque é fácil!
para ter total domínio do sistema e compreender todas as operações efetuadas.
para aprender a preparar os próprios disquetes de instalação, inserindo outros acessórios úteis no lugar do sysinst.
Este apêndice descreve apenas a configuração dos sistemas i386, em que o NetBSD será o único sistema operacional presente no disco rígido. Procurei entretanto evidenciar as seções específicas desta arquitetura, esperando receber alguma contribuição sobre as outras (a serem enviadas, em inglês, para wojtek@3miasto.net).
Para o entendimento deste apêndice é suposto certo conhecimento dos comandos de base do Unix (cd, ls, cp, tar, etc.).
O processo de instalação é dividido da seguinte maneira:
particionamento do disco rígido
criação do/dos sistemas de arquivos
instalação do carregador de boot (dependente da plataforma e não presente em algumas versões como a versão para sparc, etc.)
descompressão dos tarballs nas partições criadas
configuração final (criação dos dispositivos /dev, /etc/fstab, fixação do hostname, etc.)
Os esquemas de particionamento podem ser simples ou até mesmo muito complexos. Para os fins do presente apêndice não interessa discutir qual seja o melhor esquema possível. Limitar-nos-emos a descrever um esquema clássico para o Unix, que compreende uma pequena partição root, uma partição de swap e uma partição /usr para todo o resto.
Neste apêndice, como em muitos manuais do NetBSD, falar-se-á freqüentemente de "label" e de "disk label". O disk label corresponde às estruturas utilizadas pelo NetBSD (e pelos sistemas BSD em geral) para memorizar as informações relativas às partições. Portanto, a criação do disklabel equivale ao particionamento.
Se o seu sistema tem memória em abundância e você está absolutamente certo de que jamais terá necessidade do swap, você pode pular esta seção. Todavia, nos modernos discos rígidos de grandes dimensões, geralmente não é problema deixar uma certa quantidade de espaço para a partição de swap, com o benefício de se poder inicializar sem problemas um grande número de programas ao mesmo tempo.
Não existem fórmulas simples para se determinar a dimensão da partição de swap. A única verdadeira regra diz que é melhor ter muito que ter muito pouco. Isso porque ficar sem swap significa ter que encerrar não apenas o último processo inicializado, mas também todos os que têm necessidade de alocar memória. Pode tratar-se até mesmo do /sbin/init, o que levará ao colapso do sistema. Se você tem um daqueles discos rígidos enormes >10GB, deixe ao menos 500MB para a área de swap (mas pode ser bem mais). A única contra-indicação é que o uso do swap comporta a alocação estática de 16 bytes para cada página i386 (4KB), o que significa usar 1MB de memória para cada 256MB de swap. Não é uma coisa catastrófica, mas em uma máquina com 16MB pode tornar-se um problema.
Resumindo: se você tem um disco suficientemente grande, aloque uma área generosa para o swap. Do contrário, procure regular-se de acordo com a memória necessária às aplicações que pretende utilizar simultaneamente.
Pode-se pensar que o posicionamento da partição de swap seja indiferente. Isso é verdadeiro no que diz respeito aos discos de tipo mais antigo (por exemplo, MFM). Nos discos mais recentes (entenda-se discos com mais de 80MB), contudo, sobre as trilhas externas são gravados mais dados que nas internas, por causa de suas maiores dimensões. Isto leva a um I/O mais veloz nas trilhas externas, que se encontram no início do disco. Portanto, a área de swap será mais veloz se se encontra na zona inicial.
O sistema de arquivos padrão usado pelo NetBSD é aquele a que se denomina "ffs" ou "ufs" (Fast File System ou Unix File System). Ainda que "fast" (rápido) não signifique "o mais veloz do mundo", trata-se de um sistema de arquivos que se presta bem para o uso geral e dotado de mecanismos de proteção em caso de queda do sistema (crash). Para a criação do sistema de arquivos pode-se limitar à execução do comando newfs sem qualquer parâmetro, mas vale a pena procurar otimizar-lhe o uso. Vejamos agora uma breve descrição dos principais parâmetros em que intervir:
fixação do percentual de espaço reservado. O default de 10% tende ao despedício. Pode-se descer aos 5% sem muito problema, mas é bom não descer abaixo desse valor porque enchendo muito um sistema de arquivos ffs nós o tornamos mais lento.
fixação em bytes da dimensão do bloco. Para os discos de grandes dimensões usar 8192 (8KB), enquanto que para os muito pequenos (<500MB) convém usar 4096 para economizar espaço. Usando blocos ainda maiores não se aceleram as operações e se pode desperdiçar espaço, a menos que não se memorize predominantemente arquivos de grandes dimensões como os MP3 e os arquivos de vídeo.
fixação da dimensão do fragmento. Um bloco pode ser subdividido até a um máximo de 8 fragmentos e, portanto, convém fixar uma dimensão equivalente a 1/8 da dimensão do bloco: 512 bytes para blocos de 4096 bytes e 1024 bytes para blocos de 8192 bytes. O fragmento é a unidade de alocação mínima para os arquivos (como o cluster para o Windows).
os inodes são estruturas usadas para memorizar informações sobre os arquivos. Para cada arquivo deve haver pelo menos um inode (até mesmo mais de um para permitir ao ffs memorizar os dados do arquivo vizinho do próprio arquivo). A dimensão por default de 4096 não se adapta aos discos de grandes dimensões porque permite que se tenha até 5 milhões de arquivos em um dispositivo de 20MB. Uma avaliação pelo máximo aconselha o uso de -i 16384 para discos >2GB e de -i 32768 para discos a partir de 8GB. Usando valores maiores não se economiza mais espaço porque um inode ocupa 128 bytes
Por exemplo, as opções que uso para uma partição >10GB são
newfs -m 5 -b 8192 -f 1024 -i 32768 /dev/{nome_da_partição}
A leitura da página de manual do newfs é enfaticamente aconselhada.
Durante o processo de inicialização o kernel (que usualmente se chama /netbsd) deve ser carregado na memória pelo disco. A BIOS do PC (e a firmware das outras arquiteturas) não consegue administrar abstrações como os sistemas de arquivos, limitando-se a carregar na memória o primeiro setor do disco e a executar seu código. Este código determina a posição do carregador da inicialização (bootloader) no disco e o carrega. O próprio carregador de inicialização, enfim, pode gerir o sistema de arquivos e carrega o kernel. Uma vez que no setor de inicialização devem ser memorizadas as coordenadas físicas do carregador da inicialização (/boot) não nos podemos limitar a copiar o carregador de inicialização /boot na partição designada, mas é necessário executar o seguinte comando:
# /usr/mdec/installboot -v /usr/mdec/biosboot.sym /dev/rwd0a
No que se refere à descompressão dos tarballs e à configuração final do sistema, não é necessária uma introdução teórica específica e, portanto, podemos passar diretamente à parte prática.
Nos exemplos seguintes suporemos que o disco rígido seja wd0, o CD cd0 (se houver um) e a placa de rede ep0 (se presente). Se os nomes reais no seu sistema são diferentes, basta substituir os nomes dos exemplos.
Em primeiro lugar é preciso fazer a inicialização a partir de um disquete ou de um CD. Quando aparece o menu do sysinst selecionar "x - exit to shell". Executar o comando dmesg | more para verificar os nomes dos dispositivos de hardware presentes no sistema. Por exemplo, o output seguinte
wd0 at pciide0 channel 0 drive 0: <ST320423A> wd0: drive supports 32-sector pio transfers, lba addressing wd0: 19536 MB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 40011300 sectors wd0: 32-bit data port wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 4
Indica que o disco "ST320423A" (ST usualmente indica um disco Seagate) está conectado como master no primeiro canal do controlador IDE e tem 40011300 setores de 512 bytes, o que perfaz uma dimensão de cerca de 19GB. Freqüentemente a dimensão mostrada é menor (5-8%) que a declarada pelo fabricante, uma vez que os fabricantes consideram que 1GB equivalha a 1.000.000.000 de bytes, no lugar dos 2^30 bytes usados no âmbito da informática. Como 2^30=1073741824, trata-se de uma diferença de 7,4%.
O output:
ep0 at pci0 dev 10 function 0: 3Com 3c590 Ethernet ep0: interrupting at irq 9 ep0: address 00:20:af:f7:cd:71, 32KB byte-wide FIFO, 1:1 Rx:Tx split ep0: 10baseT, 10baseT-FDX, 10base5, 10base2 (default 10baseT)
Indica que a placa ethernet foi identificada como ep0.
A maior parte das mensagens não são difíceis de compreender mesmo para os menos entendidos e a sua leitura é muito útil.
Já que queremos obter um sistema apenas com o NetBSD, podemos eliminar todas as partições pré-existentes no disco com o seguinte comando:
# dd if=/dev/zero of=/dev/rwd0d bs=1m count=1
que preenche o primeiro megabyte do disco com zeros.
/dev/rwd0d significa: a partição "raw" d do disco wd0 (no i386 é uma pseudo partição que cobre o disco inteiro). "Raw" indica que não foi efetuado o buffering (utilização de memória intermediária) pelo sistema (que não é necessário).
# disklabel -I -i wd0
O comando precedente serve para dar início ao particionamento de um disco vazio. Não especificar a opção -I se se quer modificar um disklabel existente.
Será mostrado o prompt:
partition>
O sistema está no aguardo dos comandos. Os comandos mais importantes são ? (ajuda), I (fixa várias informações no disco) e as letras minúsculas de a até h (fixam as informações para as respectivas partições).
Começemos com o comando I. O sistema pergunta o tipo de disco (aceitar o default), o nome do disco (idem) e o label. O label é definido à vontade. Por exemplo, pode-se escrever o próprio nome. Em caso de furto do disco rígido pode-se provar ser o proprietário já que o fdisk do DOS/Windows não cancela esta informação.
Número de partições: escolher 8 (e mesmo mais se houver necessidade). Deixar os valores por default para as outras opções visto que as informações relativas à geometria dos discos modernos são, na realidade, fictícias.
Agora é necessário criar as pertições, começando com as partições "d" e "c" que se referem ao disco inteiro:
partition> d Filesystem type [?] [unused]: Start offset [0c, 0s, 0M]: 0s Partition size ('$' for all remaining) [39693.8c, 40011300s, 19536.8M]: $ partition> c Filesystem type [?] [unused]: Start offset [0c, 0s, 0M]: 0s Partition size ('$' for all remaining) [39693.8c, 40011300s, 19536.8M]: $
Nota: na versão i386 a partição d refere-se ao disco inteiro e a c à parte NetBSD do disco. No nosso exemplo o NetBSD cobre o disco inteiro e, portanto, a partição d e c coincidem.
Depois passa-se à criação da partição a ser posta no início do disco. No particionamento clássico do Unix trata-se da partição "a", de cerca de 50MB. Esta dimensão deve ser aumentada oportunamente quando se pretende ter muita correspondência na spool ou ter espaço vazio em /tmp ou /home sem criar partições separadas para /var ou /home.
partition> a Filesystem type [?] [unused]: 4.2BSD Start offset [0c, 0s, 0M]: 0s Partition size ('$' for all remaining) [0c, 0s, 0M]: 100000s
100000 setores correspondem a cerca de 50MB ou pouco menos.
Criemos a segunda partição (swap) de cerca de 585MB:
partition> a Filesystem type [?] [unused]: swap Start offset [0c, 0s, 0M]: 100000s Partition size ('$' for all remaining) [0c, 0s, 0M]: 1200000s
e enfim a partição"e" para /usr até o fim do disco:
partition> e Filesystem type [?] [unused]: 4.2BSD Start offset [0c, 0s, 0M]: 1300000s Partition size ('$' for all remaining) [0c, 0s, 0M]: $
Verificar se tudo está no lugar com o comando P:
partition> P 8 partitions: # size offset fstype [fsize bsize cpg/sgs] a: 100000 0 4.2BSD 0 0 0 # (Cyl. 0 - 99*) b: 1200000 100000 swap # (Cyl. 99*- 1289*) c: 40011300 0 unused 0 0 # (Cyl. 0 - 39693*) d: 40011300 0 unused 0 0 # (Cyl. 0 - 39693*) e: 38711300 1300000 4.2BSD 0 0 0 # (Cyl. 1289*- 39693*)
Nota: é necessário certificar-se de que as partições não se sobrepõem (exceção feita para c e d). É muito importante e é bom verificar duas vezes.
Enfim executar os comandos:
partition> W Label disk [n]? y Label written partition> Q
O disklabel foi escrito. Congratulações, a parte mais exigente das operações terminou.
Para uma pequena partição root usar:
# newfs -m 5 -b 4096 -f 512 /dev/rwd0a
Para partições maiores:
# newfs -m 5 -b 8192 -f 1024 -i 32768 /dev/rwd0<partition name>
É importante ter lido a teoria apresentada nas seções precedentes e não se limitar a reproduzir os comandos.
Agora instalemos o carregador da inicialização (bootloader):
# /usr/mdec/installboot -v /usr/mdec/biosboot.sym /dev/rwd0a
Montar as partições em /mnt:
# mount -o async,noatime /dev/wd0a /mnt # mkdir /mnt/usr # mount -o async,noatime /dev/wd0e /mnt/usr ... talvez mais se você criou mais [partições] ...
As opções async e noatime não são obrigatórias: tendem a favorecer a velociade das operações em prejuízo da integridade do sistema de arquivos. A proteção frente às quedas do sistema não é fundamental nesse momento, visto que se pode reparar tudo e reinstalar facilmente em caso de queda.
As seções seguintes descrevem alguns métodos comuns de instalação:
CDROM |
FTP |
NFS |
# mount_cd9660 /dev/cd0a /mnt2 # cd /mnt2/onde_se encontram_os_tarballs
"onde_se_encontram_os_tarballs" é usualmente i386/binary/sets. Usar os comandos habituais cd e ls para verificar se não temos certeza.
Copiar com o comando cp os arquivos desejados em /mnt/usr. No mínimo é necessário instalar o base.tgz, o etc.tgz e o kern.tgz. Se o disco é grande, copiar tudo (deixando de lado os arquivos kern*.tgz, já que basta um só kernel).
Agora executar cd / e umount /mnt2 e, enfim, remover o CD.
Ativar a rede. Por exemplo, se o endereço IP e a máscara de rede do host são 192.168.3.7 e 255.255.255.0 (24 bits), escrever:
# ifconfig ep0 192.168.3.7/24 up
Acrescentar "media 10base2" ou "media 10baseT" ou "media 100baseT" pode ser necessário se a sua placa não pode autodetectá-la ou faz isso erradamente. Remeta-se à página de manual do ifconfig para mais informação.
Se o seu servidor de FTP não se encontra em uma rede local (preferível), adicione uma rota por default (default route):
# route add default 192.168.3.1
execute então o comando ftp direcionado ao servidor que contém os arquivos do NetBSD. Nesse momento você deve usar IPs e não nomes.
# cd /mnt/usr # ftp 192.168.3.13
Entre no servidor (login), vá para o diretório em que estão os arquivos da distribuição, execute o ls a pegue todos os arquivos necessários com o comando get. Então saia do servidor (logout).
Ative sua rede como em 3.e.2. Então
# mount IP-do-seu-servidor-nfs:/diretório /mnt2
por exemplo:
# mount 192.168.3.13:/public/ /mnt2
então proceda como na instalação por CD. Por exemplo:
# cd /mnt2/NetBSD-1.5.2/i386/binary/sets # ls
e copie todos os arquivos necessários. Então
# cd / # umount /mnt2
Embora as máquinas que funcionam como desktop usualmente não têm drives para tapes, os servidores usualmente os têm, podendo não conter um drive de CDROM apenas para economizar espaço. Instalar usando um tape é muito fácil. Infelizmente os PCs não podem inicializar a partir dos tapes. Então você deve inicialziar com disquetes.
Para preparar a sua fita de instalação você necessita de uma outra máquina com um drive para rolos de fita.
Rebobine a fita:
# mt rewind
estabeleça tamanho de bloco ilimitado para fitas SCSI
# mt setblk 0
Isto vai mudar o tamanho de bloco por default muito pequeno para qualquer tamanho. Usaremos blocos grandes para tornar as coisas mais rápidas. Isso é útil para drives DAT/DDS.
!!!ADVERTÊNCIA!!! Por favor corrija-me se isso vier a não funcionar para outros tipos de fita.
Agora desabilite a compressão, já que diferentes drives a serem acessados podem ser incapazes de ler uma unidade de fita comprimida. Comprimir arquivos já comprimidos, de qualquer modo, não vai melhorar em nada ou até mesmo apresentar taxas negativas de compressão (chegando a -15% para os drives HP DDS!):
# mt compression 0
então grave os arquivos da distribuição:
# cd /onde_estão_os_arquivos_da_distribuição # tar -b64 -cvf /dev/nrst0 *.tgz
O último comando vai gravar todos os arquivos tgz no tape com blocos do tamanho 64*512 bytes=32 kB. Este é um tamanho de bloco bem testado para todo DAT.
Como você usa /dev/nrst0 (primeiro drive de tape SCSI não rebobinante) agora você pode gravar outro arquivo com, por exemplo, alguns pacotes básicos como os editores.
# cd /onde_estão_os_pacotes/All # tar -b64 -cvf /dev/nrst0 joe*.tgz screen*.tgz
Isto vai gravar apenas o editor de texto joe e o programa screen. Não ponha muitas coisas neste arquivo.
Agora grave outros pacotes que você vai instalar depois de ter o sistema funcionando em modo multi-usuário.
# tar -b64 -cvf /dev/nrst0 todos_os_pacotes_que_você_precisa
ou talvez até mesmo
# tar -b64 -cvf /dev/nrst0 *.tgz
Agora rebobine e descarregue o tape:
# mt rewoffl
Seu tape de instalação está pronto! Como os drives DDS são compatíveis com regressão, pode ser conveniente comprar barato alguns drives DDS-1 ou DDS-2 usados para a sua máquina doméstica. É uma coisa bem legal - vale $30 para mim :)
Carregue o tape no drive e faça:
# mt rewind # mt setblk 0 # cd /mnt/usr # tar -b64 -xvf /dev/nrst0
Não é má idéia copiar agora alguns pequenos pacotes extra, especialmente editores diferentes do vi (como joe, jed) se você não gosta do vi. Copie os pacotes em /mnt e não em /mnt/usr! É claro que você pode escolher qualquer método para transferir os arquivos: NFS, drives de fita e até mesmo disquetes.
Agora descomprima os tarballs:
# cd /mnt # for x in usr/*.tgz;do tar xzpvf $x;done # rm usr/*.tgz
ou, se você preferir um a um
# tar xzpvf /usr/base.tgz
Não é má idéia mover /tmp /var e /home para /usr, criando links simbólicos, se você criou uma grande partição /usr.
# cd /mnt # tar cvf - var home tmp|(cd usr;tar xpvf -) # rm -rf var home tmp # ln -s usr/var . # ln -s usr/home . # ln -s usr/tmp .
Esta seqüência vai mover var e home para usr, criando ligações simbólicas.
Não descomprima os pacotes extra ainda!
Isto vai criar todos os nodes /dev (leva algum tempo nos 486 !):
# cd /mnt/dev # ./MAKEDEV all
Agora cd /mnt/etc e crie o fstab. Você pode usar o vi, mas se você não gosta dele ou não o conhece, simplesmente faça:
# cat > fstab # /dev/wd0a / ffs rw,softdep,noatime 1 1 # /dev/wd0b none swap sw 0 0 # /dev/wd0e /usr ffs rw,softdep,noatime 1 1 # ^D (control-D)
Agora verifique se tudo está correto:
# cat fstab
Se sim, remova os CD/disquetes, digite reboot e aguarde até o sistema inicializar em modo mono-usuário!
Ao acessar uma shell digite
# /sbin/mount -a
para montar todos os sistemas de arquivos em modo de leitura-escrita (read-write). Se você tem alguns pacotes como os editores, por exemplo, instale-os com o pkg_add. Depois remova os tarballs com rm.
Agora você tem que editar o /etc/rc.conf,o /etc/defaults/rc.conf e outros arquivos. Leia o documento INSTALL padrão sobre como e o quê fazer. Geralmente definindo
rc_configured=YESno /etc/rc.conf e definindo o hostname no /etc/defaults/rc.conf é suficiente para fazer o sistema funcionar.
Digite ^D (Control-D) para permitir a inicialização multi-usuário. Seu sistema foi instalado com sucesso.