Wikimedia

De Diablotins.org.


Installer un Wiki sous FreeBSD
Image:brush.png


Sommaire

Les logiciels

Le logiciel principal est MediaWiki que vous trouverez dans les ports: www/mediawiki.

Serveur Web

MediaWiki, est une collection de scripts PHP exécutée sur un serveur Web.
Pour chercher la mer^W, écrire une documentation un peu différente de ce qui se fait habituellement, j'ai choisi Nginx dont Patrick vous a déjà causé.


Installons www/nginx avec cette configuration:

david:/<1>ports/www/nginx#make showconfig | grep \=on
===> The following configuration options are available for nginx-0.7.67:
     HTTP_MODULE=on "Enable HTTP module"
     HTTP_ADDITION_MODULE=on "Enable http_addition module"
     HTTP_CACHE_MODULE=on "Enable http_cache module"
     HTTP_PERL_MODULE=on "Enable http_perl module"
     HTTP_REWRITE_MODULE=on "Enable http_rewrite module"
     HTTP_SSL_MODULE=on "Enable http_ssl module"
     HTTP_STATUS_MODULE=on "Enable http_stub_status module"
     WWW=on "Enable html sample files"
===> Use 'make config' to modify these settings

Configurons nos pages du Wiki:

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    gzip  on;
    charset utf-8;

    server {
        listen       80;
        server_name  localhost;
        access_log /var/log/nginx/wiki.nginx.org-access.log;
        error_log  /var/log/nginx/wiki.nginx.org-error.log info;

        root   /usr/local/www/mediawiki;
        location / {
        index index.php5;
        error_page 404 = @mediawiki;
        }

        location @mediawiki {
        rewrite ^/([^?]*)(?:\?(.*))? /index.php5?title=$1&$2 last;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }

        location ~ \.php5?$ {
        include /usr/local/etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:8002;
        fastcgi_index index.php5;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

PHP

Ensuite, bien évidemment, installons le language: lang/php5.
Malheureusement, l'interpréteur est buggé ([1] [2]), il s’emmêle les pointeurs entre les passages de paramètres par référence ou par valeur, d'où la multiplication de messages:

Parameter n to xxx expected to be a reference, value given in yyy

installons donc la version précédente: lang/php52:

david:/<1>ports/lang/php52>make showconfig
===> The following configuration options are available for php52-5.2.13_3:
     CLI=on "Build CLI version"
     CGI=on "Build CGI version"
     APACHE=off "Build Apache module"
     DEBUG=off "Enable debug"
     SUHOSIN=on "Enable Suhosin protection system (not for jails)"
     MULTIBYTE=off "Enable zend multibyte support"
     IPV6=on "Enable ipv6 support"
     MAILHEAD=off "Enable mail header patch"
     REDIRECT=off "Enable force-cgi-redirect support (CGI only)"
     DISCARD=off "Enable discard-path support (CGI only)"
     FASTCGI=on "Enable fastcgi support (CGI only)"
     FPM=off "Enable fastcgi process manager (CGI only)"
     PATHINFO=on "Enable path-info-check support (CGI only)"
===> Use 'make config' to modify these settings

Ainsi que extensions lang/php52-extensions:

david:/<1>ports/lang/php52-extensions>make showconfig | grep on
===> The following configuration options are available for php52-extensions-1.3:
     BCMATH=off "bc style precision math functions"
     CALENDAR=on "calendar conversion support"
     CTYPE=on "ctype functions"
     DOM=on "DOM support"
     FILTER=on "input filter support"
     HASH=on "HASH Message Digest Framework"
     ICONV=on "iconv support"
     JSON=on "JavaScript Object Serialization support"
     MCRYPT=off "Encryption support"
     NCURSES=off "ncurses support (CLI only)"
     PCNTL=off "pcntl support (CLI only)"
     PCRE=on "Perl Compatible Regular Expression support"
     PDO=on "PHP Data Objects Interface (PDO)"
     PDO_SQLITE=on "PDO sqlite driver"
     PGSQL=on "PostgreSQL database support"
     POSIX=on "POSIX-like functions"
     READLINE=off "readline support (CLI only)"
     SESSION=on "session support"
     SIMPLEXML=on "simplexml support"
     SPL=on "Standard PHP Library"
     SQLITE=on "sqlite support"
     TOKENIZER=on "tokenizer support"
     XML=on "XML support"
     XMLREADER=on "XMLReader support"
     XMLWRITER=on "XMLWriter support"
===> Use 'make config' to modify these settings

Enfin, suivez les instructions de patrick pour passer les scripts PHP à fastcgi.

Base de données

J'ai choisi de ne pas utiliser le classique MySQL, pour la même raison que précédemment.
Utilisons donc PostgreSQL dont LeCid vous a aussi déjà causé.


Il nous faut installer databases/postgresql82-server et databases/postgresql82-contrib.

Ensuite, suivons le document publié par Lecid,

#su -l pgsql -c initdb
#/usr/local/etc/rc.d/postgresql onestart 

puis connectons nous sous l'identité pgsql, pour éviter bien des messages d'erreurs:

#su -l pgsql -c 
$ pwd
/usr/local/pgsql
$ whoami
pgsql

Créons l'utilisateur responsable du Wiki pour la base de donnée:

$ createuser -S -D -R -P -E wikiuser
Enter password for new role: 
Enter it again: 
CREATE ROLE

Créons la base pour le Wiki:

$ createdb -O wikiuser wikidb
CREATE DATABASE
$ createlang plpgsql wikidb

Ajoutons le module tsearch2

$ cd /usr/local/share/postgresql/contrib
$ psql wikidb < tsearch2.sql
$ psql -d wikidb -c "grant select on pg_ts_cfg to wikiuser;"
GRANT
$ psql -d wikidb -c "grant select on pg_ts_cfgmap to wikiuser;"
GRANT
$ psql -d wikidb -c "grant select on pg_ts_dict to wikiuser;"
GRANT
$ psql -d wikidb -c "grant select on pg_ts_parser to wikiuser;"
GRANT
$ psql -d wikidb -c "update pg_ts_cfg set locale = current_setting('lc_collate') where ts_name = 'default' and prs_name='default';"
UPDATE 1

Démarrer

Votre Wiki se trouve sous /usr/local/www/mediawiki.
Connectez vous localhost et suivez les instructions.
Déplacez ensuite le fichier LocalSettings.php:

#mv /usr/local/www/mediawiki/config/LocalSettings.php /usr/local/www/mediawiki

Extensions DPL

Afin de profiter des tables des matières, nous avons besoin de l'extension Dynamic Page List 2 que vous pouvez télécharger ici
... ou .


C'est le bordel, hein ?

  • Mediawiki simple

La première version est limitée, elle n'installe qu'un ou deux fichiers d'extensions.

david:~>sudo tar -xzf DynamicPageList-MW1.15-r50226.tar.gz -C /usr/local/www/mediawiki/extensions

Ajoutons là à LocalSettings.php:

require_once("$IP/extensions/DynamicPageList/DynamicPageList2.php");


  • Version complète
unzip Semeb_extensions.zip -d /usr/local/www/mediawiki/extensions

Ajoutons à LocalSettings.php, deux extensions livrées:

require_once("$IP/extensions/Inputbox/inputbox.php");
require_once("$IP/extensions/DynamicPageList/DynamicPageList.php");


Pour être compatible avec PostgreSQL, il faut créer quelques fonctions qui simule MySql:
Par exemple, créez ce fichier de commande:

create schema mysql;

grant usage on schema mysql to public;

alter user wikiuser set search_path to mediawiki, public, mysql;

create or replace function mysql.concat(text, text) returns text
as $function$
  begin
    return $1 || $2;
  end;
$function$ language plpgsql immutable strict;

create or replace function mysql.if(boolean, text, text) returns text
as $function$
  begin
    if $1 then
      return $2;
    else
      return $3;
    end if;
  end;
$function$ language plpgsql immutable strict;

Puis, lancez le

psql -d wikidb -f ./dplscript.sql


Allez, un dernier patch pour la route, pour corriger un problème de syntaxe entre PostgreSQL et MySQL: Remplacez la première ligne par la seconde dans

  • extensions/DynamicPageList/DynamicPageList2.php, pour DPL simple
  • extensions/DynamicPageList/DPLMain.php, pour DPL complet
//    		$sSqlWhere .= " LIMIT $iOffset, ";
    		$sSqlWhere .= " OFFSET $iOffset LIMIT ";
Outils personnels
Projets :