プログラミングの最近のブログ記事

まともなWebプログラムであればユーザ認証処理は必須である。ApacheのBasic認証に任せても良いが、ログアウトができなかったり、Webプログラム上でユーザ管理ができなかったりといろいろいろ不満がある。Look&FeelをそろえるためにもWebプログラムに実装したいのだが、以前perlでCGI::Sessionをつかってごりごり作ったときはけこう面倒だった。ところがRuby on Railsでは、プラグインを使ってとても簡単に認証機能を追加することができる。

CentOS5でRuby on Rails 2を使う

ちょっとしたWebアプリを作るとき、いままでPerlとPostgreSQLでしこしこ作りこんでいたが、さすがに面倒になってきた。私はプログラムの専門家ではないので、最小限の時間と勉強でそこそこ動くものが出来る手段が嬉しい。というわけで過去にちょっとだけ触ったことのあるRuby on Railsに再入門することにした。プラットフォームはCentOS5.2 on Xen。環境を整えるだけならコマンド数個打つだけでできるだろうとタカをくくっていたのだが、意外や意外、インストールに妙に手間取ってしまった。

@niftyのダイナミックDNSを利用している。クライアントとしてはDiCE for Linuxを使用していたが、デーモンとして常時起動していてCPU負荷常に消費している。また設定する時の文字コードがいまどきEUC固定で不満があった。

niftyのダイナミックDNSサービスはそもそもブラウザで指定ページを認証するだけで更新できるので、perlで簡単にクライアントを作れそうだ。

動きを追ってみる。https://www.atnifty.com/ddns/p13.phpにアクセスするとIPアドレスとvalidというコードを渡される。validはたぶんIPアドレスのハッシュか何かかな。このIPアドレスを以前に更新した際に記録しておいた手元のアドレスと比較して、違っていた場合にhttps://gateway.nifty.com/service/g-way/ddns/nifty/secure/config/update.phpに上記のIPアドレスとvalidを渡すことによってダイナミックDNSを更新する。その際に@nifty IDとパスワードによるベーシック認証が行われる。

これを元にperlスクリプトを作る。はじめはHTTPクライアント機能もperlで作るつもりだったが、wgetを呼び出して簡単に済ますことにした。出来たのがこちら

このスクリプトを好きな場所(ここでは/usr/local/bin/ddns4nifty/)に置く。IPアドレスを記録しておくファイルは、フルパスでスクリプト内に記述する。@nifty IDとパスワードもハードコーディングする。

次にこれを、cronで定期的に実行するようにする。実行間隔は10分くらいがいいかな。

[root@www ~]# vi /etc/cron.d/ddns4nifty
*/10 * * * * root /usr/bin/perl /usr/local/bin/ddns4nifty/ddns4nifty.pl

何度かルータを再起動したりしてIPを強制的に変えてみたが、ちゃんと切り替わるようだ。ただcronが回るのに最大で10分。ダイナミックDNSを更新しても数分はキャッシュが残っているみたいなので、最悪20分くらいはサーバにアクセスできないこともありうる。これはダイナミックDNSの宿命か。

このスクリプトは使用、改変、再配布など自由に行っていただいてかまわないが、一切の動作保障や発生した損失の補償をしない。なお、私のプログラミング技術は入門者レベルなので、利用を検討される方はその点も十分にご注意いただきたい。

ネットワーク屋で疎通試験、障害試験をする人は、ダウンタイムを計測するのにExpingを使っている人が多いと思う。複数のあて先を設定できたり、カラーアイコンで状態がわかったり、ログを保存できたりと実に便利だ。

しかし障害試験などでダウンタイム測りたい場合は、あまり便利ではない。別途ストップウォッチソフトで測るか、ExPingに表示されるタイムスタンプを自分で引き算することになる。これは大量の試験をするときには結構大変だし、効率がわるい。

そこで、非常に簡単なスクリプトだが特定のあて先にpingをうち、アップタイム、ダウンタイムを表示するものを作った。これまで何回か使ったが、特に問題なく使えるようだ。

pinger.pl

Windows+Cygwin、Windows+Active Perl、Linuxで動いている。特にパッケージの追加は必要ないが、Linuxではrootで使用する必要がある。

使い方はこんなかんじ。

[root@test ishii]# /usr/bin/perl pinger.pl www.grandarbre.net
www.grandarbre.net is up for 10 seconds
www.grandarbre.net is down for 5 seconds ←ケーブルを抜いたのでダウン
www.grandarbre.net is up for 10 seconds ←ケーブルを戻したのでアップ