                             Introduccion a NanoBSD

  Daniel Gerzo

   Revision: 397290a0fa

   Copyright (c) 2006 The FreeBSD Documentation Project

   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-06-02 22:47:50 +0000 by Sergio Carlavilla Delgado.
   Resumen

   Este documento provee informacion acerca de la herramienta NanoBSD, la
   cual puede ser usada para crear imagenes del sistema de FreeBSD para
   aplicaciones embebidas, adecuadas para ser usadas en una tarjeta Compact
   Flash (o cualquier otro medio de almacenamiento masivo).

   [ Split HTML / Single HTML ]

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

   Tabla de contenidos

   1. Introduccion a NanoBSD

   2. NanoBSD paso a paso

   Indice

1. Introduccion a NanoBSD

   NanoBSD es una herramienta actualmente desarrollada por Poul-Henning Kamp
   <phk@FreeBSD.org>. Crea una imagen del sistema de FreeBSD para
   aplicaciones embebidas, adecuada para ser usada en una tarjeta Compact
   Flash (o cualquier otro medio de almacenamiento masivo).

   Puede usarse para crear imagenes de instalacion especializadas, disenadas
   para instalar y mantener sistemas comunmente llamados "aparatos de
   computacion". Los aparatos de computacion incluyen el hardware y software
   en el mismo producto, lo cual significa que todas las aplicaciones vienen
   preinstaladas. El aparato se conecta a una red existente y puede comenzar
   a funcionar (casi) de inmediato.

   Las caracteristicas de NanoBSD incluyen:

     * Los ports y paquetes funcionan de la misma manera que en FreeBSD -
       Cada aplicacion puede ser instalada y usada en una imagen de NanoBSD,
       de la misma manera que en FreeBSD.

     * No hay perdida de funcionalidad - Si era posible hacer algo con
       FreeBSD, tambien sera posible hacerlo con NanoBSD, a menos que esa
       caracteristica especifica haya sido eliminada de la imagen de NanoBSD
       cuando fue creada.

     * Todo es de solo lectura en tiempo de ejecucion - Es seguro desconectar
       el cable del enchufe. No hay necesidad de ejecutar fsck(8) despues de
       que el sistema se apague de una forma brusca.

     * Es facil de crear y personalizar - Haciendo uso de un unico script y
       solamente un archivo de configuracion, es posible crear imagenes
       reducidas y personalizadas para satisfacer un conjunto arbitrario de
       requisitos.

