[OpenBSD]

Notas sobre los portes de OpenBSD

En este documento se describe cómo crear o cómo actualizar un porte. Es una lista útil para recordar qué cosas se deben hacer. No es exacta ni perfecta. Cualquier comentario o pregunta al respecto debe dirigirse a <ports@openbsd.org>.


  1. Si quiere ser un mantenedor, subscríbase a la lista ports@openbsd.org.
  2. Ser el mantenedor de un porte es algo más que limitarse a entregar portes al árbol de CVS. También hay que mantenerlos actualizados, y contestar dudas sobre éstos.

  3. Obtenga una copia del árbol de portes del cvs. Puede encontrar las instrucciones sobre cómo hacerlo en la página de CVS anónimo.

  4. Escoja una ubicación en donde poner su porte, y cree una infraestructura básica ahí. Use la plantilla de Makefile que encontrará en /usr/ports/infrastructure/templates/Makefile.template. NEED_VERSION está obsoleto y no debe usarse en los nuevos portes. Los mantenedores de portes deberían actualizar su árbol de portes, incluido bsd.port.mk.
  5. Añada las porciones con "fetch" del fichero Makefile.

    Existen opciones y herramientas disponibles para portes más complejos:


  6. Cree una suma de comprobación en distinfo mediante make makesum, y verifique que la suma de comprobación es correcta mediante make checksum.
  7. Extraiga el porte con make extract. Preste atención a la ubicación de la base de los fuentes, que suele ser w-${PKGNAME}${FLAVOR_EXT}/${DISTNAME}. Es probable que tenga que modificar la variable WRKDIST del fichero Makefile si es distinta.

  8. Lea la documentación sobre la instalación y se dará cuenta de lo que debe hacer para construir el porte y de cualquier opción especial que pueda ser necesaria.

  9. Ahora es un buen momento para pensar en qué tipo de restricciones en la licencia se han aplicado a su porte. Muchos serán de libre redistribución, pero muchos otros no. Necesitamos la respuesta a cuatro preguntas para poder distribuir los portes como es debido. Estas respuestas son los valores PERMIT_* en el fichero Makefile.

    Configure esos valores con Yes si está permitido, o a una cadena de comentarios que explique porqué no está permitido. Preste atención a cualquier condición especial que pueda tener que cumplir más tarde. Por ejemplo, algunos portes requieren que se instale una copia de la licencia que los acompaña. Le recomendamos que ponga la licencia en /usr/local/share/DISTNAME/.

    Además de los values PERMIT_*, coloca un marcador de licencia como # Licencia arriba de ellos como comentario, de esta manera sabemos por qué los valores PERMIT_* están establecidos como están.

  10. Añada las opciones de configuración al fichero Makefile y/o genere el guión de configuración.
  11. Intente construir el porte con make build.
  12. Empiece un ciclo de make build, genere un parche (o use make update-patches), y make clean patch.
  13. Intente activar SEPARATE_BUILD.

  14. Lea detenidamente la salida (si es que produce alguna) y retoque cualquier opción necesaria en el fichero Makefile. Para repetir, invoque la orden `make clean configure'.

    Nota: asegúrese de que los ficheros dependientes del anfitrión van a /etc o /etc/<nombre>, pero NUNCA SUBSTITUYA O MODIFIQUE ficheros que existan en /etc. Es mejor poner install en /usr/local/share/<nombre> y que los copie a /etc o /etc/<nombre>, sólo si los ficheros no existen. Si los ficheros existen, muestre un mensaje que indique que tal y tal fichero necesita ser modificado. Esto también garantiza que los ficheros sean incluidos en el paquete, ya que todo lo que haya en /usr/local se incluye en PLIST. Después de que un paquete haya sido instalado, se mostrará el contenido de pkg/MESSAGE, si es que existe.

    Las ubicaciones de los ficheros de OpenBSD son:

       ejecutables del usuario:		/usr/local/bin
       ejecutables del adminstrador:	/usr/local/sbin
       ejecutables por programas:		/usr/local/libexec
       bibliotecas:				/usr/local/lib
       datos dep. arquitectura:		/usr/local/lib/<nombre>
       ficheros include instalados:		/usr/local/include o
    					/usr/local/include/<nombre>
       datos de máqina
       únicos:	       			/etc o /etc/<nombre>
       estado local:			/var/run
       ficheros de
       puntuación de juegos:		/var/games
       ficheros GNU info:			/usr/local/info
       páginas del manual:			/usr/local/man/...
       sólo lectura indep. 
       arquitectura:			/usr/local/share/<nombre>
       documentación 
       miscelánea:				/usr/local/share/doc/<nombre>
       archivos de ejemplo:				/usr/local/share/examples/<name>
    
  15. Empiece un ciclo de makes hasta que el porte esté listo. Use Patch (ver arriba), clean, y make hasta generar el porte. Líbrese de todos los avisos si es posible, especialmente de los avisos relacionados con la seguridad.

  16. Controle la semántica de SEPARATE_BUILD. Debe hacerlo sólo si el porte se compila con SEPARATE_BUILD definido. Lo ideal sería que el porte no modificara ningún fichero en ${WRKSRC} después de make patch. Puede comprobarlo asegurándose de que usted no tenga acceso de escritura a ${WRKSRC}. Entonces puede configurar SEPARATE_BUILD=concurrent... alguien podría usar el mismo árbol de fuentes para compilarlo en arquitecturas diferentes de forma simultánea. De otro modo, configure SEPARATE_BUILD=simple... compilar en distintas arquitecturas de forma simultánea puede acarrear problemas, ya que muchos ficheros de fuentes pueden ser regenerados en momentos difíciles.

  17. Añada COMMENT en el fichero Makefile. COMMENT es una CORTA descripción en una línea del porte (60 caracteres máximo). NO incluya el nombre del paquete (o el número de la versión del software) en el comentario. NO lo empiece con mayúscula a menos que tenga un significado semántico, y NO lo termine con un punto. NI SIQUIERA EMPIECE CON UN ARTÍCULO INDETERMINADO COMO "a" o "an" (inglés, por supuesto); elimine el artículo del todo.

  18. Edite pkg/DESCR, pkg/PLIST.
  19. Si la aplicación necesita crear un usuario o un grupo, hay que escoger el id de menor rango de /usr/ports/infrastructure/db/user.list para que lo use el porte y asegurarse de que el porte se añade a este fichero en el momento de la entrega por cvs.

  20. Instale la aplicación con make install. Si el porte instala bibliotecas dinámicas, compruebe sus tablas de símbolos con nm, ya que algún software equivocado quita las bibliotecas dinámicas, lo que puede conllevar fallos extraños más tarde. Por otra parte, los binarios ejecutables DEBERÍAN ser eliminados; se puede usar file para determinar cuáles. Si el porte ya incluyera código para eliminar los binarios (o sea, el objetivo install-strip), utilílicelo; en caso contrario, debe incluirlo en el fichero Makefile.

  21. Verifique los agujeros de seguridad del porte otra vez. Esto es especialmente importante para programas de red y setuid. Lea nuestras recomendaciones de seguridad. Registre en el fichero pkg/SECURITY todo aquello que pueda ser interesante y las soluciones. Este fichero debe ser una lista de problemas potenciales auditados, junto con parches importantes, de modo que otra persona pueda ver a primera vista lo que se ha hecho. Por ejemplo:
     
          $OpenBSD$
    
          ${WRKDIR}/receiver.c
             call to mktemp (wrapper function do_mktemp) does seem to be correct.
    
          The server makes extensive use of strlcpy/strlcat/snprintf.
    
  22. Cree el fichero pkg/PLIST. Después de que la instalación se haya completado use la orden de desarrollador make plist, que compila el fichero PLIST en el directorio pkg. Este fichero es un candidato a la lista de paquetes.

    ¡Atento! Los ficheros se encuentran por la marca de tiempo (timestamp). Esto significa que NO DEBE:

    Lea detenidamente PLIST y verifique que se haya instalado todo, y que la instalación haya tenido lugar en las ubicaciones pertinentes. Se puede añadir cualquier parte que no se haya instalado a una regla `post-install' en el fichero Makefile del porte.

    Los portes que instalen bibliotecas compartidas tendrán otro fichero llamado PFRAG.shared.


  23. Siga desinstalando y reinstalando hasta que esté perfecto. Perfecto es cuando todo instala y desinstala en su ubicación correcta. Para desinstalar se usa la orden 'pkg_delete' <nombre_paquete>'. Para reinstalar se usa la orden 'sudo make reinstall'. Lea la página de manual de pkg_create(1) para ver otras órdenes que se pueden añadir a PLIST para asegurarse de que está todo limpio. Después de una desinstalación, la orden
        find /usr/local -newer w-${PKGNAME}${FLAVOR_EXT}/fake-${MACHINE_ARCH}[-${FLAVOR}]/.install_started -print
        
    debería mostrar sólo la lista de nombre de directorios típicos.

  24. Pruebe el paquete. Después de que el porte haya instalado correctamente, use la orden make package para crear un paquete. Para probar el paquete, primero use pkg_delete y a continuación pkg_add. Los resultados después de pkg_add deberían ser EXACTAMENTE los mismos que los resultados después de make install.

  25. Envíe una breve nota a ports@openbsd.org para pedir comentarios y pruebas. Adjunte el porte a este mensaje y envíelo.

    Intente que otros usuarios lo prueben en varias plataformas.


  26. Incorpore cualquier información que reciba. Pruébelo de nuevo en su plataforma. Consiga que quienes le enviaron información sobre la primera prueba, vuelvan a probar el nuevo porte.

  27. Finalmente, inclúyalo en el árbol de portes. Si no tiene acceso al CVS, pida a alguien en ports@openbsd.org que haga la entrega.

  28. Si es un desarrollador con acceso a CVS, entréguelo Vd. mismo. Generalmente usamos "import" para un porte nuevo, en lugar de usar "add" para cada uno de tropecientos (o una docena) ficheros. "import" usa números de versión "vendor branch" como 1.1.1.1, pero no se preocupe por eso. Si efectúa cambios a un fichero específico (editar y entregar por cvs), será 1.2 y se usará ese número.

    De un modo breve, "cvs import" se suele usar cuando un se crea un porte. A partir de ahí se suele usar "cvs add" y "cvs rm" para añadir o eliminar ficheros individuales, y el ciclo normal editar->entregar para los cambios. Puede usar algo como esto:

    $ cd kaffe1
    $ make clean	# ¡en realidad no querrá 
                    # comprobar todo el trabajo!
    $ cvs -d cvs.openbsd.org:/cvs import -m 'kaffe port' ports/lang/kaffe1 \
    	SuNombre SuNombre_YYYY-MMM-DD
    

    A modo de ejemplo real, he aquí la salida de la comprobación del porte Kaffe1, que uno de nosotros hizo el 8 de septiembre de 1.998:

    $ cd kaffe1
    $ make clean >/dev/null
    $ cvs import -m 'kaffe1.0(==JDK1.1) port' ports/lang/kaffe1 ian ian_1998-Sep-08
    ian@cvs.openbsd.org's password: (lógicamente no se muestra)
    I ports/lang/kaffe1/CVS
    I ports/lang/kaffe1/files/CVS
    I ports/lang/kaffe1/pkg/CVS
    N ports/lang/kaffe1/Makefile
    cvs server: Importing /cvs/ports/lang/kaffe1/files
    N ports/lang/kaffe1/files/md5
    cvs server: Importing /cvs/ports/lang/kaffe1/pkg
    N ports/lang/kaffe1/pkg/COMMENT
    N ports/lang/kaffe1/pkg/DESCR
    N ports/lang/kaffe1/pkg/PLIST
    
    No conflicts created by this import
    $ 
    
  29. Por último, añada una entrada de una línea para el nuevo porte en el fichero Makefile de su directorio de primer nivel; por ejemplo, para ports/lang/kaffe1, añádala en ports/lang/Makefile.

  30. ¡Mantenga el porte! Según pase el tiempo pueden surgir problemas, o pueden aparecer nuevas versiones del software. Debe intentar mantener su porte actualizado: en otras palabras, «probar, comprobar, verificar, probar, ...»

  31. Cuando actualice un porte, recuerde gestionar las dependencias. No debe dejar que ningún otro porte que dependa del suyo pueda quedar «roto». En caso de que surjan problemas, comuníquese con los mantenedores de estos portes. Asimismo, esté atento a las actualizaciones de otros portes de los que pueda depender el suyo, y compruebe que el mantenedor haya hecho bien su trabajo.
¡Gracias por su apoyo el proceso de portes de OpenBSD!
Porting www@openbsd.org
Originally [OpenBSD: checklist.html,v 1.59 ]
$Translation: checklist.html,v 1.30 2004/09/06 15:12:23 santana Exp $
$OpenBSD: checklist.html,v 1.30 2004/09/06 16:51:03 saad Exp $