frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

Premature end of script headers。

GWは家で、じっくり勉強したい事がある…と思ってたら

肝心のcoLinux上のDebianが、ぶっ壊れた orz

まぁ、どっちみち古いバージョンだったしなぁ…ってーんで

しょうがないから、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=yes

HOSTNAME=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^)/

ふー、やっと開発環境っぽくなってきたぞー。