特殊なサーバでの動作

windows系サーバの場合はこちら

XREA(無料/広告付きサーバ)

広告を出すためにApacheをいじっているらしく、一部、HTTPやApacheの実装などに反する環境変数を設定します。PATH_INFOを2回繰り返して設定するのが最大(最低)のバグです。adiaryをここで動かすためには、設定ファイル adiary.conf.cgi の最初の方に次の2行を書き加える必要があります。

<$ENV.PATH_INFO   = substr(ENV.PATH_INFO,   length(ENV.PATH_INFO)/2)>
<$ENV.SCRIPT_NAME = substr(ENV.SCRIPT_NAME, 0, length(ENV.SCRIPT_NAME) - length(ENV.PATH_INFO))>

※XREA有料版ではこのような細工は不要です。

Infoseek isweb

通常通り設置しただけではテーマなどCSSが読み出せない問題があります。詳細はこちら

CORESERVER.JP

パスの自動解析に失敗するようです。自分で試した限り問題なさそうでしたが。

うまくいかない場合はこちらを参考に <$Basepath>, <$Mod_rewrite=0>を設定してみてください。

land.to

SCRIPT_FILENAME に PATH_INFO が付加して出力されるバグがあるようです。

http://adiary.xx.land.to/blog/adiary.cgi に設置した場合
<$Mod_rewrite=0>
<$Basepath="/blog/">
<$ENV.SCRIPT_NAME="/blog/adiary.cgi">

ロリポップ

ロリポップで、ImageMagickのロードに失敗するようです。uploader.conf に次の設定をしてください。

[executor] Can't locate auto/Image/Magick/Thumbnail.al in @INC (@INC ... 以下略
のようなエラーが出る場合,次の設定を有効にしてみてください.
<$v.use_resize = 1>

Apache系でのトラブル(Cobalt/RackStar等)

Apacheを使用しているのにうまく動作しない場合、cgi-wrapper を使用している可能性があります。Apacheのコンフィグにて、

AddHandler cgi-wrapper .cgi
AddHandler cgi-wrapper .pl

と指定されているようでしたら、これらをコメントアウトし、cgi-script に書き換えてみてください。

AddHandler cgi-script .cgi

cgi-wrapper環境ではPATH_INFOが狂う問題があるようです。(浅野さんの情報提供)*1

*1 : 多くのCGIスクリプトで問題が起こるでしょう。少なくとも、SCRIPT_NAME、PATH_INFOが共に狂います。

その他のサーバ

デフォルトでは動かないレンタルサーバがありましたらお知らせ&問題解決にご協力ください。

ディレクトリをまたぐmod_rewrite

通常の設定方法

adiary では mod_rewrite を利用して設置することを推奨しています。例えば、

CGI設置場所 : http://xx.yy.zz/~user/adiary/adiary.cgi
見せたいURL : http://xx.yy.zz/~user/adiary/

であるとき、.htaccess を http://xx.yy.zz/~user/adiary/ に設置して

RewriteEngine	On
RewriteBase	/~user/adiary/
RewriteCond	%{REQUEST_FILENAME}	!-f
RewriteRule	^(.*)$			adiary.cgi/$1	[L]

とすることで、実現出来ます。最近の記事などはキャッシュされていますので、リンクを書き換えるため、日記帳の設定を開いて特に変更せず保存してください。

さてではCGI設置場所を変更しないで http://xx.yy.zz/~user/ で見せるにはどうしたら良いでしょうか?

ディレクトリをまたがる mod_rewrite

CGI設置場所 : http://xx.yy.zz/~user/adiary/adiary.cgi
見せたいURL : http://xx.yy.zz/~user/

.htaccess を http://xx.yy.zz/~user/ に設置して

RewriteEngine	On
RewriteBase	/~user/
RewriteRule	^adiary/		-			[L]
RewriteCond	%{REQUEST_FILENAME}	!-f
RewriteRule	^(.*)$			adiary/$1
RewriteRule	^adiary/[\w\.]*\.cgi	-                       [L]
RewriteCond	%{REQUEST_FILENAME}	!-f
RewriteRule	^adiary/(.*)$		adiary/adiary.cgi/$1	[L]

と書きます。http://xx.yy.zz/~user/adiary/ にある .htaccess(のmod_rewrite設定)は無効化します

このとき<$Basepath>は設定しないか、設定するならば<$Basepath="/user/">とします。

Apache 1.3.xxの場合

Apache1.3では上の方法はうまくいかないようです。それぞれ次のように設定すれば大丈夫でした。

/~user/.htaccess
RewriteEngine	On
RewriteCond     %{REQUEST_FILENAME}     !-f
RewriteRule	^adiary/		-			[L]
RewriteRule	^(.*)$			adiary/$1
/~user/adiary/.htaccess
RewriteEngine	On
RewriteCond     %{REQUEST_FILENAME}     !-f
RewriteRule	^(.*)$			adiary.cgi/$1

adiary.conf.cgi にある設定項目の補足

adiary.conf.cgi にあるディレクトリ設定

# 公開のデータディレクトリ
<$constant(public_dir) = 'public/'>
<$constant(theme_dir)  = 'theme/'>

を変更する際、adiary.cgi から見たデータの保管場所として指定する必要があります。というのも www 上から見せる URL のパスであるのと同時に、adiary が実体ファイルにアクセスする際のパスにもなっているためです。

メール投稿の設定

必要なもの

sendmailコマンド

