Ce document décrit l'approche utilisée par l'équipe technique de publication des versions de FreeBSD pour produire un ensemble de haute qualité de logiciels pré-compilés adapté au support officiel de distribution de FreeBSD. Ce document est un travail en cours, mais au final il couvrira le processus employé pour construire un ensemble de logiciels pré-compilés sur le “Ports Cluster” (grappe de machines pour les logiciels portés) de FreeBSD.org, comment configurer n'importe quel autre ensemble de machines en tant que grappe de machines pour les logiciels portés, comment répartir les logiciels pré-compilés pour le support de publication, et comment vérifier qu'un ensemble de logiciels pré-compilés est cohérent.
Version française de Marc Fonvieille
  <blackend@FreeBSD.org>.
Le catalogue des
      logiciels portés pour FreeBSD est un catalogue de
      plus de 24,000 logiciels tiers disponibles pour FreeBSD.
      L'équipe de gestion des logiciels portés <portmgr@FreeBSD.org> est responsable du maintien de la cohérence du
      catalogue des logiciels portés qui peut être utilisé
      pour la création des logiciels binaires pré-compilés
      qui accompagnent une version donnée de FreeBSD.
Afin de fournir un ensemble cohérent de logiciels
	pré-compilés tiers pour les publications de
	FreeBSD, chaque logiciel porté est compilé dans
	un environnement chroot, en
	partant de répertoires /usr/local et
	/usr/X11R6 vides.  Les dépendances requises
	sont installées sous forme de logiciels
	pré-compilés avant le
	processus de compilation.  Cela renforce la
	cohérence dans le processus de compilation
	des logiciels pré-compilés.  En démarrant la
	compilation du logiciel dans un environnement vierge, nous pouvons
	être sûr que les données du logiciel
	pré-compilé (comme les dépendances
	requises) sont précises, et donc que nous ne
	générerons jamais
	de logiciels pré-compilés qui pourraient fonctionner sur
	certains systèmes et pas sur d'autres en fonction du
	logiciel qui fut précédemment installé.
La “grappe de machines pour les logiciels portés” destinée à l'architecture x86 consiste actuellement en un noeud maître (un Bi-Pentium III 733Mhz) et 8 noeuds esclaves (Pentium III 800Mhz) pour effectuer la compilation des logiciels pré-compilés. Avec cette configuration, une compilation complète des logiciels pré-compilés est effectuée en 24 heures. Ces machines sont hébergées avec d'autres équipements du Projet FreeBSD au centre Yahoo “corner of Exodus” à Santa Clara en Californie.
La “grappe de machines pour les logiciels portés” destinée à l'architecture Alpha se compose de 7 machines PWS 500A données par Compaq et également hébergées avec les équipements de Yahoo.
Pour FreeBSD 4.4 plus de 4.1 gigaoctets de logiciels pré-compilés furent créés. Cela pose un problème pour les CDROMs de distribution car nous aimerions mettre autant de logiciels pré-compilés que possible sans que l'utilisateur ne soit obligé d'introduire un autre disque pour satisfaire des dépendances. La solution est de créer des “bouquets” de logiciels pré-compilés avec des dépendances identiques et de les grouper sur des disques spécifiques. Cette section décrit le logiciel et la méthode mise en oeuvre dans la création de ces ensembles de logiciels pré-compilés pour les disques officiels de distribution de FreeBSD.
Tout d'abord vous devrez récupérer une copie de
      l'archive tar à 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 héberger 2 à 3 fois la taille de l'ensemble de logiciels pré-compilés que vous désirez diviser. L'archive sera extraite dans le répertoire de travail courant aussi soyez sûr d'avoir créé un répertoire convenablement nommé pour la version sur laquelle vous êtes en train de travailler.
