読者です 読者をやめる 読者になる 読者になる

OpenBSD の chroot jail httpd で CGI を動かす(4) Tokyo Promenade 編

OpenBSD Apache Tokyo Promenade oogatta.com設定

さて、4回目、ついに今回は Tokyo Promenade を動かすところまでやってみます!。今日はリアルタイムです仕込みじゃないです!。これ書きながら実際に設定してます!。

いきさつは良いから結果だけ知りたい、という方はこのポストの末尾をご覧ください。

Tokyo Promenade とは

さてここで、 Tokyo Promenade ってなんぞ、というめくら(ぴー)野郎に簡単にご説明しますと、 mixi にお勤めの、いや僕にとっては Hyper Estraier の人、そしてテクノロジー野郎達の間では Tokyo Tyrant などの Tokyo シリーズ、そして今は次の Kyoto シリーズで高名な平林さんが作られた CMS であります。何が良いかというと…。

  • 平林さんが作ってる
  • 実行ファイルはコンパイル済み実行オブジェクトファイル一個だけ
    • 管理し易い
    • WP や MT のような、その CMS 独自の膨大なエコシステムをわざわざ学習しなくても使える
    • Unix ライクシステムのその他のツールや環境そのものと親和性が高い
  • Luaプラグインが書ける
  • すげえ速い
  • kzys さんが使ってる