2. NanoBSD paso a paso

  2.1. El diseno de NanoBSD

   Una vez que la imagen se encuentre presente en el medio es posible
   arrancar NanoBSD. El medio de almacenamiento masivo esta dividido por
   defecto en tres partes:

     * Dos particiones de la imagen: code#1 y code#2.

     * La particion del archivo de configuracion, la cual puede ser montada
       bajo el directorio /cfg en tiempo de ejecucion.

   Estas particiones normalmente se montan como solo lectura.

   Los directorios /etc y /var son discos md(4) (malloc).

   La particion del archivo de configuracion reside en el directorio /cfg.
   Contiene archivos para el directorio /etc y se monta brevemente como una
   particion de solo lectura tras el arranque del sistema; por consiguiente,
   es necesaria para copiar archivos modificados desde /etc de vuelta hacia
   el directorio /cfg si se espera que los cambios persistan despues de
   reiniciar el sistema.

   Ejemplo 1. Hacer modificaciones persistentes de /etc/resolv.conf

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

  Nota:

   La particion que contiene /cfg deberia ser montada solo en el arranque y
   cuando se sustituyan las directivas de los archivos de configuracion.

   Mantener /cfg montado todo el tiempo no es una buena idea, especialmente
   si el sistema NanoBSD se ejecuta en un medio de almacenamiento masivo que
   puede verse afectado negativamente por un alto numero de escrituras a la
   particion (como cuando el sincronizador del sistema de archivos vuelca los
   datos hacia los discos del sistema).

  2.2. Compilar una imagen de NanoBSD

   Una imagen de NanoBSD se compila usando un simple shell script nanobsd.sh,
   que se encuentra en el directorio /usr/src/tools/tools/nanobsd. Este
   script crea una imagen, que puede ser copiada al medio de almacenamiento
   usando la utilidad dd(1).

   Los comandos necesarios para compilar una imagen de NanoBSD son:

 # 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 Cambie el directorio actual al directorio base del script de compilacion 
     de NanoBSD.                                                              
   2 Comience el proceso de compilacion.                                      
   3 Cambie el directorio actual por el lugar donde se encuentren las         
     imagenes compiladas.                                                     
   4 Instale NanoBSD en el medio de almacenamiento.                           

  2.3. Personalizar una imagen de NanoBSD

   Esta es probablemente la caracteristica mas importante y mas interesante
   de NanoBSD. Tambien es la que le llevara mas tiempo cuando se encuentre
   desarrollando con NanoBSD.

   Invocar el siguiente comando forzara a nanobsd.sh a leer su configuracion
   desde el archivo myconf.nano localizado en el directorio actual:

 # sh nanobsd.sh -c myconf.nano

   La personalizacion puede realizarse de dos formas:

     * Opciones de configuracion

     * Funciones personalizadas

    2.3.1. Opciones de configuracion

   Con las preferencias de configuracion, es posible configurar las opciones
   pasadas a las etapas buildworld e installworld del proceso de compilacion
   de NanoBSD, asi como tambien opciones internas pasadas al proceso de
   compilacion principal de NanoBSD. A traves de estas opciones es posible
   reducir el sistema, para que pueda entrar en un espacio tan pequeno como
   64MB. Puede utilizar estas opciones de configuracion para reducir el
   tamano de FreeBSD aun mas, hasta que consista unicamente en el kernel y
   dos o tres archivos en espacio de usuario.

   El archivo de configuracion consiste en opciones de configuracion que
   sobrescriben los valores por defecto. Las directivas mas importantes son:

     * NANO_NAME - Nombre de la compilacion (utilizada para crear los nombres
       de los directorios de trabajo).

     * NANO_SRC - Ruta al archivo fuente utilizada para compilar la imagen.

     * NANO_KERNEL - Nombre del archivo de configuracion del kernel utilizado
       para compilar el kernel.

     * CONF_BUILD - Opciones pasadas a la etapa buildworld del proceso de
       compilacion.

     * CONF_INSTALL - Opciones pasadas a la etapa installworld del proceso de
       compilacion.

     * CONF_WORLD - Opciones pasadas a las etapas buildworld e installworld
       del proceso de compilacion.

     * FlashDevice - Define el tipo de medio que se usara. Consulte
       FlashDevice.sub para mas detalles.

    2.3.2. Funciones Personalizadas

   Es posible configurar cada aspecto de NanoBSD utilizando funciones del
   shell en el archivo de configuracion. El siguiente ejemplo ilustra el
   modelo basico de funciones personalizadas:

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

   Un ejemplo mas util de una funcion de personalizacion es el siguiente, el
   cual cambia el tamano por defecto del directorio /etc de 5MB a 30MB:

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

   Estas son algunas funciones de personalizacion incluidas por defecto y
   listas para ser usadas:

     * cust_comconsole - Deshabilita getty(8) en los dispositivos VGA (los
       nodos de dispositivo /dev/ttyv*) y habilita el uso del puerto serie
       COM1 como la consola del sistema.

     * cust_allow_ssh_root - Permite que root se autentique mediante sshd(8).

     * cust_install_files - Instala archivos desde el directorio
       nanobsd/Files, el cual contiene algunos scripts utiles para la
       administracion del sistema.

    2.3.3. Agregando paquetes

   Pueden agregarse paquetes a la imagen de NanoBSD utilizando una funcion
   personalizada. La siguiente funcion instalara todos los paquetes situados
   en /usr/src/tools/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. Ejemplo de archivo de configuracion

   Un ejemplo completo de un archivo de configuracion para crear una imagen
   personalizada de NanoBSD podria 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. Actualizando NanoBSD

   El proceso de actualizacion de NanoBSD es relativamente simple:

    1. Compile una nueva imagen de NanoBSD, como de costumbre.

    2. Suba la nueva imagen a una particion sin usar de un aparato NanoBSD
       que se encuentre en ejecucion.

       La diferencia mas importante entre este paso y la instalacion inicial
       de NanoBSD es que ahora, en lugar de usar _.disk.full (que contiene la
       imagen completa del disco), se instala la imagen _.disk.image (la cual
       contiene la imagen de una sola particion del sistema).

    3. Reinicie y arranque el sistema desde la particion recien instalada.

    4. Si todo termino correctamente, la actualizacion habra finalizado.

    5. Si algo sale mal, reinicie en la particion anterior (que contiene la
       antigua imagen que funciona correctamente), para restaurar la
       funcionalidad del sistema tan rapido como sea posible. Arregle los
       problemas de la nueva imagen y repita el proceso.

   Para instalar la nueva imagen en el sistema NanoBSD actual, es posible
   usar los scripts updatep1 o updatep2 que se encuentran en el directorio
   /root, dependiendo de la particion desde la que este ejecutando el sistema
   actual.

   Segun que servicios que se encuentren disponibles en el huesped sirviendo
   la nueva imagen NanoBSD y el tipo de transferencia que se prefiera, es
   posible utilizar uno de estos tres metodos:

    2.4.1. Usando ftp(1)

   Si la velocidad de transferencia es una prioridad para usted, utilice este
   ejemplo:

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

    2.4.2. Usando ssh(1)

   Si prefiere una transferencia segura, considere usar este ejemplo:

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

    2.4.3. Usando nc(1)

   Puede utilizar este ejemplo si el huesped remoto no esta ejecutando los
   servicios ftpd(8) o sshd(8):

    1. En primer lugar, abra un puerto TCP en el huesped que se encuentra
       sirviendo la imagen y haga que envie la imagen al cliente:

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

  Nota:

       Asegurese de que el puerto usado no este bloqueado para recibir
       conexiones entrantes del huesped NanoBSD por el firewall.

    2. Conectese al huesped sirviendo la nueva imagen y ejecute el script
       updatep1:

 # nc myhost 2222 | sh updatep1

Indice

  N

   NanoBSD, Introduccion a NanoBSD
