mod_uploader 取扱説明書 (lighttpd プラグイン版用)

mod_uploader: lighttpd のモジュールとして動作する高速アップローダ

Contents

mod_uploader とは?

mod_uploader は,よくあるアップローダを lighttpd のモジュールとして 実装したものです.以下のような特長があります.

動作サンプル

http://acapulco.dyndns.org:8888/up/

動作環境

mod_uploader は,UNIX 系 OS で動作します.詳細を以下に示します.

開発は, Gentoo Linux kernel 2.6.10 ,GCC 3.3.5 ,lighttpd 1.4.6 ,ImageMagick 6.1.8.8 ,ffmpeg 0.4.9 で行っています.

ライセンス

The zlib/libpng LicenseThe zlib/libpng License の翻訳 )に従いま す.

ダウンロード

CVS リポジトリ

下記のようにすることで check out できます.(パスワードは空)

$ cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/mod-uploader login
$ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/mod-uploader co mod_uploader

また, ViewCVS 経由で参照 することもできます.

バグ情報

バグ情報

バグを見つけた場合は,リンク先の「新規レポート」から書き込んでください.

コンパイル方法

UNIX 系 OS

GNU Compiler Collection でコンパイルする場合は,

$ ./configure --lighttpd-src=/path/to/lighttpd/sources --lighttpd-plugin=/path/to/lighttpd/plugins
$ make lighttpd-module

とします. Intel C++ Compiler でコンパイルする場合は,

$ env CC=icc ./configure --lighttpd-src=/path/to/lighttpd/sources --lighttpd-plugin=/path/to/lighttpd/plugins
$ make lighttpd-module

とします.

configure は次のオプションを受け付けます.エラーがでた場合は, --with-aprconf や`--enable-iconv-const`_ を試してみてください.

--lighttpd-src = DIR
lighttpd のソースのパスを指定します.あらかじめ lighttpd の configure を実行して config.h を生成しておく必要があります.
--lighttpd-plugin = DIR
lighttpd のプラグインをインストールするパスを指定します.
--with-aprconf = APRCONF
apr-config コマンドのパスを指定します.自動的に検出されない場合に使用 して下さい.
--with-libtool = LIBTOOL
libtool コマンドのパスを指定します.自動的に検出されない場合に使用し て下さい.
--with-march = CPU
特定の CPU 向けに最適化したい場合に使用します.例えば,Pentium 4 に最 適化したい場合は, --with-march = pentium4 とします.
--enable-thumbnail
ファイルのサムネイル画像を生成したい場合に指定してください.
--enable-movie
ffmpeg を使って動画のサムネイル画像を生成したい場合に指定してくださ い. --enable-thumbnail と組み合わせて使用します.
--with-mconf = MCONF
Magick++-config コマンドのパスを指定します.自動的に検出されない場合 に使用してください.
--with-writer = TYPE
ファイルを書き出す方法を指定します.basic と mmap が指定可能です. (デフォルト: basic)
--with-ie-name-code = CODE
Internet Explorer に対してファイル名を出力するときの文字コード. (デフォルト: cp932)
--enable-iconv-const iconv の第二引数に const をつけるかどうか.
Mac OSX TigerFreeBSD を使用している場合は指定する必要があり ます.

各環境での例

Gentoo Linux

$ ./configure
$ make lighttpd-module

FreeBSD

$ env CPPFLAGS="-I/usr/local/include -L/usr/local/lib" ./configure --enable-iconv-const --with-libtool=/usr/local/bin/libtool15
$ gmake lighttpd-module

Mac OSX Tiger + Fink

$ env CPPFLAGS="-I/sw/include" ./configure --enable-iconv-const --disable-rwlock
$ env MACOSX_DEPLOYMENT_TARGET=10.4 make lighttpd-module

インストール

UNIX 系 OS

mod_uploader.so を lighttpd のプラグインディレクトリにコピーします. プラグインディレクトリが /usr/lib/lighttpd の場合,次のようにします.

$ su
# cp mod_uploader.so /usr/lib/lighttpd

設定

lighttpd の設定

設定は, lighttpd の設定ファイルに,以下のように記述します. ( * 印がついているものは必須)

テンプレートは,tmpl/lighttpd ディレクトリに入っている view.htmprogress.htmdownload.htmthumbnail.htmerror.htm を利 用してください.

uploader.path                       = アップローダを設置する場所 *

uploader.url                        = アップローダの URL(RSS の生成に利用)

uploader.file-directory             = アップロードファイルを保存するディレクトリ *
uploader.thumb-directory            = サムネイル画像を保存するディレクトリ *
uploader.tmp-directory              = 一時ファイルを保存するディレクトリ *

uploader.max-file-size              = 一回にアップロードできるファイルの最大サイズ(KB)
uploader.total-file-size-limit      = ファイルの合計サイズの上限値(KB)
uploader.total-file-number-limit    = ファイルの個数の上限値
uploader.per-page-item-number       = 1 ページあたりに表示するアイテム数