という当たりがあげられます。概要は、平林さんご自身が mixi のエンジニアブログに書かれている通りでさらっとインストールできて、一瞬で使い始められます。データストアとしては Tokyo Cabinet が使われています。え、 kzys さんって誰って?そりゃあんた、「型仙人(ワラ」とか「JAVAスクリプトが得意な oogatta さんですよね(ワラ」とかつねに僕の傷口をぐりぐりと抉ってくるあの人である。えぐいぜ。

必要なもの

Tokyo Promenade のサイトのインストールの項をみると、先に Tokyo Cabinet をいれてね。ということなので Tokyo Cabinet のインストールの項に目を移すと、 zlib と bzip2 を予めインストールするようにしっかり書かれてあります。

というわけで、きっと必要なものは、

  • zlib
  • bzip2
  • Tokyo Cabinet
  • Tokyo Promenade

とその依存ファイルとなるようです。これらについて、ここまでにやってきた例の検討から機内持ち込みまでのフローを行ってみます。

とはいえ、検討…、うーん、正直に告白すると、 zlib と bzip2 は単なる圧縮ライブラリだから、大丈夫だと思うんだよなあ。くらいの感覚です。ただ、検索してみたらバッファオーバーフロー出してるんですよねー。 zlib 。 OpenBSD 版は大丈夫だ、とも書いてありますが。ということは、デフォルトインストールで zlib は入っているのかな?。どう確かめたらいいんだろう。bzip2 は OpenBSD のパッケージにあるので、これは入れるのは容易いだろう。

で、Tokyo Tyrant はデータストア、悪用ねえ…悪用…、うーん、自分セキュリティマインドが低いので、こういうときかなり不利というか、何も思いつかないというのが正直なところ。最新バージョンをちゃんとチェックしておけ、ということ、運用でカバーせよという領域かな。よし、 Tokyo Tyrant と Tokyo Promenade に関しては僕の Opera の巡回フォルダに入れて毎日チェックする、運用にします。

zlib インストール& jail に持ち込み

それでは順にはじめます。 zlib はそもそも入ってるんだか入ってないんだか良くわかりません。とりあえず man -k してみます。

$ man -k zlib
Compress::Raw::Zlib (3p) - Low-Level Interface to zlib compression library
Compress::Zlib (3p) - Interface to zlib compression library
IO::Uncompress::AnyInflate (3p) - Uncompress zlib-based (zip, gzip) file/buffer
IO::Zlib (3p) - IO:: style interface to Compress::Zlib
compress (3) - zlib general purpose compression library

ああ、なんだかあるっぽいです。一番下の compress(3) がそうですね。でもある方が、 chroot jail 内に何を持ち込んでいいかわからなくて困るんですけどね…。というわけで実際困ったので、 zlib のソースを落としてきて適当にコンパイルしてみました。その結果…、

# make install
cp libz.a /root/zlib/lib
cp libz.so.1.2.5 /root/zlib/lib
cp zlib.3 /root/zlib/share/man/man3
cp zlib.pc /root/zlib/lib/pkgconfig
cp zlib.h zconf.h /root/zlib/include
( cp だけ抜粋)

以上がインストールされました。 OpenBSD のパッケージが全く一緒とは限らないのですが、 libz と zlib と名のつくものを持ち込めば良さそうです。 man とか pkgconfig はいらないですしね。

# cd /
# find . -name "*zlib*" 
./usr/include/net/zlib.h
./usr/include/zlib.h
./usr/libdata/perl5/site_perl/amd64-openbsd/net/zlib.ph
./usr/libdata/perl5/site_perl/amd64-openbsd/zlib.ph
./usr/share/man/cat3/zlibCompileFlags.0
./usr/share/man/cat3/zlibVersion.0
./usr/ports/devel/jdk/1.7/patches/patch-jdk_src_share_native_java_util_zip_zlib-1_1_3_zconf_h
./usr/ports/lang/erlang/patches/patch-erts_emulator_zlib_Makefile_in
# find . -name "*libz*"
./usr/lib/libz.so.4.1
./usr/lib/libz.a
./usr/lib/libz_p.a
./usr/lib/libz_pic.a

find すると上記のような結果でしたので、必要そうなものを jail 内に cp したいと思います。ってこれ、結局 /usr/lib/libz.so.4.1 だけでいいんじゃ?。ま、ここでなにか足りなかったらあとで ldd やら systrace すると出てくるでしょう。と思うので気楽にやります。

# cp /usr/lib/libz.so.4.1 /var/www/usr/lib/

以上 zlib 終わり!

bzip2 インストール& jail に持ち込み

これは man -k しても入っていないようなので、いれる!だがパッケージがあるので、

# wget ftp://ftp.lambdaserver.com/pub/OpenBSD/4.6/packages/amd64/bzip2-1.0.5.tgz
wget: can't load library 'libiconv.so.6.0'

って何これ、こないだまで動いていたじゃんよぉーー(泣)。

# find / -name "libiconv.so.6.0"
/usr/local/lib/libintl.so.4.0

超ある。

# ldconfig -r
/var/run/ld.so.hints:
        search directories: /usr/lib
(以下略)

超ない! /usr/local/lib どうした!?ということで ldconfig を OpenBSD のマニュアルで検索して、設定ファイルは /etc/rc.conf.conf の、 shlib_dirs という項目に追加すればいいみたいなので、する。

# ldconfig /usr/local/lib
(これでしのぎつつ)
# grep shlib /etc/rc.conf >> /etc/rc.conf.local 
# mg /etc/rc.conf.local
(編集)
# cat /etc/rc.conf.local
shlib_dirs="/usr/local/lib/"
# ldconfig -r
/var/run/ld.so.hints:
        search directories: /usr/lib:/usr/local/lib

行けたのであらためて

# wget ftp://ftp.lambdaserver.com/pub/OpenBSD/4.6/packages/amd64/bzip2-1.0.5.tgz
# pkg_add bzip2-1.0.5.tgz
bzip2-1.0.5: complete

完了。さて、問題はまたどれを jail 内に持ち込んだらいいかということですね。おお、めんどい! ldconfig のせいで一旦飽きた。

素直になれなくてをみてまた唖然となったので復帰。さて、何がインストールされたかは単純にこのパッケージを開けてみれば良いはず。

# tar xzvf bzip2-1.0.5.tgz
+CONTENTS
+DESC
lib/libbz2.so.10.4
bin/bunzip2
bin/bzcat
bin/bzcmp
bin/bzdiff
bin/bzegrep
bin/bzfgrep
bin/bzgrep
bin/bzip2
bin/bzip2recover
bin/bzless
bin/bzmore
include/bzlib.h
lib/libbz2.a
man/man1/bunzip2.1
man/man1/bzcat.1
man/man1/bzcmp.1
man/man1/bzdiff.1
man/man1/bzegrep.1
man/man1/bzfgrep.1
man/man1/bzgrep.1
man/man1/bzip2.1
man/man1/bzip2recover.1
man/man1/bzless.1
man/man1/bzmore.1
share/doc/bzip2/manual.html

なるほど。これ、もなんとなく絞れてきたと言うか、 bin の中身と lib/libbz2.so.10.4 だけがあればいいっぽい。というか bin の中身も使ってない気がするなあ。とりあえず libbz2.so.10.4 だけ cp する。

# mkdir /var/www/usr/local
# mkdir /var/www/usr/local/lib/
# cp /usr/local/lib/libbz2.so.10.4 /var/www/usr/local/lib

bzip2 以上!次は Tokyo Cabinet 。

Tokyo Cabinet インストール& jail に持ち込み

ソースからのインストール。

# wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.44.tar.gz
# tar xzvf tokyocabinet-1.4.44.tar.gz
# cd tokyocabinet-1.4.44
# ./configure
# make
(略)
Using $< in a non-suffix rule context is a GNUmake idiom (line 717 of Makefile)

make に失敗。「それって GNUmake の文法だね」というエラー。そうそう!これ良くみる良くみる。 make が GNUmake じゃないからね。というわけで、こういうときは素直に GNUmake を使うのが賢い生き方というもの。

# make clean
# wget ftp://ftp.lambdaserver.com/pub/OpenBSD/4.6/packages/amd64/gmake-3.81p0.tgz
# pkg_add gmake-3.81p0.tgz
gmake-3.81p0: complete
# rm gmake-3.81p0.tgz
# gmake
# gmake insall
cp -Rf tcutil.h tchdb.h tcbdb.h tcfdb.h tctdb.h tcadb.h /usr/local/include
cp -Rf libtokyocabinet.a libtokyocabinet.so.9.7.0 libtokyocabinet.so.9 libtokyocabinet.so /usr/local/lib
cp -Rf tcutest tcumttest tcucodec tchtest tchmttest tchmgr tcbtest tcbmttest tcbmgr tcftest tcfmttest tcfmgr tcttest tctmttest tctmgr tcatest tcamttest tcamgr /usr/local/bin
cp -Rf tcawmgr.cgi /usr/local/libexec
cp -Rf COPYING ChangeLog THANKS doc tokyocabinet.idl /usr/local/share/tokyocabinet
cd man && cp -Rf tcutest.1 tcumttest.1 tcucodec.1 tchtest.1 tchmttest.1 tchmgr.1 tcbtest.1 tcbmttest.1 tcbmgr.1 tcftest.1 tcfmttest.1 tcfmgr.1 tcttest.1 tctmttest.1 tctmgr.1 tcatest.1 tcamttest.1 tcamgr.1 /usr/local/share/man/man1
cd man && cp -Rf tokyocabinet.3 tcutil.3 tcxstr.3 tclist.3 tcmap.3 tctree.3 tcmdb.3 tcmpool.3 tchdb.3 tcbdb.3 tcfdb.3 tctdb.3 tcadb.3 /usr/local/share/man/man3
cp -Rf tokyocabinet.pc /usr/local/lib/pkgconfig
( cp だけ抜粋)

ということでどうも無事インストール完了のようです。さて、インストールされたこれらの中からまた必要なものを jail に移す。今度は bin も必要かな?(ただの勘)。

/usr/local/lib/libtokyocabinet.so.9.7.0
/usr/local/lib/libtokyocabinet.so.9 -> libtokyocabinet.so.9.7.0
/usr/local/lib/libtokyocabinet.so -> libtokyocabinet.so.9.7.0

これらかなと!思います。やります。(追記)結果 bin はいらなかった。

# cp -Rf /usr/local/lib/libtokyocabinet.so.9.7.0 /usr/local/lib/libtokyocabinet.so.9 /usr/local/lib/libtokyocabinet.so /var/www/usr/local/lib 

とりあえず複製はした。ただしおそらく bin の依存してるライブラリとかは全く確かめてない。 bin いらないのかあ。どうかなあ。逐一確かめようがないから怖いな…。(追記)結果 bin はいらなかった。

Tokyo Promenade インストール& jail に持ち込み

で、いよいよ TP です!

# wget http://1978th.net/tokyopromenade/tokyopromenade-0.9.21.tar.gz
# tar xzvf tokyopromenade-0.9.21.tar.gz
# cd tokyopromenade-0.9.21
# ./congigure
# gmake
# gmake install
cp -Rf prommgr /usr/local/bin
cp -Rf promenade.cgi promscrsample.lua promscrcount.lua promupdiff.sh promupping.sh /usr/local/libexec
cp -Rf promenade.tmpl promenade.css passwd.txt COPYING ChangeLog THANKS doc misc /usr/local/share/tokyopromenade
cd man && cp -Rf prommgr.1 /usr/local/share/man/man1

以上。こちらは、そもそも cgi ファイルや tmpl ファイルが必要なので、インストールマニュアルに従って複製。何本かカテゴリ分けしてブログを立てる予定なのですが、とりあえず本流として /var/www/cgi-bin/blog に設置する。データべースファイルなどもそのままこのディレクトリ中に置き、 Apache で Deny するので前々回に決めた運用方針通り www をオーナーにして、ディレクトリは 500 。

# mkdir /var/www/cgi-bin/blog
# chown www:www /var/www/cgi-bin/blog
# chmod 700 /var/www/cgi-bin/blog
# cp /usr/local/libexec/promenade.cgi /var/www/cgi-bin/blog
# cp /usr/local/share/tokyopromenade/promenade.* /var/www/cgi-bin/blog
# cp /usr/local/share/tokyopromenade/passwd.txt /var/www/cgi-bin/blog
# prommgr create /var/www/cgi-bin/blog/promenade.tct
# chown www:www /var/www/cgi-bin/blog/*
# chmod 500 /var/www/cgi-bin/blog/promenade.cgi
# chmod 400 /var/www/cgi-bin/blog/promenade.css 
# chmod 400 /var/www/cgi-bin/blog/promenade.tmpl
# chmod 600 /var/www/cgi-bin/blog/passwd.txt
# chmod 600 /var/www/cgi-bin/blog/promenade.tct*
# ls -l /var/www/cgi-bin/blog/
total 1840
-r-x------  1 www   www     126 May  6 14:45 passwd.txt
-r-x------  1 www   www  156629 May  6 14:44 promenade.cgi
-r--------  1 www   www   10826 May  6 14:45 promenade.css
-rw-------  1 root  www  528704 May  6 14:48 promenade.tct
-rw-------  1 root  www   41728 May  6 14:48 promenade.tct.idx.cdate.dec
-rw-------  1 root  www   41728 May  6 14:48 promenade.tct.idx.mdate.dec
-rw-------  1 root  www   41728 May  6 14:48 promenade.tct.idx.name.lex
-rw-------  1 root  www   41728 May  6 14:48 promenade.tct.idx.xdate.dec
-r--------  1 www   www   39670 May  6 14:45 promenade.tmpl

パスワードファイルとデータベースファイルは書き込むので 600 。blog ディレクトリ自体も書き込み権限がないと、データベースの読み込みはできるけど新規の書き込みができない(きっとなにか新しいファイルを一瞬作ってるのかな)ので、 700 です。

よし、これでいいか!?どうだ!?あ、 upload ディレクトリ作るの忘れた。

# mkdir /var/www/cgi-bin/blog/upload
# chown www:www /var/www/cgi-bin/blog/upload
# chmod 700 /var/www/cgi-bin/blog/upload
# ls -l /var/www/cgi-bin/blog/           
total 1844
-r-x------  1 www  www     126 May  6 14:45 passwd.txt
-r-x------  1 www  www  156629 May  6 14:44 promenade.cgi
-r--------  1 www  www   10826 May  6 14:45 promenade.css
-rw-------  1 www  www  528704 May  6 14:48 promenade.tct
-rw-------  1 www  www   41728 May  6 14:48 promenade.tct.idx.cdate.dec
-rw-------  1 www  www   41728 May  6 14:48 promenade.tct.idx.mdate.dec
-rw-------  1 www  www   41728 May  6 14:48 promenade.tct.idx.name.lex
-rw-------  1 www  www   41728 May  6 14:48 promenade.tct.idx.xdate.dec
-r--------  1 www  www   39670 May  6 14:45 promenade.tmpl
drwx------  2 www  www     512 May  6 14:52 upload

こんどこそ、これで…。ではおごそかに例のコマンドを実行。

# chroot -u www /var/www /cgi-bin/blog/promenade.cgi
/cgi-bin/blog/promenade.cgi: can't load library 'libpthread.so.11.1'

んー、だめだった。そりゃそっか。

# ldd /var/www/cgi-bin/blog/promenade.cgi
/var/www/cgi-bin/blog/promenade.cgi:
        Start            End              Type Open Ref GrpRef Name
        0000000000400000 0000000000813000 exe  1    0   0      /var/www/cgi-bin/blog/promenade.cgi
        0000000200940000 0000000200db7000 rlib 0    1   0      /usr/local/lib/libtokyocabinet.so.9
        0000000204bbf000 0000000204fce000 rlib 0    2   0      /usr/local/lib/libbz2.so.10.4
        0000000203009000 000000020341d000 rlib 0    2   0      /usr/lib/libz.so.4.1
        0000000203850000 0000000203c74000 rlib 0    2   0      /usr/lib/libpthread.so.11.1
        0000000203f9b000 00000002043bc000 rlib 0    2   0      /usr/lib/libm.so.5.0
        000000020b305000 000000020b7e4000 rlib 0    2   0      /usr/lib/libc.so.51.0
        000000020c200000 000000020c200000 rtld 0    1   0      /usr/libexec/ld.so

うひゃあ!。と、思ったけど、無いのって libpthread.so.11.1 だけかな?

# cp /usr/lib/libpthread.so.11.1 /var/www/usr/lib
# chroot -u www /var/www /cgi-bin/blog/promenade.cgi 
Content-Type: text/html; charset=UTF-8
Last-Modified: Thu, 06 May 2010 14:56:41 GMT
Cache-Control: no-cache

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
(中略)
<h2>Error</h2>
<p class="error">[database error: file not found] Opening the database was failed.</p>
<p class="error">[database error: file not found] Closing the database was failed.</p>
<p class="info">There is no article.</p>
</div>
</div>
</body>
</html>

きた!!きた!きたけど database 開けないって…。えええ…。データベース自体に触れないのか、データベースに触るためのライブラリか bin が無いのか…。と思ってブラウザから見たらこのエラー出なかった!!。なんだろね。大丈夫かな? systrace してみよっか。

        native-fsread: filename eq "/<non-existent filename>: /usr/share/zoneinfo/GMT" then permit
        native-fsread: filename eq "/<non-existent filename>: /usr/share/zoneinfo/posixrules" then permit
        native-fsread: filename eq "/<non-existent filename>: /etc/localtime" then permit

これらが無いって!。うわわ、timezone 系か。ちょっとこれは OpenBSD がどう管理してるかわからないな…。調査継続…。ということで、一旦ブラウザからデフォルトのパスワードを変更して、今日はここまでかなー。と思いきやなんかやかやってしまった。

データベースのエラーの件

コマンドから実行した時だけ出ていたので、 SCRIPT_NAME とれないからとかその系統かなと思い、設定ファイルであるところの /var/www/cgi-bin/blog/promenade.tmpl を開けて、先頭の方を下記の通り変更。

[% CONF database "/cgi-bin/blog/promenade.tct" \%]
[% CONF password "/cgi-bin/blog/passwd.txt" \%]
[% CONF upload "/htdocs/blog/upload" \%]

これでコマンドからもデータベース読み取りに関するエラーはなくなった。ちなみに、ブラウザからのポストがデータベース書き込みエラーが出て不可能な状態。パーミッションに問題はないと思うので、bin かなにかが足らないか。要調査。と思ったがやっぱりパーミッションの問題で、 /cgi-bin/blog ディレクトリに書き込み権限が必要だった。一瞬テンポラリファイル作ったりしてるのかな??。こういう、サブプロセスとして立ち上げられるプロセスの trace ってどうやっていいのかわからない…。今後の課題です。

ScriptAlias だった

upload は最初 cgi-bin の中に作ったが、 cgi-bin は ScriptAlias されていて AddHandler でいちいちオプトアウトしていくのもどうかと思ったので DocRoot に移す。 css も移す。

# mv /var/www/cgi-bin/blog/upload /var/www/htdocs/blog/
# mv /var/www/cgi-bin/blog/promenade.css /var/www/htdocs/blog/

Apache で password を deny

これで、 cgi ファイル以外に cgi-bin/blog に存在するのはパスワードファイルとデータベースファイル一式となりました。データベースファイルは、この場合持ってきたかったらどうぞ持っていってくださいという具合だけど、 password だけは困るので Apache で Deny する。

httpd の設定ファイルに関してはあとでバーチャルきったりするのでその時にちゃんと整えたいと思います。

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
    <Files "/var/www/cgi-bin/blog/password.txt">
        Order allow,deny
        Deny from all
    </FIles>
</Directory>

もともと ScriptAlias 下なので premature (以下略)が出て表示はできませんが、やはりここはビシッと拒否。エラーログも「サーバが許可してません!びし!」と出るようになったし。よしよし。

timezone の件

Unix ライクシステム全般でそうらしいのですが、いつもラッパーコマンド任せだったので知りませんでした…。 tzfile(5) や tzset(3) を man すると書いてあって、

/usr/share/zoneinfo
以下にタイムゾーンごとのうるうなんとかやらサマータイムやら細かいあれこれを記述したファイルを格納
/usr/share/zoneinfo/Asia/Tokyo
東京用タイムゾーンデータ
/etc/localtime
実際に使用したいタイムゾーンデータへのシンボリックリンク
/usr/share/zoneinfo/GMT
UTCうるう秒記述が入ったタイムゾーンデータ
/usr/share/zoneinfo/posixrules
こいつ自体は何ものかわからないけど /usr/share/zoneinfo/GMT が無いと代わりに使われる

ということ。タイムゾーンデータは通常テキストファイルで記述したものを zip(8) でコンパイルして /usr/share/zoneinfo 内に置いておくということです。自分では書くことはないだろうけど、なるほどです。サンプルみると分かるんですが、ある地域では何年から何年の間だけサマータイムがあって…、みたいなことをしっかり規定できるみたいだ。そりゃそうだ。どっかにこういう、手動で記述されたファイルが必要ですよね…。

実際にサーバのタイムゾーンも設定してあげていなかったので(通常は OpenBSD のインストール時に聞かれるんだけど、すでにインストールされた状態だったので)

# rm /etc/localtime
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

してあげる…。と、一瞬で ls -l の時刻表示が日本時間になった!すごす。

じゃあこの人たちも jail にコピーしてあげよう。必要なのは /usr/share/zoneinfo/Asia/Tokyo とそのリンクである /etc/localtime と /usr/share/zoneinfo/GMT のはず。

# mkdir -p /var/www/usr/share/zoneinfo/Asia
# cp /usr/share/zoneinfo/Asia/Tokyo /var/www/usr/share/zoneinfo/Asia
# mkdir /var/www/etc
# ln -s /usr/share/zoneinfo/Asia/Tokyo /var/www/etc/localtime

これで! /var/www/etc/localtime のリンクも、やはり /var/www に chroot された後の状態で設定しないといけなくて、 /var/www/usr/share/zoneinfo/Asia/Tokyo ではなくて /usr/share/zoneinfo/Asia/Tokyo にリンクを張りました。これで systrace した結果もクリア!!

        native-fsread: filename eq "/usr/share/zoneinfo/GMT" then permit
        native-fsread: filename eq "/usr/share/zoneinfo/Asia/Tokyo" then permit

やった!。これで、 TP は一旦インストール完了です!。あとは CSS 弄ったり Wiki 記法の勉強したり、リダイレクト設定したりするサイト制作作業が残ってるだけだ。あ、 HTML5 化があったけど、それは今後の課題。 C のソース弄らないといけないなら自分は手を出すべきで無いところ。 Luaプラグインレベルでできるならやろう。

というわけで、以上、 OpenBSDchroot jail httpd で Tokyo Promenade を動かす!でした!実際に動いているのは

http://oogatta.com/cgi-bin/blog/promenade.cgi

で動いているのが見られます!!(絶賛製作中なので見られないこともあるかも)。やっふー!。嬉しい。久々にこういうシステム作業でうまくいった。ありがとう OpenBSD 。ありがとうテオ様。

最終結果

結果だけ出すとこんな感じ

$ sudo find /var/www -type f -or -type l > list
$ cat list 
( TP 用に必要そうなものだけ抜粋)
/var/www/cgi-bin/blog/promenade.cgi
/var/www/cgi-bin/blog/promenade.tmpl
/var/www/cgi-bin/blog/passwd.txt
/var/www/cgi-bin/blog/promenade.tct
/var/www/cgi-bin/blog/promenade.tct.idx.name.lex
/var/www/cgi-bin/blog/promenade.tct.idx.cdate.dec
/var/www/cgi-bin/blog/promenade.tct.idx.mdate.dec
/var/www/cgi-bin/blog/promenade.tct.idx.xdate.dec
/var/www/htdocs/blog/promenade.css
/var/www/htdocs/blog/upload
/var/www/etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
/var/www/usr/lib/libm.so.5.0
/var/www/usr/lib/libutil.so.11.0
/var/www/usr/lib/libc.so.51.0
/var/www/usr/lib/libz.so.4.1
/var/www/usr/lib/libpthread.so.11.1
/var/www/usr/libexec/ld.so
/var/www/usr/local/lib/libbz2.so.10.4
/var/www/usr/local/lib/libtokyocabinet.so -> libtokyocabinet.so.9.7.0
/var/www/usr/local/lib/libtokyocabinet.so.9 -> libtokyocabinet.so.9.7.0
/var/www/usr/local/lib/libtokyocabinet.so.9.7.0
/var/www/usr/share/zoneinfo/Asia/Tokyo
/var/www/usr/share/zoneinfo/GMT

以上でした。