                             Introduc,ao ao NanoBSD

  Daniel Gerzo

   Revision: f94fb6e433

   Copyright (c) 2006 Projeto de Documentac,ao do FreeBSD

   FreeBSD is a registered trademark of the FreeBSD Foundation.

   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 "(TM)" or the "(R)"
   symbol.

   Last modified on 2019-04-21 13:50:06 +0000 by Edson Brandi.
   Resumo

   Este documento fornece informac,oes sobre as ferramentas NanoBSD, que
   podem ser usadas para criar imagens do sistema FreeBSD para aplicativos
   embarcados, adequadas para uso em um cartao Compact Flash (ou outro meio
   de armazenamento em massa).

   [ Documento HTML em partes / Documento HTML completo ]

     ----------------------------------------------------------------------

   Indice

   1. Introduc,ao ao NanoBSD

   2. NanoBSD Howto

   Indice Remissivo

1. Introduc,ao ao NanoBSD

   O NanoBSD e uma ferramenta atualmente desenvolvida por Poul-Henning Kamp
   <phk@FreeBSD.org>. Ele cria uma imagem do sistema FreeBSD para aplicativos
   embarcados, adequada para uso em um cartao Compact Flash (ou outro meio de
   armazenamento em massa).

   Ele pode ser usado para construir imagens de instalac,ao especializadas,
   projetadas para facil instalac,ao e manutenc,ao de sistemas comumente
   chamados de "appliances". Os appliances tem seu hardware e software
   agrupados no produto, o que significa que todos os aplicativos sao
   pre-instalados. O appliance e conectado a uma rede existente e pode
   comec,ar a funcionar (quase) imediatamente.

   Os recursos do NanoBSD incluem:

     * Os Ports e os pacotes funcionam como no FreeBSD - Cada aplicativo pode
       ser instalado e usado em uma imagem do NanoBSD, da mesma forma que no
       FreeBSD.

     * Nenhuma funcionalidade ausente - Se e possivel fazer algo com o
       FreeBSD, e possivel fazer a mesma coisa com o NanoBSD, a menos que o
       recurso ou os recursos especificos sejam explicitamente removidos do
       NanoBSD quando a imagem foi criada.

     * Todo o sistema opera em modo read-only em tempo de execuc,ao - E
       seguro puxar o plugue de alimentac,ao. Nao ha necessidade de executar
       fsck(8) apos um desligamento abrupto do sistema.

     * E facil de criar e personalizar - Usando apenas um script de shell e
       um arquivo de configurac,ao, e possivel criar imagens reduzidas e
       personalizadas, satisfazendo qualquer conjunto arbitrario de
       requisitos.

