執筆用に作った職場の 24 時間稼動 の Linux マシンですが, 仲間内との情報共有に MediaWikiを 入れてみました. Plamo の CD を漁ると簡単に入るのかもしれませんが, なんとなくソースを拾って入れました. その顛末を書いておきます. とは言え, 思い出しながら書いている/試行錯誤しながら行ったので 不要なものや必要だけど書いてないものがあるかもしれません. はい
なお、本サーバは職場 LAN 限定で動かすためセキュリティに関しては ほとんど考慮してません。万一本情報を元に公開サーバを構築する際は その辺の情報も収集・実行してください。
バージョンに関しては私がダウンロードした時点で最新のものということ以外, 特に深い理由はありません. また, apache は plamo に元々入っていた 2.0.54 を使っています. 昔のことなので定かでありませんが, AddDefaultCharset を off にしたとか, どのディレクトリでも cgi が動くようにしたとかの変更を行っていたはずです.
以下のような感じです. configure に prefix を付けるのがコツみたいです. 赤文字の PASSWORD は適当に読み替えてください.
# su # groupadd mysql # useradd -g mysql mysql # exit $ zcat mysql-5.0.33.tar.gz | tar xvf - $ cd mysql-5.0.33 $ ./configure --prefix=/usr/local/mysq $ make $ su # make install # cd /usr/local/mysql # bin/mysql_install_db --user=mysql # chown -R root . # chown -R mysql var # chgrp -R mysql . # bin/mysqld_safe --user=mysql & # bin/mysqladmin -u root password PASSWORD # bin/mysql -u root -p mysql > grant create, select, insert, update, delete, lock tables on wiki.* to wiki@localhost identified by 'password'; > create database wiki; > \q # exit |
以下のような感じです. これまた configure の際パラメータを沢山付けるのが コツのようです. 私の環境では apach は /opt/httpd に入っていましたので以下のようにしてますが, ここは環境によって変わるでしょう.
$ zcat php-5.2.0.tar.gz | tar xvf - $ cd php-5.2.0 $ ./configure \ --with-apxs2=/opt/httpd/bin/apxs \ --enable-magic-quotes \ --with-xml \ --enable-mbregex \ --enable-mbstring \ --enable-zend-multibyte \ --with-mysql=/usr/local/mysql \ --enable-ftp --with-zlib $ make $ su # make install # cp php.ini-dest /usr/local/lib/php.ini # exit |
apache からみえる所で mediawiki を展開し, その下にある config の パーミションを開けたり, LocalSettings.php を移動させたりします.
$ zcat mediawiki-1.9.1.tar.gz | tar xvf - # su # mv mediawiki-1.9.1 /opt/httpd/htdocs/wiki # cd /opt/httpd/htdocs/wiki # chmod a+w config |
その後, web ブラウザで上記ディレクトリ内の index.php をアクセスします. 何やら config しろと表示されますのでその通りやります. まぁ
Site name | TEST |
Language | ja |
Database name | TEST |
Database username | mysql |
Database password | PASSWORD |
最後に以下のコマンドを実行します.
# cp config/LocalSettings.php . # rm -rf config # exit |
ブラウザで mediawiki を入れた URL にアクセスして 「メインページ」が現れたらインストール成功です.
筆者の環境では, 出力が sjis になってしまい, 「編集」タブを押すと文字化けが 発生してました. 結局 /usr/loca/lib/php.ini 内で
default_charset | "UTF-8" |
mbstring.internal_encoding | "UTF-8" |
mbstring.http_output | "UTF-8" |
Linux 起動後自動的に mysql を起動させる方法は /etc/rc.d/rc.local の最後に
/usr/local/mysql/share/mysql/mysql.server start |
pdf 等のファイルをアップロード可能にするためには, LocalSettings.php に
$wgEnableUploads = true; $wgUseImageResize = true; $wgFileExtensions = array('png', 'gif', 'jpg', 'jpeg', 'ogg', 'zip', 'ppt', 'pdf', 'xls', 'doc', 'bmp', 'ico'); $wgMimeDetectorCommand = "file -bi"; $wgVerifyMimeType=false; |
さらに, ログインユーザがアップロードしたファイルを削除可能にするには
$wgGroupPermissions['user']['delete'] = true; |
コメント等の表示を日本標準時にするためには LocalSetting.php に
$wgLocalTZoffset = "+540"; |
しかし, 日本標準時で表示すると, 夕方以降にコメントに署名をすると曜日がずれる現象に悩まされました. どうもバグのようです. とりあえず安直に language/Language.php に
function sprintfDate( $format, $ts ) { $s = ''; 〜中略〜 case 'D': if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts ); $s .= $this->getWeekdayAbbreviation( date( 'w', $unix ) + 1 ); break; |
function sprintfDate( $format, $ts ) { global $wgLocalTZoffset; $s = ''; 〜中略〜 case 'D': if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts ); $s .= $this->getWeekdayAbbreviation( date( 'w', $unix - $wgLocalTZoffset * 60 ) + 1 ); break; |
筆者の環境ではログインした後, 別のページ (メインページなど) に ジャンプするとログアウト状態になることに 悩まされましたが, /tmp/php を掘ってパーミションをガラガラにすれば直りました (*2).
後は必要に応じ $wgLogo やら $wgCapitalLinks などを調整します. その辺は [mediawiki] [インストール] 等で検索すれば出てくるでしょう (そう言ってしまえば, このページの情報も大半はそれで出てくることですが...).
PHP なる言語を触るのは初めてだったのですが, どうも date()関数の第二引数は, デフォルトで time(), すなわち GMT (世界標準時) における通算秒数を入れないといけないのに, 調べてみると変数 $unix に JST (+9 時間) の値が入ることが原因のようです. 他にも date() を使っている所があるし, これだけで済むとは思いません. もっと根本的に直した方がいいことは分かっていますが (作者にフィードバックすれば喜ばれるかもしれないし), 下手にいじると, どこがどうなるか不明だし, 一応気づく表示問題は解決されたためやっていません.
ちなみにこの問題は web で結構検索してみたのですが, 「これは」というのは 見つかりませんでした. 他では起こらないのかもしれません. たまたま今回インストールしたバージョンに入ってしまった不具合なのかもしれません.
/usr/local/lib/php.ini の session.save_path に /tmp/php と書かれているくせに そのディレクトリが無かったことが原因. 無ければ掘ればいいのに.... /tmp ディレクトリだからシステム起動時に「無ければ掘る」というフレーズを 追加した方がいいかもしれません. もしくは session.save_path の指定先を別にするとか..