Installation de Moinmoin sur lévinux

-- JacquesDaignault 2006-07-07 03:02:59

Première installation: curriculumforge

Nom de domaine

  • curriculumforge.org
    • Alias reconnus :
      • curriculumforge.org (anglais)
      • www.curriculumforge.org (anglais)
      • en.curriculumforge.org (anglais)
      • www.en.curriculumforge.org (anglais)
      • fr.curriculumforge.org (français) *
      • www.fr.curriculumforge.org (français)

Le type d'installation

Il y a en gros deux classes d'installation : site personnel ou site public. Curriculumforge est évidemment un serveur public. On avait quatre possibilités : twisted (avec proxypass sur apache, par exemple), mod_python (module python pour apache) cgi et fastcgi. Cgi et twisted on vite été éliminés. CGI est trop lent et twisted impliquait de renégocier d'autres ports sur le firewall de l'Université. Restait donc mod_python et fastcgi. Le premier est un peu plus facile que le second à installer et les performances sont apparement comparables. Par contre, mod_python est moins souple au plan de la sécurité, ses processus appartiennent nécessairement à apache. Par défaut, fastcgi n'est pas différent, mais combiné au module suexec il permet de lancer les processus sous d'autres user/group. Fastcgi a donc été retenu, même si Curriculumforge ne tire pas encore avantage de suexec: les utilisateurs sont créés avec ldap (suexec cherche dans /etc/passwd et /etc/group) et la structure de moinmoin (htdocs et data dans des répertoires différents et non accesibles pour apache via le root_document est déjà très sécuritaire. Il était quand même logique de garder la porte ouverte.....

