今回のサーバPC編 備忘録
昔のホームページを使って色々とテストをしていた。
まず、普通にアクセスできることを目指した。
これは割と簡単に掲載できた。
しかし、今は古きカウンタを使っていたのでその部分だけが表示されなかった。
と言う事で今回はPerlを使用したアクセスカウンタのCGIを実行させられる環境を整えることを目標とした。
まず、つまったのが謎のInternal Server Errorで表示できない。
しかし、サンプルスクリプトのprint文でHello Worldを表示させることは出来る。
実行は出来るはずなのに、意味不明だったよ。
cgi-binの下にフォルダを作るのが駄目なのか?とか、指定したフォルダにあるCGIを有効にしてみたりとかやってみた。
色々と試したが、格闘の末、原因が判明した。
まず、エディタで開くと日本語が<86>みたく変な表示になっている。
これは、文字コードがSHIFT-JISによる影響のようで、今日日文字コードはUTF-8だ。
これが悪さをしているという可能性が書かれたサイトを発見。
文字コードを変換するプログラムをダウンロードしてUTF-8にしてみた。
しかし、これだけでは同様にInternal Server Errorになってしまう。
CGIスクリプトの最初にPerlへのパスを指定するのだが、
/usr/bin/perl^M: 誤ったインタプリタです: そのようなファイルやディレクトリはありません
って表示されてしまう。
しかしパスに記載されたとおりの場所にPerlは存在している。
しばらく頭をひねったが、^Mの部分が気になったので調べてみた。
すると改行コードが悪さをしておかしくなっていると言う情報をキャッチ。
WindowsはCR+LFが主流だがLinuxはLFが主流のようだ。
これを変換すべく、サイトに書かれているとおりに、
cat ./a.cgi | tr -d ‘\r’ > ./b.cgi
の様にコマンドを打ってみた。
そして、再度実行。
今度は上手く実行された。
ぷららのホームページサービスは既にCGIのサポートが終了してしまった。
そのため、自前のサーバにCGIを立ててそこで実行できるようにした。
これで昔作ったウェブサイトも問題なく表示できるだろう。
会社のサイトのPHPでハマり、自分のHPのカウンタでハマり、色々と試行錯誤をしてみたが、とりあえず無事にホームページを掲載することに至った。
コメント
駄目だ。いざカウンタを表示しようとするとエラーになる。
ランダム表示とか、数を指定すると表示されるのだけど、記録されたカウントのデータを指定するとエラーになる。
count.cgi?id=indexの様に記述するとエラー
ソースを見ていたら、保存さているデータの読み込みがエラーっぽかった。
open(DAT,”+< $logfile") or error(); ってなってるのを open(DAT,"$logfile") or error(); ってしたら直った。 これも駄目だ。今度はカウンタがインクリメントされない +<の記号は読み書きのモードのようで、多分、ファイルのオープンでしくじっている
原因が判明。
データが読み書きできなかったのはパーミッションではなくSELinuxの設定だったようだ。
chcon -t httpd_sys_script_rw_t data
ってやったら出来た。
この機能が結構曲者で、細かくアクセス権が設定できるのは良いが、イマイチ難しいのだ。
んで、今までの設定は実行権限が与えられていたけど、データファイルに実行ってのは変かと思って読み書きの権限にしてみた。すると問題なく表示され、インクリメントもされる。
今まではhttpd_sys_script_exec_tになっていて、どう見ても実行のための設定っぽい。
SELinuxは難しくて分からん。