    Techniques de publication des logiciels tiers pre-compiles pour FreeBSD

  Steve Price

   <steve@FreeBSD.org>

   Version: 43126
   2013-11-07 par gabor.
   Resume

   Ce document decrit l'approche utilisee par l'equipe technique de
   publication des versions de FreeBSD pour produire un ensemble de haute
   qualite de logiciels pre-compiles adapte au support officiel de
   distribution de FreeBSD. Ce document est un travail en cours, mais au
   final il couvrira le processus employe pour construire un ensemble de
   logiciels pre-compiles sur le "Ports Cluster" (grappe de machines pour les
   logiciels portes) de FreeBSD.org, comment configurer n'importe quel autre
   ensemble de machines en tant que grappe de machines pour les logiciels
   portes, comment repartir les logiciels pre-compiles pour le support de
   publication, et comment verifier qu'un ensemble de logiciels pre-compiles
   est coherent.

   Version franc,aise de Marc Fonvieille <blackend@FreeBSD.org>.

     ----------------------------------------------------------------------

   Table des matieres

   1. Compiler les logiciels pre-compiles `a partir du catalogue des
   logiciels portes

   2. Repartition des logiciels pre-compiles

1. Compiler les logiciels pre-compiles `a partir du catalogue des logiciels
portes

   Le catalogue des logiciels portes pour FreeBSD est un catalogue de plus de
   24,000 logiciels tiers disponibles pour FreeBSD. L'equipe de gestion des
   logiciels portes <portmgr@FreeBSD.org> est responsable du maintien de la
   coherence du catalogue des logiciels portes qui peut etre utilise pour la
   creation des logiciels binaires pre-compiles qui accompagnent une version
   donnee de FreeBSD.

  1.1. La "grappe de machines" pour les logiciels portes

   Afin de fournir un ensemble coherent de logiciels pre-compiles tiers pour
   les publications de FreeBSD, chaque logiciel porte est compile dans un
   environnement chroot, en partant de repertoires /usr/local et /usr/X11R6
   vides. Les dependances requises sont installees sous forme de logiciels
   pre-compiles avant le processus de compilation. Cela renforce la coherence
   dans le processus de compilation des logiciels pre-compiles. En demarrant
   la compilation du logiciel dans un environnement vierge, nous pouvons etre
   sur que les donnees du logiciel pre-compile (comme les dependances
   requises) sont precises, et donc que nous ne genererons jamais de
   logiciels pre-compiles qui pourraient fonctionner sur certains systemes et
   pas sur d'autres en fonction du logiciel qui fut precedemment installe.

   La "grappe de machines pour les logiciels portes" destinee `a
   l'architecture x86 consiste actuellement en un noeud maitre (un Bi-Pentium
   III 733Mhz) et 8 noeuds esclaves (Pentium III 800Mhz) pour effectuer la
   compilation des logiciels pre-compiles. Avec cette configuration, une
   compilation complete des logiciels pre-compiles est effectuee en 24
   heures. Ces machines sont hebergees avec d'autres equipements du Projet
   FreeBSD au centre Yahoo "corner of Exodus" `a Santa Clara en Californie.

   La "grappe de machines pour les logiciels portes" destinee `a
   l'architecture Alpha se compose de 7 machines PWS 500A donnees par Compaq
   et egalement hebergees avec les equipements de Yahoo.

2. Repartition des logiciels pre-compiles

   Pour FreeBSD 4.4 plus de 4.1 gigaoctets de logiciels pre-compiles furent
   crees. Cela pose un probleme pour les CDROMs de distribution car nous
   aimerions mettre autant de logiciels pre-compiles que possible sans que
   l'utilisateur ne soit oblige d'introduire un autre disque pour satisfaire
   des dependances. La solution est de creer des "bouquets" de logiciels
   pre-compiles avec des dependances identiques et de les grouper sur des
   disques specifiques. Cette section decrit le logiciel et la methode mise
   en oeuvre dans la creation de ces ensembles de logiciels pre-compiles pour
   les disques officiels de distribution de FreeBSD.

   Tout d'abord vous devrez recuperer une copie de l'archive tar `a l'URL
   suivante:

   http://people.freebsd.org/~steve/release-scripts.tgz

   Copiez cette archive sur une machine qui dispose de suffisamment d'espace
   libre pour heberger 2 `a 3 fois la taille de l'ensemble de logiciels
   pre-compiles que vous desirez diviser. L'archive sera extraite dans le
   repertoire de travail courant aussi soyez sur d'avoir cree un repertoire
   convenablement nomme pour la version sur laquelle vous etes en train de
   travailler.

   Apres avoir extrait les fichiers, vous remarquerez les fichiers suivants:

   config

           Ce fichier contient l'espace libre disponible sur chaque disque et
           si les logiciels pre-compiles, leurs sources, ou les deux sont
           autorises sur n'importe quel disque donne. La premiere colonne est
           le nom du disque. Il doit etre sous la forme disc[0-9a-z].
           Actuellement c'est configure pour permettre 10 disques (4 pour
           l'ensemble de distribution et 6 pour la "trousse `a outils"). Il
           existe un disque supplementaire appele "scratch" ou resident les
           sources/logiciels pre-compiles restants s'ils ne peuvent trouver
           place ailleurs. La deuxieme colonne peut etre `a 1 ou `a 0 ou 1
           indique qu'il est correct de placer les logiciels pre-compiles sur
           ce disque. La troisieme colonne fonctionne de la meme fac,on sauf
           qu'elle controle si les sources sont placees sur ce disque. La
           derniere colonne represente le nombre d'octets d'espace libre sur
           un disque.

   doit.sh

           C'est le cheval de labour. Une fois que vous avez tous les
           fichiers en place et les choses correctement configurees cette
           procedure dirige le processus de division des logiciels
           pre-compiles. Prenez garde, c'est une procedure interactive aussi
           vous devez garder un oeil dessus quand elle tourne. Plus de
           details sur ce que fait cette procedure suivront.

   scripts/checkdeps.pl

           S'assure que toutes les dependances des logiciels pre-compiles
           sont satisfaites `a l'aide d'un fichier d'INDEX et d'un repertoire
           de logiciels pre-compiles.

   scripts/oneshot.pl

           C'est ici que tout la magie (et j'utilise ce terme de fac,on
           plutot impropre etant donne que c'est pour la plupart du temps
           juste qu'une approche en force brute) se produit. En fonction
           d'une liste de logiciels requis pour chaque disque et un ensemble
           de logiciels pre-compiles/sources, c'est cette procedure qui place
           un logiciel pre-compile ou une source sur un disque avec toutes
           ses dependances.

   scripts/print-cdrom-packages.sh

           Ce fichier est une copie du fichier
           src/release/scripts/print-cdrom-packages.sh provenant de la
           version sur laquelle vous etes en train de travailler.

   scripts/scrubindex.pl

           Cette procedure efface les lignes d'un fichier INDEX concernant
           les logiciels pre-compiles qui ne sont pas presents. Elle retire
           egalement les dependances d'XFree86. NOTE: vous devrez ajuster la
           valeur de la variable xdep pour etre sur que le numero de version
           est correct.

   scripts/setup.sh

           C'est une procedure auxiliaire que j'utilise sur la "grappe de
           machines" bento pour recuperer une copie du catalogue des
           logiciels portes et l'ensemble correspondant de logiciels
           pre-compiles/sources.

   Voici une liste des choses que vous devrez controler ou configurer avant
   d'aller plus loin.

    1. Editez le fichier config pour indiquer le nombre de disques dont vous
       disposez, leur taille, et si vous desirez qu'ils contiennent des
       logiciels pre-compiles, des sources, les deux, ou ni l'un ni l'autre.

    2. Soyez sur d'effacer le repertoire gen s'il en existe un ancien. Ce
       repertoire contient les fichiers de travail qui ne seront seulement
       valables que pour la division actuelle.

    3. Dans votre premier essai de division, il est mieux de simuler la copie
       des logiciels pre-compiles et des sources. Cela economisera du temps
       et de l'espace disque pendant que vous faites quelques essais pour
       etre sur que tout ce passe comme prevu, etc... Dans la procedure
       scripts/oneshot.pl positionnez la variable fake `a 1 et au lieu de
       vraiment copier les fichiers, elle creera des fichiers vides `a l'aide
       de la commande touch(1). Soyez sur de desactiver cela en positionnant
       fake `a 0 avant de confier les disques resultants `a la personne
       chargee de la "masterisation", sinon on obtiendra un repertoire rempli
       de fichiers vides.

    4. Verifiez que vous disposez bien d'une copie recente du fichier
       print-cdrom-packages.sh et qu'il provient de la version correcte de
       distribution.

    5. Controlez que la dependance d'XFree86 dans scripts/scrubindex.pl
       possede le numero de version correct. Vous devrez egalement verifier
       que cette valeur est correcte dans doit.sh.

   Ensuite vous devrez recuperer une copie du catalogue des logiciels portes,
   des logiciels pre-compiles, et des sources `a partir d'une recente
   compilation sur la "grappe de machines" destinee `a la compilation des
   logiciels pre-compiles. Voir le fichier scripts/setup.sh pour un exemple
   qui fonctionne, mais voici essentiellement ce qu'il faut faire.

    1. Recuperez une copie de ports.tar.gz et desarchivez l`a dans le
       repertoire des logiciels portes `a cote de doit.sh et du repertoire
       scripts.

    2. Effacez les repertoires de logiciels pre-compiles/sources ou les liens
       symboliques. Bento les a sous forme de liens symboliques et vous
       obtiendrez des resultats mixtes si vous ne vous en debarrassez pas
       avant de poursuivre.

    3. Creez un nouveau repertoire ports/packageset copiez-y l'ensemble des
       logiciels pre-compiles depuis la "grappe de machines" de compilation
       de logiciels pre-compiles.

    4. Creez un nouveau repertoire ports/distfiles et copiez-y les sources
       depuis la "grappe de machines" de compilation des logiciels
       pre-compiles. NOTE: Si vous ne voulez aucune source, creez simplement
       le repertoire et laissez-le vide. Ce repertoire doit etre present meme
       s'il ne contient rien.

   Vous etes desormais fin pret pour l'amusante tache de repartition des
   logiciels pre-compiles. Vous demarrez le processus en lanc,ant ./doit.sh.
   Voici ce qu'il se passe la premiere fois que vous lancez le processus.

    1. Creation de la liste des logiciels portes `a diffusion restreinte (qui
       ne peuvent etre sur le site FTP principal).

    2. On vous demandera si vous desirez retirer les logiciels portes `a
       diffusion restreinte. La plupart du temps vous voudrez repondre
       "(y)es" ici.

    3. Creation d'une liste de logiciels pre-compiles/sources qui ne peuvent
       etre places sur les disques.

    4. On vous demandera si vous desirez retirer les logiciels
       pre-compiles/sources que l'on ne peut placer sur CDROM. La plupart du
       temps vous voudrez repondre "(y)es" ici.

    5. Copie de INDEX du repertoire ports vers le repertoire gen. En faisant
       cela, on retire les lignes pour les logiciels portes pour lesquels une
       version pre-compilee n'existe pas. On verifie egalement que toutes les
       dependances requises sous forme pre-compilees sont presentes.

    6. Creation d'une liste de logiciels pre-compiles qui sont necessaires
       sur chaque disque.

    7. On vous demandera si vous desirez peupler les disques. Apres avoir
       rempli chaque disque, la procedure recherchera les dependances
       manquantes, nettoiera le fichier INDEX, et creera le fichier
       CHECKSUM.MD5.

    8. La procedure verifiera les logiciels pre-compiles requis presents sur
       chaque disque et vous donnera un resume de la taille de chaque disque.

   Apres etre passe par cette premiere tentative si vous etes suffisamment
   chanceux pour que tous les logiciels pre-compiles soient crees et places
   sur chaque disque, tout ce que vous devez faire est de positionner fake `a
   0 dans scripts/oneshot.pl et relancer la procedure ./doit.sh. La seconde
   fois et les suivantes, les etapes 1 `a 5 seront passees. Si vous voulez
   effectuer `a nouveau une de ces etapes, referez-vous `a doit.sh pour
   connaitre quels fichiers doivent etre effaces pour ne pas court-circuiter
   ces etapes. Si vous voulez repeter toutes ces etapes alors la methode la
   plus simple est d'utiliser la commande rm -rf gen.

   Apres une operation reussie les logiciels pre-compiles/sources seront dans
   les repertoires disc* et ce qui reste sera dans le repertoire scratch.

   Que faire si les choses se passent mal? Voici quelques problemes courants
   et leurs solutions.

   Logiciels pre-compiles necessaires manquants

           C'est un probleme assez courant. Vous devrez soit attendre un
           nouvel ensemble de logiciels pre-compiles ou les logiciels
           manquants seront compiles soit trouver quelqu'un pour relancer la
           compilation de logiciels pre-compiles pour vous. N'essayez pas de
           compiler les logiciels manquants sur votre machine et de les jeter
           dans l'arene. Alors que vous pourriez etre en mesure de vous
           debrouiller avec si vous etes extremement prudent, la majeur
           partie du temps un petit detail vous echappera et le simple fait
           d'ajouter un logiciel pourra faire que des centaines d'autres
           apparaitrons comme mysterieusement defectueux.

   Logiciels pre-compiles requis mais qui ne pourront trouver place sur les
   disques

           Cela se produit egalement occasionnellement et est relativement
           simple `a corriger. Editez simplement print-cdrom-packages.sh pour
           deplacer les logiciels pre-compiles jusqu'`a qu'ils trouvent
           place. C'est bien, en effet, un processus `a repeter plusieurs
           fois et c'est une des raisons pourquoi vous devriez activer fake
           dans scripts/oneshot.pl jusqu'`a ce que vous ayez obtenu les
           choses comme desirees. Relancez ./doit.sh apres avoir effectue vos
           ajustements.

   Logiciels pre-compiles requis mais pas presents sur le bon disque (voire
   sur aucun)

           Cela signifie generalement que vous ne les avez pas ajoutes dans
           le fichier print-cdrom-packages.sh ou que vous les avez mis sur le
           mauvais disque. C'est par cette procedure que l'ensemble du
           processus determine ou doit aller un logiciel pre-compile. Si vous
           voulez forcer un logiciel `a se retrouver sur un disque
           particulier c'est la seule maniere d'etre sur que cela se
           produira.

   Si vous restez completement coince et que vous n'arrivez pas `a comprendre
   pourquoi les choses sont cassees ou que vous ne savez pas comment les
   corriger alors envoyez un courrier electronique `a Steve Price pour
   demander de l'aide.
