4.7. Resolución de Problemas

La siguiente sección cubre algunas de las preguntas más frecuentes relacionadas a la colección de ports, y algunas técnicas básicas para la resolución de problemas, así como que hacer si encontramos un port roto.

4.7.1. Algunas Preguntas y Respuestas

4.7.1.1. ¿Qué no es una discusión acerca de módems?
4.7.1.2. ¿Qué es un parche (patch)?
4.7.1.3. ¿Qué es eso de tarballs?
4.7.1.4. ¿Y un checksum?
4.7.1.5. He hecho lo que se indica para compilar ports desde un CDROM y funciona de maravilla hasta que he intentado instalar el port de Kermit.
4.7.1.6. Ya hice esto, pero cuando intento guardarlo en el subdirectorio /usr/ports/distfiles obtengo un error diciendo algo acerca de que no cuento por los permisos.
4.7.1.7. ¿El esquema de ports trabaja solamente si se tiene todo en /usr/ports? Mi administrador de sistema dice que todo lo debo tener en /u/people/guests/wurzburger, pero parece que no funciona de esta manera.
4.7.1.8. No cuento con un CDROM de FreeBSD, pero me gustaría contar con todos los ficheros tar a la mano en mi sistema, para no tener que descargarlos cada vez que deseo instalar un port. ¿Hay alguna forma de obtener todos de una sola vez?
4.7.1.9. Tengo conocimiento de que probablemente es más rápido descargar los ficheros tarball desde un servidor réplica (mirror) de FreeBSD, más cercano. ¿Existe alguna forma de indicarle al port que descargue los ficheros de un servidor diferente a los listados en MASTER_SITES?.
4.7.1.10. Quisiera saber cuales son los ficheros que make va a necesitar antes de los descargue.
4.7.1.11. ¿Existe alguna forma de detener la compilación del port? Deseo editar un poco el código, antes de instalarlo, pero es un poco cansado tener que verlo y pulsar Ctrl+C a cada momento.
4.7.1.12. Estoy tratando de hacer mi propio port, y quiero poder detener el proceso, hasta que verifique que mis parches funcionan correctamente. ¿Existe algo similar a make extract, pero para parches?
4.7.1.13. He escuchado que algunas opciones del compilador pueden causar errores. ¿Es cierto? ¿Cómo puedo asegurarme de compilar los ports con las opciones correctas?
4.7.1.14. Existen muchos ports y es difícil encontrar el que quiero. ¿Existe en algún lado una lista de los ports disponibles?
4.7.1.15. Deseo instalar el port foo pero de repente el sistema se detuvo y comenzo a compilar el port bar. ¿Qué esta pasando?
4.7.1.16. He instalado el programa grizzle desde los ports y francamente es un desperdicio de espacio en disco. Quiero eliminarlo, pero no se donde se instalaron sus ficheros. ¿Alguna pista?
4.7.1.17. Aguarda un momento, ¿Se supone que uno debe saber el numero de versión para usar este comando? Hablando en serio, no esperas que recuerde todo esto, ¿o si?
4.7.1.18. Hablando de espacio en disco, el directorio de ports parece que ocupa mucho espacio. ¿Es seguro eliminar algo de este directorio?
4.7.1.19. He intentado eso y aun cuento con los tarballs o como se llamen, en el directorio distfiles. ¿Puedo eliminarlos también?
4.7.1.20. Me gusta contar con muchos, muchos programas para jugar con ellos. ¿Existe una forma de instalar todos los ports en un solo paso?
4.7.1.21. OK, he intentado esto, pero como supuse que tomaria mucho tiempo, lo deje corriendo y me fui a dormir. En la mañana al ver mi computadora, solo había terminado tres ports y medio. ¿He hecho algo incorrectamente?.
4.7.1.22. Realmente no me interesa pasar todo el dí frente al monitor. ¿Alguna mejor idea?
4.7.1.23. En mi trabajo usamos frobble, que se encuentra la Colección de Ports, pero lo hemos editado un poco, para que se ajuste a nuestras necesidades. ¿Existe alguna forma de hacer nuestro paquete, para poder distribuirlo más facilmente en nuestros sitios?.
4.7.1.24. Esto de los ports es muy inteligente. Estoy deseperado por saber ¿Cúal es el secreto?

4.7.1.1. ¿Qué no es una discusión acerca de módems?

Ah, usted debe estar pensando en puertos (ports) seriales, que se encuentran en la parte trasera de su computadora. Aqui nos referimos al término “port” como resultado de aquellas aplicaciones que han sido “portadas” de una versión de Unix a otra.

4.7.1.2. ¿Qué es un parche (patch)?

