スタンドアローン/EXE版

Webサーバが不要のスタンドアローン版とWindows用EXE版がVer3.20以降収録されています。

実行ファイル

  • adiary.httpd.pl
    • Perl用の実行ファイルです。Perl本体およびImage::Magick等のライブラリをインストールしてください。
  • adiary.exe (x64)
    • Perlを内包していますので、Perl本体は不要です。Windows用ZIP版にのみ含まれます。*1

システム更新時にメモリリークが起こりやすいようなので、更新時は再起動を推奨します。

*1 : githubには置いてありません。githubで管理する場合は、adiary.exeのみ抜き出して使用してください。

オプション(引数)

"-h"オプション付で実行するとヘルプが表示されます。以下オプションの説明になります。ヘルプと内容が異なる場合、ヘルプを優先してください。

Usage: ./adiary.httpd.pl [options]
available options are:
  -p port	bind port (default:8888, windows:80)
  -t timeout	connection timeout second (default:3, min:0.001)
  -d daemons	start daemons (default:10, min:1)
  -m max_req	maximum cgi requests per daemon (default:10000, min:100)
  -e mime_file	load mime types file name (default: /etc/mime.types)
  -c fs_code	set file system's code (charset)
  -b bufsize    buffer size [KB] (default:1024 = 1M, min:64)
  -u filename	UNIX domain socket mode
  -f		use fork()
  -i		use threads (ithreads)
  -k1		connection keep-alive enable (default)
  -k0		connection keep-alive disable
  -t0		set ENV SatsukiTimer=0
  -t1		set ENV SatsukiTimer=1
  -s		silent mode
  -sc		silent mode for cgi  access
  -sf		silent mode for file access
  -n		do not open web browser
  -?|-h         view this help
-p
bindするポート番号を指定します。デフォルトは 8888、Windowsでは 80 です。
-t
タイムアウト(秒)を指定します。指定秒数経過するとTCP接続を切断します。長い値を指定すると、keep-alive時の効率がよくなりますが、接続リソースを使い尽くすDoS攻撃に弱くなります。
-d
デーモン数*2を指定します。ここで指定した数だけ同時接続を受け付けます。
-m
1つのデーモンあたりの最大CGI処理回数を指定します。この数を超えるとデーモンが再起動されます。メモリリーク対策用の設定になります。0を指定すると最大数が設定されます。静的ファイルアクセス(CGIアクセス以外)はカウントされません。
-e
FileTypeを記述したmimeファイルを指定します。Linux等ならば /etc/mime.types を自動で読み込みます。内部で必要最低限の設定はされていますので、ほとんどの場合、指定する必要はありません。
-c
ファイルシステムの文字コードを指定します。自動認識に失敗するときに指定してください。
-u
指定したUNIX domain socketを開きます。TCPポートは開かなくなります。
-b
ファイル送信時*3のメモリバッファのサイズを指定します。「1M」や「256K」等の単位を付けて指定することもできます。数字のみ指定した場合は、KB単位となります。
-f
forkモードでデーモンを起動します。Windowsでは動作しません。非Windowsでのデフォルトです。
-i
ithreads(threads)モードでデーモンを起動します。Windowsでのデフォルトです。
-k1
keep-aliveをonにします。デフォルトです。Chrome以外のブラウザでは、keep-aliveをoffのほうが接続効率は良くなります。
-k0
keep-aliveをoffにします。Chrome等では、keep-aliveをoffにすると接続効率が極端に悪くなります。
-t0
環境変数に SatsukiTimer=0 を設定します。タイマー計測が強制オフになります。
-t1
環境変数に SatsukiTimer=1 を設定します。タイマー計測が強制オンになります。
-s
サイレントモードに設定します。接続ログを標準出力しなくなります。
-sc
CGIアクセスのログを出力しなくなります。
-sf
ファイルアクセスのログを出力しなくなります。
-n
起動時に自動でブラウザを開かなくなります(Windowsのみ)。
-h, -?
HELPメッセージを表示します。

*2 : forkプロセス数やスレッド数

*3 : クライアントから見ればファイルダウンロード時

リバースProxyによる運用

adiary.httpd.pl をApache等リバースproxyより適当なWebフォルダに貼り付けることができます(Ver3.40以降)。

# Reverse Proxy
ProxyPass  /adiary/  http://localhost:8888/adiary/

この場合、adiary.httpd.pl に Web working path を指定してあげる必要があります。

./adiary.httpd.pl /adiary/

Apacheで試したところ、直接アクセスした場合の8割程度の性能になるようです。

UNIX domain socketを使用する場合

# Reverse Proxy
ProxyPass  /adiary/  unix:/path/to/adiary/adiary.sock|http://localhost/adiary/
./adiary.httpd.pl -u adiary.sock /adiary/

adiary.exeの生成方法

Strawberry Perlと pp を使って adiary.httpd.pl をコンパイルしたものです。管理が面倒なのでx64専用としていますが、コンパイルしなおせばx86(32bit)でも動作すると思います。

  • 更新が必要な場合は自動検出しエラーを出力します。*4

exeの生成

PAR.pmへのパッチ

sub import {
    my $class = shift;

    PAR::SetupProgname::set_progname();
    PAR::SetupTemp::set_par_temp_env();

    # patch for sitelib by nabe@abk ---------
    if ($ENV{PAR_TEMP} && $^O eq 'MSWin32') {
        my %conf;
        foreach(keys(%Config)) {
            $conf{$_} = $Config{$_};
        }
        *Config::Config = \%conf;   # replace read-only object

        my $base = "$ENV{PAR_TEMP}\\inc";
        $Config::Config{sitelib}    = "$base\\site\\lib";
        $Config::Config{sitelibexp} = "$base\\site\\lib";
    }
    # patch end -----------------------------

Crypt::glibc

WindowsでCrypt/MD5、Crypt/SHA256、Crypt/SHA512を実行するためのライブラリ。

https://adiary.org/download/tools/Crypt-glibc-0.01.tar.gz

*4 : エラーをSTDERRに出力し、入力待ちを行ってからexit(-1)します。