diff options
Diffstat (limited to 'es_ES.ISO8859-1/books/handbook/ports/chapter.sgml')
-rwxr-xr-x | es_ES.ISO8859-1/books/handbook/ports/chapter.sgml | 2091 |
1 files changed, 0 insertions, 2091 deletions
diff --git a/es_ES.ISO8859-1/books/handbook/ports/chapter.sgml b/es_ES.ISO8859-1/books/handbook/ports/chapter.sgml deleted file mode 100755 index 814a82ac73..0000000000 --- a/es_ES.ISO8859-1/books/handbook/ports/chapter.sgml +++ /dev/null @@ -1,2091 +0,0 @@ -<!-- - The FreeBSD Documentation Project - - $FreeBSD$ ---> - - -<chapter id="ports"> - <title>Instalando Aplicaciones: La colección de Ports</title> - - <para><emphasis>Contribuido por &a.jraynard;.</emphasis></para> - - <para>La colección de Ports de FreeBSD te permite compilar e instalar - una gran cantidad de programas con el mínimo esfuerzo.</para> - - <para>Debido a las diferencias entre los estándars abiertos, conseguir - que un programa funcione en una versión diferente de Unix puede ser - tedioso y complicado, como debe saber todo aquel que lo haya intentado. - Tendrás suerte si el programa que quieres compila limpiamente, - instala todos los componentes donde debe instalarlos y funciona todo - correctamente al primer intento.</para> - - <para>Algunas distribuciones de software han intentado solucionar este - problema incluyendo unos scripts de configuración. Algunos de estos - scripts son muy inteligentes, pero tienen tendencia a anunciar que tu - sistema es algo que nunca has oido y hacen preguntas que suenan a un - exámen final de programación en Unix.</para> - - <para>Afortunadamente, con la colección de Ports, todo el trabajo - duro ya está hecho, y solo tienes que teclear el comando - <command>make install</command> para tener un programa perfectamente - instalado y en funcionamiento.</para> - - <sect1> - <title>¿Porqué tener una Colección de Ports?</title> - - <para>El sistema base de FreeBSD incluye una gran variedad de - herramientas y utilidades de sistema, pero muchos de los programas - populares no están en la distribución base del sistema, - por buenas razones:</para> - - <orderedlist> - <listitem> - <para>Programas con los que algunos usuarios no puede vivir sin ellos y - otros usuarios ni los conocen, como cierto editor basado en Lisp.</para> - </listitem> - - <listitem> - <para>Programas demasiado especializados para ser incluidos en la - distribución base del sistema (CAD, bases de datos, etc).</para> - </listitem> - - <listitem> - <para>Programas que se pueden incluir en la categoría - “Tengo que mirarlo cuando tenga un rato libre” - (algunos lenguajes, por ejemplo).</para> - </listitem> - - <listitem> - <para>Programas que son demasiado divertidos para ser incluidos en - un sistema operativo serio como FreeBSD ;-)</para> - </listitem> - - <listitem> - <para>Por muchos programas que se incluyesen en el sistema base, la - gente siempre quiere más, y se debe crear una línea - de separación en algún momento (de otra manera, las - distribuciones de FreeBSD serín enormes).</para> - </listitem> - </orderedlist> - - <para>Obviamente no sería razonable que cada usuario se portase - manualmente sus programas favoritos (sin mencionar la enorme cantidad de - trabajo duplicado), así que el proyecto FreeBSD ha usado un - ingenioso sistema que mediante herramientas estándar permite - automatizar todo el proceso.</para> - - <para>Esta es una excelente ilustración de como el - “Unix way” trabaja en la prática combinando una serie - de simples pero muy flexibles herramientas y consiguiendo algo muy - potente.</para> - </sect1> - - <sect1> - <title>¿Cómo funciona la Colección de Ports?</title> - - <para>Los programas en Internet se suelen distribuir como un <link - linkend="ports-tarball">tarball</link> consistente en un Makefile y el - código fuente del programa, incluyendo algunas instrucciones (las - cuales no siempre son tan instructivas como debieras), y un script de - configuración.</para> - - <para>El escenario habitual es que bajas el tarball vía FTP, lo - extraes en algún directorio, lees las instrucciones, haces los - cambios que parezcan necesarios, ejecutas el script de configuración - y usas el programa <command>make</command> para compilar e instalar el - programa desde el código fuente.</para> - - <para>Los ports de FreeBSD siguen usando el mecanismo del tarball, pero - usan un <link linkend="ports-skeleton">esqueleto</link> en el que guardan - la información necesaria para que el programa funcione correctamente - en FreeBSD. Los ports también tienen su propio y personalizado - <link linkend="ports-makefile">Makefile</link> para practicamente todos - los ports puedan ser compilados de la misma manera.</para> - - <para>Si miras el esqueleto de un port (ya sea <ulink - URL="file://localhost/usr/ports/devel/ElectricFence">en tu sistema - FreeBSD</ulink> o <ulink - URL="ftp://ftp.freebsd.org/pub/FreeBSD/ports/ports/devel/ElectricFence">en - el servidor FTP</ulink>) y esperas encontrar todo tipo de combinaciones - de ciencia avanzada, puede que te decepciones, ya que sólo - encontrarás uno o dos ficheros y directorios de lo más - habitual. (En un momento veremos como <link - linkend="ports-getting">obtener un port</link>).</para> - - <para>“¿Cómo es posible que esto pueda hacer algo? - ” Oigo como lloras. “No hay código fuente!”</para> - - <para>Lo creas o no, gentil lector, todo quedará entendido (o eso - espero). Veamos que pasa si intentamos instalar un port. He elegido el - programa <application>ElectricFence</application>, una útil - herramienta para desarrolladores, ya que el esqueleto es más - claro que muchos otros.</para> - - <note> - <para>Si intentas ejecutar esto, necesitas estar como root.</para> - </note> - - <screen>&prompt.root; <userinput>cd /usr/ports/devel/ElectricFence</userinput> -&prompt.root; <userinput>make install</userinput> ->> Checksum OK for ElectricFence-2.0.5.tar.gz. -===> Extracting for ElectricFence-2.0.5 -===> Patching for ElectricFence-2.0.5 -===> Applying FreeBSD patches for ElectricFence-2.0.5 -===> Configuring for ElectricFence-2.0.5 -===> Building for ElectricFence-2.0.5 -[lots of compiler output...] -===> Installing for ElectricFence-2.0.5 -===> Warning: your umask is "0002". If this is not desired, set it to - an appropriate value and install this port again by ``make reinstall''. -install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib -install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3 -===> Compressing manual pages for ElectricFence-2.0.5 -===> Registering installation for ElectricFence-2.0.5</screen> - - <para>Para evitar confusiones, he borrado todas las líneas - correspondientes a la compilación del programa.</para> - - <para>Si has realizado la instalación de este port, habrás - obtenido algo así en pantalla:</para> - - <screen id="ports-fetch">&prompt.root; <userinput>make install</userinput> ->> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system. ->> Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.</screen> - - <para>El programa <command>make</command> notifica que no tienes una copia - en local del código fuente e intenta bajarlo por FTP. En el - ejemplo, ya tenía el código en el ordenador, por lo que no - ha sido necesario obtenerlo de Internet.</para> - - <para>Vayamos revisando que ha hecho el programa <command>make</command> - </para> - - <procedure> - <step> - <para>Localizar el <link - linkend="ports-tarball">tarball</link> con el código fuente. - Si no está disponible localmente, intenta obtenerlo desde - un servidor FTP.</para> - </step> - - <step> - <para>Ejecutar un test de <link linkend="ports-checksum">checksum</link> - para asegurar que el tarball del código fuente es correcto.</para> - </step> - - <step> - <para>Extraer el tarball en un directorio temporal.</para> - </step> - - <step> - <para>Aplicar todos los <link linkend="ports-patch">parches</link> - necesarios para que el código fuente compile y funcione bajo - FreeBSD.</para> - </step> - - <step> - <para>Ejecutar cualquier script de configuración requerido por - el proceso de compillación, además de responder - correctamente a cualquiera de las preguntas realizadas por éste. - </para> - </step> - - <step> - <para>(Finalmente!) Compilar el código.</para> - </step> - - <step> - <para>Instalar los ejecutables del programa y otros archivos de - soporte, páginas man, etc, bajo la jerarquía - <filename>/usr/local</filename>, donde no se mezclarán con los - programas de sistema. Esto también asegura que todos los ports - que instales estarán en el mismo lugar, evitando que queden - repartidos por diferentes lugares del disco.</para> - </step> - - <step> - <para>Registrar la instalación en una base de datos. Esto - significa que, si no te gusta el programa, puedes <link - linkend="ports-remove">borrar</link> todos sus programas y archivos - de tu sistema.</para> - </step> - </procedure> - - <para>Vuelve a mirar la salida del programa <command>make</command> antes - mostrada e intenta localizar los pasos descritos. Y si no estabas impresionado - antes, deberías estarlo ahora.</para> -</sect1> - - <sect1 id="ports-getting"> - <title>Obteniendo un Port de FreeBSD</title> - - <para>Hay dos maneras de obtener un port de FreeBSD para un programa. Uno - requiere el <link linkend="ports-cd">CDROM de FreeBSD</link>, y el otro - requiere una <link linkend="ports-inet">conexión a Internet</link>. - </para> - - <sect2 id="ports-cd"> - <title>Compilar los PORTS desde CDROM</title> - - <para>Asumiendo que tu CDROM de FreeBSD está en el lector y montado - en <filename>/cdrom</filename> (y <emphasis>must</emphasis> estar - montado en <filename>/cdrom</filename>), deberís poder compilar - toda la colección de ports sin problemas, ya que ésta - encontraría los tarballs en - <filename>/cdrom/ports/distfiles/</filename> (si existen allí) - en lugar de obtenerlos de Internet.</para> - - <para>Otra manera de hacer esto, si sólo quieres usar los - esqueletos del CDROM, es poner la variables del fichero - <filename>/etc/make.conf</filename> de la siguiente manera:</para> - - <programlisting> -PORTSDIR= /cdrom/ports -DISTDIR= /tmp/distfiles -WRKDIRPREFIX= /tmp</programlisting> - - <para>Substituye <literal>/tmp</literal> por cualquier directorio en - el que tengas suficiente espacio. Entonces, entra en el subdirectorio - apropiado bajo <filename>/cdrom/ports</filename> y teclea - <command>make install</command> como hasta ahora. - <makevar>WRKDIRPREFIX</makevar> hará que el port sea compilado - bajo <filename>/tmp/cdrom/ports</filename>; por ejemplo, - <filename>games/oneko</filename> será compilado bajo - <filename>/tmp/cdrom/ports/games/oneko</filename>.</para> - - <note> - <para>Hay algunos ports para los que no podemos dar el código - fuente original en el CDROM debido a limitaciones de licencia. Es estos - casos, tendrás que mirar en la sección <link - linkend="ports-inet">Compilando los ports usando una conexión a - Internet.</link></para> - </note> - </sect2> - - <sect2 id="ports-inet"> - <title>Compilando los Ports desde Internet</title> - - <para>Si no tienes CDROM o quieres estar seguro de instalar la - última versión del port que te interesa, necesitarás - bajarte el <link linkend="ports-skeleton">esqueleto</link> de ese port. - </para> - - <para>Primero, si estás usando una versión release de - FreeBSD, asegúrate de tener instalado el kit de actualización - apropiado para tu release. Para conocer el kit apropiado, mira en - <ulink url="http://www.freebsd.org/ports/">la página web de - ports</ulink>. Estos packages incluyen ficheros que han sido actualizados - desde la release y que serán necesarios para compilar los nuevos - ports.</para> - - <para>La clave para los esqueletos es que el servidor FTP de FreeBSD puede - crear <link linkend="ports-tarball">tarballs</link> al momento. - Aquí tienes cómo trabaja, usando como ejemplo el programa - gnats en el directorio de bases de datos (el texto entre corchetes son - comentarios. No los teclees si intentas ejecutar el ejemplo):</para> - - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>mkdir databases</userinput> -&prompt.root; <userinput>cd databases</userinput> -&prompt.root; <userinput>ftp ftp.freebsd.org</userinput> -[log in as `ftp' and give your email address when asked for a -password. Remember to use binary (also known as image) mode!] -<prompt>></prompt> <userinput>cd /pub/FreeBSD/ports/ports/databases</userinput> -<prompt>></prompt> <userinput>get gnats.tar</userinput> -[tars up the gnats skeleton for us] -<prompt>></prompt> <userinput>quit</userinput> -&prompt.root; <userinput>tar xf gnats.tar</userinput> -[extract the gnats skeleton] -&prompt.root; <userinput>cd gnats</userinput> -&prompt.root; <userinput>make install</userinput> -[build and install gnats]</screen> - - <para>¿Qué ha ocurrido aquí?. Hemos conectado con - el servidor FTP de la manera habitual y entrado en el subdirectorio - <filename>databases</filename>. Al enviar el comando - <command>get gnats.tar</command>, el servidor FTP ha empaquetado en - formato <link linkend="ports-tarball">tarred</link> el directorio - gnats.</para> - - <para>A continuación hemos extraido el esqueleto de gnats y - entrado en el directorio para compilar el port. Como hemos explicado - <link linkend="ports-fetch">anteriormente</link>, el programa - <command>make</command> ha detectado que el código fuente no - estaba disponible localmente y lo ha bajado de Internet antes de - extraerlo, aplicar los parches necesarios, compilarlo e instalarlo.</para> - - <para>Intentemos ahora algo más ambicioso. En lugar de obtener el - esqueleto de un simple port, obtengamos todos los de un directorio, por - ejemplo los esqueletos de todas las bases de datos de la colección - de ports. El proceso es muy parecido:</para> - - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>ftp ftp.freebsd.org</userinput> -[log in as `ftp' and give your email address when asked for a -password. Remember to use binary (also known as image) mode!] -<prompt>></prompt> <userinput>cd /pub/FreeBSD/ports/ports</userinput> -<prompt>></prompt> <userinput>get databases.tar</userinput> -[tars up the databases directory for us] -<prompt>></prompt> <userinput>quit</userinput> -&prompt.root; <userinput>tar xf databases.tar</userinput> -[extract all the database skeletons] -&prompt.root; <userinput>cd databases</userinput> -&prompt.root; <userinput>make install</userinput> -[build and install all the database ports]</screen> - - <para>Con media docena de sencillos comandos, tenenemos instalada toda - una serie de programas de bases de datos en nuestra máquina - FreeBSD. Todo lo que hemos hecho diferente de la instalación de - un sólo port ha sido bajarnos todo un directorio y compilarlo - todo de una sola vez. Impresionante, ¿no?.</para> - - <para>Si tienes pensado instalar muchos ports, es buena idea bajarse - la colección de ports completa.</para> - </sect2> - </sect1> - - <sect1 id="ports-skeleton"> - <title>Esqueletos</title> - - <para>Un grupo de hackers compulsivos que ha olvidado comer en un intento - de llegar a un punto prefijado?. No, un esqueleto aquí es la - expresión mínima que incluye todo lo necesario para que los - ports realicen su mágico trabajo.</para> - - <sect2 id="ports-makefile"> - <title><filename>Makefile</filename></title> - - <para>El componente más importante del esqueleto es el Makefile. - Este contiene diferentes declaraciones que especifican cómo - debe ser compilado e instalado un port. Aquí está el - Makefile para el port ElectricFence:</para> - - <programlisting> -# New ports collection makefile for: Electric Fence -# Version required: 2.0.5 -# Date created: 13 November 1997 -# Whom: jraynard -# -# $Id$ -# - -DISTNAME= ElectricFence-2.0.5 -CATEGORIES= devel -MASTER_SITES= ${MASTER_SITE_SUNSITE} -MASTER_SITE_SUBDIR= devel/lang/c - -MAINTAINER= jraynard@freebsd.org - -MAN3= libefence.3 - -do-install: - ${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib - ${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3 - -.include <bsd.port.mk></programlisting> - - <para>Las líneas que empiezan con el símbolo "#" - son comentarios para facilitar las cosas a los lectores humanos (como - en la mayoría de los scripts en Unix).</para> - - <para><literal>DISTNAME</literal> especifica el nombre del <link - linkend="ports-tarball">tarball</link>, pero sin la extensión. - </para> - - <para><literal>CATEGORIES</literal> indica que tipo de programa es. En - este caso, una utilidad para desarrolladores. Mira en la sección - <link linkend="porting-categories">categorías</link> de este - handbook para ver una lista completa.</para> - - <para><literal>MASTER_SITES</literal> es la URL(s) del servidor FTP - principal, usado para obtener el <link - linkend="ports-tarball">tarball</link> si no está disponible - en el sistema local. Este servidor se considera fiable, y normalmente es - desde el que se distribuye de manera oficial el programa.</para> - - <para><literal>MAINTAINER</literal> es la dirección de email de - la persona responsable de actualizar el esqueleto, si, por ejemplo, - aparece una nueva versión del programa.</para> - - <para>Pasando por alto las siguientes líneas, la línea - <literal>.include <bsd.port.mk></literal> indica que las otras - declaraciones o comandos necesarios para compilar el port están - en un fichero estándar llamado <filename>bsd.port.mk</filename>. - Como éstas son las mismas para todos los ports, no hay necesidad - de duplicarlos en todos los ports, así que se mantienen en un - solo fichero.</para> - - <para>Este no es el lugar para entrar en detalle sobre el funcionamiento - del Makefile; es suficiente con decir que la línea que comienza - con <literal>MAN3</literal> asegura que la página man de - ElectricFence sea compilada después de la instalación, para - ayudar a conservar tu preciado espacio en disco. El port original no - contenía el objeto <maketarget>install</maketarget>, así que - las tres líneas a partir de <maketarget>do-install</maketarget> - aseguran que los ficheros producidos por este port sean instalados - en el lugar correcto.</para> - </sect2> - - <sect2> - <title>El directorio <filename>files</filename></title> - - <para>El fichero que contiene el <link - linkend="ports-checksum">checksum</link> del port se llama - <filename>md5</filename>, ya que se usa el algoritmo MD5 para comprobar - el checksum de los ports. Está en el directorio llamado - <filename>files</filename>.</para> - - <para>Este directorio puede contener otros ficheros necesarios para - compilar el port y que no pueden situarse en ningun otro lugar.</para> - </sect2> - - <sect2> - <title>El directorio <filename>patches</filename></title> - - <para>Este directorio contiene los <link - linkend="ports-patch">patches</link> necesarios para hacer - que todo funcione correctamente bajo FreeBSD.</para> - </sect2> - - <sect2> - <title>El directorio <filename>pkg</filename></title> - - <para>Este programa contiene tres archivos muy comunes:</para> - - <itemizedlist> - <listitem> - <para><filename>COMMENT</filename> — una descripción - muy corta del programa.</para> - </listitem> - - <listitem> - <para><filename>DESCR</filename> — una descripción - más detallada.</para> - </listitem> - - <listitem> - <para><filename>PLIST</filename> — una lista de todos los - archivos que serán creados cuando el programa esté - instalado.</para> - </listitem> - </itemizedlist> - </sect2> - </sect1> - - <sect1 id="ports-troubleshooting"> - <title>¿Qué hacer cuando un port no funciona?</title> - - <para>Oh, puedes hacer una de estas cuatro (4) cosas:</para> - - <orderedlist> - <listitem> - <para>Solucionarlo tú mismo. Los detalles técnicos de como - trabajan los ports se pueden encontrar en <link - linkend="porting">Portando aplicaciones.</link></para> - </listitem> - - <listitem> - <para>Quejarte. <emphasis>Sólo</emphasis> hacerlo por email. - Enví el mail a la dirección &a.ports; y por favor, - indica el nombre/versión del port, dónde obtuviste el - código fuente y cual ha sido el texto de error.</para> - </listitem> - - <listitem> - <para>Olvidarlo. Este el sistema más fácil para alguno - de los pocos ports que puedan clasificarse como esenciales.</para> - </listitem> - - <listitem> - <para>Obtener el package compilado desde un servidor FTP. La - colección principal de packages está en el servidor - principal de FreeBSD en el directorio <ulink - URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/"> - packages</ulink>, pero por favor, mira primero en tu mirror local. - Estos programas suelen dar menos problemas que intentar compilar el - código fuente y es, sobre todo, mucho más rápido. - Usa el programa &man.pkg.add.1; para instalar un package en tu - sistema.</para> - </listitem> - </orderedlist> - </sect1> - - <sect1> - <title>Algunas Preguntas y Respuestas</title> - - <itemizedlist> - <listitem> - <para>P. Pensaba que esto iba a ser una discusión sobre modems - </para> - - <para>R. Ah. Debes estar pensando en los puertos serie que hay en la - parte trasera de tu ordenador. Aquí usamos la palabra - “port” para definir el resultado de “portar” - un programa de una versión de Unix a otra. (Desafortunadamente - es un mal hábito de los informáticos el usar la misma - palabra para referirse a cosas completamente diferentes).</para> - </listitem> - - <listitem> - <para>P. Pensaba que usabais los packages para instalar los programas - extras</para> - - <para>R. Sí, esa es la manera más rápida y - fácil de instalarlos.</para> - </listitem> - - <listitem> - <para>P. Entonces, ¿Porqué usar los ports?</para> - - <para>R. Por diferentes razones:</para> - - <orderedlist> - <listitem> - <para>Las condiciones de la licencia de algunos programas requieren - que sean distribuidos como código fuente y no en formato - binario.</para> - </listitem> - - <listitem> - <para>Algunas personas no confían en las distribuciones - binarias. Al menos, con el código fuente puedes (en - teoría) repasarlo y detectar problemas potenciales - tú mismo.</para> - </listitem> - - <listitem> - <para>Si tienes algunos parches locales, necesitas el código - fuente para poder añadirlos tú mismo.</para> - </listitem> - - <listitem> - <para>Posiblemente tengas opiniones diferentes a las de otros - usuarios en lo que respecta a las opciones de optimización - en la compilación, creación de versiones de debug, - etc.</para> - </listitem> - - <listitem> - <para>A algunos usuarios les gusta tener el código fuente - para poder leerlo, retocarlo, destrozarlo (dentro de los - términos de la licencia, claro), y cosas así.</para> - </listitem> - </orderedlist> - </listitem> - - <listitem> - <para><anchor id="ports-patch"> P. ¿Qué es un patch - (parche)?</para> - - <para>R. Un parche es un pequeño fichero (normalmente) que - especifica como pasar de una versión de un archivo a otra. - Contiene texto que especifica cosas como “borrar línea - 23”, “añadir estas dos líneas después - de la línea 468” o “cambia la línea 197 - por esta”. También se conoce como “diff” ya - que se genera por un programa llamado así.</para> - </listitem> - - <listitem> - <para><anchor id="ports-tarball"> P. Qué es un tarball?</para> - - <para>R. Es un archivo terminado en <filename>.tar</filename> o - <filename>.tar.gz</filename> (con variaciones como - <filename>.tar.Z</filename>, o también <filename>.tgz</filename> - si intentas adecuar el nombre del archivo a un sistema de archivos - DOS).</para> - - <para>Básicamente, es un árbol de directorios que ha - sido archivado en un solo fichero (<filename>.tar</filename>) y - opcionalmente comprimido (<filename>.gz</filename>). Esta - técnica se usó originalmente para - <emphasis>T</emphasis>ape <emphasis>AR</emphasis>chives (archivos de - cinta) y de aquí el nombre <command>tar</command>, pero ahora - es de uso general en la distribución deil código - fuente de programas a través de Internet.</para> - - <para>Puedes ver que archivos hay en ellos, o bién extraerlos - tú mismo, usando el programa estándar de Unix tar, - incluido en el sistema base de FreeBSD, así:</para> - - <screen>&prompt.user; <userinput>tar tvzf foobar.tar.gz</userinput> - -&prompt.user; <userinput>tar xzvf foobar.tar.gz</userinput> -&prompt.user; <userinput>tar tvf foobar.tar</userinput> -&prompt.user; <userinput>tar xvf foobar.tar</userinput></screen> - </listitem> - - <listitem> - <para><anchor id="ports-checksum">P. ¿Y el checksum?</para> - - <para>R. Es un número que se genera a partir de todo el - contenido del archivo que quieres chequear. Si cambia alguno de - los carácteres, el checksum no será el mismo, así - que una simple comparación te permitirá conocer la - diferencia.</para> - </listitem> - - <listitem> - <para>P. He hecho lo que indicais para <link linkend="ports-cd"> - compilar los ports desde el CDROM</link> y todo ha funcionado - bién hasta que he intentado instalar el port kermit:</para> - - <screen>&prompt.root; <userinput>make install</userinput> ->> cku190.tar.gz doesn't seem to exist on this system. ->> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.</screen> - - <para>¿Porqué no puedo encontrarlo?</para> - - <para>R. Los términos de la licencia del programa kermit no nos - permiten incluir el tarball en el CDROM, así que tendrás - que bajarlo a mano. La razón por la que han salido esos errores - es que no estabas conectado a Internet en el momento de la - instalación. Una vez lo hayas bajado de cualquiera de los - servidores arriba mencionados, puedes empezar de nuevo el proceso - (intenta escoger el servidor más cercano a tí para - ganar tiempo y ahorrar ancho de banda de Internet).</para> - </listitem> - - <listitem> - <para>P. He hecho lo que explicais, pero cuando intento poner el - archivo en <filename>/usr/ports/distfiles</filename> aparece un error - que indica que no tengo permisos.</para> - - <para>R. El mecanismo de ports busca el tarball en - <filename>/usr/ports/distfiles</filename>, pero no podrás copiar - nada ahí por que es un link al CDROM, el cual es de sólo - lectura. Puedes indicar que busque el port en cualquier otro - directorio haciendo</para> - - <screen>&prompt.root; <userinput>make DISTDIR=<replaceable>/where/you/put/it</replaceable> install</userinput></screen> - </listitem> - - <listitem> - <para>P. ¿Sólo funciona el esquema de ports si - están en <filename>/usr/ports</filename>? Mi administrador de - sistema dice que tengo que poner los archivos en - <filename>/u/people/guests/wurzburger</filename>, pero parece que - así no funciona.</para> - - <para>R. Puedes usar las variables <makevar>PORTSDIR</makevar> y - <makevar>PREFIX</makevar> para indicarle al mecanismo de ports que - use directorios diferentes. Por ejemplo,</para> - - <screen>&prompt.root; <userinput>make PORTSDIR=/u/people/guests/wurzburger/ports install</userinput></screen> - - <para>compilará el port en - <filename>/u/people/guests/wurzburger/ports</filename> e - instalará todos los archivos bajo - <filename>/usr/local</filename>.</para> - - <screen>&prompt.root; <userinput>make PREFIX=/u/people/guests/wurzburger/local install</userinput></screen> - - <para>compilará el port en <filename>/usr/ports</filename> y - lo instalará en - <filename>/u/people/guests/wurzburger/local</filename>.</para> - - <para>Y por supuesto</para> - - <screen>&prompt.root; <userinput>make PORTSDIR=.../ports PREFIX=.../local install</userinput></screen> - - <para>combinará los dos (es demasiado extenso para escribirlo - en la página, pero seguro que te haces una idea).</para> - - <para>Si no quieres tener que teclear todo esto cada vez que instalas - un ports, es una buena idea poner estas variables como variables de - entorno.</para> - </listitem> - - <listitem> - <para>P. No tengo el CDROM de FreeBSD pero me gustaría disponer - de todos los tarball en mi sistema para no tener que esperar a que - se bajen de Internet cada vez que instalo un port. Hay alguna manera - sencilla de hacerlo?</para> - - <para>R. Para obtener todos los tarball de la colección completa - de ports haz</para> - - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>make fetch</userinput></screen> - - <para>Para todos los tarball de un directorio de ports, haz</para> - - <screen>&prompt.root; <userinput>cd /usr/ports/<replaceable>directory</replaceable></userinput> -&prompt.root; <userinput>make fetch</userinput></screen> - - <para>y para un solo port, bueno, creo que ya lo has adivinado.</para> - </listitem> - - <listitem> - <para>P. Sé que probablemente es más rápido - obtener los tarballs desde un mirror de FreeBSD cercano. ¿Hay - alguna manera de obtener los ports de otros servidores diferentes a los - establecidos en MASTER_SITES?</para> - - <para>R. Sí. Si sabes, por ejemplo que <hostid - role="fqdn">ftp.FreeBSD.ORG</hostid> te es más cercano que los - servidores listados en <makevar>MASTER_SITES</makevar>, haz como en el - siguiente ejemplo.</para> - - <screen>&prompt.root; <userinput>cd /usr/ports/<replaceable>directory</replaceable></userinput> -&prompt.root; <userinput>make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch</userinput></screen> - </listitem> - - <listitem> - <para>P. Quiero saber que ficheros va a necesitar el programa - <command>make</command> antes de que intente bajarlos.</para> - - <para>R. <command>make fetch-list</command> mostrará una lista - de los ficheros necesarios para el port.</para> - </listitem> - - <listitem> - <para>P. ¿Hay alguna manera de parar la compilación del - port?. Quiero hacer algunos retoques en el código fuente antes - de instalarlo, pero es un poco pesado tener que estar atento y pulsar - control-C cada vez.</para> - - <para>R. Ejecutando <command>make extract</command>, el port - parará después de haber obtenido y extraido el - código fuente.</para> - </listitem> - - <listitem> - <para>P. Estoy intentando crear mi propio port y quiero poder parar - la compilación hasta poder asegurarme de que mis parches - funcionan correctamente. ¿Hay alguna comando como - <command>make extract</command>, pero para parches?</para> - - <para>R. Sí, <command>make patch</command> es lo que quieres. - Probablemente también encontrarás muy útil la - opción <makevar>PATCH_DEBUG</makevar>. Y ya de paso, gracias - por el esfuerzo!.</para> - </listitem> - - <listitem> - <para>P. He oido que algunas opciones de compilación pueden - causar errores. ¿Es cierto?. ¿Cómo puedo - asegurarme de que compilo los ports con las opciones correctas?.</para> - - <para>R. Sí, con la versión 2.6.3 de - <command>gcc</command> (la versión incluida en FreeBSD 2.1.0 y - 2.1.5), la opción <option>-O2</option> puede crear problemas - a no ser que uses también la opción - <option>-fno-strength-reduce</option>. (Muchos de los ports no usan - <option>-O2</option>). <emphasis>Deberís</emphasis> poder - especificar las opciones de compilación con algo como</para> - - <screen>&prompt.root; <userinput>make CFLAGS='-O2 -fno-strength-reduce'install</userinput></screen> - - <para>o editando el fichero <filename>/etc/make.conf</filename>, pero - desafortunadamente no todos los ports respetan esto. La forma más - segura es hacer <command>make configure</command>, entrar en el - directorio de los fuentes e inspeccionar a mano los Makefiles, pero - puede ser muy tedioso si los fuentes tienen muchos subdirectorios, cada - uno con su propio Makefile.</para> - </listitem> - - <listitem> - <para>P. Hay tantos ports que resulta complicado encontrar el que - quiero. ¿Hay alguna lista de los ports disponibles?</para> - - <para>R. Mira el archivo <filename>INDEX</filename> en - <filename>/usr/ports</filename>. También puedes hacer - búsquedas de palabras en la colección de ports. Por - ejemplo puedes encontrar ports referentes al lenguaje de - programación LISP usando:</para> - - <screen>&prompt.user; <userinput>cd /usr/ports</userinput> -&prompt.user; <userinput>make search key=lisp</userinput></screen> - </listitem> - - <listitem> - <para>P. Iba a instalar el port <literal>foo</literal> pero de pronto - el sistema paró la compilación y comenzó a - compilar el port <literal>bar</literal>. ¿Qué - está pasando?</para> - - <para>R. El port <literal>foo</literal> necesita algo que ofrece el - port <literal>bar</literal>, por ejemplo, si <literal>foo</literal> - usa gráficos, <literal>bar</literal> puede tener - librerías con rutinas de procesamiento gráfico - útiles. O puede ser que <literal>bar</literal> sea una - herramienta necesaria para compilar el port <literal>foo</literal>. - </para> - </listitem> - - <listitem> - <para><anchor id="ports-remove">P. Instalé el programa - <literal>grizzle</literal> desde los ports, y, francamente, me parece - una pérdida de espacio en disco, Quiero borrarlo pero no - sé dónde están todos los ficheros. - ¿alguna idea?</para> - - <para>R. No hay problema, sólo haz</para> - - <screen>&prompt.root; <userinput>pkg_delete grizzle-6.5</userinput></screen> - </listitem> - - <listitem> - <para>P. Espera un momento; necesitas saber el número de - versión para usar ese comando. No creerás que voy a ser - capaz de recordarlo, ¿no?</para> - - <para>R. No, desde luego. Puedes encontrar el número de - versión haciendo</para> - - <screen>&prompt.root; <userinput>pkg_info -a | grep grizzle</userinput> -Information for grizzle-6.5: -grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.</screen> - </listitem> - - <listitem> - <para>P. Hablando de espacio en disco, el directorio de ports parece - que cada vez ocupa más espacio. ¿Es recomendable - borrar cosas?</para> - - <para>R. Sí, si ya tienes instalado el programa y crees que no - vas a necesitarlo de nuevo. La mejor manera de hacerlo es</para> - - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>make clean</userinput></screen> - - <para>lo que entrará en todos los subdirectorios de ports y - borrará todo excepto el esqueleto de cada port.</para> - - </listitem> - - <listitem> - <para>P. He hecho lo que comentais y todavía tengo todos esos - tarballs o como le llameis en el directorio - <filename>distfiles</filename>. ¿Puedo borrar esos archivos? - </para> - - <para>R. Sí, si estás seguro de haber terminado con - ellos.</para> - </listitem> - - <listitem> - <para>P. Me gusta tener muchos programas para poder jugar con ellos. - ¿Hay alguna manera de instalar todos los ports de una vez? - </para> - - <para>R. Sólo haz</para> - - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>make install</userinput></screen> - </listitem> - - <listitem> - <para>P. Bién, lo he intentado, pero pensando que tardaría - mucho me fuí a dormir y cuando he vuelto esta mañna he - visto que sólo había instalado tres ports y medio. - ¿Ha ido algo mal?</para> - - <para>R. No, el problema es que algunos ports necesitan hacer preguntas - que no podemos responder por tí y necesitan tener a alguien - "a mano" para poder responderlas.</para> - </listitem> - - <listitem> - <para>P. Realmente, no quiero perder todo un día delante del - monitor. ¿Alguna idea mejor?</para> - - <para>R. Bueno, haz esto antes de irte a dormir</para> - - <screen>&prompt.root <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>make -DBATCH install</userinput></screen> - - <para>Esto instalará todos los ports que <emphasis>no</emphasis> - requieran participación por parte del usuario. Entonces, - cuando vuelvas haz</para> - - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>make -DIS_INTERACTIVE install</userinput></screen> - - <para>para terminar el trabajo.</para> - </listitem> - - <listitem> - <para>P. En el trabajo, estamos usando el programa - <literal>frobble</literal>, que está en la colección de - ports, pero lo hemos alterado un poco para cubrir nuestras necesidades. - ¿Hay alguna manera sencilla de hacer nuestros propios packages - de manera que podamos distribuirlos más fácilmente en - nuestros servidores?</para> - - <para>R. No hay problema, asumiendo que sabes como hacer los parches - para tus cambios:</para> - - <screen>&prompt.root; <userinput>cd <replaceable>/usr/ports/somewhere/frobble</replaceable></userinput> -&prompt.root; <userinput>make extract</userinput> -&prompt.root; <userinput>cd work/frobble-2.8</userinput> -[Apply your patches] -&prompt.root; <userinput>cd ../..</userinput> -&prompt.root; <userinput>make package</userinput></screen> - </listitem> - - <listitem> - <para>P. Este sistema de ports es realmente fantástici. Estoy - desesperado por saber como lo habeis hecho. ¿Cuál es el - secreto?</para - - <para>R. No hay nada secreto, lo tienes todo en los ficheros - <filename>bsd.ports.mk</filename> y - <filename>bsd.ports.subdir.mk</filename> en tu directorio de <ulink - URL="file://localhost/usr/share/mk/">makefiles.</ulink></para> - - <note> - <para>Los lectores con aversión a intrincados shell-scripts - están avisados de no seguir este link...)</para> - </note> - </listitem> - </itemizedlist> - </sect1> - - <sect1 id="porting"> - <title>Haciendo tú mismo un port</title> - - <para><emphasis>Contribuido por &a.jkh;, &a.gpalmer;, &a.asami; &a.obrien; - y &a.hoek;. 28 de Agosto de 1996.</emphasis></para> - - <para>Así que, ¿ahora estás interesado en hacer un - port?. Bién!</para> - - <para>Lo que viene a continuación son algunas guís para crear - un nuevo port para FreeBSD. La mayoría del trabajo es hecha por el - fichero <filename>/usr/ports/Mk/bsd.port.mk</filename> que incluyen todos - los Makefile de los ports. Por favor, mira en este fichero para más - información sobre la manera de trabajar de la colección de - ports. Aunque no uses los Makefiles de manera habitualm, está - bién comentado, y podrás conocer una gran cantidad de cosas - a través de él.</para> - - <note> - <para>Sólo una pequeña parte de las variables - sobreescribibles (<makevar><replaceable>VAR</replaceable></makevar>) - se mencionan en este documento. Muchas (si no todas) están - documentadas al inicio del fichero <filename>bsd.port.mk</filename>. - Este fichero usa una tabulación no estándar. - <application>Emacs</application> y <application>Vim</application> - deberín reconocer la configuración al cargar el fichero. - <command>vi</command> or <command>ex</command> se pueden configurar - para que usen los valores correctos tecleando - <command>:set tabstop=4</command> una vez que el fichero ha sido - cargado.</para> - </note> - - <sect2> - <title>Haciendo Ports rápidamente</title> - - <para>Esta sección te explica cómo hacer un port - rápidamente. En muchos casos no es suficiente, pero ya lo iremos - viendo.</para> - - <para>Primero, obtén el tarball original y ponlo en - <makevar>DISTDIR</makevar>, que por defecto apunta a - <filename>/usr/ports/distfiles</filename>.</para> - - <note> - <para>Los siguientes comentarios asumen que el software compila - sin problema alguno en FreeBSD, y no se requiere absolutamente - ningún cambio para que el port funcione en tu sistema - FreeBSD. Si has necesitado modificar alguna cosa, tendrás que - referirte también por la siguiente sección.</para> - </note> - - <sect3> - <title>Escribiendo el <filename>Makefile</filename></title> - - <para>El <filename>Makefile</filename> debería ser algo como - esto:</para> - - <programlisting> -# New ports collection makefile for: oneko -# Version required: 1.1b -# Date created: 5 December 1994 -# Whom: asami -# -# $Id$ -# - -DISTNAME= oneko-1.1b -CATEGORIES= games -MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/ - -MAINTAINER= asami@FreeBSD.ORG - -MAN1= oneko.1 -MANCOMPRESSED= yes -USE_IMAKE= yes - -.include <bsd.port.mk></programlisting> - - <para>Prueba de entenderlo tú mismo. No te preocupes por los - contenidos de la línea <literal>$Id$</literal>, ya - que serán completadas automaticamente por el CVS cuando el port - sea importado a la colección de ports principal. Puedes - encontrar información más detallada en la sección - <link linkend="porting-samplem">Makefile de ejemplo</link>.</para> - </sect3> - - <sect3> - <title>Escribiendo los ficheros de descripción</title> - - <para>Hay tres ficheros de descripción que son requeridos por - cualquier port. Los ficheros son <filename>COMMENT</filename>, - <filename>DESCR</filename> y <filename>PLIST</filename>. Estos ficheros - deben estar en el subdirectorio <filename>pkg</filename>.</para> - - <sect4> - <title><filename>COMMENT</filename></title> - - <para>Descripción corta del port. - <emphasis>Por favor</emphasis> no incluir el nombre del package - (o número de versión del software) en el comentario. - Aquí tienes un ejemplo:</para> - - <programlisting> -A cat chasing a mouse all over the screen.</programlisting> - </sect4> - - <sect4> - <title><filename>DESCR</filename></title> - - <para>Esta es una descripción más detallada del - port. Uno o varios párrafos explicando claramente que - hace el port es suficiente.</para> - - <note> - <para>Este <emphasis>no</emphasis> es un manual o una - descripción en profundidad de cómo usar o compilar - el port! <emphasis>Por favorm, ten cuidado si lo estás - copiando del <filename>README</filename> o del man</emphasis>. Si - el software portado tiene una página web oficial, - deberías listarlo aquí.</para> - </note> - - <para>Te recomendamos que pongas tu nombre o firma al final de - este fichero de la manerae siguiente:</para> - - <programlisting> -This is a port of oneko, in which a cat chases a poor mouse all over -the screen. - : -(etc.) - -http://www.oneko.org/ - -- Satoshi -asami@cs.berkeley.edu</programlisting> - </sect4> - - <sect4> - <title><filename>PLIST</filename></title> - - <para>Este fichero lista todos los ficheros instalados por el port. - También se llama “packing list” por que el - package es generado con los ficheros listados aquí. Los - paths son relativos al prefijo de instalación (normalmente - <filename>/usr/local</filename> o <filename>/usr/X11R6</filename>). - Si estás usando las variables - <makevar>MAN<replaceable>n</replaceable></makevar> (como - deberís hacer), no listes ninguna página man - aquí.</para> - - <para>Aquí tienes un pequeño ejemplo:</para> - - <programlisting> -bin/oneko -lib/X11/app-defaults/Oneko -lib/X11/oneko/cat1.xpm -lib/X11/oneko/cat2.xpm -lib/X11/oneko/mouse.xpm -@dirrm lib/X11/oneko</programlisting> - - <para>Mira en el man de &man.pkg.create.1; para más detalles - sobre la "lista de empaquetado".</para> - - <note> - <para>Deberís listar todos los ficheros, pero no los nombres - de los directorios. De la misma manera, si el port crea directorios - por sí mismo durante la instalación, asegúrate - de añadir las líneas <literal>@dirrm</literal> - cuando sea necesario para eliminarlos cuando el port sea - desinstalado.</para> - - <para>Es recomendable que mantengas todos los nobres de fichero en - este archivo ordenados alfabéticamente. Hará que la - verificación de cambios cuando actualices el port sea mucho - más sencilla.</para> - </note> - </sect4> - </sect3> - - <sect3> - <title>Creando el fichero de checksum</title> - - <para>Solo teclea <command>make checksum</command>. Las reglas del - programa make para los ports generarán automáticamente - el fichero <filename>files/md5</filename>.</para> - </sect3> - - <sect3 id="porting-testing"> - <title>Testeando los ports</title> - - <para>Debes asegurarte de que las reglas de los ports hagan - exactamente lo que quieres que hagan, incluyendo el empaquetado - del port. Estos son los puntos importantes que necesitas verificar: - </para> - - <itemizedlist> - <listitem> - <para><filename>PLIST</filename> no contiene nada que no sea - instalado por tu port</para> - </listitem> - - <listitem> - <para><filename>PLIST</filename> contiene absolutamente todos - los ficheros instalados por tu port</para> - </listitem> - - <listitem> - <para>Tu port puede ser instalado múltiples veces - usando el parámetro <maketarget>reinstall</maketarget></para> - </listitem> - - <listitem> - <para>Tu port se <link linkend="porting-cleaning">elimina</link> - a sí mismo al usar el parámetro deinstall</para> - </listitem> - </itemizedlist> - - <procedure> - <title>Orden de test recomendado</title> - - <step> - <para><command>make install</command></para> - </step> - - <step> - <para><command>make package</command></para> - </step> - - <step> - <para><command>make deinstall</command></para> - </step> - - <step> - <para><command>pkg_add `make package-name`</command></para> - </step> - - <step> - <para><command>make deinstall</command></para> - </step> - - <step> - <para><command>make reinstall</command></para> - </step> - - <step> - <para><command>make package</command></para> - </step> - </procedure> - - <para>Asegúrate de que no existe ningún warning en - los comandos <maketarget>package</maketarget> y - <maketarget>deinstall</maketarget>. Después del paso 3, mira - si todos los nuevos directorios han sido eliminados correctamente. - también, intenta usar el software después del paso 4, - para asegurarte de que funciona correctamente cuando es instalado desde - un package.</para> - </sect3> - - <sect3 id="porting-portlint"> - <title>Probando tu port con <command>portlint</command></title> - - <para>Por favor, usa el comando <command>portlint</command> para - ver si tu port cumple nuestras normas. El programa - <command>portlint</command> forma parte de la colección de - ports. En particular, debes probar que el - <link linkend="porting-samplem">Makefile</link> es correcto y que el - <link linkend="porting-pkgname">package</link> es nombrado - apropiadamente.</para> - </sect3> - - <sect3 id="porting-submitting"> - <title>Enviando un port</title> - - <para>Primero, asegúrate de haber leido la sección - <link linkend="porting-dads">Do's and Dont's</link>.</para> - - <para>Ahora que ya tienes tu port, solo queda incluirlo en la - colección de ports principal de FreeBSD y que todo el mundo - lo tenga a su alcance. No necesitamos tu directorio - <filename>work</filename> o el archivo de package - <filename>pkgname.tgz</filename>, así que bórralos - ahora. A continuación, simplemente incluye la salida de - <command>shar `find port_dir`</command> en un "bug report" y - envialo con el programa &man.send-pr.1; (mira en - <link linkend="contrib-general">Bug Reports y comentarios generales</link> para más información sobre &man.send-pr.1;. Si el port - descomprimido es mayor de 20Kb deberías comprimirlo en un - fichero tar y usar el comando &man.uuencode.1; antes de incluirlo en - el bug report. Clasifica el bug report en la categoría - <literal>ports</literal> y clase <literal>change-request</literal>. - No marques el port como <literal>confidencial</literal>!)</para> - - <para>Una vez más, <emphasis>no incluyas el código - fuente original, el directorio <filename>work</filename>, o el - package creado con <command>make package</command></emphasis>.</para> - - <note> - <para>En el pasado, te recomendabamos enviar el nuevo port a nuestro - servidor ftp (<hostid role="fqdn">ftp.freebsd.org</hostid>). Esto - ya no es recomendando ya que el permiso de lectura se ha desactivado - en el directorio <filename>incoming</filename> por la cantidad de - software pirata que se enviaba.</para> - </note> - - <para>Miraremos tu port, nos pondremos en contacto contigo si es - necesario y lo añadiremos en la colección principal. - Tu nombre aparecerá en la lista - “Additional FreeBSD contributors” en el Handbook de - FreeBSD y otros ficheros. ¿No es genial?!? <!-- smiley - -->:)</para> - </sect3> - </sect2> - - <sect2> - <title>Ports paso a paso</title> - - <para>Bién, así que no ha sido tan simple, y el port - ha necesitado algunas modificaciones para funcionar. En esta - sección, explicaremos, paso a paso, como modificarlo para - que pueda funcionar en el entorno de los ports.</para> - - <sect3> - <title>Cócomo funcionan las cosas</title> - - <para>Primero, esta es la secuencia de eventos que ocurren cuando - un usuario teclea <command>make</command> en el directorio de ports. - Si tienes otra ventana con el fichero <filename>bsd.port.mk</filename> - te resultará más sencillo entender todo el proceso.</para> - - <para>Pero no te preocupes si realmente no entiendes todo lo que - hace el fichero <filename>bsd.port.mk</filename>... no hay mucha gente - que realmente lo entienda... - <!-- smiley --><emphasis>:></emphasis></para> - - <procedure> - <step> - - <para>El objeto <maketarget>fetch</maketarget> es ejecutado. El - objeto <maketarget>fetch</maketarget> es el responsable de asegurar - que el tarball necesario existe localmente en el directorio - <makevar>DISTDIR</makevar>. Si <maketarget>fetch</maketarget> - no puede encontrar los ficheros requeridos en - <makevar>DISTDIR</makevar> localizará el URL de - <makevar>MASTER_SITES</makevar>, la cual existe en el Makefile, - al igual que en nuestro servidor principal ftp <ulink - URL="ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/">ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/</ulink>, - que usamos como servidor de backup. A continuación - intentará obtener el archivo de la distribución - con <makevar>FETCH</makevar>, asumiendo que el servidor de - origen tiene conexión directa a Internet. Si este paso - termina correctamente, grabará el archivo en - <makevar>DISTDIR</makevar> para su uso futuro.</para> - </step> - - <step> - <para>El objeto <maketarget>extract</maketarget> es ejecutado. - Busca el archivo de distribución del port - (normalmente un tarball comprimido con gzip) en - <makevar>DISTDIR</makevar> y lo descomprime en un sibdirectorio - temporal especificado por la variable <makevar>WRKDIR</makevar> - (normalmente <filename>work</filename>).</para> - </step> - - <step> - <para>Se ejecuta el objeto <maketarget>patch</maketarget>. Primero - se aplican todos los parches definidos en - <makevar>PATCHFILES</makevar>. A continuación, si no se - han encontrado parches en <makevar>PATCHDIR</makevar> (que por - defecto está definido como el subdirectorio - <filename>patches</filename>), son aplicados en orden - alfabético.</para> - </step> - - <step> - <para>Se ejecuta el objeto <maketarget>configure</maketarget>. - Este puede hacer cualquiera de las siguientes funciones.</para> - - <orderedlist> - <listitem> - <para>Si existe, se ejecuta - <filename>scripts/configure</filename>.</para> - </listitem> - - <listitem> - <para>Si <makevar>USE_IMAKE</makevar> está - definido, se ejecuta <makevar>XMKMF</makevar> (por - defecto: <command>xmkmf -a</command>).</para> - </listitem> - </orderedlist> - </step> - - <step> - <para>Se ejecuta el objeto <maketarget>build</maketarget>. Este es - responsable de descender por los directorios de trabajo privados - del port (<makevar>WRKSRC</makevar>) y compilarlos. Si se ha - definido <makevar>USE_GMAKE</makevar> se usa el comando - <command>make</command>, en caso contrario, se usará el - comando de sistema <command>make</command>.</para> - </step> - </procedure> - - <para>Las anteriores, son las acciones por defecto. Además, - puedes definir los objetos - <maketarget>pre-<replaceable>algo</replaceable></maketarget> o - <maketarget>post-<replaceable>something</replaceable></maketarget>, - o poner scripts con esos nombres. En el subdirectorio - <filename>scripts</filename>, y serán ejecutados antes o - después de las acciones por defecto.</para> - - <para>Por ejemplo, si tienes definido un objeto - <maketarget>post-extract</maketarget> en tu Makefile, y un fichero - <filename>pre-build</filename> en el subdirectorio - <filename>scripts</filename>, el objeto - <maketarget>post-extract</maketarget> será llamado después - de las acciones de extracción regulares, y el script - <filename>pre-build</filename> será ejecutado antes que las - reglas por defecto de compilación. Es recomendable que uses - objetos de <filename>Makefile</filename> en caso de que las acciones - a realizar sean suficientemente simples, ya que así - resultará mucho más sencillo saber que tipo de acciones - no regulares requiere el port.</para> - - <para>Las acciones por defecto son ejecutadas por los objetos - <maketarget>do-<replaceable>something</replaceable></maketarget> del - fichero <filename>bsd.port.mk</filename>. Por ejemplo, los mandatos - para extraer un port están en el objeto - <maketarget>do-extract</maketarget>. Si necesitas algo no incluido - en el objeto por defecto, puedes solucionarlo redefiniendo el objeto - <maketarget>do-<replaceable>something</replaceable></maketarget> en - tu <filename>Makefile</filename>.</para> - - <note> - <para>Los objetos “principales” (por ejemplo, - <maketarget>extract</maketarget>, - <maketarget>configure</maketarget>, etc.) no hacen nada más - que asegurar que se han completado todos los procesos y llamar a los - objetos o scripts reales, y no se espera que sean modificados. Si - quieres modificar la extracción, cambia el objeto - <maketarget>do-extract</maketarget>, pero nunca modifiques - el objeto <maketarget>extract</maketarget>!</para> - </note> - - <para>Ahora que entiendes lo que pasa cuando un usuario teclea - <command>make</command>, déjanos explicarte los pasos - recomendados para crear el port perfecto.</para> - </sect3> - - <sect3> - <title>Obteniendo los fuentes originales</title> - - <para>Obtén los fuentes originales (normalmente) en un - archivo comprimido - (<filename><replaceable>foo</replaceable>.tar.gz</filename> o - <filename><replaceable>foo</replaceable>.tar.Z</filename>) y copialo - en el directorio <makevar>DISTDIR</makevar>. Usa siempre dónde - y cuando puedas los fuentes procedentes del servidor - <emphasis>principal</emphasis> de la distribución.</para> - - <para>Si no puedes encontrar un servidor ftp/http con una buena - conexión a Internet, o sólo encuentras servidores - que tienen los fuentes en irritantes formatos no estándar, - puedes poner una copia funcional del archivo en un servidor ftp - o http bajo tu control (tu página personal, por ejemplo). - Asegúrate de usar el valor correcto en la variable - <makevar>MASTER_SITES</makevar> para que refleje tu elección. - </para> - - <para>Si no puedes encontrar ningún lugar en el que poner - el fichero de distribución (si eres committer de FreeBSD, - puedes ponerlo en el directorio <filename>public_html/</filename> - del servidor <hostid>freefall</hostid>), nosotros podemos - albergarlo en - <filename>ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/</filename> - como último recurso. Por favor, usa la variable - <makevar>MASTER_SITE_LOCAL</makevar> para referirte a este servidor y - subdirectorio. Envía un mail a &a.ports; si no estás - seguro de qué hacer.</para> - - <para>Si tu archivo de distribución cambia continuamente sin - una buena razón, considera poner el archivo en tu página - personal y listarlo como el primer <makevar>MASTER_SITES</makevar>. - Esto evitará que los usuarios obtengan errores del tipo - <errorname>checksum mismatch</errorname>, y también - reducirá la carga de trabajo de las personas que hacen el - mantenimiento de nuestro servidor FTP. De la misma manera, si existe un - solo servidor como distribuidor principal del programa, es - recomendable que albergues una copia de la distribución en - tu servidor y lo listes como segundo - <makevar>MASTER_SITES</makevar>.</para> - - <para>Si tu port requiere algunos parches adicionales que están - disponibles en Internet, bájalos y ponlos en - <makevar>DISTDIR</makevar>. No te preocupes si provienen de un - lugar diferente del que obtuviste el tarball principal, tenemos una - manera de solucionar este problema (consulta la descripción de - <link linkend="porting-patchfiles">PATCHFILES</link>).</para> - </sect3> - - <sect3> - <title>Modificando el port</title> - - <para>Descomprime una copia del tarball en un directorio privado y - haz todos los cambios necesarios para que el port compile en la - versión actual de FreeBSD. Mantén <emphasis>una lista - completa</emphasis> de todas las modificaciones que realizas para - poder automatizar el proceso. Todo, incluyendo borrar, añadir - o modificar ficheros debe poder hacerse de manera automática - usando un script o parche.</para> - - <para>Si tu port requiere una importante interacción o - personalización para compilar o instalar, puedes mirar la - clásica aplicación <application>Configure</application> - de Larry Wall y hacer algo así tu mismo. El objetivo de la - nueva colección de ports es hacer que cada port sea tan - “plug-and-play” como sea posible para el usuario final, - usando el mínimo espacio en disco posible.</para> - - <note> - <para>Aunque no se haya mencionado explícitamente, los - parches, scripts y otros archivos que hayas creado o contribuido - a la colección de ports de FreeBSD están cubiertos - por las condiciones estándar del copyright BSD.</para> - </note> - </sect3> - - <sect3> - <title>Parcheando</title> - - <para>En la preparación del port, los archivos que han sido - añdidos o modificados pueden recorrerse con un diff recursivo. - Cada serie de parches que quieras aplicar deben estar integrados en un - archivo llamado - <filename>patch-<replaceable>xx</replaceable></filename> donde - <replaceable>xx</replaceable> marca la secuencia en que los parches - serán aplicados — éstos se aplican en - <emphasis>órden alfabético</emphasis>, así - primero será <literal>aa</literal>, segundo - <literal>ab</literal> ,etc. Estos archivos deben estar en - <makevar>PATCHDIR</makevar>, desde donde serán - automáticamente aplicados. Todos los parches deben ser relativos - a <makevar>WRKSRC</makevar> (generalmente es el directorio en el que - se descomprime el port, siendo éste el lugar donde se compila). - Para hacer que la solución de problemas y actualizaciones sea - más sencilla, deberís evitar tener más de un - parche aplicable a un mismo archivo (por ejemplo, - <filename>patch-aa</filename> y <filename>patch-ab</filename> - modificando ambos al archivo - <filename><makevar>WRKSRC</makevar>/foobar.c</filename>).</para> - </sect3> - - <sect3> - <title>Configurando</title> - - <para>Incluye cualquier proceso de personalización adicional - en el script <filename>configure</filename> y guardalo en el - subdirectorio <filename>scripts</filename>. Como se ha mencionado - anteriormente, también puedes hacer esto como un objeto del - <filename>Makefile</filename> y/o un script con el nombre - <filename>pre-configure</filename> o - <filename>post-configure</filename>.</para> - </sect3> - - <sect3> - <title>Gestionando las entradas de usuario</title> - - <para>Si tu port requiere entradas por parte del usuario para la - compilación, configuración o instalación, - activa la variable <makevar>IS_INTERACTIVE</makevar> en tu - Makefile. Esto permitirá no compilar tu port si el usuario - usa la variable <envar>BATCH</envar> en su entorno (y si el usuario - activa la variable <envar>INTERACTIVE</envar>, entonces - <emphasis>sólo</emphasis> serán compilados los ports - que requieren interacción por parte del usuario).</para> - - <para>También es recomendable desactivar el script interactivo - si un número razonable de respuestas por defecto son - aplicables al port (consultar la variable - <makevar>PACKAGE_BUILDING</makevar>). Esto nos permitirá - compilar el package para los CD-ROMs y ftp.</para> - </sect3> - </sect2> - - <sect2> - <title>Configurando el Makefile</title> - - <para>Configurar el Makefile es bastante sencillo, y de nuevo, te - sugerimos que consultes los ejemplos existentes antes de empezar. - También hay un - <link linkend="porting-samplem">Makefile de ejemplo</link> en este - handbook, así que, consultalo y, por favor, sigue el órden - de las variables y secciones del ejemplo para que tu port sea más - fácil de leer para otras personas.</para> - - <para>Ahora, considera los siguientes problemas a medida que haces - el diseño de tu nuevo Makefile:</para> - - <sect3> - <title>Los fuentes originales</title> - - <para>Reside en <makevar>DISTDIR</makevar> como un tarball - estándar en formato gzip? Si es así puedes pasar al - siguiente paso. En caso contrario, deberías considerar la - posibilidad de sobreescribir alguna de las variables - <makevar>EXTRACT_CMD</makevar>, - <makevar>EXTRACT_BEFORE_ARGS</makevar>, - <makevar>EXTRACT_AFTER_ARGS</makevar>, - <makevar>EXTRACT_SUFX</makevar>, o <makevar>DISTFILES</makevar>, - dependiendo del formato del archivo de distribución del port. - (El caso más común es - <literal>EXTRACT_SUFX=.tar.Z</literal>, cuando el tarball está - comprimido con compress y no con gzip.)</para> - - <para>En el peor de los casos, puedes crearte tu propio objeto - <maketarget>do-extract</maketarget> para sobreescribir el objeto - por defecto.</para> - </sect3> - - <sect3> - <title><makevar>DISTNAME</makevar></title> - - <para>El valor de <makevar>DISTNAME</makevar> debe ser el nombre - base del port. Las reglas por defecto esperan que la lista de archivos - de la distribución (<makevar>DISTFILES</makevar>) se llame - <makevar>DISTNAME</makevar><makevar>EXTRACT_SUFX</makevar>, el cual, si - es un tarball normal, seráa algo como - <literal>foozolix-1.0.tar.gz</literal> para usar el valor - <literal>DISTNAME=foozolix-1.0</literal>.</para> - - <para>Las reglas por defecto también esperan extraer el - tarball en un subdirectorio llamado - <filename>work/<makevar>DISTNAME</makevar></filename>, por ejemplo - <filename>work/foozolix-1.0/</filename>.</para> - - <para>Todos estos valores pueden sobreescribirse; simplemente muestran - los valores más habituales. Para un port que requiera - múltiples archivos de distribución, simplemente usa - explícitamente <makevar>DISTFILES</makevar>. Si solo una parte - de los <makevar>DISTFILES</makevar> son archivos extraibles, entonces - usa <makevar>EXTRACT_ONLY</makevar> para referenciarlos, lo que - sobreescribirá la lista <makevar>DISTFILES</makevar> - cuando realice la extracción, y el resto de archivos se - dejarán en <makevar>DISTDIR</makevar> tal y como están - para su uso posterior.</para> - - </sect3> - - <sect3> - <title><makevar>PKGNAME</makevar></title> - - <para>Si <makevar>DISTNAME</makevar> no sigue las <link - linkend="porting-pkgname">normas de nombre</link> para un package, - deberís asignar a la variable <makevar>PKGNAME</makevar> un valor - más correcto.</para> - </sect3> - - <sect3> - <title><makevar>CATEGORIES</makevar></title> - - <para>Cuando se crea un package, se incluye en el directorio - <filename>/usr/ports/packages/All</filename> creandose links desde uno - o más subdirectorios de <filename>/usr/ports/packages</filename>. - Los nombres de estos subdirectorios están especificados por la - variable <makevar>CATEGORIES</makevar>. Se utiliza para facilitar al - usuario la orientación dentro de la colección de ports y - packages. Por favor, consulta las <link - linkend="porting-categories">categorías</link> existentes y - elige las que sean aplicables a tu port.</para> - - <para>Esta lista también determina en que lugar del árbol - de ports se importa el port. Si especificas más de una - categoría, se asume que los archivos del port estarán en - el subdirectorio con el nombre en la primera categoría. - Consulta la sección <link - linkend="porting-categories">categorías</link> para saber como - escoger la catergoría adecuada.</para> - - <para>Si tu port pertenece realmente a una categorín - inexistente, puedes crear una nueva. En este caso, por favor, - envía un mail a &a.ports; para proponer una nueva - categoría.</para> - - <note> - <para>No hay chequeo de error para los nombres de categorías. - <command>make package</command> creará un nuevo directorio - si tecleas mal el nombre de la categorí, así que - se cuidadoso!</para> - </note> - </sect3> - - <sect3> - <title><makevar>MASTER_SITES</makevar></title> - - <para>Guarda la parte del directorio del URL -ftp/hhtp que apunta al - tarball original en <makevar>MASTER_SITES</makevar>. No olvidar la - barra final (<filename>/</filename>)!</para> - - <para>Las macros <command>make</command> intentaran usar esta - especificación para obtener el archivo de distribución - con <makevar>FETCH</makevar> si no lo pueden encontrar en el sistema.</para> - - <para>Se recomienda poner diferentes servidores en la lista, preferiblemente - de continentes diferentes. Esto protegerá de posibles problemas de red - en grandes áreas, y se está pensando en la posibilidad de - añadir soporte para determinar automáticamente el servidor - principal más cercano para obtener el archivo desde él.</para> - - <para>Si el tarball original forma parte de uno de estos servidores populares: - X-contrib, GNU, Perl CPAN, TeX CTAN o Linux Sunsite, se debe hacer referencia - a estos servidores usando - <makevar>MASTER_SITE_XCONTRIB</makevar>, - <makevar>MASTER_SITE_GNU</makevar>, - <makevar>MASTER_SITE_PERL_CPAN</makevar>, - <makevar>MASTER_SITE_TEX_CTAN</makevar>, y - <makevar>MASTER_SITE_SUNSITE</makevar>. Simplemente poner - <makevar>MASTER_SITE_SUBDIR</makevar> al path interno del servidor. Aquí - hay un ejemplo:</para> - - <programlisting> -MASTER_SITES= ${MASTER_SITE_XCONTRIB} -MASTER_SITE_SUBDIR= applications - </programlisting> - - <para>El usuario también puede usar las variables - <makevar>MASTER_SITE_*</makevar> en el archivo <filename>/etc/make.conf</filename> - para sobreescribir nuestras selecciones, y usar en su lugar el mirror que - prefiera de estos servidores.</para> - </sect3> - - <sect3 id="porting-patchfiles"> - <title><makevar>PATCHFILES</makevar></title> - - <para>Si el port requiere parches adicionales que están disponibles - por ftp o http, poner <makevar>PATCHFILES</makevar> a los nombres de archivos - y <makevar>PATCH_SITES</makevar> a la URL del directorio que los contiene - (el formato es el mismo que en <makevar>MASTER_SITES</makevar>).</para> - - <para>Si el parche no es relativo a la raíz del árbol - (<makevar>WKRSRC</makevar>) porque contiene alguna información extra - sobre paths, usar la variable <makevar>PATCH_DIST_STRIP</makevar>. Por ejemplo, - si todos los path del parche contienen <literal>foozolix-1.0/</literal> - delante del nombre de archivo, usar <literal>PATCH_DIST_STRIP=-p1</literal>.</para> - - <para>No preocuparse si los parches están comprimidos, serán - descomprimidos automáticamente si el nombre de archivo termina en - <filename>.gz</filename> o <filename>.Z</filename>.</para> - - <para>Si el parche se distribuye con otros archivos, como documentación, en - un tarball gzip, no se puede usar <makevar>PATCHFILES</makevar>. Si este es el caso, - añadir el nombre y situación del tarball a <makevar>DISTFILES</makevar> - y <makevar>MASTER_SITES</makevar>. A continuación, desde el objeto - <maketarget>pre-patch</maketarget>, aplicar el parche ejecutando mandato - <command>patch</command> desde él, el copiando al archivo del parche en - el directorio <makevar>PATCHDIR</makevar> llamandolo - <filename>patch-<replaceable>xx</replaceable></filename>.</para> - - <note> - <para>Tener en cuenta que el tarball será extraido del fuente regular, - por lo que no es necesario extraerlo explícitamente si es un tarball - comprimido con gzip o compress. Si se hace lo último, tener cuidado de - no sobreescribir algo ya existente en ese directorio. No olvidarse de añadir - un mandato para borrar el parche copiado en el objeto - <maketarget>pre-clean</maketarget></para> - </note> - </sect3> - - <sect3> - <title><makevar>MAINTAINER</makevar></title> - - <para>Poner aquí la dirección de mail. Por favor. <!-- smiley - --><emphasis>:)</emphasis></para> - - <para>Para una descripción detallada de la responsabilidad de los - "maintainers", consultar la sección - <link linkend="policies-maintainer">MAINTAINER en Makefiles</link>.</para> - </sect3> - - <sect3> - <title>Dependencias</title> - - <para>Muchos ports dependen de otros. Hay cinco variables que se pueden usar para - asegurar que existen todos los requerimientos necesarios en la máquina - del usuario. También hay algunas variables de dependencia pre-soportadas - para casos comunes, mas algunos controles de dependencia.</para> - - <sect4> - <title><makevar>LIB_DEPENDS</makevar></title> - - <para>Esta variable especifica las librerías compartidas de las que - depende el port. Es una lista de registros de - <replaceable>lib</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional> - donde <replaceable>lib</replaceable> es el nombre de la librerí - compartida, y <replaceable>dir</replaceable> es el directorio en el cual encontrarla - en caso de no estar disponible y <replaceable>target</replaceable> es el objeto a - llamar en ese directorio. Por ejemplo, - <programlisting> LIB_DEPENDS=jpeg.9:${PORTSDIR}/graphics/jpeg:install</programlisting> - comprobará la existencia de la librería jpeg versión 9, - descendiendo al subdirectorio <filename>graphics/jpeg</filename> de la colección - de ports para compilarlo e instalarlo en caso de que no sea encontrado en el - sistema. El objeto <replaceable>target</replaceable> puede omitirse si es igual a - <makevar>DEPENDS_TARGET</makevar> (el cual, por defecto, tiene el valor - <literal>install</literal>).</para> - - <note> - <para>La parte <replaceable>lib</replaceable> es un argumento dado a - <command>ldconfig -r | grep -wF</command>. Es posible que no existan - expresiones regulares en esta variable.</para> - </note> - - <para>La dependencia se comprueba dos veces, una durante la ejecución de - <maketarget>extract</maketarget> y otra durante la ejecución de - <maketarget>install</maketarget>. También, se incluye el nombre de la - dependencia en el package, de manera que <command>pkg_add</command> - la instale automáticamente si no está en el sistema del usuario.</para> - </sect4> - - <sect4> - <title><makevar>RUN_DEPENDS</makevar></title> - - <para>Esta variable especifica ejecutables o archivos de los que depende la - compilació y/o ejecución de este port. Es una lista de tuples - <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional> - donde <replaceable>path</replaceable> es el nombre del ejecutable o archivo, - <replaceable>dir</replaceable> es el directorio en el que encontrarlo en caso - de no estar disponible y <replaceable>target</replaceable> es el objeto a llamar - en ese directorio. Si <replaceable>path</replaceable> empieza con una barra - (<literal>/</literal>), se trata como un archivo comprobando su existencia con - <command>test -e</command>; en caso contrario, se asume que es un ejecutable, y - se usa <command>which -s</command> para determinar si el programa existe en el - path del usuario.</para> - - <para>Por ejemplo,</para> - - <programlisting> -RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \ - wish8.0:${PORTSDIR}/x11-toolkits/tk80</programlisting> - - <para>comprobará si existe el directorio o archivo - <filename>/usr/local/etc/innd</filename>, compilando e instalandolo desde - el directorio <filename>news/inn</filename> del árbol de ports en - caso de no existir. También se comprueba la existencia del - ejecutable <command>wish8.0</command> en el path, descendiendo al subdirectorio - <filename>x11-toolkits/tk80</filename> de los ports para compilarlo e - instalarlo si no existe.</para> - - <note> - <para>En este caso, <command>innd</command> es un ejecutable; si un ejecutable - está situado en un lugar diferente al esperado (fuera del path), es - necesario incluir el path completo.</para> - </note> - - <para>La dependencia se comprueba desde el objeto <maketarget>install</maketarget>. - El nombre de la dependencia también es incluido en el package para que - <command>pkg_add</command> lo instale automáticamente si no existe en el - sistema del usuario. La parte <replaceable>target</replaceable> puede omitirse si - es el mismo <makevar>DEPENDS_TARGET</makevar>.</para> - </sect4> - - <sect4> - <title><makevar>BUILD_DEPENDS</makevar></title> - - <para>Esta variable especifica los ejecutables o archivos que este port necesita - para compilar. Igual que <makevar>RUN_DEPENDS</makevar>, es una lista de tuples - <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>. - Por ejemplo, <programlisting> BUILD_DEPENDS= - unzip:${PORTSDIR}/archivers/unzip</programlisting> comprobará la existencia de - un ejecutable llamado <command>unzip</command>, descendiendo al subdirectorio - <filename>archivers/unzip</filename> en caso de no existir, para compilarlo e - instalarlo.</para> - - <note> - <para>Compilación en este caso, se refiere a todo el proceso; desde la - extracción hasta la compilación final. La dependencia se comprueba - en el objeto <maketarget>extract</maketarget>. La parte - <replaceable>target</replaceable> puede omitirse si la misma que - <makevar>DEPENDS_TARGET</makevar></para> - </note> - </sect4> - - <sect4> - <title><makevar>FETCH_DEPENDS</makevar></title> - - <para>Esta variable especifica ejecutables o archivos que se requieren para obtener - este port. Como los dos anteriores, es una lista de tuples - <replaceable>path</replaceable>:<replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>. - Por ejemplo, <programlisting> FETCH_DEPENDS= - ncftp2:${PORTSDIR}/net/ncftp2</programlisting> comprobará la existencia de un - ejecutable llamado <command>ncftp2</command>, descendiendo al subdirectorio - <filename>net/ncftp2</filename> de los ports para compilarlo e instalarlo en caso de - no existir.</para> - - <para>La dependencia es comprobada en el objeto <maketarget>fetch</maketarget>. - La parte <replaceable>target</replaceable> puede omitirse si es la misma que - <makevar>DEPENDS_TARGET</makevar>.</para> - </sect4> - - <sect4> - <title><makevar>DEPENDS</makevar></title> - - <para>Si hay una dependencia que no se puede incluir en las cuatro categorías - anteriores, o el port necesita tener extraidos los fuentes de otro port para poder - ser instalado, usar esta variable. Esta es una lista compuesta de - <replaceable>dir</replaceable><optional><replaceable>:target</replaceable></optional>, - ya que no no hay nada que comprobar, al contrario que las cuatro anteriores. La parte - <replaceable>target</replaceable> puede omitirse si es la misma que - <makevar>DEPENDS_TARGET</makevar>.</para> - </sect4> - - <sect4> - <title>Variables de dependencia comunes</title> - - <para>Definir <literal>USE_XLIB=yes</literal> si el port requiere la instalación - del sistema X Window (implícito en <makevar>USE_IMAKE</makevar>). Definir - <literal>USE_GMAKE=yes</literal> si el port requiere el <command>make</command> de - GNU en lugar del <command>make</command> de BSD. Definir <literal>USE_AUTOCONF=yes</literal> - si el port requiere la ejecución del autoconf de GNU. Definir - <literal>USE_QT=yes</literal> si el port usa el último kit qt. Usar - <literal>USE_PERL5=yes</literal> si el port requiere la versión 5 del - lenguaje perl. (Este último es especialmente importante ya que unas versiones - de FreeBSD contienen perl5 como parte del sistema y otras no.)</para> - </sect4> - - <sect4> - <title>Notas sobre dependencias</title> - - <para>Cómo se ha mencionado anteriormente, el objeto por defecto a llamar cuando - se require una dependencia es <maketarget>DEPENDS_TARGET</maketarget>. Por defecto es - <literal>install</literal>. Esta es una variable de usuario; nunca se define en los - <filename>Makefile</filename> de los ports. Si un port necesita gestionar las - dependencias de manera especial, usar la parte <literal>:target</literal> de las - variables <makevar>*_DEPENDS</makevar> en lugar de redefinir - <makevar>DEPENDS_TARGET</makevar>.</para> - - <para>Cuando se ejecuta <command>make clean</command>, sus dependencias también - son "limpiadas". Si se quiere evitar esto, hay que definir la variable - <makevar>NOCLEANDEPENDS</makevar> en el entorno.</para> - - <para>Para depender incondicionalmente de un port, es imprescindible usar la cadena de - texto <literal>nonexistent</literal> como primer campo de - <makevar>BUILD_DEPENDS</makevar> o <makevar>RUN_DEPENDS</makevar>. Usar esto sólo - cuando es necesario disponer del código fuente de otro port. Se puede ahorrar - tiempo de compilación especificando el objeto. Por ejemplo: - - <programlisting> -BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract</programlisting> - - siempre descenderá al port JPEG y lo extraerá.</para> - - <para>No usar <makevar>DEPENDS</makevar> a no ser que no exista otra manera de obtener - los resultados deseados. Hará que el otro port siempre sea compilado (e - instalado, por defecto), y la dependencia sea añadia al package. Si esto es lo - que realmente se necesita, es recomendable usar <literal>BUILD_DEPENDS</literal> - y <literal>RUN_DEPENDS</literal>.</para> - </sect4> - </sect3> - - <sect3> - <title>Mecanismos de creación</title> - - <para>Si el package usa GNU <command>make</command>, definir - <literal>USE_GMAKE=yes</literal>. Si el package usa <command>configure</command>, - definir <literal>HAS_CONFIGURE=yes</literal>. Si el package usa GNU - <command>configure</command>, definir <literal>GNU_CONFIGURE=yes</literal> (esto - implica <literal>HAS_CONFIGURE</literal>). Si se quieren pasar argumentos extra a - <command>configure</command> (el argumento por defecto es - <literal>--prefix=${PREFIX}</literal> para GNU - <command>configure</command> y vacío para no GNU - <command>configure</command>), definir los argumentos extra en - <makevar>CONFIGURE_ARGS</makevar>. Si el package usa GNU - <command>autoconf</command>, definir <literal>USE_AUTOCONF=yes</literal>. Esto - implica <makevar>GNU_CONFIGURE</makevar>, y causará la ejecución de - <command>autoconf</command> antes que <command>configure</command>.</para> - - <para>Si el package es una aplicación X que crea archivos - <filename>Makefile</filename>s desde <filename>Imakefile</filename>s - usando <command>imake</command>, definir <literal>USE_IMAKE=yes</literal>. Esto - hará que durante el proceso de configuración se ejecute el - mandato <command>xmkmf -a</command>. Si el argumento <option>-a</option> es - problemático para el port, definir <literal>XMKMF=xmkmf</literal>. Si el - port usa el mandato <command>imake</command> pero no entiende el objeto - <maketarget>install.man</maketarget>, definir - <literal>NO_INSTALL_MANPAGES=yes</literal>.</para> - - <para>Si el código fuente incluido en el <filename>Makefile</filename> del - port tiene algo más que el objeto <maketarget>all</maketarget> como - objeto principal de creación, definir <makevar>ALL_TARGET</makevar> - correctamente. Hacer lo mismo con <maketarget>install</maketarget> y - <makevar>INSTALL_TARGET</makevar>.</para> - </sect3> - </sect2> - - <sect2> - <title>Consideraciones especiales</title> - - <para>Hay más cosas a tener en cuenta a la hora de crear un port. Esta - sección explica las más comunes.</para> - - <sect3 id="porting-ldconfig"> - <title><command>ldconfig</command></title> - - <para>Si el port instala una librería compartida, añadir un objeto - <maketarget>post-install</maketarget> al <filename>Makefile</filename> para - que ejecute <literal>${LDCONFIG} -m</literal> en el directorio donde - se ha instalado la nueva librería (normalmente - <filename><makevar>PREFIX</makevar>/lib</filename>) para registrarla en el - caché de librerías compartido.</para> - - <para>También, añadir un par - <literal>@exec /sbin/ldconfig -m</literal> y - <literal>@unexec /sbin/ldconfig -R</literal> al archivo <filename>pkg/PLIST</filename> - para que el usuario que ha instalado el port pueda usar la librería compartida - inmediatamente. Estas líneas deben estar inmediatamente después de la - línea de la propia librería compartida, como en:</para> - - <programlisting> -lib/libtvl80.so.1 -@exec /sbin/ldconfig -m %D/lib -@unexec /sbin/ldconfig -R</programlisting> - - <para>Nunca, nunca, <emphasis>nunca</emphasis> añadir una línea - que ponga <literal>ldconfig</literal> sin argumentos en el - <filename>Makefile</filename> o <filename>pkg/PLIST</filename>. Esto hará - que el caché de librerías compartidas se resetee sólo con - los contenidos de <filename>/usr/lib</filename>, probablemente, dejando el sistema - inestable ("Ayuda, xinit no ha vuelto a funcionar desde que instalé este - port"). Cualquiera que haga esto, será troceado en 65.536 partes con un - cuchillo poco afilado, permaneciendo por toda la eterniadad en lo más - profundo del infierno (y no necesariamente en este órden)</para> - </sect3> - </sect2> - - <sect2> - <title>Soporte ELF</title> - - <para>Desde la transición de FreeBSD a formato ELF después de la - version 3.0-RELEASE, fue necesario convertir muchos ports para que generasen - librerías compartidas en formato ELF. Para complicar más el - trabajo, los sistemas 3.0 pueden ejecutar ELF y a.out, y se quiere mantener, - etraoficialmente, tanto como sea posible, el soporte para versiones 2.2. A - continuación se explica como convertir ports que sólo soportan - a.out para que soporten compilaciones a.out y ELF.</para> - - <para>Una parte de esta lista sólo es aplicable durante la conversión, - pero se mantendrá durante un tiempo como referencia en caso de querer - actualizar algún port antiguo.</para> - - <sect3> - <title>Mover las librerías a.out</title> - - <para>Las librerías a.out deben moverse de <filename>/usr/local/lib</filename> - y similares a un subdirectorio <filename>aout</filename>. (Si no se mueven, los - ports ELF sobreescribirán las librerías a.out). El objeto - <maketarget>move-aout-libs</maketarget> del archivo - <filename>src/Makefile</filename> en 3.0-CURRENT (llamado desde - <maketarget>aout-to-elf</maketarget>) hará este paso en nuestro lugar. - Sólo moverá las librerías a.out en los directorios - estándar.</para> - </sect3> - - <sect3> - <title>Formato</title> - - <para>La colección de ports compilará los packages en el mismo - formato en el que esté la máquina. Esto significa a.out para - 2.2 y a.out o ELF para 3.0 dependiendo de lo que devuelva la variable - <command>`objformat`</command>. De la misma manera, una vez se mueven las - librerías a un subdirectorio, ya no será posible compilar - librerías a.out.</para> - - <note> - <para>Si un port sólo funciona para a.out, definir - <makevar>BROKEN_ELF</makevar>. Estos ports serán pasados por alto - durante la compilación en sistemas ELF.</para> - </note> - </sect3> - - <sect3> - <title><makevar>PORTOBJFORMAT</makevar></title> - - <para><filename>bsd.port.mk</filename> definirá - <makevar>PORTOBJFORMAT</makevar> a <literal>aout</literal> o - <literal>elf</literal> y lo exportará en las variables de - entorno <envar>CONFIGURE_ENV</envar>, <envar>SCRIPTS_ENV</envar> y - <envar>MAKE_ENV</envar>. (Siempre será - <literal>aout</literal> en 2.2-STABLE). También se pasa a - <maketarget>PLIST_SUB</maketarget> como - <literal>PORTOBJFORMAT=${PORTOBJFORMAT}</literal>. (Consultar los comentarios - sobre <literal>ldconfig</literal> de las líneas anteriores).</para> - - <para>La variable se defina usando esta línea en - <filename>bsd.port.mk</filename>:</para> - - <programlisting> -PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aout</programlisting> - - <para>Los procesos de compilación de los ports deberían usar esta - variable para decidir que hacer. De todas maneras, si el script - <filename>configure</filename> del port detecta automáticamente un sistema - ELF, no es necesario hacer referencia a <makevar>PORTOBJFORMAT</makevar>.</para> - </sect3> - - -</sect2> -</sect1> - -<sect1 id="porting-pkgname"> - <title>pkgname</title> - <para>a</para> -</sect1> - -<sect1 id="contrib-general"> - <title>pkgname</title> - <para>a</para> -</sect1> - -<sect1 id="porting-cleaning"> - <title>pkgname</title> - <para>a</para> -</sect1> - -<sect1 id="porting-samplem"> - <title>pkgname</title> - <para>a</para> -</sect1> - -<sect1 id="porting-dads"> - <title>pkgname</title> - <para>a</para> -</sect1> - -<sect1 id="porting-categories"> - <title>pkgname</title> - <para>a</para> -</sect1> - -</chapter> - -<!-- - Local Variables: - mode: sgml - sgml-declaration: "../chapter.decl" - sgml-indent-data: t - sgml-omittag: nil - sgml-always-quote-attributes: t - sgml-parent-document: ("../handbook.sgml" "part" "chapter") - End: ---> |