Description des utilitaires Intranet

source :
  http://192.9.210.24/tws/tools/doc/README.html
  1999-Aug-25   21:48

1) Heritage de l'environnement

Sourcer le fichier .twsrc en utilisant l'alias use_web. A defaut, utiliser la commande :

 . /Web/tools/.twsrc

2) Description de ce qui est fait chaque soir

La mise a jour de toute l'arborescence necessite plusieurs passes successives :

  1. mettre a jour le tableau associatif de toutes les arborescences a traiter, avec leurs proprietaires respectifs,
  2. generer la liste de tous les repertoires de l'arborescence qui doivent etre manipules par les outils (il existe une directive .keep qui permet de bloquer l'acces a certaines arborescences),
  3. generer la liste de tous les fichiers de l'arborescence, afin de creer les tableaux associatifs utilises par le createur de liens (fichiers html, fichiers image, autres fichiers),
  4. parcourir la liste de tous les repertoires non proteges, et lancer un make qui possede une regle de transformation des .txt en .html. Les fichiers .html generes possedent les liens hypertexte (autres fichiers, images),
  5. parcourir la liste de tous les repertoires non proteges, et generer le ficheir index.html si la directive index.auto existe. Cet index est compose de liens sur tous les sous-repertoires (automatiquement commentes avec le .header (si il existe) et tous les fichiers .html (dont le titre apparait dans le lien). Chaque index possede le pied de page par defaut footer.html.template, qui permet de naviguer rapidement dans l'arborescence.

3) Directives et fichiers speciaux

3.1) .keep : ne pas toucher a cette arborescence

Pour eviter de transformer les .txt en .html en dessous d'un repertoire, creer le fichier .keep dans ce repertoire avec :

touch .keep

Tous les repertoires en-dessous de ce repertoire seront exclus de la liste des repertoires a traiter.

3.2) index.auto : generer automatiquement un fichier index.html

Pour les repertoires simples, il y a peu d'interet a ecrire a la main un fichier index.txt. Ou pire : un fichier index.html...

Pour generer automatiquement le fichier index.html dans ces repertoires, creer le fichier index.auto dans ce repertoire avec :

touch index.auto

3.3) .header : la description du contenu d'un repertoire

En l'absence de fichier index.html, le serveur HTTP affiche une vue complete de tous les fichiers du repertoire, avec un titre par defaut : Index of nom_du_repertoire. Le navigateur utilise la mise en page basique, correspondant a l'affichage d'un fichier ASCII ou d'une page correspondant a un URL de type ftp.

Si le fichier .header est present dans ce repertoire, le serveur HTTP utilise son contenu en guise de titre, et affiche . Si le fichier .header.html est present, la mise en page devient celle du fichier .header.html.

Si le repertoire n'est pas protege par une directive .keep, le fichier .header est automatiquement transforme en fichier .header.html.

3.4) .footer : le bas de page pour les affichages en mode liste

Si ce fichier est present dans un repertoire, il sera affiche en bas de page si et seulement si le fichier index.html n'existe pas.

Si le repertoire n'est pas protege par une directive .keep, le fichier .footer est automatiquement transforme en fichier .footer.html.

Comme il est preferable de generer automatiquement les index, ce fichier n'a d'utilite que pour les repertoires qui doivent etre affiches en mode liste. Par exemple, une arborescence de programmes binaires, sur lesquels il suffit de cliquer pour qu'ils soient sauves en local sur le poste de consultation.

3.5) Makefile

Le fichier Makefile contient LA regle qui permet de generer un fichier .html a partir d'un fichier .txt.

%.html : %.txt $(FORCE)
	@$(WEBTOOLS)/txt2html.sh  $<
	@-$(CHOWN) $@

Il contient egalement une regle similaire pour la conversion des fichiers .rtf en fichiers .html, ainsi qu'une dependance pour verifier que le tableau associatif des arborescences a traiter est bien a jour.

Au passage, on s'offre la transformation automatique des fichiers .rtf en fichiers .html, grace a l'utilitaire rtf2html. Le resultat n'est pas parfait, mais c'est toujours mieux que rien. rtf2html a tout de meme la bonne idee de creer un fichier ToC ("Table of Contents"), qui peut servir d'intermediaire de navigation. Le TOP serait une segmentation automatique du fichier en petits fichiers .html avec barre de navigation. Si vous avez l'inspiration...)

La commande make est lancee par l'utilitaire make_html_files.pl, pour chaque repertoire non protege trouve dans la liste megalist_of_dirs.

La transformation se fait en trois etapes :

NOTE : cette decomposition en trois passes est sans doute optimisable en un seul fichier (ce sont des premiers scripts de debutant, ils sont farcis des defauts qui font bondir les puristes).

3.6) footer.html.template

Le fichier footer.html.template contient le pied de page par defaut, utilise par deux utilitaires :

4) Mode Automatique

La table des jobs automatiques (le crontab du compte root) de bunny.pf contient une ligne qui lui indique qu'il faut lancer make_everything_but_coffee.sh chaque nuit :

0 1 * * 1-5     /Web/tools/make_everything_but_coffee.sh

4.1) make_everything_but_coffee.sh

