La siguiente sección incluye las instrucciones básicas para instalar o eliminar programas mediante la Colección de Ports de su sistema.
Para poder instalar ports primero debe hacerse, obviamente, con
la Colección de Ports—; en esencia está compuesta
por Makefiles
, parches y ficheros con la
descripción de los ports y está en
/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:
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 Uso de CVSup.
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 net/csup como port o package.
Asegúrese de que /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
:
#
csup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
Cambie
cvsup.FreeBSD.org
por algún
otro servidor CVSup que tenga cerca.
Consulte Réplicas CVSup (Sección 30.2.2, “Servidores”), donde encontrará una lista
completa de las réplicas CVSup.
Puede usar una versión de
ports-supfile
confeccionada a su gusto,
por ejemplo para evitar tener que indicarle el nombre del
servidor CVSup a mano.
Haga lo siguiente: como root
copie
/usr/share/examples/cvsup/ports-supfile
en otro sitio, por ejemplo
/root
o su directorio /home.
Edite ports-supfile
.
Reemplace
CHANGE_THIS.FreeBSD.org
por un servidor CVSup que
esté cerca de donde esté usted. Consulte
Réplicas
CVSup (Sección 30.2.2, “Servidores”) si necesita
ver una lista completa de las mismas.
Ejecute csup
del siguiente
modo:
#
csup -L 2 /root/ports-supfile
Al ejecutar 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.
Portsnap es un método alternativo de distribuir la Colección de Ports. Se incluyó por primera vez en FreeBSD 6.0. Puede instalar portsnap(8) en versiones anteriores de FreeBSD como port (ports-mgmt/portsnap) o como package:
#
pkg_add -r portsnap
Puede saltarse esta paso a partir de FreeBSD 6.1-RELEASE
y en versiones recientes de
Portsnap (port o package).
/usr/ports
se creará
automáticamente la primera vez que ejecute
portsnap(8). En versiones anteriores de
portsnap había que crear
un /usr/ports
vacío si
no existía previamente:
#
mkdir /usr/ports
Descargue una instantánea comprimida de la
Colección de Ports en
/var/db/portsnap
. Hecho esto
puede desconectar de Internet si quiere.
#
portsnap fetch
Si está ejecutando Portsnap por
vez primera debe extraer la instantánea en /usr/ports
:
#
portsnap extract
Si ya tiene un /usr/ports
y solamente está
actualizando su árbol de ports ejecute lo siguiente:
#
portsnap update
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:
#
sysinstall
Posiciónese en la opción Intro.
y pulseSeleccione la opción Intro.
y pulseSeleccione la opción barra espaciadora.
y pulse laSeleccione el medio de instalación deseado (CDROM, FTP, etc.)
Diríjase a la opción Intro.
y pulsePulse X para salir de sysinstall.
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 Makefile
. Este
Makefile
contiene diversas sentencias
que le indican al sistema cómo compilarlo y dónde
instalarlo en su sistema.
Un fichero 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 md5(1) que la descarga ha sido correcta y que el
la integridad del fichero está garantizada.
Un directorio 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
diff(1).
Es posible que este directorio tambié contenga algún otro fichero necesario para compilar e instalar el port.
Un fichero pkg-descr
. Es una
descripción más detallada del programa.
En algunas ocasiones ocupa varias líneas.
Un fichero 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
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 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.
Debe ser el usuario root
para
instalar ports.
Antes de instalar cualquier port asegúrese de tener
la Colección de Ports actualizada y de comprobar en 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 (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
portaudit(1) y 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 /usr/ports/distfiles
.
El primer paso es ubicarse en el directorio del port que desea instalar:
#
cd /usr/ports/sysutils/lsof
Una vez en el directorio 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:
#
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
:
#
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.
#
make clean
===> Cleaning for lsof-4.57#
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.
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 FreeBSD
Mall contienen distfiles. Puede usarlos con la Colección
de Ports. Monte el DVD-ROM en /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.
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 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 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
(/usr/ports
) y se descargarán todos
los ficheros necesarios. Esta orden también funciona en
directorios situados más abajo, por ejemplo
/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.
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:
#
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/
.
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 www/mozilla, security/gpgme, and mail/sylpheed-claws. Cuando debe usted tomar este tipo de decisiones se le muestra un mensaje con las opciones disponibles.
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:
#
make WRKDIRPREFIX=/usr/home/ejemplo/ports install
compilará el port en
/usr/home/ejemplo/ports
y lo instalará
en /usr/local
.
#
make PREFIX=/usr/home/ejemplo/local install
lo compilará en /usr/ports
y lo
instalará en
/usr/home/ejemplo/local
.
Y por supuesto,
#
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.
Algunos ports que usan imake
(un componente del Sistema X Window) no funcionan correctamente
con PREFIX
e insistirán en instalarse
en /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.
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
ports(7).
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
/usr/ports/sysutils/lsof
. Los ports se
desinstalan exactamente igual que los packages; esto se
explica en la sección de packages) utilizando
la orden pkg_delete(1):
#
pkg_delete lsof-4.57
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 pkg_version(1):
#
pkg_version -v
Una vez actualizada la Colección de Ports (y
antes de intentar actualizar ningún
port) debe consultar
/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 UPDATING
se contradice de cualquier modo
con lo que lea aquí tenga muy encuenta que lo que aparezca en
UPDATING
tiene prioridad absoluta.
La aplicación portupgrade
se diseñó para actualizar fácilmente los ports
instalados en un sistema. Puede instalarla desde el port ports-mgmt/portupgrade. La
instalación es como al de cualquier otro port, use la orden
make install
clean
command:
#
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.
#
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.
#
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
.
#
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 portupgrade(1).
Portmanager es otra aplicación pensada para la actualización sencilla de ports instalados en el sistema. Puede encontrarla en ports-mgmt/portmanager:
#
cd /usr/ports/ports-mgmt/portmanager
#
make install clean
Puede actualizar todos los ports que tenga instalados con una sola orden:
#
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.
#
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.
#
portmanager graphics/gimp -f
Para más información consulte portmanager(1).
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
/var/db/pkg/
para determinar
qué port es el que hay que actualizar. Puede encontrarlo en
ports-mgmt/portmaster:
#
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
:
#
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:
#
portmaster -a
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:
#
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:
#
portmaster shells/bash
Por favor, consulte portmaster(8) para más información.
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 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:
#
portsclean -C
Rápidamente acumulará gran cantidad de viejas
distribuciones de código en
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:
#
portsclean -D
También puede borrar todos los distfiles sin relación con ningún port instalado en el sistema:
#
portsclean -DD
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: ports-mgmt/pkg_cutleaves.
Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/
Si tiene dudas sobre FreeBSD consulte la
documentación antes de escribir a la lista
<questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a
<doc@FreeBSD.org>.