(ヽ´ω`) < 助けてほしいマン

わからないことを助けてほしいマンが書くブログ

(ヽ'ω`) < 一般的なLinux環境でPukiwiki Adv 1.0.3を動かす

(ヽ'ω`) < 動かんのよ

Pukiwiki Advのインストール方法は、公式のWikiに掲載されている。

http://pukiwiki.logue.be/Documents/Install

の、だがこのページの指示通りにインストールしても

(ヽ'ω`) < 全く動かん

(ヽ'ω`) < 何が悪いのか

色々調べたところ、色々なにかおかしい。

他のインストール方法解説ページとかを見てても、かなり手順がバラバラで何が正しいのかよくわからない。環境とかバージョンが書いてないのも混乱に拍車をかける。

とりあえず、自分で調べながら、自分の環境で動くようにするまでの記録を。

(ヽ'ω`) < 環境

環境
OS CentOS6.4 x86_64
apache httpd-2.2.24 prefork
Pukiwiki adv 1.0.3
インストール先ディレクトリ /home/wiki
URL http://hoge.com/wiki/
特記事項 SELinux off

(ヽ'ω`) < まずは配置を

最初の手順は、Pukiwiki Advのダウンロード・展開・パーミッション設定。

Pukiwiki advのダウンロードと展開

まず、Pukiwiki adv 1.0.3をダウンロード。

パッケージ PukiWiki Advance - PukiWiki Advance - SourceForge.JP

ダウンロードしたファイルを適当なディレクトリに展開。検証環境ではwikiという名前のディレクトリを作成。

ディレクトリのパーミッションを設定

下記URLの情報を参考に、展開したディレクトリやファイルに対して適切なパーミッションを設定していく。

http://pukiwiki.logue.be/Documents/Install

はずなのだが、上記のとおりに設定してもうまく動作しない。何度やっても。

というわけで、色々調べて下記のスクリプトを作成。パーミッションの設定を一括して行なってくれる。

#!/bin/bash
#パーミッションの設定手順、Pukiwiki Advのルートディレクトリより実行
chmod 777 wiki-data/attach
chmod 777 wiki-data/backup
chmod 777 wiki-data/cache
chmod 777 wiki-data/counter
chmod 777 wiki-data/diff
chmod 777 wiki-data/trackback
chmod 777 wiki-data/wiki

chmod 755 wiki-common/lib
chmod 755 wiki-common/plugin

chmod 755 webroot/image
chmod 755 webroot/skin

# ディレクトリの+xが無いのがあるので一律セット
find . -type d -exec chmod +x {} \;

# *.php 644
find . -name *.php -exec chmod 644 {} \;

# *.lng 644
find . -name *.lng -exec chmod 644 {} \;

# cache/* 666
find wiki-data/cache/* -type f -exec chmod 666 {} \;

# image/* 644
find webroot/image/* -type f -exec chmod 644 {} \;

# lib/* 644
find wiki-common/lib/* -type f -exec chmod 644 {} \;

# plugin/* 644
find wiki-common/plugin/* -type f -exec chmod 644 {} \;

# skin/* 644
find webroot/skin/* -type f -exec chmod 644 {} \;

# wiki/* 666
find wiki-data/wiki/* -type f -exec chmod 666 {} \;

# インストールマニュアルに記載されていないがエラーが出るので対応
chmod 777 wiki-data/log -R

上記スクリプトを適当な名前(set_perm.sh)で保存し、Pukiwiki Advのルートディレクトリ内から実行する。

(ヽ'ω`) < お次にPukiwiki Adv本体の修正

配置が終わったので、Pukiwiki Adv本体のファイルに手を加えていく。

(ヽ'ω`) < .htaccessの修正

対象はwebroot/.htaccess
このファイルを以下のとおりに修正する。

POSTのLimitを変更する。

デフォルトでは.jp, .bbtec.net以外からのPOSTリクエストが拒否されている。

<Limit POST>
    order deny,allow
    deny from all
    allow from .jp
    allow from .bbtec.net
</limit>

ここを任意の値に修正。とりあえず動作確認という事であれば、allow from allで。

<Limit POST>
    order deny,allow
    deny from all
    allow from all
</limit>

more_rewriteの修正

mod_rewriteの部分を以下のとおりに変更。 https://github.com/logue/pukiwiki_adv/issues/1

<IfModule mod_rewrite.c>
    RewriteBase /wiki/     # (1
    RewriteEngine on
    # RewriteRule ^.*$ ? [F]   # (2
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.* - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ index.php?$1 [L,R]     # (3
</IfModule>

ここでの修正点は3つ

  1. RewriteBaseが与えられないとRewriteした時に
    add per-dir prefix: index.php -> /home/wiki/webroot/index.php
    と言った感じで
    http://hoge.com/RecentChanges

    http://hoge.com/index.php?RecentChanges
    と書き換えられるのを期待しているのに
    http://hoge.com/home/wiki/webroot/index.php?RecentChanges
    となってしまう。
    今回の例ではhttp://hoge.com/wiki/と、サブディレクトリでの運用を総指定しているので/wiki/と設定したが、ドメイン直下で運用するのであれば/となる。
  2. この箇所をコメントアウト。これがあると問答無用で403が返るんじゃ…
  3. Rフラグを付けたのは、302でブラウザのURLを明示的に変更して動作を確認しやすいように

(ヽ'ω`) < サブディレクトリ運用故に

今回はhttp://<domain>/wiki/とサブディレクトリでの運用を想定しているので、以下の修正を行う必要がある。

標準では/js/cssなどのディレクトリは、サブディレクトリ構成を考慮しない(自動的に検出しない)。 webroot/index.php内の

define('ROOT_URI', '/'); // for Windows

define('ROOT_URI', '/wiki/webroot/'); // for Windows

と変更してやることで、サブディレクトリ構成に対応させる。

(ヽ'ω`) < for Windowsに関してはあれだ…無視

(ヽ'ω`) < さぁ準備は整った、はず

これでインストールが完了。http://<domain>/wiki/にアクセスしてみる。

正常な画面が表示されたら、画面の指示に従ってパスワードを生成してwiki-common/auth.ini.php$adminpassの値を書き換える。

さらに、デバッグモードを解除するように表示されているので webroot/index.phpの17行目

// Debug mode.
define('DEBUG', true);

コメントアウトして、デバッグモードを終了させる。

(ヽ'ω`) < 細かいこと

ディレクトリパーミッションの設定スクリプトで、一番最後に

# インストールマニュアルに記載されていないがエラーが出るので対応
chmod 777 wiki-data/log -R

としているが、これをしないと設定後にURLにアクセスすると、一見正常に動作をしているけど、画面上部に

Warning: touch(): in /home/homepage/test/wiki/wiki-common/lib/file.php on line 915

Warning: touch(): in /home/homepage/test/wiki/wiki-common/lib/file.php on line 915

Warning: touch(): in /home/homepage/test/wiki/wiki-common/lib/file.php on line 915

というエラーが出る。file.phpの該当箇所を確認すると、logディレクトリにtouch()しようとしてたので、書き込み権限を与えた。

(ヽ'ω`) < 正直なところ

動くところまでは確認できたものの、これで本当にいいのか(主にセキュリティー的な部分)確証が持てないので、実運用は閉じた環境のみかな…

というか、メモから記事に起こして気がついたけど、2.0がstableになってるし。

(ヽ'ω`) < あんまり意味なしですかねー