Le script make_everything_but_coffee.sh se charge d'appeler tous les autres, dans le bon ordre, pour mettre a jour toute l'arborescence Intranet.

Il commence par effacer les fichiers d'erreurs :

Puis il lance les scripts : C'est automatique, mais il vaut mieux le lancer la nuit quand tout le monde dort...

Pour les options, aller aux chapitres 5.1 et 5.2.

4.2) manage_trees_to_browse.pl

Ce script est appele via le Makefile, si le fichier ASCII list_of_trees_to_browse des arborescences a traiter a ete mis a jour.

La mise de ces arborescences dans un tableau associatif semble luxueuse, mais il suffit de comparer le temps de traitement du fichier ASCII et de l'acces direct dans le HASH ARRAY pour comprendre. D'autant plus que tous les autres scripts utilisent ces informations : il serait stupide de decortiquer l'ASCII a chaque execution.

4.3) get_unprotected_dirs.pl

Le script get_unprotected_dirs.pl cherche TOUS les repertoires de l'arborescence, puis TOUS les repertoires qui contiennent la directive .keep.

Il utilise cette derniere liste pour soustraires les repertoires (et les sous repertoires) de la liste principale : files/megalist_of_dirs.

4.4) make_html_files.pl

Le script make_html_files.pl parcours tous les repertoires non proteges, et y lance la commande make -f $WEBTOOLS/Makefile.

Les fichiers .html sont generes automatiquement par le script txt2html.sh si les fichiers .txt correspondants sont plus recents, ou bien si la version .html n'existe pas.

Si un ou plusieurs liens ne sont pas resolus, le nom du fichier est ajoute a la liste des fichiers a probleme qui auront droit a une deuxieme chance : log_unresolved. Il faut d'abord creer tous les fichiers .html potentiels, meme incomplets, pour que le script make_web_files.pl puisse les repertorier.

La commande make est passee avec l'option OWNER=proprietaire_arborescence, afin que les fichiers crees puissent etre effaces si necessaire par le proprietaire des lieux...

4.5) make_txt2html_files.pl

Le script make_txt2html_files.pl genere la liste de TOUS les fichiers de l'arborescence, y compris les fichiers des repertoires proteges.

A partir de cette liste, il genere quatre tableaux associatifs:

  1. list_of_linkspaths : le tableau des fichiers hypertexte linkables,
  2. list_of_linkstitles : le tableau des titres des fichiers hypertexte linkables,
  3. list_of_images : le tableau des images .gif et .jpg disponibles,
  4. list_of_stuff : le tableau de tous les autres fichiers, pour des references directes.

4.6) try_again_make_html_files.pl

Le scipt try_again_make_html_files.pl parcours la liste de tous les fichiers dans lesquels il y a eu des problemes avec la resolution automatique des liens : log_unresolved.

Ce script permet de resoudre la creation simultanee de plusieurs fichiers .txt, qui se font reference :

4.7) make_index_files.pl

Le script make_index_files.pl parcours tous les repertoires non proteges, et y lance la commande make -f $WEBTOOLS/Makefile index.html.

Le target index.html correspond a une directive qui declenche la generation du fichier si la date de derniere modifocation du repertoire est plus recente que la date de index.html. En clair, si il se passe quelquechose dans le repertoire, on refait un index au cas ou.

La commande make est passee avec l'option OWNER=proprietaire_arborescence, afin que les fichiers index.html puissent etre effaces si necessaire par le proprietaire des lieux...

5) Mode manuel, pour verifier tout de suite que tout est OK

5.1) make_everything_but_coffee.sh purge

Reservee a root, cette option permet d'effacer les fichiers megalist_of_XXXXX, et de refaire une mise a jour de tout ce qui est disponible, par exemple apres la modification de la liste de arborescences list_of_trees_to_browse.

5.2) make_everything_but_coffee.sh purge force

Reservee egalement a root, l'option force fait un patch dans le fichier Makefile :

sed s/^FORCE=.*$/FORCE=force/ < $WEBTOOLS/Makefile > $WEBTOOLS/Makefile2
mv $WEBTOOLS/Makefile2 $WEBTOOLS/Makefile

La target force est vide, mais cela suffit pour provoquer a coup sur la regle :

%.html : %.txt $(FORCE)
	@$(WEBTOOLS)/txt2html.sh  $<
	@-$(CHOWN) $@

En clair, cette option garantit que TOUS les fichiers .html qui sont generes a partir de .txt seront refait a neuf.

Ca prend un certain temps, mais ca permet aussi de faire la chasse aux problemes :

Le patch FORCE=force disparait a l'execution suivante de make_everything_but_coffee.sh.

Pour une execution au coup par coup, utiliser la commande forcehtml.

5.3) les raccourcis pour l'execution a la main

Si vous sourcez le fichier .twsrc, et que votre SHELL accepte les aliases, vous heritez de :

La demarche classique pour un utilisateur est :




Ce fichier contient au moins une reference hypertexte qui n'a pas pu etre resolue automatiquement par 'txt2html'...

(cf: description_des_tags)   (file: .twsrc)   (file: make_web_files.pl)   (file: Makefile)   (file: /bunny.pf/usr/spool/cron/crontabs/root)   (file: Makefile)   (file: .twsrc)