Wikibase/Installation/Installation July 2019/fr

From mediawiki.org

Preliminary note about language : this page is written in French because it was initially documented in French.[edit]

Hieueuro (talk) 18:40, 23 August 2022 (UTC) Also, the warning says the installation works as described in July 2019, but it can become obsolete with the time, and this is not an official documentation.[reply]

Contexte[edit]

Cette installation a été faite dans le cadre du projet NOEMI de la Bibliothèque nationale de France selon un cahier des charges.

La société Wiki Valley a été en charge de l'installation qui s'est déroulée en juillet 2019.

Le but est de faire une installation experte de MediaWiki et Wikibase, sans Docker. L'installation comprend aussi le paramétrage ainsi que des extensions et outils supplémentaires nécessaires au bon fonctionnement de la Wikibase.

Avertissement Avertissement : Cette page se présente comme un retour d'expérience (retex) avec les versions spécifiées et n'est pas une documentation officielle. Les versions évoluant, ces instructions peuvent devenir obsolètes. Certains problèmes peuvent être résolus et d’autres peuvent apparaître, parfois selon l’environnement spécifique.

Installation Wikibase 201907[edit]

Environnement[edit]

Interfaces Web

Machines utilisées

  • backend-server.example-wiki.org pour la compilation et blazegraph, wikibase.
  • frontend.example-wiki.org pour tous les points d'entrée http, et les applications délivrant du statique : queryService

4 cpu

  • CentOS Linux release 7.6 Core
  • ram 8 Go

Disques

  • / 8 Go
  • /opt : 16 Go

Comptes MediaWiki

  • WikiSysop

Système de base[edit]

Installation des pré-requis à MediaWiki (version 1.33)

Installation d’utilitaires diverses[edit]

Commandes shell :

yum install unzip

Configuration de l’environnement[edit]

À faire dans chaque session, lorsque nécessaire.

Téléchargement depuis Internet via le proxy :

Commandes shell :

export http_proxy=http://proxy.example.org:8080
export https_proxy=http://proxy.example.org:8080

Compilation de Blazegraph avec Maven :

Commandes shell :

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.e17.x86_64
export M2_HOME=/opt/apache-maven-3.6.0
export PATH=/opt/apache-maven-3.6.0/bin:$PATH

Exécution de PHP CLI :

Commandes shell :

. /opt/rh/rh-php72/enable

MariaDB 10.1[edit]

(version alignée sur la version actuelle de Wikimedia - la version CentOS est trop ancienne)

Fichier /etc/yum.repo.d/MariaDB.repo :

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Commandes shell :

yum install mariadb mariadb-server
systemctl start mysql.service
systemctl enable mysql.service

Créer une base de données pour MediaWiki :

Commandes MySQL (lancer avec la commande shell mysql) :

CREATE DATABASE wikibase;
CREATE USER wikibase@localhost IDENTIFIED BY '******';
GRANT ALL ON wikibase.* TO wikibase@localhost;

PHP[edit]

Fichier /etc/yum.repo.d/CentOS-SClo-scl-rh.repo :

[centos-sclo-rh]
name = CentOS-7 - SCLo rh
baseurl = http://mirror.centols.org/centos/7/sclo/$basearch/rh/
gpgcheck=0
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

Commandes shell :

yum install rh-php72-php-runtime rh-php72-php-cli rh-php72-php-gd rh-php72-php-intl rh-php72-php-mbstring rh-php72-php-opcache rh-php72-php-pdo rh-php72-php-mysqlnd rh-php72-php-xml
. /opt/rh/rh-php72/enable

Serveur Apache[edit]

Commandes shell :

yum install httpd24-runtime
mkdir -p /srv/logs/pid /srv/logs/httpd
chown -R apache /opt/logs/example
mkdir -p /opt/example-conf

Créer le fichier /opt/example-conf/httpd-example.conf avec une configuration exécutant le PHP. (ATTENTION : ce fichier se trouve sur backend-server.example-wiki.org)

Lancer Apache : en tant qu’utilisateur apache

Commandes shell :

su - apache
/opt/rh/httpd24/root/usr/sbin/httpd -f /opt/example-conf/httpd-example.conf -k start

Lancer un navigateur sur http://backend-server.example-wiki.org:8082/

