ホームページ玄箱をMacで>その3・ブラウザから操作編

その3・ブラウザから操作編

目次
 目的と経緯

 玄箱の操作は、これまでターミナルからのtelnet(ssh)接続で行ってきましたが、コマンドのタイプミスを避けたい(というか、打つのが面倒くさい)ため、定型処理はGUIベースにしたいと思うようになりました。

 DebianにはApache2とPHP4が用意されているので、これらを使ってブラウザから操作出来るよう、試行してみました。


 Apache2とPHP4のインストール

 Apache2とPHP4は、実は最初のセットアップ時に既にインストールしていたので、ここでは必要無いのですが、大分時間が経っていることもあって、念のため、再インストールしておきました。
# aptitude update
# aptitude install apache2

# aptitude update
# aptitude install php4
 また、以下でexpectが必要になるので、これもインストールしておきます。
# aptitude update
# aptitude install expect

 Apache2の設定

 デフォルトでは、ブラウザで玄箱のIPアドレスを指定すると「あなたの予想に反して〜」というページが表示されます。
 これを、以下のサイトを参考にカスタマイズしました。

 参考サイト(1):日々の試行と実験: Debian sarge apache2 webdav (aptitude install)

 これで、/var/wwwがデフォルトになり、ここにindex.htmlを置くと、それが表示されるようになります。

 ページの更新は、macで作ってFTPソフトで転送する、という通常のホームページ作成手法がそのまま使えます。
(なお、玄箱上で再編集することも考えると、改行コードは(かつてのmac標準である)CRではなく、LFにした方がいいようです。)


 玄箱の情報を表示してみる

 まずはPHPの学習を兼ねて、トップページに玄箱の情報を表示してみました。



 KURO-BOX情報は、PHPのexecコマンドで/sbin/ifconfigを呼び出して、結果を整形したものです。(ただし、名称は固定、現在時刻はtime()を使用)
 DISK使用状況は、PHPのexecコマンドでdfを呼び出して、結果を整形したものです。
 なお、PHPを使用するため、トップページはindex.htmlではなくindex.phpになっています。

 上記ページのサンプル PHP ソースコードはこちらから。


 ユーザを切り替えてコマンド実行する

 前項で取得したような情報は、全てのユーザが引き出せるものであるため、ブラウザからexecする際のユーザである「www-data」でも何ら支障はないのですが、実行したいコマンドによっては、ユーザを切り替える(場合によってはrootになる)必要があります。
 やり方は色々あるようですが、ここではexpectを用いることにしました。

 参考サイト(2):Manpage of EXPECT

 例えば、hoge.phpの内容を

<?php
exec("./hoge.exp",$res,$status);
print_r($res);
print("status: ".$status);
?>

とし、hoge.exp(あらかじめパーミッションを変更して誰でも実行可能にしておく)の内容を

#!/usr/bin/expect -f
spawn su - root -c whoami
expect "Password:"
send "rootPassword\r"
expect EOF

とすると、rootという結果が返ってくるので、ユーザの切り替えが可能であることが分かります。
警告:上記例では、誰でも容易にrootになれてしまいますので、運用方法によっては重大なセキュリティ上の問題が発生する可能性があります。適用にあたっては、この点をあらかじめ十分考慮しておく必要があります。
 以上を踏まえて、まず動かそうと思ったのは、前章で導入したRDServiceです。
 必要な処理としては、FTPサービスの停止/再開とRDServiceの起動/停止が考えられます。
 FTPサービスの停止/再開は上記例の方式で実現できましたが、問題はRDServiceの起動です。

 RDServiceは起動するとアイドル状態に入る訳ですが、このようなソフトは停止する迄ステータスメッセージ等が返ってこない、という状態に陥ります。(バックグラウンドで起動しても同様。ただし、詳細は要調査。)
 まぁ、メッセージ等は必ずしも必要ではないので、このままでもいいような気もしますが、もう少し調べてみようと思っています。

 RDServiceの停止は、psの結果からptyのプロセス(の中のspawnが発行した最初のプロセス)を見つけてkillしてやると、関連するJAVA関連のプロセス迄ひっくるめて、停止させることができます。(バックグラウンド起動だと、関連プロセス迄は切れないので、要注意。)


 トラブルシューティング

 <expectが動かない>

 expectは別パッケージなので、自分で指定しないと入りません。
 Apache2とPHP4のインストールの項を参照して下さい。

 <spawnが動かない>

 ウチでは当初、一般ユーザ(ブラウザからexecする時のユーザである「www-data」も含む)でspawnを実行させようとすると「The system has no more ptys. ...」というメッセージが出て動きませんでした。
 suでrootになると実行できるので、モジュールが足りないとかの問題ではなく、設定の問題と推測されました。
 あれこれ調べてみると、どうも/etc/fstabの内容を、
 変更前: none /dev/pts devpts gid=5,mode=20 0 0
 変更後: none /dev/pts devpts gid=5,mode=620 0 0
としてやると動きそうだ、ということが分かったので変更してみたところ、一般ユーザでもspawnが実行できるようになりました。
 ただ、これが何を意味するのかは正しく理解できていないため、本当にこれで良いのかは要調査ですが…


 お世話になったサイト

 貴重な情報をご提供頂いている皆様に、お礼申し上げます。(以下、順不同)

 参考サイト(1):日々の試行と実験: Debian sarge apache2 webdav (aptitude install)
 参考サイト(2):Manpage of EXPECT


 更新履歴

 2006.05.08 新規作成


[Home]  [MacSoft]  [Donation]  [History]