FreeBSD e Dispositivos de Estado Sólido

$FreeBSD: doc/en_US.ISO8859-1/articles/solid-state/article.sgml,v 1.11 2003/10/18 10:39:15 simon Exp $

FreeBSD is a registered trademark of the FreeBSD Foundation.

M-Systems and DiskOnChip are trademarks or registered trademarks of M-Systems Flash Disk Pioneers, Ltd.

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.

Versão Traduzida para Português do Brasil

Esta é uma tradução não-oficial do Aviso Legal Padrão do Projeto de Documentação do FreeBSD para o Português do Brasil. Ela não foi publicada pelo Projeto de Documentação do FreeBSD, e legalmente não representa os termos de distribuição de documentação que utiliza o Aviso Legal Padrão do Projeto de Documentação do FreeBSD -- somente o texto original do Aviso Legal Padrão do Projeto de Documentação, em inglês, faz isso. Logo, a versão traduzida não deve ser utilizada como um aviso legal válido. Esperamos, contudo, que esta tradução ajude aos falantes de Português do Brasil a entender melhor o Aviso Legal Padrão do Projeto de Documentação do FreeBSD.

SEMPRE verifique a versão em Inglês mais recente do Aviso Legal Padrão do Projeto de Documentação do FreeBSD na versão em Inglês do Manual do FreeBSD.

Redistribuição e utilização do código fonte (SGML DocBook) ou formato 'compilado' (SGML, HTML, PDF, PostScript, RTF e assim por diante) com ou sem modificação, são permitidas contanto que as seguintes condições sejam cumpridas:

  1. As redistribuições do código fonte (SGML DocBook) devem reter o aviso de copyright acima, esta lista de condições e a seguinte nota de responsabilidade assim como as primeiras linhas deste arquivo não modificadas.

  2. As redistribuições em forma compilada (transformada para outros DTDs, convertida para PDF, PostScript, RTF e outros formatos) devem reproduzir o aviso de copyright acima, esta lista de condições e a seguinte nota de responsabilidade na documentação e/ou outros materiais fornecidos com a distribuição.

Importante: ESTA DOCUMENTAÇÃO É FORNECIDA PELO PROJETO DE DOCUMENTAÇÃO DO FREEBSD "NO ESTADO" E QUAISQUER GARANTIAS EXPLÍCITAS OU IMPLÍCITAS, INCLUINDO, MAS NÃO LIMITADAS AS GARANTIAS IMPLÍCITAS DE COMERCIALIZAÇÃO E A DE ADEQUAÇÃO PARA UMA FINALIDADE PARTICULAR SÃO DESMENTIDAS. EM NENHUM EVENTO O PROJETO DE DOCUMENTAÇÃO DO FREEBSD PODERÁ SER RESPONSABILIZADO POR QUAISQUER DANOS DIRETOS, INDIRETOS, INCIDENTAIS, ESPECIAIS, EXEMPLARES, OU CONSEQÜENTES (INCLUINDO, MAS NÃO LIMITADO A, OBTENÇÃO DE BENS OU SERVIÇOS SUBSTITUTOS; PERDA DE USO, DE DADOS, OU DE LUCROS; OU A INTERRUPÇÃO DE NEGÓCIOS) DE QUALQUER FORMA CAUSADO E EM QUALQUER TEORIA DE RESPONSABILIDADE, SE EM CONTRATO, EM RESPONSABILIDADE ESTRITA, OU PROCESSUAL (PASSÍVEL DE PROCESSO, INCLUINDO NEGLIGÊNCIA OU NÃO) LEVANTADA DE QUALQUER FORMA PELO USO DESTA DOCUMENTAÇÃO, MESMO QUE AVISADO DA POSSIBILIDADE DE TAIS DANOS.

English Version