Après avoir extrait les fichiers, vous remarquerez les fichiers suivants:
configCe fichier contient l'espace libre disponible sur chaque disque et si les logiciels pré-compilés, leurs sources, ou les deux sont autorisés sur n'importe quel disque donné. La première colonne est le nom du disque. Il doit être sous la forme disc[0-9a-z]. Actuellement c'est configuré pour permettre 10 disques (4 pour l'ensemble de distribution et 6 pour la “trousse à outils”). Il existe un disque supplémentaire appelé “scratch” où résident les sources/logiciels pré-compilés restants s'ils ne peuvent trouver place ailleurs. La deuxième colonne peut être à 1 ou à 0 où 1 indique qu'il est correct de placer les logiciels pré-compilés sur ce disque. La troisième colonne fonctionne de la même façon sauf qu'elle contrôle si les sources sont placées sur ce disque. La dernière colonne représente le nombre d'octets d'espace libre sur un disque.
doit.shC'est le cheval de labour. Une fois que vous avez tous les fichiers en place et les choses correctement configurées cette procédure dirige le processus de division des logiciels pré-compilés. Prenez garde, c'est une procédure interactive aussi vous devez garder un oeil dessus quand elle tourne. Plus de détails sur ce que fait cette procédure suivront.
scripts/checkdeps.plS'assure que toutes les dépendances des logiciels pré-compilés sont satisfaites à l'aide d'un fichier d'INDEX et d'un répertoire de logiciels pré-compilés.
scripts/oneshot.plC'est ici que tout la magie (et j'utilise ce terme de façon plutôt impropre étant donné 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 pré-compilés/sources, c'est cette procédure qui place un logiciel pré-compilé ou une source sur un disque avec toutes ses dépendances.
scripts/print-cdrom-packages.shCe fichier est une copie du fichier
          src/release/scripts/print-cdrom-packages.sh
	  provenant de la version sur laquelle vous êtes en train de
	  travailler.
scripts/scrubindex.plCette procédure efface les lignes d'un fichier INDEX concernant les logiciels pré-compilés qui ne sont pas présents. Elle retire également les dépendances d'XFree86. NOTE: vous devrez ajuster la valeur de la variable xdep pour être sûr que le numéro de version est correct.
scripts/setup.shC'est une procédure auxiliaire que j'utilise sur la “grappe de machines” bento pour récupérer une copie du catalogue des logiciels portés et l'ensemble correspondant de logiciels pré-compilés/sources.
Voici une liste des choses que vous devrez contrôler ou configurer avant d'aller plus loin.
Editez le fichier config pour
	indiquer le nombre de disques dont vous disposez, leur taille,
	et si vous désirez qu'ils contiennent des logiciels
	pré-compilés, des sources, les deux, ou ni l'un ni
	l'autre.
Soyez sûr d'effacer le répertoire gen s'il en existe un ancien. Ce répertoire contient les fichiers de travail qui ne seront seulement valables que pour la division actuelle.
Dans votre premier essai de division, il est mieux
	de simuler la copie des logiciels pré-compilés et
	des sources.  Cela économisera du temps et de l'espace
	disque pendant que vous faites quelques essais pour être
	sûr que tout ce passe comme
	prévu, etc...  Dans la procédure
	scripts/oneshot.pl positionnez la variable
	fake à 1 et au lieu de vraiment copier les fichiers, elle
	créera des fichiers vides à l'aide de la commande
	touch(1).  Soyez sûr de désactiver cela en
	positionnant fake à 0 avant de confier
	les disques résultants à la personne chargée
	de la “mastérisation”, sinon on obtiendra un
	répertoire rempli de fichiers vides.
Vérifiez que vous disposez bien d'une copie
	récente du fichier
	print-cdrom-packages.sh et qu'il provient
	de la version correcte de distribution.
Contrôlez que la dépendance d'XFree86 dans
        scripts/scrubindex.pl possède le
	numéro de version correct.  Vous devrez également
	vérifier que cette valeur est correcte dans
	doit.sh.
Ensuite vous devrez récupérer une copie du
      catalogue des logiciels portés, des logiciels
      pré-compilés, et des sources à
      partir d'une récente compilation sur la “grappe de
      machines” destinée à la compilation des logiciels
      pré-compilés.  Voir le
      fichier scripts/setup.sh pour un exemple qui
      fonctionne, mais voici essentiellement ce qu'il faut faire.
Récupérez une copie de
	ports.tar.gz et désarchivez
	là dans le répertoire des logiciels
	portés à coté de
	doit.sh et du répertoire
	scripts.
Effacez les répertoires de logiciels pré-compilés/sources ou les liens symboliques. Bento les a sous forme de liens symboliques et vous obtiendrez des résultats mixtes si vous ne vous en débarrassez pas avant de poursuivre.
Créez un nouveau répertoire ports/packageset copiez-y l'ensemble des logiciels pré-compilés depuis la “grappe de machines” de compilation de logiciels pré-compilés.
Créez un nouveau répertoire ports/distfiles et copiez-y les sources depuis la “grappe de machines” de compilation des logiciels pré-compilés. NOTE: Si vous ne voulez aucune source, créez simplement le répertoire et laissez-le vide. Ce répertoire doit être présent même s'il ne contient rien.
Vous êtes désormais fin prêt pour
      l'amusante tâche de répartition des logiciels
      pré-compilés.  Vous démarrez le
      processus en lançant ./doit.sh.  Voici
      ce qu'il se passe la première fois que vous lancez
      le processus.
