aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/es/books/handbook/ports/_index.adoc
blob: 5de38dcdadaad902038e9b2a1c8c0223ba2d24b9 (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
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
---
title: "Capítulo 4. Instalación de aplicaciones: packages y ports"
part: Parte I. Primeros pasos
prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
path: "/books/handbook/ports/"
---

[[ports]]
= Instalación de aplicaciones: packages y ports
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 4
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/ports/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[ports-synopsis]]
== Sinopsis

FreeBSD viene con una excelente colección de herramientas de sistema como parte del sistema base. A pesar de esto, existe gran cantidad de cosas que uno requiere hacer para poner las cosas realmente en marcha, para lo cual se necesita instalar software adicional de terceros. FreeBSD ofrece dos tecnologías complementarias para instalar software de terceros en nuestro sistema: la Colección de Ports de FreeBSD y «packages»(paquetes) binarios. Cualquiera de los dos sistemas puede usarse para instalar las versiones más recientes, de forma local o directamente desde la red.

Después de leer este capítulo usted sabrá:

* Cómo instalar packages binarios de software de terceros.
* Cómo compilar software de terceros desde la Colección de Ports.
* Cómo eliminar packages o ports instalados previamente.
* Cómo sobreescribir los valores por omisión que utiliza la colección de ports.
* Cómo encontrar la aplicación adecuada.
* Cómo actualizar aplicaciones.

[[ports-overview]]
== Aproximación a la instalación de software

Si ha usado un sistema UNIX(R) con anterioridad sabrá que el procedimiento típico para instalar software de terceros es algo similar a esto:

[.procedure]
. Descargar el software, que puede distribuirse en formato de código fuente o binario.
. Desempaquetar el software de su formato de distribución (normalmente en un «tarball» comprimido con man:compress[1], man:gzip[1] o man:bzip2[1]).
. Consultar la documentación (quizás un fichero [.filename]#INSTALL# o [.filename]#README#, o los ficheros del subdirectorio [.filename]#doc/#) para ver como instalar el software.
. Si el software se distribuye como fuente, compilarlo. Esto puede requerir que editemos el fichero [.filename]#Makefile# o que ejecutemos el «script» `configure`, entre otras cosas.
. Instalar y probar el software.

Y esto solamente si todo marcha bien. Si está instalando un software que no ha sido portado específicamente para FreeBSD, puede que sea necesario editar el código para que funcione correctamente. 

Si lo desea puede continuar instalando software de la forma «tradicional» en FreeBSD, aunque FreeBSD dispone de dos tecnologías que le pueden ahorrar gran cantidad de tiempo y esfuerzo: los packages y los ports. En el momento de escribir esto existen más de {numports} aplicaciones de terceros.

En cualquier aplicación el paquete de FreeBSD es un solo fichero que tiene que descargar. Los paquetes contienen copia de los programas binarios precompilados de la aplicación, así como cualquier fichero de configuración o documentación. Los paquetes descargados se pueden manipular con las herramientas de gestión de paquetes de FreeBSD: man:pkg_add[1], man:pkg_delete[1], man:pkg_info[1], etc. Instalar una aplicación nueva puede realizarse con una sola orden.

Un port de FreeBSD es una colección de ficheros diseñada para automatizar el proceso de compilación desde el código fuente.

Recuerde que existen ciertos pasos que deberá llevar a cabo para compilar un programa por usted mismo (descargar, desempaquetar, parchear, compilar e instalar). Los ficheros que conforman un port permiten que el sistema se encargue de todo esto. Usted ejecuta un conjunto simple de órdenes y el código fuente se descarga, desempaqueta, parchea, compila e instala.

De hecho el sistema de ports también se puede usar para crear paquetes que posteriormente se pueden manipular con `pkg_add` y las demás utilidades de gestión de packages que veremos en breve.

Tanto el sistema de ports como el de paquetes entienden las _dependencias_. Suponga que desea instalar una aplicación que depende de que una biblioteca específica esté instalada. Tanto la biblioteca como la aplicación existen en FreeBSD como paquete o port. Si utiliza `pkg_add` o el sistema de ports para instalar la aplicación ambos notarán que la biblioteca no está instalada y procederán a instalarla antes que nada.

Dado que ambas tecnologís son similares quizás se pregunte por qué FreeBSD se toma la molestía de contar con ambas. Los Packages y los Ports tienen sus propias ventajas, así que cuál utilizar dependerá de su elección en cada momento.

.Ventajas de los Paquetes
* El fichero tarball de un package es normalmente más pequeño que el tarball con el código fuente de la aplicación.
* Los paquetes no requieren compilación. En el caso de aplicaciones grandes, como Mozilla, KDE, o GNOME este detalle puede ser importante, especialmente si usa un equipo lento.
* Los paquetes no requieren que comprenda el proceso que envuelve el compilar software bajo FreeBSD.

.Ventajas de los Ports
* Normalmente los paquetes se compilan con opciones conservadoras, en virtud del gran número de equipos donde se instalarán. Al instalar como port puede usted editar las preferencias para (por ejemplo) generar código específico para un procesador Pentium IV o Athlon.
* Algunas aplicaciones tienen opciones sobre lo que pueden y lo que no pueden hacer. Por ejemplo Apache se puede configurar con una gran variedad de opciones. Al compilarlo desde los ports usted no tiene por que aceptar las opciones predefinidas, puede seleccionar que opciones desea.
+ 
En algunos casos existen varios paquetes para la misma aplicación con diferentes opciones. Por ejemplo, Ghostscript está disponible como paquete [.filename]#ghostscript# y como paquete [.filename]#ghostscript-nox11#, dependiendo de si usted cuenta o no con servidor X11. En este caso decidir puede ser sencillo e incluso pueden facilitarse packages con ambas opciones, pero elegir se puede volver un problema si hay más de una o dos opciones de compilación.
* Las condiciones de la licencia de algunas aplicaciones prohiben la distribución de binarios. Solo permiten la distribución del código fuente.
* Existe gente que no confía en los binarios. Al menos puede usted (en teoría) revisar el código fuente y localizar problemas potenciales.
* Si tiene parches locales necesitará el código fuente para poder aplicarlos.
* Hay gente a la que le gusta tener el código fuente para poder leerlo en ratos de ocio, modificarlo, tomar partes prestadas (cuando la licencia lo permite, claro está), etc.

Para tener constancia de los ports actualizados, suscríbase a la {freebsd-ports} y a la {freebsd-ports-bugs}.

[WARNING]
====

Antes de instalar cualquier aplicación consulte http://vuxml.freebsd.org[http://vuxml.freebsd.org] para comprobar los posibles problemas de seguridad relacionados con ella.

También puede instalar package:security/portaudit[] que automáticamente comprobará las vulnerabilidades conocidas de todas las aplicaciones instaladas; también lo comprobará antes de compilar cualquier port. Mientras tanto, puede usar `portaudit -F -a` después de instalar algunos packages.
====

El resto de este capítulo le explicará cómo usar los ports y los packages para instalar software de terceros en FreeBSD.

[[ports-finding-applications]]
== Cómo encontrar aplicaciones

Antes de poder instalar cualquier software debe saber qué es lo que quiere instalar y cómo se llama la aplicación.

La lista de software disponible para FreeBSD crece constantemente. Afortunadamente existen varias formas de localizar lo que busca:

* El sitio web de FreeBSD mantiene una lista (actualizada y que admite búsquedas) de todas las aplicaciones disponibles para FreeBSD en la dirección http://www.freebsd.org/ports/index.html[http://www.FreeBSD.org/ports/ ]. Esta base esta dividida en categorías, y puede buscar por nombre (si lo sabe) o bien listar las aplicaciones disponibles en cierta categoría.
* Dan Langille mantiene FreshPorts en http://www.FreshPorts.org/[http://www.FreshPorts.org/]. FreshPorts verifica los cambios en las aplicaciones del árbol de ports, y le permite «seguir» uno o más ports, sobre los que le enviarán un correo cada vez que se actualicen.
* Si no conoce el nombre de la aplicación que desea pruebe a usar un sitio como FreshMeat (http://www.freshmeat.net/[http://www.freshmeat.net/]) para encontrar una aplicación; después consulte el sitio web de FreeBSD para ver si la aplicación ha sido portada.
* Si sabe el nombre exacto del port y solo necesita saber en qué categoria está puede usar man:whereis[1]. Simplemente escriba `whereis fichero`, donde _fichero_ es el programa que quiera instalar. Si está en su sistema, le dirá dónde está:
+
[source,shell]
....
# whereis lsof
lsof: /usr/ports/sysutils/lsof
....
+ 
Esto nos dice que `lsof` (una utilidad de sistema) está en el directorio [.filename]#/usr/ports/sysutils/lsof#.
* Otra forma de encontrar un port en particular es usando el mecanismo de búsqueda integrado en la colección de ports. Para poder usar esta opción de búsqueda debe estar en el directorio [.filename]#/usr/ports#. Una vez en ese directorio ejecute `make search name=nombre-del-programa`, donde _nombre-del-programa_ es el nombre del programa que desea encontrar. Por ejemplo, si busca `lsof`:
+
[source,shell]
....
# cd /usr/ports
# make search name=lsof
Port:   lsof-4.56.4
Path:   /usr/ports/sysutils/lsof
Info:   Lists information about open files (similar to fstat(1))
Maint:  obrien@FreeBSD.org
Index:  sysutils
B-deps:
R-deps: 
....
+ 
Debe prestar especial atención a la línea «Path:»de la salida, porque es la que indica dónde puede encontrar el port. El resto de información no se necesita para instalar el port.
+ 
Si quiere hacer una búsqueda más a fondo utilice `make search key=cadena` donde _cadena_ es el término que busca. Podrá buscar nombres de ports, comentarios, descripciones y dependencias; también se puede usar para encontrar ports que tengan relación con algún tema en particular si no conoce el nombre del programa que busca.
+ 
En ambos casos la cadena de búsqueda no distingue entre mayúsculas y minúsculas. Buscar «LSOF» dará los mismos resultados que buscar «lsof».

[[packages-using]]
== Uso del sistema de packages

=== Instalar un package

Puede usar man:pkg_add[1] para instalar un package de FreeBSD desde un fichero local o desde un servidor remoto vía red.

.Descarga de un paquete manualmente e instalación en nuestro sistema
[example]
====

[source,shell]
....
# ftp -a ftp2.FreeBSD.org
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230-     This machine is in Vienna, VA, USA, hosted by Verio.
230-         Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.56.4.tgz
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375       00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
ftp> exit
# pkg_add lsof-4.56.4.tgz
....

====

Si no tiene una fuente local de packages (por ejemplo un CDROM de FreeBSD) probablemente la mejor opción sea utilizar el argumento `-r` de man:pkg_add[1], que hará que determine automáticamente el formato del objeto correcto, para posteriormente descargarlo e instalarlo desde un FTP.

[source,shell]
....
# pkg_add -r lsof
....

En el ejemplo anterior el package correspondiente se descargará e instalará sin intervención del usuario. Si desea utilizar una réplica («mirror») de packages que no sea el sitio principal de FreeBSD solo tiene configurar la variable de entorno `PACKAGESITE` correctamente para sobreescribir el sitio predefinido. man:pkg_add[1] utiliza man:fetch[1] para descargar los ficheros, tomando como referencia varias variables de entorno, como `FTP_PASSIVE_MODE`, `FTP_PROXY` y `FTP_PASSWORD`. Quizás deba modificar alguna de estas si se encuentra detrás de un cortafuegos, o usa un proxy FTP/HTTP. Consulte man:fetch[3] si quiere ver una lista completa. Observe también que en el ejemplo anterior usamos `lsof` en vez de `lsof-4.56.4`. Cuando usamos la opción de descarga remota no es necesario especificar la versión del paquete. man:pkg_add[1] descargará automáticamente la última versión de la aplicación.

[NOTE]
====
man:pkg_add[1] descargará la última versión de su aplicación si usa FreeBSD-CURRENT o FreeBSD-STABLE, pero si usa una versión -RELEASE, descargará la versión del package que se construyó con dicha versión. Es posible configurar esto sobreescribiendo la variable de entorno `PACKAGESITE`.
====

Los packages se destribuyen en formatos [.filename]#.tgz# y [.filename]#.tbz#. Puede encontrarlos en link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/], o en la distribución de FreeBSD en CD-ROM. Todos los CDs en el set de 4 CDs de FreeBSD (y en el PowerPak, etc.) contienen packages en el directorio [.filename]#/packages#. La estructura de los packages es similar a la del arbol de [.filename]#/usr/ports#. Cada categoría tiene su propio directorio, y todos los paquetes se pueden encontrar dentro del directorio [.filename]#All#. 

La estructura del directorio de packageckages es idéntica a la de los ports, y funcionan como un todo para conformar el sistema de paquetes/ports. 

=== Eliminar un package

Para eliminar un package instalado en el sistema utilice man:pkg_delete[1].

[source,shell]
....
# pkg_delete xchat-1.7.1
....

=== Miscelánea

Toda la información de los packages se guarda en [.filename]#/var/db/pkg#. Ahíl encontrará la lista completa de paquetes instalados y las descripciones de los mismos.

[[ports-using]]
== Uso de la colección de ports

La siguiente sección incluye las instrucciones básicas para instalar o eliminar programas mediante la Colección de Ports de su sistema.

[[ports-tree]]
=== Cómo obtener la Colección de Ports

Para poder instalar ports primero debe hacerse, obviamente, con la Colección de Ports-; en esencia está compuesta por [.filename]#Makefiles#, parches y ficheros con la descripción de los ports y está en [.filename]#/usr/ports#.

Cuando instaló su sistema FreeBSD el programa sysinstall le preguntó si querí instalar la Colección de Ports. Si contestó que no siga estas instrucciones:

[.procedure]
====
*Procedure: Mediante CVSup*

Este es un método rápido de conseguir y mantener una copia de la Colección de Ports al dia mediante el protocolo CVSup. Si quiere saber más sobre CVSup consulte crossref:mirrors[cvsup,Uso de CVSup].

[NOTE]
======
La implementación del protocolo CVSup que se incluye en FreeBSD se llama csup. Apareció en FreeBSD 6.2. Los usuarios de releases anteriores de FreeBSD puden instalar package:net/csup[] como port o package.
======

Asegúrese de que [.filename]#/usr/ports# está vacío antes de ejecutar csup por primera vez. Si ya tiene la Colección de Ports porque la ha instalado por otros medios csup no purgará los parches de ports eliminados.

. Ejecute `csup`:
+
[source,shell]
....
# csup -L 2 -h cvsup.FreeBSD.org /usr/shared/examples/cvsup/ports-supfile
....
+ 
Cambie _cvsup.FreeBSD.org_ por algún otro servidor CVSup que tenga cerca. Consulte crossref:mirrors[cvsup-mirrors,Réplicas CVSup] (crossref:mirrors[cvsup-mirrors,Servidores]), donde encontrará una lista completa de las réplicas CVSup.
+
[NOTE]
======
Puede usar una versión de [.filename]#ports-supfile# confeccionada a su gusto, por ejemplo para evitar tener que indicarle el nombre del servidor CVSup a mano.

[.procedure]
.. Haga lo siguiente: como `root` copie [.filename]#/usr/shared/examples/cvsup/ports-supfile# en otro sitio, por ejemplo [.filename]#/root# o su directorio /home.
.. Edite [.filename]#ports-supfile#.
.. Reemplace _CHANGE_THIS.FreeBSD.org_ por un servidor CVSup que esté cerca de donde esté usted. Consulte crossref:mirrors[cvsup-mirrors,Réplicas CVSup] (crossref:mirrors[cvsup-mirrors,Servidores]) si necesita ver una lista completa de las mismas.
.. Ejecute `csup` del siguiente modo:
+
[source,shell]
....
# csup -L 2 /root/ports-supfile
....

======

. Al ejecutar man:csup[1] descargará y aplicará todos los cambios recientes que haya sufrido la Colección de Ports, pero tenga en cuenta que no actualizará ninguno de los ports que ya tenga instalados en su sistema.
====

[.procedure]
====
*Procedure: Mediante portsnap*

Portsnap es un método alternativo de distribuir la Colección de Ports. Se incluyó por primera vez en FreeBSD 6.0. Puede instalar man:portsnap[8] en versiones anteriores de FreeBSD como port (package:ports-mgmt/portsnap[]) o como package:

[source,shell]
....
# pkg_add -r portsnap
....
. Puede saltarse esta paso a partir de FreeBSD 6.1-RELEASE y en versiones recientes de Portsnap (port o package). [.filename]#/usr/ports# se creará automáticamente la primera vez que ejecute man:portsnap[8]. En versiones anteriores de portsnap había que crear un [.filename]#/usr/ports# vacío si no existía previamente:
+
[source,shell]
....
# mkdir /usr/ports
....

. Descargue una instantánea comprimida de la Colección de Ports en [.filename]#/var/db/portsnap#. Hecho esto puede desconectar de Internet si quiere.
+
[source,shell]
....
# portsnap fetch
....

. Si está ejecutando Portsnap por vez primera debe extraer la instantánea en [.filename]#/usr/ports#: 
+
[source,shell]
....
# portsnap extract
....
+ 
Si ya tiene un [.filename]#/usr/ports# y solamente está actualizando su árbol de ports ejecute lo siguiente:
+
[source,shell]
....
# portsnap update
....
====

[.procedure]
====
*Procedure: Mediante Sysinstall*

Este método implica el uso de sysinstall para instalar la Colección de Ports.

. Como usuario `root` ejecute `sysinstall` (`/stand/sysinstall` en cualquier versión previa a FreeBSD 5.2); del siguiente modo:
+
[source,shell]
....
# sysinstall
....

. Posiciónese en la opción [.guimenuitem]#Configure# y pulse kbd:[Intro].
. Seleccione la opción [.guimenuitem]#Distributions# y pulse kbd:[Intro].
. Seleccione la opción [.guimenuitem]#ports# y pulse la kbd:[barra espaciadora].
. Seleccione el medio de instalación deseado (CDROM, FTP, etc.)
. Diríjase a la opción [.guimenuitem]#Exit# y pulse kbd:[Intro].
. Pulse kbd:[X] para salir de sysinstall.
====

[[ports-skeleton]]
=== Instalación de ports

Al hablar de la Colección de Ports lo primero que hay que explicar es a qué nos referimos cuando hablamos de un «esqueleto» (skeleton). El esqueleto de un port es un conjunto mínimo de ficheros que indican a FreeBSD cómo compilar e instalar un programa. Cada esqueleto incluye:

* Un [.filename]#Makefile#. Este [.filename]#Makefile# contiene diversas sentencias que le indican al sistema cómo compilarlo y dónde instalarlo en su sistema.
* Un fichero [.filename]#distinfo#. Este fichero contiene información sobre los ficheros que se debe descargar para poder compilar el programa, así como el identificador «checksum», que se usa para comprobar mediante man:md5[1] que la descarga ha sido correcta y que el la integridad del fichero está garantizada.
* Un directorio [.filename]#files#. Este directorio contiene los parches necesarios para compilar e instalar el programa en su sistema FreeBSD. Básicamente los parches son pequeños ficheros que especifican cambios en ficheros concretos. Su formato es en texto plano y suelen decir cosas como «borra la línea 10» o «Cambia la línea 26 por esto». Estos parches también se conocen como «diffs» ya que se generan con man:diff[1].
+ 
Es posible que este directorio tambié contenga algún otro fichero necesario para compilar e instalar el port.
* Un fichero [.filename]#pkg-descr#. Es una descripción más detallada del programa. En algunas ocasiones ocupa varias líneas.
* Un fichero [.filename]#pkg-plist#. Es una lista de todos los ficheros que instalará el port. También le indica al sistema de ports qué ficheros eliminar durante la desinstalación del programa.

Algunos ports tienen otros ficheros, como [.filename]#pkg-message#. El sistema de ports los usa para gestionar situaciones especiales. Si desea conocer los detalles, incluso sobre los ports en general, consulte el libro extref:{porters-handbook}[FreeBSD Porter's Handbook].

El port incluye las instrucciones necesarias para obtener software a partir del código fuente, pero no incluye el código. Puede obtener el código desde un CDROM o desde Internet. El código se distribuye del modo que el autor estime oportuno. Normalmente es un fichero tar comprimido con gzip, pero puede comprimirse con otra herramienta o incluso no estar comprimido. El código del programa, venga como venga, se llama «distfile». A continuación veremos los dos métodos de instalación de un port.

[NOTE]
====
Debe ser el usuario `root` para instalar ports.
====

[WARNING]
====

Antes de instalar cualquier port asegúrese de tener la Colección de Ports actualizada y de comprobar en http://vuxml.freebsd.org/[http://vuxml.freebsd.org/] la existencia de posibles problemas de seguridad que pudiera tener el port.

Puede realizar la comprobación de seguridad con portaudit antes de instalar cualquier aplicación. Esta herramienta está en la Colección de Ports (package:security/portaudit[]). Le rogamos que al menos considere ejecutar `portaudit -F` antes de instalar un port nuevo para que descargue la nueva base de datos de vulnerabilidades. Durante la comprobación diaria de seguridad actualizará la base de datos y hará una auditoría del sistema. Para más información lea las páginas de manúal de man:portaudit[1] y man:periodic[8].
====

La Colección de Ports asume que tiene usted conexión con Internet. Si no es así tendrá que disponer de una copia del distfile en [.filename]#/usr/ports/distfiles#.

El primer paso es ubicarse en el directorio del port que desea instalar:

[source,shell]
....
# cd /usr/ports/sysutils/lsof
....

Una vez en el directorio [.filename]#lsof# puede ver el esqueleto del port. El siguiente paso es compilar el port. Solamente tiene que teclear `make` en el prompt. Una vez hecho verá algo como esto:

[source,shell]
....
# make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===>  Extracting for lsof-4.57
...
[La salida de la descompresión se ha eliminado]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[La salida de la configuración se ha eliminado]
...
===>  Building for lsof-4.57
...
[La salida de la compilación se ha eliminado]
...
#
....

Una vez que acabe la compilación se le devolverá el control del prompt. El siguiente paso es instalar el port. Para ello bastará con que añada una palabra a la orden `make`: esa palabra es `install`:

[source,shell]
....
# make install
===>  Installing for lsof-4.57
...
[La salida de la instalación se ha eliminado]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.57
===>   Registering installation for lsof-4.57
===>  SECURITY NOTE:
      This port has installed the following binaries which execute with
      increased privileges.
#
....

Una vez que vuelva usted al prompt podrá ejecutar la aplicación que acaba de instalar. Dado que `lsof` es un programa que se ejecuta con privilegios altos se le ha mostrado una advertencia de seguridad. Durante la compilación e instalación es posible que hayan aparecido otros.

Le recomendamos que borre el directorio que contiene todos los ficheros temporales necesarios durante la compilación. No solo consume valioso espacio en disco sino que puede dar problemas cuando vaya a actualizar el port a una versión más reciente.

[source,shell]
....
# make clean
===>  Cleaning for lsof-4.57
#
....

[NOTE]
====
Puede ahorrarse teclear dos pasos si para instalar un port teclea `make install clean` en lugar de `make`, `make install` y `make clean` como tres pasos separados.
====

[NOTE]
====
Algunas shells mantienen una caché de órdenes disponibles en los directorios que aparecen en la variable de entorno `PATH` con el fin de acelerar las operaciones de búsqueda de ejecutables de esas órdenes. Si usa una de esas shells tendrá que utilizar la orden `rehash` tras instalar un port o no podrá ejecutar aplicaciones recién instaladas. Esta orden funciona en shells como `tcsh`. Utilice `hash -r` en shells `sh`. Para más información consulte la documentación de su shell.
====

Algunos DVD-ROM de terceros, como el FreeBSD Toolkit de http://www.freebsdmall.com/[FreeBSD Mall] contienen distfiles. Puede usarlos con la Colección de Ports. Monte el DVD-ROM en [.filename]#/cdrom#. Si utiliza un punto de montaje diferente asigne a `CD_MOUNTPTS` el valor adecuado. Los distfiles se irán copiando automáticamente a medida que vayan siendo necesarios.

[NOTE]
====
Por favor, tenga en cuenta que la licencia de unos cuantos ports muy concretos no permite su distribución en CD-ROM. Puede deberse a que es necesario rellenar un formulario de registro antes de descargarlo, porque la redistribución no esté permitida o por otra razón. Si quiere instalar un port que no está en el CD-ROM tendrá que tener salida a Internet.
====

El sistema de ports utiliza man:fetch[1] para descargar ficheros; en este proceso intervienen varias variables de entorno, como `FTP_PASSIVE_MODE`, `FTP_PROXY`, y `FTP_PASSWORD`. Si está detrás de un cortafuegos tendrá que asignar valores a una o más de estas variables, así como si necesita utilizar un proxy FTP/HTTP. Consulte man:fetch[3], donde econtrará una lista detallada.

La opción `make fetch` se creó para los usuarios que no disponen de conexión contínua. Ejecute esta orden en el directorio raíz ([.filename]#/usr/ports#) y se descargarán todos los ficheros necesarios. Esta orden también funciona en directorios situados más abajo, por ejemplo [.filename]#/usr/ports/net#. Tenga en cuenta que si un port depende de librerías u otros ports éstos distfiles _no_ se descargarán, a menos que reemplace `fetch` por `fetch-recursive`, que se encargará de descargar todas las dependencias de cada port.

[NOTE]
====
Si quiere compilar todos los ports de una categoría y de una sola vez ejecutando la orden `make` en el directorio raíz, de muy similar manera que lo que se acaba de ver con `makefetch`. Tenga en cuenta que esto es bastante peligroso porque algunos ports no pueden coexistir. También se dan casos de ports que instalan instalan dos ficheros diferentes con el mismo nombre.
====

En algunos casos (raros) el usuario tendrá que descargar los tarball de un sitio que no es el que se guarda en la variable de entorno `MASTER_SITES` (el sitio desde el que se descargan todos los demás normalmente). Puede sobreescribir la opción `MASTER_SITES` con la siguiente orden:

[source,shell]
....
# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch
....

En este ejemplo vamos a darle a la opción `MASTER_SITES` el valor `ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/`.

[NOTE]
====
Algunos ports permiten (o incluso exigen) que se le faciliten opciones de compilación para activar o desactivar partes de la aplicación que no se necesiten, determinadas opciones de seguridad, etc. Casos típicos de esto son package:www/mozilla[], package:security/gpgme[], and package:mail/sylpheed-claws[]. Cuando debe usted tomar este tipo de decisiones se le muestra un mensaje con las opciones disponibles.
====

==== Sobreescribir directorios por omisión de ports

Algunas veces es útil (u obligatorio) utilizar un directorio de trabajo o un «target» distinto al que tenemos por omisión. Las variables de entorno `WRKDIRPREFIX` y `PREFIX` pueden sobreescribirse según nuestra conveniencia. Veamos un ejemplo:

[source,shell]
....
# make WRKDIRPREFIX=/usr/home/ejemplo/ports install
....

compilará el port en [.filename]#/usr/home/ejemplo/ports# y lo instalará en [.filename]#/usr/local#.

[source,shell]
....
# make PREFIX=/usr/home/ejemplo/local install
....

lo compilará en [.filename]#/usr/ports# y lo instalará en [.filename]#/usr/home/ejemplo/local#.

Y por supuesto,

[source,shell]
....
# make WRKDIRPREFIX=../ports PREFIX=../local install
....

combinará ambas; (ocupa demasiado para mostrarlo en una página, pero la idea general queda clara).

Puede asignar valores a estas variables del mismo modo que a cualquier otra de su entorno. Consulte la documentación de su shell para más información.

==== Uso de `imake`

Algunos ports que usan `imake` (un componente del Sistema X Window) no funcionan correctamente con `PREFIX` e insistirán en instalarse en [.filename]#/usr/X11R6#. Del mismo modo algunos ports de Perl ignoran `PREFIX` y se instalan en el árbol de Perl. Hacer que estos ports respeten `PREFIX` es difícil y a veces imposible.

==== Reconfigurar ports

Al compilar ciertos ports se le presentará un menú basado en ncurses en el cual podrá elegir entre más o menos opciones de compilación. No es raro que los usuarios quieran volver a usar ese menú para añadir, quitar o cambiar opciones una vez que el port ya está compilado. Hay bastantes formas de hacerlo. Una manera es entrar al directorio que contiene el port y teclear `make config`, que hará que se le presente de nuevo el menú con las opciones que estuvieran seleccionadas previamente. Otra opción es usar la orden `make showconfig`, que le mostrará todas las opciones de configuración del port. Hay otra opción más, `make rmconfig`, que borrará todas las opciones que estuvieran seleccionadas y le permitirá por tanto empezar desde cero. Todas estas opciones y muchas más las encontrará descritas con gran detalle en man:ports[7].

[[ports-removing]]
=== Cómo desinstalar ports

Ahora que sabe instalar ports probablemente quiera saber cómo eliminarlos; puede que haya instalado alguno y posteriormente se haya dado cuenta de que ha instalado el port incorrecto. Vamos a desinstalar el port del ejemplo anterior (que, para todos aquellos que no estaban atentos, era `lsof`). Igual que al instalar ports, lo primero que debemos hacer es ubicarnos en el directorio del port que deseamos eliminar del sistema, en nuestro caso [.filename]#/usr/ports/sysutils/lsof#. Los ports se desinstalan exactamente igual que los packages; esto se explica en la <<packages-using,sección de packages>>) utilizando la orden man:pkg_delete[1]:

[source,shell]
....
# pkg_delete lsof-4.57
....

[[ports-upgrading]]
=== Actualización de ports

Antes de nada necesita ver una lista de ports instalados de los cuales exista una nueva versión en la Colección de Ports. Utilice man:pkg_version[1]:

[source,shell]
....
# pkg_version -v
....

[[ports-file-updating]]
==== [.filename]#/usr/ports/UPDATING#

Una vez actualizada la Colección de Ports (y _antes_ de intentar actualizar ningún port) debe consultar [.filename]#/usr/ports/UPDATING#. Este fichero describe todas las novedades, problemas que pueden encontrarse y pasos que deben seguir los usuarios al actualizar un port; hay cambios de formato, cambios de ubicación de ficheros de configuración o incompatibilidades con versiones anteriores.

Si [.filename]#UPDATING# se contradice de cualquier modo con lo que lea aquí tenga muy encuenta que lo que aparezca en [.filename]#UPDATING# tiene prioridad absoluta.

[[portupgrade]]
==== Actualización de ports con portupgrade

La aplicación portupgrade se diseñó para actualizar fácilmente los ports instalados en un sistema. Puede instalarla desde el port package:ports-mgmt/portupgrade[]. La instalación es como al de cualquier otro port, use la orden `make install clean` command:

[source,shell]
....
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean
....

Compruebe la lista de ports instalados con `pkgdb -F` y arregle todas las inconsistencias que aparezcan. Le recomendamos que haga esta comprobación de forma regular y siempre antes de una actualización.

Si ejecuta `portupgrade -a` portupgrade intentará actualizar todos y cada uno de los ports instalados en su sistema. Utilice el parámetro `-i` si quiere que le pida confirmación antes de actualizar cada uno de los ports.

[source,shell]
....
# portupgrade -ai
....

Si solamente quiere actualizar una sola aplicación (y no absolutamente todos los ports) utilice la orden `portupgrade nombre-de-aplicación`. Añada el modificador `-R` si quiere que portupgrade actualice antes todos los ports de los que depende la aplicación en cuestión.

[source,shell]
....
# portupgrade -R firefox
....

Si quiere usar packages en lugar de ports use el modificador `-P` flag. Con esta opción portupgrade busca en los directorios locales que aparezcan en `PKG_PATH` o descarga los packages desde un sitio remoto si es que no los encuentra en local. Si es imposible encontrar los packages ni en local ni en remoto portupgrade utilizará ports. Si no quiere usar ports pase lo que pase utilice el modificador `-PP`.

[source,shell]
....
# portupgrade -PP gnome2
....

Si quiere solamente descargar los distfiles (o los packages, usando `-P`) sin compilar ni instalar nada, use `-F`. Para más información consulte man:portupgrade[1].

[[portmanager]]
==== Actualización de ports con portmanager

Portmanager es otra aplicación pensada para la actualización sencilla de ports instalados en el sistema. Puede encontrarla en package:ports-mgmt/portmanager[]:

[source,shell]
....
# cd /usr/ports/ports-mgmt/portmanager
# make install clean
....

Puede actualizar todos los ports que tenga instalados con una sola orden:

[source,shell]
....
# portmanager -u
....

Si usa el modificador `-ui` se le pedirá confirmación a cada paso que Portmanager vaya a dar. Portmanager también puede usarse para instalar nuevos ports. A diferencia del habitual `make install clean` actualizará todos los ports que dependan antes de compilar e instalar ese port que queramos instalar.

[source,shell]
....
# portmanager x11/gnome2
....

Si aparecen problemas con las dependencias del port que quiere instalar puede usar Portmanager para recompilar todos ello en el orden correcto. Una vez que acabe el port que estaba dando problemas será también recompilado.

[source,shell]
....
# portmanager graphics/gimp -f
....

Para más información consulte man:portmanager[1].

[[portmaster]]
==== Actualización de ports con portmaster

Portmaster es otra aplicación para actualizar ports. Portmaster se diseñó para que utilizara las herramientas del sistema «base» (es decir, no depende de otros ports) y utiliza la información que se almacena en el directorio [.filename]#/var/db/pkg/# para determinar qué port es el que hay que actualizar. Puede encontrarlo en package:ports-mgmt/portmaster[]:

[source,shell]
....
# cd /usr/ports/ports-mgmt/portmaster
# make install clean
....

Portmaster agrupa los ports en cuatro categorías:

* «Root ports» (no tienen dependencias, ningún port depende de ellos)
* «Trunk ports» (no tienen dependencias, otros ports dependen de ellos)
* «Branch ports» (tienen dependencias, otros ports dependen de ellos)
* «Leaf ports» (tienen dependencias, ningún port depende de ellos)

Puede ver una lista de los ports instalados y buscar actualizaciones para ellos usando el modificador `-L` :

[source,shell]
....
# portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> ispell-3.2.06_18
===>>> screen-4.0.3
        ===>>> New version available: screen-4.0.3_1
===>>> tcpflow-0.21_1
===>>> 7 root ports
...
===>>> Branch ports (Have dependencies, are depended on)
===>>> apache-2.2.3
        ===>>> New version available: apache-2.2.8
...
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.9.6_2
===>>> bash-3.1.17
        ===>>> New version available: bash-3.2.33
...
===>>> 32 leaf ports

===>>> 137 total installed ports
        ===>>> 83 have new versions available
....

Con la siguiente orden puede actualizar todos los ports del sistema:

[source,shell]
....
# portmaster -a
....

[NOTE]
====
Por omisión Portmaster guardará una copia de seguridad (un package) de cada port antes de borrarlo. Si la instalación de la nueva versión funciona Portmaster borrará el package. Si utiliza `-b` le dirá a Portmaster que no borre automáticamente el package. Si usa el modificador `-i` arrancará Portmaster en modo interactivo, lo que significa que le pedirá confirmación antes de actualizar cada port.
====

Si se encuentra con errores durante el proceso de actualización puede utilizar el modificador `-f` para actualizar o recompilar todos los ports:

[source,shell]
....
# portmaster -af
....

También puede usar Portmaster para instalar nuevos ports en el sistema, actualizando todas sus dependencias antes de compilar e instalar el nuevo port:

[source,shell]
....
# portmaster shells/bash
....

Por favor, consulte man:portmaster[8] para más información.

[[ports-disk-space]]
=== Los ports y el espacio en disco

Usar la Colección de Ports consume mucho espacio de disco según pasa el tiempo. Por culpa de la tendencia del árbol de ports a crecer sin parar le recomendamos que después de compilar e instalar sofware desde los ports recuerde limpiar los directorios temporales [.filename]#work# mediante la orden `make clean`. Puede limpiar de un plumazo los directorios temporales de toda la Colección de Ports con la siguiente orden:

[source,shell]
....
# portsclean -C
....

Rápidamente acumulará gran cantidad de viejas distribuciones de código en [.filename]#distfiles#. Puede borrarlos a mano, pero también puede usar la siguiente orden para borrar todos los distfiles que no tengan relación con ningún port:

[source,shell]
....
# portsclean -D
....

También puede borrar todos los distfiles sin relación con ningún port instalado en el sistema:

[source,shell]
....
# portsclean -DD
....

[NOTE]
====
`portsclean` forma parte de la «suite» portupgrade.
====

No olvide borrar los ports instalados una vez que deja de necesitarlos. Hay una herramienta muy útil para ayudar a automatizar esta tarea: package:ports-mgmt/pkg_cutleaves[].

[[ports-nextsteps]]
== Después de instalar un port

Una vez que ha instalado una nueva aplicación normalmente deberáa leer toda la documentación que incluya, editar los ficheros de configuración necesarios, asegurarse de que la aplicación se ejecute al arrancar el sistema (si es un dæmon)etc.

Obviamente los pasos exactos para configurar cada aplicación son distintos de una a otra. De cualquier forma, si acaba de instalar aplicación y se pregunta «?Y ahora qué?» estos consejos puede que le ayuden:

* Use man:pkg_info[1] para ver qué ficheros se instalaron y dónde. Por ejemplo, si instalón el paquete Un-Package 1.0.0, lo siguiente:
+

[source,shell]
....
# pkg_info -L un-package-1.0.0 | less
....

+ 
mostrará los ficheros instalados por el paquete. Preste especial atención a los ficheros en el directorio [.filename]#man/#, que son las páginas de ayuda y los del directorio [.filename]#etc/#, que contiene los ficheros de configuración; bajo el directorio [.filename]#doc/# podrá encontrar información más detallada.
+ 
Si no está seguro de qué versión del paquete ha instalado, teclée:
+

[source,shell]
....
# pkg_info | grep -i un-package
....

+ 
y verá todos los paquetes que se llaman _un-package_. Reemplace _un-package_ en la línea de órdenes que tenga que usar en su caso.
* Una vez que ha identificado las páginas de manual de la aplicación revíselas mediante man:man[1]. Revise también los ficheros de configuración, así como cualquier otro tipo de documentación que venga con el software.
* Si la aplicación tiene sitio web visítelo. Es muy posible que encuentre más documentación, listas de preguntas frecuentes (FAQ), etc. Si no sabe cuál puede ser la dirección del sitio web examine la salida de la orden
+

[source,shell]
....
# pkg_info un-package-1.0.0
....

+ 
a veces incluye una línea `WWW:`, que contiene la dirección del sitio web de la aplicación.
* Los ports que deben arrancar con el sistema (como los servidores de Internet) normalmente instalaran un «script» de ejemplo en [.filename]#/usr/local/etc/rc.d#. Debe revisar este «script» para comprobar que todo sea correcto, editarlo o renombrarlo si fuera necesario. Consulte crossref:config[configtuning-starting-services,Cómo arrancar servicios] para más información.

[[ports-broken]]
== Ports que no funcionan

Si encuentra un port que no funciona hay varias cosas que puede hacer:

. Consulte en la http://www.freebsd.org/support#gnats[Base de datos de informes de error] si ya se ha publicado un parche que lo solucione. Si es el caso puede aplicar aplicar el parche en su sistema.
. Pida ayuda al responsable del mantenimiento (conocido como «mantainer») del port. Teclée `make maintainer` o consulte el [.filename]#Makefile# del port si no sabe cuál es la dirección de correo del «mantainer». Recuerde que debe incluir el nombre y la versión del port. Envíe la línea que contiene `$FreeBSD:` al principio del [.filename]#Makefile# del port y salida con el error que obtiene al intentar usar la aplicación.
+
[NOTE]
====
Algunos ports no son responsabilidad de un individuo sino de extref:{mailing-list-faq}[una lista de correo.] Muchas, aunque no todas, tienen un aspecto parecido a mailto:freebsd-nombredelalista@FreeBSD.org[freebsd-nombredelalista@FreeBSD.org]. Por favor, téngalo en cuenta cuando envie ese correo sobre el port que no funciona.

Hay un caso especial: Los ports que tienen como «mantainer» mailto:freebsd-ports@FreeBSD.org[freebsd-ports@FreeBSD.org] en realidad no son responsabilidad de nadie. Los parches y el soporte, en caso de existir, vienen de la comunidad de usuarios y desarrolladores que están suscritos a la lista. Por cierto, siempre hacen falta más voluntarios.
====

+ 
Si no recibe respuesta utilice man:send-pr[1] para enviar un informe de errores. Consulte extref:{problem-reports}[Cómo escribir informes de error])
. _Arreglarlo_. El «Porter's Handbook» incluye información detallada sobre la infraestructura de los ports, así que puede arreglar un port roto o incluso enviar su propio port.
. Descargue el paquete de algún sitio FTP. El servidor «principal» de la colección de paquetes está en el link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[directorio de paquetes] de `ftp.FreeBSD.org` _pero asegúrese de mirar antes en la réplica más próxima_. Esta es una forma de instalar aplicaciones más fácil y más rápida. Instale el paquete mediante man:pkg_add[1].