Este capítulo reúne, sem uma ordem determinada, vários argumentos que não encontraram colocação nos outros capítulos.
O autor desta seção (A criação dos disquetes de instalação) é Eric Delcamp
Para criar os disquetes de instalação é necessário que o "pseudo-device" vnd esteja habilitado no kernel.
Em primeiro lugar é necessário criar o kernel para gravar no disquete, que suporemos chamar-se FLOPPY, que deve derivar de um dos kernels INSTALL.
Uma vez compilado, o kernel estará no arquivo /sys/arch/i386/compile/FLOPPY/netbsd.
Deslocar-se para o diretório /usr/src/distrib/i386/floppies/ramdisk e executar o comando
# makeIsto cria o arquivo ramdisk.fs naquele diretório.
Deslocar-se para o diretório /usr/src/distrib/i386/floppies/fdset e executar o comando
# make KERN=/sys/arch/i386/compile/FLOPPY/netbsd
O comando precedente criou um ou dois arquivos (depende da dimensão do kernel) de nome boot1.fs e boot2.fs. Nesse ponto é necessário transferir estes arquivos para o disquete com o comando (ou melhor, os comandos):
# dd if=boot1.fs of=/dev/fd0a bs=36b # dd if=boot2.fs of=/dev/fd0a bs=36bNaturalmente, entre um comando e outro é necessário por um novo disquete no drive.
Para criar um CD-ROM de dados utilizam-se os programas mkisofs e cdrecord. O NetBSD suporta a utilização tanto dos gravadores SCSI quanto dos gravadores IDE. Esses últimos podem ser utilizados de maneira integralmente transparente, sem a necessidade de utilizar emulações SCSI ou outros artifícios porque o driver é capaz de receber diretamente os comandos ATAPI (como sempre o NetBSD consegue encontrar a solução mais simples e mais elegante).
A criação de um CD transcorre em duas fases: primeiro criamos uma imagem ISO do CD no disco rígido utilizando o programa mkisofs e depois se grava a imagem no CD com o cdrecord. Nos exemplos seguintes supõe-se a utilização de um gravador IDE/ATAPI entre os suportados pelo cdrecord: o gravador é reconhecido pelo sistema como um disco master secundário.
Nota: a gravação de um CD-ROM é uma operação na qual a velocidade de execução é crítica. Particularmente o fluxo de dados deve ser constante para o gravador. O cdrecord jamais deve encontrar-se com o buffer dos dados vazio ou quase vazio. Portanto é aconselhável executar esse tipo de operação quando o sistema não esteja sobrecarregado (vamos deixar combinado que é melhor não recompilar o kernel enquanto se grava...)
cd1 at atapibus1 drive 0: <HP CD-Writer Plus 8100> type 5 cdrom removable
Para criar a imagem do CD no disco rígido é necessário antes de mais nada que haja espaço suficiente no disco. De acordo com a quantidade de dados, ela pode ter até 700MB. Supondo que os dados que nos interessam estejam no diretório meusdados, é preciso escrever
# mkisofs -aflrTv -o cdimage meusdados/
Uma vez criado o arquivo imagem cdimage, podemos examiná-lo montando-o como se fosse um filesystem para verificar se não existem erros e não desperdiçar um precioso CD.
# ls -l cdimage -rw-rw-r-- 1 auser user 284672 Dec 1 11:58 cdimage # vnconfig -v vnd0 cdimage 512/556/1/1 # mount -r -t cd9660 /dev/vnd0c /mnt ... browsing su /mnt ... # umount /mnt # vnconfig -u vnd0
O valor 556 foi obtido dividindo a dimensão do arquivo, 284672, por 512.
Criando um CD híbrido: mkisofs é capaz também de criar CDs em formato Joliet (legíveis pelos sistemas Microsoft) e até mesmo CDs híbridos, que usam tanto o formato Rock Ridge quanto o formato Joliet e que se tornam legíveis seja pelo NetBSD, seja pelo Windows. Por exemplo, para criar um CD híbrido:
$ mkisofs -l -J -R -o cd.iso mieidati/Fazer referência à página de manual do mkisofs para os detalhes sobre as opções aceitas pelo programa.
Na segunda fase a imagem recém criada é gravada no CD com o comando
# cdrecord -v speed=2 dev=/dev/rcd1d cdimage
Nota: no caso do CDR ATAPI é necessário usar o dispositivo rcd#d, porque o dispositivo 'a' não suporta o envio direto de comandos ATAPI.
Também é possível efetuar um teste de gravação, desabilitando o laser antes de proceder à gravação propriamente dita. Basta adicionar ao comando precedente as opções -dummy e -nofix. Por exemplo
# cdrecord -v -dummy -nofix speed=2 dev=/dev/rcd1d cdimage
A fase de criação da imagem e a fase da gravação no disco podem ser combinadas em um só job, evitando-se a geração do arquivo-imagem temporário no disco rígido. O comando é o seguinte
# (nice -18 mkisofs -aflrT mieidati/) | cdrecord -v fs=16m speed=2 dev=/dev/rcd1d -
A opção fs=16 serve para aumentar a dimensão do fifo, evitando erros de underflow do buffer dos dados usados pelo cdrecord.
Para efetuar a cópia direta de um CD usa-se a opção -isosize do cdrecord, executando o seguinte comando
# cdrecord -v fs=16m -isosize speed=2 dev=/dev/rcd1d /dev/rcd0d
Nota: se utilizamos dois CDs(-RW) IDE/ATAPI, é aconselhável montá-los em canais diferentes para termos um fluxo de dados melhor. Por exemplo:
wd0: hard disk master ide primário cd0: leitor de CD slave ide primário cd1: gravador de CD master ide secundário
Não há diferenças especiais entre a criação de um CD-ROM normal e a de um inicializável. Para este último é necessário ter uma cópia do arquivo de boot para inserí-lo no CD, informando o mkisofs. Por exemplo:
# mkisofs -avr -b boot.fs mieidati/ > cdimage
boot.fs é o arquivo de inicialização do CD-ROM, cujo caminho (path) deve ser indicado de modo relativo ao diretório meusdados.
Por qualquer motivo estranho parece que os relógios de sistema jamais funcionem direito e não é raro encontrarem-se com uma defasagem de muitos minutos. O problema se agrava quando se tem que mexer com vários hosts conectados em rede: com boa probabilidade jamais conseguiremos mantê-los sincronizados. Para resolver o problema vem nos socorrer o protocolo NTP (Network Time Protocol) versão 3, que permite manter sincronizados os relógios de muitas workstations conectadas em rede, utilizando o servidores adequados.
Graças ao protocolo NTP é possível tanto simplesmente manter a hora correta de um host único quanto da rede inteira. Trata-se de um protocolo um pouco complexo, que define a estrutura hierárquica master-slave de uma série de servidores, subdividindo-os em estratos. No topo da hierarquia estão os servidores do estrato 1, conectados a um hardware que é a fonte de referência para a data e para a hora. Os servidores de estrato 2 sincronizam-se via NTP com os do estrato 1 e, por sua vez, funcionam como servidores secundários para os hosts dos estratos inferiores. Esta estrutura hierárquica evita o congestionamento que se teria se todos os hosts clientes fizessem referência aos servidores do estrato 1. Se, por exemplo, se quer sincronizar uma rede inteira, não se devem conectar todos os hosts ao mesmo servidor público do estrato 1. Em vez disso, cria-se um servidor local que se sincroniza com o público e os hosts restantes sincronizam-se com o servidor local.
Afortunadamente, para desfrutar dos instrumentos NTP não é necessário compreender os detalhes do protocolo e da sua implementação (quem estiver interessado pode fazer referência ao documento RFC 1305) mas é suficiente saber como abrir alguns programas. No NetBSD já estão presentes os programas necessários para se aproveitar desse protocolo, derivados da implementação xntp. Nesta seção descreve-se um método simples para manter atualizada a hora do sistema.
Em primeiro lugar é necessário o endereço dos servidores públicos de NTP para utilizá-los como referência. Uma lista completa pode ser encontrada em http://www.eecis.udel.edu/~mills/ntp/servers.html, mas para a Itália podem ser usados tempo.cstv.to.cnr.it e time.ien.it, que são dois servidores de estrato 1.
Nesse ponto, para sincronizar o relógio do sistema basta executar o comando (é necessário ser root):
# ntpdate -b tempo.cstv.to.cnr.it time.ien.itA opção -b serve para indicar ao ntpdate para assumir imediatamente o novo valor da hora do sistema, ao invés de procurar corrigir o atual, e é aconselhada quando a diferença entre a hora correta (a do servidor) e a local pode ser grande.
Já vimos como funciona o ntpdate. Agora é necessário decidir o melhor modo para inicializá-lo automaticamente. Se o host a sincronizar está sempre ligado à Internet, a melhor coisa é abrir o programa a cada reinicialização especificando
ntpdate=YES ntpdate_hosts="time.ien.it"no /etc/rc.conf. O nome do servidor pode ser especificado em ntpdate_hosts. Do contrário o script procurará obtê-lo do arquivo /etc/ntp.conf.
Se o host está conectado à Internet através de um provedor e a conexão não está sempre ativa, pode-se lançar o comando ntpdate a partir do script ip-up, como se explica no Capítulo 10. Nesse caso a linha a ser inserida no arquivo é:
/usr/sbin/ntpdate -s -b time.ien.it(o caminho é necessário, senão o script não encontrará o programa). A opção -s produz o arquivamento das mensagens, que depois poderemos encontrar em /var/log/messages (salvo configuração diferente do syslog.conf).
Além do ntpdate estão presentes vários outros comandos e também é possível fazer um host da rede tornar-se o servidor NTP dos outros hosts clientes. O servidor interno sincronizar-se-á com os servidores de referência externos à rede e os clientes se vão sincronizar com o nosso servidor. Para esse tipo de configuração deve-se utilizar o dæmon xntpd, criando o arquivo de configuração adequado /etc/ntp.conf. Por exemplo:
server time.ien.it server tempo.cstv.to.cnr.it
O xntpd pode ser ainda inicializado a partir do rc.conf, habilitando-se a opção adequada.
xntpd=YES
Para a sincronização interna à rede, como alternativa à configuração descrita, também é possível usar o dæmon timed, nascido especificamente com o 4.3BSD. Também o timed baseia-se em um esquema master-slave. Quando é inicializado em uma máquina o timed pede ao master a hora do sistema da rede e corrige apropriadamente a hora da máquina local. Pode-se, assim, utilizar uma estrutura mista, na qual um dos hosts se sincroniza com um servidor NTP público e faz o papel de master para a rede local, cujos clientes, por sua vez, sincronizam-se com o timed. No host de referência devem estar ativos seja o NTP, seja o timed, e é necessário prestar atenção para que não conflitem (o timed deve ser inicializado com a opção -F hostname. Desse modo não tentará atualizar o relógio local).
O programa de instalação do NetBSD pode instalar seu próprio gerenciador de inicialização, se o usuário assim o desejar. No caso de uma instalação errada ou falha é possível instalá-lo de novo ou modificar suas propriedades com o comando fdisk. Por exemplo:
# fdisk -B wd0
Se o sistema não se inicializa a partir do disco rígido, pode-se fazer o boot com o disquete de inicialização usado para a instalação e acionar o kernel do disco rígido com um comando como o seguinte:
> boot wd0a:netbsd
Nota: em alguns casos o fdisk -B não parece dar o resultado desejado. Por exemplo, quando instalamos ou removemos com freqüência outros sistemas operacionais como o Windows 95. Nesse caso pode ser útil fazer um fdisk /mbr do DOS (por exemplo, com um disquete) e depois tentar de novo. O mesmo resultado pode-se obter no NetBSD com o comando fdisk -i wd0.
Ainda que a deleção do disklabel não seja uma operação freqüente, pode ser útil saber como fazer em caso de necessidade. Naturalmente trata-se de uma operação a ser executada apenas quando se sabe exatamente aquilo que se está fazendo. Por exemplo:
# dd if=/dev/zero of=/dev/rwd0c bs=8k count=1
Desse modo fica deletado o disklabel mas não a tabela das partições do MBR. Para deletar completamente o disco usar wd0d. Por exemplo:
# dd if=/dev/zero of=/dev/rwd0d bs=8k
Para produzir um som no speaker (por exemplo, uma advertência ao fim de um script), pode-se utilizar o device spkr do kernel, que aparece através do dispositivo /dev/speaker. Por exemplo, nas mailing lists encontrei uma mensagem que sugeria:
echo 'BPBPBPBPBP' > /dev/speaker
Nota: o dispositivo spkr não está habilitado no kernel genérico e, portanto, para usá-lo precisa compilar um kernel personalizado.
Para melhorar a performance dos serviços, dadas determinadas configurações, pode-se utilizar um memory file system. A título de exemplo, essa estratégia pode ser útil quando se compila muito e se dispõe de memória suficiente. Para criar um sistema de arquivos (file system) na memória, deve-se acrescentar uma linha do seguinte tipo no /etc/fstab:
/dev/wd0b /tmp mfs rw,async,noatime,nosuid,-s=20000
a opção -s=20000 define as dimensões em cerca de 10 MB (20000 setores), que deveriam ser suficientes para a compilação do kernel.
Quando se esquece a senha do root nem tudo está perdido e ainda se pode recuperar o sistema. Os passos a cumprir são os seguintes: inicializar em modo monousuário, montar / e mudar a senha do root. Em mais detalhes:
Inicializar em modo monousuário: quando aparece o prompt do boot e se inicia a contagem regressiva de cinco segundos, executar o comando:
> boot -s
Diante da solicitação
Enter pathname of shell or RETURN for sh:apertar Enter.
Executar os seguintes comandos
# fsck -y / # mount -u / # fsck -y /usr # mount /usr
Mudar a senha do root com passwd.
Acionar o comando exit para passar ao modo multiusuário.
Esta seção explica como adicionar um novo disco rígido a um sistema NetBSD. No exemplo proposto serão adicionados um controlador SCSI e um disco rígido conectado ao novo controlador. Quem não precisa instalar o controlador pode simplesmente pular a leitura da parte correspondente e ir diretamente para a configuração do disco rígido. A instalação de um disco rígido IDE é idêntica à apresentada no exemplo. Somente o nome do dispositivo será diferente (wd#) no lugar de (sd#).
Como sempre, antes de adquirir hardware novo é bom consultar a lista das compatibilidades de hardware do NetBSD para certificar-se de que o dispositivo escolhido seja suportado pelo sistema.
Concluída a instalação física do controlador e do disco rígido, assim como o cabeamento correspondente, inicializa-se o sistema e nos certificamos de que o disco tenha sido reconhecido com o comando dmesg. Por exemplo, para um controlador NCR-875 o output é o seguinte:
ncr0 at pci0 dev 15 function 0: ncr 53c875 fast20 wide scsi ncr0: interrupting at irq 10 ncr0: minsync=12, maxsync=137, maxoffs=16, 128 dwords burst, large dma fifo ncr0: single-ended, open drain IRQ driver, using on-chip SRAM ncr0: restart (scsi reset). scsibus0 at ncr0: 16 targets, 8 luns per target sd0(ncr0:2:0): 20.0 MB/s (50 ns, offset 15) sd0: 2063MB, 8188 cyl, 3 head, 172 sec, 512 bytes/sect x 4226725 sectorsSe o dispositivo não aparece no output é necessário certificar-se de que o kernel em uso o suporte e, eventualmente, compilar um kernel personalizado (veja-se o Capítulo 7).
Nesse ponto podem ser criadas as partições com o comando fdisk. Em primeiro lugar visualizamos o estado atual do disco:
# fdisk sd0 NetBSD disklabel disk geometry: cylinders: 8188 heads: 3 sectors/track: 172 (516 sectors/cylinder) BIOS disk geometry: cylinders: 524 heads: 128 sectors/track: 63 (8064 sectors/cylinder) Partition table: 0: sysid 6 (Primary 'big' DOS, 16-bit FAT (> 32MB)) start 63, size 4225473 (2063 MB), flag 0x0 beg: cylinder 0, head 1, sector 1 end: cylinder 523, head 127, sector 63 1: <UNUSED> 2: <UNUSED> 3: <UNUSED>
No exemplo a partição DOS será eliminada e substituída por uma partição NetBSD que ocupará o disco inteiro. O comando fdisk -u sd0 permite a modificação interativa das partições. As modificações serão escritas no disco somente no final, depois de um pedido de confirmação, o que permite que procedamos com uma certa tranqüilidade.
Depois de ter executado fdisk -u, confirmamos as modificações e obtemos as seguintes partições:
Partition table: 0: sysid 169 (NetBSD) start 63, size 4225473 (2063 MB), flag 0x0 beg: cylinder 0, head 1, sector 1 end: cylinder 523, head 127, sector 63 1: <UNUSED> 2: <UNUSED> 3: <UNUSED>
Nesse ponto é necessário escrever o disklabel no disco. A seqüência correta de operações é:
# disklabel sd0 > tempfile # vi tempfile # disklabel -R -r sd0 tempfile
Nesse exemplo criemos as seguintes partições com o disklabel, editando o arquivo tempfile como foi explicado acima:
# size offset fstype [fsize bsize cpg] a: 2048004 63 4.2BSD 1024 8192 16 # (Cyl. 0*- 3969*) c: 4226662 63 unused 0 0 # (Cyl. 0*- 8191*) d: 4226725 0 unused 0 0 # (Cyl. 0 - 8191*) e: 2178658 2048067 4.2BSD 1024 8192 16 # (Cyl. 3969*- 8191*)
Nota: uma vez criado o disklabel, podemos otimizá-lo estudando o output do comando newfs -N /dev/sd0a que assinala se no fim de uma partição permanecem setores não alocados. Este valor pode-se utilizar para modificar o tamanho da própria partição.
Por último, criemos os novos sistemas de arquivos para as partições a e e.
# newfs /dev/sd0a # newfs /dev/sd0eAgora o disco está pronto para ser usado, com duas partições para montar. Por exemplo:
# mount /dev/sd0a /mnt
Para alguns usuários acontece o recebimento de uma misteriosa mensagem "Password file is busy" quando tentam modificar uma senha. A solução ao problema é simples: eliminar o arquivo /etc/ptmp, depois de ter verificado se não contém informações importantes (trata-se de uma cópia do arquivo /etc/master.passwd que por motivos inescrutáveis ficou em circulação ao invés de ser eliminado).
Nota: a existência do arquivo /etc/ptmp pode causar também a visualização de mensagens de advertência na fase de inicialização. Por exemplo:
root: password file may be incorrect - /etc/ptmp exists
O autor desta seção é Reinoud Koornstra
Em primeiro lugar é necessário passar ao modo monousuário (single user) com as partições ainda montadas "rw" (read-write). Para fazer isso convém simplesmente dar o comando shutdown now em modo multiusuário ou reinicializar o sistema com a opção -s e tornar / e /dev passíveis de escrita e leitura com os seguintes comandos:
# mount -u / # mount -u /dev
Depois:
# mkdir /nudev # cd /nudev # cp /dev/MAKEDEV* . # sh ./MAKEDEV all # cd / # mv dev odev # mv nudev dev # rm -r odev
Alternativamente, com as fontes instaladas no sistema em /usr/src, pode-se fazer assim:
# mkdir /nudev # cd /nudev # cp /usr/src/etc/MAKEDEV.local . # cp /usr/src/etc/etc.$arch/MAKEDEV . # sh ./MAKEDEV all # cd / # mv dev odev; mv nudev dev # rm -r odev
O valor a substituir em $arch pode ser detrminado com o seguinte comando:
# uname -m
ou com:
# sysctl hw.machine_arch
Nota: O segundo método para recriar os dispositivos (o que se aproveita das fontes instaladas no sistema) pode adicionar alguns dispositivos àqueles já existentes (pelo menos na arquitetura i386). Por exemplo, atualmente é possível ter 16 partições ao invés de 8. Utilizando a versão original do MAKEDEV (aquela do diretório /dev), os novos dispositivos não serão criados.