Création de la liste des logiciels portés à diffusion restreinte (qui ne peuvent être sur le site FTP principal).
On vous demandera si vous désirez retirer les logiciels portés à diffusion restreinte. La plupart du temps vous voudrez répondre “(y)es” ici.
Création d'une liste de logiciels pré-compilés/sources qui ne peuvent être placés sur les disques.
On vous demandera si vous désirez retirer les logiciels pré-compilés/sources que l'on ne peut placer sur CDROM. La plupart du temps vous voudrez répondre “(y)es” ici.
Copie de INDEX du répertoire ports vers le répertoire gen. En faisant cela, on retire les lignes pour les logiciels portés pour lesquels une version pré-compilée n'existe pas. On vérifie également que toutes les dépendances requises sous forme pré-compilées sont présentes.
Création d'une liste de logiciels pré-compilés qui sont nécessaires sur chaque disque.
On vous demandera si vous désirez peupler les disques. Après avoir rempli chaque disque, la procédure recherchera les dépendances manquantes, nettoiera le fichier INDEX, et créera le fichier CHECKSUM.MD5.
La procédure vérifiera les logiciels pré-compilés requis présents sur chaque disque et vous donnera un résumé de la taille de chaque disque.
Après être passé par cette première
      tentative si vous êtes suffisamment chanceux pour que tous
      les logiciels pré-compilés
      soient créés et placés sur chaque disque,
      tout ce que vous devez faire est de positionner fake à 0 dans
      scripts/oneshot.pl et relancer la procédure
      ./doit.sh.  La seconde fois et les suivantes,
      les étapes 1 à 5 seront passées.  Si vous
      voulez effectuer à nouveau une de ces étapes,
      référez-vous à doit.sh pour connaître
      quels fichiers doivent être effacés pour ne pas
      court-circuiter ces étapes.  Si vous voulez
      répéter toutes ces étapes alors la
      méthode la plus simple est d'utiliser
      la commande rm -rf gen.
Après une opération réussie les logiciels
      pré-compilés/sources seront dans les répertoires
      disc* et ce qui
      reste sera dans le répertoire scratch.
Que faire si les choses se passent mal? Voici quelques problèmes courants et leurs solutions.
C'est un problème assez courant. Vous devrez soit attendre un nouvel ensemble de logiciels pré-compilés où les logiciels manquants seront compilés soit trouver quelqu'un pour relancer la compilation de logiciels pré-compilés pour vous. N'essayez pas de compiler les logiciels manquants sur votre machine et de les jeter dans l'arène. Alors que vous pourriez être en mesure de vous débrouiller avec si vous êtes extrêmement prudent, la majeur partie du temps un petit détail vous échappera et le simple fait d'ajouter un logiciel pourra faire que des centaines d'autres apparaîtrons comme mystérieusement défectueux.
Cela se produit également occasionnellement et
	  est relativement simple à corriger.  Editez simplement
	  print-cdrom-packages.sh pour déplacer les logiciels
	  pré-compilés jusqu'à qu'ils trouvent
	  place.  C'est bien, en
	  effet, un processus à répéter plusieurs fois
	  et c'est une des raisons pourquoi vous devriez activer fake dans
	  scripts/oneshot.pl jusqu'à ce que vous
	  ayez obtenu les choses comme désirées.
	  Relancez ./doit.sh après avoir
	  effectué vos ajustements.
Cela signifie généralement que vous ne
	  les avez pas ajoutés dans le fichier
	  print-cdrom-packages.sh ou que vous les
	  avez mis sur le mauvais disque.  C'est par cette procédure
	  que l'ensemble du processus détermine où doit aller un
	  logiciel pré-compilé.  Si vous voulez forcer un
	  logiciel à se retrouver sur un disque particulier c'est
	  la seule manière d'être sûr que cela se
	  produira.
Si vous restez complètement coincé et que vous n'arrivez pas à comprendre pourquoi les choses sont cassées ou que vous ne savez pas comment les corriger alors envoyez un courrier électronique à Steve Price pour demander de l'aide.