玄箱Pro、直します。

超初心者が、玄箱PROでLinuxを勉強する無謀なブログです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
別窓 | スポンサー広告
∧top | under∨

標準ファームにlighttpd(1)

いろいろと後回しにしていた「理解すべき項目」たちをやっつけていくために、また玄箱Proを標準ファーム・フラッシュブートに戻し、日経Linuxの2007.6月号の特集3「玄箱PROを堪能する/Part2 高速Webサーバー「lighttpd」を動作させる」を試してみました。
米田さんの記事です。

概略として

・標準ファーム・フラッシュブートのままで導入
・シリアルコンソールは必要なし
・lighttpdをHDDに展開し、/にシンボリック・リンクを作成
・ソースファイル一式をアーカイブしたファイル「lighttpd_src.tar.gz」が本誌付録にあり、それを使用


という内容です。
誌面を見ながら順番通りに導入しますので、失敗はありません。誰でもできます。

ひとまず導入の流れを理解するために、まずはこの誌面通りにやってみます。
今回の自分ポイントは

・chrootの理解
・ソースからビルドする方法

などです。

1.玄箱PROをネットに接続する

/etc/netinfoでIPアドレスなどをスタティックに設定します。
私はルータで玄箱Proに固定IPを払い出しているのでこの項目は飛ばしました。


2.開発環境を導入する

玄箱Pro付属CD-ROMから開発環境を導入します。
要するに製品仕様書30P「Appendix B:開発環境の構築方法」をほぼそのまま実行します。

まずは背面のリセットボタンを長押ししてHDDのフォーマットからです。
フォーマットされたHDDは/mnt/disk1でマウントされますので、そこにCD-ROMの開発環境である
hddrootfs.tar.gz
をコピーします。
さらに、開発環境の導入先として/mnt/disk1/develディレクトリを用意し、ここに先ほどの開発環境を展開します。

~ # mkdir /mnt/disk1/devel
~ # tar xvzf /mnt/disk1/hddrootfs.tar.gz -C /mnt/disk1/devel


この後ログで8490行、ひたすら待ちます。
この時点で、/mnt/disk1/devel以下に開発環境が整い、chrootすることで/以下と同じように構築することができる、ということですよね・・。


3.ソースのビルドとインストール

CGIスクリプト「Perl」、FastCGIのライブラリ「fcgi」およびlighttpd本体をソースからインストールします。FastCGIを利用するために「ExtUtils-Embed」および「FCGI」というPerlのモジュールも必要です。これら必要なソース・ファイル一式をアーカイブしたファイル(lighttpd_src.tar.gz)を本誌付録メディアに収録しておきました。先ほどと同じく、玄箱PROの/mnt/disk1にコピーした後、展開します。


とのことなので、その通りにします。

/mnt/disk1 # ls
devel hddrootfs.tar.gz lighttpd_src.tar.gz
/mnt/disk1 # tar xvzf /mnt/disk1/lighttpd_src.tar.gz -C /mnt/disk1/devel/usr/


約6500行のログが生成されます。

ここからがchrootの出番なんですが、

/optにlighttpdなど一式をインストールする設定で進めます。


と本誌にも説明があるように、/mnt/disk1/develが仮想的に/になり、ビルドされるソース一式にも「/optに自分たちは構築されるんだ」と認識させるように振舞う感じでしょうか。

/mnt/disk1 # chroot /mnt/disk1/devel


先ほど展開した開発環境は/usr/srcにありますので、Perlのインストールを/usr/src以下で行います。

/ # cd /usr/src/perl-5.8.8/
/usr/src/perl-5.8.8 # ./configure.gnu -Dprefix=/opt
/usr/src/perl-5.8.8 # make
/usr/src/perl-5.8.8 # make test
/usr/src/perl-5.8.8 # make install


今は詳しく触れませんが、この./configureについている様々なオプションの意味もよくわかっていません。
.gnuとかDprefixのDとか。
全然調べてもいないので、また後で調べます。とにかく今は書かれている通りに進めます。

次にFastCGIモジュールをインストールします。

/usr/src/perl-5.8.8 # cd /usr/src/FCGI-0.67
/usr/src/FCGI-0.67 # /opt/bin/perl Makefile.PL
/usr/src/FCGI-0.67 # make
/usr/src/FCGI-0.67 # make install


続いてFastCGIのディスパッチャで使用するPerlモジュールEmbed::PresistentとFastCGIのインストールです。

/usr/src/FCGI-0.67 # cd /usr/src/ExtUtils-Embed-1.14
/usr/src/ExtUtils-Embed-1.14 # /opt/bin/perl Makefile.PL
/usr/src/ExtUtils-Embed-1.14 # make install
/usr/src/ExtUtils-Embed-1.14 # cd /usr/src/fcgi-2.4.0
/usr/src/fcgi-2.4.0 # ./configure --prefix=/opt
/usr/src/fcgi-2.4.0 # make
/usr/src/fcgi-2.4.0 # make install


そしてlighttpd本体をインストールし、chroot環境を抜けます。