Una parche (patch), es un pequeño fichero que especifíca como ir de una versión a otra. Contiene texto plano y cuenta con indicaciones similares a “delete line 23” (borrar la línea 23), “add these two lines after line 468” (añadir estas dos líneas después de la línea 468), o “change line 197 to this” (cambiar la línea 197 por esto). Tambié son conocidos como ficheros diff, ya que son generados por el programa diff(1).

4.7.1.3. ¿Qué es eso de tarballs?

Es un fichero con extensión .tar o con alguna variación tal como .tar.gz, .tar.Z, .tar.bz2, o incluso .tgz.

Básicamente, es un árbol de directorio, que ha sido archivado en un solo fichero (.tar) y en ocasiones comprimido (.gz). Esta técnica se uso originalmente para archivar en cintas (que es de donde proviene su nombre; Tape ARchives), pero es ampliamente usado para distribuir código fuente por todo Internet.

Usted puede ver que ficheros se encuentran archivados, o incluso extraerlos usando el programa estandar de Unix tar(1), que se incluye con el sistema base de FreeBSD, de la siguiente manera:

% tar tvzf foobar.tar.gz
% tar xzvf foobar.tar.gz
% tar tvf foobar.tar
% tar xvf foobar.tar

4.7.1.4. ¿Y un checksum?

Es un numero generado por la suma de los datos en el fichero que desea consultar. Si alguno de los caracteres cambia, el checksum ya no será igual al total, de tal suerte que esta simple comparación le permite detectar una diferencia.

4.7.1.5. He hecho lo que se indica para compilar ports desde un CDROM y funciona de maravilla hasta que he intentado instalar el port de Kermit.

# make install
>> cku190.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.

¿Por qué no lo puede encontrar? ¿Acaso tengo un CDROM defectuoso?

Como se explico en la sección Instalando Ports desde un CDROM, algunos ports no se pueden incluir en CDROM, debido a restricciones de licenciamiento. Kermit es un ejemplo de esto. Los términos de la licencia de Kermit, no permiten su inclusión en el CDROM, así que tendrá descargarlo “a mano”, una disculpa!.

La razón por la cual obtiene esos mensajes de error, es por que no cuenta con una conexión a Internet en ese momento. Una vez que lo haya descargado de alguno de los sitios disponibles (MASTER_SITES listados en el fichero Makefile), puede continuar con el proceso de instalación.

4.7.1.6. Ya hice esto, pero cuando intento guardarlo en el subdirectorio /usr/ports/distfiles obtengo un error diciendo algo acerca de que no cuento por los permisos.

El sistema de ports, descarga los ficheros tarball, en el subdirectorio /usr/ports/distfiles, pero muchos administradores de sistema crean un enlace de este directorio a un servidor remoto o a una unidad local de CDROM de solo lectura. Si esta es su situación, entonces deberá especificar un directorio diferente para guardar sus ficheros distfiles, con el siguiente comando:

# make DISTDIR=/directorio/local/con/permisos/de/escritura install

4.7.1.7. ¿El esquema de ports trabaja solamente si se tiene todo en /usr/ports? Mi administrador de sistema dice que todo lo debo tener en /u/people/guests/wurzburger, pero parece que no funciona de esta manera.

Puede usar las variables PORTSDIR y PREFIX, para indicarle al mecanismo de ports que directorios utilizar. Por ejemplo;

# make PORTSDIR=/u/people/guests/wurzburger/ports install

compilará el port en /u/people/guests/wurzburger/ports e instalará todo bajo el directorio /usr/local.

# make PREFIX=/u/people/guests/wurzburger/local install

compilará todo en /usr/ports e instalará todo bajo el directorio /u/people/guests/wurzburger/local.

Y claro esta que,

# make PORTSDIR=../ports PREFIX=../local install

combinará ambos (lo cual es muy largo para escribir aqui, pero debe darnos una buena idea).

Algunos ports que usan imake(1) (una parte del Sistema de Ventanas X) no trabajan bien con PREFIX, e insistiran en instalar todo bajo /usr/X11R6. De forma similar, algunos ports de Perl ignoran la variable PREFIX y proceden a instalar bajo el árbol de Perl. Hacer que estos ports respeten la variable PREFIX es una tarea difícil si no imposible.

Si no le agrada estar tecleando todo esto cada vez que desea instalar un port, es una buena idea incluir estas variables en sus variables de entorno. Lea la documentación de su shell para ver las instrucciones para hacer esto.

4.7.1.8. No cuento con un CDROM de FreeBSD, pero me gustaría contar con todos los ficheros tar a la mano en mi sistema, para no tener que descargarlos cada vez que deseo instalar un port. ¿Hay alguna forma de obtener todos de una sola vez?