This is an unofficial translation of the Standard FreeBSD Documentation Project Legal Notice into Brazilian Portuguese. It was not published by The FreeBSD Documentation Project, and does not legally state the distribution terms for documentation that uses the Standard FreeBSD Documentation Project Legal Notice -- only the original English text of the Standard FreeBSD Documentation Project Legal Notice does that. Therefore, the translated version should not be used as a valid legal notice. However, we hope that this translation will help Brazilian Portuguese speakers understand the Standard FreeBSD Documentation Project Legal Notice better.

Make sure to ALWAYS check the latest English version of the Standard FreeBSD Documentation Project Legal Notice in the English documentation version of the FreeBSD Handbook.

Redistribution and use in source (SGML DocBook) and 'compiled' forms (SGML, HTML, PDF, PostScript, RTF and so forth) with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code (SGML DocBook) must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified.

  2. Redistributions in compiled form (transformed to other DTDs, converted to PDF, PostScript, RTF and other formats) must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

Importante: THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Este artigo aborda o uso de dispositivos de armazenamento em estado sólido na criação de sistemas embedded.

Os sistemas Embedded possuem a vantagem de ter a sua estabilidade aumentada devido a ausência completa de partes móveis (Discos rigidos). Entretanto é necessário levar em conta que geralmente estes dispositivos possuem pouco espaço de disco disponível, além de terem na durabilidade da midia de armazenamento outro fator crítico.

Os tópicos específicos a serem abordados incluiem os tipos atributos das mídias de estado sólido apropriadas para uso como disco no FreeBSD, as opções de kernel que são interessantes neste tipo de ambiente, o funcionamento do rc.diskless o qual é responsável por automatizar a inicialização deste tipo de sistema e por suprir as necessidades de sistemas de arquivos destinados apenas ao modo de leitura, e a configuração manual dos sistemas de arquivo. O artigo irá concluir com algumas estratégias gerais para pequenos ambientes FreeBSD que operam em modo de apenas leitura.


Índice
1. Dispositivos de disco em estado sólido
2. Opções do Kernel
3. O rc.diskless e os sistemas de arquivos de apenas leitura
4. Criação manual de um sistema de arquivos.
5. Preparando um disquete de boot (kern.flp ) com o driver fla habilitado
6. Estratégias para configuração de sistemas reduzidos e com sistemas de arquivos em modo de apenas leitura

1. Dispositivos de disco em estado sólido

O escopo deste artigo irá se limitar aos dispositivos de disco em estado sólido baseados em memória flash. A memória flash é uma memória em estado sólido (sem nenhuma parte móvel) a qual não é volátil (a memória mantém os dados mesmo depois que todas as fontes de energia são desligadas). A memória flash pode suportar grandes choques fisicos (quedas, etc) e é razoavelmente rápida (as soluções de memória flash abordadas neste artigo são ligeiramente mais lentas que um disco rigido EIDE para as operações de escrita, e muito mais rápidas para as operações de leitura). Um aspecto muito importante das memórias flash, e que cada setor possui uma capacidade limitada de reescrita. Você somente pode escrever, apagar, e escrever de novo para um setor de uma memória flash um certo número de de vezes antes que o setor se torne permanentemente inutilizado. Embora muitos dispositivos de memória flash mapeiem automaticamente os blocos ruins, e embora alguns deles distribuam as operações de escrita através de toda a unidade, permanece o fato de que existe um limite para o número de operações de escrita que se pode realizar no dispositivo. As unidades competitivas possuem em sua especificação uma vida útil entre 1.000.000 e 10.000.000 de escritas por setor. Esta vida util é variável em função da temperatura do ambiente.