memcached[edit]

Commandes shell :

yum install memcached
vi /etc/sysconfig/memcached # paramétrer OPTIONS="-U 0"
systemctl enable memcached
systemctl start memcached

Java[edit]

Commandes shell :

yum install java-1.8.0-openjdk-devel
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.e17.x86_64

Attention : l’export est nécessaire dans chaque session [nécessitant Java].

Composer (librairies PHP)[edit]

Suivre la procédure sur https://getcomposer.org/download/ pour utiliser la dernière version, en remplaçant l’étape de téléchargement (en PHP dans la procédure) par wget pour bien utiliser le proxy.

Commandes shell :

cd
wget https://getcomposer.org/installer
mv installer composer-setup.php
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

MediaWiki 1.33 + Wikibase + WikibaseQualityConstraints + OAuth[edit]

Installation de MediaWiki 1.33 avec Git. Voir aussi Installation Guide.

Commandes shell :

git clone -b REL1_33 --depth=1 https://gerrit.wikimedia.org/r/mediawiki/core.git /opt/mediawiki
cd /opt/mediawiki
git rm -rf vendor
git submodule update --init --recursive
cd extensions
git clone -b REL1_33 --depth=1 https://gerrit.wikimedia.org/r/mediawiki/extensions/Wikibase.git
git clone -b REL1_33 --depth=1 https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseQualityConstraints.git
git clone -b REL1_33 --depth=1 https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseCirrusSearch.git
git clone -b REL1_33 --depth=1 https://gerrit.wikimedia.org/r/mediawiki/extensions/Elastica.git
git clone -b REL1_33 --depth=1 https://gerrit.wikimedia.org/r/mediawiki/extensions/CirrusSearch.git
git clone -b REL1_33 --depth=1 https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor.git
cd Wikibase
git submodule update --init --recursive
cd ..
cd VisualEditor
git submodule update --init --recursive
cd ../..
chown -R apache cache images

Fichier /opt/mediawiki/composer.local.json :

{
	"extra": {
		"merge-plugin": {
			"include": [
				"extensions/Wikibase/composer.json"
			]
		}
	}
}

Commandes shell :

mv ~/composer.phar .
php composer.phar install --no-dev
SERVER_NAME=http://example-wiki.org php maintenance/install.php --dbtype=mysql --dbuser=wikibase --dbpass='******' --dbname=wikibase --pass=****** Example WikiSysop

(Le SERVER_NAME ne sert à rien, juste à retirer un warning.)

Noter que la commande d’installation de MediaWiki avait initialement planté car SQLite (non-utile pour nous) était dans la version 3.7 alors que 3.8 était nécessaire si on veut fonctionner avec ce moteur. Il faut soit supprimer SQLite de la machine, soit ajouter une ligne $result = Status::newGood(); dans le fichier includes/installer/SqliteInstaller.php, classe SqliteInstaller, à la fin de la fonction checkPrerequisites. (phabricator:T235868)

La commande install.php crée le fichier LocalSettings.php (voir la manuel complet LocalSettings.php sur le site MediaWiki).

Éditer le fichier LocalSettings.php et ajouter :

Fichier LocalSettings.php (à ajouter à la fin) :

# Configuration générale
$wgServer = 'http://example-wiki.org';
$wgArticlePath = '/wiki/$1';

# Extensions simples
wfLoadExtension( 'CodeEditor' );
wfLoadExtension( 'Gadgets' );
wfLoadExtension( 'ParserFunctions' );
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
wfLoadExtension( 'WikiEditor' );

# OAuth
wfLoadExtension( 'OAuth' );
$wgGroupPermissions['user']['mwoauthproposeconsumer'] = true;
$wgGroupPermissions['user']['mwoauthupdateownconsumer'] = true;
$wgGroupPermissions['sysop']['mwoauthmanageconsumer'] = true;

# Wikibase
$wgEnableWikibaseRepo = true;
$wgEnableWikibaseClient = true;
require_once "$IP/extensions/Wikibase/repo/Wikibase.php";
require_once "$IP/extensions/Wikibase/repo/ExampleSettings.php";
require_once "$IP/extensions/Wikibase/client/WikibaseClient.php";
require_once "$IP/extensions/Wikibase/client/ExampleSettings.php";
wfLoadExtension( 'WikibaseQualityConstraints' );

