ろばの穴・別館 Annex

アップル製品への熱い想い & PCガジェット全般のメモ

さくらとXrea、CGI設置でサーバエラー suexec policy violation と End of script output before headers が出た件

ひさびさにまとも?な記事です。久々にまとも?なことをやった証拠でもありますが。

久々に掲示板を設置

わけあって、さくらインターネットのサーバに、掲示フリーソフト

ASKA BBS : KENT-WEB CGI/Perl フリーソフト

を設置することに。

デザインは今どきの人好みじゃないと思うのですが、
スマホ対応
・広告が出ない(少なくともびみょーな広告が出ない)
という条件で探したら、こちらに落ち着きました。

 

CGIエラーではまる

ところが、さくらインターネットCGIを設置してみると、ブラウザでは Hello! とだけ表示され、サーバではこんなエラーが出ていました。

suexec policy violation: see suexec log for more details: /home/../../index.cgi
End of script output before headers: index.cgi

以前 Xrea に設置したときは、特に悩まずすんなり設置できたはずなのに、なんでだろう?と悩みました。
サーバエラーが返ってくるのは、ググるとほぼ同じ原因で、たいていパーミッションの設定ミス。でも、そもそも、さくらインターネットで提供されている「クイックインストール」の中にも KENT-WEB の掲示板があり、それと同じパーミッションにしても、状況は変わらず。

試しに Xrea にも同じことをしても、やっぱり同じ現象になりました。はて、どうしたものか…。と思いつつ、

 

改行コードの違いが原因?

もう一声、ググったところで、以下の記事を見つけました。

MacでCyberduckを使っている人必見・アップロードしたCGIが動かない時に確認する方法 | くま同盟コンピュータLab

Cyberduckではアスキーモード・バイナリモードの転送の設定ができないため、CGIPHPのプログラムを転送する時は予め、サーバーの環境(通常のWebサーバーはUnix系のLF)に合わせて改行コードを変更してから転送すること。

これで解決しました! 私は CotEditor を使っているので、改行コードは簡単に変換できました。2015年の記事ですが、この方にはとても感謝!です。

後から見直してみると、昔 設定した掲示板のバックアップから転送したものはエラーが出なかったのは、改行コードがなぜか「LF」になっていたからのようです。当時の転送ソフトが何だったかは思い出せませんが(Fetchの時代だったか?)以前はアスキーかバイナリーかを拡張子で選別して転送する設定がありましたよね? うん、絶対あった。

それにしても

Mac上でCRで改行されたCGIプログラムもアスキーモードでLinuxへ転送すると自動的に改行コードをLFに変換され、Linux上でも問題なくCGIが動くというわけです。

は知りませんでした。そんなマジックがあったんですね。改行コードがLinux系の LF じゃないと、デフォルトではバイナリーとみなされ転送された結果、改行のないダラダラテキストとなり、CGIとして(今回は Perl)エラーになってしまうのか、と思っておりました。全然わかってなかったようです。

さて、Cyberduck でファイルを上書き転送すると、パーミッションは転送元のものに戻ってしまうので(この設定はどこかにあるのかもしれない)そこはご注意。

今時の人は、MacFTP ソフトは何を使っているんでしょうか。

 

今回もお読みいただき、ありがとうございました。