1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
|
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.2-Based Extension//EN"
"../../../share/xml/freebsd42.dtd" [
<!ENTITY % entities PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Entity Set//ES" "../../share/xml/entities.ent">
%entities;
]>
<!-- 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 role="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 role="directory">/etc</filename>
y <filename role="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 role="directory">/cfg</filename>. Este
directorio contiene ficheros que usa el
directorio <filename role="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 role="directory">/etc</filename> se copien
en <filename role="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 role="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 role="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 role="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 role="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 role="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 role="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>
|