Especificamente, nós iremos estar discutindo sobre unidades compact-flash compatíveis com o padrão ATA e unidades de memória flash DiskOnChip® da M-Systems. Os cartões compact-flash compatíveis com o padrão ATA são muito populares como mídias de armazenamento para câmeras digitais. O interesse particular neste tipo de unidade reside no fato de que elas podem ser conectadas ao barramento IDE, e por serem compatíveis com a especificação ATA. Consequentemente, com um adapatador muito simples e de baixo custo, estes dispositivos podem ser conectados diretamente no barramento IDE de um computador. Ao conectar o dispositivo desta forma, os sistemas operacionais como o FreeBSD irão enxergar o dispositivo como um disco rigido comum (apesar de pequeno). O produto DiskOnChip da M-Systems é baseado na mesma tecnologia de memória flash utilizada nos cartões compact flash compatíveis com o padrão ATA, mas são comercializados no formato de um DIP (um Circuito Integrado) e não são compatíveis com o padrão ATA. Para utilizar este tipo de dispositivo, não basta instalá-lo em uma placa mãe que possua um socket para DiskOnChip, você também precisará gerar um novo kernel para o seu FreeBSD habilitando o suporte ao driver  fla. E mais, e isso é critico, existem dados específicos colocados pelo fabricante no setor de boot deste dispositivo, desta forma você deve ter o cuidado de não instalar o boot loader do FreeBSD (e nenhum outro) quando estiver utilizando um DiskOnChip.

Existem outras soluções de disco em estado sólido, mas eles são caros, obscuros e relativamente complicados para serem abordados dentro do escopo deste artigo.


2. Opções do Kernel

Existem poucas opções no kernel que sejam de interesse específico para a criação de um sistema FreeBSD embedded.

Primeiro, todos os sistemas FreeBSD embedded que utilizam unidades de memória flash como sistema de disco estarão interessados em discos de memória e sistemas de arquivos em memória. Devido o limitado número de operações de escrita que pode ser realizados em uma unidade de memória flash, o disco e o sistema de arquivo provavelmente serão montados em modo de apenas leitura. Neste ambiente, os sistemas de arquivo tais como /tmp e /var serão montados em um sistema de arquivos em memória RAM, de forma a permitir que o sistema possa criar os logs, atualizar os contadores e os arquivos temporários. O sistema de arquivo em memória é um componente crítico para o sucesso da implementação de um sistema FreeBSD embedded.

Você deve certificar-se que as linhas abaixo existam em seu arquivo de configuração do kernel:

options         MFS      # Memory Filesystem
options         MD_ROOT  # md device usable as a potential root device
pseudo-device   md       # memory disk

Segundo, se você irá utilizar dispositivos DiskOnChip da M-Systems, você também irá precisar incluir a linha abaixo:

device        fla0      at isa?

3. O rc.diskless e os sistemas de arquivos de apenas leitura

A inicialização pós boot em um sistema FreeBSD embedded é controlada pelo /etc/rc.diskless2 (o /etc/rc.diskless1 é para o boot diskless usando BOOTP). Este script é chamado através da inserção de uma linha no /etc/rc.conf como a seguir:

diskless_mount=/etc/rc.diskless2

O rc.diskless2 monta o /var em um sistema de arquivo em memória RAM, cria uma lista de diretórios configuráveis no /var com o comando mkdir(1), altera as permissões de alguns destes diretórios, e prepara uma cópia das entradas de dispositivo tornando o /dev uma partição gravável (novamente um sistema de arquivo em memória). Na execução do /etc/rc.diskless2, uma outra variável do rc.conf irá ser consultada - varsize. O /etc/rc.diskless2 cria a partição /var com um tamanho baseado no valor desta variável do rc.conf:

varsize=8192

Lembre-se que este valor está em setores. A criação da partição /dev pelo /etc/rc.diskless2, entretanto, é governada por um valor pré-definido de 4096 setores. É muito simples alterar essa entrada no /etc/rc.diskless2, embora você não precise de mais espaço para o /dev.

É imporante lembrar que o script /etc/rc.diskless2 assume que você já removeu a sua partição /tmp convencional e que já a subistituiu por um link simbólico para /var/tmp. Como o tmp é um dos diretórios criados no /var pelo script /etc/rc.diskless2, e uma vez que o /var é um sistema de arquivo em memória (o qual é montado com permissão para escrita e leitura), o /tmp agora também irá permitir operações de leitura e escrita.

