というわけで、WindowModePatchなどの情報を扱うためにWikiを使おう、ということでサーバーにMediaWikiをセットアップしてみましたが・・・。安定させるまでに妙な苦労を強いられる羽目になりました。いくつか参考にしたblogの記事なども出しながら構築時に起こった問題点などを列挙しながら行きたいと思います。
そもそもMediaWikiとは?
まあ、単純に言うとWikiシステムのうちの一つです。Wikiを使っている最大のサイトであるWikipediaが採用しているシステムでもあります。そのため、必要となればWikipediaからいくつかの情報を引っ張ってくることができるので使い勝手は悪くないと思います。Wikipediaが動作イメージそのものなので見ればどんな感じになるかは一目瞭然ですね。あれはかなりいろいろと組み込んであるのであそこまで見栄えがいいのですが、まあそれは置いておいて。
セットアップ環境を整えよう
使用するには環境が必要です。今回使用したのは
- MediaWiki 1.22.2
- php(必須)
- Apache(http)
- MySQL
です。まあ、MediaWiki以外は余り代わり映えがしない、というよりはこのblogを構築したときにも使っているのでそのままなのですが・・・
ただし、この中でhttpdであるApacheだけはいくつか設定が必要なので特別に書いておきます。他のhttpdを使用しているとはそれはそれでちょっとやっかいな設定が必要です。
初期セットアップはデータベースをあらかじめ作っておけば難しくない
まずはMediaWikiにアクセスさせるためのデータベースおよびユーザーアカウントを作っておきましょう。
GRANT ALL PRIVILEGES ON wikidb.* TO 'wikiuser'@'localhost' IDENTIFIED BY 'wikipass'; CREATE DATABASE wikidb;
この辺はどのデータベースでも代わり映えのしない文法なので普通ですね。あとはMediaWikiのページから最新版を取得して展開すればOKです。今回は1.22.2なので
$ wget "http://download.wikimedia.org/mediawiki/1.22/mediawiki-1.22.2.tar.gz" $ tar -xzf mediawiki-1.22.2.tar.gz
ですね。展開した後にできたディレクトリをWebサーバーの場所に持って行けばOKです。あとはmaintenance/install.phpをブラウザから開いてインストール作業を行えば問題はないと思います。たまにサーバー側のphpのモジュールが不足していたりすることもあるかもしれませんが、そのあたりはMediaWikiにあるインストールマニュアルを参考にがんばってください。
インストールの作業が完了するとページからLocalSettings.phpがもらえますのでダウンロードしてwikiのページに転送してとりあえずは完了です。転送した後、ページを開こうとすると初期ページではなくページが真っ白になることがありますが、この場合はだいたい拡張モジュールのうちLocalisationUpdateが悪さをしているようです。httpのエラーログやターミナル上からphpで実行すれば明白になると思いますが・・・。LocalSettings.phpからこのモジュールを読み込んでいる部分をコメントアウトしてしまいましょう。コメントアウトする場合はできる限りターミナル上で。ローカル上で行う場合は間違ってBOMがphpに書き込まれないようにしましょう。
# require_once "$IP/extensions/LocalisationUpdate/LocalisationUpdate.php";
また、私がはまった現象としてはエラーログに(短縮した記述で)
Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden
が記述されて画面が真っ白になることがあります。これは「http側のシンボリックリンク追跡を有効にしていないとRewriteRuleを使用できない」という意味になります。その場合は.htaccessをMediaWikiのルートディレクトリに作成して
Options +SymLinksIfOwnerMatch
を入れておきましょう。(FollowSymLinksでもまずくはないとは思うが一応この設定に)この後このファイルにはさらに追加を行います。
妙なメモリエラーが出ていないかどうかに注意
私が数時間悩んだエラーがこちら。ページを開くと表示はされていてもhttpのエラーログには怪しい表記が。ちょっとエラーを短縮しながらやると
・・・ PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/xsl.so' - /usr/lib/php/modules/xsl.so: failed to map segment from shared object: Cannot allocate memory in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/zip.so' - /usr/lib/php/modules/zip.so: failed to map segment from shared object: Cannot allocate memory in Unknown on line 0 PHP Fatal error: Out of memory (allocated 524288) (tried to allocate 12288 bytes) in ・・・・/wiki/maintenance/doMaintenance.php on line 73
PHP側になぜか512kBでメモリ確保ができなくなる、という不思議な状態にはまっているのが分かると思います。初めはmemory_limitの問題か、とも思ったのですが、それだけ小さいメモリで起こるのがなぜか分からない上に設定を変更してもエラーは止まらず、エラーを調べても似たようなページばかりでよくわからず。結論から言うとどうもMediaWiki側が使用するメモリ量の設定ミスのようで、LocalSettings.phpに
$wgMaxShellMemory = 786432;
の記述を追加すると収まってくれました。MediaWikiの解説ではkB単位のはずなのですが、本当なのでしょうか・・・?
短いURLを使えるようにしておこう
インストールした直後はすべてindex.phpの引数にタイトルを追加する形だけが有効になっています。そのため、Wikipediaのようにキーワードをディレクトリ以下に打ち込むと見つからないでエラーになるは見え見えですね。Apacheの場合はmod_rewriteとLocalSettings.php内にスクリプトパスの記述を行うことで短いURLが使えるようになります。MediaWikiで生成されるURLを短くする設定方法 – キーワードノートを参考にさせていただきました。ちなみにこのタイミングで再度.htaccessにRewriteの処理を追加することになります。他のサーバープログラムを利用している場合はそれにあわせた設定を行います。MediaWikiのShortURLに関するページにある程度記述がありますので追っかけてみましょう。
Wikipediaから使えるテンプレートを引っ張ってこよう
MediaWikiを使っているときに一番ありがたいのは最悪Wikipediaのテンプレートがそのまま使える、ということです。ちょうど調べているとWikipediaのテンプレートを自前のMediaWikiに追加した – People are programmers.というありがたい記事があったのでそのまま使わせてもらいました。今回の場合はレンタルサーバーではなくVPSサーバーなのでLuaはパッケージインストールされたものをそのまま使います。その場合の場所はwhichコマンドで出てきたものを使います。あとはParserFunctionsとScribuntoを拾ってきて設定を行えばImportとExportし放題になります。
ちょっとした注意点としては、上の短いURLでのアクセスが設定されていないとindex.phpの引数経由でアクセスしないと目的のページが出てきません。たとえば構築中のMediaWikiにテンプレートを直接インポートする場合は「http://~/wiki/index.php?title=Special:Import」と言う記述が必要です。これはなかなか面倒だと思います。まあ、左のメニューに「特別ページ」なる不思議なリンクがある場合はそちらからたどれるので面倒ではないと言えば面倒ではないですが、URLの見た目があれですよね・・・。
あと、引っ張ってきただけでは見た目は同じになりません。これは共通のスタイルシートが対応していないためで、MediaWiki:Common.cssを書き換えて対応します。書き換えは管理者のみが有効なので管理者のアカウントを使って書き換えます。面倒ならばWikipediaが持っている共通スタイルシートをそのままコピペするのが簡単かもしれません。
終われば染め上げていけ
ここまで終われば一通り使える状態になると思います。トップページを書き換えてそれらしくしてした後に公開前に必要となるページをどんどん作成していきましょう。私の方も記事の準備中だったりします。