[OpenBSD]

Points à vérifier pour chaque portage logiciel sous OpenBSD

Ce document décrit comment concevoir ou mettre à jour un "port". Il s'agit essentiellement d'une liste utile à consulter à chaque fois, mais elle n'est ni complete, ni parfaite. Nous vous invitons donc à proposer vos commentaires et questions à l'adresse suivante : ports@openbsd.org.
  1. Si vous voulez prendre en charge la gestion d'un portage logiciel, inscrivez- vous via : ports@openbsd.org.
  2. Prendre en charge la gestion d'un portage signifie beaucoup plus que de proposer des logiciels. Pour chaque logiciel, vous vous engagez à maintenir vos portages à jour et répondre aux questions des utilisateurs qui les utiliseront : comment activer ou désactiver certaines fonctionnalités, etc.

  3. Votre décision prise, vous devez obtenir une copie locale sur votre disque de l'arbre des ports à l'aide de cvs. Comment faire ? Vous trouverez toutes les informations nécessaires dans la page consacrée à AnonCVS.

  4. Choisissez dans quel dossier sera placé votre portage et créez l'infrastructure de base requise. Utilisez le fichier Makefile modèle /usr/ports/infrastructure/templates/Makefile.template. NEED_VERSION est considéré comme obsolète et vous ne devez plus l'utiliser pour les nouveaux portages : mettez à jour votre arbre local des ports, ceci incluant bsd.port.mk.
  5. Ajoutez les portions "fetch" (de récupération) au Makefile.

    Certains portages logiciels sont complexes et des outils supplémentaires sont à votre disposition pour simplifier votre tâche :


  6. Créez des hachages dans distinfo en tapant make makesum. Vous devez ensuite vérifier que ces hachages sont valides en tapant make checksum.
  7. Testez l'extraction du portage à l'aide de la commande make extract. Vous devez vérifier avec soin où se trouve la base des sources. Il s'agit normalement de w- ${PKGNAME}${FLAVOR_EXT}/${DISTNAME}. Vous aurez peut-être besoin de modifier la variable WRKDIST du Makefile si cette base de sources est différente.

  8. Lisez la documentation d'installation et notez que la construction du port doit être complétée et doit prendre en compte toute option spéciale requise.

  9. Maintenant vous devez prendre le temps de considérer sérieusement et avec un grand soin les licences (ou la licence) qui couvre votre portage logiciel. Certains logiciels peuvent être redistribués librement, mais pas tous. Afin de vous aider, vous devez répondre à quatre questions. Il s'agit des variables PERMIT_* que vous trouverez au sein du fichier Makefile.

    A chaque fois que l'un de ces usages est autorisé, indiquez "Yes". Si ce n'est pas le cas, vous devez expliquer pourquoi dans une chaîne commentaire. Soyez attentif (attentive) aux conditions spéciales qui sont imposées après l'installation du logiciel. Par exemple, une série de logiciels impose qu'un exemplaire de leur licence soit installée et mentionnée à l'utilisateur. Dans ce cas, nous vous recommandons de mettre la licence dans /usr/local/share/doc/<name>/.

    En plus des valeurs PERMIT_*, mettez un indicateur de license tel que # License au dessus de ces valeurs en commentaire. Ainsi, nous saurons pourquoi les valeurs PERMIT_* sont positionnées de cette manière.

  10. Ajoutez les options de configuration au Makefile et créez un script de configuration au besoin.
  11. Essayez de construire le portage logiciel à l'aide de la commande make build.
  12. Commencez un cycle de make build, puis produisez un patch (ou utilisez make update-patches) puis make clean patch.
  13. Essayez de paramétrer SEPARATE_BUILD.
  14. Parcourez avec attention la sortie obtenue (s'il y en a) et modifiez toute option utile dans le Makefile. Pour répéter la commande utilisez `make clean configure'.

    Note: vérifiez que les fichiers dépendants de l'hôte soient placés soit dans /etc ou /etc/<name>, mais NE REMPLACEZ NI NE MODIFIEZ JAMAIS de fichiers existants dans /etc. Il vaut mieux placer ces fichiers dans /usr/local/share/<name> puis copiez vers /etc ou /etc/<name> seulement si les fichiers n'existent pas. Si les fichiers existent, affichez un message et indiquez à l'utilisateur du système quels fichiers doivent être modifiés. Cela permet également de garantir que les fichiers seront inclus dans le paquetage puisque tout ce qui se trouve dans /usr/local sera inclus dans PLIST. Une fois un paquetage installé, le contenu de pkg/MESSAGE sera affiché et le cycle de construction du paquetage sera terminé.

    OpenBSD situe les fichiers comme suit :

       exécutables utilisateur :                                 /usr/local/bin
       exécutables de l'administrateur :                         /usr/local/sbin
       programmes exécutables :                                  /usr/local/libexec
       bibliothèques :                                              /usr/local/lib
       données indépendantes de l'architecture :                 /usr/local/lib/<nom>
       fichiers inclus installés :                               /usr/local/include ou /usr/local/include/<nom>
    
       données spécifiques à la machine :                        /etc ou /etc/<nom>
       état local :                                              /var/run
       fichiers contenant les scores des jeux :                  /var/games
       fichiers info GNU :                                       /usr/local/info
       pages man :                                               /usr/local/man/...
       données indépendantes de l'architecture en lecture seule :/usr/local/share/<nom>
       documentations diverses :                                 /usr/local/share/doc/<nom>
    
  15. Commencez un cycle de compilations jusqu'à ce que le portage soit terminé. Patchez (voir ci-dessus), puis clean et make jusqu'à la production du portage. Vous devez éliminer tous les "warning" obtenus en particulier ceux en rapports avec la sécurité du code produit.

  16. Contrôlez la sémantique de SEPARATE_BUILD. Vous ne devez le faire que si votre portage utilise la variable locale SEPARATE_BUILD. Idéalement, le portage ne doit pas modifier de fichiers dans ${WRKSRC} après l'application de votre patch. Vous pouvez le vérifier en retirant vos droits d'écriture à cette étape sur ${WRKSRC}. Ensuite vous pouvez utiliser SEPARATE_BUILD=concurrent -- et vérifier qu'une autre personne peut, sur une autre architecture, obtenir la même compilation. Sinon, utilisez SEPARATE_BUILD=simple -- si la construction du portage sur plusieurs architectures peut provoquer des problèmes, à mesure que certains fichiers seront régénérés à certains moments.

  17. Ajoutez une ligne COMMENT dans le Makefile. COMMENT est une COURTE description du portage (au maximum 60 caractères). Vous ne DEVEZ PAS INCLURE le nom du paquetage dans la description ou son numéro de version. Vous ne devez PAS faire débuter cette ligne de commentaire par un caractère en majuscule sauf si la signification sémantique doit être sans aucune ambiguïté et NE TERMINEZ PAS CETTE LIGNE par un point. EN AUCUN CAS VOUS NE DEVEZ COMMENCER PAR UN ARTICLE INDEFINI COMME 'un' OU 'une' ; retirez tout article au début.

  18. Editez pkg/DESCR et pkg/PLIST.
  19. Si l'application a besoin de créer un utilisateur ou un groupe, choisissez le plus petit identifiant libre dans /usr/ports/infrastructure/db/user.list afin de l'utiliser pour votre port et soyez certain que celui-ci soit ajouté à ce même fichier lors de son entrée dans l'arbre.

  20. Installez l'application avec make fake. Les librairies ne devraient jamais faire l'objet d'un "strip". Les exécutables subissent un "strip" par défaut; ce comportement est dicté par ${INSTALL_STRIP}. ${INSTALL_PROGRAM} respecte cette variable automatiquement. Ceci est préférable à une application inconditionnelle de "strip" (à l'aide d'une cible "install-strip" ou en exécutant "strip" à partir du Makefile par exemple). Vous pouvez utiliser file afin de déterminer si un binaire à fait l'objet d'un "strip" ou pas.

  21. Vérifier une nouvelle fois et avec le plus grand soin que votre portage ne contient pas de trous de sécurité potentiels. Les programmes qui fonctionnent en setuid où qui accèdent au réseau doivent faire l'objet d'un audit complet et de grand soin. Nous vous invitons à étudier nos recommandations quant à la sécurité pour mener à bien cette étape très importante. Vous devez tout enregistrer et étudier en ce qui concerne tout changement, et l'inscrire au sein du fichier /SECURITY. Ce fichier doit lister avec précision tout problème de sécurité potentiel introduit par votre portage, avec les correctifs qui accompagnent les programmes afin que quiconque qui prenne votre portage en main puisse savoir ce qu'il reste à vérifier. Par exemple :
          $OpenBSD$
    
          ${WRKDIR}/receiver.c
             l'appel de la fonction mktemp (fonction wrapper à
             do_mktemp) me semble incorrecte.
    
          Ce serveur utilise une grande quantité de fonctions
          strlcpy/strlcat/snprintf.
    


  22. Soyez certain que votre répertoire /etc/mtree est bien à jour (la prochaine étape utilise mtree afin de supprimer les répertoires existants des fichiers PLIST générés). Souvenez-vous qu'une mise à jour ne touche pas /etc...

  23. Créez le fichier pkg/PLIST. Une fois l'installation complète, utilisez la commande pour développeurs make plist qui permet de générer le fichier PLIST au sein du répertoire pkg. Ce fichier est le candidat pour toute création de liste de paquetages.

    Lisez attentivement le fichier `PLIST' et vérifiez que tout a bien été installé à l'endroit approprié. Tout ce qui n'a pas été installé peut être ajouté avec une règle `post-install' dans le Makefile du port.

    Les portages qui installent des bibliothèques partagées auront un fichier supplémentaire, nommé PFRAG.shared.



  24. Vérification de la dépendance envers des bibliothèques partagées. Lancez make port-lib-depends-check et ajoutez chaque annotation à LIB_DEPENDS ou WANTLIB jusqu'à ce que cette commande se termine sans erreur. Vous devriez lire le guide de mise à jour afin de comprendre pourquoi cela est important.

  25. Si vous avez ajouté une entrée dans LIB_DEPENDS, relancez make plist. En effet, il est possible que certains répertoires n'ont plus besoin d'être référencés dans la PLIST s'ils sont installés par une dépendance.

  26. Testez le paquetage lui-même. Après l'installation du portage, la commande make package est utilisée pour créer un paquetage. Pour tester le paquetage, utilisez d'abord la commande pkg_add puis utilisez pkg_delete.

  27. Vérifiez les dépendances. Utilisez vos logs pour vérifier que le port a bien détecté les dépandances mentionnées dans DEPENDS, ni plus ni moins. Vérifiez qu'il n'y a pas de de dépendances cachées. Par exemple, il pourrait y avoir des éléments détectés suite à l'installation de quelques ports auparavant).

  28. Vérifiez les dépendances relatives à des libraries partagées. Utilisez pour cela la commande make lib-depends-check et ajoutez toutes les annotations LIB_DEPENDS et WANTLIB afin qu'aucune erreur ne soit retournée (utilisez make clean=package afin de supprimer l'ancien paquetage après avoir mis à jour le Makefile relatif au port). Pour comprendre pourquoi c'est si important, veuillez consulter les conseils de mise à jour

  29. Exécutez les tests de régression et vérifiez qu'ils se déroulent correctement. Positionnez NO_REGRESS=Yes pour un port si ce dernier ne possède pas d'infrastructure de test. Notez qu'il ne faut pas positionner NO_REGRESS pour un port qui a une infrastructure de régression vide.

  30. Envoyez un email à l'adresse ports@openbsd.org avec une courte note indiquant vos commentaires et les tests menés. Attachez le port/patch à cet email et envoyez-le (les archives des listes ne contiennent que le courrier seul).

    Essayez de faire tester votre portage sur le plus grand nombre de plates-formes possibles.


  31. Intégrez toutes les informations obtenues que vous obtiendrez d'autres testeurs. Testez à nouveau sur votre plate-forme. Ensuite, répondez à toute personne et proposez leurs votre nouveau portage.

  32. Enfin, incorporez votre logiciel dans l'abre des "ports" d'OpenBSD. Si vous ne disposez pas de droits d'écriture CVS, demandez à quelqu'un qui en dispose sur ports@openbsd.org de le faire pour vous.

  33. Si vous êtes un développeur disposant d'un accès CVS, insérez votre portage logiciel. Nous préférons l'utilisation de "import" pour importer votre nouveau port, plutôt que d'ajouter des centaines (ou plus) de fichiers de manière individuelle. Import utilise des numéros de version de type "branche vendeur" comme 1.1.1.1 mais ne vous inquiétez pas à ce sujet ! :-) Si vous modifiez un fichier de manière spécifique (édition puis cvs commit), la nouvelle version sera alors 1.2.

    En résumé, l'importation sera utilisée à la création du portage logiciel. A partir de ce stade, "cvs add" et "cvs rm" seront utilisés pour ajouter ou retirer des fichiers, tandis que le cycle classique d'édition puis de commit sera utilisé. Vous pouvez utiliser quelque chose comme :

    $ cd kaffe1
    $ make clean    # évitez d'envoyer vos fichiers de travail dans le CVS !
    $ cvs -d cvs.openbsd.org:/cvs import -m 'kaffe port' ports/lang/kaffe1 \
            VotreNom VotreNom_YYYY-MMM-DD
    

    Comme exemple réel, voici la sortie obtenue par la mise en place d'un portage que nous avons réalisé le 8 septembre 1998 :
    $ 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: (caché, évidemment)
    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
    $ 
    
  34. Enfin, ajoutez une ligne d'entrée pour le nouveau portage dans le Makefile du répertoire parent; par exemple si nous ajoutons le portage de ports/lang/kaffe1, nous l'ajoutons également au fichier ports/lang/Makefile.

  35. Vous devez maintenir le portage ! Si jamais un problème survient ou si une nouvelle version paraît etc. vous devez tout faire pour maintenir votre portage à jour. En d'autres termes, cycle de construction du portage, mise à jour, nouveau cycle de construction, etc.

  36. Lors de la mise à jour d'un portage, n'oubliez pas de traiter les dépendances ! Vous ne devez pas provoquer un dysfonctionnement en modifiant votre portage, car d'autres logiciels peuvent en dépendre ! En cas de problème, si votre portage demande la mise à jour d'autres portages sous la charge d'autres personnes, contactez ces derniers. De même, surveillez tout portage pouvant affecter les votres et préparez vous à des mises à jour sans être toujours prévenu(e) à l'avance.
Enfin, nous tenons à vous remercier pour tous les efforts que cela réprésente et que vous acceptez de prendre en charge pour améliorer l'arbre des "ports" d'OpenBSD qui sans tous ces efforts n'existerait pas : merci !
Porting www@openbsd.org
$OpenBSD: checklist.html,v 1.33 2008/01/19 17:39:44 saad Exp $