O fato do /var e do /dev serem sistemas de arquivos com permissões de leitura e escrita é uma importante distinção, uma vez que a partição / (e qualquer outra que você tenha em sua midia flash) deve ser montada em modo de apenas leitura. Lembre-se que na Seção 1 nós detalhamos as limitações da memória flash - especificamente a capacidade limitada de escrita por setor. A importância de não montar os sistemas de arquivo da sua unidade flash em modo de leitura e escrita, e a importância de não utilizar uma area de swap, não pode ser menosprezada. Uma area de swap em um sistema de produção sob alta demanda, pode inutilizar uma unidade flash em menos de um ano de uso. A geração intensa de arquivos de logs, bem como a criação e remoção de arquivos temporários em larga escala podem fazer o mesmo. Consequentemente, em complemento a remoção das entradas de swap e do /proc do seu arquivo /etc/fstab, você deve alterar as opções de cada um dos sistemas de arquivos para ro (apenas leitura) como mostrado a seguir:

# Device      Mountpoint  FStype  Options  Dump  Pass#
/dev/ad0s1a   /           ufs     ro       1     1

Algumas aplicações em um sistema médio irão começar a apresentar problemas imediatamente como resultado desta alteração. Por exemplo, não será possivel instalar um port a partir da árvore de ports porque o arquivo /var/db/port.mkversion não existe, o cron não irá executar de forma correta como resultado da inexistência dos cron tabs no /var criado pelo /etc/rc.diskless2, e o syslog e o dhcp irão encontrar problemas como resultado do sistema de arquivo em modo de apenas leitura e da inexistência de arquivos no /var que o /etc/rc.diskless2 criou. Estes são apenas problemas temporários, os quais já estão endereçados, juntamente com outras soluções para a execução de outros pacotes de software comuns na sessão Seção 6.

Um conceito importante de se ter em mente é que um sistema de arquivos foi montado como apenas leitura pelo /etc/fstab pode ser alterado para o modo de leitura e escrita a qualquer momento através do uso do seguinte comando:

# /sbin/mount -uw partition

e pode ser convertido de volta para o modo apenas de leitura com o comando:

# /sbin/mount -ur partition

4. Criação manual de um sistema de arquivos.

Devido a compatibilidade com o padrão ATA os cartões Compact-Flash são vistos pelo FreeBSD como um disco rigido IDE normal, assim como o ocorre com uma unidade DiskOnChip da M-Systems (quando você está utilizando um kernel com suporte ao driver fla habilitado), você pode teoricamente instalar o FreeBSD apartir da rede utilizando os disquetes de boot (kern e mfsroot) ou apartir do CD. Além do fato de que você não deve instalar o boot loader quando estiver usando um dispositivo M-Systems, não é necessário nenhuma outra instrução especial.

Entretanto, ao instalar o FreeBSD pelos procedimentos normais (mesmo para uma pequena instalação), pode produzir um sistema com um tamanho superior a 200 megabytes. Como a maioria das pessoas costumam utilizar dispositivos de memória flash com uma capacidade menor que esta (128 Mb é considerado muitas vezes um exagero, sendo que unidades entre 16 e 32 são consideradas normais) uma instalação usando os mecanismos normais não é possivel -- pois simplesmente não existe espaço suficiente nem mesmo para a instalação minima do método convencional.