unset( $wgExtraNamespaces[WB_NS_ITEM] );
unset( $wgExtraNamespaces[WB_NS_ITEM_TALK] );
$wgWBRepoSettings['entityNamespaces']['item'] = NS_MAIN;

Dans le LocalSettings.php

Mettre à jour la base de données :

Commandes shell :

php maintenance/update.php --quick

Exécution des jobs en arrière-plan[edit]

Ce mode d'exécution des jobs est préférable à l'exécution des jobs via le processus web afin de ne pas surcharger celle-ci.

Commandes shell :

su - apache
crontab -e # entrer "* * * * * source /opt/rh/rh-php72/enable && php /opt/mediawiki/maintenance/runJobs.php" (ou une autre fréquence)


WikibaseQualityConstraints[edit]

Configurer le proxy en modifiant /opt/mediawiki/extensions/WikibaseQualityConstraints/maintenance/ImportConstraintEntities.php (phabricator:T235870).

diff --git a/maintenance/ImportConstraintEntities.php b/maintenance/ImportConstraintEntities.php
index 8af9dec..da9314c 100644
--- a/maintenance/ImportConstraintEntities.php
+++ b/maintenance/ImportConstraintEntities.php
@@ -130,8 +130,16 @@ class ImportConstraintEntities extends Maintenance {
         * @return string local entity ID
         */
        private function importEntityFromWikidata( $wikidataEntityId ) {
+
+               $paramsContext = [
+                       'http' => [
+                               'proxy' => 'tcp://proxy.example.org:8080',
+                       ],
+               ];
+               $context = stream_context_create( $paramsContext );
+
                $wikidataEntityUrl = "https://www.wikidata.org/wiki/Special:EntityData/$wikidataEntityId.json";
-               $wikidataEntitiesJson = file_get_contents( $wikidataEntityUrl );
+               $wikidataEntitiesJson = file_get_contents( $wikidataEntityUrl, false, $context );
                return $this->importEntityFromJson( $wikidataEntityId, $wikidataEntitiesJson );
        }

Lancer le script de téléchargement des contraintes depuis Wikidata :

Commandes shell :

cd /opt/mediawiki
php extensions/WikibaseQualityConstraints/maintenance/ImportConstraintEntities.php --dry-run
php extensions/WikibaseQualityConstraints/maintenance/ImportConstraintEntities.php

Copier-coller le résultat dans le fichier LocalSettings.php de MediaWiki (celui-ci correspond aux propriétés locales des contraintes, les valeurs par défaut étant les numéros de Wikidata).

Query Service + Blazegraph[edit]

L'outil de requête SPARQL Query Service est basé sur Blazegraph. Voir aussi la documentation sur Wikidata Query Service/Implementation.

Téléchargement de Blazegraph + outils Wikibase[edit]

Commandes shell :

git clone --depth=1 https://gerrit.wikimedia.org/r/wikidata/query/rdf.git /opt/blazegraph-compile
cd /opt/blazegraph-compile
git submodule update --init --recursive
cat .mvn/wrapper/maven-wrapper.properties # affiche la version de Maven + un zip où la télécharger sur archiva.wikimedia.org

Installation de la version spécifique de Maven[edit]

Commandes shell :

cd /opt
wget https://archiva.wikimedia.org/repository/mirrored/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
unzip apache-maven-3.6.0-bin.zip
export M2_HOME=/opt/apache-maven-3.6.0
export PATH=/opt/apache-maven-3.6.0/bin:$PATH
cd /opt/apache-maven-3.6.0
host proxy.example.org # copier l’adresse IP
vi conf/settings.xml # dans la section <proxies> configurer le <proxy> : protocol=http, host=x.y.z.t (IP de proxy.example.org), port 8080

Attention : l’export est nécessaire dans chaque session [nécessitant Maven].

Compilation de Blazegraph + outils Wikibase[edit]

Commandes shell :

yum install gcc-c++ libXcursor-devel cups-devel libXScrnSaver-devel libXrandr-devel at-spi2-atk-devel gtk3-devel # paquets nécessaires à la compilation et aux tests (installation de Chrome pour les tests)
vi gui/pom.xml

Si besoin, changer les versions de node et/ou npm dans gui/pom.xml.

Commandes shell :

cd /opt/blazegraph-compile
mvn package
cp -a dist/target/service-*.zip /opt

Déploiement de Blazegraph[edit]

Commandes shell :

cd /opt
unzip service-*.zip
cd service-*
cp -a RWStore.properties /opt/example-conf/RWStore-blazegraph.properties
cd /opt/example-conf
vi RWStore-blazegraph.properties # configurer com.bigdata.journal.AbstractJournal.file=/opt/example-conf/wikibase.jnl
cp -a services.json mwservices.json
vi mwservices.json # configurer la clé "endpoints" à ["http://example-wiki.org"]
mkdir /srv/logs/blazegraph
chown apache: /srv/logs/blazegraph

Déploiement du frontend statique Query Service[edit]

Commandes shell :

cd /opt/service-*

La personnalisation pour communiquer avec la Wikibase et changer l'apparence se fait en créant le fichier custom-config.json (qui remplace default-config.json)

Fichier /opt/service-*/custom-config.json :

{
  "api": {
    "sparql": {
      "uri": "http://example-query.org/sparql"
    },
    "wikibase": {
      "uri": "http://example-wiki.org/w/api.php"
    },
    "examples": {
      "server": "http://example-wiki.org/",
      "endpoint": "example-wiki.org/v3/page/html/",
      "pageTitle": "Project:Exemples_SPARQL",
      "pagePathElement": "wiki/"
    },
    "urlShortener": "tinyurl"
  },
  "brand": {
    "title": "Project",
    "logo": "logo.svg",
    "favicon": "favicon.ico",
    "copyrightUrl": "http://example-wiki.org/wiki/Project:About"
  },
  "location": {
    "root": "./",
    "index": "./index.html"
  }
}

Commandes shell :

tar cfz frontend-query-service.tar.gz .

Lancement de Blazegraph[edit]

Commandes shell :

su - apache
cd /opt/service-*
export HOST=0.0.0.0
export BLAZEGRAPH_OPTS="-DwikibaseHost=example-wiki.org"
export LOG_DIR=/srv/logs/blazegraph
export CONFIG_FILE=/opt/example-conf/RWStore-blazegraph.properties
./runBlazegraph.sh

Commandes shell :

su - apache
cd /opt/service-*
export UPDATER_OPTS="-DwikibaseHost=example-wiki.org -DwikibaseMaxDaysBack=90"
export LOG_DIR=/srv/logs/blazegraph
./runUpdate.sh -n wdq -- --wikibaseHost example-wiki.org --wikibaseScheme http --entityNamespaces 0,122

Elasticsearch + CirrusSearch[edit]

Installer Elasticsearch 6.5.4[edit]

Installer la version 6.5.4 car il faut que les plugins Wikimedia soient déjà compilés pour la version spécifique de Elasticsearch, voir https://www.elastic.co/guide/en/elasticsearch/reference/6.5/rpm.html#rpm-repo. La version d'Elasticsearch doit être alignée avec les plugins Elasticsearch spécifiques à Wikimedia, voir la dernière version sur https://search.maven.org/search?q=g:org.wikimedia.search.highlighter.

Fichier /etc/yum.repos.d/Elasticsearch-6.repo :

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Commandes shell :

yum install elasticsearch-6.5.4
wget https://repo1.maven.org/maven2/org/wikimedia/search/extra/6.5.4/extra-6.5.4.zip
wget https://repo1.maven.org/maven2/org/wikimedia/search/extra/6.5.4/extra-analysis-slovak-6.5.4.zip
wget https://repo1.maven.org/maven2/org/wikimedia/search/highlighter/experimental-highlighter-elasticsearch-plugin/6.5.4/experimental-highlighter-elasticsearch-plugin-6.5.4.zip
/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/extra-6.5.4.zip
/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/extra-analysis-slovak-6.5.4.zip
/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/experimental-highlighter-elasticsearch-plugin-6.5.4.zip
vi /etc/elasticsearch/elasticsearch.yml # positionner custer.name à example
systemctl start elasticsearch.service

Note 1 : les plugins "extra" et "experimental-highlighter" sont obligatoires dans le sens que leur absence rend la recherche non-fonctionnelle.

Note 2 : il est aussi possible d'installer directement sans téléchargement local, mais il faut configurer correctement le proxy :

  • /usr/share/elasticsearch/bin/elasticsearch-plugin install org.wikimedia.search.highlighter:experimental-highlighter-elasticsearch-plugin:6.5.4

Créer les index Elasticsearch pour MediaWiki[edit]

Documentation sur https://phabricator.wikimedia.org/source/extension-cirrussearch/browse/master/README

Fichier /opt/mediawiki/LocalSettings.php (ajouter à la fin) :

# CirrusSearch / Elasticsearch
wfLoadExtension( 'Elastica' );
require_once "$IP/extensions/CirrusSearch/CirrusSearch.php";
wfLoadExtension( 'WikibaseCirrusSearch' );
wfLoadExtension( 'PropertySuggester' );
$wgCirrusSearchWikimediaExtraPlugin = [
    'regex' => [
        'build',
        'use'
    ],
    'super_detect_noop' => true,
    'documentVersion' => true,
    'token_count_router' => true,
    'term_freq' => true,
];
$wgWBRepoSettings['disableCirrus'] = true;
$wgWBCSUseCirrus = true;
#Le paramètre suivant ne sert que pour les propriétés d'un type autre que wgWBRepoSettings['searchIndexTypes']
#$wgWBRepoSettings['searchIndexProperties'] = [ 'P1' ];
$wgWBRepoSettings['searchIndexTypes'] = [
    'string',
    'external-id',
    'wikibase-item',
    'wikibase-property',
];

Exécuter :

Commandes shell :

cd /opt/mediawiki
php extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php

Dans le LocalSettings.php, retirer :

Fichier /opt/mediawiki/LocalSettings.php :

$wgDisableSearchUpdate = true;

Exécuter :

Commandes shell :

cd /opt/mediawiki
php extensions/CirrusSearch/maintenance/forceSearchIndex.php --skipLinks --indexOnSkip
php extensions/CirrusSearch/maintenance/forceSearchIndex.php --skipParse

Tester une recherche sur une chaîne de caractères existante et une autre sur une (a priori) non-existante. Tester une recherche haswbstatement sur un couple (propriété, valeur) existant, par exemple "haswbstatement:P1=Q1" puis un couple non-existant. Voir aussi la documentation sur haswbstatement et sur les autres fonctions de recherche de Elasticsearch.

Parsoid + Exemples du Query Service[edit]

Dans le Query Service, pour avoir la fonctionnalité d'affichage des exemples provenant de la page http://example-wiki.org/Project:Exemples_SPARQL, il faut installer Parsoid.

Commandes shell :

cd /opt
wget https://nodejs.org/dist/latest-v8.x/node-v8.16.0-linux-x86.tar.gz
tar xfz node-v8.16.0-linux-x86.tar.gz
export PATH=/opt/node-v8.16.0-linux-x86/bin:$PATH
# Installer yarn sur /opt/yarn-v1.12.3
git clone -b v0.9.0 https://gerrit.wikimedia.org/r/mediawiki/services/parsoid.git
cd parsoid
/opt/yarn-v1.12.3/bin/yarn install --production --no-optional
cp -a config.example.yaml config.yaml # décommenter la section "metrics:\n  type: log", commenter entièrement l'exemple dans la section "mwApis" et ajouter dans cette section "- uri: 'http://example-wiki.org/w/api.php"

Sur frontend.example-wiki.org, créer une règle redirigeant http://example-wiki.org/example-wiki.org/ vers http://backend-server.example-wiki.org:8142/example-wiki.org/

Sur le wiki, créer le modèle Template:SPARQL avec le contenu suivant :

'"`UNIQ--syntaxhighlight-0000004E-QINU`"'
[http://example-query.org/#%7B%7B%7Bquery%7D%7D%7D Essayez !]

Sur le wiki, créer la page Project:Exemples_SPARQL avec le contenu suivant :

== Item et label en français ==

'"`UNIQ--syntaxhighlight-00000052-QINU`"' [http://query.wikidata.org/#SELECT%20%3Fitem%20%3Flabel%0AWHERE%20%7B%0A%20%20%3Fitem%20rdfs%3Alabel%20%3Flabel%20.%0A%20%20FILTER%28LANG%28%3Flabel%29%20%3D%20%22fr%22%29%20.%0A%7D Essayez !]

Les nouveaux exemples s'ajoutent en ajoutant une section

== ...titre de l'exemple... ==

'"`UNIQ--syntaxhighlight-00000056-QINU`"' [http://query.wikidata.org/#...requ%C3%AAte%20SPARQL... Essayez !]

Lancement de Parsoid[edit]

Démarrage

Commandes shell :

# sur apache@backend-server.example-wiki.org
cd /opt/parsoid
nohup /opt/node-v8.16.0-linux-x64/bin/node /opt/parsoid/bin/server.js   > /opt/logs/parsoid.log &

Statut

ps -ef | grep parsoid| grep -v grep 

Arrêt: Tuer le process ci-dessus

QuickStatements + OAuth[edit]

Voir la documentation utilisateur sur https://www.wikidata.org/wiki/Help:QuickStatements. Noter que cet outil est une surcouche à api.php de MediaWiki/Wikibase.

Configurer un consumer OAuth[edit]

OAuth est un service d'authentification pour pouvoir éditer la Wikibase depuis une application externe (sert ici pour QuickStatements mais peut être utiliser pour d'autres outils).

  • Se connecter avec un compte administrateur
  • Aller dans ses préférences et authentifier son adresse mail
  • Ouvrir la page spéciale "Inscription de consommateur OAuth" Special:OAuthConsumerRegistration
    • Cliquer sur "Demander un jeton pour un nouveau consommateur."
      • Nom de l’application : QuickStatements
      • Version du consommateur : 1.0
      • Description de l'application : Outil de modification en masse d’items Wikibase.
      • Réserver l’utilisation de ce consommateur à UTILISATEUR. : ne pas cocher
      • URl « de rappel » pour OAuth : http://example-wiki.org/quickstatements/api.php
      • Permettre au consommateur de spécifier un rappel dans les requêtes et utiliser l’URL « rappel » ci-dessus comme préfixe obligatoire. : cocher
      • Adresse de courriel de contact : laisser sa propre adresse mail
      • Projet applicable : Tous les projets sur ce site
      • Types de déclarations publiques demandées: Autorisation de requêtes pour des droits spécifiques
      • Droits applicables : Droits de base ; Modification de gros volumes ; Modifier des pages existantes ; Créer, modifier et déplacer des pages ; Importer de nouveaux fichiers ; Téléverser, remplacer et renommer des fichiers
      • Plages IP autorisées : laisser "0.0.0.0/0" "::/0"
      • Clé RSA publique (facultatif) : ne rien entrer
      • En soumettant cette application, vous reconnaissez que nous nous réservons le droit de la… : cocher
    • Copier le "jeton de consommateur" et le "jeton secret" et le réserver pour la section QuickStatements
  • Aller sur la page spéciale "Gérer les consommateurs OAuth" Special:OAuthManageConsumers
    • File des requêtes de consommateur proposés [1]
    • revoir/gérer
    • Mettre un motif et approuver
  • Vérifier sur la page spéciale "Lister les applications OAuth" Special:OAuthListConsumers que l’application est approuvée

Installation de QuickStatements[edit]

Inspiré du Dockerfile et autres fichiers dans le dossier.

  • Attention :* QuickStatements, en l'état actuel du code, est assez spécifique à Wikidata. La doc suivante modifie très peu le code, mais en conséquence un certain nombre de paramètres sont fixés (adresse DNS du serveur MySQL, nom des bases MySQL).

Commandes shell :

cd /opt
git clone https://bitbucket.org/magnusmanske/magnustools.git magnustools
git clone https://phabricator.wikimedia.org/source/tool-quickstatements.git quickstatements
cd quickstatements
composer install --no-dev
chown -R www-data: .

Attention : dans config.json, il n’est pas possible de remplacer mwOAuthUrl par une URL jolie sans index.php, c’est le bug https://phabricator.wikimedia.org/T59500 (Impossible to use https://www.mediawiki.org/wiki/Special:OAuth/initiate?format=&oauth_callback= style URL).

Fichier /opt/quickstatements/oauth.ini :

; HTTP User-Agent header
agent = 'Wikibase QuickStatements'
; assigned by Special:OAuthConsumerRegistration
consumerKey = '# INSCRIRE LE JETON DE CONSOMMATEUR ISSU DE L’INSCRIPTION OAUTH #'
consumerSecret = '# INSCRIRE LE JETON SECRET ISSU DE L’INSCRIPTION OAUTH #'

Fichier /opt/quickstatements/public_html/config.json :

{
        "site" : "wikibase" ,
        "bot_config_file" : "/opt/quickstatements/bot.ini" ,
        "logfile" : "/srv/logs/httpd-quickstatements/tool.log" ,
        "sites" : {
                "wikibase" : {
                        "oauth" : {
                                "language":"fr" ,
                                "project":"wikibase" ,
                                "ini_file":"/opt/quickstatements/oauth.ini" ,
                                "publicMwOAuthUrl":"http://example-wiki.org/index.php?title=Special:OAuth" ,
                                "mwOAuthUrl":"http://example-wiki.org/index.php?title=Special:OAuth" ,
                                "mwOAuthIW":"mw"
                        } ,
                        "server" : "example-wiki.org" ,
                        "api" : "http://example-wiki.org/api.php" ,
                        "pageBase" : "http://example-wiki.org/" ,
                        "toolBase" : "http://example-wiki.org/quickstatements/" ,
                        "types" : {
                                "P" : { "type":"property" , "ns":"122" , "ns_prefix":"Property:" } ,
                                "Q" : { "type":"item" , "ns":"0" , "ns_prefix":"" }
                        }
                }
        }
}

Le serveur web pour QuickStatements est (actuellement) indépendant du serveur web du wiki et écoute sur le port 8084.

Commandes shell :

cp -a /opt/example-conf/httpd-example.conf /opt/example-conf/httpd-example-quickstatements.conf

Et adapter pour servir QuickStatements.

Commandes shell :

su - apache
/opt/rh/httpd24/root/usr/sbin/httpd -f /opt/example-conf/httpd-example-quickstatements.conf -k start
  • Aller sur http://example-wiki.org/quickstatements/
  • Vérifier que la page s’affiche (noter qu’il y a des appels à https://tools-static.wmflabs.org et https://upload.wikimedia.org, les bloqueurs de pubs peuvent bloquer ces domaines et la page reste alors blanche)
  • Cliquer sur "Se connecter" en haut à droite
  • On est redirigé vers MediaWiki, cliquer sur Autoriser
  • On est redirigé vers Quick Statements, vérifier qu’on est connecté avec son pseudo
  • Créer un nouveau lot avec comme contenu : (NB: il y a des tabulations dans ce code)
    Commandes QuickStatements :
    CREATE
    LAST	Lfr	"test QuickStatement 1"
    
  • Cliquer sur "Importer des commandes dans le format V1" puis exécuter (pas en arrière-plan)
  • Aller sur les modifications récentes du wiki, il devrait y avoir le nouvel item (on pourra le supprimer)

Installation de QuickStatements (exécution des jobs en arrière-plan)[edit]

Commandes shell :

cd /opt/quickstatements
sed -i 's/wikidata/wikibase/g' schema.sql # Il est fixé en dur la valeur par défaut, or nous avons un nom différent (cf config.json, clé "site" et valeurs de "sites")
head -c 1000 /dev/urandom

Fichier /data/project/apache/replica.my.cnf :

user = 'qs'
password = 'VALEUR_ALÉATOIRE'
  • Ajouter dans /etc/hosts la ligne "127.0.0.1 tools.labsdb" (obligatoire car le nom du serveur n'est pas configurable)
  • Sur le site de Quick Statements, cliquer sur le pseudo, il doit être affiché un token (qui est généré lors de l’affichage de cette page, il est possible qu’on ait droit à des messages d’erreur si ce token n’a pas été généré)
  • Cliquer sur 'Vos derniers lots', il doit être affiché 'Pas de lots.'
  • Ensuite, créer un nouveau lot avec comme contenu : (NB: il y a des tabulations dans ce code)
    Commandes QuickStatements :
    CREATE
    LAST	Lfr	"test QuickStatement 2"
    
  • Cliquer sur "Importer des commandes dans le format V1" puis "exécuter en arrière-plan"
  • Aller sur le serveur en ligne de commande dans le dossier /opt/quickstatements et exécuter php bot.php (ne pas arrêter ce script pour l’instant, passer à l’étape suivante)
  • Aller sur les modifications récentes du wiki, il devrait y avoir le nouvel item (on pourra le supprimer)
  • On peut arrêter l’exécution de php bot.php
  • Sur QuickStatements, cliquer sur "Dernier lots", notre lot exécuté en arrière-plan doit apparaître
  • Mettre en place un cron pour lancer périodiquement cette commande
    Commandes shell :
    su - apache
    crontab -e # entrer "* * * * * source /opt/rh/rh-php72/enable && php /opt/quickstatements/bot.php" (ou une autre fréquence)
    

Configuration http des points d'entrée[edit]

Toutes les adresses publiques sont traitées sur frontend.example-wiki.org via une url applicatives.

On donne ici comment les urls sont redirigées ou traitées en direct par le serveur httpd s'il n'y a que des statiques servir.

url Composant applicatif Traitement httpd
http://example-wiki.org MediaWiki(php) proxy vers backend-server.example-wiki.org:8082
http://example-query.org Interface de saisie de requête sparql (statique) Servi localement
http://example-query.org/sparql Blazegraph (java) proxy vers backend-server.example-wiki.org:9999/bigdata/namespace/wdq/sparql + header X-BIGDATA-MAX-QUERY-MILLIS 60000 + X-BIGDATA-READ-ONLY "yes"
http://example-query.org/example-wiki.org/ Parsoid proxy vers backend-server.example-wiki.org:8142/example-wiki.org/
http://example-wiki.org/quickstatements/ Quick statements: modif en masse proxy vers backend-server.example-wiki.org:8084/

Procédures spécifiques[edit]

Modifier la longueur maximale des champs label/description[edit]

Par défaut, ce paramètre de la longueur maximale des champs label/description est à 250 caractères. Ces valeurs sont stockées dans la base de données MySQL (table wb_terms, colonnes term_text et term_search_key) qui sont limitées par défaut à 255 octets (le texte est codé en UTF-8), ce qui peut dans certains cas annuler partiellement la vérification sur la contrainte d'unicité langue+label+description.

Pour augmenter à 350 caractères, éditer le fichier de configuration de MediaWiki /opt/mediawiki/LocalSettings.php

Fichier /opt/mediawiki/LocalSettings.php (ajouter à la fin) :

$wgWBRepoSettings['string-limits']['multilang']['length'] = 350;

Modifier également le schéma de la base de données MySQL (pour éviter d'affaiblir la contrainte d'unicité, il faut paramétrer une longueur 4 fois supérieure au nombre de caractères max (ici 350 x 4 = 1400). (Une meilleure prise en compte serait d'utiliser le type MySQL utf8mb4, mais on s'exposerait possiblement à des problèmes.)

Commandes MySQL (lancer en commande shell mysql) :

USE wikibase;
ALTER TABLE wb_terms MODIFY term_text varbinary(355);
ALTER TABLE wb_terms MODIFY term_search_key varbinary(355);
quit

Noter :

  • si le nombre d'octets UTF-8 nécessaires pour stoker une chaîne dépasse la limite maximale de la base de données, la chaîne est tronquée mais acceptée ; cela n'a donc pas d'autre conséquence que d'affaiblir la contrainte d'unicité des labels/description
  • en cas d'augmentation de la taille de ce champ dans la base de données, les valeurs existantes en BDD ne sont pas mises à jour automatiquement
  • les labels sont enregistrés et affichés au même titre que les autres informations sur l'élément (dans un JSON dans la table text), indépendamment de la table wb_terms

Comptes bots / robots[edit]

Créer un compte

  • Créer un compte normal
  • Donner le statut "robot" au compte MediaWiki :
  • Attribuer un profil pour utilisation avec l'API :
    • Se connecter avec le compte du robot
    • Aller sur la page http://example-wiki.org/wiki/Special:BotPasswords,
    • Entrer un nom de profil (un même compte peut avoir différents profils avec des limitations différentes)
    • Sélectionner les permissions attribuées (possiblement toutes)
    • Enregistrer
    • Sauvegarder le mot de passe donné de la forme nom-du-profil@mot-de-passe