Répertoires

  • /usr/share/moin/curriculumforge/ (le répertoire de base)
    • /usr/share/moin/curriculumforge/htdocs/ (le répertoire contenant les thèmes -- les trois de base et les deux cf --, les applets, les pages html et quelques fichiers isolés

      • /usr/share/moin/curriculumforge/htdocs/cf-fr/ (le répertoire css et img de curriculumforge en français)
      • /usr/share/moin/curriculumforge/htdocs/cf-en/ (le répertoire css et img. de curriculunforge en anglais)
  • /usr/share/moin/curriculumforge/archives-moin-iaacs (les anciennes config fr/htdocs et en/htdocs d'iaacs, incluant les logos iaacs)
  • /home/laforge/curriculumforge.org (le DocumentRoot de base qui appartient à laforge1 et qui est bidon 2

    • /home/laforge/fr/data/ (le répertoire des données en français)
    • /home/laforge/en/data/ (le répertoire des données en anglais)
    • /home/laforge/modele/data (un répertoire-gabarit pour tout nouveau site dans la "ferme" de curriculumforge)
  • /usr/share/moin/underlay (le répertoire des pages système appartenant à apache:apache; il est en dehors de curriculumforge puisqu'il pourrait servir à d'autres "fermes". Il contient pour l'instant les pages système en français (installées directement depuis le wiki en mode supertutilisateur) et en anglais.

des fichiers essentiels

  • /home/laforge//fr(en)/data/plugin/theme/cf-fr(en).py (le thème de curriculumforge: un en français (cf-fr) et un en anglais (cf-en).

    Il était important de donner à chaque sous répertoire (fr et en) des thèmes différents, étant donné la programmation du thème, qui appelle tantôt PeaseThankYou et Help, tantôt PubliConseils et Aide

le cas "docbook"

  • ../docbook (Il n'y a pas de répertoire docbook comme tel dans notre installation moinmoin, puisque le système utilise le répertoire par défaut de debian. Il a fallu changer le propriétaire du sous-répertoire html (lui donner apache). C'est la seule manière que j'ai trouvée de faire fonctionner le docbook sous debian. Ubuntu permettait de désigner un répertoire docbook à l'intérieur des répertoires data.... ça ne semble pas fonctionner sous debian/sarge).

Les permissions

  • data et underlay appartiennent à apache:apache et ne doivent pas être accessibles à quiconque d'autre, ni en lecture (pas grave pour underlay mais compromettant pour les fichiers protégés en lecture dans data ... ) ni en écriture. Seul apache y accède. Permissions 700 partout.

    • les répertoires racines de data appartiennent cependant à laforge:autres avec les permissions 711 (on aurait pu tout aussi bien les donner à apache avec 700, mais on se garde la possibilité de faire rouler le fastcgi sous laforge.... c'est donc une sorte de rappel symbolique... )

  • htdocs appartient à laforge:root (n'importe qui d'autre qu'apache aurait fait l'affaire; on aurait pu tout simplement choisir root:root) avec les permissions 711, incluant tous les sous-répertoires à l'exception du répertoire applets qui vient avec un index.html bidon (adpté à curriculumforge) -- il y en avait également un dans htdocs qui renvoyait à un cgi, mais ce n'était pas pertinent ni de le garder ni de l'adapter (les RewriteRule définies dans le Vhost font le travail de redirection). Il faut s'assurer par contre que favicon.ico et robots.txt de même que tous fichiers .css et toutes les images aient les permissions 644 (ou même 444 puisque le propriétaire laforge n'a pas à les modifier)

  • Finalement il est conseillé de changer la valeur umask de 0770 à 0700 dans ../site-packacge/Moinmoin/config.py (Autrement, à quoi bon régler les permissions à 700 si les pages crées le sont avec 770... )

les fichiers de configuration

  • farmconfig.py (dans /usr/share/moin/curriculumforge)
    wikis = [
        # Standalone server needs the port e.g. localhost:8000
        # Twisted server can now use the port, too.
        # wikiname,     url regular expression (no protocol)
        # ------------------------------------------------------
        #("mywiki",  r".*"),   # this is ok for a single wiki
    
           ("fr",  r"^fr.curriculumforge.org/.*$"),    
           ("fr",  r"^www.fr.curriculumforge.org/.*$"),  
           ("en",  r"^en.curriculumforge.org/.*$"), 
           ("en",  r"^curriculumforge.org/.*$"), 
           ("en",  r"^www.en.curriculumforge.org/.*$"), 
           ("en",  r"^www.curriculumforge.org/.*$"),  
    
           data_underlay_dir = '/usr/share/moin/underlay/'
    
           # Security ----------------------------------------------------------
    
           # This is checked by some rather critical and potentially harmful actions,
           # like despam or PackageInstaller action:
           superuser = [u"JacquesDaignault", ]
    
           # IMPORTANT: grant yourself admin rights! replace YourName with
           # your user name. See HelpOnAccessControlLists for more help.
           # All acl_rights_xxx options must use unicode [Unicode]    #### code à revoir.... Faut-il un groupe FirstAdminGroup dans chaque wiki ? Le projet était de partager le travail d'admin....
           acl_rights_before = u"FirstAdminGroup:read,write,delete,revert,admin"
           acl_rights_default = u"Known:read,write,delete,revert All:read"
           acl_rights_after = u"FirstAdminGroup:read,write,delete,admin,revert"
           # Link spam protection for public wikis (uncomment to enable).http://levinux.org/cgi-bin/moinfc.fcgi
           # Needs a reliable internet connection.
           #from MoinMoin.util.antispam import SecurityPolicy
    
           # Mail --------------------------------------------------------------
    
           # Configure to enable subscribing to pages (disabled by default) or
           # sending forgotten passwords.
    
           # SMTP server, e.g. "mail.provider.com" (empty or None to disable mail)
           mail_smarthost = "192.168.5.20"
    
           #mail_sendmail ="/usr/sbin/sendmail -t -i"
    
           # The return address, e.g u"Jrgen Wiki <noreply@mywiki.org>" [Unicode]
           mail_from = u"CurriculumForge <laforge@levinux.org>"
     
           # Enable graphical charts, requires gdchart.
           chart_options = {'width': 600, 'height': 300}
           allow_xslt = 1
           edit_locking = "lock 5"
           editor_default = "text"
           editor_force = True
           acl_enabled = 1
           from MoinMoin.util.autoadmin import SecurityPolicy
     
  • fr.py (dans /usr/share/moin/curriculumforge)
    # now we subclass that config (inherit from it) and change what's different:
    class Config(FarmConfig):
        language_default = 'fr'
        theme_default = 'cf-fr'
        url_prefix = '/curriculumforge'
    
        # basic options (you normally need to change these)
        sitename = u'La forge du curriculum' # [Unicode]
        interwikiname = 'La forge du Curriculum'
    
        # name of entry page / front page [Unicode], choose one of those:
    
        # a) if most wiki content is in a single language
        page_front_page = u"LfdcDebut"
    
        # b) if wiki content is maintained in many languages
        page_front_page = u"LfdcDebut"
    
        data_dir = '/home/laforge/fr/data/'
        #docbook_html_dir = '/home/laforge/fr/data/html/'
     
  • en.py (dans /usr/share/moin/curriculumforge)
    # now we subclass that config (inherit from it) and change what's different:
    class Config(FarmConfig):
    
        language_default = 'en'
        theme_default = 'cf-en'
        url_prefix = '/curriculumforge'
    
    
        # basic options (you normally need to change these)
        sitename = u'Curriculum Forge' # [Unicode]
        interwikiname = 'Curriculum Forge'
    
        # name of entry page / front page [Unicode], choose one of those:
    
        # a) if most wiki content is in a single language
        page_front_page = u"WikiStartHere"
    
        # b) if wiki content is maintained in many languages
        page_front_page = u"WikiStartHere"
    
        data_dir = '/home/laforge/en/data/'
     
  • moincf.fcgi (dans /var/lib/apache2/fastcgi. Copie modifiée de moin.fcg, livré avec Moinmoin)
    # Path of the directory where wikiconfig.py is located.
    # YOU NEED TO CHANGE THIS TO MATCH YOUR SETUP.
    sys.path.insert(0, '/usr/share/moin/curriculumforge')
    
    # Path to MoinMoin package, needed if you installed with --prefix=PREFIX
    # or if you did not use setup.py.
    ## sys.path.insert(0, 'PREFIX/lib/python2.3/site-packages')
    
    # Path of the directory where farmconfig is located (if different).
    ## sys.path.insert(0, '/path/to/farmconfig')
    
    # Debug mode - show detailed error reports
    ## import os
    ## os.environ['MOIN_DEBUG'] = '1'
    import os
    os.environ['SCRIPT_NAME'] = '/
     
  • Vhosts (dans /etc/apache2/sites-enabled/)
    <VirtualHost *>
    ServerName curriculumforge.org
    ServerAlias *.curriculumforge.org
    DocumentRoot /home/laforge/
    Alias /curriculumforge/ "/usr/share/moin/curriculumforge/htdocs/"
    ScriptAlias /cgi-bin/ /var/lib/apache2/fastcgi/
    RewriteEngine on
    RewriteRule ^/curriculumforge/(.*)$ /usr/share/moin/curriculumforge/htdocs/$1 [last]
    RewriteRule ^/robots.txt$ /usr/share/moin/curriculumforge/htdocs/robots.txt [last]
    RewriteRule ^/favicon.ico$ /usr/share/moin/curriculumforge/htdocs/favicon.ico [last]
         # map everything else to server script
    RewriteRule ^(.*)$ /var/lib/apache2/fastcgi/moincf.fcgi$1
    #RewriteRule ^$ /var/lib/apache2/fastcgi/moincf.fcgi
    </VirtualHost>
     

Remarques et conseils divers

Les thèmes

Moinmoin permet la personnalisation des thèmes. Trois thèmes sont proposés d'office : classic, modern et rightsidebar. On trouvera dans le ThemeMarket plusieurs propositions intéressantes. Le thème balanced a été retenu pour La Forge. C'est le thème de base d'Ubuntu. Il a néanmoins fallu lui faire subir de multiples transformations.

  • les menus et les tabs n'étaient pas inclus
  • le plugin ne permettait pas de transformer le site en cms (interfaces différentes pour le lecteur et pour l'acteur)
  • Les css et les images devaient bien sûr être personnalisés.

    (!) Les fichiers cf-fr.py et cf-en.py anisi que tous les css cf-fr ou cf-en et les /data/pages pertinentes (tabs-default.html et menu-default.html) seront bientôt disponibles sur le site. On essaiera d'inclure les pages wiki contenant les macros pour les nouvelles et le calendrier (fonctions cms très efficaces)

Il faut savoir que le nom du thème intervient à plusieurs reprises:

  • dans les fichiers de config de type farmconfig (farmconfig.py) ou mywiki (fr.py et en.py)
  • dans le répertoire htdocs
  • relativement au fichier montheme.py (cf-fr.py et cf-en.py) dans ../data/plugin/theme
    • Le nom montheme (sans l'extension) est celui qu'on doit indiquer dans farmconfig.py ou mymiki.py
    • La variable theme dans le fichier montheme renvoie au nom du theme de base dans htdocs. Curriculumforge utilise les themes cf-fr et cf-en. Voyons le cas de cf-fr. On trouvera dans ../fr/data/plugin/theme le fichier cf-fr.py. Puis dans ce fichier, une référence à cf-fr qui se trouve dans htdocs. Puis enfin, une référence à cf-fr dans ../curriculumforge/fr.py

      Imaginons que nous souhaitions créer un autre wiki, disons, machin, utiliser l'engin cf-fr.py pour thème mais avec d'autres images et d'autres feuilles de style que celles proposées dans htdocs/cf-fr. Il suffirait de les créer dans htdocs. Par exemple: ../htdocs/machin. Il faudrait un fichier dans curriculumforge qui définisse le wiki, machin.py (inclure évidemment son répertoire dans le fichier de farmconfig.py). Il faudrait copier cf-fr.py dans ../data/machin/plugin/theme et indiquer la référence à machin comme thème de base. Il faudrait, enfin, donner le nom (ce pourrait être le même si on ne l'a pas changé en le copiant dans ../machin...) dans /curriculumforge/machin.py sous la rubrique theme_default

Apache

  • fastcgi demande que le répertoire /var/lib/apache2/fastcgi appartienne à l'utilisateur d'apache (www-data par défaut dans l'installation debian mais apache dans l'installation de levinux (etc/apache2/apache2.conf). Il faut donc ajuster en conséquence.

A compléter

  • Je suis passé à la version 1.5.4 Il m'a fallu lancer des scripts de migration (voire la doc) IMPORTANT à comprendre! (référence aux fichiers meta)
  • Il m'a fallu installer gettext et make sur web-0, puis lancer make .../MoinMoin/i18n/fr.po et make ../MoinMoin/i18n/fr.py pour avoir la traduction de Contents dans la table des matières sur Lévinux (c'était pourtant là dans curriculumforge...)

  • J'ai modifé les rewriterules dans Vhosts pour avoir les bonnes favicon.ico (favicon-levinux.ico et favicon-cf.ico)
  • J'ai lancé le script mediawiki...php pour aller chercher les pages de mediawiki, transformées en moinmoin... excepté la syntaxe... pas fameux...

____________

Notes

  • 1 ce pourrait être apache, mais on s'explique, un peu plus loin, à propos des permissions

  • 2 Un index.html (au cas où python et fastcgi seraient en panne) avertit qu'on n'a pas d'affaire ici...