Gourous

Présentation

Les gourous sont une équipe d'élèves bénévoles qui installent des programmes sur le système informatique des élèves de l'ENS pour l'usage de tous. Le SPI (loué soit son nom), nous a accordé de l'espace disque à cet effet dans chaque salle. Nous nous occupons également de mettre au point la « config conscrit », c'est à dire les fichiers de configuration que le SPI insère dans les comptes des conscrits à leur création, et qui définissent l'environnement dans lequel on se trouve lorsque l'on se logue. Enfin, un sous-ensemble de gourous s'occupe de modérer les courriers électroniques collectifs, en collaboration avec le SPI.

Nous avons un compte nommé gourous grâce auquel vous pouvez nous contacter.

Les logiciels installés par gourous

Présentation générale

Il s'agit en général de programme libres et « sérieux ». On n'y trouvera bien entendu pas de jeux, ce qui serait un gaspillage scandaleux des ressources de l'école. Il y a néanmoins des programmes éducatifs installés par games qui est une émanation de gourous.

Quelques index disponibles en ligne

Organisation

Notre partition est montée dans /opt/gourous. Elle contient tout ce que nous avons installé, pour tous les systèmes différents que nous avons à supporter. Il y a des liens symboliques /usr/local/util et /usr/local/games qui pointent vers les zones de /opt/gourous correspondant au système sur lequel on se trouve. La manière recommandée pour accéder aux programmes installés par gourous est de passer par /usr/local/util.

Par la suite nous nous concentrerons sur /usr/local/util, mais la plupart de ce qui sera dit est également vrai pour /usr/local/games.

Nous allons maintenant décrire la structure de /usr/local/util, en procédant sous-répertoire par sous-répertoire.

/usr/local/util/packages

Ce répertoire contient le gros des programmes installés par gourous. Chaque « package » est installé dans un sous-répertoire distinct. Un « package » est un ensemble de fichiers reliés de plus ou moins près. Par exemple, pour un programme, le package correspondant pourra contenir : le programme lui-même, le manuel du programme, des fichiers de configuration par défaut... Un package portant le doux nom « foobar », version 3.1.4 sera normalement installé dans /usr/local/util/packages/foobar-3.1.4, et il y aura bien souvent un lien symbolique foobar -> foobar-3.1.4. Dans chaque répertoire contenant un package, il y a (ou du moins, il devrait y avoir) un fichier nommé 00README décrivant brièvement ce package.

/usr/local/util/bin, /usr/local/util/man, /usr/local/util/lib

Ces répertoires contiennent respectivement des programmes, des pages de man, et des bibliothèques. La plupart du temps, ce sont des liens symboliques pointant vers des fichiers se trouvant dans /usr/local/util/packages. Ces répertoires servent simplement à faciliter l'accès à ces fichiers.

/usr/local/util/texmf

Il contient des fichiers relatifs à TeX (macros, polices, ...). Le TeX du SPI va chercher dans ce répertoire les fichiers qu'il ne trouve pas chez lui.

/usr/local/util/skel

Il contient des fichiers utilisés par la config conscrit.

Comment utiliser /usr/local/util

Les programmes

La config conscrit fait en sorte que les programmes présents dans /usr/local/util/bin, et leurs pages de man (situées dans /usr/local/util/man) soient accessibles de manière transparente (il suffit de taper le nom d'un programme pour le lancer, et, pour avoir le man de frobnicate de taper man frobnicate).

Les bibliothèques

Il y a un point épineux : si vous voulez compiler vos propres programmes, en utilisant des bibliothèques installées par gourous. Le problème vient de la présence à différents endroits (chez gourous et chez le SPI) de différentes versions des mêmes bibliothèques. En réaction à certains ennuis qui ont eu lieu, certains gourous ont décidé de ne plus utiliser /usr/local/util/lib et /usr/local/util/include (il n'y a néanmoins pas de consensus sur cette question entre les gourous), si bien que /usr/local/util/lib n'est pas à jour par rapport à /usr/local/util/packages, et n'est donc pas utilisable.

La solution consiste à indiquer au compilateur (en fait, il s'agit du préprocesseur et du linkeur) où trouver les fichiers d'include et les bibliothèques. Supposons que vous ayez besoin de la lib crohond fournie dans le package fourmi. La lib crohond est supposée se trouver dans le fichier /usr/local/util/packages/fourmi/lib/libcrohond.so, et les fichiers d'include dans le répertoire /usr/local/util/packages/fourmi/include.

Pour les fichiers d'include,
il suffit d'ajouter un -I/usr/local/util/packages/fourmi/include à toutes les commandes de compilation (en général, il y a des variables idoines dans les Makefiles).
Pour les bibliothèques statiques,
il faut ajouter un -L/usr/local/util/packages/fourmi/lib.
Pour les bibliothèques dynamiques,
ça se corse. Le problème est double : il faut d'une part que la bibliothèque soit trouvée lors de l'exécution des programmes, et d'autre part que ça soit la bonne version qui soit trouvée. Le premier problème se résout en ajoutant un -Rrépertoire/bien/choisi en plus du -L à la commande de linkage. Le second est plus subtil. Imaginez que vous mettiez -R/usr/local/util/packages/fourmi/lib. Ça marchera au début, mais le jour où un gourou installera une version plus récente du package fourmi, il fera pointer /usr/local/util/packages/fourmi vers cette version, et ce ne sera plus la lib avec laquelle vous avez compilé au départ qui sera trouvée à l'exécution. Et rien ne garantit que cette nouvelle version soit compatible avec l'ancienne. Les bibliothèques dynamiques ont un champ SONAME, tel que (du moins en théorie) si deux bibliothèques ont le même SONAME, alors elles sont compatibles. Pour déterminer le soname de la lib crohond qui nous intéresse, il faut taper elfdump -d /usr/local/util/packages/fourmi/lib/libcrohond.so et regarder la ligne SONAME. Cela nous dira quelque chose comme libcrohond.so.3.1. Le gourou qui a installé le package fourmi a normalement pensé à mettre un lien symbolique /usr/local/util/packages/fourmi-3.1 vers le répertoire contenant le package fourmi. À chaque installation d'une nouvelle version du package, si le soname ne change pas, ce lien évoluera. Mais si le soname change, alors ce lien pointera toujours sur l'ancienne version. C'est donc /usr/local/util/packages/fourmi-3.1/lib qu'il faudra donner (via l'option -R) comme répertoire où rechercher la lib crohond. Cela donnera : -L/usr/local/util/packages/fourmi-3.1/lib -R/usr/local/util/packages/fourmi-3.1/lib à ajouter dans les commandes de compilation (en fait, il suffit de l'ajouter dans les commandes « finales », qui ne font que linker, et non dans les commandes qui compilent vraiment).