2. NanoBSD Howto

  2.1. O Design do NanoBSD

   Quando a imagem estiver presente na midia, e possivel inicializar o
   NanoBSD. O meio de armazenamento em massa e dividido em tres partes por
   padrao:

     * Duas partic,oes de imagem: code#1 e code#2.

     * A partic,ao do arquivo de configurac,ao, que pode ser montada no
       diretorio /cfg em tempo de execuc,ao.

   Essas partic,oes sao normalmente montadas em modo read-only (somente
   leitura).

   Os diretorios /etc e /var sao discos criados em memoria (malloc) pelo
   comando md(4).

   A partic,ao do arquivo de configurac,ao persiste no diretorio /cfg. Ele
   contem arquivos para o diretorio /etc e e brevemente montado como
   read-only logo apos a inicializac,ao do sistema, portanto e necessario
   copiar os arquivos modificados de /etc de volta para o /cfg se as
   alterac,oes precisarem ser mantidas apos a reinicializac,ao do sistema.

   Exemplo 1. Fazendo Mudanc,as Persistentes no /etc/resolv.conf

 # vi /etc/resolv.conf
 [...]
 # mount /cfg
 # cp /etc/resolv.conf /cfg
 # umount /cfg

  Nota:

   A partic,ao que contem o /cfg deve ser montada somente no momento da
   inicializac,ao ou quando for preciso sobrescrever os arquivos de
   configurac,ao.

   Manter o /cfg montado o tempo todo nao e uma boa ideia, especialmente se o
   sistema NanoBSD for executado em um meio de armazenamento em massa que
   pode ser afetado negativamente por um grande numero de gravac,oes na
   partic,ao (como quando o sistema de arquivos sincroniza os dados para os
   discos do sistema).

  2.2. Construindo uma imagem NanoBSD

   Uma imagem NanoBSD e construida usando um simples shell script nanobsd.sh,
   que pode ser encontrado no diretorio /usr/src/tools/tools/nanobsd. Este
   script cria uma imagem, que pode ser copiada no meio de armazenamento
   usando o utilitario dd(1).

   Os comandos necessarios para construir uma imagem NanoBSD sao:

 # cd /usr/src/tools/tools/nanobsd 1
 # sh nanobsd.sh 2
 # cd /usr/obj/nanobsd.full 3
 # dd if=_.disk.full of=/dev/da0 bs=64k 4

   1 Altere o diretorio atual para o diretorio base do script de construc,ao  
     do NanoBSD.                                                              
   2 Comece o processo de construc,ao.                                        
   3 Altere o diretorio atual para o local onde as imagens construidas estao  
     localizadas.                                                             
   4 Instale o NanoBSD no meio de armazenamento.                              

  2.3. Personalizando uma imagem NanoBSD

   Este e provavelmente o recurso mais importante e interessante do NanoBSD.
   Este tambem e o lugar onde voce passara a maior parte do tempo
   desenvolvendo com o NanoBSD.

   A execuc,ao do seguinte comando forc,ara o nanobsd.sh a ler sua
   configurac,ao do myconf.nano localizado no diretorio atual:

 # sh nanobsd.sh -c myconf.nano

   A personalizac,ao e feita de duas maneiras:

     * Opc,oes de configurac,ao

     * Func,oes personalizadas

    2.3.1. Opc,oes de configurac,ao

   Com as definic,oes de configurac,ao, e possivel configurar as opc,oes
   passadas tanto para o estagio buildworld quando para o installworld do
   processo de construc,ao do NanoBSD, bem como opc,oes internas passadas
   para o processo principal de construc,ao do NanoBSD. Atraves destas
   opc,oes, e possivel reduzir o sistema para que ele caiba, por exemplo, em
   um cartao de memoria de 64 MB. Voce pode usar as opc,oes de configurac,ao
   para reduzir ainda mais o FreeBSD, ate que ele consista apenas no kernel e
   em dois ou tres arquivos na area de usuario.

   O arquivo de configurac,ao consiste em opc,oes de configurac,ao, que
   substituem os valores padroes. As diretivas mais importantes sao:

     * NANO_NAME - Nome da compilac,ao (usada para construir os nomes do
       diretorio de trabalho).

     * NANO_SRC - Caminho para o diretorio com o codigo fonte que sera
       utilizado na construc,ao da imagem.

     * NANO_KERNEL - Nome do arquivo de configurac,ao do kernel usado para
       construir o kernel.

     * CONF_BUILD - Opc,oes passadas para o estagio buildworld da
       compilac,ao.

     * CONF_INSTALL - Opc,oes passadas para o estagio installworld da
       compilac,ao.

     * CONF_WORLD - Opc,oes passadas para o estagio buildworld e o
       installworld da compilac,ao.

     * FlashDevice - define o tipo de midia a ser usado. Verifique o
       FlashDevice.sub para mais detalhes.

    2.3.2. Func,oes Personalizadas

   E possivel ajustar o NanoBSD usando as func,oes do shell no arquivo de
   configurac,ao. O exemplo a seguir ilustra o modelo basico de func,oes
   personalizadas:

 cust_foo () (
         echo "bar=baz" > \
                 ${NANO_WORLDDIR}/etc/foo
 )
 customize_cmd cust_foo

   Um exemplo mais util de uma func,ao de customizac,ao e o seguinte, o qual
   altera o tamanho padrao do diretorio /etc de 5MB para 30MB:

 cust_etc_size () (
         cd ${NANO_WORLDDIR}/conf
         echo 30000 > default/etc/md_size
 )
 customize_cmd cust_etc_size

   Existem algumas func,oes de customizac,ao pre-definidas por padrao e
   prontas para uso:

     * cust_comconsole - Desabilita o getty(8) nos dispositivos VGA (os
       device nodes /dev/ttyv*) e habilita o uso do console do sistema na
       serial COM1.

     * cust_allow_ssh_root - Permite que o root fac,a o login via sshd(8).

     * cust_install_files - Instala arquivos do diretorio nanobsd/Files, que
       contem alguns scripts uteis para administrac,ao do sistema.

    2.3.3. Adicionando Pacotes

   Pacotes podem ser adicionados a uma imagem NanoBSD usando uma func,ao
   customizada. A seguinte func,ao ira instalar todos os pacotes localizados
   em /usr/src/files/tools/nanobsd/packages:

 install_packages () (
 mkdir -p ${NANO_WORLDDIR}/packages
 cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages
 cp $(which pkg-static) ${NANO_WORLDDIR}/
 chroot ${NANO_WORLDDIR} sh -c 'cd packages; /pkg-static add *;cd ..;'
 rm -rf ${NANO_WORLDDIR}/packages ${NANO_WORLDDIR}/pkg-static
 )
 customize_cmd install_packages

    2.3.4. Exemplo do arquivo de configurac,ao

   Um exemplo completo de um arquivo de configurac,ao para criar uma imagem
   NanoBSD personalizada pode ser:

 NANO_NAME=custom
 NANO_SRC=/usr/src
 NANO_KERNEL=MYKERNEL
 NANO_IMAGES=2

 CONF_BUILD='
 WITHOUT_KLDLOAD=YES
 WITHOUT_NETGRAPH=YES
 WITHOUT_PAM=YES
 '

 CONF_INSTALL='
 WITHOUT_ACPI=YES
 WITHOUT_BLUETOOTH=YES
 WITHOUT_FORTRAN=YES
 WITHOUT_HTML=YES
 WITHOUT_LPR=YES
 WITHOUT_MAN=YES
 WITHOUT_SENDMAIL=YES
 WITHOUT_SHAREDOCS=YES
 WITHOUT_EXAMPLES=YES
 WITHOUT_INSTALLLIB=YES
 WITHOUT_CALENDAR=YES
 WITHOUT_MISC=YES
 WITHOUT_SHARE=YES
 '

 CONF_WORLD='
 WITHOUT_BIND=YES
 WITHOUT_MODULES=YES
 WITHOUT_KERBEROS=YES
 WITHOUT_GAMES=YES
 WITHOUT_RESCUE=YES
 WITHOUT_LOCALES=YES
 WITHOUT_SYSCONS=YES
 WITHOUT_INFO=YES
 '

 FlashDevice SanDisk 1G

 cust_nobeastie() (
         touch ${NANO_WORLDDIR}/boot/loader.conf
         echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf
 )

 customize_cmd cust_comconsole
 customize_cmd cust_install_files
 customize_cmd cust_allow_ssh_root
 customize_cmd cust_nobeastie

  2.4. Atualizando o NanoBSD

   O processo de atualizac,ao do NanoBSD e relativamente simples:

    1. Crie uma nova imagem NanoBSD, como de costume.

    2. Carregue a nova imagem em uma partic,ao nao usada de um dispositivo
       NanoBSD em execuc,ao.

       A diferenc,a mais importante deste passo da instalac,ao inicial do
       NanoBSD e que agora, em vez de usar _. Disk.full (que contem uma
       imagem do disco todo), a imagem _.disk.image esta instalada (a qual
       contem uma imagem de uma unica partic,ao do sistema).

    3. Reinicie e inicie o sistema a partir da partic,ao recem-instalada.

    4. Se tudo correr bem, a atualizac,ao esta concluida.

    5. Se algo der errado, reinicie a partic,ao anterior (que contem a imagem
       antiga que estava em funcionamento) para restaurar a funcionalidade do
       sistema o mais rapido possivel. Corrija quaisquer problemas da nova
       compilac,ao e repita o processo.

   Para instalar uma nova imagem no sistema NanoBSD, e possivel usar o script
   updatep1 ou updatep2 localizado no diretorio /root, dependendo de qual
   partic,ao o sistema atual esta executando.

   De acordo com os servic,os que estiverem disponiveis no servidor que
   contem a nova imagem NanoBSD e o tipo de transferencia preferido, e
   possivel seguir por uma destas tres maneiras:

    2.4.1. Usando ftp(1)

   Se a velocidade de transferencia estiver em primeiro lugar, use este
   exemplo:

 # ftp myhost
 get _.disk.image "| sh updatep1"

    2.4.2. Usando ssh(1)

   Se uma transferencia segura for preferida, considere usar este exemplo:

 # ssh myhost cat _.disk.image.gz | zcat | sh updatep1

    2.4.3. Usando nc(1)

   Tente este exemplo se o host remoto que contem a nova imagem nao estiver
   executando o servic,o ftpd(8) e nem o servic,o sshd(8) :

    1. Primeiramente, abra um socket TCP em modo escuta no host que serve a
       imagem e envie a imagem para o cliente:

 myhost# nc -l 2222 < _.disk.image

  Nota:

       Certifique-se de que a porta usada nao esteja bloqueada para receber
       conexoes de entrada do host NanoBSD pelo firewall.

    2. Conecte-se ao host que esta servindo a nova imagem e execute o script
       updatep1:

 # nc myhost 2222 | sh updatep1

Indice Remissivo

  N

   NanoBSD, Introduc,ao ao NanoBSD
