俺だけのために Ore! Tips!

Web日記システム tDiary をインストール(とりあえず起動まで)

2004年11月03日 作業

ブログサイト(笑)構築のため、tDiary を FreeBSD 機にインストールする。

まず、最新安定版をダウンロードしてくる。
http://www.tdiary.org/download/tdiary-full-2.0.0.tar.gz

serv2# pwd
/usr/local/src/tdiary
serv2# lynx http://www.tdiary.org/download/tdiary-full-2.0.0.tar.gz

展開。

serv2# ls -la
total 1684
drwxr-xr-x   2 root  wheel      512 Nov  3 08:12 .
drwxr-xr-x  16 root  wheel     1024 Nov  3 08:11 ..
-rw-r--r--   1 root  wheel  1694168 Nov  3 08:12 tdiary-full-2.0.0.tar.gz
serv2# tar xvzf tdiary-full-2.0.0.tar.gz
tdiary-2.0.0/
tdiary-2.0.0/ChangeLog
tdiary-2.0.0/README
tdiary-2.0.0/dot.htaccess
tdiary-2.0.0/index.rb
<略>
tdiary-2.0.0/theme/yukon/yukon_dayback.jpg
tdiary-2.0.0/theme/yukon/yukon_divbodyback.jpg
tdiary-2.0.0/theme/yukon/yukon_h1back.jpg

う〜む。index.rb か・・・。Ruby だな。(笑)
展開してみるまで、tDiary が Ruby で書かれているとは知らなかった。(笑)

ということで、Ruby のインストールから始めないといけないが、FreeBSD には packages があるので楽だ。

インストーラを使って、ネットワーク経由で packages のインストールを行う。(ちなみに、tDiary にとっては、Ruby 1.6.3 以降のバージョンでないとよろしくないそうだ)

serv2# /stand/sysinstall

'Configure' → 'Packages' → 'FTP' → 'Japan' → 'ruby' → 'ruby-1.8.1.p2' の順にメニューを辿る。で、インストール。(ruby-1.6.8.2003.10.15 もあるが、こっちが安定版なのかな?)

Ruby のインストール終了。

serv2# pkg_info | grep ruby
ruby-1.8.1.p2       An object-oriented interpreted scripting language
serv2# rehash
serv2# which ruby
ruby: Command not found.

あり?

serv2# ls -la /usr/local/bin/ruby*
-rwxr-xr-x  1 root  wheel  3380 Dec  5  2003 /usr/local/bin/ruby18

む〜ん?ruby18 などという名前で入っているとは!!シンボリックリンクを張ります。

serv2# ln -s /usr/local/bin/ruby18 /usr/local/bin/ruby
serv2# rehash
serv2# ruby -v
ruby 1.8.1 (2003-10-31) [i386-freebsd5]


で、tdiary のファイル群を /usr/local/share/apache/cgi-bin/tdiary 以下にコピー。

serv2# cd /usr/local/share/apache/cgi-bin/
serv2# mkdir tdiary
serv2# cd t*
serv2# chown www .
serv2# cp -r /usr/local/src/tdiary/tdiary-2.0.0/* /usr/local/share/apache/cgi-bin/tdiary
serv2# ls -la /usr/local/share/apache/cgi-bin/tdiary
total 138
drwxr-xr-x    9 www   wheel    512 Nov  3 11:09 .
drwxr-xr-x    8 root  wheel    512 Nov  3 11:07 ..
-rw-r--r--    1 root  wheel  55028 Nov  3 11:09 ChangeLog
-rw-r--r--    1 root  wheel    287 Nov  3 11:09 README
drwxr-xr-x    2 root  wheel    512 Nov  3 11:09 doc
-rw-r--r--    1 root  wheel    478 Nov  3 11:09 dot.htaccess
drwxr-xr-x    2 root  wheel    512 Nov  3 11:09 erb
-rwxr-xr-x    1 root  wheel   2955 Nov  3 11:09 index.rb
drwxr-xr-x    6 root  wheel    512 Nov  3 11:09 misc
drwxr-xr-x    5 root  wheel    512 Nov  3 11:09 plugin
drwxr-xr-x    2 root  wheel   1024 Nov  3 11:09 skel
drwxr-xr-x    4 root  wheel    512 Nov  3 11:09 tdiary
-rw-r--r--    1 root  wheel  12657 Nov  3 11:09 tdiary.conf.sample
-rw-r--r--    1 root  wheel  38633 Nov  3 11:09 tdiary.rb
drwxr-xr-x  197 root  wheel   3584 Nov  3 11:09 theme
-rwxr-xr-x    1 root  wheel   2759 Nov  3 11:09 update.rb

コマンドラインから試しに実行してみる。

serv2# ./index.rb
(offline mode: enter name=value pairs on standard input)
Content-Type: text/plain

No such file or directory - tdiary.conf (Errno::ENOENT)

./tdiary.rb:471:in `initialize'
./tdiary.rb:471:in `open'
./tdiary.rb:471:in `load'
./tdiary.rb:399:in `initialize'
./index.rb:21:in `new'
./index.rb:21

Ruby のスクリプトを CGI として実行出来るかブラウザからアクセスして試してみる。(ま、httpd.conf を見ればわかるんじゃけどね(^^;)

で、IE で http://www.netandfield.com/cgi-bin/tdiary/index.rb にアクセスしてみると、無事(?)、

No such file or directory - tdiary.conf (Errno::ENOENT)

/usr/local/share/apache/cgi-bin/tdiary/tdiary.rb:471:in `initialize'
/usr/local/share/apache/cgi-bin/tdiary/tdiary.rb:471:in `open'
/usr/local/share/apache/cgi-bin/tdiary/tdiary.rb:471:in `load'
/usr/local/share/apache/cgi-bin/tdiary/tdiary.rb:399:in `initialize'
/usr/local/share/apache/cgi-bin/tdiary/index.rb:21:in `new'
/usr/local/share/apache/cgi-bin/tdiary/index.rb:21

