ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ありません。

このブログではサイドバーに広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLatexのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

Lighttpdをインストールし、Perlで動くCGI環境をつくる

perlと名のつくパッケージ関連ですでにインストールされているものをまず調べてみた。

aptitude search perlでperlと名のつくパッケージを検索し、パイプライン(|)を使ってその結果をgrepコマンドに渡し、'^i [ A]'という正規表現を使って、すでにインストールされているものだけ一覧表示させた。下がその結果。

$ aptitude search perl | grep '^i [ A]' | more
i   liblocale-gettext-perl          - Perl の国際化用に libc 関数を使用         
i   libtext-charwidth-perl          - 端末上で文字の表示幅を取得                
i   libtext-iconv-perl              - Perl で文字セットを変換                   
i   libtext-wrapi18n-perl           - Text::Wrap の国際化された代替品           
i A libtimedate-perl                - Time and date functions for Perl          
i A perl                            - Larry Wall 作の実用的な抽出とレポート用の 
i   perl-base                       - 最小限の Perl システム                    
i A perl-modules                    - Perl コアモジュール

ちなみに、'^i [ A]'の意味は、^で行頭を表し、行頭にiの文字と空白があり、その次に空白かAの文字がある、ということ。そのつもりだけれども、的確な表現であるかどうかは自信がない。

次に、インストールされているPerlのバージョンを確認しておく。

$ perl -v
This is perl, v5.10.0 built for i486-linux-gnu-thread-multi

Copyright 1987-2007, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

インストールされていたPerlのバージョンは5.10.0だった。

ここで先日やったとおりにLighttpdをaptitudeによってインストールしてみる。

# aptitude update; aptitude install lighttpd

私の環境ではここで新規にインストールされたパッケージは下のとおり。

以下の新規パッケージがインストールされます:
 fam{a} libfam0{a} libterm-readkey-perl{a} libterm-readline-perl-perl{a} lighttpd portmap{a} 
更新: 0 個、新規インストール: 6 個、削除: 0 個、保留: 0 個。
アーカイブ 528kB 中 0B を取得する必要があります。展開後に 1724kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] Y

Lighttpdをインストールした直後の時点では、libterm-readkey-perlとlibterm-readline-perl-perlとが加わり、下のように表示された。

$ aptitude search perl | grep '^i [ A]' | more
i   liblocale-gettext-perl          - Perl の国際化用に libc 関数を使用         
i A libterm-readkey-perl            - A perl module for simple terminal control 
i A libterm-readline-perl-perl      - Perl implementation of Readline libraries 
i   libtext-charwidth-perl          - 端末上で文字の表示幅を取得                
i   libtext-iconv-perl              - Perl で文字セットを変換                   
i   libtext-wrapi18n-perl           - Text::Wrap の国際化された代替品           
i A libtimedate-perl                - Time and date functions for Perl          
i A perl                            - Larry Wall 作の実用的な抽出とレポート用の 
i   perl-base                       - 最小限の Perl システム                    
i A perl-modules                    - Perl コアモジュール

先日やったように、Lighttpdの設定ファイルである/etc/lighttpd/lighttpd.confの中身を若干修正。これは別に必要ないことだけれども、その結果がこれ。

server.bind                = "localhost"

server.bindの行から行頭の#を削除して有効にした。

#include_shell "/usr/share/lighttpd/use-ipv6.pl"

include_shellの行頭に#を挿入してコメントアウトすることで無効にした。

ここから本題であるCGIを動くようにする設定の手順にやっと入る。CGIに関する設定ファイルは/etc/lighttpd/lighttpd.confとは別個にある。/etc/lighttpd/にはconf-availableとconf-enabledという二つのディレクトリがある。CGIを有効にするには、/etc/lighttpd/conf-available/10-cgi.confファイルを/etc/lighttpd/conf-enabled/内にシンボリック・リンクすればよいだけ。

# ln -s /etc/lighttpd/conf-available/10-cgi.conf /etc/lighttpd/conf-enabled/

上記のことを自動的にやってくれるコマンドも、Debian独自かもしれないが、用意されている。それは次のようにする。

# lighty-enable-mod cgi

逆に無効にするには、次のようにする。

# lighty-disable-mod cgi

こうしておいてからLighttpdを起動すればよい。すでに起動している場合はrestartする。

# /etc/init.d/lighttpd start

もしくは…

# /etc/init.d/lighttpd restart

あるいはまた…

# /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf

正常に起動すれば下のように表示されるはず。

# /etc/init.d/lighttpd start
Starting web server: lighttpd.

で、CGIスプリクトがちゃんと動くかどうかを確認する。私は下のような簡単なスクリプトを用意してみた。これを/usr/lib/cgi-bin/内に置く。そしてそのスクリプトファイルに実行権限を与え、ウェブブラウザを起動し、http://localhost/cgi-bin/のそのスクリプトファイルにアクセスすれば動作が確認できる。

#!/usr/bin/perl
print "Content-type: text/html;charset=UTF-8\n\n";
$browser = $ENV{'HTTP_USER_AGENT'};
print "あなたが使っているブラウザは $browser です。";

私の場合はvimを使うので、次のような作業手順になった。

# cd /usr/lib/cgi-bin
# vim browser.cgi

vimを使って上記のCGIスクリプトを記述。テキスト編集モーデオに入るにはiキーを押す。すべて記述し終ったら、:wqと入力することで保存と終了を同時に行って、スクリプトファイルの作成は完了。

次にこのファイルに実行権限を与える。

# chmod +x browser.cgi

これでウェブブラウザを起動してhttp://localhost/cgi-bin/browser.cgiにアクセスすれば、CGIの動作を確認できる。もちろんその際にはLighttpdが稼動している必要がある。

「あなたが使っているブラウザは」何々「 です。」とウェブブラウザに表示されれば正常に動作している証拠。「500 - Internal Server Error」と表示される場合にはスプリクトの内容に誤りがある可能性がある。行末の;を忘れていないかなどを確認する。文字化けする場合にはcharset=UTF-8という記述を忘れなかったか確認すべき。

標準ではドキュメントルートは/var/wwwで、ここにHTMLファイルを置き、cgiスクリプトのソースファイルは/usr/lib/cgi-binに置くことになっているが、これではルートでしか扱えない。各ユーザにもホームページをアップロードできるように設定するために、次のコマンドが用意されている。

# lighty-enable-mod userdir

このコマンドがやっているのは要するに次のことと同じである。

# cp /etc/lighttpd/conf-available/10-userdir.conf /etc/lighttpd/conf-enabled/

無効にするには、次のようにする。

# lighty-disable-mod userdir

コメント

このブログの人気の投稿

Visual Studio 2019にはC++のためのフォームデザイナーがない件

10の補数と9の補数と2の補数と1の補数

LATEXで数式:指数と順列などで使う添数・添字