Wikipedia は、いわずと知れた人々の英知を集めた百科事典ツールです。
2007年4月の時点で日本版だけで約360万もの記事が掲載され、日々増加、加筆されています。
このような巨大なWikipediaは、世界中の様々な言語でも利用されていますが、意外にもその元となっているソフトウェアは、MediaWiki と呼ばれるフリーのソフトウェアから構築されています。
今回は、このMediaWikiの構築方法を書いてみます。
これで、自社内や自分のサイトに専用の事典を作る事ができます。
今回、私のほうで構築した環境はRedHatES4上であり、それに依存した記述がありますので参考にする際は、適宜自分の環境に置き換えてください。
MediaWikiはそのDBとして、PostgreSQLまたはMySQLを選択できますが、今回はPostgreSQLにて構築しています。
MediaWikiインストール前の準備
MediaWikiのDBとしてPostgreSQLを利用するために、PostgreSQLの環境を整えます。
RedHatES4に付属される、PostgreSQLはバージョンが7系です。
しかし、MediaWikiはバージョン8系が必要なので、OSをインストールする際にPostgreSQLのパッケージを含めずにインストールしておくか、またはインストール後である場合は、該当のパッケージを削除します。
1.1. PostgreSQLのパッケージがあるか確認
$ rpm -qa | grep postgres
上記で出てくるパッケージ削除する。
$ rpm -e {削除するパッケージ名}
パッケージ依存エラーが出る場合もあるので、関連するパッケージをまとめて削除します。
(必要なものまで削除しないように・・・)
パッケージ管理に関しては、下記の記事を参考にしてみてください。
PostgreSQLのバージョン8は、RedHatNetworkを確認するとRPMパッケージで提供されているものがあるのですが、ベータ版である事と細かなオプション指定をしてインストールする必要があり、それが面倒なのでソースからインストールします。
1.2 PostgreSQL8のインストール
取り合えず、公式ページ からソースをダウンロードします。
2007.04の時点で8系最新のソースは、8.2.3です。今回はこれを利用します。
インストールのオプションは、自分の環境に合わせて設定してください。
$ ./configure --mandir=/usr/local/man/ --datadir=/var/lib/pgsql/ --enable-nls=ja $ make $ su - # make install
インストール後は、PATHやPGDATAなど必要な環境変数をセットしておきます。
例)ハイライトの箇所を追記
$ su - postgres $ vi .bashrc PATH=$PATH:/usr/local/pgsql/bin/ export PATH PGDATA=/var/lib/pgsql/data export PGDATA
1.3 PostgreSQLのDB初期化
PostgreSQLのDBを初期化し、利用できるようにします。
$ su - postgres $ initdb -E UTF-8 --pgdata=/var/lib/pgsql/data/
※ PHPはRPMパッケージを利用しています。
ソースからインストールしている場合は、PostgreSQLのバージョンが変わった又は新規にインストールされた事で
PHPの再コンパイルが必要です。
MediaWikiインストール
2.1 MediaWikiのソースをダウンロード
公式ページ より、MediaWikiのソースをダウンロードします。
今回インストールしたバージョンは、1.9.3です。
2.2 FTPで稼動させるサーバーに転送、展開
2.3 展開したソースを、ApacheのDocument Rootに移動
例) ApacheのDocument Rootが「/home/wwwroot/」だった場合
$ mv mediawiki-1.9.3 wiki $ mv wiki /home/wwwroot/
移動したMediaWikiのディレクトリ内にある、configディレクトリの権限を
変更します。
$ cd /home/wwwroot/wiki/ $ chmod a+w config
2.4 ブラウザからMediaWikiにアクセス
MediaWikiはブラウザから環境設定が行えるため、2.3で移動させたMediaWikiのディレクトリにアクセスします。
2.5 必要項目の設定
自分の環境でMediaWikiを利用するために必要な項目を設定します。
最低限設定する項目
Wiki name | Wikiの名前 |
---|---|
Language | MediaWikiで使用する言語(日本語を選択) |
Admin username と Password | MediaWikiの管理者名とそのパスワード |
Database host | DBのホスト名。DBサーバーとWebサーバーが分かれている場合は、DBサーバーのIPアドレス又はホスト名を指定 |
Database name | PostgreSQL上に作成したDB名(設定方法は、2.6参照) |
DB username と DB password | Media WikiからPostgreSQLのDBを操作を行うためのユーザー名とそのパスワード(設定方法は、2.6参照) |
2.6 DB及びDBユーザーの作成
2.5でDB名とユーザーを指定しましたが、作成していない場合はそれを作成しておきます。
2.5のMediaWikiインストール画面の「Dabase name」で入力した名前(今回はデフォルトのwikidb)でDBを作成します。
$ su - postgres $ createdb wikidb
続いて、「Database user」で入力した名前(今回はデフォルトのwikiuser)をのPostgreSQL用ユーザーを作成します。
$ createuser wikiuser Shall the new role be a superuser? (y/n) y CREATE ROLE
2.7 Tsearch2のインストール
MediaWikiでは、Tsearch2という全文検索用のモジュールが必要です。
Tsearch2はPosrgreSQLの拡張モジュールとして用意されているので、PostgreSQLのソースに含まれています。
$ cd postgresql-8.2.3/contrib/tsearch2 $ make $ su - $ make install
次に、2.6で作成したDB(wikidb)にTsearch2用のテーブルを作成しておきます。
$ psql -e -f /var/lib/pgsql/contrib/tsearch2.sql wikidb
※ tsearch2.sqlのパスは、環境によって違ってくるのでfindコマンドで探してみてください。
スクリプトの実行が完了すると、下記のように必要なテーブルが作成されています。
wikidb=# \z Access privileges for database "wikidb" Schema | Name | Type | Access privileges --------+--------------+-------+---------------------------- public | pg_ts_cfg | table | public | pg_ts_cfgmap | table | public | pg_ts_dict | table | public | pg_ts_parser | table |
2.8 PL/pgSQLの設定
PL/pgSQLは、PostgreSQLデータベースシステム用の読み込み可能な手続き言語です。
(PostgreSQLプログラマガイド より)
MediaWikiで必要になってくるので、2.6で作成したDBに登録しておきます。
$ createlang plpgsql wikidb
2.9 MediaWikiインストールの続行
ここまでで一通りの環境設定が整ったので、再度2.5のインストール画面の設定を確認し続行します。
インストールが完了すると、
Installation successful! Move the config/LocalSettings.php file into the parent directory, then follow this link to your wiki.
とメッセージが表示されるので、メッセージの通りに2.3でDocument Rootに移動させたMediaWikiのディレクトリ内のconfigディレクトリにあるLocalSettings.phpを一つ上のディレクトリに移動させます。
$ cd /home/wwwroot/wiki/config/ $ mv LocalSettings.php ../
これで、必要な作業は全て完了です。
再度、ブラウザからMediaWikiのURLにアクセスします。
■ 今回の導入に際して参考にさせていただいたサイト
MediaWikiをインストールしてみた - Yukke.orz^Hg
UTF-8での全文検索メモ(PostgreSQL + Tsearch2 + MeCab 編) - plotless
MediaWikiインストール時のエラー対処
MediaWikiインストール時に必要な設定やモジュールが足らなかった場合は、エラーが出力されます。
そのエラーメッセージ別に対処方法を記載しておきます。
- メッセージその1
Checking that tsearch2 is installed in the database "wikidb"...FAILED. tsearch2 must be installed in the database "wikidb".Please see this article for instructions or ask on #postgresql on irc.freenode.net
Tsearch2のインストールが正常に行われていない可能性があります。
前述の2.7の作業を行います。
- メッセージその2
Checking for Pl/Pgsql ...not installed. Attempting to install Pl/Pgsql ... Warning: pg_query() [function.pg-query ]: Query failed: ERROR: must be superuser to create procedural language in /home/wwwroot/wiki/includes/DatabasePostgres.php on line 389 FAILED. You need to install the language plpgsql in the database wikidb
PL/pgSQLがインストールされて否可能性があります。
前述の2.8の設定を行います。
- メッセージその3
PL/pgSQLがインストールされていない可能性があります。
Checking tsearch2 permissions...FAILED. Make sure that the user "wikiuser" has SELECT access to the tsearch2 tables
Tsearch2用のテーブルに対して、SELECT権限がないケースです。
SELECT以外にもMediaWikiで利用するDBユーザーには様々な権限が必要なので適宜GRANTしてあげる必要があります。
または、前述の2.6のようにSuperUserとしてDBユーザーを作成します。
- メッセージその4
Creating tables... Warning: pg_query() [function.pg-query ]: Query failed: ERROR: invalid byte sequence for encoding "EUC_JP": 0xc489 HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". in /web/www/wiki/includes/DatabasePostgres.php on line 389 Set $wgShowExceptionDetails = true; in LocalSettings.php to show detailed debugging information.
DBがUTF-8以外の文字コードで作成されています。(上記の場合はEUC-JP)なので、DBをUTF-8の文字コードを指定して再作成します。
再作成以降は、再度Tsearch2やPL/pgSQLの設定を行います。
2007.05.07 追記
MediaWikiのDBにPostgreSQLを利用した場合で、登録した記事を検索しようとすると下記の様な内部処理エラーが発生します。
Warning: pg_query() [function.pg-query]: Query failed: ERROR: no operand in tsearch query: "+&テスト&" in /home/wwwroot/wiki/includes/DatabasePostgres.php on line 389
どうも、Tsearch2を利用したSQLが上手く動いてくれないようですが、PostgreSQLが悪いのかMediaWiki側が悪いのかが不明・・・。
解消法を知っている方、教えてください。
2007.05.10 追記
Mediawikiのバージョンを1.10.0へあげるとエラーが解消しました。
詳しくは、下記参照
MediaWiki1.10.0リリース と 1.9.3からのバージョンアップ