「MacWiki:MediaWikiのインストール」の版間の差分

提供: MacWiki
移動: 案内検索
(インストールメモ)
(66.198.41.11 (会話) による編集を たちゃな による版へ差し戻し)
行1: 行1:
He looked back up at the teacher and noticed that she was looking back at him with a face that made him think about her naked with a dildo rammed up her steaming hot tight pussy <a href=" http://lamobotz.u.yuku.com ">www redtub eocm</a>
+
== インストールメモ ==
 +
 
 +
sourceforge.jp へ [[MediaWiki]] をインストールするにあたり、おこなった手順について書いておきます。(Apr 12, 2007)
 +
 
 +
=== アーカイブの展開 ===
 +
 
 +
まず、sf.jp のシェルサーバにログインし、[[MediaWiki]] 1.13 系列の配布ファイルを [[MacWiki]] プロジェクトディレクトリ配下の htdocs/wiki に展開します。各ファイルは group writable にしておきます。
 +
 
 +
<pre>
 +
takanori@pc192168000047$ ssh tatyana@shells.sourceforge.jp
 +
 
 +
tatyana@sf-usr-shell$ cd Sources/
 +
tatyana@sf-usr-shell$ wget http://download.wikimedia.org/mediawiki/1.13/mediawiki-1.13.0.tar.gz
 +
 
 +
tatyana@sf-usr-shell$ cd /home/groups/m/ma/macwiki/htdocs/
 +
tatyana@sf-usr-shell$ tar xvfz ~/Sources/mediawiki-1.13.0.tar.gz
 +
tatyana@sf-usr-shell$ mv mediawiki-1.13.0 wiki
 +
 
 +
tatyana@sf-usr-shell$ find wiki -type d | xargs chmod 2775
 +
tatyana@sf-usr-shell$ find wiki -type f | xargs chmod 664
 +
tatyana@sf-usr-shell$ chmod o+w wiki/config wiki/images
 +
</pre>
 +
 
 +
sf.jp において PHP のプロセスは www-data:www-data の権限で動作します。この仕様のため、PHP のプロセスから書き込みがおこなわれる wiki/config および wiki/images のディレクトリは、everyone writable として設定せざるを得ません。
 +
 
 +
=== ブラウザ上からのインストール作業 ===
 +
 
 +
ウェブブラウザで config/index.php にアクセスします。
 +
 
 +
<pre>
 +
Checking environment...
 +
 
 +
Please include all of the lines below when reporting installation problems.
 +
 
 +
PHP 5.2.0-8+etch10 installed
 +
Found database drivers for: MySQL
 +
Warning: PHP's safe mode is active. You may have problems caused by this, particularly if using image uploads.
 +
PHP server API is apache2handler; ok, using pretty URLs (index.php/Page_Title)
 +
Have XML / Latin1-UTF-8 conversion support.
 +
 
 +
Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/var/lib/php5) is not within the allowed path(s): (/home/groups/local/pear:/home/groups:/tmp:/usr/bin:/bin) in /home/groups/m/ma/macwiki/htdocs/wiki/config/index.php on line 424
 +
Warning: Your session.save_path value (/var/lib/php5) appears to be invalid or is not writable. PHP needs to be able to save data to this location for correct session operation.
 +
PHP's memory_limit is 32M.
 +
Couldn't find Turck MMCache, eAccelerator, APC or XCache; cannot use these for object caching.
 +
GNU diff3 not found.
 +
Found GD graphics library built-in, image thumbnailing will be enabled if you enable uploads.
 +
Installation directory: /home/groups/m/ma/macwiki/htdocs/wiki
 +
Script URI path: /wiki
 +
Installing MediaWiki with php file extensions
 +
Environment checked. You can install MediaWiki.
 +
</pre>
 +
 
 +
Site config の各項目を入力します。
 +
 
 +
Wiki name: MacWiki
 +
Contact e-mail: tatyana@users.sourceforge.jp (仮設定です。LocalSettings.php を書き換えることで変更できると思います。)
 +
Language: ja - 日本語
 +
Copyright/license: No license metadata (GFDL と CC から選択できますが、とりあえずパブリックドメインを踏襲します。)
 +
Admin username: WikiSysop
 +
Password: ******** (実際のパスワードはプロジェクトディレクトリの ReadMe.txt を参照してください。)
 +
Password confirm: ********
 +
Object caching: No caching
 +
Memcached servers:
 +
 +
E-mail features (global): Enabled
 +
User-to-user e-mail: Enabled
 +
E-mail notification about changes: Enabled for changes to user discussion pages, and to pages on watchlists (not recommended for large wikis)
 +
E-mail address authentication: Enabled
 +
 +
Database type: MySQL
 +
Database host: mysql.sourceforge.jp
 +
Database name: macwiki
 +
DB username: macwiki
 +
DB password: ******** (実際のパスワードはプロジェクトディレクトリの ReadMe.txt を参照してください。)
 +
DB password confirm: ********
 +
 +
Superuser account: -
 +
Superuser name: root
 +
Superuser password: * (おそらく使われないのでしょう。)
 +
 +
Database table prefix: mw_ (DB を他用途にも使うことを想定し、念のためテーブル名に prefix を付けておきます。)
 +
Storage Engine: InnoDB
 +
Database charset: Backwards-compatible UTF-8 (MySQL 4.1 以降では MySQL 4.1/5.0 binary を選択するのがよい)
 +
 
 +
ボタンを押すとインストールが始まります。
 +
 
 +
<pre>
 +
Warning: $wgSecretKey key is insecure, generated with mt_rand(). Consider changing it manually.
 +
Generating configuration file...
 +
Database type: MySQL
 +
Loading class: DatabaseMysql
 +
Attempting to connect to database server as macwiki...success.
 +
Connected to 4.0.24_Debian-10sarge3-log
 +
Database macwiki exists
 +
Creating tables... done.
 +
Initializing statistics...
 +
Created sysop account WikiSysop.
 +
Creating LocalSettings.php...
 +
 
 +
Installation successful! Move the config/LocalSettings.php file to the parent directory, then follow this link to your wiki.
 +
You should change file permissions for LocalSettings.php as required to prevent other users on the server reading passwords and altering configuration data.
 +
</pre>
 +
 
 +
生成された config/LocalSettings.php をしかるべき場所に再配置します。
 +
 
 +
tatyana@sf-usr-shell$ cp config/LocalSettings.php ./LocalSettings.php
 +
tatyana@sf-usr-shell$ chmod 664 LocalSettings.php
 +
 
 +
sf.jp では、PHP のプロセスは www-data:www-data 権限で動作するので、このファイルもまた everyone readable にせざるを得ません。
 +
 
 +
config ディレクトリは以後不要となるので削除しておきます。
 +
 
 +
=== PHP セッションセーブパスの設定 ===
 +
 
 +
