Techniques de publication des logiciels tiers pré-compilés pour FreeBSD

Steve Price

Version: 43184
2013-11-13 par hrs.
Résumé

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 .

[ Multiples pages HTML / Page HTML unique ]

Table des matières
1. Compiler les logiciels pré-compilés à partir du catalogue des logiciels portés
2. Répartition des logiciels pré-compilés

1. Compiler les logiciels pré-compilés à partir du catalogue des logiciels portés

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

1.1. La “grappe de machines” pour les logiciels portés

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.

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.