OldType解剖メモ(2)
前回:OldType解剖メモ - 日記を書く [・w・] はやみずさん
とりあえずOldTypeを起動するところまでできた。あとは、バッチ処理でsubversionからページの内容を取得してきて、変換などを行うようにしてやればよいはずだ。
$HOME/sourceforge/oldtype/trunk/bin といういかにもなディレクトリがあり、まさにそれ。中を読んでみると、$OT_HOMEという環境変数を設定して、$OT_HOMEにあるconfig.shを読むことで諸々の環境変数を設定してくれるらしい。$OT_HOME/bin 以下にバッチ処理のツールがあることを期待しているようなので、 OT_HOME=$HOME/sourceforge/oldtype/trunk とした。
config.shでは、OldTypeのsvnレポジトリをチェックアウトしてある場所やら、パスワードやらの設定もあったのでそれも適宜書き換える。
そこまでやってバッチ処理を走らせてみる。
$ cd $HOME/sourceforge/oldtype/trunk/bin $ ./batch.sh
どうやら動いているらしい。subversionの実行しているコマンドを表示するようにしてみたら、以下のようなログを延々と吐き続けている。
[ kiyoka.2007_09_27 ] svn ann kiyoka.2007_09_27.ot@HEAD --username ******* --password ********* --no-auth-cache [ kiyoka.2007_09_29 ] svn ann kiyoka.2007_09_29.ot@HEAD --username ******* --password ********* --no-auth-cache ...
ページのデータは、取得した後にS式に変換されているらしい。OldTypeのページのデータは $HOME/oldtype 以下にチェックアウトしてあるが、$HOME/oldtype/_out と $HOME/oldtype/_tmp というディレクトリができていて、*.sexp というファイルが生成されている。
さて、これで一応ページの最新版の取得や、それの変換ができるようになった。あとはこのデータをKahuaが読める場所に配置してやればいいはずだ。
$HOME/site/oldtype/app/oldtype/oldtype.kahua を追っていくと、 (oldtype:load-sexp (kahua-site-root) wikiname) という一行を発見。どうもこれがファイルを開くための関数らしい。定義は $HOME/site/oldtype/app/oldtype/kahualib.scm にある。
(define (oldtype:load-sexp _site-root wikiname) (define (gen-sexp-filename) (string-append _site-root "/tmp/oldtype/_out/" wikiname ".sexp")) (if (file-exists? (gen-sexp-filename)) (with-input-from-file (gen-sexp-filename) (lambda () (read (current-input-port)))) #f))
つまり、(kahua-site-root)/tmp/oldtype/_out/*.sexp を読みにいっている。だったらさっきのところにシンボリックリンク張ればいいじゃーん、と思ってやってみる。
$ cd $HOME/site/oldtype/tmp $ ln -s $HOME/oldtype
そしてブラウザを開くと、、、
できた!
しかし喜びもつかの間、/show-page/OldType などを開いても404 not foundになってしまう。OldTypeでは存在しないページにアクセスした場合でも、OldType内で処理されるため、どうも、URIのディスパッチがうまくいっていないらしい。
kahua (Kahua Project) · GitHub を読むと、KahuaのURIの基本は /<アプリ名>/<エントリ>/ となるらしい。エントリはおそらくRailsなどでいうactionだろう。ためしに /oldtype/show-page/OldType にアクセスすると、今度はページの内容が表示された。もう一息のところまできている!
要は、アプリ名を省略できるような設定がどこかにあるはずで、それを正しく配置してやればいいのかな、などと考えながら情報をググってみた。
Apacheでcgiとして動作させる例があった。しかし、今回の場合Apacheをリバースプロキシサーバにしてしまえばいいんじゃまいか。
/etc/hosts に 127.0.0.1 oldtype.localを追加。
ApacheのVirtualHost機能を使って、oldtype.localへのアクセスを localhost:8080/oldtype/ へと振る。
<VirtualHost *:80> ServerAdmin webmaster@localhost ProxyPass / http://localhost:8080/oldtype/ ProxyPassReverse / http://localhost:8080/oldtype/ ErrorLog /var/log/apache2/error.log ServerName oldtype.local CustomLog /var/log/apache2/oldtype_access.log combined </VirtualHost>
これでいけるか!?と思ったら、画像とかcssが軒並みアクセスできない、、、
というわけで、mod_rewriteとの合わせ技で回避。
<VirtualHost *:80> ServerAdmin webmaster@localhost <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^/show-page/(.*) /oldtype/show-page/$1 [L,PT] </IfModule> ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ ErrorLog /var/log/apache2/error.log ServerName oldtype.local CustomLog /var/log/apache2/oldtype_access.log combined </VirtualHost>
できたーー!!
ただし、Wikiに記述された画像が表示されない。しかし、ここは伝家の宝刀シンボリックリンク! /kahua/oldtype/img 以下に画像があることを期待していて、/kahua/oldtype/ は $HOME/site/oldtype/static/oldtype/ にマップされている。Wikiの画像は $HOME/oldtype/img にあるので、
$ $HOME/site/oldtype/static/oldtype/ $ ln -s $HOME/oldtype/img
画像も表示されたー!!!
めでたくOldTypeを動かすに至りました。これでやっとOldTypeがハックできるぜ。