uploader.view-template-file         = トップページのテンプレートファイル *
uploader.progress-template-file     = アップロード状況表示画面のテンプレートファイル *
uploader.download-template-file     = DL pass 入力画面のテンプレートファイル *
uploader.thumb-template-file        = サムネイルページのテンプレートファイル *
uploader.error-template-file        = エラーページのテンプレートファイル *

uploader.activate                   = mod_uploader を有効化するかどうか *

http://foo/up/ に設置する場合の設定例は以下のようになります.(これは あくまでも例です.ディレクトリやファイルのパスは環境よって違ってきます)

uploader.path                       = "/up"

uploader.url                        = "http://foo/up/"

uploader.file-directory             = "/home/kimata/prog/Apache/Uploader/file"
uploader.thumb-directory            = "/home/kimata/prog/Apache/Uploader/thumb"
uploader.tmp-directory              = "/home/kimata/prog/Apache/Uploader/tmp"

uploader.max-file-size              = "1024"
uploader.total-file-size-limit      = "10240"
uploader.total-file-number-limit    = "1000"
uploader.per-page-item-number       = "20"

uploader.view-template-file         = "/home/kimata/prog/Apache/Uploader/tmpl/lighttpd/view.htm"
uploader.progress-template-file     = "/home/kimata/prog/Apache/Uploader/tmpl/lighttpd/progress.htm"
uploader.download-template-file     = "/home/kimata/prog/Apache/Uploader/tmpl/lighttpd/download.htm"
uploader.thumb-template-file        = "/home/kimata/prog/Apache/Uploader/tmpl/lighttpd/thumbnail.htm"
uploader.error-template-file        = "/home/kimata/prog/Apache/Uploader/tmpl/lighttpd/error.htm"

$HTTP["url"] =~ "^/up/" {
    uploader.activate               = "enable"
}

注意事項

  • lighttpd の動作に不慣れなうちは,ディレクトリやファイルの指定には 絶対パスを使用してください.
  • uploader.path で指定する場所の末尾には「/」を つけてないで 下さい.
  • ディレクトリやファイルの指定には「\」を使わないでください. ( × C:foobarbaz, × C:/foo/bar/baz)
  • ディレクトリやファイルの指定には空白「 」を含めないでください. ( × C:/Documents and Settings/foo/bar/baz)
  • uploader.file-directoryuploader.thumb-directoryuploader.tmp-directory の各ディレクトリは, lighttpd が読み書き 実行できるパーミッションに設定されている必要があります.
  • uploader.file-directoryuploader.thumb-directory には mod_uploader が生成するファイル以外を置かないでください.
  • 設定によっては,テンプレートを一部書き換えないと正常に表示されません. 適宜書き換えてください.

起動

lighttpd を普通に起動すれば OK です.設置した場所にブラウザでアクセ スしてみましょう.

お試し実行

UNIX 系 OS の場合,次のコマンドを入力して,http://127.0.0.1:9090/up/ に アクセスすることですることでインストールせずに動作を確認できます.(他の ホストからアクセスする場合は, 127.0.0.1 の部分を適当に置き換えてくだ さい)

$ su -
# make -f GNUmakefile.lighttpd start

もし, LoadModule 関連のエラーが出た場合は,conf/apache.conf を適宜修 正してください.

停止は,次のようにします.

# make -f GNUmakefile.lighttpd stop

トラブル・シューティング

Intel C++ Compiler でコンパイルすると,Internal Server Error になってしまう.

下記のように, LD_PRELOAD に libunwind.so.5 を指定しながら lighttpd を起動したら症状が改善する場合,ICC のインストール方法に問題があります. もう一度設定を見直してください.

$ env LD_PRELOAD=/opt/intel_cc_81/lib/libunwind.so.5 "Apache の起動コマンド"

テンプレートの書式

Comming soon...

API ドキュメント

http://acapulco.dyndns.org/mod_uploader/api/

ツール

プログラムの作成にあたってお世話になったツールを紹介します.

Valgrind
メモリの不正な参照や解放し忘れなどをチェックしてくれるツール.デバッ グでかなりお世話になりました.

参考文献

プログラムの作成にあたってお世話になった文献を紹介します.

libapr (apache portable runtime) programming tutorial
APR のチュートリアル.サンプルコードおよび,間違いやすい点についての 記述が多いので重宝します.
Using libavformat and libavcodec: An Update
libavformat と libavcodec を使って動画からフレーム画像を取り出す方法 を解説したページ.丁寧に書かれています.
STL のページ
C++ の標準テンプレートライブラリである STL について簡潔にまとめられた サイト.
RubyExtensionProgrammingGuide
Ruby の拡張ライブラリの書き方を解説したサイト.基本的な事項から少し高 度な話題まで非常に良くまとまってます.
Compiler Construction Lecture
コンパイラ作成に関する実践的な内容が簡潔にまとめられたサイト.簡単な インタプリタもどきを作るんだったら,このサイトだけで十分かも.