A forma mais simples de superar esta limitação do espaço é instalar o FreeBSD usando os meios convencionais em um HD normal. Deposi que a instalação estiver completa, remova os itens desnecessários para os seus objetivos até que o sistema caiba na sua unidade de memória flash, então faça um tar do sistema de arquivos inteiro. Os passos seguintes irão guia-lo através do processo de preparação de uma unidade de memória flash para o seu sistema de arquivos targeado. Lembre-se, que uma vexz que não estaremos realizando a instalação pelos métodos normais, as operações tais como particionamento, criação dos slices, criação do sistema de arquivos, etc terão que ser realizados manualmente. Além dos discos kern.flp e mfsroot.flp, você também irá precisar do disco de fixit. Se você estiver utilizando um DiskOnChip da M-Systems, o kernel utilizando com o seu disquete do kerne.flp irá precisar do suporte ao driver fla habilitado, como detalhado no item Seção 2 Por favor consulte a sessão Seção 5, para obter maiores informações sobre como criar um novo kernel para o kern.flp.

  1. Particionando o seu dispositivo de memória flash

    Apos dar o boot com os disquetes do kernel e do mfsroot, escolha a opção custom no menu de instalação. No menu de instalação customizada, escolha a opção partition. No menu de partições, você deve deletar todas as partições existentes utilizando a tecla d. Depois de deletar todas as partições, crie uma partição utilizando a tecla c e aceite o valor padrão para o tamanho da partição. Quando lhe for indagado qual o tipo da partição, certifique-se que o valor está definido como 165. Agora grave a tabela de particionamento para o disco pressionando a tecla w (esta é uma opção oculta nesta tela). Quando for apresentado o menu para que você escolha o gerenciador de boot, tenha o cuidado de selecionar None se você estiver utilizando um dispositivo DiskOnChip da M-Systems. Se você estiver utilizando um cartão de memória flash compativel com o padrão ATA, você deve escolher a opção "FreeBSD Boot Manager". Agora pressione a tecla q para sair do menu de partições. O menu de escolha do boot manager será exibido novamente - repita a escolha que você fez anteriormente.

  2. Criando o sistema de arquivo no seu dispositivo de memória flash.

    Saia do menu de instalação customizada, e no menu principal da instalação, escolha a opção fixit. Depois de entrar no ambiente de recuperação, execute os seguintes comandos:

    Compatíveis com ATA DiskOnChip
    # mknod /dev/ad0a c 116 0
    # mknod /dev/ad0c c 116 2               
    # disklabel -e /dev/ad0c
    
    # mknod /dev/fla0a c 102 0
    # mknod /dev/fla0c c 102 2
    # disklabel -e /dev/fla0c
    

    Neste ponto você terá entrado no editor vi o qual está sob controle do comando disklabel. Se você esta utilizando um DiskOnChip, o primeiro passo será alterar o valor do tipo próximo do inicio do arquivo de EDSI para DOC2K. Em seguida, independentemente se você está utilizando um DiskOnChip ou um dispositivo de memória flash compativel com o padrão ATA, você precisara adicionar uma linha a: no final do arquivo. Esta linha a: deve se paracer com a linha abaixo:

    a:    123456  0     4.2BSD  0   0
    

    Onde 123456 é um número que é exatamente o mesmo que existe na linha c: referente ao tamanho. Basicamente você esta duplicando a linha c: existente para a linha a:, certifique-se de que o fstype é 4.2BSD. Salve o arquivo e saia.

    Compatíveis com ATA DiskOnChip
    # disklabel -B -r /dev/ad0c
    # newfs /dev/ad0a
    
    # disklabel -B -r /dev/fla0c
    # newfs /dev/fla0a
    
  3. Colocando o seu sistema de arquivos no seu dispositivo de memória flash.

    Monte a sua unidade de memória flash recém preparada:

    Compatíveis com ATA DiskOnChip
    # mount /dev/ad0a /flash
    
    # mount /dev/fla0a /flash
    

    Coloque a máquina acessível na rede de forma que possamos transferir o nosso arquivo tar para ela e para que possamos descompactá-lo no sistema de arquivos da unidade de memória flash. Um exemplo de como fazer isso é:

    # ifconfig xl0 192.168.0.10 netmask 255.255.255.0
    # route add default 192.168.0.1
    

    Agora que a máquina já esta acessível na rede, transfira o seu arquivo tar para ela. Neste momento você pode se ver diante de um pequeno dilema - Se a sua unidade de memória flash possui 128 Mb, por exemplo, e o seu arquivo tar é maior que 64 Mb, você não pode ter o arquivo na sua unidade flash ao mesmo tempo em que esta descompactando-o - você irá ficar sem espaço. Uma solução para este problema, se você estiver utilizando FTP, é descompactar o arquivo enquanto ele é transferido por FTP. Se você realizar a sua transferência desta forma, você nunca irá ter o arquivo tar e o conteúdo do arquivo tar no seu disco ao mesmo tempo:

    ftp> get tarfile.tar "| tar xvf -"
    

    Se o seu arquivo tar estiver gzipado, você poderá fazer o mesmo procedimento, bastando um pequeno ajuste:

    ftp> get tarfile.tar "| zcat | tar xvf -"
    

    Depois que o conteúdo do seu sistema de arquivos targeado tiver sido descompactado sobre o sistema de arquivos da sua unidade de memória flash, você pode desmontar a unidade e rebootar:

    # cd /
    # umount /flash
    # exit
    

    Assumindo que você configurou corretamente o sistema de arquivos no seu HD normal (com os sistemas de arquivos sendo montados em modo de apenas leitura, e com as opções necessárias compiladas no Kernel) você deve estar bootando com sucesso o seu sistema FreeBSD embedded.


