## .qmail ## ./Maildir/ # これはメールを保存しておくために元からある | ./scripts/msgled_on.pl # 点滅させるためのスクリプトを実行
## msgled_on.pl ## #!/usr/bin/perl use Net::Telnet; my($lines, $t, $pass, $adminpass, $rthost); $rthost = '192.168.1.1'; # ルータのアドレス $pass = 'pass'; # ログインパスワード $adminpass = 'adminpass'; # 管理者パスワード $t = new Net::Telnet (-host => "$rthost"); ## Wait for first prompt $t->waitfor('/Password:.*$/'); $t->print("$pass"); $t->waitfor('/>.*$/'); $t->print("administrator"); $t->waitfor('/Password:.*$/'); $t->print("$adminpass"); $t->waitfor('/#.*$/'); $t->print("mail-check go 1"); # メールチェック実行 $t->waitfor('/#.*$/'); $t->print("exit"); # exit せずにクローズしても問題ない $t->waitfor('/>.*$/'); $t->print("exit"); $t->close; exit;
## msgled_off.php ## <?php mb_http_output("SJIS"); $ch = curl_init("http://192.168.1.1/kantan/add/mailchk"); # ルータの点滅クリアページの URL curl_setopt($ch, CURLOPT_USERPWD, "user:pass"); # 認証のユーザ名、パスワード curl_setopt($ch, CURLOPT_POST, 1); # POSTする curl_setopt($ch, CURLOPT_POSTFIELDS, "MAIL_SERVER=1&ARRIVE_OK=OK"); # POSTするデータ curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); # 受信データを変数に $result = curl_exec($ch); # 実行。受信データを $result に。今回は使用せず curl_close($ch); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Refresh" content="2;URL=./"> <title>MSGランプをオフ</title> </head> <body> <b>MSGランプの点滅を解除しました</b><p> <a href="./">戻る</a> </body> </html>
○ Linux kernel 2.4.10 → 2.4.12
○ vgetty 撃沈
前々からインストはしてあったけどまともにセッティングせず。使えるといろいろ便利だな〜、と思い腰を上げた。とりあえずバージョンをあげようと、1.1.26-6 の RPM を拾ってきてアップグレード。コンフィグを自分の環境に合った内容に変えてまずmgetty の動作確認。うん、問題無し。次が本命のvoice 部分。設定はそれほど難しく無いのでさくっと設定。vgetty を立ち上げる。む〜、モデムにアクセスはしてるが起動にこける。ログを追うとモデムの自動判定に失敗してるらしい。詳細なログを取り確認してみるといくつかの ATコマンドに対しモデムがエラーを返している。そのコマンド自体に対応してない模様。仕方ないのでコンフィグなんかでモデムを固定にしようとしたのだが、そんな設定がないようだ。探し方が悪かったのかな?じゃあ、ってことでソースを拾い認識部分をパスカットしてRockwell モデムと強制的に認識するように変更。こういう芸当は Windows ではなかなか難しい(^^;
ソースを書き換え、バイナリパッケージを作成、問題なくビルド。そいつをインストして動かして見るが、やはりダメ。今度は着信もないのにぴぃーとか鳴ったりしてる…。ログを追う気力も尽きたんで、今回は完敗のまま終了。
○ xntp のインストール
時刻修正といえばやはり NTP。今までもルータと Windowsマシンは NTPクライアントを使って時刻修正はしてたん。一番最初ルータ導入時に、ルータがネット上のサーバにアクセスして、PCからはルータを参照すればいいかな、と思っていたんだけど、ルータに NTPサーバ/フォワード機能がないことが発覚(T_T)。仕方ないのでそれぞれ個別にせざるを得なかったのだ。その後、サーバが常時稼動になったわけだけど、最初は完全自分専用だったので時刻修正に関してはしていなかった。最近はいろいろな使われ方をしてるし、ワーム侵入や不正アクセスなんかといういざという時にログの時間がズレていては何の役にも立たない。そんなわけで ntp をきちんと導入して時刻修正を行い、さらに LAN内のローカル NTPサーバとしても使おう、というわけなん。
まず、パッケージを拾ってきてインストール。ntp でも出来なくはないのけど面倒なので xntp にする。
# rpm -ivh xntp3-5.93-15.i386.rpm次にネット上の NTPサーバと同期を行う設定。今回参照するのは高精度な JSTを取得できる 共同試行サービス のサーバ。利用できるサーバは3台あるので、その中から ntp3.jst.mfeed.ad.jp(210.173.160.87)を選ぶ。一番使われてなさそう(=遅延、ばらつきが小さくなる)という根拠の無い理由(笑)もちろん複数台のサーバを指定して精度を高めることも出来るけど、そこまでは拘らないしトラフィックを最小限に、ということで。
----- FileName ntp.conf ----- … #server 127.127.1.0 # local clock # コメントアウトしておく server 210.173.160.87 … ------ end of ntp.conf ------サービスを起動。
# /sbin/service xntpd start無事起動。ntpq コマンドを使って同期が行われているかを確認してみよう。
# /usr/sbin/ntpq -p remote refid st t when poll reach delay offset disp ============================================================================== *ntp3.jst.mfeed. nttpf-isdn0.crl 2 u 247 256 377 76.42 -0.464 4.03うんうん、OK。行の先頭にアスタリスク(*)が付いていれば同期状態ということらしい。起動してから同期完了までは数分〜10分程度はかかるよん。続いて Winマシンとルータのクライアント設定を変更してちゃんと取得できるか確認。うん、きちんと取得できた。最後に起動時に立ちあがるようにしておかないとね。
# /sbin/chkconfig --level 345 xntpd onよし、これで完了!あと、マシンをリブートした時なんかはハードウェアクロックに合わせた時間に戻ってしまうんで、root になり /sbin/clock -w としとけばハードウェアの方も書き換わるので誤差が小さくなるっと。
○ PHP 4.0.6 → 4.0.8
前回はバイナリパッケージのビルドに失敗したので今回は頑張ってみた。まず、ログを調べて見れば何か分かるかもと思い、調べて見ると単にメッセージだけでは分からなかったきちんとした原因が分かったのだ。コンパイルオプションの -lfreetype でエラーつまり、freetype ライブラリが見つからないと怒られていたん。ん〜、freetype はきちんとインストールしたのになぁ、と思ったが現にエラーになってるから仕方ないか…。freetype、freetype と関係がありげっぽい gd、あと一応 Cライブラリの新しい RPM を拾ってきてアップグレード。再度試してみる。上手くいってくれ…、おぉ、通ったぞ!その後ついでに日本語ドキュメントをパッケージに加えてみたりして何度か SPECファイルを書きなおして念願の自前バイナリパッケージがビルドされた♪これだけ大きなパッケージを自前でビルドしたのは初めてなんできちんと出来ているのかがすごく心配。インストしてみる。インストも OK。PHP をロードし直すために Apache を再起動…。おぉ、上がったぞ。念の為にログを見てみよう。
PHP Warning: Function registration failed - duplicate name - pg_connect in Unknown on line 0こんなのが何行か吐かれてる。ん〜、名前の重複、ってことはどこかが何度もロードされてるのかな?とりあえずエラーの吐かれる pgモジュールを使ってるスクリプトを表示して見る。問題ないらしい。それならとりえず良しとするか。原因解明はまた今度(笑)
<?php mb_http_output("SJIS"); # 以降出力をシフトJISにする … ?> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> # シフトJISで表示させる …ブラウザから見ると…化けた!EUC のままだ…。う〜む。調べてみると php.ini をきちんと設定しておかないとダメっぽい。なんで設定しておく。
----- FileName /etc/php.ini ----- … default_charset = EUC-JP # デフォルトの文字コードは EUC mbstring.internal_encoding = EUC-JP # スクリプトは EUC で設置 mbstring.http_input = auto # フォームからの送信データなどの入力は自動判定 mbstring.http_output = pass # ブラウザへ渡す出力はそのまま mbstring.detect_order = auto # 文字コードを判定する順番は自動 mbstring.substitute_character = none # 適用されている文字コードに無い文字は表示しない output_handler = mb_output_handler # エンコードに使うハンドラを設定 ------ end of php.ini ------mbstring.internal_encoding に指定できるコードは数種類に限られるので注意。シフトJIS等その他の文字コードの場合スクリプトが正しく実行できない可能性があるんで要注意。Linux の場合、内部の文字コードは EUCに統一して(DB連携の場合特に)出力するときに必要があればシフトJISにエンコードする、という手法が一番効率、保守性がいいん。さて、変更を保存して Apache を再起動。スクリプトをリロードしてみると、今度はちゃんとエンコードされた♪やっと WebDBをメインにした DBシステムを本格的に設計、運用することが出来るよ!