異なるプラットフォームのPukiWikiにコンテンツを移す(Windows→Linux)

例によって、会社で発生した問題を自宅で考察し思い出し書きします。

目的

Windows上で稼動しているPukiWikiの内容を、Linux(CentOS5)上に立てたPukiWikiに移したい。
なおPukiWikiにはUTF-8版とEUC-JP版とあるようですが、ここではEUC-JP版での話です。

問題

まず思いつくのは、PukiWikiの公式ページに載っている、アップグレード時の手順に従い、PukiWikiインストールフォルダ配下のwiki/, cache/, attach/ 等のフォルダをコピーすることですが、これをやると、うまくいきません。
画面が表示されなくなったり、一見正しく見えても編集を行うと内部のPHPソースのどこかでタイムアウトが発生したりします。

解決方法

PHPの中身には一切触らずに実施します。そのほうがうまくいきます。
wiki/配下には、各ページのWiki記法のソースが、ページ名をEUC-JPで16進数表現にして後ろに.txtをつけたファイル名で格納されています。これを、移行元として使います。
移行先については、PukiWikiをインストールしておき、そこに、あたかもブラウザから人手でページを編集したかのように、HTTPリクエストを送って、移行元のページをインポートします。

そのためには、人手でのページ編集をシミュレートしてやる必要があるのですが、人手での編集内容を確かめるために、Wiresharkあたりを適当に動かしながら、実際に人手で新規ページを登録してみて、その瞬間のリクエストのパケットダンプをとります。それに基づいて、それと同等のリクエストを移行元ページ.txtから生成して、curl(言語じゃなくてコマンドのほうね)やPerlRubywgetで移行先PukiWikiサーバにPOSTで投げてやればよいです。

ポイントとしては、PukiWikiでは、同時に複数の人が更新していないかどうかを確かめるために、ダイジェスト値というものを送っているようなので、このダイジェスト値を正しくセットしてやらないといけません。といっても、新規作成ページの場合、このダイジェスト値には固定の値が入るようなので、パケットダンプで判明した値をそのまま入れれば、多分大丈夫でしょう。

添付ファイルも恐らく同様の方法でいけますが、こちらについては、ページとは性質が少し異なると想像されるため、attach/をそのままコピーしても問題ないと思われます。

念のため、なんかあった場合は自己責任でお願いします。