adiaryからメールを送信するために使用します。どの MTA(メール送信デーモン)でも付属していると思います。通常パスは自動で発見するので大丈夫です*1レンタルサーバでは利用出来ることが多いようです*2

adiaryからインストールされているサーバにおいて、sendmailコマンド((sendmail互換送信コマンド。メール送信デーモンはsendmailに限らずなんでも構いません))がインストールされ、外部に向けてメールが送信できる状態である必要があります。

専用メールアドレス

adiaryへの投稿に使用する(投稿を受け取るために使用する)専用のメールアドレスが必要です。普段使用しているメールアドレスと共用することはできません(次々とメールが消えていきます。危険です)。

メールは、pop(apop含む)で処理する方法と、Webサーバと同じサーバで動くメールサーバを利用するか fetchmail+procmail を使いメールから直接起動する方法の2種類に分かれます。

*1 : /usr/sbin/sendmail, /usr/bin/sendmail /usr/lib/sendmail の順で検索します。

*2 : 詳細はレンタルサーバの情報をご確認ください

共通

  • mail.cgi がない場合は mail.cgi.orig をリネームしてください。
  • mail.cgi に実行権限を付けてください(0755)。
  • mail.conf.cgimail.conf.cgi.sample をリネームして生成してください。
  • メール投稿を利用するが、画像アップロードを使用しないという場合は、mail.conf.cgi の <$_call('uploader.conf.cgi')><$_call('adiary.conf.cgi')> と書き直してください。
  • popモード以外(但しcrontab併用pop含む)では __cache/ data/ public/ 以下の全ファイルが、mail.cgi が実行される権限で読み書きできる必要があります。よく分からない人は file=0666/dir=0777 であるか注意してください。*3

*3 : 古いバージョンの adiary ではファイルモードの標準が 0660/0770 になっていたので、その時代から使っている方はそういうファイルが紛れている可能性があります。

popの設定方法

  • レンタルサーバでは通常この方法のみ利用出来ます(レンタルサーバの設定によっては利用出来ません)。
  • これが一番簡単な方法です。

Perlの設定

Perl 5.6系の場合、標準ではNet::POP3モジュールがないとのことですので別途インストールしてください。ActivePerlの場合は5.6系でも入っているそうです(未確認)。

Perl 5.8系では特別な設定は不要です。

adiaryの設定

mail-post@blog.adiary.xx というメールアドレスを利用すると仮定して説明します。まず adiary.conf.cgi を設定します。

<$v.mail_post_address = "mail-post@blog.adiary.xx">
# メールのチェック間隔(秒)
<$v.pop_timer=5*60>	5分間隔
# popログ 兼 チェック間隔記録用ファイル
<$v.pop_log_file="<@data_dir>pop_log.txt">

pop_timer には pop をチェックする感覚を秒数で指定します。難しいことは省略しますが、前にチェックしたときからこの時間だけ過ぎたあと最初にアクセスがあったときに pop による投稿処理が行われます。実際に表示画面に反映されるのは、さらにその次のアクセス以降になります。

crontab が利用できる環境でしたら、このタイマーを使わず crontab で mail.cgi を直接起動してください。

続いて mail.conf.cgi も設定します。細かいことは設定ファイルを読んでください。

<#$Server_name = 'blog.adiary.xx'>
<$Basepath='/adiary/'>

<$mail.pop_mode = 'pop'> 'apop' も指定可能
<$mail.pop_log_file = v.pop_log_file>
<$mail.pop_host='blog.adiary.xx'>
<$mail.pop_user='mail-post'>
<$mail.pop_pass='password'>

特にBasepthは正しく設定してください。adiary.cgiによってBathpathは次のようになります。

URLBasepath
http://www.~.xx/cgi/blog/adiary.cgi/cgi/blog/
http://www.~.xx/blog/adiary.cgi/blog/
http://www.~.xx/adiary.cgi/

エラーの確認

ログファイルにエラーが記録されている場合、pop に失敗している可能性があります。その場合は直接 mail.cgi をブラウザから開いてみてください。エラーメッセージが表示されるはずです。

サーバからの直接起動、fetchmail+procmailなどの利用方法

大抵メールサーバには、特定のメールが来た際に、コマンドを直接呼び出す機能があります。sendmail ならば、aliases に例えば次のように書きます。

blog-post:	"| /home/www/adiary/mail.cgi"

他のメールデーモン(やfetchmail等)での設定方法は各自調べてみてください*4。mail.cgi に対してパイプでヘッダを含めた完全なメールデータを渡してください。

adiary.conf.cgi は次のようになります。

<$v.mail_post_address = "mail-post@blog.adiary.xx">
# popログ 兼 チェック間隔記録用ファイル
<$v.pop_log_file="<@data_dir>pop_log.txt">

pop_timerは設定しないでください。mail.conf.cgi では前半をきちんと設定してください。webサーバから起動されるわけではないため、手動で設定する必要があります。ここの設定を間違えると、メール投稿時は変なRSSが生成される、といった不具合が起きます。

<#$mail.pop_mode = 'pop'> この行は設定してはいけない

最後に mail.cgi の設定ですがVersion1.22以降の方はこの設定は不要です。8行目付近にコメントアウトされているカレントディレクトリ設定を適切に記述してください。

chdir("/home/www/adiary");

サーバ上ディレクトリ(Web上のディレクトリではありません)の絶対パスを指定してください。

これで一通り機能するはずです。

*4 : もし設定解説記事を書かれた場合は、ほかのみなさんのために、この記事へTBを送ってくださると助かります。