Hace poco encargue un kit Alix desde el sitio Netgate, el cual es utilizado para equipos embebidos. El kit consta de gabinete, fuente de alimentación, tarjeta madre y una memoria CF.
Una vez que tuve el equipo en mis manos, me dí a la tarea de instalarle NanoBSD junto con varias aplicaciones que me permitirían ofrecer diferentes servicios.
A continuación les describo las experiencias que tuve con dicho hardware.
Introducción
Los equipos basados en Alix son comúnmente utilizados para ofrecer aplicaciones embebidas como firewalls, routers, proxy, vpn, etc; muy enfocado en redes. Desde luego, al ser equipos genéricos, pueden ser utilizados para ofrecer otros servicios como servidores de archivos , DNS, Web, entre otros.
Existen diferentes sistemas prefabricados basados en FreeBSD que nos ahorraran mucho tiempo al realizar la instalación y personalización, algunos ejemplos son pfSense, que esta orientado a redes; y FreeNAS, que esta enfocado a servidores NAS. Sin embargo, para este articulo, únicamente cubriremos la instalación de NanoBSD.
Instalación
Para realizar la instalación será necesario contar con un sistema FreeBSD con el código fuente del sistema (1), así como un lector de memorias, una memoria CF, y un cable tipo "null" para efectuar la conexión por puerto serie.
Lo primero que tenemos que hacer es obtener la estructura de la memoria CF, sectores, cabezas y tamaño; esto es necesario para que al momento de construir la imagen, no nos marque errores de escritura o espacio insuficiente. El comando a ejecutar es el siguiente:
# diskinfo -v da1 da1 512 # sectorsize 2011226112 # mediasize in bytes 3928176 # mediasize in sectors 244 # Cylinders according to firmware. 255 # Heads according to firmware 63 # Sectors according to firmware
Los datos que se muestran corresponden a una memoria Sandisk de 2GB, da1 es el dispositivo asociado, no es necesario escribir la ruta completa (/dev/da1). Los datos importantes son heads (255), sectors (63) y mediasize in sectors (3928176).
El siguiente paso es guardar los datos anteriores en el archivo de configuración de NanoBSD, el cual crearemos con el nombre "alix.nano" y residirá en el directorio "/usr/src/tools/tools/nanobsd". A continuación aparece el contenido del archivo:
# alix.nano NANO_KERNEL="ALIX" NANO_SECTS="" NANO_HEADS="" NANO_MEDIASIZE="" customize_cmd cust_comconsole customize_cmd cust_pkg
Ahora una breve explicación de cada una de las lineas del archivo de configuracion.
NANO_KERNEL sirve para especificar el kernel a compilar/utilizar, en este caso utilizaremos el kernel "ALIX" previamente configurado.
NANO_SECTS, NANO_HEADS y NANO_MEDIASIZE representan el número de sectores, headers y tamaño de la memoria. Estas variables podrían omitirse y en su lugar utilizar la linea "FlashDevice Sandisk 2G", que ajusta los valores los predefinidos, sin embargo, en mi caso no correspondieron con la memoria y siempre recibía mensajes de error.
Las lineas "customize_cmd" sirven para ejecutar funciones de shell, en este caso vemos las funciones cust_comconsole y cust_pkg que son predefinidas y configuran la conexión por puerto serie e instalan una serie de paquetes, respectivamente. Los paquetes tiene que estar en el directorio "Pkg" dentro de "/usr/src/tools/tools/nanobsd", aunque puede cambiarse la ruta si se modifica la variable NANO_PACKAGE_DIR.
El siguiente paso es realizar la construcción del sistema, para esto utilizamos el script "nanobsd.sh" que reside en el directorio "/usr/src/tools/tools/nanobsd". Este script soporta varios argumentos, de entre los que destacan los siguientes:
-b Suprime los "builds" (ambos, kernel y world) -i Suprime la creación de la imagen -k Suprime el buildkernel -w Suprime el buildworld -c Especifica un archivo de configuración
El argumento -b es muy útil para cuando queremos generar la imagen sin volver a recompilar todo el sistema. El comando a ejecutar para construir el sistema es el siguiente:
# sh nanobsd.sh -c alix.nano
El comando lo que hace es compilar el world, el kernel, ejecutar los comandos "customize_cmd" y generar la imagen, por lo cual puede tomar mucho tiempo dependiendo de la maquina donde se ejecute.
Una vez concluido el proceso, se nos creará el directorio "/usr/obj/nanobsd.full" donde reside todo lo que fue generado por el script (logs, directorios y archivos e imagen).
Ya para terminar la generación del nanobsd, lo único que hace falta es grabar la imagen en la memoria, esto lo hacemos con el siguiente comando:
# dd if=/usr/obj/nanobsd.full/_.disk.full of=/dev/da1 bs=64k
El archivo "_.disk.full" es la imagen del sistema y da1 es el dispositivo correspondiente a la memoria CF.
Al terminar el comando, ya podemos retirar la memoria, colocarla en nuestra tarjeta alix y proceder con la configuración.
Configuración
Lo primero que vamos a hacer es conectar el cable del puerto serie de la computadora con el puerto serie del kit y conectarnos utilizando el comando siguiente:
cu -l /dev/cuau0 -s 38400
Después conectamos el kit a la corriente, y debemos de ver en la consola toda la salida del kit.
En caso de que se vean caracteres extraños, hay que reconectarse utilizando otro baud rate, en este enlace aparecen varias velocidades con las que puedes probar.
Por defecto las tarjetas alix vienen configuradas con un baud rate de 38400, este valor hay que cambiarlo en el BIOS a 9600 ya que NanoBSD (y FreeBSD) por defecto, solo soporta esta velocidad. Una vez hecho el cambio, hay que reconectarse usando el nuevo baud rate y reiniciar el kit.
En este punto se debe de ver correctamente la secuencia de inicio del sistema hasta llegar al "login".
Para entrar al sistema nos logeamos como usuario "root", no se solicitará contraseña, y ya podemos proceder a configurar el sistema de forma habitual.
El sistema es montado por defecto como solo lectura, esto es así ya que las memorias CF son lentas de escribir y soportan relativamente pocas escrituras. Sin embargo, NanoBSD nos brinda la opción de configurar el sistema a traves de la partición "/cfg", la cual podemos montar para realizar cambios que se verán reflejados en el directorio "/etc", y que serán aplicados y mantenidos al reiniciar el sistema.
Conclusiones
Los equipos basados en ALIX son buenos componentes de hardware que, junto con NanoBSD, nos brindan muchas posibilidades de personalización para sistemas embebidos. Son una excelente combinación para servidores de redes, archivos y appliances.
Problemas comunes
Durante el tiempo que estuve haciendo pruebas con el equipo, me encontré con varios problemas, a continuación describo algunos con los que se pueden topar.
1.- Problemas de Baud rate incorrecto
Este fue el principal problema que tuve ya que NanoBSD y FreeBSD por defecto utilizan un baud rate de 9600, y la tarjeta alix lo tiene configurado en 38400. Hay diferentes tipos de soluciones, la mas sencilla es cambiarlo en el bios de la tarjeta alix a 9600, y con eso se evitan muchos problemas.
La segunda solución es cambiarlo en el sistema definiendo la siguiente linea en el archivo /boot/loader.conf":
comconsole_speed="38400"
2.- Sin salida de texto en la conexión
Este problema se presenta al no tener el bootstrap correcto o al no tener el loader configurado adecuadamente. Lo que hay que hacer es agregar el siguiente argumento en el archivo "/boot.config":
-h
e instalar el bootstrap "boot0sio" con el comando "boot0cfg".
Una forma de realizar lo anterior automáticamente, es definiendo la linea "customize_cmd cust_comconsole" en el archivo de configuración de NanoBSD.
3.- Devd bloqueando el inicio
Solo se me presento cuando instale FreeBSD directamente sobre la memoria CF a travez del lector, desactivando devd se soluciona. Para desactivarlo hay que agregar la siguiente linea en el archivo "/etc/rc.conf":
devd_enable="YES"
4.- Espacio insuficiente (write failed, filesystem is full)
Este problema se presenta cuando la geometría de la imagen no coincide, o bien cuando se trata de escribir muchos datos en una imagen pequeña, por ejemplo, 512M en una imagen de 256M. Para evitar estos problemas se recomienda definir siempre las cabezas, sectores y tamaño en el archivo de configuración de NanoBSD.
Notas
(1) Si no cuentas con el código fuente del sistema, descargalo ejecutando el siguiente comando (como root):
# csup -L 1 -h cvsup.freebsd.org /usr/share/examples/cvsup/stable-supfile
Autor
Angel Gabriel León Rodríguez