                         Introduccion a NanoBSD

  Daniel Gerzo

   Copyright (c) 2006 The FreeBSD Documentation Project

   $FreeBSD: doc/es_ES.ISO8859-1/articles/nanobsd/article.sgml,v 1.1
   2008/03/31 16:58:38 carvay Exp $

   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.

   Este documento trata sobre NanoBSD. NanoBSD es una herramienta que
   permite crear imagenes del sistema FreeBSD para su uso en
   aplicaciones empotradas y listas para cargarse en una tarjeta
   Compact Flash (u otro medio de almacenamiento masivo).

   Traduccion de German Marcos <gri.msg@gmail.com>.

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

1. Introduccion a NanoBSD

   NanoBSD es una herramienta actualmente desarrollada por
   Poul-Henning Kamp <phk@FreeBSD.org>. Crea una imagen del sistema
   FreeBSD para aplicaciones empotradas lista para su uso en una
   tarjeta Compact Flash (u otro medio de almacenamiento masivo).

   Puede utilizarse para generar imagenes instalables especiales;
   esta disenado pensando en una instalacion y mantenimiento faciles
   en sistemas conocidos como "sistemas empotrados". Los sistemas
   empotrados tienen hardware y software integrado en el producto, lo
   que significa que todas las aplicaciones estan preinstaladas.
   Estos dispositivos pueden conectarse a una red dada y comenzar a
   trabajar (casi) inmediatamente.

   Las caracteristicas de NanoBSD incluyen:

     * Los ports y paquetes funcionan como en FreeBSD: Cualquier
       aplicacion puede instalarse y usarse en una imagen de NanoBSD
       de la misma forma que en FreeBSD.

     * No se pierde funcionalidad: Si es posible hacer algo en
       FreeBSD es posible hacer lo mismo en NanoBSD, a menos que se
       haya eliminado explicitamente esa caracteristica o
       caracteristicas especiales al crear la imagen de NanoBSD.

     * Todo esta en modo de solo lectura durante el funcionamiento
       del sistema: Un apagado brusco es totalmente seguro. No es
       necesario ejecutar fsck(8) despues de que el sistema sufra un
       apagon.

     * Facil de generar y personalizar: Usando un solo script de
       shell y un fichero de configuracion pueden generarse imagenes
       reducidas y personalizadas que satisfagan cualquier necesidad.

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