Para obtener todos y cada uno de los ficheros tar de la Colección de Ports, haga lo siguiente:

# cd /usr/ports
# make fetch

Para todos los tarball de un directorio concreto haga:

# cd /usr/ports/directorio
# make fetch

y para un solo port--bueno, quizás ya lo adivinó.

4.7.1.9. Tengo conocimiento de que probablemente es más rápido descargar los ficheros tarball desde un servidor réplica (mirror) de FreeBSD, más cercano. ¿Existe alguna forma de indicarle al port que descargue los ficheros de un servidor diferente a los listados en MASTER_SITES?.

Claro. Por ejemplo, si usted sabe que ftp.FreeBSD.org esta más próximo que los servidores listados en MASTER_SITES, haga lo siguiente:

# cd /usr/ports/directorio
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch

4.7.1.10. Quisiera saber cuales son los ficheros que make va a necesitar antes de los descargue.

make fetch-list desplegara una lista de los ficheros necesarios para la compilación del port.

4.7.1.11. ¿Existe alguna forma de detener la compilación del port? Deseo editar un poco el código, antes de instalarlo, pero es un poco cansado tener que verlo y pulsar Ctrl+C a cada momento.

Puede usar el comando make extract, con el cual se detendra el proceso, una vez que se han descargado y extraido los ficheros necesarios.

4.7.1.12. Estoy tratando de hacer mi propio port, y quiero poder detener el proceso, hasta que verifique que mis parches funcionan correctamente. ¿Existe algo similar a make extract, pero para parches?

Si, make patch es lo que usted busca. Quizás la opción PATCH_DEBUG le sea de gran utilidad. Y por cierto, gracias por su esfuerzo!

4.7.1.13. He escuchado que algunas opciones del compilador pueden causar errores. ¿Es cierto? ¿Cómo puedo asegurarme de compilar los ports con las opciones correctas?

Si, con la versión 2.6.3 de gcc (que es la versión distribuida con FreeBSD 2.1.0 y 2.1.5), la opción -O2 puede ocasionar un código con errores, a menos que utilice también la opción -fno-strength-reduce (la mayoría de los ports no hacen uso de la opción -O2). Usted debe poder indicarle al compilador las opciones, con algo similar a:

# make CFLAGS='-O2 -fno-strength-reduce' install

o bien, editando el fichero /etc/make.conf, pero desafortunadamente no todos los ports respetan esto. La mejor forma es ejecutar make configure, y después dirijirse al directorio con el código fuente e inspeccionar y editar el fichero Makefile, pero esto puede ser tedioso si se cuenta con muchos subdirectorios, y en cada uno su propio fichero Makefile.

Lac opciones que por default utiliza el compilador de FreeBSD son muy conservadoras, por lo que si no las ha modificado, no debe tener problemas.

4.7.1.14. Existen muchos ports y es difícil encontrar el que quiero. ¿Existe en algún lado una lista de los ports disponibles?

Vea el fichero INDEX, localizado en /usr/ports. Si desea, también puede buscar en la Colección de Ports por medio de una palabra clave. Por ejemplo, puede encontrar ports relevantes al lenguaje de programación LISP usando:

% cd /usr/ports
% make search key=lisp

4.7.1.15. Deseo instalar el port foo pero de repente el sistema se detuvo y comenzo a compilar el port bar. ¿Qué esta pasando?

El port foo necesita algo del port bar -- por ejemplo, si foo utiliza gráficos, es posible que bar cuente con librerías con rutinas para procesar gráficos. O bien bar puede ser una herramienta necesaria para compilar el port foo.

4.7.1.16. He instalado el programa grizzle desde los ports y francamente es un desperdicio de espacio en disco. Quiero eliminarlo, pero no se donde se instalaron sus ficheros. ¿Alguna pista?

No hay problema, simplemente teclee:

# pkg_delete grizzle-6.5

Otra alternativa es teclear:

# cd /usr/ports/cualquierlugar/grizzle
# make deinstall

4.7.1.17. Aguarda un momento, ¿Se supone que uno debe saber el numero de versión para usar este comando? Hablando en serio, no esperas que recuerde todo esto, ¿o si?

No del todo, lo puede saber haciendo:

# pkg_info -I 'grizzle*'
Information for grizzle-6.5:
grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up
arcade game.

El numero de versión se puede saber usando el comando pkg_info o bien al teclear: ls /var/db/pkg

4.7.1.18. Hablando de espacio en disco, el directorio de ports parece que ocupa mucho espacio. ¿Es seguro eliminar algo de este directorio?

Asi es, si ha instalado un programa y esta seguro de que ya no necesita el código fuente, no hay una razón para contar con él. La forma más segura de hacer esto es:

# cd /usr/ports
# make clean

este comando revisará todos los subdirectorios, y procederá a eliminar todo lo que encuentre, salvo los esqueletos del port.

Sugerencia: Es posible que obtengamos el mismo efecto, pero sin que necesariamente se llame de forma recursiva a cada Makefile. Por ejemplo, puede eliminar directamente todos los subdirectorios work/ con el comando:

# find /usr/ports -depth -name work -exec rm -rf {} \;


4.7.1.19. He intentado eso y aun cuento con los tarballs o como se llamen, en el directorio distfiles. ¿Puedo eliminarlos también?

Si, si esta totalmente seguro de que ha terminado con ellos, también los puede eliminar. Estos se pueden eliminar manualmente, o bien usando el comando make distclean.

4.7.1.20. Me gusta contar con muchos, muchos programas para jugar con ellos. ¿Existe una forma de instalar todos los ports en un solo paso?

Simplemente haga:

# cd /usr/ports
# make install

Tenga cuidado, ya que algunos ports pueden instalar ficheros con el mismo nombre. En el caso de que instale dos programas de gráficos y que ambos instalen /usr/local/bin/plot obviamente le va ocasionar problemas.

4.7.1.21. OK, he intentado esto, pero como supuse que tomaria mucho tiempo, lo deje corriendo y me fui a dormir. En la mañana al ver mi computadora, solo había terminado tres ports y medio. ¿He hecho algo incorrectamente?.

No, el problema es que algunos ports requieren preguntarle cosas que no podemos contestar por usted (por ejemplo; “¿En qué tipo de papel desea imprimir, en A4 o en Carta?”), y requieren de alguien que les dé respuesta.

4.7.1.22. Realmente no me interesa pasar todo el dí frente al monitor. ¿Alguna mejor idea?

OK, haga lo siguiente antes de irse a la cama/trabajo/el parque local:

# cd /usr/ports
# make -DBATCH install

Con esta opción se instalarán todos los ports que no requieren intervención del usuario. Una vez que regrese, haga:

# cd /usr/ports
# make -DINTERACTIVE install

para terminar el trabajo.

4.7.1.23. En mi trabajo usamos frobble, que se encuentra la Colección de Ports, pero lo hemos editado un poco, para que se ajuste a nuestras necesidades. ¿Existe alguna forma de hacer nuestro paquete, para poder distribuirlo más facilmente en nuestros sitios?.

No hay problema, asumiendo que usted sabe como crear los parches de sus cambios, puede hacer lo siguiente:

# cd /usr/ports/algunlugar/frobble
# make extract
# cd work/frobble-2.8
[Aplicar sus parches]
# cd ../..
# make package

4.7.1.24. Esto de los ports es muy inteligente. Estoy deseperado por saber ¿Cúal es el secreto?

No hay secreto, simplemente vea los ficheros bsd.port.mk y bsd.port.subdir.mk que se localizan en /usr/ports/Mk/.

(Los lectores que tiene aversión a los scripts de shell, se les aconseja abstenerse de ver los ficheros de este directorio.)

4.7.2. Ayuda! Este Port Esta Roto! (Broken)

Si se encuentra con port que no trabaj como lo esperaba, existen varias alternativas, que incluyen:

  1. Arreglelo!! El libro Porter's Handbook incluye información detallada de la infraestructura de los "Ports", de tal forma que pueda arreglar los ports que ocasionalmente estan defectuosos o inclusive para crear y enviar su propio port!

  2. Notifiquelo--por correo solamente! Envie un correo a la persona que da mantenimiento al port. Teclee make maintainer o lea el Makefile para ver el correo de esta persona. Recuerde incluir el nombre y la versión del port (puede enviar la línea $FreeBSD: del Makefile) así como la salida del error que da el port. Si no obtiene respuesta de la persona que da mantenimiento al port, puede usar send-pr(1) para enviar un reporte de error.

  3. Descargue el paquete de un servidor FTP cercano. La colección “maestra” de paquetes se localiza en ftp.FreeBSD.org en el directorio de paquetes, pero asegurese primero de verificar en un servidor réplica (mirror)!. Es mas seguro que estos trabajen, a que tener que compilar las fuentes, también es más rápido. Use el programa pkg_add(1) para instalar paquetes en su sistema.

Éste y otros documentos pueden obtenerse en ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para preguntas acerca de FreeBSD, leer la documentación antes de contactar con la lista <questions@FreeBSD.org>.
Para preguntas acerca de esta documentación, e-mail a <doc@FreeBSD.org>.

Hosting by: hurra.com
Generated: 2007-01-26 18:00:31