5. Preparando um disquete de boot (kern.flp ) com o driver fla habilitado

Nota: Esta sessão do artigo é relevante apenas para quem estiver utilizando uma unidade DiskOnChip da M-Systems.

É possível que o seu disco de boot kern.flp não utilize um kernel com suporte ao driver fla habilitado, o que é necessário para que o sistema reconheça um dispositivo DiskOnChip. Se você deu boot no sistema com os disquetes de instalação padrões e foi informado pelo sistema de que não existe nenhum disco presente, então é muito provável que o driver fla não exista no seu kernel.

Depois que você tiver compilado um kernel com suporte ao driver fla, que seja menor que 1.4 Mb, você pode criar uma imagem customizada do kern.flp com ele, seguindo as seguintes instruções:

  1. Obtenha uma copia do arquivo kern.flp

  2. # vnconfig vn0c kern.flp
    
  3. # mount /dev/vn0c /mnt
    
  4. Coloque o seu kernel no diretório /mnt , substituindo o que já existe.

  5. # vnconfig -d vn0c
    

O seu arquivo kern.flp agora possui um novo kernel.


6. Estratégias para configuração de sistemas reduzidos e com sistemas de arquivos em modo de apenas leitura

Na sessão Seção 3, foi mencionado que o sistema de arquivos /var criado pelo /etc/rc.diskless2 e a presença de uma partição raiz em modo de apenas leitura causariam problemas com muitos softwares utilizados normalmente com o FreeBSD. Nesta sessão vamos dar algumas sugestões para rodar com sucesso o cron, o syslogd, o web server apache, instalação de aplicativos via ports.


6.1. cron

No /etc/rc.diskless2 existe uma variável chamada var_dirs. Esta variável consiste em uma lista de diretórios (separados por espaço em branco) os quais serão criados dentro do /var depois que ele for montado como um sistema de arquivo em memória. O diretório cron e o cron/tabs não estão nesta lista, e sem estes diretórios, o cron não irá executar. Inserindo o cron, cron/tabs, e se possível também o at, e o at/jobs como elementos desta variável, você irá possibilitar a execução dos daemons cron(8) e at(1).

Entretanto, isto não resolve o problema de manutenção das tabs do cron entre um boot e outro. Quando o sistema reseta, o sistema de arquivos /var que esta em memória irá desaparecer, e qualquer tab do cron que você tenha nele irá desaparecer também. Desta forma, uma solução pode ser criar as tabs do cron para os usuários que precisam delas, monte o seu / em modo de leitura e esscrita e copie as tabs do cron para algum lugar seguro, como por exemplo para /etc/tabs, e então adicione uma linha no final do /etc/rc.diskless2 que copie estas crontabs para o diretório /var/cron/tabs depois que o diretório tiver sido criado durante a inicialização do sistema. Você pode precisar adicionar uma linha que altere as permissões dos diretórios que você criou e dos arquivos que você copiou com o /etc/rc.diskless2.


6.2. syslog