2. NanoBSD "Howto"

  2.1. El diseno de NanoBSD

   Una vez que la imagen esta en el medio puede arrancar NanoBSD. El
   medio de almacenamiento se divide por omision en tres partes:

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

     * La particion que contiene los ficheros de configuracion, que
       puede montarse bajo /cfg durante el funcionamiento del
       sistema.

   Estas particiones se montan normalmente en modo de solo lectura.

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

   La particion de los ficheros de configuracion permanece bajo el
   directorio /cfg. Este directorio contiene ficheros que usa el
   directorio /etc y se monta en modo de solo lectura inmediatamente
   despues del arranque; por lo tanto, es necesario que los ficheros
   que se modifiquen en /etc se copien en /cfg si se desea que los
   cambios perduren despues del reinicio del sistema.

   Ejemplo 1. Como hacer cambios persistentes en /etc/resolv.conf

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

     Nota: La particion que contiene el directorio /cfg deberia
     montarse unicamente en el arranque y mientras se sobreescriben
     los ficheros de configuracion.

     No es buena idea montar siempre el directorio /cfg,
     especialmente si el sistema NanoBSD se ejecuta en un dispositivo
     de almacenamiento masivo que pueda verse afectado negativamente
     por un numero elevado de escrituras en la particion (i.e. cuando
     el sistema de ficheros sincroniza los datos con el sistema de
     discos).

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

  2.2. Como generar una imagen de NanoBSD

   Una imagen de NanoBSD se genera usando el sencillo script de shell
   nanobsd.sh, ubicado en el directorio /usr/src/tools/tools/nanobsd.
   El script crea una imagen que se debera copiar al medio de
   almacenamiento mediante la utilidad dd(1).

   Los comandos necesarios para generar 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)
           Cambia el directorio actual por el directorio base del
           script de generacion de NanoBSD.
   (2)
           Comienza el proceso de generacion.
   (3)
           Cambia el directorio actual por el directorio donde se
           encuentra la imagen generada.
   (4)
           Instala NanoBSD dentro del medio de almacenamiento.

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

  2.3. Personalizacion de una imagen de NanoBSD

   Esta es probablemente la caracteristica mas importante y mas
   interesante de NanoBSD. Tambie es donde usted pasara la mayor
   parte del tiempo cuando este desarrollando con NanoBSD.

   La invocacion del siguiente comando forzara al script nanobsd.sh a
   leer su configuracion desde el fichero mi-configuracion.nano
   ubicado en el directorio actual:

 # sh nanobsd.sh -c mi-configuracion.nano

   La personalizacion se hace de dos maneras:

     * Opciones de configuracion

     * Funciones personalizadas

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

    2.3.1. Opciones de configuracion

   Por medio de ajustes de configuracion es posible configurar las
   opciones que se pasan a las fases buildworld e installworld del
   proceso de generacion de NanoBSD. Mediante estas opciones puede
   reducirse el tamano del sistema de manera que pueda incluso
   encajar en algo tan pequeno como un dispositivo de 64MB. Es
   posible recortar FreeBSD incluso mas, hasta que consista
   unicamente en el kernel y dos o tres ficheros de "userland".

   El fichero de configuracion esta compuesto por opciones de
   configuracion que sobreescriben los valores por omision. Las
   directivas mas importantes son:

     * NANO_NAME : Nombre de la generacion que estamos ejecutando (se
       usa para dar nombres a los directorios donde encontraremos el
       resultado del proceso).

     * NANO_SRC : Ruta al codigo fuente que se usara para generar la
       imagen.

     * NANO_KERNEL : Nombre del fichero de configuracion del kernel
       que se usara para generar el kernel.

     * CONF_BUILD : Opciones que se pasan a la fase buildworld.

     * CONF_INSTALL : Opciones que se pasan a la fase installworld.

     * CONF_WORLD : Opciones que se pasan tanto a buildworld como a
       installworld.

     * FlashDevice : Define el tipo de medio de almacenamiento que se
       usara. Para mas informacion consulte el fichero
       FlashDevice.sub.

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

    2.3.2. Funciones personalizadas

   Puede ajustar NanoBSD de forma muy precisa mediante el uso de
   funciones de shell en el fichero de configuracion. En el siguiente
   ejemplo vemos un modelo basico de funcion personalizada.

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

   A continuacion vemos un ejemplo mas util de funcion personalizada,
   que cambia el tamano por omision 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

   Hay unas pocas funciones de personalizacion predefinidas listas
   para su uso:

     * cust_comconsole : Deshabilita getty(8) en los dispositivos VGA
       (los nodos de dispositivo /dev/tty*) y habilita el uso del
       puerto serie COM1 para que sea la consola del sistema.

     * cust_allow_ssh_root : Permite a root acceder a traves de
       sshd(8).

     * cust_install_files : Instala ficheros de configuracion desde
       el directorio nanobsd/files, que contiene scripts utiles para
       la administracion del sistema.

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

    2.3.3. Como anadir paquetes

   Se pueden anadir paquetes a la imagen de NanoBSD usando una
   funcion personalizada. La siguiente funcion instalara todos los
   paquetes que se encuentren en
   /usr/src/tools/tools/nanobsd/packages:

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

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

    2.3.4. Ejemplo de fichero de configuracion

   El siguiente es un ejemplo completo de fichero de configuracion
   para generar una imagen personalizada de NanoBSD:

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

 CONF_BUILD='
 NO_KLDLOAD=YES
 NO_NETGRAPH=YES
 NO_PAM=YES
 '

 CONF_INSTALL='
 NO_ACPI=YES
 NO_BLUETOOTH=YES
 NO_CVS=YES
 NO_FORTRAN=YES
 NO_HTML=YES
 NO_LPR=YES
 NO_MAN=YES
 NO_SENDMAIL=YES
 NO_SHAREDOCS=YES
 NO_EXAMPLES=YES
 NO_INSTALLLIB=YES
 NO_CALENDAR=YES
 NO_MISC=YES
 NO_SHARE=YES
 '

 CONF_WORLD='
 NO_BIND=YES
 NO_MODULES=YES
 NO_KERBEROS=YES
 NO_GAMES=YES
 NO_RESCUE=YES
 NO_LOCALES=YES
 NO_SYSCONS=YES
 NO_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. Como actualizar NanoBSD

   El proceso de actualizacion de NanoBSD es relativamente simple:

    1. Generar una nueva imagen de NanoBSD de la forma habitual.

    2. Copiar la nueva imagen sobre la particion no utilizada del
       sistema empotrado que esta usando NanoBSD.

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

    3. Reiniciar y arrancar el sistema desde la particion que se
       acaba de instalar.

    4. Si todo va bien la actualizacion ha terminado.

    5. Si algo va mal reinicie desde la particion anterior (que
       contiene la imagen vieja, pero que funciona) para recuperar el
       funcionamiento del sistema lo antes posible. Arregle los
       problemas de la nueva generacion y repita el proceso.

   Para facilitar la instalacion de una imagen nueva en su sistema
   NanoBSD en funcionamiento dispone de los scripts updatep1 y
   updatep2, ubicados en el directorio /root. La eleccion de uno u
   otro script depende de que particion este ejecutando el sistema,
   la primera o la segunda.

   Dependiendo de los servicios disponibles en la maquina que va a
   servir la nueva imagen de NanoBSD y del tipo de transferencia de
   datos que prefiera uno de estos tres metodos le resultara mas o
   menos interesante:

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

    2.4.1. Uso de ftp(1)

   Si la prioridad es la velocidad de la transferencia use usted este
   ejemplo:

 # ftp mi-maquina
 get _.disk.image "| sh updatep1"

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

    2.4.2. Uso de ssh(1)

   Si la prioridad es la seguridad de la transferencia seguramente
   ejecutara algo muy parecido a lo siguiente:

 # ssh mi-maquina cat _.disk.image.gz | zcat | sh updatep1

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

    2.4.3. Uso de nc(1)

   Si la maquina remota no dispone de servicios de ftp(1) ni de
   sshd(8) puede recurrir al siguiente ejemplo:

    1. Primero abra un puerto TCP de escucha en la maquina que sirve
       la imagen y enviela al cliente:

 mi-maquina# nc -l 2222 < _.disk.image

         Nota: Asegurese de que el puerto elegido no tenga bloqueadas
         las conexiones entrantes desde la maquina NanoBSD por ningun
         cortafuegos.

    2. Conectese a la maquina que va servir la nueva imagen y ejecute
       el script updatep1:

 # nc mi-maquina 2222 | sh updatep1

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

          Puede descargar este y muchos otros documentos desde
                ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentacion antes de escribir
                  a la lista <questions@FreeBSD.org>.
    Envie sus preguntas sobre la documentacion a <doc@FreeBSD.org>.
