%entities; ]>
Introducción a NanoBSD Daniel Gerzo 2006 The FreeBSD Documentation Project &tm-attrib.freebsd; &tm-attrib.general; $FreeBSD$ $FreeBSD$ Este documento trata sobre NanoBSD. NanoBSD es una herramienta que permite crear imágenes del sistema &os; para su uso en aplicaciones empotradas y listas para cargarse en una tarjeta Compact Flash (u otro medio de almacenamiento masivo). &trans.es.german; Introducción a NanoBSD NanoBSD NanoBSD es una herramienta actualmente desarrollada por &a.phk;. Crea una imagen del sistema &os; para aplicaciones empotradas lista para su uso en una tarjeta Compact Flash (u otro medio de almacenamiento masivo). Puede utilizarse para generar imágenes instalables especiales; está diseñado pensando en una instalación y mantenimiento fáciles en sistemas conocidos como sistemas empotrados. Los sistemas empotrados tienen hardware y software integrado en el producto, lo que significa que todas las aplicaciones están preinstaladas. Estos dispositivos pueden conectarse a una red dada y comenzar a trabajar (casi) inmediatamente. Las características de NanoBSD incluyen: Los ports y paquetes funcionan como en &os;: Cualquier aplicación puede instalarse y usarse en una imagen de NanoBSD de la misma forma que en &os;. No se pierde funcionalidad: Si es posible hacer algo en &os; es posible hacer lo mismo en NanoBSD, a menos que se haya eliminado explícitamente esa característica o características especiales al crear la imagen de NanoBSD. Todo está en modo de sólo lectura durante el funcionamiento del sistema: Un apagado brusco es totalmente seguro. No es necesario ejecutar &man.fsck.8; después de que el sistema sufra un apagón. Fácil de generar y personalizar: Usando un solo script de shell y un fichero de configuración pueden generarse imágenes reducidas y personalizadas que satisfagan cualquier necesidad. NanoBSD <quote>Howto</quote> El diseño de NanoBSD Una vez que la imagen está en el medio puede arrancar NanoBSD. El medio de almacenamiento se divide por omisión en tres partes: Dos particiones de la imagen: code#1 y code#2. La partición que contiene los ficheros de configuración, que puede montarse bajo /cfg durante el funcionamiento del sistema. Estas particiones se montan normalmente en modo de sólo lectura. Los directorios /etc y /var son discos &man.md.4; (malloc). La partición de los ficheros de configuración permanece bajo el directorio /cfg. Este directorio contiene ficheros que usa el directorio /etc y se monta en modo de sólo lectura inmediatamente después 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 después del reinicio del sistema. Cómo hacer cambios persistentes en <filename>/etc/resolv.conf</filename> &prompt.root; vi /etc/resolv.conf [...] &prompt.root; mount /cfg &prompt.root; cp /etc/resolv.conf /cfg &prompt.root; umount /cfg La partición que contiene el directorio /cfg debería montarse únicamente en el arranque y mientras se sobreescriben los ficheros de configuración. 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 número elevado de escrituras en la partición (i.e. cuando el sistema de ficheros sincroniza los datos con el sistema de discos). Cómo 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 deberá copiar al medio de almacenamiento mediante la utilidad &man.dd.1;. Los comandos necesarios para generar una imagen de NanoBSD son: &prompt.root; cd /usr/src/tools/tools/nanobsd &prompt.root; sh nanobsd.sh &prompt.root; cd /usr/obj/nanobsd.full &prompt.root; dd if=_.disk.full of=/dev/da0 bs=64k Cambia el directorio actual por el directorio base del script de generación de NanoBSD. Comienza el proceso de generación. Cambia el directorio actual por el directorio donde se encuentra la imagen generada. Instala NanoBSD dentro del medio de almacenamiento. Personalización de una imagen de NanoBSD Esta es probablemente la característica más importante y más interesante de NanoBSD. Tambié es donde usted pasará la mayor parte del tiempo cuando esté desarrollando con NanoBSD. La invocación del siguiente comando forzará al script nanobsd.sh a leer su configuración desde el fichero mi-configuracion.nano ubicado en el directorio actual: &prompt.root; sh nanobsd.sh -c mi-configuracion.nano La personalización se hace de dos maneras: Opciones de configuración Funciones personalizadas Opciones de configuración Por medio de ajustes de configuración es posible configurar las opciones que se pasan a las fases buildworld e installworld del proceso de generación de NanoBSD. Mediante estas opciones puede reducirse el tamaño del sistema de manera que pueda incluso encajar en algo tan pequeño como un dispositivo de 64MB. Es posible recortar &os; incluso más, hasta que consista únicamente en el kernel y dos o tres ficheros de userland. El fichero de configuración está compuesto por opciones de configuración que sobreescriben los valores por omisión. Las directivas más importantes son: NANO_NAME : Nombre de la generación que estamos ejecutando (se usa para dar nombres a los directorios donde encontraremos el resultado del proceso). NANO_SRC : Ruta al código fuente que se usará para generar la imagen. NANO_KERNEL : Nombre del fichero de configuración del kernel que se usará 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 usará. Para más información consulte el fichero FlashDevice.sub. Funciones personalizadas Puede ajustar NanoBSD de forma muy precisa mediante el uso de funciones de shell en el fichero de configuración. En el siguiente ejemplo vemos un modelo básico de función personalizada. cust_foo () ( echo "bar=topless" > \ ${NANO_WORLDDIR}/etc/foo ) customize_cmd cust_foo A continuación vemos un ejemplo más útil de función personalizada, que cambia el tamaño por omisión 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 personalización predefinidas listas para su uso: cust_comconsole : Deshabilita &man.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 través de &man.sshd.8;. cust_install_files : Instala ficheros de configuración desde el directorio nanobsd/files, que contiene scripts útiles para la administración del sistema. Cómo añadir paquetes Se pueden añadir paquetes a la imagen de NanoBSD usando una función personalizada. La siguiente función instalará 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 Ejemplo de fichero de configuración El siguiente es un ejemplo completo de fichero de configuración 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 Cómo actualizar NanoBSD El proceso de actualización de NanoBSD es relativamente simple: Generar una nueva imagen de NanoBSD de la forma habitual. Copiar la nueva imagen sobre la partición no utilizada del sistema empotrado que está usando NanoBSD. La diferencia más importante entre este paso y la instalación 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 partición). Reiniciar y arrancar el sistema desde la partición que se acaba de instalar. Si todo va bien la actualización ha terminado. Si algo va mal reinicie desde la partición anterior (que contiene la imagen vieja, pero que funciona) para recuperar el funcionamiento del sistema lo antes posible. Arregle los problemas de la nueva generación y repita el proceso. Para facilitar la instalación de una imagen nueva en su sistema NanoBSD en funcionamiento dispone de los scripts updatep1 y updatep2, ubicados en el directorio /root. La elección de uno u otro script depende de qué partición esté ejecutando el sistema, la primera o la segunda. Dependiendo de los servicios disponibles en la máquina que va a servir la nueva imagen de NanoBSD y del tipo de transferencia de datos que prefiera uno de estos tres métodos le resultará más o menos interesante: Uso de &man.ftp.1; Si la prioridad es la velocidad de la transferencia use usted este ejemplo: &prompt.root; ftp mi-maquina get _.disk.image "| sh updatep1" Uso de &man.ssh.1; Si la prioridad es la seguridad de la transferencia seguramente ejecutará algo muy parecido a lo siguiente: &prompt.root; ssh mi-maquina cat _.disk.image.gz | zcat | sh updatep1 Uso de &man.nc.1; Si la máquina remota no dispone de servicios de &man.ftp.1; ni de &man.sshd.8; puede recurrir al siguiente ejemplo: Primero abra un puerto TCP de escucha en la máquina que sirve la imagen y envíela al cliente: mi-maquina&prompt.root; nc -l 2222 < _.disk.image Asegúrese de que el puerto elegido no tenga bloqueadas las conexiones entrantes desde la máquina NanoBSD por ningún cortafuegos. Conéctese a la máquina que va servir la nueva imagen y ejecute el script updatep1: &prompt.root; nc mi-maquina 2222 | sh updatep1