Premature end of script headers。
GWは家で、じっくり勉強したい事がある…と思ってたら
まぁ、どっちみち古いバージョンだったしなぁ…ってーんで
しょうがないから、CentOSを入れる事にしたものの
XMLinuxさん所のでインストールすると
何故かいろいろエラーが起きて先に進めない。うー。
てな訳で、会社でも使ってるvmwareに乗り換えて
DVDに焼いたCentOS4.6をインストールしたのでした。
それにしても、私のPCはHDの空きが少なくて大変だー。
そんな理由で、ダウンロードした CentOSのimageファイルも
さっさとDVDに焼いたんだけど、そのせいで
以下のvmwareの設定方法探しに、梃子摺るハメに。
・DVDドライブを認識させ、そこからインストーラーが起動し、
C:\CentOS.vmdk に用意した vmdkファイルに書き込むのに必要な設定
ide0:0.present = "TRUE"
ide0:0.fileName = "auto detect"
ide0:0.deviceType = "cdrom-raw"
ide0:0.startConnected = "TRUE"
ide1:0.present = "TRUE"
ide1:0.fileName = "C:\CentOS.vmdk"
ide1:0.mode = "persistent"
ide1:0.deviceType = "disk"
ide0:1.present = "FALSE"
ide1:1.present = "FALSE"
あとは、えーっと、Ethernet の設定が、なんかちょっとバタバタして…
…と、適当に設定したり。ethernet0.present = "TRUE"
ethernet0.connectionType = "nat"
ethernet0.addressType = "generated"
ethernet0.generatedAddress = "00:0c:29:15:e1:f6"
ethernet0.generatedAddressOffset = "0"
で、coLinuxん時に、めちゃくちゃ苦労したNAT関連は
あちこちサイトを見て真似してたら、なんとかなったらしい。←適当
・あちこちサイトを見て真似してやったこと
- Windows XPの「ネットワーク接続」で
「VMware Network Adapter VMnet8」を右クリックして
「状態」の「サポート」タブを確認。 IPアドレスが「192.168.79.1」になってた。
- wmware player インストールすると入る「vmnetcfg.exe」を起動して、「NAT」タブをクリック。
「VMnetホスト」を「VMnet8」にして、「ゲートウェイIPアドレス」見たら
「192.168.79.2」になってるのを確認。
- インストールした CentOS 側のIPは「192.168.79.111」にしよーってーんで
以下のファイルを書き込んだ。
111 なのは、coLinux ん時にも、そうしてたから、なんとなく(笑)
・/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTP=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.79.111
NETMASK=255.255.255.0
GATEWAY=192.168.79.2
・/etc/sysconfig/network
NETWORKING=yesHOSTNAME=localhost.localdomain
GATEWAY=192.168.79.2
てな訳で、とりあえず、apache2も入ってるし、
httpd.conf の設定せななー…と軽く設定して
/home/anigon/cgi-bin/ 配下のスクリプトを
/~anigon/cgi-bin/ のURLで動かそうとしたら、動かない。あれー?
エラーログ見たら「Premature end of script headers」って書いてあって
ググったら有名なエラーらしい事がわかった。
とりあえず、先ずはcgiファイルの改行コードを疑うべきらしいけど
改行コードの問題の場合の解決策であるはずの「#!/usr/bin/perl --」にしても
同じエラーが出続けて、どうやらはてなで書いてあった
/usr/sbin/suexec が問題と判明。
へー。でも、他に解決法はないのかな?と思いつつ
httpd.conf の UserDir ん所に書いてあったURLが気になり、閲覧してみると
その下に「How do I allow each of my user directories to have a cgi-bin directory?」が。
あぁ、まさにこれだよね。
が、2つの解決法が書いてあったものの
If you are using suexec, the first technique will not work because CGI scripts must be stored under the public_html directory.もし suexec 使ってるなら、最初の技は動かないよーん。CGIスクリプトが public_html ディレクトリ配下にあるからねー。ははーん。
と補足されてたので、2番目の方法を使ってみたら、まだ動かない。
仕方ないから、素直に /usr/sbin/suexec の名前を変えて apache再起動してみたら
ちゃんとテストスクリプトが動くようにはなったものの。なんか気持ち悪いなー。
…と思いつつ、さっきの2つの解決法を冷静に見てみると
public_html 配下にCGIスクリプトを置かないとアカンのは、むしろ2番目の方法で
1番目は問題なさそーだったので、httpd.conf に以下を書き足して apache再起動。
<Directory /home/*/cgi-bin>Options FollowSymLinks ExecCGI
SetHandler cgi-script
</Directory>
ScriptAliasMatch ^/~([^/]*)/cgi-bin/(.*) /home/$1/cgi-bin/$2
勿論、さっき名前変えちゃった /usr/sbin/suexec も元の名前に戻して
テストスクリプトを動かしたら…問題なく動きましたぁー(^o^)/
ふー、やっと開発環境っぽくなってきたぞー。