aboutsummaryrefslogtreecommitdiff
path: root/es_ES.ISO8859-1/articles/fbsd-from-scratch/article.xml
blob: 24094e8da1a81ddcd1980cba8203a72fa01c2434 (plain) (blame)
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
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
	"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd" [
<!ENTITY scratch.ap "<application xmlns='http://docbook.org/ns/docbook'>FreeBSD From Scratch</application>">
]>
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="es">
  <info><title>FreeBSD From Scratch</title>
    

    <author><personname><firstname>Jens</firstname><surname>Schweikhardt</surname></personname><affiliation>
        <address><email>schweikh@FreeBSD.org</email></address>
      </affiliation></author>
    <copyright>
      <year>2002</year>
      <holder>Jens Schweikhardt</holder>
    </copyright>

    <pubdate>$FreeBSD$</pubdate>

    <releaseinfo>$FreeBSD$</releaseinfo>

    <abstract>
      <para>&scratch.ap; explica la instalacin totalmente automatizada
        de un sistema &os; hecho a medida y compilado desde las fuentes,
        proceso que incluye adems la compilacin de sus
        <quote>ports</quote> favoritos y configurado para coincidir con
        su idea del sistema perfecto.  Si cree que
        <command>make world</command> es un concepto fascinante
        &scratch.ap; lo ampla hasta ser
        <command>make evenmore</command>.  N. del T. : Juego de palabras
        intraducible basado en el nombre que en &os; se da al proceso de
        recompilar todo el sistema desde los fuentes, <command>make world</command>,
        que podra traducirse muy libremente como <quote>hacer, o ms bien rehacer el
        mundo entero</quote> y <command>make evenmore</command>, osea, <quote>hacer ms
        an</quote>.  </para>
	&trans.es.carvay;
    </abstract>
  </info>

  <sect1 xml:id="introduction">
    <title>Introduccin</title>

    <para>?Ha actualizado alguna vez su sistema mediante
      <command>make world</command>?.  Si solamente tiene un sistema
      en sus discos se encontrar con un problema.  Si
      <buildtarget>installworld</buildtarget> falla a la mitad
      su sistema quedar daado e incluso
      puede ser incapaz de arrancar de nuevo.  O quizs
      <buildtarget>installworld</buildtarget> se ha ejecutado sin problemas
       pero el nuevo kernel no arranca.  Se impone buscar el CD de
       Rescate y tratar de encontrar algo til en aquellos
       <quote>backups</quote> que hizo hace seis meses.</para>

    <para>Creo en el paradigma de <quote>al actualizar sistemas operativos
      instala desde cero</quote>.  Hacindolo as, esto es,
      al borrar sobreescribiendo en los discos o mejor dicho las particiones,
      nos aseguraremos de no dejar datos antiguos en ellos, un aspecto
      ste del que la mayora de los procesos de
      actualizacin no se preocupan en absoluto.
      Por otra parte borrar las particiones significa
      que tendr que recompilar/reinstalar todos sus
      <quote>ports</quote> y <quote>packages</quote> y despus de eso
      rehacer todas y cada una de las configuraciones que con muchos esfuerzos
      atesoraba.  Si usted tambin piensa que sta tarea
      debera automatizarse siga leyendo.</para>
  </sect1>

  <sect1 xml:id="why">
    <title>?Por qu (no) debera interesarme
      &scratch.ap;?</title>

    <para>Esa es una pregunta muy razonable.  Tenemos
      <application>sysinstall</application>, una compilacin
      del kernel que funciona sin sorpresas y tenemos tambin
      las herramientas de entorno de usuario.</para>

    <para>El problema que tiene <application>sysinstall</application>
      es que est extremadamente limitado cuando se trata de
      qu, dnde y cmo queremos que haga la
      instalacin.</para>

    <itemizedlist>
      <listitem>
        <para>Normalmente se usa para instalar distribuciones precompiladas
          y <quote>packages</quote> desde diversas fuentes (CD, DVD,
          FTP).  No puede instalar el resultado de
          <literal>make buildworld</literal>.</para>
      </listitem>

      <listitem>
        <para>No puede instalar un segundo sistema en un directorio
          de un sistema en funcionamiento.</para>
      </listitem>

      <listitem>
        <para>No puede hacer una instalacin en particiones
          <application>Vinum</application>.</para>
      </listitem>

      <listitem>
        <para>No puede compilar <quote>ports</quote>, slo
          instala <quote>packages</quote> precompilados.</para>
      </listitem>

      <listitem>
        <para>Es difcil automatizar mediante
          <quote>scripts</quote> o incluso hacer de forma manual
          los cambios que considere
          necesarios despus de la instalacin</para>
      </listitem>

      <listitem>
        <para>Por si todo esto fuera poco
          <application>sysinstall</application>
          est semioficialmente al final de su
          <quote>Ciclo de Vida til</quote>.</para>
      </listitem>
    </itemizedlist>

    <para>El archiconocido proceso de <quote>construr/instalar
      el mundo</quote> (<quote>build/install world</quote>), explicado en
      <link xlink:href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html">el
      Handbook</link>, por defecto realiza la tarea de sustitur el
      sistema existente.  Slo respeta el kernel y los
      mdulos.  Los binarios del sistema, los ficheros de
      cabecera y muchos otros ficheros son sobreescritos;  hay ficheros
      obsoletos que se quedan donde estaban y pueden causar
      sorpresas.  Si el proceso de actualizacin falla por alguna
      razn puede ser difcil o incluso imposible volver a
      dejar el sistema en el estado inicial.</para>

    <para>&scratch.ap; resuelve todos esos problemas.  La estrategia es
      simple:  utiliza un sistema en funcionamiento para instalar un nuevo
      sistema en un rbol de directorios y montar nuevas particiones
      limpiamente en ese rbol.  Muchos ficheros de
      configuracin pueden copiarse al sitio que les corresponda y
      &man.mergemaster.8; se encargar de aquellos a los que
      no.  Pueden hacerse cambios discrecionales tras la
      instalacin del nuevo sistema desde el viejo,
      como si  el nuevo sistema estuviera dentro de un
      <quote>chroot</quote>.  El proceso tiene tres fases,
      cada una de los cuales consiste en ejecutar un
      <quote>script de shell</quote> o invocar
      <command>make</command>:</para>

    <orderedlist>
      <listitem>
        <para><filename>fase_1.sh</filename>:
          Crea un sistema nuevo y capaz de arrancar en un directorio
          vaco y combina o copia tantos ficheros como sea
          necesario. Una vez acabado esto arranca el nuevo sistema.</para>
      </listitem>

      <listitem>
        <para><filename>fase_2.sh</filename>:
          Instala los <quote>ports</quote> que hayamos elegido.</para>
      </listitem>

      <listitem>
        <para><filename>fase_3.mk</filename>:
          Remata la configuracin del software instalado en la
          fase anterior.</para>
      </listitem>
    </orderedlist>

    <para>Una vez que ha usado &scratch.ap; para construr un
      segundo sistema y ha comprobado que funciona satisfactoriamente
      durante unas cuantas semanas puede usarlo de nuevo para reinstalar
      el sistema original.  Desde ese momento cada vez que crea que
      debe actualizar un sistema simplemente elija las particiones que
      hay que borrar y reinstalar.</para>

    <para>Puede que haya odo hablar o incluso haya usado ya
     <link xlink:href="http://www.linuxfromscratch.org/">Linux From Scratch</link>,
      LFS para ser ms breve.  LFS abarca tambin cmo
      construr e instalar un sistema desde cero en particiones
      vacas  partiendo de un sistema en funcionamiento.  El
      objetivo de LFS parece ser mostrar la razn de ser y de estar
      de todas y cada una de las partes del sistema (como el kernel,
      el compilador, los dispositivos, la shell, la base de datos de
      terminales, etc.) y los detalles de la instalacin de cada
      parte.  &scratch.ap; no entra en detalles tan exahustivos.  Mi
      intencin es facilitar una instalacin automatizada y
      completa, no explicar cada detalle escabroso del ciclpeo
      proceso que arrancamos cuando hacemos un
      <command>make world</command>.  Si desea usted explorar &os; de
      modo tan profundo comience por leer
      <filename>/usr/src/Makefile</filename> y siga cuidadosamente lo
      que sucede al teclear
      <command>make buildworld</command>.</para>

    <para>Hay tambin algunos detalles delicados con los que
      me encontr durante el desarrollo de &scratch.ap; que
      debera tener muy en cuenta.</para>

      <!-- XXX: Sera una buena idea escribir el fase_2.sh usando un
           "jail" situada en el sistema nuevo instalado en la primera
           fase.  Si disponemos de una direccin de red bien configurada
           como IP primaria de esa "jail" podra ser posible incluso
           compilar "ports" en un "chroot" sin desinstalar nada del
           sistema anfitrin.  No obstante tenga en cuenta que incluso
           las "jail" estn ejecutando el kernel anfitrin.-->

    <itemizedlist>
      <listitem>
        <para>El sistema no puede ser usado normalmente
          durante la compilacin de los <quote>ports</quote>
          que tiene lugar en la segunda fase.  Si va a ejecutar
          el proceso en un servidor en produccin tenga en cuenta
          el tiempo de parada provocado por la fase dos.  Los
          <quote>ports</quote> compilados por
          <filename>fase_2.sh</filename> necesitan aproximadamente 4 horas
          para acabar en un sistema SCSI AMD1800+ con discos de 10.000 rpm
          y 1GB de RAM.</para>
      </listitem>
    </itemizedlist>

  </sect1>

  <sect1 xml:id="prerequisites">
    <title>Requisitos previos</title>

    <para>Para poder usar &scratch.ap;
      necesitar lo siguiente:</para>

    <itemizedlist>
      <listitem>
        <para>Un sistema &os; con el rbol de <quote>ports</quote> y
          los fuentes instalados.</para>
      </listitem>

      <listitem>
        <para>Al menos una particin vaca donde instalaremos
          el nuevo sistema.</para>
      </listitem>

      <listitem>
        <para>Experiencia en el uso de &man.mergemaster.8; o al menos no
          tener miedo de usarlo.</para>
      </listitem>

      <listitem>
        <para>Si su acceso a Internet es lento o si no dispone del mismo
          necesitar los <quote>distfiles</quote> de los ports que
          vaya a instalar.</para>
      </listitem>

      <listitem>
        <para>Conocimientos bsicos de confeccin de
          <quote>scripts</quote> de shell con la shell Bourne,
          &man.sh.1;</para>
      </listitem>

      <listitem>
        <para>Finalmente, debera ser capaz de decirle a su
          <quote>boot loader</quote> (cargador de arranque) cmo arrancar el nuevo
          sistema, en modo interactivo o mediante un fichero de
          configuracin.</para>
      </listitem>
    </itemizedlist>

  </sect1>

  <sect1 xml:id="stage1">
    <title>Primera Fase: Instalacin del Sistema</title>

    <para>Lo que vamos a explicar ms adelante es mi
      <filename>fase_1.sh</filename>.  Tendr que modificarlo
      en varios sitios para que cuadre con su propia idea del
      <quote>sistema perfecto</quote>.  He intentado inclur
      todos los comentarios posibles en los sitios donde debera
      usted introducir sus cambios.  Los puntos a estudiar son:</para>

    <itemizedlist>
      <listitem>
        <para>Esquema de particiones.</para>

        <para>No estoy de acuerdo con la idea de una sola
          particin inmensa en la que instalar todo el
          sistema.  Mis sistemas tienen generalmente al menos
          una particin para
          <filename>/</filename>,
          <filename>/usr</filename> y
          <filename>/var</filename> con
          <filename>/tmp</filename> enlazado simblicamente a
          <filename>/var/tmp</filename>.
          Adems comparto los sistemas de ficheros en los que
          ubico
          <filename>/home</filename> (los directorios de los usuarios),
          <filename>/home/ncvs</filename> (rplica del repositorio
          de &os;,
          <filename>/usr/ports</filename> (el rbol de ports),
          <filename>/src</filename> (diversos rboles de fuentes de
          procedencias varias) y
          <filename>/share</filename> (otros datos compartidos que no
           necesitan ser guardados, por ejemplo mensajes de
           <quote>news</quote>.</para>
      </listitem>

      <listitem>
        <para><quote>Lujos</quote>.</para>

        <para>Me refiero a lo que usaremos inmediatamente tras el arranque
          del nuevo sistema e incluso antes de la segunda fase.  En mi caso
          se trata de <package>shells/zsh</package> puesto
          que es la shell que aparece en mi cuenta de usuario en <filename>
          /etc/passwd</filename>.  De todos modos la tarea puede culminarse
          sin esos <quote>lujos</quote> (de ah su nombre), todo lo
          que necesita es entrar en el sistema como root y pasar a la
          siguiente fase.</para>

        <para>?Por qu no instalar entonces todos mis ports
          en la primera fase?:  en teora y en la prctica
          nos encontraremos con problemas de arranque y de consistencia:
          durante la primera fase tendr funcionando su viejo kernel
          mientras el entorno <quote>chroot</quote> dispone de sus propios
          binarios y ficheros de cabecera todos nuevos.  Si por ejemplo el
          sistema nuevo integra una nueva llamada al sistema (conforme a sus
          cabeceras) algunos <quote>scripts</quote> de configuracin
          podran intentar usarla y en concuencia ver <quote>
          muertos</quote> sus procesos al tratar de ejecutarse en el viejo
          kernel.  He tenido problemas de otro tipo al intentar
          construr <package>lang/perl5</package>.</para>
      </listitem>
    </itemizedlist>

    <para>Antes de ejecutar <filename>fase_1.sh</filename> asegrese
      de haber cumplido con las tareas previas a un
      <command>make installworld installkernel</command>, es decir:</para>

    <itemizedlist>
      <listitem>
        <para>haber adaptado el fichero de configuracin de su
            kernel</para>
      </listitem>

      <listitem>
        <para>haber completado sin errores <command>
            make buildworld</command></para>
      </listitem>

      <listitem>
        <para>haber completado sin errores<command>
            KERNCONF=
            nombre_de_su_kernel</command></para>
      </listitem>
    </itemizedlist>


    <para>Cuando ejecute <filename>fase_1.sh</filename> por primera vez
      y copie sus ficheros de configuracin de su sistema en
      funcionamiento a su nuevo sistema no estn al da
      con respecto a lo que hay bajo
      <filename>/usr/src</filename>, as que <command>
      mergemaster</command> le preguntar por lo que quiere
      hacer.  Le recomiendo combinar los cambios. (Nota del traductor:
      merge (to): unir, fusionar, mezclar).  Si se cansa de pelear con
      los dilogos de <command>mergemaster</command> puede
      simplemente actualizar sus ficheros una vez en el sistema <emphasis>
      original</emphasis> (pero slo si existe esa opci:
      por ejemplo, si uno de sus sistemas usa <literal>-STABLE</literal> y
      el otro <literal>-CURRENT</literal> los cambios tienen bastantes
      probabilidades de ser incompatibles).  En posteriores usos
      de <command>mergemaster</command> detectar que los ID de
      las versiones RCS de esos ficheros coinciden con los que estn
      bajo <filename>/usr/src</filename> y no les prestar ms
      atencin.</para>

    <para>El <quote>script</quote> <filename>fase_1.sh</filename>
      detendr su ejecucin si falla alguno de los
      comandos que contiene (si alguno da una salida distinta de
      cero) por inclur <command>set -e</command>, as
      que es imposible que pase por alto algn error.  Antes
      de seguir adelante debera asegurarse de que no hay errores
      en su versin de
      <filename>fase_1.sh</filename>.</para>

    <para>En <filename>fase_1.sh</filename> invocamos
      <command>mergemaster</command>.  Tanto si alguno de los ficheros
      requiere ser combinado como si no, <command>mergemaster</command>
      emitir el siguiente mensaje</para>

    <screen>*** Comparison complete

Do you wish to delete what is left of /var/tmp/temproot.fase1? [no] <userinput>no</userinput></screen>

    <para>es decir</para>

    <screen>*** Comparacin completada

?Quiere borrar el contenido de /var/tmp/temproot.fase1? [no] <userinput>no</userinput></screen>

    <para>Por favor, responda <literal>no</literal> o simplemente pulse
      <keycap>Enter</keycap>.  Eso es debido a que <command>
      mergemaster</command> habr dejado unos cuantos ficheros
      de longitud igual a cero en <filename>
      /var/tmp/temproot.fase1</filename> y los copiar al nuevo
      sistema (a menos que ya estn ah).</para>

    <para>Despus mostrar los ficheros que ha instalado
      mediante &man.more.1; o si lo prefiere mediante &man.less.1;):</para>

<screen>*** You chose the automatic install option for files that did not
    exist on your system.  The following were installed for you:
      /rootnuevo/etc/defaults/rc.conf
      ...
      /rootnuevo/COPYRIGHT

(END)</screen>

    <para>es decir</para>

 <screen>*** Ha elegido la opcin de instalar automticamente
     los ficheros que no existen en su sistema. Han sido instalados los
     siguientes:
       /rootnuevo/etc/defaults/rc.conf
       ...
       /rootnuevo/COPYRIGHT

       </screen>

    <para>Tecle <keycap>q</keycap> para salir del
      paginador.  Ahora se le informar sobre <filename>
      login.conf</filename>:</para>

    <screen>*** You installed a login.conf file, so make sure that you run
    '/usr/bin/cap_mkdb /newroot/etc/login.conf'
    to rebuild your login.conf database

    Would you like to run it now? y or n [n]</screen>

    <para>es decir</para>

    <screen>*** Ha instalado un fichero login.conf as que
    asegrese de ejecutar '/usr/bin/cap_mkdb /rootnuevo/etc/login.conf'
    para reconstrur la base de datos de login.conf

   ?Quiere ejecutarlo ahora mismo? (s)i o (n)o [n]</screen>

    <para>La respuesta no tiene importancia puesto que ejecutaremos
      &man.cap.mkdb.1; en todos los casos.</para>

    <para>Todo lo que hace <filename>fase_1.sh</filename> queda registrado
      en un fichero <quote>log</quote> para que pueda examinarse con
      detalle si es preciso.</para>

    <para>ste es el <filename>fase_1.sh</filename> del autor,
      as que tendr que modificarlo a conciencia,
      en especial los pasos 1, 2, 5 y 6.</para>

    <warning>
      <para>Por favor, ponga una atencin esmerada a las
        entradas en las que aparece &man.newfs.8;.  Si bien
        es cierto que es imposible crear nuevos sistemas de archivos en
        particiones montadas nuestro <quote>script</quote> no tendr
        ningn inconveniente en borrar cualquier particin
        que no est montada y con los nombres que aparezcan en
        l, en nuestro caso
        <filename>/dev/da3s1a</filename>, <filename>/dev/vinum/var_a</filename>
        y <filename>/dev/vinum/usr_a</filename>.  Puede provocar un desastre,
        as que asegrese de cambiar los nombres de los
        dispositivos como corresponda.</para>
    </warning>

<programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="fase_1.sh" parse="text" encoding="iso-8859-1"/></programlisting>

    <para>Descargue <link xlink:href="fase_1.sh"><filename>fase_1.sh</filename></link>.</para>

    <para>La ejecucin de ste <quote>script</quote> instala
      un sistema equipado con lo siguiente:</para>
    <itemizedlist>
      <listitem>
        <para>Usuarios y grupos heredados del anterior sistema.</para>
      </listitem>
      <listitem>
        <para>Acceso a Internet mediante Ethernet y PPP protegido por
          un cortafuegos.</para>
      </listitem>
      <listitem>
        <para>NTP y zona horaria correctas.</para>
      </listitem>
      <listitem>
        <para>Algunos ficheros secundarios como
        <filename>/etc/ttys</filename> e
        <command>inetd</command>.</para>
      </listitem>
    </itemizedlist>

    <para>Hay otras reas listas para ser configuradas pero
      no las tocaremos hasta conclur la segunda fase.  Por ejemplo,
      hemos copiado unos cuantos ficheros para configurar la impresin
      y X11.  Sin embargo la impresin suele necesitar de aplicaciones
      que no se encuentran en el sistema base, por ejemplo PostScript.  X11
      no funcionar hasta que no compilemos el servidor, las
      bibliotecas y los programas.</para>
  </sect1>

  <sect1 xml:id="stage2">
    <title>Segunda Fase: Instalacin de <quote>
      ports</quote></title>

    <note>
      <para>En sta fase es posible instalar <quote>packages</quote>
        (que vienen precompilados) en lugar de compilar <quote>
        ports</quote>.  Para poder hacerlo convertiremos <filename>
        fase_2.sh</filename> en poco ms que una lista de
        comandos <command>pkg_add</command>.  Confo en que
        ser usted capaz de escribir un <quote>script</quote>
        como ese.  Ahora nos concentraremos en el sistema tradicional
        y mucho ms flexible de funcionamiento de los
        <quote>ports</quote>.</para>
    </note>

    <para>El siguiente <quote>script</quote> <filename>
      fase_2.sh</filename> es el que yo uso para instalar mis <quote>
      ports</quote> favoritos.  Puede ejecutarse tantas veces como sea
      preciso y no prestar atencin a los <quote>
      ports</quote> que ya estn instalados.  Incluye tambin
      soporte para la
      opcin <option>-n</option> que hace un <emphasis>ensayo
      general con todo</emphasis>, es decir, muestra lo que hubiera sucedido
      si se hubiera ejecutado.  Seguro que tiene que editar la lista de
      <quote>ports</quote> y probablemente tenga que cambiar unas cuantas
      variables de entorno.</para>

    <para>La lista de <quote>ports</quote> consiste en lneas
      de dos o ms palabras separadas por espacios: la categora
      y el <quote>port</quote>. Es opcional situar detrs
      un comando de instalacin que compilar e instalar
      el <quote>port</quote> (por defecto <command>make install</command>).
      Se ignoran las lneas vacs y las que comienzan
      por #.  La mayora de las veces es suficiente inclur el
      nombre del <quote>port</quote> y la categora a que pertenece pero
      existen unos pocos <quote>ports</quote> en cuya compilacin
      podemos afinar mucho asignando valores a variables de <command>
      make</command>; veamos un ejemplo:</para>

    <programlisting>www mozilla make WITHOUT_MAILNEWS=yes WITHOUT_CHATZILLA=yes install
mail procmail make BATCH=yes install</programlisting>

    <para>De hecho puede usted usar comandos de <quote>shell</quote> a
      su criterio, as que no tiene que limitarse a simples
      invocaciones de <command>make</command>:</para>

    <programlisting>java linux-sun-jdk13 yes | make install
news inn-stable CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" make install</programlisting>

    <para>Observe que la lnea de <package>news/inn-stable</package> es un ejemplo de una
      asignacin de entrada a la variable del intrprete de
      mandatos <literal>CONFIGURE_ARGS</literal>.  El fichero <filename>Makefile</filename>
      del <quote>port</quote> la usar como valor inicial y la
      completar con otros argumentos esenciales.  La diferencia respecto a
      a especificar la variable para <filename>make</filename> en la lnea de
      comandos mediante </para>

    <programlisting>news inn-stable make CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" install</programlisting>

    <para>est en que esto ltimo sustituye directamente el valor
      en lugar de completarlo.  El mtodo ms adecuado depende de cada
      <quote>port</quote> en particular.</para>

    <para>Compruebe cuidadosamente que ninguno de sus <quote>ports</quote>
      tenga una instalacin interactiva, es decir, que ninguno
      deber intentar recibir de stdin nada que no le d
      usted en stdin.  Si alguno lo hace leer la siguiente o
      siguientes lneas de ste documento y no entender
      nada de nada.  Si <filename>fase_2.sh</filename> pasa por alto
      un <quote>port</quote> o cesa su ejecucin sin razn
      aparente es muy posible que esa sea la razn.</para>

    <para>He aqu <filename>fase_2.sh</filename>.  Crea un fichero
      <quote>log</quote> por cada port que instala y les da nombres
      segn el esquema <filename>
      DIRECTORIO_LOG/categora+port</filename>.  Si no tiene una
      copia de su <filename>fase_2.sh</filename> en una particin
      compartida no olvide copiarlo al sistema nuevo antes de
      arrancarlo.</para>

<programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="fase_2.sh" parse="text" encoding="iso-8859-1"/></programlisting>

    <para>Descargue <link xlink:href="fase_2.sh"><filename>fase_2.sh</filename></link>.</para>
  </sect1>

  <sect1 xml:id="stage3">
    <title>Tercera Fase</title>

    <para>Ya hemos concludo la segunda fase y ya estn
      instalados sus queridsimos <quote>ports</quote>, pero
      algunos de ellos requieren un poco de configuracin.  En
      eso consistir la tercera fase, aadir los
      detalles especficos de las configuraciones.  Podra
      haberlos integrado en el <quote>script</quote> <filename>
      fase_2.sh</filename> pero creo que hay una diferencia conceptual
      entre instalar un <quote>port</quote> y en modificar la
      configuracin con la que viene por defecto para adaptarla
      a nuestros gustos o necesidades y creo por lo tanto que esa
      diferencia justifica una separacin en una fase
      propia.</para>

    <para>He credo ms conveniente implementar la
      tercera fase como un <filename>Makefile</filename> porque
      admiten la seleccin de lo que quiera configurar
      tecleando simplemente:</para>

    <informalexample>
      <screen>&prompt.root; <userinput>make -f fase_3.mk 
          nombre_del_port</userinput></screen>
    </informalexample>

    <para>Al igual que con <filename>fase_2.sh</filename> asegrese
      de que dispone de una copia de su <filename>fase_3.mk</filename> una
      vez que arranca el sistema nuevo, bien situndolo en una
      particin compartida bien copindolo en algn
      lugar dentro del nuevo sistema.</para>

<programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="fase_3.mk" parse="text" encoding="iso-8859-1"/></programlisting>

    <para>Descargue <link xlink:href="fase_3.mk"><filename>fase_3.mk</filename></link>.</para>
  </sect1>

  <sect1 xml:id="limitations">
    <title>Restricciones</title>

    <para>La instalacin automatizada de un <quote>port</quote>
      puede resultar difcil si es interactiva y no soporta
      <command>make BATCH=YES install</command>.  En algunos casos
      la interaccin se reduce a teclear <literal>yes</literal>
      cuando se le pregunta si acepta alguna licencia.  Si esa entrada de
      datos ha de llegar por la entrada estndar simplemente
      redirigiremos las respuestas pertinentes a la orden de
      instalacin (que suele ser <command>make install</command>;
      ese es el modo en el que hemos procedido con <package>java/linux-sun-jdk13</package> en
      <filename>fase_2.sh</filename>).</para>

    <para>No obstante sta estrategia no funciona con <package>editors/staroffice52</package>, que exige que X11
      est funcionando.  El proceso de instalacin comprende
      un buen nmero de pulsaciones de ratn y de tecleo,
      con lo que es imposible automatizarlo tal y como se hace con otros
      <quote>ports</quote>.  Sin embargo el siguiente atajo workaround
      nos soluciona el problema: previamente he creado un <filename>
      staroffice</filename> en el sistema original con</para>

    <informalexample>
      <screen>&prompt.root; <userinput>cd /usr/ports/editors/staroffice52</userinput>
&prompt.root; <userinput>make package</userinput>
===&gt;  Building package for staroffice-5.2_1
Creating package /usr/ports/editors/staroffice52/staroffice-5.2_1.tbz
Registering depends:.
Creating bzip'd tar ball in '/usr/ports/editors/staroffice52/staroffice-5.2_1.tbz'</screen>
    </informalexample>

    <para>y durante la segunda fase usamos:</para>

    <informalexample>
      <screen>&prompt.root; <userinput>pkg_add /usr/ports/editors/staroffice52/staroffice-5.2_1.tbz</userinput></screen>
    </informalexample>

    <para>Debe usted tambin tener muy en cuenta posibles
      problemas con los ficheros de configuracin a la hora de
      actualizar. En general no sabemos cundo van a hacerse cambios
      en el formato o el contenido de un fichero de configuracin.
      Es posible que haya que aadir un nuevo grupo a <filename>
      /etc/group</filename>, o quizs <filename>/etc/passwd</filename>
      necesite un nuevo campo en sus entradas.  stas cosas han
      sucedido en alguna ocasin anteriormente.  Si simplemente
      copiamos un fichero de configuracin del sistema viejo al nuevo
      ser suficiente la mayora de la veces pero ya hemos
      visto dos casos en los que no lo era.  Si actualiza su sistema siguiendo
      el sistema ortodoxo (sobreescribiendo los ficheros antguos)
      tendr que usar <command>mergemaster</command> para proceder
      con los cambios que quiera inclur en
      la configuracin de su nuevo sistema, teniendo en cuenta que
      entre esos cambios hay  o puede haber nuevos ficheros.  Por desgracia
      <command>mergemaster</command> slo es til con ficheros
      del sistema base y no para aquellos relacionados con los <quote>
      ports</quote>.  Adems, ciertas aplicaciones parecen
      especialmente diseadas para sacarme de mis casillas por el
      procedimiento de cambiar el fichero de configuracin cada quince
      das.  Lo nico que puede hacerse es estar alerta,
      sobre todo cuando cambia el nmero de versin.
      En ocasiones anteriores he tenido que modificar o reescribir
      ficheros para servidores web, servidores y clientes de <quote>news</quote>.
      Cualquier tipo de software cuyo mantenimiento sea muy activo es un firme
      candidato a que sus ficheros de configuracin merezcan nuestro
      examen.</para>

    <para>He usado &scratch.ap; varias veces para actualizar un sistema
      <literal>5-CURRENT</literal> a <literal>5-CURRENT</literal>, esto es,
      nunca he intentado instalar <literal>5-CURRENT</literal> desde un
      sistema <literal>4-STABLE</literal> o viceversa, pero dada la
      cantidad de cambios existentes entre las diferentes <quote>
      RELEASE</quote> no sera insensato esperar que esa tarea
      sea un tanto compleja.  Usar &scratch.ap; para actualizaciones
      dentro del campo de <literal>4-STABLE</literal> debera
      ser mucho menos penoso (aunque yo an no lo he
      intentado).  Si quiere hacerlo debera tener en cuenta
      lo siguiente:</para>

    <itemizedlist>
      <listitem>
        <para>Si no usa el sistema de ficheros de dispositivo
        (<literal>devfs</literal>) puede necesitar crear los
        dispositivos necesarios para su hardware con &man.MAKEDEV.8;
        en la primera fase, sexto paso.</para>
      </listitem>
    </itemizedlist>

  </sect1>
</article>