/usr/src/fcgi-2.4.0 # cd /usr/src/lighttpd-1.4.13
/usr/src/lighttpd-1.4.13 # ./configure --prefix=/opt
/usr/src/lighttpd-1.4.13 # make
/usr/src/lighttpd-1.4.13 # make install
/usr/src/lighttpd-1.4.13 # exit


これでひとまず必要なものを一式詰め込んだ状態です。


4.lighttpdの設定

仮想/optに展開したものを実際の/optに配置します。
本誌では玄箱Proの少ないフラッシュメモリに配置することをあまり推奨せず、/mnt/disk1/devel/optのシンボリック・リンクを/に作成する方法を一番に挙げています。
事実上HDD上でlighttpdは動作しているわけですね。

/mnt/disk1 # ln -s /mnt/disk1/devel/opt /



5.設定ファイルを作成する

設定ファイル「lighttpd.conf」も付録にありましたので、これをサクっと/opt/etc以下に置きます。
ここではデフォルトで公開用ディレクトリは/mnt/disk1/htdocsになっているようです。
確かにこれなら容量に余裕があり、尚且つ更新作業時などでも簡単に共有フォルダへWindowsからでもアクセスできかなり便利ですよね。
では、その/mnt/disk1/htdocsを作成します。

/mnt/disk1 # mkdir /mnt/disk1/htdocs
/mnt/disk1 # chmod 777 /mnt/id disk1/htdocs


ここで、本誌に以下の解説があります。

FastCGIの設定には、CGIのスクリプトごとに設定する方法と、すべてのCGIをFastCGIとして動作させる方法があります。前者の方がパフォーマンスは高くなりますが、後者の方が、Apache HTTP Serverのmod_perlに近い汎用性が得られるというメリットがあります。今回は後者を試すことにします。


そして、この「後者」の場合、perlで記述されたCGIを呼び出すディスパッチャが必要になるそうです。
それが/opt/bin/dispatch.fcgiとして以下の内容。

#!/opt/bin/perl
use strict;
use CGI::Fast;
use Embed::Persistent;
{
  my $p = Embed::Persistent->new();
  while (new CGI::Fast) {
    my $filename = $ENV{SCRIPT_FILENAME};
    my $package = $p->valid_package_name($filename);
    my $mtime;
    if ($p->cached($filename, $package, \$mtime)) {
      eval {$package->handler;};
    } else {
      $p->eval_file($ENV{SCRIPT_FILENAME});
    }
  }
}


そして所有者と所有グループをlighttpdの実行ユーザーapache、同グループであるapacheに変え、実行権限を付けておきます。

/mnt/disk1/devel/opt/bin # chmod +x /opt/bin/dispatch.fcgi
/mnt/disk1/devel/opt/bin # chown apache:apache /opt/bin/dispatch.fcgi


導入自体はこれで完了です。
その後、Busyboxのhttpdを止め、lighttpdを起動させます。
あとはchmodでa+xをつけたテスト.cgiファイルで実験して動作確認です。

/mnt/disk1/devel/opt/bin # /etc/init.d/httpd.sh stop
/mnt/disk1/devel/opt/bin # /opt/sbin/lighttpd -f /opt/etc/lighttpd.conf


自動起動の設定は/etc/init.d/httpd.shを以下のように書き換えます。

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin:/opt/sbin:

HTTPD=/opt/sbin/lighttpd
CONF=/opt/etc/lighttpd.conf
PIDFILE=/var/run/lighttpd.pid

HTTPD_START(){
    if [ -f $CONF ] ; then
        $HTTPD -f $CONF
    fi
}

HTTPD_STOP(){
    kill `cat $PIDFILE`
}

HTTPD_RESTART(){
    HTTPD_STOP
    sleep 1
    HTTPD_START
}

case $1 in
start)
    HTTPD_START
    ;;
stop)
    HTTPD_STOP
    ;;
restart)
    HTTPD_RESTART
    ;;
*)
    ;;
esac



6.スワップ領域を作っておこう

FastCGIを利用する場合、perlのプロセスが常駐するため、メモリ不足を解消する必要があります。
HDD上に容量256MBのスワップ・ファイル(swapfile)を作成し、mkswap、swaponコマンドを使います。

~ # dd if=/dev/zero of=/mnt/disk1/swapfile bs=1024 count=262144
~ # mkswap /mnt/disk1/swapfile
~ # chown root:root /mnt/disk1/swapfile
~ # chmod 600 /mnt/disk1/swapfile
~ # swapon /mnt/disk1/swapfile


/etc/init.d/rcSファイルの末尾にswaponコマンドを追加すればスワップ・ファイルが起動時に有効になります。


以上が私が日経Linuxの特集を見ながら実行した作業です。
順調にlighttpdは動作しました。

今回の作業で疑問に思ったことを挙げておいて、次回までになんとか解決するようにします。
そして次回は付録のデータを一切使わずに同じ内容を再現してみようかと思います。
スポンサーサイト
別窓 | 標準ファームで遊ぶ | コメント:0 | トラックバック:0
∧top | under∨
<<ビルド練習で四苦八苦(1)~wget編~ | 玄箱Pro、直します。 | メモ>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

トラックバックURL

FC2ブログユーザー専用トラックバックURLはこちら
∧top | under∨
| 玄箱Pro、直します。 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。