Taille: 8699
Commentaire: on continue la doc
|
← Version 60 à la date du 2018-03-03 20:33:17 ⇥
Taille: 8040
Commentaire: goodbye gui
|
Texte supprimé. | Texte ajouté. |
Ligne 1: | Ligne 1: |
## page was renamed from CransTechnique/WiKi/DocumentationCrans ## page was renamed from CransTechnique/DocumentationWikiCrans |
|
Ligne 2: | Ligne 4: |
Certaines modifications sont faites sur le wiki de MoinMoin pour nos besoins | ||<bgcolor="salmon"> /!\ Cette page est '''technique''', elle s'adresse donc aux Nounous. Pour une documentation plus potable [[SommaireDeL'Aide]] /!\ || |
Ligne 6: | Ligne 10: |
= Le making of du wiki = | = Le making-of du wiki = |
Ligne 8: | Ligne 12: |
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 du wiki. |
Ce wiki est basé sur le moteur [[http://moinmo.in|MoinMoin]], un moteur de wiki écrit en python. |
Ligne 11: | Ligne 14: |
== Où == Ce wiki est installé et est servi par un domU nommé {{{niomniom.crans.org}}}. Il est servi par le module python d'apache2. Il devrait également être possible de le servir par un fastCGI (donc en utilisant un serveur web plus léger que apache2), mais l'installation avec le module python d'apache est tellement aisé. |
Nous utilisons actuellement la version 1.9.8 de MoinMoin, qui tourne sur une machine Jessie. |
Ligne 17: | Ligne 16: |
Il ne s'agit pas exactement de la version upstream de MoinMoin, mais de la version debian légèrement modifiée. Le moteur est installé au moyen d'un paquet debian customisé, basé sur le paquet python-moinmoin. |
Sans s'intéresser davantage aux motivations de ce choix, détaillons le fonctionnement de ce wiki. |
Ligne 21: | Ligne 18: |
(On pourrait détailler davantage ici la conf d'apache2 qui va notamment: * rediriger vers une url fully-qualified * servir le vieux site web en priorité |
= Fonctionnement général = Ce wiki est installé et est servi par un domU nommé {{{niomniom.crans.org}}}, qui est le domU dédié aux sites webs du crans ([[http://autostatus.crans.org]], [[http://wiki.crans.org]], [[http://install-party.crans.org]] et [[http://federez.crans.org]]). Il est donc maintenant servi par wsgi : [[http://wiki.apache.org/logging/HelpOnInstalling]] Pour ceux qui veulent voir comment installer un wiki moinmoin sur debian : [[http://moinmo.in/MoinMoinPackages/DebianLinux]] Le grand avantage de MoinMoin est son système de plugins qui permet donc de le customiser sans avoir à le patcher, on y trouvera tout un tas de choses plus ou moins inutiles (des portails, des boxes, des macros à la con, etc.). Malheureusement, le système de plugins ne permet pas de faire tout ce qu'on voudrait, et même si la plus grande partie des customisation du Cr@ns sont incorporées sous formes de plugins, certains le sont sous forme de patches dans les sources de 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) * 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. |
Ligne 25: | Ligne 37: |
* logger là où il faut * distribuer les ressources statiques de là où elles sont installées * enfin, il envoie les requêtes au module python) Apache2 envoie toutes les requêtes à {{{/usr/share/moin/server/moinmodpy.py}}}. moinmodpy va donc 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é, {{{moinmodpy.py}}} n'aura aucun mal |
* 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 |
Ligne 35: | Ligne 46: |
C'est donc dans ce fichier que se trouvent les détails de configuration du wiki du Crans, dans laquelle 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. |
C'est donc dans ce fichier que se trouvent les détails de configuration spécifiques au wiki du Crans, dans lequel sont modifiés les paramètres dont les valeurs par défaut, définies dans {{{/usr/share/pyshared/MoinMoin/config/multiconfig.py}}}, ne nous conviennent pas. On peut à tout moment observer la configuration du wiki sur SystemInfo (attention, il faut se rajouter en superuser dans {{{/etc/moin/mywiki.py}}}) |
Ligne 40: | Ligne 51: |
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 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}}}. |
C'est dans ce fichier qu'est détaillé là où se trouvent les données du wiki, à savoir {{{/var/local/wiki/data}}}. Les underlays par contre sont maintenant dans {{{/usr/share/moin/htdocs/underlay}}} (penser à donner les bonnes permissions à chaque mise à jour de !MoinMoin), ainsi que nos plugins maisons (depuis {{{/usr/scripts/wiki}}}). Les ressources statiques sont servies directement d'une copie local du [[http://git.crans.org/?p=moin_htdocs_crans.git;a=summary|repo git des ressources statiques du wiki du Cr@ns (moin_htdocs_crans)]]. |
Ligne 46: | Ligne 57: |
On remarquera également que les ressources statiques sont configurés pour être dans les urls en {{{wiki/}}}. Apache 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. |
= Pourquoi patcher les sources = == Certaines modifications sont trop sévères pour être rajoutées en plugin == * Distinction entre un utilisateur en zone Cr@ns et un utilisateur extérieur * Les pages de la CatégoriePagePublique sont accessibles en lecture pour tous * On rajoute quelques icônes sympa * On force le thème sur certains vhosts (www.crans.org typiquement) * Les utilisateurs non authentifiés sont nommés par leur hostname plutôt que par leur ip * Pratique pour éviter de se récupérer des IPv6 imbuvables dans les ModificationsRécentes… * Il n'y a pas de reverse sur les IPv6 du Cr@ns... |
Ligne 52: | Ligne 67: |
== Modification de fichiers du paquet de MoinMoin == === 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 avaient été copiés depuis les ressources statiques fournies par le paquet dans son ancienne version, puis sauvagement hackés, ce qui les rendaient obsolètes après la mise à jour. Ils étaient donc soit laissés tels quels augmentant ainsi l'entropie, soit sauvagement hackés rendant la chose complètement immaintenable. |
Tous ces patches sont dans {{{/usr/scripts/wiki/patches}}} (il y a un peu de fuzz dans ces patches) Après une mise à jour de moinmoin (toujours critique), il peut être utile de réappliquer ces patchs: {{{cd /usr/share/pyshared; for file in /usr/scripts/wiki/patches/*; do sudo patch -Np1 < $file; done}}} |
Ligne 60: | Ligne 71: |
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. |
== D'autres au contraire se modularisent très bien == |
Ligne 66: | Ligne 73: |
=== Les modifications apportés au paquet debian === | 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()>> |
Ligne 68: | Ligne 79: |
Elles sont de trois 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 * Rajout de plugins. |
Ces plugins étant donc indépendants de MoinMoin, ils sont 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. |
Ligne 73: | Ligne 85: |
==== Hacks sauvages ==== Eux ne portent que sur le code du moteur * Servir en lecture les pages dans la CatégoriePagePublique, à quiconque le demande * 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, portent donc à la fois sur les ressources statiques et le code du moteur. * 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) ==== Rajouts de plugins ==== On retrouve dans {{{/usr/scripts/wiki-lenny/share}}} les fichiers de moinmoins que nous avons modifiés nous-mêmes. Pour qu'ils soient utilisés on supprime les originaux dans {{{/usr/share/python-support/python-moinmoin/MoinMoin}}} et on les remplaces par des liens symboliques pointant vers les fichiers correspondant dans {{{/usr/script/wiki-lenny/share}}}. Pour différencier quels fichiers il faut mettre et ne pas mettre on créé un fichier portant l'extension {{{.orig.py}}} pour ceux qu'on utiliser. Les fichiers qui s'y trouvent sont commités avec la source originale correspondant à la version du paquet debian installé. Les diffs suivants correspondent à nos modifications propres. Les lignes modifiées sont repérables avec les balises {{{ #### HACK SAUVAGE }}} et {{{ #### FIN DU HACK }}} Les patchs sont regroupés sur [[/LesPatchs|cette page]] = Ajout de macro/parser/formatter = Parce qu'on aime pimper le wiki, on a rajouter quelques autres formatters et des macros, qui sont stockés dans {{{/usr/scripts/wiki-lenny/local}}} et qu'il faut installer dans {{{/var/local/wiki/data/plugins}}} ## <<Include(/CréationDeMacro,"Création de macros", 2, from="[[[TableOfContents]]]", to="Exemple")>> == Création de parseur == == Création de formatter == /CréationDeFormatter = Ajout de thème = La partie en python s'occupant de la mise en forme est stockée dans {{{/usr/scripts/wiki-lenny/plugins/theme}}}, en effet nos themes persos sont bien des plugins du wiki. Les éléments graphiques (css et images) sont eux stockés (enfin, c'est vite dit vu le bordel que c'est) dans {{{/usr/scripts/wiki-lenny/static}}} |
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 d'obtenir le rendu qui nous plait. * les formatteurs qui nous permettent d'afficher une page web autrement qu'en {{{text/html}}} |
Ligne 120: | Ligne 91: |
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 |
Il est possible de publier des pages du wiki sous forme statique. C'est essentiellement utilisé pour les pages proxy de squid.<<BR>> Lorsqu'une modification est faite sur les pages du wiki, il faut mettre à jour les pages statiques correspondantes (ou laisser cron le faire le soir-même).<<BR>> Pour se familiariser avec la syntaxe des pages de documentation du wiki : * On commence par se logger sur le serveur sur lequel il y le wiki |
Ligne 136: | Ligne 107: |
La dernière étape consiste à mettre les fichiers générés : {{{/var/www/wifi}}} | = Comment remettre à jour le cache du wiki = {{{ sudo -u www-data moin --config-dir=/etc/moin maint cleancache --show-timings sudo -u www-data moin --config-dir=/etc/moin maint makecache --show-timings }}} |
Ligne 138: | Ligne 113: |
Utile lorsque le cache chie et que des gens se prennent des 403 sur des pages de la !CatégoriePagePublique. Depuis la dernière mise à jour du wiki, il ne devrait plus y avoir de problèmes. Cela marche aussi si une personne identifiée va sur la page incriminée et lui envoie une requête (en GET) {{{?action=refresh}}} = Configuration locale = L'édition en mode ''graphique'' n'est plus possible car elle cassait trop souvent la mise en page. Nous avons pour cela ajouté {{{editor_force = True}}} dans {{{/etc/moin/mywiki.py}}}. |
|
Ligne 140: | Ligne 121: |
* CatégoriePagePublique * CatégorieCrans |
CatégoriePagePublique CatégorieCrans |
|
Sommaire
Le making-of du wiki
Ce wiki est basé sur le moteur MoinMoin, un moteur de wiki écrit en python.
Nous utilisons actuellement la version 1.9.8 de MoinMoin, qui tourne sur une machine Jessie.
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, qui est le domU dédié aux sites webs du crans (http://autostatus.crans.org, http://wiki.crans.org, http://install-party.crans.org et http://federez.crans.org). Il est donc maintenant servi par wsgi : http://wiki.apache.org/logging/HelpOnInstalling
Pour ceux qui veulent voir comment installer un wiki moinmoin sur debian : http://moinmo.in/MoinMoinPackages/DebianLinux
Le grand avantage de MoinMoin est son système de plugins qui permet donc de le customiser sans avoir à le patcher, on y trouvera tout un tas de choses plus ou moins inutiles (des portails, des boxes, des macros à la con, etc.). Malheureusement, le système de plugins ne permet pas de faire tout ce qu'on voudrait, et même si la plus grande partie des customisation du Cr@ns sont incorporées sous formes de plugins, certains le sont sous forme de patches dans les sources de 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)
- 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 lequel sont modifiés les paramètres dont les valeurs par défaut, définies dans /usr/share/pyshared/MoinMoin/config/multiconfig.py, ne nous conviennent pas. On peut à tout moment observer la configuration du wiki sur SystemInfo (attention, il faut se rajouter en superuser dans /etc/moin/mywiki.py)
C'est dans ce fichier qu'est détaillé là où se trouvent les données du wiki, à savoir /var/local/wiki/data. Les underlays par contre sont maintenant dans /usr/share/moin/htdocs/underlay (penser à donner les bonnes permissions à chaque mise à jour de MoinMoin), ainsi que nos plugins maisons (depuis /usr/scripts/wiki). Les ressources statiques sont servies directement d'une copie local du repo git des ressources statiques du wiki du Cr@ns (moin_htdocs_crans).
Pourquoi patcher les sources
Certaines modifications sont trop sévères pour être rajoutées en plugin
- Distinction entre un utilisateur en zone Cr@ns et un utilisateur extérieur
Les pages de la CatégoriePagePublique sont accessibles en lecture pour tous
- On rajoute quelques icônes sympa
- On force le thème sur certains vhosts (www.crans.org typiquement)
- Les utilisateurs non authentifiés sont nommés par leur hostname plutôt que par leur ip
Pratique pour éviter de se récupérer des IPv6 imbuvables dans les ModificationsRécentes…
- Il n'y a pas de reverse sur les IPv6 du Cr@ns...
Tous ces patches sont dans /usr/scripts/wiki/patches (il y a un peu de fuzz dans ces patches) Après une mise à jour de moinmoin (toujours critique), il peut être utile de réappliquer ces patchs: cd /usr/share/pyshared; for file in /usr/scripts/wiki/patches/*; do sudo patch -Np1 < $file; done
D'autres au contraire se modularisent très bien
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, 2025-05-12
Ces plugins étant donc indépendants de MoinMoin, ils sont 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 d'obtenir le rendu qui nous plait.
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. C'est essentiellement utilisé pour les pages proxy de squid.
Lorsqu'une modification est faite sur les pages du wiki, il faut mettre à jour les pages statiques correspondantes (ou laisser cron le faire le soir-même).
Pour se familiariser avec la syntaxe des pages de documentation du wiki :
- On commence par se logger 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).
Comment remettre à jour le cache du wiki
sudo -u www-data moin --config-dir=/etc/moin maint cleancache --show-timings sudo -u www-data moin --config-dir=/etc/moin maint makecache --show-timings
Utile lorsque le cache chie et que des gens se prennent des 403 sur des pages de la CatégoriePagePublique. Depuis la dernière mise à jour du wiki, il ne devrait plus y avoir de problèmes. Cela marche aussi si une personne identifiée va sur la page incriminée et lui envoie une requête (en GET) ?action=refresh
Configuration locale
L'édition en mode graphique n'est plus possible car elle cassait trop souvent la mise en page. Nous avons pour cela ajouté editor_force = True dans /etc/moin/mywiki.py.