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

そしてブラウザを開くと、、、

http://gyazo.com/57523eb91cdb41a646e829bc1eebe1a6.png

できた!

しかし喜びもつかの間、/show-page/OldType などを開いても404 not foundになってしまう。OldTypeでは存在しないページにアクセスした場合でも、OldType内で処理されるため、どうも、URIのディスパッチがうまくいっていないらしい。

kahua (Kahua Project) · GitHub を読むと、KahuaURIの基本は /<アプリ名>/<エントリ>/ となるらしい。エントリはおそらくRailsなどでいうactionだろう。ためしに /oldtype/show-page/OldType にアクセスすると、今度はページの内容が表示された。もう一息のところまできている!

要は、アプリ名を省略できるような設定がどこかにあるはずで、それを正しく配置してやればいいのかな、などと考えながら情報をググってみた。

http://oss.timedia.co.jp/show/column/%e4%bb%8a%e6%97%a5%e3%81%ae%e4%b8%80%e8%a1%8c/%ef%bc%92%ef%bc%90%ef%bc%90%ef%bc%96%e5%b9%b4%ef%bc%99%e6%9c%88#H-1drc2mt

Apachecgiとして動作させる例があった。しかし、今回の場合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>

できたーー!!

http://gyazo.com/ca3d3d2e92d0fee6bb71961679a1a4eb.png

ただし、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がハックできるぜ。