というエラーが表示された。
CGI として実行出来るということじゃね。

では、設定を。
まずは、httpd.conf を編集し、

・コンテンツスケルトンファイル(*.rhtml)を直接参照出来ないようにする。
・外部モジュール(?)や設定ファイルを直接参照出来ないようにする。(tdiary.* ファイル)
・index.rb をインデックスファイルとする。

という設定を行う。

<VirtualHost www.netandfield.com:80>

    ServerAdmin webmaster@netandfield.com
    DocumentRoot /usr/local/share/apache/htdocs
    ServerName www.netandfield.com
    ErrorLog /var/log/apache/logs/www.netandfield.com/error_log
    CustomLog /var/log/apache/logs/www.netandfield.com/access_log combined
    ScriptAlias /cgi-bin/ "/usr/local/share/apache/cgi-bin/"

    <Directory "/usr/local/share/apache/cgi-bin">
        DirectoryIndex index.rb
        Options ExecCGI

        <Files "*.rhtml">
            deny from all
        </Files>

        <Files "tdiary.*">
            deny from all
        </Files>

    </Directory>

</VirtualHost>


次に、日記データを置くディレクトリを作成する。
セキュリティ上は、Apache のドキュメントルート以下のディレクトリには置かないほうが良いんだが、今回は複数のユーザーに「ブログ屋」的にブログ運用サービスをしようと思っているので、なるべくユーザー毎のファイルを一カ所にまとめておきたい。
つーことで、CGI のディレクトリ下に置くことにする。(試しに)

serv2# pwd
/usr/local/share/apache/cgi-bin/tdiary
serv2# mkdir diary
serv2# ls -la diary
total 4
drwxr-xr-x   2 root  wheel  512 Nov  3 16:55 .
drwxr-xr-x  10 www   wheel  512 Nov  3 16:56 ..
serv2# chown www diary
serv2# ls -la diary
total 4
drwxr-xr-x   2 www  wheel  512 Nov  3 16:55 .
drwxr-xr-x  10 www  wheel  512 Nov  3 16:56 ..

これでOK。

次に、設定ファイル(tdiary.conf)の作成を行う。
サンプルが付いてきているので、これを修正する。

serv2# cp tdiary.conf.sample tdiary.conf
serv2# vi tdiary.conf

#@data_path = '/home/foo/diary'
@data_path = '/usr/local/share/apache/cgi-bin/tdiary/diary'

あとの項目は設定 CGI で変更出来るそうなので、これだけ修正。
で、ブラウザで先ほどの URL にアクセスしてみる。

あ、表示された。

tdiary 起動

で、ここから README ファイルを読もうとすると、http://www.netandfield.com/cgi-bin/tdiary/doc/README.html へのアクセスで 'Internal Server Error' が・・・。
確かに、cgi-bin の下じゃ、html ファイルの閲覧なんか許してないけんね。(基本的に、cgi-bin ディレクトリに Options ExecCGI しか指定していないから、このディレクトリにあるファイルは全部実行ファイルとみなされちゃうけんね)

つーことで、HTML ファイルなどは実行ファイルではなく、本来の MIME タイプでハンドリングさせるよう、AddHandler default-handler .html .htm .gif .jpg という設定を httpd.conf に追加する。

httpd.conf の当該部分は、最終的に以下のような形に。(他の CGI に設定が影響を受けないように、cgi-bin と、その子の tdiary ディレクトリでディレクティブを分けた)

<VirtualHost www.netandfield.com:80>

    ServerAdmin webmaster@netandfield.com
    DocumentRoot /usr/local/share/apache/htdocs
    ServerName www.netandfield.com
    ErrorLog /var/log/apache/logs/www.netandfield.com/error_log
    CustomLog /var/log/apache/logs/www.netandfield.com/access_log combined
    ScriptAlias /cgi-bin/ "/usr/local/share/apache/cgi-bin/"

    <Directory "/usr/local/share/apache/cgi-bin">
        Options ExecCGI
    </Directory>

    <Directory "/usr/local/share/apache/cgi-bin/tdiary">
        AddHandler cgi-script .rb
        AddHandler default-handler .html .htm .gif .jpg
        DirectoryIndex index.rb

        <Files "*.rhtml"> 
            deny from all
        </Files>

        <Files "tdiary.*">
            deny from all
        </Files>
    </Directory>

</VirtualHost>

これで、

serv2# /usr/local/apache/bin/apachectl configtest
Syntax OK
serv2# /usr/local/apache/bin/apachectl restart
serv2# ps -ax | grep httpd
 2241  ??  Ss     1:58.98 /usr/local/apache2/bin/httpd -k start
85452  ??  S      0:00.00 /usr/local/apache2/bin/httpd -k start
85453  ??  S      0:00.00 /usr/local/apache2/bin/httpd -k start
85454  ??  S      0:00.00 /usr/local/apache2/bin/httpd -k start
85455  ??  S      0:00.00 /usr/local/apache2/bin/httpd -k start
85456  ??  S      0:00.00 /usr/local/apache2/bin/httpd -k start
85458  p2  RV     0:00.00 grep httpd (csh)

と、Apache を再起動してやれば、HTML ファイルの閲覧で 'Internal Server Error' が出ることはなくなった。

README 画面

さて、次は細かい設定を・・・

前ページに戻る


Copyright (C) 2004 S.Maaasamasa.