2. Répartition des logiciels pré-compilés

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:

config

Ce 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.sh

C'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.pl

S'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.pl

C'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.sh

Ce 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.pl

Cette 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.sh

C'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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  1. Création de la liste des logiciels portés à diffusion restreinte (qui ne peuvent être sur le site FTP principal).

  2. 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.

  3. Création d'une liste de logiciels pré-compilés/sources qui ne peuvent être placés sur les disques.

  4. 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.

  5. 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.

  6. Création d'une liste de logiciels pré-compilés qui sont nécessaires sur chaque disque.

  7. 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.

  8. 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.

Logiciels pré-compilés nécessaires manquants

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.

Logiciels pré-compilés requis mais qui ne pourront trouver place sur les disques

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.

Logiciels pré-compilés requis mais pas présents sur le bon disque (voire sur aucun)

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.

Ce document, ainsi que d'autres peut être téléchargé sur ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.

Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.