[http://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Sourceforge.net Running MediaWiki on Sourceforge.net] によると、
 +
sourceforge では以下のようにして PHP のセッションセーブパスを設定しておくことが必須のようです。
 +
 
 +
ガイド文書では /tmp/persistent/PROJECT_UNIX_NAME/sessions にディレクトリを作成するように書かれていますが、
 +
ここではプロジェクトディレクトリに var を掘り、その中に用意することにしました。
 +
 
 +
tatyana@sf-usr-shell$ mkdir -p /home/groups/m/ma/macwiki/var/mediawiki_sessions
 +
tatyana@sf-usr-shell$ chmod a+w /home/groups/m/ma/macwiki/var/mediawiki_sessions
 +
 
 +
[LocalSettings.php]
 +
&lt;?php
 +
 +
session_save_path("/home/groups/m/ma/macwiki/var/mediawiki_sessions");
 +
...
 +
 
 +
=== タイムゾーンの設定 ===
 +
 
 +
[LocalSettings.php]
 +
...
 +
# $wgLocaltimezone = 'Asia/Tokyo';
 +
$wgLocalTZoffset = '+540';
 +
 
 +
sf.jp では PHP が safe mode で動いている都合上、一行目を有効にすることはできません。
 +
 
 +
===putenv() の呼び出しに関する警告の回避===
 +
 
 +
sf.jp では PHP が safe mode で動いている都合上、putenv() を呼び出そうとすると警告が表示されてしまいます。
 +
 
 +
<pre>
 +
--- includes/Setup.php.orig    2008-08-08 19:19:27.000000000 +0900
 +
+++ includes/Setup.php  2008-08-15 01:55:36.000000000 +0900
 +
@@ -118,7 +118,7 @@
 +
  * Workaround for http://bugs.php.net/bug.php?id=45132
 +
  * escapeshellarg() destroys non-ASCII characters if LANG is not a UTF-8 locale
 +
  */
 +
-putenv( 'LC_CTYPE=en_US.UTF-8' );
 +
+//putenv( 'LC_CTYPE=en_US.UTF-8' );
 +
setlocale( LC_CTYPE, 'en_US.UTF-8' );
 +
 +
if ( !class_exists( 'AutoLoader' ) ) {
 +
</pre>
 +
 
 +
どうしようもないので、ここでは無理矢理警告を押し込めています。
 +
 
 +
* MediaWiki 1.13.2 以降では不要。
 +
 
 +
=== 画像ファイルアップロードの許可 ===
 +
 
 +
画像ファイルのアップロードを許可します。
 +
 
 +
[LocalSettings.php]
 +
...
 +
$wgEnableUploads        = true;
 +
 
 +
sf.jp では PHP が safe mode で動作しているため、ハッシュツリーに基づいた画像ファイルの格納はできません。($wgHashedUploadDirectory は false)
 +
 
 +
LocalSettings.php 中のメモに従い、images ディレクトリ配下に手動でサブディレクトリを用意します。
 +
 
 +
$ cd images
 +
$ mkdir archive thumb temp
 +
$ chmod a+w archive thumb temp
 +
 
 +
===外部画像の埋め込みを許可する===
 +
 
 +
画像ファイルの URL が記入された場合に、画像を埋め込んで表示させるようにします。
 +
 
 +
[LocalSettings.php]
 +
...
 +
$wgAllowExternalImages = true;
 +
 
 +
=== ページ名の最初の文字に小文字を使えるようにする ===
 +
 
 +
デフォルトでは、ページ名の先頭文字は常に大文字に変換されます。
 +
 
 +
LocalSettings.php に $wgCapitalLinks = false; の設定行を加えることで、ページ名の最初の文字に小文字を使えるようにできます。(pTeX が PTeX などとならずに済みます。)
 +
 
 +
[LocalSettings.php]
 +
...
 +
$wgCapitalLinks = false;
 +
 
 +
=== InterWiki の設定 ===
 +
 
 +
InterWiki 機能を使うため、
 +
maintenance/interwiki.sql を参考に、DB 内のテーブル mw_interwiki を書き換えます。
 +
 
 +
<pre>
 +
$ mysql -u macwiki --database=macwiki --host=mysql.sourceforge.jp -p
 +
 
 +
mysql> REPLACE INTO mw_interwiki (iw_prefix,iw_url,iw_local) VALUES
 +
      ('google','http://www.google.com/search?q=$1',0),
 +
      ('find','http://macwiki.sourceforge.jp/wiki/index.php/%E7%89%B9%E5%88%A5:Search?search=$1&fulltext=%E6%A4%9C%E7%B4%A2',0),
 +
      ('isbn','http://www.amazon.co.jp/exec/obidos/ASIN/$1',0),
 +
      ('asin','http://www.amazon.co.jp/exec/obidos/ASIN/$1',0),
 +
      ('wikipedia','http://ja.wikipedia.org/wiki/$1',0),
 +
      ('wikipedia-en','http://en.wikipedia.org/wiki/$1',0);
 +
</pre>
 +
 
 +
wiki のページにおいて、二重スクエアブラケットの中にたとえば <nowiki>[[Wikipedia:ほにゃらら]]</nowiki> などと書けば、wikipedia の当該記事へのリンクとなります。
 +
InterWiki の設定は、あまり多くしても使わなくなると思います。
 +
 
 +
=== ConfirmEdit + MacWikiCaptcha の導入 ===
 +
 
 +
spam 防止のため、[http://www.mediawiki.org/wiki/Extension:ConfirmEdit ConfirmEdit] を導入します。
 +
 
 +
まず、ConfirmEdit の配布ファイルを SVN より取得し、extensions ディレクトリに格納します。
 +
 
 +
<pre>
 +
tatyana@sf-usr-shell$ cd extensions
 +
tatyana@sf-usr-shell$ svn checkout http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/ConfirmEdit ConfirmEdit
 +
A  ConfirmEdit/MathCaptcha.php
 +
A  ConfirmEdit/ConfirmEdit.i18n.php
 +
A  ConfirmEdit/FancyCaptcha.i18n.php
 +
A  ConfirmEdit/ConfirmEdit.php
 +
A  ConfirmEdit/FancyCaptcha.php
 +
A  ConfirmEdit/captcha.py
 +
A  ConfirmEdit/MathCaptcha
 +
リビジョン 21231 をチェックアウトしました。
 +
</pre>
 +
 
 +
続いて MacWikiCaptcha を導入します。
 +
プロジェクトの svn レポジトリより MacWikiCaptcha.php, MathCaptcha.class.php を入手し、ConfirmEdit ディレクトリ内に設置します。
 +
 
 +
<pre>
 +
$ svn export http://svn.sourceforge.jp/svnroot/macwiki/tatyana/MacWikiCaptcha/for_1.12/MacWikiCaptcha.php
 +
$ svn export http://svn.sourceforge.jp/svnroot/macwiki/tatyana/MacWikiCaptcha/for_1.12/MacWikiCaptcha.class.php
 +
</pre>
 +
 
 +
その後、LocalSettings.php で ConfirmEdit + MacWikiCaptcha を読み込ませます。
 +
 
 +
[LocalSettings.php]
 +
...
 +
require_once( "$IP/extensions/ConfirmEdit/ConfirmEdit.php" );
 +
require_once( "$IP/extensions/ConfirmEdit/MacWikiCaptcha.php" );
 +
$wgCaptchaClass = 'MacWikiCaptcha';
 +
$wgGroupPermissions['user']['skipcaptcha'] = true;
 +
$wgCaptchaTriggers['edit']                = true; // Would check on every edit
 +
$wgCaptchaTriggers['create']              = true; // Check on page creation.
 +
...
 +
 
 +
=== sf.jp アイコンの表示 ===
 +
 
 +
sourceforge のサービスを利用している場合、
 +
プロジェクトホームページにロゴを張り付ける必要があるので対処。
 +
 
 +
<pre>
 +
--- includes/Skin.php.orig      2008-03-21 07:08:49.000000000 +0900
 +
+++ includes/Skin.php  2008-04-28 17:31:25.000000000 +0900
 +
@@ -1150,6 +1150,7 @@
 +
                global $wgStylePath;
 +
                $url = htmlspecialchars( "$wgStylePath/common/images/poweredby_mediawiki_88x31.png" );
 +
                $img = '<a href="http://www.mediawiki.org/"><img src="'.$url.'" alt="Powered by MediaWiki" /></a>';
 +
+              $img .= '&nbsp;<a href="http://sourceforge.jp/"><img src="http://sourceforge.jp/sflogo.php?group_id=1160" width="96" height="31" border="0" alt="SourceForge.JP" /></a>';
 +
                return $img;
 +
        }
 +
 +
</pre>
 +
 
 +
*[http://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Sourceforge.net Running MediaWiki on Sourceforge.net]
 +
 
 +
===  ロゴ/favicon の変更 ===
 +
 
 +
オリジナルのロゴが出来上がるまで、とりあえずは [[MediaWiki]] のアイコンで代用しておきます。
 +
 
 +
[LocalSettings.php]
 +
...
 +
$wgLogo            = "$wgScriptPath/skins/monobook/wiki.png";
 +
$wgFavicon          = "/favicon.png";
 +
 
 +
htdocs ディレクトリ直下に favicon.png を設置。
 +
 
 +
=== SiteCss を使わない ===
 +
 
 +
[LocalSettings.php]
 +
...
 +
$wgUseSiteCss = false;
 +
 
 +
SiteCss を有効にしていると、sf.jp 上では何故か、数十回のリロードにつき一度あるかないかの割合で GET /test/index.php?title=MediaWiki:Common.css&action=raw&ctype=text/css&smaxage=18000 のクエリ (PHP を介した css ファイルの読み出し)がおこなわれた際に 30 秒間の待ちが発生することが観測された。 (このファイルはキャッシュされるため、一般的な利用下での発生頻度はさらに低い。)
 +
 
 +
30 秒というのは PHP のタイムアウト時間と等しく、一つにはプロセスの出力バッファ周りでの不具合というのが 原因として考えられたが、sf.jp ではウェブサーバにログインをおこなうことができないため、 根本的な原因の特定には至らなかった。
 +
 
 +
よって、今回は $wgUseSiteCss を false に設定することでクエリを抑止し、かかる問題を回避した。 (この場合、Common.css はスタティックなデータとしてダウンロードされるようになる。)
 +
 
 +
=== フォント/配色の変更 ===
 +
 
 +
==== 全体のフォントサイズの調整 ====
 +
 
 +
<pre>
 +
--- skins/monobook/main.css.orig        2008-03-21 07:08:42.000000000 +0900
 +
+++ skins/monobook/main.css    2008-04-28 22:05:50.000000000 +0900
 +
@@ -40,7 +40,7 @@
 +
*/
 +
 +
body {
 +
-      font: x-small sans-serif;
 +
+      font-size: 76%;
 +
        background: #f9f9f9 url(headbg.jpg) 0 0 no-repeat;
 +
        color: black;
 +
        margin: 0;
 +
</pre>
 +
 
 +
* 旧 [[MacWiki]] と同じく、フォントフェイスは未設定としています。これにより、Mac 上では一般にヒラギノ明朝で表示されます。
 +
 
 +
==== 旧 [[MacWiki]] のデザインに似せる ====
 +
 
 +
その他、css を使ったデザインの調整に関しては、このファイルを書き換えることで可能となるようです。たとえば、
 +
 
 +
<pre>
 +
@@ -137,6 +137,21 @@
 +
h6 { font-size: 80%;  }
 +
h6 .editsection { font-size: 125%; font-weight: normal; }
 +
 +
+/*kokokara*/
 +
+h2 { font-size: 120%; }
 +
+h2 .editsection { font-size: 83%; }
 +
+h2 { padding: .3em 0 .3em .5em; margin-left: -5pt; }
 +
+h2 {
 +
+    border-bottom: none;
 +
+    font-weight: bold;
 +
+}
 +
+h3 { font-size: 100%; }
 +
+h3 .editsection { font-size: 100%; }
 +
+h3 { padding: .15em 0 .15em .5em; }
 +
+h3 { font-weight: normal; }
 +
+h2, h3 { background-color: #ccf; border-color: #66c; border-style: solid; border-width: 0 0 0 15pt; }
 +
+/*kokomade*/
 +
+
 +
ul {
 +
        line-height: 1.5em;
 +
        list-style-type: square;
 +
</pre>
 +
 
 +
<pre>
 +
@@ -223,6 +236,14 @@
 +
        line-height: 1.1em;
 +
}
 +
 +
+/*kokokara*/
 +
+pre {
 +
+    border: 1px solid #99f;
 +
+    color: #333;
 +
+    background-color: #eef;
 +
+}
 +
+/*kokomade*/
 +
+
 +
/*
 +
** the main content area
 +
*/
 +
</pre>
 +
 
 +
以上で h2, h3 と pre のデザインが 旧 [[MacWiki]] ライクになります。
 +
 
 +
==== その他 ====
 +
 
 +
プレビュー画面の背景を調整します。
 +
<pre>
 +
@@ -1557,3 +1578,7 @@
 +
        vertical-align: middle;
 +
        font-size: 90%;
 +
}
 +
+
 +
+div#wikiPreview {
 +
+    background-image : url("preview.png");
 +
+}
 +
</pre>
 +
 
 +
preview.png は skins/monobook に設置。
 +
 
 +
===  タイトルをデフォルトの「(ページ名) - MacWiki」から「MacWiki - (ページ名)」に変更 ===
 +
 
 +
js 等を含めたページのデザインはこちらのファイルで変更可能とのこと。
 +
 
 +
<pre>
 +
--- skins/MonoBook.php.orig    2008-03-21 07:08:45.000000000 +0900
 +
+++ skins/MonoBook.php  2008-04-28 22:52:04.000000000 +0900
 +
@@ -55,7 +55,7 @@
 +
        <head>
 +
                <meta http-equiv="Content-Type" content="<?php $this->text('mimetype') ?>; charset=<?php $this->text('charset') ?>" />
 +
                <?php $this->html('headlinks') ?>
 +
-              <title><?php $this->text('pagetitle') ?></title>
 +
+              <title><?php if (ereg("^(.*) - ([^-]*)$", $this->data['pagetitle'], $match)) {print("$match[2] - $match[1]");} else {$this->text('pagetitle');} ?></title>
 +
                <style type="text/css" media="screen, projection">/*<![CDATA[*/
 +
                        @import "<?php $this->text('stylepath') ?>/common/shared.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";
 +
                        @import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/main.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";
 +
</pre>
 +
 
 +
文字列はエスケープ処理されているようなので、そのまま出しても別に構わない?
 +
 
 +
=== ページフッタに copyright, privacy policy, disclaimer へのリンクを表示しない ===
 +
 
 +
<pre>
 +
@@ -257,8 +257,8 @@
 +
                        <ul id="f-list">
 +
<?php
 +
                $footerlinks = array(
 +
-                      'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', 'copyright',
 +
-                      'privacy', 'about', 'disclaimer', 'tagline',
 +
+                      'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', /*'copyright',*/
 +
+                      /*'privacy',*/ 'about', /*'disclaimer',*/ 'tagline',
 +
                );
 +
                foreach( $footerlinks as $aLink ) {
 +
                        if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
 +
</pre>
 +
 
 +
=== バックアップスクリプト ===
 +
 
 +
とりあえず、現在は私 (たちゃな) の権限下で以下のスクリプトを動かしている。
 +
 
 +
[/home/users/t/ta/tatyana/Sources/macwiki_dump/backup_macwiki.sh]
 +
#!/bin/bash
 +
 +
HOME=/home/users/t/ta/tatyana/Sources/macwiki_dump
 +
 +
destdir='/home/groups/m/ma/macwiki/var/mediawiki_backup'
 +
expire=+90
 +
 +
filename=mediawiki_`date +"%Y%m%d_%H%M%S.sql"`
 +
group=macwiki
 +
dbuser=macwiki
 +
dbname=macwiki
 +
dbpass=********
 +
dbhost=mysql.sourceforge.jp
 +
 +
 +
test -f $HOME/.my.cnf || (touch $HOME/.my.cnf; chmod 600 $HOME/.my.cnf; echo "[client]" > $HOME/.my.cnf; echo "password=$dbpass" >> $HOME/.my.cnf; (test -f $HOME/.my.cnf || (echo "cannot open \"$HOME/.my.cnf\""; exit 1)))
 +
 +
find $destdir -type f -mtime $expire | xargs --no-run-if-empty rm
 +
 +
touch $HOME/temp.sql
 +
chmod 600 $HOME/temp.sql
 +
mysqldump --quick -u $dbuser $dbname --host=$dbhost > $HOME/temp.sql
 +
bzip2 -9 $HOME/temp.sql
 +
mv $HOME/temp.sql.bz2 "${destdir}/${filename}.bz2"
 +
chgrp $group "${destdir}/${filename}.bz2"
 +
chmod 660 "${destdir}/${filename}.bz2"
 +
 
 +
$ crontab -e
 +
-------------------------------------------------------------------------------------------------------
 +
12      0      *      *      *      /home/users/t/ta/tatyana/Sources/macwiki_dump/backup_macwiki.sh
 +
-------------------------------------------------------------------------------------------------------
 +
 
 +
=== ArticleComments/Lite ===
 +
 
 +
一行コメント機能が欲しかったので、
 +
ArticleComments (http://www.mediawiki.org/wiki/Extension:ArticleComments) をベースにオリジナルのエクステンションを作成した。
 +
 
 +
インストール方法は、MacWiki プロジェクトの svn ツリーから ArticleCommentsLite.php を取得し、MediaWiki の extensions ディレクトリに設置するだけ。
 +
 
 +
<pre>
 +
$ cd extensions
 +
$ svn checkout http://svn.sourceforge.jp/svnroot/macwiki/tatyana/ArticleCommentsLite ArticleCommentsLite
 +
</pre>
 +
 
 +
その後、LocalSettings.php に以下のように書く。
 +
 
 +
[LocalSettings.php]
 +
...
 +
require_once("$IP/extensions/ArticleCommentsLite/ArticleCommentsLite.php");
 +
$wgArticleCommentLiteDefaults['nokana']=true;
 +
 
 +
ここで、2行目の設定は、旧 [[MacWiki]] 準拠の spam 防止機能を有効にするためのオプションで、
 +
書き込まれたコメント中に(平|片)仮名が含まれていることを要求するためのもの。デフォルトでは false。
 +
 
 +
現在、[[Project:談話室|談話室]] のページでテスト中。(Apr 29, 2007〜)
 +
 
 +
===全文検索の機能改善 (experimental)===
 +
 
 +
標準の MySQL は日本語テキストのインデックス化に難があり、全文検索の取りこぼしが顕著である。このため MediaWiki の日本語検索機能は殆ど使いものにならない。
 +
 
 +
根本的な解決のためには MySQL 自体に手を加える必要があると思われる (e.g. [http://qwik.jp/tritonn/ Tritonn]) が、ここでは SearchMySQL.php の SQL クエリを書き換えることで一応の回避を試みた。
 +
 
 +
<pre>
 +
--- includes/SearchMySQL.php.orig        2008-06-20 06:02:23.000000000 +0900
 +
+++ includes/SearchMySQL.php    2008-09-18 20:08:55.000000000 +0900
 +
@@ -41,6 +41,8 @@
 +
                $searchon = '';
 +
                $this->searchTerms = array();
 +
 +
+              $field = $this->getIndexField( $fulltext );
 +
+
 +
                # FIXME: This doesn't handle parenthetical expressions.
 +
                $m = array();
 +
                if( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
 +
@@ -50,14 +52,21 @@
 +
                                if( $this->strictMatching && ($terms[1] == '') ) {
 +
                                        $terms[1] = '+';
 +
                                }
 +
-                              $searchon .= $terms[1] . $wgContLang->stripForSearch( $terms[2] );
 +
                                if( !empty( $terms[3] ) ) {
 +
                                        // Match individual terms in result highlighting...
 +
                                        $regexp = preg_quote( $terms[3], '/' );
 +
-                                      if( $terms[4] ) $regexp .= "[0-9A-Za-z_]+";
 +
+                                      $terms[3] = str_replace( '\'', '\\\'', $terms[3] );
 +
+                                      if ( !empty( $searchon ) ) { $searchon .= ' AND '; }
 +
+                                      if ( $terms[1] == '-' ) { $searchon .= ' NOT '; }
 +
+                                      $searchon .= (" $field LIKE '%" . $terms[3] . "%' ");
 +
                                } else {
 +
                                        // Match the quoted term in result highlighting...
 +
-                                      $regexp = preg_quote( str_replace( '"', '', $terms[2] ), '/' );
 +
+                                      $terms[2] = str_replace( '"', '', $terms[2] );
 +
+                                      $regexp = preg_quote( $terms[2], '/' );
 +
+                                      $terms[2] = str_replace( '\'', '\\\'', $terms[2] );
 +
+                                      if ( !empty( $searchon ) ) { $searchon .= ' AND '; }
 +
+                                      if ( $terms[1] == '-' ) { $searchon .= ' NOT '; }
 +
+                                      $searchon .= (" $field LIKE '%" . $terms[2] . "%' ");
 +
                                }
 +
                                $this->searchTerms[] = $regexp;
 +
                        }
 +
@@ -67,9 +76,8 @@
 +
                        wfDebug( "Can't understand search query '{$filteredText}'\n" );
 +
                }
 +
 +
-              $searchon = $this->db->strencode( $searchon );
 +
-              $field = $this->getIndexField( $fulltext );
 +
-              return " MATCH($field) AGAINST('$searchon' IN BOOLEAN MODE) ";
 +
+              if ( empty( $searchon ) ) { $searchon = ' FALSE '; } /* dummy */
 +
+              return $searchon;
 +
        }
 +
 +
        public static function legalSearchChars() {
 +
@@ -170,7 +178,7 @@
 +
        * @return string
 +
        */
 +
        function getIndexField( $fulltext ) {
 +
-              return $fulltext ? 'si_text' : 'si_title';
 +
+              return $fulltext ? 'old_text' : 'page_title';
 +
        }
 +
 +
        /**
 +
@@ -187,10 +195,11 @@
 +
        function queryMain( $filteredTerm, $fulltext ) {
 +
                $match = $this->parseQuery( $filteredTerm, $fulltext );
 +
                $page        = $this->db->tableName( 'page' );
 +
-              $searchindex = $this->db->tableName( 'searchindex' );
 +
+              $text        = $this->db->tableName( 'text' );
 +
+              $revision    = $this->db->tableName( 'revision' );
 +
                return 'SELECT page_id, page_namespace, page_title ' .
 +
-                      "FROM $page,$searchindex " .
 +
-                      'WHERE page_id=si_page AND ' . $match;
 +
+                      "FROM $page,$text,$revision " .
 +
+                      'WHERE old_id=rev_text_id AND rev_page=page_id AND page_latest=rev_id AND ' . $match;
 +
        }
 +
 +
        /**
 +
</pre>
 +
 
 +
case-insensitive な検索のためには l.61, 69 を CONVERT($field using utf8) LIKE 〜 のように書き換えれば良いが、この構文は MySQL 4.1 以降でしか利用できないので注意。(sf.jp の MySQL は 4.0 のため適用できない。)
 +
 
 +
ピリオドを含んだ検索(e.g. "10.4", "10.5")を許可したい場合。(オプション)
 +
 
 +
<pre>
 +
--- includes/SearchEngine.php.orig      2008-07-29 08:47:57.000000000 +0900
 +
+++ includes/SearchEngine.php    2008-09-18 21:24:18.000000000 +0900
 +
@@ -158,7 +158,7 @@
 +
        }
 +
 +
        public static function legalSearchChars() {
 +
-              return "A-Za-z_'0-9\\x80-\\xFF\\-";
 +
+              return "A-Za-z_'0-9\\x80-\\xFF\\-\\.";
 +
        }
 +
 +
        /**
 +
</pre>
  
 
== 懸案事項 ==
 
== 懸案事項 ==

2009年1月13日 (火) 16:21時点における版

インストールメモ

sourceforge.jp へ MediaWiki をインストールするにあたり、おこなった手順について書いておきます。(Apr 12, 2007)

アーカイブの展開

まず、sf.jp のシェルサーバにログインし、MediaWiki 1.13 系列の配布ファイルを MacWiki プロジェクトディレクトリ配下の htdocs/wiki に展開します。各ファイルは group writable にしておきます。

takanori@pc192168000047$ ssh tatyana@shells.sourceforge.jp

tatyana@sf-usr-shell$ cd Sources/
tatyana@sf-usr-shell$ wget http://download.wikimedia.org/mediawiki/1.13/mediawiki-1.13.0.tar.gz

tatyana@sf-usr-shell$ cd /home/groups/m/ma/macwiki/htdocs/
tatyana@sf-usr-shell$ tar xvfz ~/Sources/mediawiki-1.13.0.tar.gz
tatyana@sf-usr-shell$ mv mediawiki-1.13.0 wiki

tatyana@sf-usr-shell$ find wiki -type d | xargs chmod 2775
tatyana@sf-usr-shell$ find wiki -type f | xargs chmod 664
tatyana@sf-usr-shell$ chmod o+w wiki/config wiki/images

sf.jp において PHP のプロセスは www-data:www-data の権限で動作します。この仕様のため、PHP のプロセスから書き込みがおこなわれる wiki/config および wiki/images のディレクトリは、everyone writable として設定せざるを得ません。

ブラウザ上からのインストール作業

ウェブブラウザで config/index.php にアクセスします。

Checking environment...

Please include all of the lines below when reporting installation problems.

PHP 5.2.0-8+etch10 installed
Found database drivers for: MySQL
Warning: PHP's safe mode is active. You may have problems caused by this, particularly if using image uploads.
PHP server API is apache2handler; ok, using pretty URLs (index.php/Page_Title)
Have XML / Latin1-UTF-8 conversion support.

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/var/lib/php5) is not within the allowed path(s): (/home/groups/local/pear:/home/groups:/tmp:/usr/bin:/bin) in /home/groups/m/ma/macwiki/htdocs/wiki/config/index.php on line 424
Warning: Your session.save_path value (/var/lib/php5) appears to be invalid or is not writable. PHP needs to be able to save data to this location for correct session operation.
PHP's memory_limit is 32M.
Couldn't find Turck MMCache, eAccelerator, APC or XCache; cannot use these for object caching.
GNU diff3 not found.
Found GD graphics library built-in, image thumbnailing will be enabled if you enable uploads.
Installation directory: /home/groups/m/ma/macwiki/htdocs/wiki
Script URI path: /wiki
Installing MediaWiki with php file extensions
Environment checked. You can install MediaWiki.

Site config の各項目を入力します。

Wiki name: MacWiki
Contact e-mail: tatyana@users.sourceforge.jp (仮設定です。LocalSettings.php を書き換えることで変更できると思います。)
Language: ja - 日本語
Copyright/license: No license metadata (GFDL と CC から選択できますが、とりあえずパブリックドメインを踏襲します。)
Admin username: WikiSysop
Password: ******** (実際のパスワードはプロジェクトディレクトリの ReadMe.txt を参照してください。)
Password confirm: ********
Object caching: No caching
Memcached servers:

E-mail features (global): Enabled
User-to-user e-mail: Enabled
E-mail notification about changes: Enabled for changes to user discussion pages, and to pages on watchlists (not recommended for large wikis)
E-mail address authentication: Enabled

Database type: MySQL
Database host: mysql.sourceforge.jp
Database name: macwiki
DB username: macwiki
DB password: ******** (実際のパスワードはプロジェクトディレクトリの ReadMe.txt を参照してください。)
DB password confirm: ********

Superuser account: -
Superuser name: root
Superuser password: * (おそらく使われないのでしょう。)

Database table prefix: mw_ (DB を他用途にも使うことを想定し、念のためテーブル名に prefix を付けておきます。)
Storage Engine: InnoDB
Database charset: Backwards-compatible UTF-8 (MySQL 4.1 以降では MySQL 4.1/5.0 binary を選択するのがよい)

ボタンを押すとインストールが始まります。

Warning: $wgSecretKey key is insecure, generated with mt_rand(). Consider changing it manually.
Generating configuration file...
Database type: MySQL
Loading class: DatabaseMysql
Attempting to connect to database server as macwiki...success.
Connected to 4.0.24_Debian-10sarge3-log
Database macwiki exists
Creating tables... done.
Initializing statistics...
Created sysop account WikiSysop.
Creating LocalSettings.php...

Installation successful! Move the config/LocalSettings.php file to the parent directory, then follow this link to your wiki.
You should change file permissions for LocalSettings.php as required to prevent other users on the server reading passwords and altering configuration data.

生成された config/LocalSettings.php をしかるべき場所に再配置します。

tatyana@sf-usr-shell$ cp config/LocalSettings.php ./LocalSettings.php
tatyana@sf-usr-shell$ chmod 664 LocalSettings.php

sf.jp では、PHP のプロセスは www-data:www-data 権限で動作するので、このファイルもまた everyone readable にせざるを得ません。

config ディレクトリは以後不要となるので削除しておきます。

PHP セッションセーブパスの設定

Running MediaWiki on Sourceforge.net によると、 sourceforge では以下のようにして PHP のセッションセーブパスを設定しておくことが必須のようです。

ガイド文書では /tmp/persistent/PROJECT_UNIX_NAME/sessions にディレクトリを作成するように書かれていますが、 ここではプロジェクトディレクトリに var を掘り、その中に用意することにしました。

tatyana@sf-usr-shell$ mkdir -p /home/groups/m/ma/macwiki/var/mediawiki_sessions
tatyana@sf-usr-shell$ chmod a+w /home/groups/m/ma/macwiki/var/mediawiki_sessions
[LocalSettings.php]
<?php

session_save_path("/home/groups/m/ma/macwiki/var/mediawiki_sessions");
...

タイムゾーンの設定

[LocalSettings.php]
...
# $wgLocaltimezone = 'Asia/Tokyo';
$wgLocalTZoffset = '+540';

sf.jp では PHP が safe mode で動いている都合上、一行目を有効にすることはできません。

putenv() の呼び出しに関する警告の回避

sf.jp では PHP が safe mode で動いている都合上、putenv() を呼び出そうとすると警告が表示されてしまいます。

--- includes/Setup.php.orig     2008-08-08 19:19:27.000000000 +0900
+++ includes/Setup.php  2008-08-15 01:55:36.000000000 +0900
@@ -118,7 +118,7 @@
  * Workaround for http://bugs.php.net/bug.php?id=45132
  * escapeshellarg() destroys non-ASCII characters if LANG is not a UTF-8 locale
  */
-putenv( 'LC_CTYPE=en_US.UTF-8' );
+//putenv( 'LC_CTYPE=en_US.UTF-8' );
 setlocale( LC_CTYPE, 'en_US.UTF-8' );
 
 if ( !class_exists( 'AutoLoader' ) ) {

どうしようもないので、ここでは無理矢理警告を押し込めています。

  • MediaWiki 1.13.2 以降では不要。

画像ファイルアップロードの許可

画像ファイルのアップロードを許可します。

[LocalSettings.php]
...
$wgEnableUploads         = true;

sf.jp では PHP が safe mode で動作しているため、ハッシュツリーに基づいた画像ファイルの格納はできません。($wgHashedUploadDirectory は false)

LocalSettings.php 中のメモに従い、images ディレクトリ配下に手動でサブディレクトリを用意します。

$ cd images
$ mkdir archive thumb temp
$ chmod a+w archive thumb temp

外部画像の埋め込みを許可する

画像ファイルの URL が記入された場合に、画像を埋め込んで表示させるようにします。

[LocalSettings.php]
...
$wgAllowExternalImages = true;

ページ名の最初の文字に小文字を使えるようにする

デフォルトでは、ページ名の先頭文字は常に大文字に変換されます。

LocalSettings.php に $wgCapitalLinks = false; の設定行を加えることで、ページ名の最初の文字に小文字を使えるようにできます。(pTeX が PTeX などとならずに済みます。)

[LocalSettings.php]
...
$wgCapitalLinks = false;

InterWiki の設定

InterWiki 機能を使うため、 maintenance/interwiki.sql を参考に、DB 内のテーブル mw_interwiki を書き換えます。

$ mysql -u macwiki --database=macwiki --host=mysql.sourceforge.jp -p

mysql> REPLACE INTO mw_interwiki (iw_prefix,iw_url,iw_local) VALUES
      ('google','http://www.google.com/search?q=$1',0),
      ('find','http://macwiki.sourceforge.jp/wiki/index.php/%E7%89%B9%E5%88%A5:Search?search=$1&fulltext=%E6%A4%9C%E7%B4%A2',0),
      ('isbn','http://www.amazon.co.jp/exec/obidos/ASIN/$1',0),
      ('asin','http://www.amazon.co.jp/exec/obidos/ASIN/$1',0),
      ('wikipedia','http://ja.wikipedia.org/wiki/$1',0),
      ('wikipedia-en','http://en.wikipedia.org/wiki/$1',0);

wiki のページにおいて、二重スクエアブラケットの中にたとえば [[Wikipedia:ほにゃらら]] などと書けば、wikipedia の当該記事へのリンクとなります。 InterWiki の設定は、あまり多くしても使わなくなると思います。

ConfirmEdit + MacWikiCaptcha の導入

spam 防止のため、ConfirmEdit を導入します。

まず、ConfirmEdit の配布ファイルを SVN より取得し、extensions ディレクトリに格納します。

tatyana@sf-usr-shell$ cd extensions
tatyana@sf-usr-shell$ svn checkout http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/ConfirmEdit ConfirmEdit
A  ConfirmEdit/MathCaptcha.php
A  ConfirmEdit/ConfirmEdit.i18n.php
A  ConfirmEdit/FancyCaptcha.i18n.php
A  ConfirmEdit/ConfirmEdit.php
A  ConfirmEdit/FancyCaptcha.php
A  ConfirmEdit/captcha.py
A  ConfirmEdit/MathCaptcha
リビジョン 21231 をチェックアウトしました。

続いて MacWikiCaptcha を導入します。 プロジェクトの svn レポジトリより MacWikiCaptcha.php, MathCaptcha.class.php を入手し、ConfirmEdit ディレクトリ内に設置します。

$ svn export http://svn.sourceforge.jp/svnroot/macwiki/tatyana/MacWikiCaptcha/for_1.12/MacWikiCaptcha.php
$ svn export http://svn.sourceforge.jp/svnroot/macwiki/tatyana/MacWikiCaptcha/for_1.12/MacWikiCaptcha.class.php

その後、LocalSettings.php で ConfirmEdit + MacWikiCaptcha を読み込ませます。

[LocalSettings.php]
...
require_once( "$IP/extensions/ConfirmEdit/ConfirmEdit.php" );
require_once( "$IP/extensions/ConfirmEdit/MacWikiCaptcha.php" );
$wgCaptchaClass = 'MacWikiCaptcha';
$wgGroupPermissions['user']['skipcaptcha'] = true;
$wgCaptchaTriggers['edit']                 = true; // Would check on every edit
$wgCaptchaTriggers['create']               = true; // Check on page creation.
...

sf.jp アイコンの表示

sourceforge のサービスを利用している場合、 プロジェクトホームページにロゴを張り付ける必要があるので対処。

--- includes/Skin.php.orig      2008-03-21 07:08:49.000000000 +0900
+++ includes/Skin.php   2008-04-28 17:31:25.000000000 +0900
@@ -1150,6 +1150,7 @@
                global $wgStylePath;
                $url = htmlspecialchars( "$wgStylePath/common/images/poweredby_mediawiki_88x31.png" );
                $img = '<a href="http://www.mediawiki.org/"><img src="'.$url.'" alt="Powered by MediaWiki" /></a>';
+               $img .= ' <a href="http://sourceforge.jp/"><img src="http://sourceforge.jp/sflogo.php?group_id=1160" width="96" height="31" border="0" alt="SourceForge.JP" /></a>';
                return $img;
        }
 

ロゴ/favicon の変更

オリジナルのロゴが出来上がるまで、とりあえずは MediaWiki のアイコンで代用しておきます。

[LocalSettings.php]
...
$wgLogo             = "$wgScriptPath/skins/monobook/wiki.png";
$wgFavicon          = "/favicon.png";

htdocs ディレクトリ直下に favicon.png を設置。

SiteCss を使わない

[LocalSettings.php]
...
$wgUseSiteCss = false;

SiteCss を有効にしていると、sf.jp 上では何故か、数十回のリロードにつき一度あるかないかの割合で GET /test/index.php?title=MediaWiki:Common.css&action=raw&ctype=text/css&smaxage=18000 のクエリ (PHP を介した css ファイルの読み出し)がおこなわれた際に 30 秒間の待ちが発生することが観測された。 (このファイルはキャッシュされるため、一般的な利用下での発生頻度はさらに低い。)

30 秒というのは PHP のタイムアウト時間と等しく、一つにはプロセスの出力バッファ周りでの不具合というのが 原因として考えられたが、sf.jp ではウェブサーバにログインをおこなうことができないため、 根本的な原因の特定には至らなかった。

よって、今回は $wgUseSiteCss を false に設定することでクエリを抑止し、かかる問題を回避した。 (この場合、Common.css はスタティックなデータとしてダウンロードされるようになる。)

フォント/配色の変更

全体のフォントサイズの調整

--- skins/monobook/main.css.orig        2008-03-21 07:08:42.000000000 +0900
+++ skins/monobook/main.css     2008-04-28 22:05:50.000000000 +0900
@@ -40,7 +40,7 @@
 */
 
 body {
-       font: x-small sans-serif;
+       font-size: 76%;
        background: #f9f9f9 url(headbg.jpg) 0 0 no-repeat;
        color: black;
        margin: 0;
  • MacWiki と同じく、フォントフェイスは未設定としています。これにより、Mac 上では一般にヒラギノ明朝で表示されます。

MacWiki のデザインに似せる

その他、css を使ったデザインの調整に関しては、このファイルを書き換えることで可能となるようです。たとえば、

@@ -137,6 +137,21 @@
 h6 { font-size: 80%;  }
 h6 .editsection { font-size: 125%; font-weight: normal; }
 
+/*kokokara*/
+h2 { font-size: 120%; }
+h2 .editsection { font-size: 83%; }
+h2 { padding: .3em 0 .3em .5em; margin-left: -5pt; }
+h2 {
+    border-bottom: none;
+    font-weight: bold;
+}
+h3 { font-size: 100%; }
+h3 .editsection { font-size: 100%; }
+h3 { padding: .15em 0 .15em .5em; }
+h3 { font-weight: normal; }
+h2, h3 { background-color: #ccf; border-color: #66c; border-style: solid; border-width: 0 0 0 15pt; }
+/*kokomade*/
+
 ul {
        line-height: 1.5em;
        list-style-type: square;
@@ -223,6 +236,14 @@
        line-height: 1.1em;
 }
 
+/*kokokara*/
+pre {
+    border: 1px solid #99f;
+    color: #333;
+    background-color: #eef;
+}
+/*kokomade*/
+
 /*
 ** the main content area
 */

以上で h2, h3 と pre のデザインが 旧 MacWiki ライクになります。

その他

プレビュー画面の背景を調整します。

@@ -1557,3 +1578,7 @@
        vertical-align: middle;
        font-size: 90%;
 }
+
+div#wikiPreview {
+    background-image : url("preview.png");
+}

preview.png は skins/monobook に設置。

タイトルをデフォルトの「(ページ名) - MacWiki」から「MacWiki - (ページ名)」に変更

js 等を含めたページのデザインはこちらのファイルで変更可能とのこと。

--- skins/MonoBook.php.orig     2008-03-21 07:08:45.000000000 +0900
+++ skins/MonoBook.php  2008-04-28 22:52:04.000000000 +0900
@@ -55,7 +55,7 @@
        <head>
                <meta http-equiv="Content-Type" content="<?php $this->text('mimetype') ?>; charset=<?php $this->text('charset') ?>" />
                <?php $this->html('headlinks') ?>
-               <title><?php $this->text('pagetitle') ?></title>
+               <title><?php if (ereg("^(.*) - ([^-]*)$", $this->data['pagetitle'], $match)) {print("$match[2] - $match[1]");} else {$this->text('pagetitle');} ?></title>
                <style type="text/css" media="screen, projection">/*<![CDATA[*/
                        @import "<?php $this->text('stylepath') ?>/common/shared.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";
                        @import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/main.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";

文字列はエスケープ処理されているようなので、そのまま出しても別に構わない?

ページフッタに copyright, privacy policy, disclaimer へのリンクを表示しない

@@ -257,8 +257,8 @@
                        <ul id="f-list">
 <?php
                $footerlinks = array(
-                       'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', 'copyright',
-                       'privacy', 'about', 'disclaimer', 'tagline',
+                       'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', /*'copyright',*/
+                       /*'privacy',*/ 'about', /*'disclaimer',*/ 'tagline',
                );
                foreach( $footerlinks as $aLink ) {
                        if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {

バックアップスクリプト

とりあえず、現在は私 (たちゃな) の権限下で以下のスクリプトを動かしている。

[/home/users/t/ta/tatyana/Sources/macwiki_dump/backup_macwiki.sh]
#!/bin/bash

HOME=/home/users/t/ta/tatyana/Sources/macwiki_dump

destdir='/home/groups/m/ma/macwiki/var/mediawiki_backup'
expire=+90

filename=mediawiki_`date +"%Y%m%d_%H%M%S.sql"`
group=macwiki
dbuser=macwiki
dbname=macwiki
dbpass=********
dbhost=mysql.sourceforge.jp


test -f $HOME/.my.cnf || (touch $HOME/.my.cnf; chmod 600 $HOME/.my.cnf; echo "[client]" > $HOME/.my.cnf; echo "password=$dbpass" >> $HOME/.my.cnf; (test -f $HOME/.my.cnf || (echo "cannot open \"$HOME/.my.cnf\""; exit 1)))

find $destdir -type f -mtime $expire | xargs --no-run-if-empty rm

touch $HOME/temp.sql
chmod 600 $HOME/temp.sql
mysqldump --quick -u $dbuser $dbname --host=$dbhost > $HOME/temp.sql
bzip2 -9 $HOME/temp.sql
mv $HOME/temp.sql.bz2 "${destdir}/${filename}.bz2"
chgrp $group "${destdir}/${filename}.bz2"
chmod 660 "${destdir}/${filename}.bz2"
$ crontab -e
-------------------------------------------------------------------------------------------------------
12      0       *       *       *       /home/users/t/ta/tatyana/Sources/macwiki_dump/backup_macwiki.sh
-------------------------------------------------------------------------------------------------------

ArticleComments/Lite

一行コメント機能が欲しかったので、 ArticleComments (http://www.mediawiki.org/wiki/Extension:ArticleComments) をベースにオリジナルのエクステンションを作成した。

インストール方法は、MacWiki プロジェクトの svn ツリーから ArticleCommentsLite.php を取得し、MediaWiki の extensions ディレクトリに設置するだけ。

$ cd extensions
$ svn checkout http://svn.sourceforge.jp/svnroot/macwiki/tatyana/ArticleCommentsLite ArticleCommentsLite

その後、LocalSettings.php に以下のように書く。

[LocalSettings.php]
...
require_once("$IP/extensions/ArticleCommentsLite/ArticleCommentsLite.php");
$wgArticleCommentLiteDefaults['nokana']=true;

ここで、2行目の設定は、旧 MacWiki 準拠の spam 防止機能を有効にするためのオプションで、 書き込まれたコメント中に(平|片)仮名が含まれていることを要求するためのもの。デフォルトでは false。

現在、談話室 のページでテスト中。(Apr 29, 2007〜)

全文検索の機能改善 (experimental)

標準の MySQL は日本語テキストのインデックス化に難があり、全文検索の取りこぼしが顕著である。このため MediaWiki の日本語検索機能は殆ど使いものにならない。

根本的な解決のためには MySQL 自体に手を加える必要があると思われる (e.g. Tritonn) が、ここでは SearchMySQL.php の SQL クエリを書き換えることで一応の回避を試みた。

--- includes/SearchMySQL.php.orig        2008-06-20 06:02:23.000000000 +0900
+++ includes/SearchMySQL.php     2008-09-18 20:08:55.000000000 +0900
@@ -41,6 +41,8 @@
                $searchon = '';
                $this->searchTerms = array();
 
+               $field = $this->getIndexField( $fulltext );
+
                # FIXME: This doesn't handle parenthetical expressions.
                $m = array();
                if( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
@@ -50,14 +52,21 @@
                                if( $this->strictMatching && ($terms[1] == '') ) {
                                        $terms[1] = '+';
                                }
-                               $searchon .= $terms[1] . $wgContLang->stripForSearch( $terms[2] );
                                if( !empty( $terms[3] ) ) {
                                        // Match individual terms in result highlighting...
                                        $regexp = preg_quote( $terms[3], '/' );
-                                       if( $terms[4] ) $regexp .= "[0-9A-Za-z_]+";
+                                       $terms[3] = str_replace( '\'', '\\\'', $terms[3] );
+                                       if ( !empty( $searchon ) ) { $searchon .= ' AND '; }
+                                       if ( $terms[1] == '-' ) { $searchon .= ' NOT '; }
+                                       $searchon .= (" $field LIKE '%" . $terms[3] . "%' ");
                                } else {
                                        // Match the quoted term in result highlighting...
-                                       $regexp = preg_quote( str_replace( '"', '', $terms[2] ), '/' );
+                                       $terms[2] = str_replace( '"', '', $terms[2] );
+                                       $regexp = preg_quote( $terms[2], '/' );
+                                       $terms[2] = str_replace( '\'', '\\\'', $terms[2] );
+                                       if ( !empty( $searchon ) ) { $searchon .= ' AND '; }
+                                       if ( $terms[1] == '-' ) { $searchon .= ' NOT '; }
+                                       $searchon .= (" $field LIKE '%" . $terms[2] . "%' ");
                                }
                                $this->searchTerms[] = $regexp;
                        }
@@ -67,9 +76,8 @@
                        wfDebug( "Can't understand search query '{$filteredText}'\n" );
                }
 
-               $searchon = $this->db->strencode( $searchon );
-               $field = $this->getIndexField( $fulltext );
-               return " MATCH($field) AGAINST('$searchon' IN BOOLEAN MODE) ";
+               if ( empty( $searchon ) ) { $searchon = ' FALSE '; } /* dummy */
+               return $searchon;
        }
 
        public static function legalSearchChars() {
@@ -170,7 +178,7 @@
         * @return string
         */
        function getIndexField( $fulltext ) {
-               return $fulltext ? 'si_text' : 'si_title';
+               return $fulltext ? 'old_text' : 'page_title';
        }
 
        /**
@@ -187,10 +195,11 @@
        function queryMain( $filteredTerm, $fulltext ) {
                $match = $this->parseQuery( $filteredTerm, $fulltext );
                $page        = $this->db->tableName( 'page' );
-               $searchindex = $this->db->tableName( 'searchindex' );
+               $text        = $this->db->tableName( 'text' );
+               $revision    = $this->db->tableName( 'revision' );
                return 'SELECT page_id, page_namespace, page_title ' .
-                       "FROM $page,$searchindex " .
-                       'WHERE page_id=si_page AND ' . $match;
+                       "FROM $page,$text,$revision " .
+                       'WHERE old_id=rev_text_id AND rev_page=page_id AND page_latest=rev_id AND ' . $match;
        }
 
        /**

case-insensitive な検索のためには l.61, 69 を CONVERT($field using utf8) LIKE 〜 のように書き換えれば良いが、この構文は MySQL 4.1 以降でしか利用できないので注意。(sf.jp の MySQL は 4.0 のため適用できない。)

ピリオドを含んだ検索(e.g. "10.4", "10.5")を許可したい場合。(オプション)

--- includes/SearchEngine.php.orig       2008-07-29 08:47:57.000000000 +0900
+++ includes/SearchEngine.php    2008-09-18 21:24:18.000000000 +0900
@@ -158,7 +158,7 @@
        }
 
        public static function legalSearchChars() {
-               return "A-Za-z_'0-9\\x80-\\xFF\\-";
+               return "A-Za-z_'0-9\\x80-\\xFF\\-\\.";
        }
 
        /**

懸案事項

  • sf.jp 側の制限のため、幾つかのディレクトリ・ファイルを everyone readable/writable として設定しなければなりませんでした。セキュリティ上の問題が生じるかも知れません。
  • MediaWiki の math 機能(TeX による数式の組版)をビルドするには OCaml が必要となりますが、sf.jp にはインストールされていないので使えません。
  • アップロードされたファイルの格納方法は、ハッシュツリーを使った方式ではなく、ベタで置かれるようです。LocalSettings.php 中のメモには、PHP をセーフモードで動かす場合、ハッシュツリーに従う方式は使えないようなことが書かれています。

メモ

今後の設定項目等。

ゲストでの書き込みを許可しないようにするには

[LocalSettings.php]
...
$wgGroupPermissions['*'    ]['edit']            = false;

ただし、登録ユーザしか書き込みできないようにすると、今度はその弊害が気掛かりです。(気軽に書き込んでもらえなくなるので。)

ConfirmEdit + MacWikiCaptcha を用いることで、ゲストの書き込みを一律不可とせずとも、spam/abuse への充分な抑止となるのではないかと考えています。

アップロード可能なファイルサイズを変更するには

デフォルトでは 150KB 以上のファイルをアップロードしようとすると警告が表示されます。 警告を出すファイルサイズの閾値は $wgUploadSizeWarning で設定できます。

実際にアップロード可能なファイルサイズの制限は、MediaWiki 側だけでなく、php.ini 側での設定 (upload_max_filesize) も効いてきます。

アップロード可能なファイルタイプを追加するには

$wgFileExtensions の配列で制御できます。(デフォルトでは png, gif, jpg, jpeg のみ)

DB の初期化手順(危険!)

DB を初期化したいときには、

tatyana@sf-usr-shell$ mysql -u macwiki --database=macwiki --host=mysql.sourceforge.jp -p
mysql> use macwiki;
mysql> show tables;
...
29 rows in set (0.00 sec)

mysql> drop database macwiki;
mysql> create database macwiki;
mysql> show tables;
Empty set (0.01 sec)

mysql> Bye

とします。(個人的なメモです。)

アップデート手順

1.13.0 → 1.13.3 の際におこなった内容のメモ。

事前に DB のバックアップを取っておくこと。

$ cd /home/groups/m/ma/macwiki/htdocs/
$ tar xvfz ~/Sources/mediawiki-1.13.3.tar.gz
$ mv wiki wiki_old
$ mv mediawiki-1.13.3 wiki
$ find wiki -type d | xargs chmod 2775
$ find wiki -type f | xargs chmod 664

$ cd wiki
$ cp ../wiki_old/LocalSettings.php .
$ cp ../wiki_old/AdminSettings.php .
$ chmod 664 LocalSettings.php
$ chmod 660 AdminSettings.php (気休めにもならない)

$ mv images images.orig
$ mv ../wiki_old/images . (これも sf.jp の制約絡み)
$ cp -Rp ../wiki_old/extensions .
$ cd extensions/ConfirmEdit
$ svn update
$ cd ../..
$ rm -rf config

$ php maintenance/update.php

下記ファイルを適宜移行。パーミッションは 664 であることを確認。
* includes/SearchMySQL.php
* includes/Skin.php
* skins/MonoBook.php
* skins/monobook/main.css
* skins/monobook/preview.png
* skins/monobook/wiki.png
* .htaccess

関連リンク