5月 132009
 

前回書いた続編と言うか・・。

一応、apache を Proxy として利用できるようになり、コメントで hagyさん から、mod_mem_disk と mod_mem_cache の両方を書いたときの動作確認してよー。って言われたので、そのテストをしようと思った矢先・・。

テスト環境では、キャッシュしようと思っていたデータがベーシック認証の中にあったのでありました。つまり、キャッシュしてはいけないデータなので apache Proxy はデータをキャッシュしてくれないんですね・・。

フリーソフトウェアのほとんどの Proxy サーバはベーシック認証やダイジェスト認証の中にあるコンテンツについて、セキュリティの観点によりキャッシュサーバでは絶対にキャッシュしない。と言うポリシーのもとで作成されているみたいです。apache の場合、ドキュメントにちゃんと書いてあります。

http://httpd.apache.org/docs/2.2/ja/mod/mod_cache.html#cacheignorecachecontrol

NetApp 社の NetCache もしかりですが、設定が用意されているみたいで on no-cache とか on uncond-cache がそれにあたります(当然、設定 GUI からもできるとは思いますが;-)。

さてと。どーすんべなぁ。とか思って、一応 apache のソースを眺めたらわりと簡単にソース修正できそうだったので変更してしまいました。以下はそのパッチです。

--- modules/cache/mod_cache.c.ORG       2009-05-02 10:40:03.000000000 +0900
+++ modules/cache/mod_cache.c   2009-05-02 10:39:25.000000000 +0900
@@ -95,9 +95,12 @@
/* First things first - does the request allow us to return
* cached information at all? If not, just decline the request.
*/
+
+    /* Authorization pass.
if (auth) {
return DECLINED;
}
+    */
/* * Try to serve this request from the cache.

 
認証を通った後の判断を調べてリターンしている所をそっくりコメントアウトするパッチです。これにより、ベーシック認証通過後のコンテンツもキャッシュすることができるようになります。

ふぅ。これでキャッシュ用 Proxy サーバはなんとかでき上がりました。では続いて懸案であった、mod_mem_disk と mod_mem_cache の両方を書いたときの動作確認をしたいと思います。

が・・。どう言うわけか mod_mem_cache の設定を書いていると httpd が Segmentation fault(11) してしまいます(今回は prefork で make したので一個のプロセスが Segmentation fault を起こすのみで、全ての httpd は死んではいないため port:80 では LISTEN が可能状態です)。一番最初、キャッシュしていない状態でアクセスがあった場合はマスターサーバから、仮に「A」と言うコンテンツを取ってきてキャッシュして、そしてクライアントに返します。

次に別のクライアントがコンテンツ「A」を取りに来たとき、httpd がこの時に Segmentation fault(11) で落ちてしまう。と言う状態に陥ったのでありました。なので、コンテンツは DISK 上(もしくはメモリ上)に溜まるけど、利用されることは無い。と言う感じですね。

#ちなみに mod_mem_cache で溜まったキャッシュの情報ってどうやって確認するのだろう・・。メモリ利用量のみで判断するのかなぁ?

mod_mem_cache を削除して mod_mem_disk の設定のみを書いたときは正しくキャッシュできて、 Segmentation fault(11) もせず、キャッシュされたデータも再利用できることを確認しました。なので運用的にはキャッシュデータは DISK のみに保存する。と言う方向で行きたいと思います。

ごめんねー。hagyさん。

それにしても、色々詳しく調べるまで、ベーシック認証配下のコンテンツはキャッシュしない。と言うのを知らなかったなぁ。まぁ、考えてみれば当たり前だよなー。認証の奥にある情報が実は Proxy キャッシュサーバの中に残っていた。なんてのは怖いことだもんなぁ。

4月 302009
 

iPhne3G/iPod Touch の App に産経新聞があるのだけど「無料で毎朝産経新聞が読めますよ。」って触れ込み、僕も毎朝ダウンロードして毎朝電車の中で読んでいます。

ここ一ヶ月で新聞を読んでいて気がついたこと。それはレコード会社の全面広告が二枚入るようになって、しかもフルカラー。ページの一覧を見たときに目立つ目立つ。レコード会社は実際の新聞を読む人の他に iPhne3G/iPod Touch ユーザをもターゲットにしているんだなぁ。と言う感じが見て取れます。

で、僕が新聞社の社員だったとして考えたソリューション。産経新聞の広告の中に URL があったらそこをタップするとブラウザに飛ばしてその URL を表示できるようにするとか、レコード会社の広告にある URL の場合、iTMS でダウンロードできる楽曲であるならそのまま購入の画面を表示するとかできたらグーかも。

僕は多分、曲は買わないとは思うのだけど、広告主が iPhne3G/iPod Touch ユーザをターゲットとして載せる機会が増えると思ったのね。アブリはずっと無料にしておいて、広告収入を増やす。「うちの新聞に広告載せればこんな付加価値が付きますよー。」みたに営業が動けば良いのね。で、アフリエイトみたいなのも付加して「ね。新聞に広告載せたらこんなにアクセスあったでしょー。」みたいになるし。

そんな感じだとみんなが幸せになれそうな気がします。

ちなみに、この間 iPhone3G 買った人にアンケートが届いたので僕はやってみたのだけど、その中に「日経新聞が2,000yenだったら買うか?」ってのがあった。機能的は産経新聞のと一緒なので、僕は「買わない。」を選択したけど・・。それにしても 日経 は横柄だな。って思った。まぁ、新聞のランクとしては日経と産経では全然違うけど、それにしても横柄だろ。日経。とか思った。もう一回言う?;-)

で、新聞 App が有料になったとしたらどんなものが欲しいか。当日の新聞が読めるのは当然として、一番は過去記事表示機能かなぁ。例えば昨日の新聞小説を読み逃した。状態になったら新聞の紙面をタップしたら過去のその記事が一覧が表示されて見逃した日を選択するとダウンロードして表示してくれる。とかね。

後、新聞の一部分だけ毎日、新聞とは別に保持してくれるとか。例えば新聞見出しの下の部分 10cm 四方を毎日保存していつでも見たいときに呼び出せるとか。株のページなんかで使えそうなワザかなぁ。

新聞の切り抜きが商売になるので、それ位やってくれたら有料でも良いような気がします。あ、著作権とか考慮してないけど、自社の新聞なんだからきっとできるよねぇ?それ位。

とまぁ、今回は iPhone/iPod Touch 上の一個の App に付いてイヤに熱く語ってしまいましたが、まぁ、それはそれでよしとしてください(^^;;。

4月 242009
 

前回は、mrtg が実質的に IPv6 に対応していないねぇ。って所で話が終わったのですが、そこから進展がちょっとあったので書いてみたいと思います。

net-snmp に対して IPv6 で接続したい人は前の記事を先に読んで 、その後でこの記事を読んでください。

さてと。物語りは前回からの続きなのですが、mrtg の config ファイルを記述した時、 Target に IPv6 を記述した場合 ifIndex でしかトラフィック情報が取得できない。と言う所で終わりました。

確かに、何度試してもダメだったので、debug オプションを有効にしてログを見つつソースコードなどを眺めていたら問題点を発見しました。最近の ports-current から mrtg をインストールするとmrtg-2.16.2,1 がインストールされるのですが、その時に /usr/local/lib/perl5/site_perl/5.8.9/Net_SNMP_util.pm も併せてインストールされます。こいつの中で Net::SNMP を呼んでいる時に -domain で udp/IPv4 しかセットしていないみたいなので udp/IPv6 をセットするようにしたら IPv6 でも一応動くようになりました。

修正分のパッチはこの辺りに置いておきます

このパッチを適用することにより、FQDN で問い合わせした時は ifDescr でも値が取れる事を確認できました。以下におさらいしてみることにしましょう。

・IPv6 で SNMP が取得できるもの

Target[dir_re1]: 2:public@taro6.running-dog.net:
Target[dir_re1]: \re1:public@taro6.running-dog.net:
Target[dir_re1]: 2:public@[2001:200:161:14cc::1:1]:161:

 
taro6.running-dog.net は DNS に IPv6 のみのアドレスが登録されています。

この設定では IPv6 では ifIndex と ifDescr でトラフィック量を取得することができました。

・取得できないもの

MAC アドレス指定(FQDN・IPv6 共に)
ifDescr 指定での IPv6 アドレスを記述した場合

とまぁ、こんな感じで ifDescr で取得できるようになったのでヨシとしておきましょう。それにしても DNS は必須になってしまうのですが・・。

後、net-snmp って –enable-ipv6 で make しても snmpwalk は IPv6 に対応していないのねぇ。DNS に IPv6 のみ登録してある FQDN を指定しても「そんなアドレス知らん。」とか言われます。/etc/hosts に書いてもダメ。snmpd が IPv6 に対応しているだけにもったいないことです・・。

さてと。ここまでは net-snmp と mrtg のお話で、前回の続きの完結編。と言う感じになります。

続きまして rrdtool に行ってみましょうか。ports 的には ports/databases/rrdtool になりますが、これをインストールすると RRDs と言う perl のモジュールをインストールしてくれて RRDs::graph と言うモジュールを使うと MRTG グラフを表示してくれます。グラフを作成する際のオプションとして IPv6 アドレスが存在した場合にどうなるのか?

正解ですが、”:” は区切り文字に使われているので DEF: の設定に IPv6 アドレスがあるとまともに動作してくれません。

ports 的な rrdtool-1.3.5 のソースを見てみると rrdtool-1.3.5/src/rrd_graph_helper.c に以下のような記述が所々にあり、”[]” で囲むとか “\:” などしても全然対処できないと言うことが解ります。

if (line[*eaten] == '\0' || line[*eaten] == ':') {
    dprintf("- no (or: empty) legend found\n");
    return 0;
}

 
と、言うことで RRDs を使う場合には IPv6 を意識しないようにしないとまずいです。では、どんな時に IPv6 を使う必然性が出てくるのかとなるのですが、僕の場合、rrdfile と PNG ファイルの保存場所に IP アドレスを利用してる感じですね。

/data/mrtg/192.168.1.1/re1.rrd
/data/mrtg/2001:200:161:14cc::1:1/re1.rrd

でもって RRDs::graph では以下のようなコーテイングをしていたらこらアカンですわなー。

:
my $rrdfile = "/data/mrtg/2001:200:161:14cc::1:1/re1.rrd";
my $pngfile = "/data/mrtg/2001:200:161:14cc::1:1/re1.png";
push (@options
    :
    ,"DEF:avein0=${rrdfile}:ds0:AVERAGE",  "CDEF:avein=avein0,8,*"
    ,"DEF:maxin0=${rrdfile}:ds0:MAX",      "CDEF:maxin=maxin0,8,*"
    :
);
my @rv = RRDs::graph( $pngfile ,@optins : );

 
なので、結局 $rrdfile =~ s/:/_/g; など言う弱いことをして問題回避したのでありました。

これで、net-snmp・mrtg・rrdtools の IPv6 対応が一応終わった感じかなぁ。10Gbps 問題も回避できたし、今の所は多分これで IPv6 な世界が来ても大丈夫なような気がします。が・・。mrtg には IPv6 対応をもう少し頑張ってもらい所ではあります。

http://oss.oetiker.ch/mrtg/doc/mrtg-ipv6.en.html

こんな所読んだって Target の所がハショッて書いてありすぎで全然ダメなんだもの・・。トホホ。

くーーっ。MacOSX Leopard の /usr/sbin/snmpd は 5.4.1 使っているのに IPv6 に対応してないじゃん。 udp6:161 のオプション、そんなのねーー。とか言いやがる・・orz。これはヒサンだ・・。

つまり、どういうことかと言うと、例えば MacOSX を leopard.running-dog.net と言う FQDN で 192.168.1.30 と 2001:200:161:14cc::1:10 の二つ RR レコードを記述していた場合、mrtg.cfg の Tagrt に FQDN を記述すれば mrtg は IPv6 で問い合わせに行くことになります。

けど、MacOSX の snmpd は IPv4 にしか答えないので mrtg はエラーとなります。そして、mrtg は「IPv6 から IPv4 にフェイルオーバーしないよ。」と言う仕様なので、MacOSX への mrtg.cfg の設定における Target は FQDN ではなく、IPv4 アドレスを記述しないと正しく情報が取得できないことになります。

いやぁ・・。奥が深い・・。まず最初に監視対象機器が DNS に A と AAAA があるか確認した後、当該機器の snmpd が IPv6 に対応しているか確認してからでないと mrtg.cfg の記述が完成しないんだー・・。

と。言うこで、このネタ。ここまでにしておきましょう・・。

4月 202009
 

さてと。久しぶりに FreeBSD ネタ;-)。

rcNG。僕は好きく無いんだけど、/usr/local/etc/rc.d/ 配下に自分で書いたスクリプトを置いて、一番最後に実行させるべく PROVIDE:・REQUIRE:・KEYWORD: などを書いても絶対に一番最後にはならない。BEFORE: bgfsck とか書いても、bgfsck が 上のほうに来てしまうし・・。

# rcorder -s nostart /etc/rc.d/* /usr/local/etc/rc.d/*

 
と、言うコマンドを叩くと実行される順番が表示されるけど、自分で実行したい順番にならない・・。
もうどうにもならないので考えた技。上記コマンドを打ったとき、一番最後に実行されるのが、/etc/rc.d/bgfsck なのでこの中からスクリプトを呼んでしまえっ。技を考え出しました;-)。修正分をパッチにするとこんな感じ。

--- /home/takachan/bgfsck       2009-04-20 16:58:23.000000000 +0900
+++ /etc/rc.d/bgfsck    2009-02-08 10:10:39.000000000 +0900
@@ -16,6 +16,11 @@
bgfsck_start () { + +# It operates at the very end. rc is started. + echo 'Starting very end RC.' + /usr/local/site/bin/rc.lastexec + if [ -z "${rc_force}" ]; then background_fsck_delay=${background_fsck_delay:=0} else

 
/etc/rc.d/bgfsck の 中から /usr/local/site/bin/rc.lastexec を呼んでいる。でもって呼び出されたこのスクリプトでは自分が一番最後に実行したいものをツラツラと書いて行けばおしまい。って状態にしています;-)。

同じようなことは他にもあるけどねぇ。例えば /etc/rc.d/LOGIN の中に上記のパッチみたく書けば、その直後に実行されるとか(本当か?試して無いけど;-)、ネットワーク系のデーモンはもっと早い時にに起動したい場合は、じゃぁ、必要なスクリプトから呼んじゃエー。みたいな。

これは FreeBSD の流儀的には美しく無いのだろうけど、思った所でバシっと動作してくれないのが困ってしまうのよ・・。rcNG は・・。はぁ。

まぁ、今の所は一番最後に起動したいのが一番多いのでそれはそれでよしとしています。xdm(僕の場合は kdm だけど)なんざ、一番最後に起動して欲しいのよねぇ。/etc/ttys 経由では無く、rc スクリプト経由で。

/etc/ttys から xdm を呼んじゃうと kill しても自動的にまた起動してしまうでしょ。あれ、好きくないのよ。今はそんなことなくなったのかな?最近のは試してないけど。

それにしてもこの技、よい子はマネしないでねぇ;-)。

4月 192009
 

iPhone 3G に「全力案内!」をインストールして、自転車で出かけてみました。目標をセットしてフリーモードで利用すると緑色の線が表示されてナビゲージョンしてくれます。

今回は自転車に付けて試してみました。付けた自転車はブリヂストンのトランジットセブン。この自転車、僕的にはお遍路さん仕様なのであります;-)。

これに、サンワサプライのホルダーを装着。今回装着した図はこんな感じ。

KC3N0010_chariandiphone.JPG

ハンドルの下に T バーを付けているので、そこにスピードメータと iPhone 3G を装着。ちょっとブレーキワイヤなどの取り回しが苦労するけど、なんとか見えないこともない。

iPhone は「自動ロック」の設定を”しない”にしていざ出発。iPhone の画面をずっと見ているとあぶないのでチラッと見るのだけど、光を反射して異様に見にくい。保護シートが太陽光を反射して見にくくしている。ってのがある。

後、「全力案内!」の「ヘッドアップ」の機能について。走ったところを青い点で残してくれる(15m ごとに一個の点が付くと言うのだけど、本当かなぁ・・)のだけど、交差点を曲がって、大体三個ほど青い点が付くとヘッドアップしてくれる。曲がった後にちょっと遅れてヘッドアップ。って感じでしょうか。

ホルダー自体は特に問題も無く。と言う感じでしょうか。多少の段差が合ってもグラグラしないです。僕は YAMAHA の TT250R にも装着できるかなぁ。まぁ、林道を走ることはしたくないけど・・(^^;;。

とまぁ、iPodTouch には無かった GPS ですが、思いっきり堪能しています。そー考えると 3G があるので地図も空から降ってくる。と言うのも良いですねぇ。au の ez ナビウォークでもやってみようと思ったけど、タッチな地図が無いしぃ・・。って感じです。

あ。「全力案内!」の地図データ。これは良いですねぇ。僕は車にパナソニックのストラーダカーナビの DVD 版を付けているのだけど、この地図データよりずっと良いと思います。こんなすばらしい地図が空から降ってくるんだからすばらしい。と思います;-)。

ちなみに都内を自転車で走り、その時 mobilepoint のあるところばっかり拾って走ったら 3G 使わなくて良いかなぁ?などと思ってしまいますが;-)。

それにしてもバッテリーの持ちは悪いです。30 分位でバッテリ半分終了。って感じでしょうか・・。チャリは車とは違いバッテリと言うのが無いので充電が出来ない。太陽光発電をするかなぁ。と言う感じですが、以前、アキバで手回し式の携帯電話充電器を 300yen 位で買ってきたので、それを発電機として USB 経由で iPhone 3G に充電するしかけを作ろうかと考えている最中です。

バイクの場合はシガーソケットのメス部分をバッテリに接続すれば車と一緒になるので特に問題は無いかと思っています。

それにしても GPS はやっぱり良いなぁ;-)。ちょっとお腹が空いたのでぐねなびで検索するかなぁ。みたいにもできるしねぇ。

4月 122009
 

先週、iPhone3G を購入して、じっくり検証してみました。ちょっと使用感について。

基本的に、iPhone3G は GPS が欲しかったから。というのはあるんだけど、まず、GPS が使えるようになってダウンロードしたのが以下かなぁ。使ってみた感じも合わせて書いておきます。全て無料アプリ。

・TeePee – GPS の現在いるところの雑誌やテレビで紹介されたお店を表示してくれる。表示には多少時間は掛かるのだけど、まあ、なんとなく良いかなぁ。と言う感じ。

・全力案内 – GPS を利用したカーナビなんだけど、フリーモードを利用すると確かにカーナビになるかなぁ。と言う感じ。ヘッドアップは思いっきり「カーナビ」を意識させてくれます;-)。

au の CASIO W42CA で EZ ナビウォークを利用した時もヘッドアップしてくれますけどねぇ。画面の大きさが全然違うので・・。

iPhone3G を購入してから買ったのが車用のホルダー。買ったのはこれ。

http://item.rakuten.co.jp/auc-honeypot/cd-stwf/

980yen だったので安いなぁ。と言う感じ。

SBSH0065_iphone1.JPG

取り付けてみたのが大体こんな感じ。もうカーナビが着いているので必要無いじゃんとか思うのだけどねぇ(^^;;。スタンドはフロントガラスにペタンと貼り付けました。揺れもそんなに無いので結構良いかなぁ。と言う感じです。

iPod Touch や iPhone3G で地図アプリを利用してしまうとタッチパネルの地図のスクロールが、もう既存のカーナビなどのタッチして移動というのが苦痛でしょうがない。画面をスーと触るとスクロールしてくれる iPod Topuch や iPhone3G がもう手放せなくなる。って感じ;-)。

さて、車で iPhone 3G の GPS 性能を試したのだけど、本当の狙いはチャリンコ用。自転車用のスタンドはこっちを購入。

http://item.rakuten.co.jp/sanwadirect/200-pda013/

これを自転車に装着して iPhone3G を利用してみる予定。まだ、試し乗りはしていないです。が、どちらも取り付け時に iPhone3G を挟み込む場所が大事です。iPhone3G は左側にボタンがあるのだけど、これを挟み込まないようにする必要があります。

iPod Touch で利用していたカーシガレットの充電+FM トランスミッターが iPhone3G では利用できません。FM トランスミッター部分は利用できるのだけど、充電が出来ない。カーナビアプリを利用している人にとっては結構頭が痛い・・。カーシガレットの充電+FM トランスミッターは「iPhone3G 対応」というのを買わないとダメですね。
僕買ったのは第一世代 iPod Touch が出た直後に買ったヤツなので今はもう売ってないですねぇ・・。

iPod Touch で iCal データを Sync したとき、カレンダーの色が iCal と iPod Touch で同期しないのがすごーく納得いかなかったのだけど、iPhone3G を利用したら色まで Sync してくれたので嬉しくなったのだけど、それは iThunes のバージョンが上がったからなのねぇ。と言うのを発見(^^;;。

次に、マクドナルドで二回ほど mobilepoint を使ってみました。設定用アプリをインストールした後に一回目でちゃんと設定して、二回目からはサクっと接続できるのでこれは良いなぁ。けど 3G 使える iPhone ではあまり意味ないかも・・。まだ、試してないけど、iPhone3G に付いてきた mobilepoint のアカウントが iPod Touch で使えると嬉しいなぁ。これはライセンス違反かな?;-)。

機会があれば是非、新幹線の中で使ってみたいものです;-)。それにしても、公衆無線 LAN の料金が月々の電話代の中に含まれているとなると随分と安いなぁ。とは思うな。

その次に気がついた点としては iPod Touch には無い、スピーカーとマイク。この二つがあるとビミョーに幸せかなぁ;-)。フェラーリのゲームなんか楽しいし、木の箱の中を鉄のボールを転がすゲームも音が良いしねぇ。

そして iThunes で着信音が簡単に作れる。と言うのも嬉しいなぁ。au 携帯なんざ色々設定するのもイヤになるねぇ・・。

バッテリについてですが、iPod Touch で無線 LAN をフルフルで使うとやはり二時間位しか持たなかった。 iPod として使うと三日位持つのにねぇ。そう考えると iPhone3G も一緒で無線 LAN はどんどんオフにして利用したいものです。

後、IT メディアのアプリで、記事を事前にダウンロードしていたのに写真の部分だけは見た時に取りに行ってしまう。地下鉄に乗ったときは 3G も届かないので記事の表示が遅くなって結構ウザいのだけど、そんな時は機内モードがすごーく有用。所詮電車(それも地下鉄)に乗っている時は電波はアテにできないしさ。でもって機内モードにすると無線 LAN・3G 共に止まるのでバッテリーの持ちが長くなる。でもって記事の表示が早いしねぇ。

とまぁ、一週間使ってみて大体こんな感じでしょうか。僕的にはほぼ満足です。後は六月に出ると言う、第二世代のと比べてどんなかなぁ・・。と言うかんじです。

4月 052009
 

あぁ。いよいよ買ってしまった。六月に新製品が出る。とウワサされているのに・・。僕は au と SoftBank のマルチキャリアな人なのだけど、SoftBank の携帯を機種変更してしまった・・。

ちなみに自宅もちょっと前までフレッツと壁からのインターネットのマルチホームにしていたんだけど、通信費削減のためこっちはフレッツだけにしたのでありました。

さて、話は携帯に戻るのですが、au はつい最近 NS01 に変えたばっかり。そしたら iPhone 3G が安くなる。と聞いてガクゼン・・。異なるキャリアで携帯を二つ持っている人は両方の番号を一度に MNP したほうが断然お得ですよっ!! 今まで au で使っていた番号を SBm へ。SBm で使っていた番号を au へ。すると、両方の機種が 0yen で手に入りますっ!!

au はダブル定額ライトをやめました。SoftBank 一本で行きますっ!!って感じでしょうか。

初代 iPod Touch の箱もちゃんと大切にとっといてあるのです;-)。

IMG_5031_iPhone1.JPG

今までは iPod Touch を持っていたのだけど iPhone 3G になりました。どうしてかと言えば、3G で無線 LAN が無くても通信できる。と言うのは魅力的だけど、やっぱり GPS が欲しかった・・。

二台並べた図。iPhone 3G は iPod Touch よりも一回り大きいし厚みがあるかなー。

IMG_5033_iPhone2.JPG

アキバを俳諧していたら iPod Touch のシリコンカバーが 100yen で売っていたのでそれを付けたら Touch のほうが白くなってしまった(^^;;。

さてと。フツーの携帯と違う点。App Store でダウンロードしたアプリは Touch にも iPhone にもインストールできる。これってすごいよねぇ。au の EZ アプリってダウンロードしたらその端末でしか使えない。機種変更したらもう一回ダウンロードする必要があるんだけど、 Apple のアプリは一個でどっちでも使える。

iPhone3G 買ったらすかさず GPS 利用しているアプリをダウンロードしただわさー;-)。

一応、設定は全部完了。@i.softbank.jp なメールアドレスはフツーの imap なアカウントで設定している。って感じかな。けど、SSL に対応していないのはちょっとショックでかい。人んちの無線 LAN 利用したときに tcpdump 取られたら一発でおしまいじゃーーん・・。けど、SMTP 側は SMTP-auth に対応しているのねぇ。って感じ。

さてとー。これからガンガン使うぞー。って感じです;-)。

なんか、支離滅裂な文章だなぁ・・。

3月 252009
 

Proxy サーバ、何が一番良いのだろう?と、思い、まず、パッとひらめいたのが squid だったので、それを利用して Proxy サーバを構築してみた。ふむ。設定を施した後はちゃんと動作してキャッシュも溜まっていくねぇ。と言う感じだったのだけど・・。

ps で確認してみると squid は一個のプロセスでしか動作していない。でもってマルチスレッドにもなっていないので、ふと「これで同時にたくさんのアクセスがあった場合どうなるんだ?」とか思い調べてみると・・。あぁら。squid はファイルハンドラがボトルネックになって大規模な運用を行うのには向いてないのねぇ(そら、squid サーバを複数台立てれば大規模サイトの運用できるのは解るけど、全然現実的しゃないじゃん;-()。というのが発覚。

default で 1024 個のファイルハンドラしか無い状態で一個の接続に三つのファイルハンドラを利用するとなると同時に接続できるのは 300 個のクライアントじゃん。ダメだこら。と言うことで別の Proxy サーバを探し始めます。

続いてトライしたのが apache の 2.2.9 。まぁ、大規模環境において動けば良いのでねぇ。他にも色々あるみたいだけど、勝手知ったると言うか・・(^^;;。

Proxy サーバと、後、キャッシュサーバとしてのみ動作させるので要らない機能は落とします。configure 時のオプションはこんな感じ。–with-mpm=worker を付けたのでスレッドな httpd として動作します。

$ ./configure --enable-headers --enable-so
--with-mpm=worker
--disable-cgi --disable-cgid --disable-userdir
--enable-proxy --enable-proxy-ftp --enable-proxy-http --enable-proxy-connect
--enable-file-cache --enable-cache --enable-disk-cache --enable-mem-cache

 
さてと。インストールが終わっていよいよ設定ですが、今回は以下のようにします。

・192.168.1.200 で動作しているサーバの情報をキャッシュするための Proxy サーバを構築します。
・Proxy サーバに対して port:8080 でアクセスした場合はキャッシュしません。
・Proxy サーバに対して port:8081 でアクセスした場合はキャッシュして、その情報を利用するようにします。

オープン Proxy サーバとならないように 192.168.1.200 にのみアクセス可能なサーバとします。これでどこから接続があってもまるで利用できないものとなりますし;-)。

で、設定は大体こんな感じなのだけど、一番苦労した点が、port:8080 にアクセスした場合にキャッシュしないもしくはキャッシュ情報を利用しないで、port:8081にアクセスがあった場合はキャッシュを利用するもしくは新規に取ってきた情報をキャッシュするように動作する設定でした。

<IfModule mod_proxy.c>
    ProxyRequests Off
    ProxyVia On
    AllowCONNECT 8080 8081
<Proxy *:8080> Order deny,allow # Deny from all Allow from all </Proxy>
<Proxy *:8081> Order deny,allow # Deny from all Allow from all </Proxy>
<VirtualHost *:8080> ProxyPass / http://192.168.1.200/ <IfModule mod_cache.c> CacheDisable / </IfModule> </VirtualHost>
<VirtualHost *:8081> ProxyPass / http://192.168.1.200/ <IfModule mod_cache.c> <IfModule mod_disk_cache.c> CacheRoot /data/httpd/cache/ CacheEnable disk / CacheMaxExpire 5184000 CacheDefaultExpire 5184000 CacheDirLevels 3 CacheDirLength 5 </IfModule>
<IfModule mod_mem_cache.c> CacheEnable mem / MCacheSize 2048000 MCacheMaxObjectCount 100 MCacheMinObjectSize 1 MCacheMaxObjectSize 10240000 </IfModule> </IfModule> </VirtualHost> </IfModule>

 
Proxy ディレクティブはアクセス制限のためにしか書けないのねぇ。けっこう悲しい。僕的には <Proxy *:8080> の中に mod_cache の情報が書けるとすごーい嬉しいと思ったのだけど・・。

しょーがないので VirtualHost ディレクティブを記述して、そこで port をわけて、一個は CacheDisable、もう一個の 8081 では CacheEnable を記述すると言う、非常にややこしい設定となってしまいました。まぁ、それが apache の設定だぜぃ。と言われればその通りで、この設定をパッと思いついてしまう自分もすっかりと apache に染まっているのだなぁ(自慢か?;-P)と思ってしまうのだけど・・。

個別の設定については詳しい説明は書きませんので apache.orgのドキュメントを参照してください。

今回やりたかったのは、キャッシュを利用するポートとキャッシュを利用しないポートでサービスができる Proxy サーバが欲しかった。と言う感じでしょうか。

3月 192009
 

自宅サーバが安定しない。」と、ずっと書き続けてきたのだけど、昨日 csup したら 7.1-STABLE が 7.2-PRERELEASE になっていたので、サーバが凍り付く前にリブートしてバージョンアップでけた。

と、言うことで最近のサーバは uptime 12days を記録し、去年の 10 月以来最高の記録となりました;-)。

ちなみに さくらインターネット が自社のサーバを 7.1-RELEASE にアップグレードするってアナウンス出したので思わずサポートに「7.1-RELEASE はフリーズしてしまうけど、サービスにおいて大丈夫ですか?安定してくれないとイヤだなぁ。」と書いたら「検証の結果、凍りつくハードウェアも確かにあったけど、サービスに利用しているハードウェアは大丈夫なのでバージョンアップします。」との事でした。でもって回避策も考えているそうな。

で、うちのサーバがどうして安定したか。と言えば OS の改修とか色々考えられるのですが、現在のうちのサーバの稼働状況を見てみると以下のような感じです。

・DNS サーバ
・ウェブサーバ(httpd-2.2.9) port:80 最大プロセスが 140 個程度
・ウェブサーバ(httpd-2.2.9) port:8080 最大プロセスが 20 個程度
・メールサーバ(sendmail)
・POP3/IMAP4 サーバ(courier-imap-4.4.1)
・自宅網内用 SAMBA サーバ
・cvsupd
・IPv6 ルータ(dtcps,dtcpc)

こんな感じでしょうか。サーバ部分とルータ部分が存在しているのですが、PPPoE はブロードバンドルータにやらせています。

さて、安定させるために行ったことは大体以下です。

・IPv6 ルータを別のマシンで行うようにする
・ダメもとでスケジューラを SCHED_ULE から SCHED_4BSD に変更
・httpd を prefork から worker に変更

こんな感じでしょうか。ただ、これらの事象がサーバの安定に貢献できたのか、さだかではありません。

httpd をプロセス起動からスレッド起動に変更したおかげで ps -ax で見た感じはかなり少なくなりました。 ps -axH | wc -l すると大体 300 近い数が存在しているので、この状態を高負荷状態と行って良いのかもイマイチ不明です。

ただ、ロードアベレージはそんなに高くは無いし、CPU クロックもいつも最高速で回っている。と言うのでもありません。この辺りの情報は MRTG で取得しています。なのでやはり、プロセスやスレッド回りで OS 的に何かあったのかなぁ?と考えてしまうのでありました。

httpd を prefork から worker に変更したのが一番大きいのかなぁ?あ、きっと OS 側に修正が入ったのでしょうねぇ。csup するたんびに kern_ とかのソースが更新されていると嬉しくなっていましたし。< 僕;-)。

3月 062009
 

最近 csup した 7.1-STABLE は powerd の挙動が変わったねぇ。僕は CPU のロードアベレージと速度を MRTG で取得していて毎日見ているのだけど、それで powerd の挙動が一目瞭然;-)。

今までとどう変わったか?と、言われれば、多分 C7i や PhenomII など Core 毎に速度が変えられるようになったのに対応したのでしょうなぁ。

MRTG のグラフを見ていたら、今までは

CPU クロック抑えつつロードアベレージがちょっと高め

だったのだけど、最近の STABLE では

CPU クロック高めでロードアベレージはちょっと抑え気味

って感じかな。まぁ、どっちでも構わないのだけど、CPU クロックを低くしていれば消費電力が抑えられるわけでして。地球環境を考えたら、僕的には今までのほうが良いなぁ。と思ってしまうわけです。サーバであっても CPU ロードアベレージが低ければクロックも低くなっていて欲しい。裏を返すと、多少ロードアベレージが高くても CPU クロックは低くても良い。みたいな感じかしら。

で、powerd で調整できないものか man みましたよー。で、オプションで CPU クロックの変動を抑制することができる;-)。

現在、AthlonX2 なサーバに設定している powerd のオプションはこんな感じ。

/usr/sbin/powerd -a adaptive -i 80 -p 750

 
Atom N330 なサーバに設定しているオプションはこんな感じ。

/usr/sbin/powerd -a adaptive -i 80 -p 500

 
まず、-a で adaptive を指定して「適切なモード」を設定します。 -i で CPU アイドルのパーセントレベルを指定して、最後に -p でポーリング時間を設定します。

経験上、ポーリング時間を変更すると細かな CPU クロックの調整ができます。大きく変えたい時は -i オプションの値を変更すれば良いかと思われます。

後は二時間位ブン回して、その間に MRTG で情報取得して更にオブションの値を細かく調整すれば良いかと思います。

それにしても、温度とか、この手の値って MRTG で取れると知ると知りたくなるんだけど、知らなくても全然問題無いのよねぇ。その気分的な問題が中々面白いんだけど;-)。

それにしても、CentOS で CPU 速度を落とそうとしても、ややこしいのねぇ。カーネルモジュールをロードしてもエラー吐いてダメだしさ。そー考えると CPU クロックを可変にするのは FreeBSD のほうが圧倒的に楽だね。GENERIC カーネルだと powerd を起動すれば良いだけだし。

そー考えると地球環境を考える人は FreeBSD 使うのかぁ?;-P。