Taille: 3373
Commentaire:
|
Taille: 9606
Commentaire: passage à wsgi
|
Texte supprimé. | Texte ajouté. |
Ligne 1: | Ligne 1: |
## page was renamed from CransNousnous/DocumentationWikiCrans | |
Ligne 3: | Ligne 4: |
= Modification de fichiers du paquet de MoinMoin = On retrouve dans {{{/usr/scripts/wiki}}} des liens symboliques vers des fichiers de MoinMoin. Cela nous permet d'identifier les fichiers modifiés et de les ajouter au CVS. |
<<TableOfContents>> |
Ligne 6: | Ligne 6: |
Les fichiers qui s'y trouvent sont commités en version 1.1 avec la source originale correspondant à la version {{{1.3.4-3}}} . Les diffs suivants correspondent à nos modifications propres. Les lignes modifiées sont repérables avec les balises {{{#### HACK SAUVAGE et #### FIN DU HACK }}} |
= Le making-of du wiki = |
Ligne 12: | Ligne 8: |
= Ajout de macro/parser/formatter = Ces éléments sont stockées dans dans leur répertoire respectif dans {{{/usr/scripts/wiki}}} |
Ce wiki est basé sur le moteur [[http://moinmo.in|MoinMoin]], un moteur de wiki écrit en python. Sans s'intéresser davantage aux motivations de ce choix, détaillons le fonctionnement de ce wiki. |
Ligne 15: | Ligne 11: |
== Création de macro == Toutes les macro on une fonction principale execute(macro,arg). arg est l'argument donné à la macro. macro.formatter (f) permet de créé le code correspondant à ce que l'on veut afficher à l'aide de méthode: |
= Fonctionnement général = Ce wiki est installé et est servi par un domU nommé {{{niomniom.crans.org}}}. Il était servi par le module python d'apache2. Cette solution n'était pas recommandée par les devs de moinmoin, il est maintenant donc servi, comme cela est recommandé par wsgi: HelpOnInstalling/ApacheWithModWSGI |
Ligne 18: | Ligne 17: |
* {{{code=f.text(u"bonjour") }}} [[help(text(u"bonjour"))]] |
Il ne s'agit pas exactement de la version upstream de MoinMoin, mais de la version packagée dans debian lenny légèrement modifiée. Le moteur est installé au moyen d'un paquet debian customisé, basé sur le paquet [[http://packages.debian.org/lenny/python-moinmoin|python-moinmoin]]. |
Ligne 22: | Ligne 22: |
Beaucoup de méthode s'utilise par paire: *{{{code=f.strong(1) code+=f.text(u"bonjour") code+=f.strong(0)}}} [[help(strong(1),text(u"bonjour"),strong(0))]] |
Détaillons tout d'abord rapidement la conf d'apache2 qui va notamment: * rediriger vers une url fully-qualified (avec un vhost www, wiki) * servir le vieux site web en priorité (en rajoutant old_www devant les urls de l'ancien site web en [PT]) * distribuer les ressources statiques de là où elles sont installées (cela inclut old_www/). Il faut pour cela utiliser des Alias, pour que apache2 comprenne bien qu'il doit fournir les fichiers. * forcer le SSL pour les envois de données "sensibles" * enfin, les requêtes passent par WSGI |
Ligne 29: | Ligne 29: |
*{{{code=f.underline(1) code+=f.text(u"bonjour") code+=f.underline(0)}}} [[help(underline(1),text(u"bonjour"),underline(0))]] |
Apache2 envoie enfin toutes les requêtes à {{{/usr/share/moin/server/moin.wsgi}}}. moinmodpy va ensuite charger sa configuration {{{/etc/moin/farmconfig.py}}}, qui est la conf de base fournie par debian (dans {{{/usr/share/moin/config/wikifarm}}}) MoinMoin étant correctement installé, {{{moin.wsgi}}} n'aura aucun mal à trouver le moteur. |
Ligne 34: | Ligne 35: |
*{{{code=f.highlight(1) code+=f.text(u"bonjour") code+=f.highlight(0)}}} [[help(highlight(1),text(u"bonjour"),highlight(0))]] |
Ainsi la configuration du wiki du crans, {{{/etc/moin/mywiki.py}}} est chargée par {{{wikifarm.py}}}. C'est donc dans ce fichier que se trouvent les détails de configuration spécifiques au wiki du Crans, dans lequelle sont modifiés les paramètres dont les valeurs par défaut, définies dans {{{/usr/share/python-support/python-moinmoin/MoinMoin/config/multiconfig.py}}}, ne nous conviennent pas. |
Ligne 39: | Ligne 41: |
*{{{code=f.emphasis(1) code+=f.text(u"bonjour") code+=f.emphasis(0)}}} [[help(emphasis(1),text(u"bonjour"),emphasis(0))]] |
Notamment, c'est dans ce fichier qu'est détaillé là où se trouvent les données du wiki, à savoir {{{/var/local/wiki/data}}}. Notons néanmoins que là se trouve aussi installé (en fait linké) des ressources, la documentation (linkée depuis là où elle a été installée par le paquet debian, {{{/usr/share/moin/htdocs/underlay}}}), ainsi que quelques-uns des plugins (qui sont des scripts) depuis {{{/usr/scripts}}}. |
Ligne 44: | Ligne 47: |
*{{{code=f.number_list(1) code+=f.listitem(1) code+=f.text(u"bonjour") code+=f.listitem(0) code+=f.listitem(1) code+=f.text(u"bonjour") code+=f.listitem(0) code+=f.number_list(0)}}} [[help(number_list(1),listitem(1),text(u"bonjour"),listitem(0),listitem(1),text(u"bonjour"),listitem(0),number_list(0))]] |
On remarquera également que les ressources statiques sont configurées pour être dans les urls en {{{^wiki/.*$}}}. Apache2 sait donc qu'il doit rediriger ces requêtes vers les ressources statiques qui sont dans {{{/usr/share/moin/htdocs}}}, installées par notre paquet debian custom. C'est là que se trouvent donc les icônes ainsi que les css et les scripts javascript. |
Ligne 54: | Ligne 53: |
*{{{code=f.bullet_list(1) code+=f.listitem(1) code+=f.text(u"bonjour") code+=f.listitem(0) code+=f.listitem(1) code+=f.text(u"bonjour") code+=f.listitem(0) code+=f.bullet_list(0)}}} [[help(bullet_list(1),listitem(1),text(u"bonjour"),listitem(0),listitem(1),text(u"bonjour"),listitem(0),bullet_list(0))]] |
= Modifications apportées au paquet debian = == Pourquoi un paquet debian custom == Les hacks du wiki se sont tout d'abord accumulés dans {{{/usr/scripts}}}. Cela causait une pagaille noire lors de mises à jour de MoinMoin. Il fallait déjà réinstaller tous les hacks, et de nombreux fichiers ayant été copiés depuis les ressources statiques fournies par le paquet dans son ancienne version, puis sauvagement hackés, se retrouvaient ainsi obsolètes après la mise à jour. Ils étaient donc soit laissés tels quels, et foutaient la merde, soit sauvagement hackés, en tout cas rien de très propre. |
Ligne 64: | Ligne 61: |
*{{{code=f.text(u"bon") code+=f.sup(1) code+=f.text(u"jour") code+=f.sup(0)}}} [[help(text(u"bon"),sup(1),text(u"jour"),sup(0))]] |
L'utilisation d'un paquet custom rend la procédure d'installation complètement triviale. Actuellement, en dehors des modifications apportées dans le paquet {{{pyton-moinmon}}}, le seul fichier qu'il faudra mettre à jour à la main lors des mises à jour est le fichier de conf spécifique au wiki du crans {{{/etc/moin/mywiki.py}}}. Il faudra peut-être aussi convertir les données du wiki, mais nos amis les packageurs de debian veilleront à nous fournir des scripts adéquats. |
Ligne 70: | Ligne 67: |
*{{{code=f.text(u"bon") code+=f.sub(1) code+=f.text(u"jour") code+=f.sub(0)}}} [[help(text(u"bon"),sub(1),text(u"jour"),sub(0))]] |
== Les modifications apportés au paquet debian == Elles sont de plusieurs types: * Hacks sauvages pour gérer de manière plus agréable les permissions et permettre un wiki à deux régimes. * Modifications assez importantes du code de rendering (et des ressources statiques associées) pour afficher des portails et des boîtes * Ajout des thèmes par défaut du Crans |
Ligne 76: | Ligne 73: |
*{{{code = f.table(1) code += f.table_row(1) code += f.table_cell(1) code += f.text(u"bonjour") code += f.table_cell(0) code += f.table_row(0) code = f.table(0)}}} [[help(table(1),table_row(1),table_cell(1),text(u"bonjour"),table_cell(0),table_row(0),table(0))]] |
=== Hacks sauvages === Eux ne portent que sur le code du moteur. Certaines pourraient certes être rajoutées uniquement comme plugins, mais d'autres ne le peuvent pas, ainsi par souci de cohérence, on les rajoute tous dans le code du moteur. * Servir en lecture les pages dans la CatégoriePagePublique, à quiconque le demande. * Remarquons un gros hack dégueulasse, car pour récupérer les catégories d'une page; pré-hack, il fallait avoir le droit de la lire. * Refuser la création d'un compte crans en dehors de la zone Crans. * Afficher le nom de la machine lors d'une modification effectuée par un anonyme depuis la zone Crans (on a en effet remarqué que bien souvent le propriétaire, ou tout du moins son surnom, pouvait être inféré depuis le nom d'hôte de sa machine). * Forcer un thème en fonction du !VirtualHost (un thème de "site web" pour www.crans.org, alors que le thème par défaut est un thème "wiki") * Modification du template pour dumper le wiki (pour les pages proxy) === Modifications du code de rendering === Pour pouvoir afficher des boxes et des portails, les modifications apportées au code de !MoinMoin, portent à la fois sur les ressources statiques et sur le code du moteur. Là encore c'est parce qu'il n'est pas possible de toutes les déclarer dans des plugins qu'on les incorpore directement dans le paquet python-moinmoin. * Création de nouvelles primitives de rendering ({{{crans_box}}} et {{{crans_portal}}}) * Leur implémentation en html * Leur implémentation en css (ajoutées aux ressources statiques) * rajout des images nécessaires (ajoutées aux ressources statiques) === Ajout des thèmes par défaut du Crans === Comme un thème impose l'ajout de nombreuses ressources binaires ou pas (images, css, js), et le dépot darcs des scripts du crans n'étant pas l'endroit idéal pour les stocker, ceux-ci ont donc directement été rajoutés dans le paquet custom. * {{{crans}}}: le thème wiki par défaut * {{{crans-www}}}: le thème site web forcé sur www.crans.org * {{{anti-hadopi}}}: un thème pour le blackout contre HADOPI |
Ligne 86: | Ligne 102: |
= Ajout de thème = La partie en python s'occupant de la mise en forme est stockée dans {{{/usr/scripts/wiki/theme}}} |
= Les plugins (non incorporés au paquet custom) = |
Ligne 89: | Ligne 104: |
Les éléments graphiques (css et images) sont eux stockés dans {{{/usr/share/moin/htdocs/le_nom_du_theme}}} * D'ailleurs on pourrait aussi les déplacer ailleurs et mettre des liens symboliques. Mais où ? Dans {{{/usr/scripts/wiki/theme}}} ou ailleurs ? |
MoinMoin permet de créer assez facilement des plugins spécifiques à un wiki. Le Crans en utilise beaucoup, particulièrement les macros qui sont de petits bouts de code python qui permettent, "appelés" dans le code source d'une page l'affichage de quelques données obtenues par un bout de code en python, typiquement {{{<<Date()}}} qui affiche le jour d'aujourd'hui, <<Date()>> Ces plugins étant donc indépendants de MoinMoin, ils sont donc logiquement installés dans {{{/var/local/wiki/data/plugins}}} (linkés en fait), depuis {{{/usr/scripts}}}, plutôt que d'être rajoutés dans le paquet debian custom avec les macros fournies par défaut dans MoinMoin. Ces plugins sont de plusieurs types, citons notamment: * les macros, qui appelées par leur noms {{{CustomMacro()}}} dans le code source d'une page provoquent l'exécution du bout de code associé ({{{/var/local/wiki/data/plugins/macros/custommacro.py}}}) et sont remplacés par sa sortie. /CréationDeMacro * les parseurs qui permettent d'afficher le contenu de pièces jointes (éventuellement inlinées), et qui nous autorisent à les renderer à notre guise. /CréationDeParseur * les formatteurs qui nous permettent d'afficher une page web autrement qu'en {{{text/html}}} = Comment dumper le wiki = Il est possible de publier des pages du wiki sous forme statique comme on en trouve [[https://wifi.crans.org/wiki/WiFi.html|ici]].<<BR>> Lorsqu'une modification est faite sur les pages du wiki, il faut mettre à jour les pages statiques correspondantes.<<BR>> Cette manipulation se fait facilement grâce aux scripts fournis avec moinmoin: * On commence par se logguer sur le serveur sur lequel il y le wiki * On crée un répertoire temporaire destiné à accueillir les futures pages statiques générées (par exemple dans son home {{{~/dump_temp}}}). * On peut ensuite lancer le script (en temps que www-data, parce qu'on est pas un gros porc) en lui passant comme arguments, le nom des pages sous forme d'expression régulière et le répertoire de destination des pages statiques. Ex : {{{ sudo -u www-data moin \ --config-dir=/etc/moin --wiki-url=http://wiki.crans.org/ \ export dump \ --page "WiFi(/PositionnementDesBornes|/AvoirLeWifi.*)?" \ --target-dir=/home/myname/outputdir }}} Les pages générées seront dans le répertoire {{{~/outputdir}}} et les pièces jointes correspondantes seront dans le répertoire {{{~/outputdir/attachment}}}. Penser à donner les droits en écriture à {{{www-data}}}.<<BR>> Ne pas oublier de linker les images (bien souvent dans {{{./crans/img}}}). La dernière étape consiste à mettre les fichiers générés : {{{/var/www/wifi}}} |
Ligne 92: | Ligne 142: |
["CatégorieCrans/PageNonTerminée"] : il serait bon de lui ajouter les patchs actuels et intégrer cette page à VieWiki pour la rendre accessible simplement | CatégoriePagePublique CatégorieCrans |
Certaines modifications sont faites sur le wiki de MoinMoin pour nos besoins
Sommaire
Le making-of du wiki
Ce wiki est basé sur le moteur MoinMoin, un moteur de wiki écrit en python. Sans s'intéresser davantage aux motivations de ce choix, détaillons le fonctionnement de ce wiki.
Fonctionnement général
Ce wiki est installé et est servi par un domU nommé niomniom.crans.org. Il était servi par le module python d'apache2. Cette solution n'était pas recommandée par les devs de moinmoin, il est maintenant donc servi, comme cela est recommandé par wsgi: HelpOnInstalling/ApacheWithModWSGI
Il ne s'agit pas exactement de la version upstream de MoinMoin, mais de la version packagée dans debian lenny légèrement modifiée. Le moteur est installé au moyen d'un paquet debian customisé, basé sur le paquet python-moinmoin.
Détaillons tout d'abord rapidement la conf d'apache2 qui va notamment:
- rediriger vers une url fully-qualified (avec un vhost www, wiki)
- servir le vieux site web en priorité (en rajoutant old_www devant les urls de l'ancien site web en [PT])
- distribuer les ressources statiques de là où elles sont installées (cela inclut old_www/). Il faut pour cela utiliser des Alias, pour que apache2 comprenne bien qu'il doit fournir les fichiers.
- forcer le SSL pour les envois de données "sensibles"
- enfin, les requêtes passent par WSGI
Apache2 envoie enfin toutes les requêtes à /usr/share/moin/server/moin.wsgi. moinmodpy va ensuite charger sa configuration /etc/moin/farmconfig.py, qui est la conf de base fournie par debian (dans /usr/share/moin/config/wikifarm) MoinMoin étant correctement installé, moin.wsgi n'aura aucun mal à trouver le moteur.
Ainsi la configuration du wiki du crans, /etc/moin/mywiki.py est chargée par wikifarm.py. C'est donc dans ce fichier que se trouvent les détails de configuration spécifiques au wiki du Crans, dans lequelle sont modifiés les paramètres dont les valeurs par défaut, définies dans /usr/share/python-support/python-moinmoin/MoinMoin/config/multiconfig.py, ne nous conviennent pas.
Notamment, c'est dans ce fichier qu'est détaillé là où se trouvent les données du wiki, à savoir /var/local/wiki/data. Notons néanmoins que là se trouve aussi installé (en fait linké) des ressources, la documentation (linkée depuis là où elle a été installée par le paquet debian, /usr/share/moin/htdocs/underlay), ainsi que quelques-uns des plugins (qui sont des scripts) depuis /usr/scripts.
On remarquera également que les ressources statiques sont configurées pour être dans les urls en ^wiki/.*$. Apache2 sait donc qu'il doit rediriger ces requêtes vers les ressources statiques qui sont dans /usr/share/moin/htdocs, installées par notre paquet debian custom. C'est là que se trouvent donc les icônes ainsi que les css et les scripts javascript.
Modifications apportées au paquet debian
Pourquoi un paquet debian custom
Les hacks du wiki se sont tout d'abord accumulés dans /usr/scripts. Cela causait une pagaille noire lors de mises à jour de MoinMoin. Il fallait déjà réinstaller tous les hacks, et de nombreux fichiers ayant été copiés depuis les ressources statiques fournies par le paquet dans son ancienne version, puis sauvagement hackés, se retrouvaient ainsi obsolètes après la mise à jour. Ils étaient donc soit laissés tels quels, et foutaient la merde, soit sauvagement hackés, en tout cas rien de très propre.
L'utilisation d'un paquet custom rend la procédure d'installation complètement triviale. Actuellement, en dehors des modifications apportées dans le paquet pyton-moinmon, le seul fichier qu'il faudra mettre à jour à la main lors des mises à jour est le fichier de conf spécifique au wiki du crans /etc/moin/mywiki.py. Il faudra peut-être aussi convertir les données du wiki, mais nos amis les packageurs de debian veilleront à nous fournir des scripts adéquats.
Les modifications apportés au paquet debian
Elles sont de plusieurs types:
- Hacks sauvages pour gérer de manière plus agréable les permissions et permettre un wiki à deux régimes.
- Modifications assez importantes du code de rendering (et des ressources statiques associées) pour afficher des portails et des boîtes
- Ajout des thèmes par défaut du Crans
Hacks sauvages
Eux ne portent que sur le code du moteur. Certaines pourraient certes être rajoutées uniquement comme plugins, mais d'autres ne le peuvent pas, ainsi par souci de cohérence, on les rajoute tous dans le code du moteur.
Servir en lecture les pages dans la CatégoriePagePublique, à quiconque le demande.
- Remarquons un gros hack dégueulasse, car pour récupérer les catégories d'une page; pré-hack, il fallait avoir le droit de la lire.
- Refuser la création d'un compte crans en dehors de la zone Crans.
- Afficher le nom de la machine lors d'une modification effectuée par un anonyme depuis la zone Crans (on a en effet remarqué que bien souvent le propriétaire, ou tout du moins son surnom, pouvait être inféré depuis le nom d'hôte de sa machine).
Forcer un thème en fonction du VirtualHost (un thème de "site web" pour www.crans.org, alors que le thème par défaut est un thème "wiki")
- Modification du template pour dumper le wiki (pour les pages proxy)
Modifications du code de rendering
Pour pouvoir afficher des boxes et des portails, les modifications apportées au code de MoinMoin, portent à la fois sur les ressources statiques et sur le code du moteur. Là encore c'est parce qu'il n'est pas possible de toutes les déclarer dans des plugins qu'on les incorpore directement dans le paquet python-moinmoin.
Création de nouvelles primitives de rendering (crans_box et crans_portal)
- Leur implémentation en html
- Leur implémentation en css (ajoutées aux ressources statiques)
- rajout des images nécessaires (ajoutées aux ressources statiques)
Ajout des thèmes par défaut du Crans
Comme un thème impose l'ajout de nombreuses ressources binaires ou pas (images, css, js), et le dépot darcs des scripts du crans n'étant pas l'endroit idéal pour les stocker, ceux-ci ont donc directement été rajoutés dans le paquet custom.
crans: le thème wiki par défaut
crans-www: le thème site web forcé sur www.crans.org
anti-hadopi: un thème pour le blackout contre HADOPI
Les plugins (non incorporés au paquet custom)
MoinMoin permet de créer assez facilement des plugins spécifiques à un wiki. Le Crans en utilise beaucoup, particulièrement les macros qui sont de petits bouts de code python qui permettent, "appelés" dans le code source d'une page l'affichage de quelques données obtenues par un bout de code en python, typiquement <<Date() qui affiche le jour d'aujourd'hui, 2024-08-18
Ces plugins étant donc indépendants de MoinMoin, ils sont donc logiquement installés dans /var/local/wiki/data/plugins (linkés en fait), depuis /usr/scripts, plutôt que d'être rajoutés dans le paquet debian custom avec les macros fournies par défaut dans MoinMoin.
Ces plugins sont de plusieurs types, citons notamment:
les macros, qui appelées par leur noms CustomMacro() dans le code source d'une page provoquent l'exécution du bout de code associé (/var/local/wiki/data/plugins/macros/custommacro.py) et sont remplacés par sa sortie. /CréationDeMacro
les parseurs qui permettent d'afficher le contenu de pièces jointes (éventuellement inlinées), et qui nous autorisent à les renderer à notre guise. /CréationDeParseur
les formatteurs qui nous permettent d'afficher une page web autrement qu'en text/html
Comment dumper le wiki
Il est possible de publier des pages du wiki sous forme statique comme on en trouve ici.
Lorsqu'une modification est faite sur les pages du wiki, il faut mettre à jour les pages statiques correspondantes.
Cette manipulation se fait facilement grâce aux scripts fournis avec moinmoin:
- On commence par se logguer sur le serveur sur lequel il y le wiki
On crée un répertoire temporaire destiné à accueillir les futures pages statiques générées (par exemple dans son home ~/dump_temp).
- On peut ensuite lancer le script (en temps que www-data, parce qu'on est pas un gros porc) en lui passant comme arguments, le nom des pages sous forme d'expression régulière et le répertoire de destination des pages statiques. Ex :
sudo -u www-data moin \ --config-dir=/etc/moin --wiki-url=http://wiki.crans.org/ \ export dump \ --page "WiFi(/PositionnementDesBornes|/AvoirLeWifi.*)?" \ --target-dir=/home/myname/outputdir
Les pages générées seront dans le répertoire ~/outputdir et les pièces jointes correspondantes seront dans le répertoire ~/outputdir/attachment. Penser à donner les droits en écriture à www-data.
Ne pas oublier de linker les images (bien souvent dans ./crans/img).
La dernière étape consiste à mettre les fichiers générés : /var/www/wifi