O syslog.conf especifica a localização de certos arquivos de log que precisam existir no diretório /var/log. Estes arquivos não são criados pelo /etc/rc.diskless2 durante a inicialização do sistema. Desta forma, em algum lugar no /etc/rc.diskless2, depois da sessão que cria os diretórios no /var, você vai precisar criar algo como:

# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages
# chmod 0644 /var/log/*

Voce também terá que adicionar o diretório log a lista de diretórios que o /etc/rc.diskless2 cria.


6.3. Instalação de aplicativos via ports

Antes de iniciar a discussão sobre as alterações necessárias para usar com sucesso a árvore do ports, é necessário um lembrete a respeito da natureza de apenas leitura do seu sistema de arquivos na sua unidade de memória flash. Uma vez que ele é montado em modo de apenas leitura, você irá precisar montá-lo temporariamente em modo de leitura e escrita usando a sintaxe de comando mostrada na sessão Seção 3. Você deve remontar esses sistemas de arquivos em modo de apenas leitura sempre que finalizar qualquer tipo de manutenção - operações de escrita desnecessárias podem encurtar consideravelmente a vida útil da sua memória flash.

Para que seja possivel entrar no diretório de um port e executar com sucesso o comando make install, e necessário que o arquivo /var/db/port.mkversion exista, e que contenha a data correta. Além disso, nós precisamos criar um diretório para os pacotes em um sistema de arquivo que não seja montado em memória RAM, o qual irá manter o registro dos nossos pacotes entre um boot e outro. Por causa disso é necessário montar o seu sistema de arquivos em modo leitura e escrita sempre que que for necessário instalar algum aplicativo, de forma que é correto assumir que teremos que reservar uma área em nossa unidade flash na qual as informações dos pacotes serão gravadas.

Primeiro, crie um diretório para conter o banco de dados dos pacotes. Ele normalmente fica localizado no /var/db/pkg, mas nós não podemos colocá-lo ali, pois do contrário ele irá desaparecer sempre que o sistema for resetado. Desta forma precisamos colocá-lo em um local seguro, por exemplo:

# mkdir /etc/pkg

Agora, adicione uma linha ao /etc/rc.diskless2 a qual cria um link simbólico do /var/db/pkg para o diretório /etc/pkg . Algo como:

# ln -s /etc/pkg /var/db/pkg

Adicione uma outra linha no /etc/rc.diskless2 a qual cria e povoa o arquivo /var/db/port.mkversion

# touch /var/db/port.mkversion
# chmod 0644 /var/db/port.mkversion
# echo 20010412 >> /var/db/port.mkversion

onde 20010412 deve ser a data apropriada para a sua versão específica do FreeBSD.

Agora, sempre que você montar o seu sistema de arquivo em modo de leitura e escrita e instalar um pacote, o comando make install irá funcionar corretamente, pois ele irá encontrar um /var/db/port.mkversion adequado, e as informações do pacote serão gravadas com sucesso no /etc/pkg (porque o sistema de arquivo estará, neste momento, montado em modo de leitura e escrita) o qual estará sempre disponível para o sistema operacional como /var/db/pkg.


6.4. Web Server Apache

O apache mantém seus arquivos de processo (pids) e logs no apache_install/logs. Uma vez que este diretório fica localizado no sistema de arquivo montado em modo de apenas leitura, ele não irá funcionar. E necessário adicionar um novo diretório a lista de diretórios que o /etc/rc.diskless2 cria no /var, para linkar o apache_install/logs para o /var/log/apache. Também será necessário configurar as permissões e o proprietario deste novo diretório.

Primeiro, adicione o diretório log/apache à lista de diretórios a serem criados pelo /etc/rc.diskless2.

Segundo, adicione os comandos abaixo ao /etc/rc.diskless2 logo depois da sessão de criação dos diretórios:

# chmod 0774 /var/log/apache
# chown nobody:nobody /var/log/apache

Finalmente, remova o diretório apache_install /logs, e o substitua por um link simbólico:

# rm -rf (apache_install)/logs
# ln -s /var/log/apache (apache_install)/logs

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