563 lines
18 KiB
XML
563 lines
18 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.5-Based Extension//EN"
|
|
"../../../share/xml/freebsd45.dtd">
|
|
|
|
<!-- The FreeBSD Spanish Documentation Project
|
|
Original Revision: r1.3 -->
|
|
|
|
|
|
<article lang="es">
|
|
|
|
<articleinfo>
|
|
<title>Introducción a NanoBSD</title>
|
|
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Daniel</firstname>
|
|
<surname>Gerzo</surname>
|
|
</author>
|
|
</authorgroup>
|
|
|
|
<copyright>
|
|
<year>2006</year>
|
|
<holder>The FreeBSD Documentation Project</holder>
|
|
</copyright>
|
|
|
|
<legalnotice id="trademarks" role="trademarks">
|
|
&tm-attrib.freebsd; &tm-attrib.general;
|
|
</legalnotice>
|
|
|
|
<pubdate>$FreeBSD$</pubdate>
|
|
|
|
<releaseinfo>$FreeBSD$</releaseinfo>
|
|
|
|
<abstract>
|
|
<para>Este documento trata sobre <application>NanoBSD</application>.
|
|
<application>NanoBSD</application> 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).</para>
|
|
&trans.es.german;
|
|
</abstract>
|
|
</articleinfo>
|
|
|
|
<sect1 id="intro">
|
|
<title>Introducción a NanoBSD</title>
|
|
|
|
<indexterm><primary>NanoBSD</primary></indexterm>
|
|
|
|
<para><application>NanoBSD</application> 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).</para>
|
|
|
|
<para>Puede utilizarse para generar imágenes
|
|
instalables especiales; está diseñado pensando en una
|
|
instalación y mantenimiento fáciles en sistemas
|
|
conocidos como <quote>sistemas empotrados</quote>. 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.</para>
|
|
|
|
<para>Las características
|
|
de <application>NanoBSD</application> incluyen:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Los ports y paquetes funcionan como en &os;:
|
|
Cualquier aplicación puede instalarse y usarse en
|
|
una imagen de <application>NanoBSD</application> de la
|
|
misma forma que en &os;.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>No se pierde funcionalidad: Si es posible hacer
|
|
algo en &os; es posible hacer lo mismo
|
|
en <application>NanoBSD</application>, a menos que se haya
|
|
eliminado explícitamente esa característica o
|
|
características especiales al crear la imagen
|
|
de <application>NanoBSD</application>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>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.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>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.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
<sect1 id="howto">
|
|
<title>NanoBSD <quote>Howto</quote></title>
|
|
|
|
<sect2 id="design">
|
|
<title>El diseño de NanoBSD</title>
|
|
|
|
<para>Una vez que la imagen está en el medio puede
|
|
arrancar <application>NanoBSD</application>. El medio
|
|
de almacenamiento se divide por omisión en tres
|
|
partes:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Dos particiones de la imagen: <literal>code#1</literal>
|
|
y <literal>code#2</literal>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>La partición que contiene los ficheros de
|
|
configuración, que puede montarse bajo
|
|
<filename class="directory">/cfg</filename> durante el
|
|
funcionamiento del sistema.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Estas particiones se montan normalmente en modo de
|
|
sólo lectura.</para>
|
|
|
|
<para>Los directorios <filename class="directory">/etc</filename>
|
|
y <filename class="directory">/var</filename> son discos
|
|
&man.md.4; (malloc).</para>
|
|
|
|
<para>La partición de los ficheros de configuración
|
|
permanece bajo el
|
|
directorio <filename class="directory">/cfg</filename>. Este
|
|
directorio contiene ficheros que usa el
|
|
directorio <filename class="directory">/etc</filename> 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 <filename class="directory">/etc</filename> se copien
|
|
en <filename class="directory">/cfg</filename> si se desea que
|
|
los cambios perduren después del reinicio del
|
|
sistema.</para>
|
|
|
|
<example>
|
|
<title>Cómo hacer cambios persistentes
|
|
en <filename>/etc/resolv.conf</filename></title>
|
|
|
|
<screen>&prompt.root; <userinput>vi /etc/resolv.conf</userinput>
|
|
[...]
|
|
&prompt.root; <userinput>mount /cfg</userinput>
|
|
&prompt.root; <userinput>cp /etc/resolv.conf /cfg</userinput>
|
|
&prompt.root; <userinput>umount /cfg</userinput></screen>
|
|
</example>
|
|
|
|
<note>
|
|
<para>La partición que contiene el
|
|
directorio <filename class="directory">/cfg</filename>
|
|
debería montarse únicamente en el arranque y
|
|
mientras se sobreescriben los ficheros de
|
|
configuración.</para>
|
|
|
|
<para>No es buena idea montar siempre el
|
|
directorio <filename class="directory">/cfg</filename>,
|
|
especialmente si el
|
|
sistema <application>NanoBSD</application> 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).</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Cómo generar una imagen de NanoBSD</title>
|
|
|
|
<para>Una imagen de <application>NanoBSD</application> se genera
|
|
usando el sencillo script de
|
|
shell <filename>nanobsd.sh</filename>, ubicado en el
|
|
directorio <filename class="directory"><replaceable>/usr</replaceable>/src/tools/tools/nanobsd</filename>.
|
|
El script crea una imagen que se deberá copiar al medio
|
|
de almacenamiento mediante la utilidad &man.dd.1;.</para>
|
|
|
|
<para>Los comandos necesarios para generar una imagen
|
|
de <application>NanoBSD</application> son:</para>
|
|
|
|
<screen>&prompt.root; <userinput>cd /usr/src/tools/tools/nanobsd</userinput> <co id="nbsd-cd"/>
|
|
&prompt.root; <userinput>sh nanobsd.sh</userinput> <co id="nbsd-sh"/>
|
|
&prompt.root; <userinput>cd /usr/obj/nanobsd.full</userinput> <co id="nbsd-cd2"/>
|
|
&prompt.root; <userinput>dd if=_.disk.full of=/dev/da0 bs=64k</userinput> <co id="nbsd-dd"/></screen>
|
|
|
|
<calloutlist>
|
|
<callout arearefs="nbsd-cd">
|
|
<para>Cambia el directorio actual por el directorio base del
|
|
script de generación
|
|
de <application>NanoBSD</application>.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="nbsd-sh">
|
|
<para>Comienza el proceso de generación.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="nbsd-cd2">
|
|
<para>Cambia el directorio actual por el directorio donde se
|
|
encuentra la imagen generada.</para>
|
|
</callout>
|
|
|
|
<callout arearefs="nbsd-dd">
|
|
<para>Instala <application>NanoBSD</application> dentro del
|
|
medio de almacenamiento.</para>
|
|
</callout>
|
|
</calloutlist>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Personalización de una imagen de NanoBSD</title>
|
|
|
|
<para>Esta es probablemente la característica más
|
|
importante y más interesante
|
|
de <application>NanoBSD</application>. Tambié es donde
|
|
usted pasará la mayor parte del tiempo cuando esté
|
|
desarrollando con <application>NanoBSD</application>.</para>
|
|
|
|
<para>La invocación del siguiente comando forzará
|
|
al script <filename>nanobsd.sh</filename> a leer su
|
|
configuración desde el
|
|
fichero <filename>mi-configuracion.nano</filename> ubicado en el
|
|
directorio actual:</para>
|
|
|
|
<screen>&prompt.root; <userinput>sh nanobsd.sh -c mi-configuracion.nano</userinput></screen>
|
|
|
|
<para>La personalización se hace de dos maneras:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Opciones de configuración</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Funciones personalizadas</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<sect3>
|
|
<title>Opciones de configuración</title>
|
|
|
|
<para>Por medio de ajustes de configuración es posible
|
|
configurar las opciones que se pasan a las
|
|
fases <literal>buildworld</literal>
|
|
e <literal>installworld</literal> del proceso de
|
|
generación de <application>NanoBSD</application>.
|
|
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
|
|
<quote>userland</quote>.</para>
|
|
|
|
<para>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:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><literal>NANO_NAME</literal> : Nombre de la
|
|
generación que estamos ejecutando (se usa
|
|
para dar nombres a los directorios donde encontraremos el
|
|
resultado del proceso).</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>NANO_SRC</literal> : Ruta al código
|
|
fuente que se usará para generar la imagen.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>NANO_KERNEL</literal> : Nombre del fichero de
|
|
configuración del kernel que se usará para
|
|
generar el kernel.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>CONF_BUILD</literal> : Opciones que se pasan a
|
|
la fase <literal>buildworld</literal>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>CONF_INSTALL</literal> : Opciones que se pasan a
|
|
la fase <literal>installworld</literal>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>CONF_WORLD</literal> : Opciones que se pasan
|
|
tanto a <literal>buildworld</literal> como a
|
|
<literal>installworld</literal>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>FlashDevice</literal> : Define el tipo de medio
|
|
de almacenamiento que se usará. Para más
|
|
información consulte el
|
|
fichero <filename>FlashDevice.sub</filename>.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Funciones personalizadas</title>
|
|
|
|
<para>Puede ajustar <application>NanoBSD</application>
|
|
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.</para>
|
|
|
|
<programlisting>cust_foo () (
|
|
echo "bar=topless" > \
|
|
${NANO_WORLDDIR}/etc/foo
|
|
)
|
|
customize_cmd cust_foo</programlisting>
|
|
|
|
<para>A continuación vemos un ejemplo más útil
|
|
de función personalizada, que cambia el tamaño por
|
|
omisión del directorio
|
|
<filename class="directory">/etc</filename> de 5MB a 30MB:</para>
|
|
|
|
<programlisting>cust_etc_size () (
|
|
cd ${NANO_WORLDDIR}/conf
|
|
echo 30000 > default/etc/md_size
|
|
)
|
|
customize_cmd cust_etc_size</programlisting>
|
|
|
|
<para>Hay unas pocas funciones de personalización
|
|
predefinidas listas para su uso:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><literal>cust_comconsole</literal> : Deshabilita
|
|
&man.getty.8; en los dispositivos VGA (los nodos de
|
|
dispositivo <filename>/dev/tty*</filename>) y habilita el
|
|
uso del puerto serie COM1 para que sea la consola del
|
|
sistema.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>cust_allow_ssh_root</literal> : Permite a
|
|
<username>root</username> acceder a través de
|
|
&man.sshd.8;.</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><literal>cust_install_files</literal> : Instala ficheros
|
|
de configuración desde el
|
|
directorio <filename class="directory">nanobsd/files</filename>,
|
|
que contiene scripts útiles para la
|
|
administración del sistema.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Cómo añadir paquetes</title>
|
|
|
|
<para>Se pueden añadir paquetes a la imagen de
|
|
<application>NanoBSD</application> usando una función
|
|
personalizada. La siguiente función instalará
|
|
todos los paquetes que se encuentren en
|
|
<filename>/usr/src/tools/tools/nanobsd/packages</filename>:
|
|
</para>
|
|
|
|
<programlisting>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</programlisting>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Ejemplo de fichero de configuración</title>
|
|
|
|
<para>El siguiente es un ejemplo completo de fichero de
|
|
configuración para generar una imagen personalizada
|
|
de <application>NanoBSD</application>:</para>
|
|
|
|
<programlisting>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</programlisting>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Cómo actualizar NanoBSD</title>
|
|
|
|
<para>El proceso de actualización
|
|
de <application>NanoBSD</application> es relativamente
|
|
simple:</para>
|
|
|
|
<procedure>
|
|
<step>
|
|
<para>Generar una nueva imagen
|
|
de <application>NanoBSD</application> de la forma
|
|
habitual.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Copiar la nueva imagen sobre la partición no
|
|
utilizada del sistema empotrado que está
|
|
usando <application>NanoBSD</application>.</para>
|
|
|
|
<para>La diferencia más importante entre este paso y
|
|
la instalación inicial
|
|
de <application>NanoBSD</application> es que ahora en
|
|
lugar de usar el fichero <filename>_.disk.full</filename>
|
|
(que contiene una imagen de todo el disco) se instala
|
|
la imagen <filename>_.disk.image</filename> (que contiene
|
|
una imagen de una sola partición).</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Reiniciar y arrancar el sistema desde la
|
|
partición que se acaba de instalar.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Si todo va bien la actualización ha
|
|
terminado.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>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>
|
|
</step>
|
|
</procedure>
|
|
|
|
<para>Para facilitar la instalación de una imagen
|
|
nueva en su sistema <application>NanoBSD</application> en
|
|
funcionamiento dispone de los scripts <filename>updatep1</filename>
|
|
y <filename>updatep2</filename>, ubicados en el directorio
|
|
<filename class="directory">/root</filename>. La
|
|
elección de uno u otro script depende de qué
|
|
partición esté ejecutando el sistema,
|
|
la primera o la segunda.</para>
|
|
|
|
<para>Dependiendo de los servicios disponibles en
|
|
la máquina que va a servir la nueva imagen
|
|
de <application>NanoBSD</application> y del tipo de
|
|
transferencia de datos que prefiera uno de estos tres
|
|
métodos le resultará más o menos
|
|
interesante:</para>
|
|
|
|
<sect3>
|
|
<title>Uso de &man.ftp.1;</title>
|
|
|
|
<para>Si la prioridad es la velocidad de la transferencia
|
|
use usted este ejemplo:</para>
|
|
|
|
<screen>&prompt.root; <userinput>ftp mi-maquina
|
|
get _.disk.image "| sh updatep1"</userinput></screen>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Uso de &man.ssh.1;</title>
|
|
|
|
<para>Si la prioridad es la seguridad de la transferencia
|
|
seguramente ejecutará algo muy parecido a lo
|
|
siguiente:</para>
|
|
|
|
<screen>&prompt.root; <userinput>ssh mi-maquina cat _.disk.image.gz | zcat | sh updatep1</userinput></screen>
|
|
</sect3>
|
|
|
|
<sect3>
|
|
<title>Uso de &man.nc.1;</title>
|
|
|
|
<para>Si la máquina remota no dispone de servicios de
|
|
&man.ftp.1; ni de &man.sshd.8; puede recurrir al siguiente
|
|
ejemplo:</para>
|
|
|
|
<procedure>
|
|
<step>
|
|
<para>Primero abra un puerto TCP de escucha en la
|
|
máquina que sirve la imagen y envíela
|
|
al cliente:</para>
|
|
|
|
<screen>mi-maquina&prompt.root; <userinput>nc -l <replaceable>2222</replaceable> < _.disk.image</userinput></screen>
|
|
|
|
<note>
|
|
<para>Asegúrese de que el puerto elegido no tenga
|
|
bloqueadas las conexiones entrantes desde la
|
|
máquina <application>NanoBSD</application> por
|
|
ningún cortafuegos.</para>
|
|
</note>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Conéctese a la máquina que va servir la
|
|
nueva imagen y ejecute el script
|
|
<filename>updatep1</filename>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>nc mi-maquina <replaceable>2222</replaceable> | sh updatep1</userinput></screen>
|
|
</step>
|
|
</procedure>
|
|
</sect3>
|
|
</sect2>
|
|
</sect1>
|
|
</article>
|