2009年3月24日の日記を表示中

2009年 3月24日 (火)

Webサーバの玄箱への移行

昨日の続きです.昨日は実質何一つ進まなかったので今日から始まったと考えるのが適切なのかもしれませんが・・・.

とりあえず方針として,今までの設定ファイルとかノウハウ (というほどのものはないけど) を優先して Debian のパッケージは使わない方向でいきます.今までと同じ環境を,今までと同じようにソースからがっつりビルドする感じで.まあ,がっつりとか言っても元々 chroot して動かしてたんで実際のところは Apache2 と PHP (とそれらが利用するライブラリ類) をビルドするだけなんですが.

クロス環境を作るのが面倒くさかったので玄箱でセルフビルド開始.なかなか順調です.今までとプロセッサアーキテクチャが違うとはいえ,同じ Linux で同じ gcc によるコンパイルで,しかも安心 (?) の PowerPC アーキテクチャなので何も詰まることはありませんでした.強いて違うところをあげるとすればコンパイルがめちゃくちゃ遅いってとこかナ───

まあ遅くてもコンパイルが通ればよし.どうにか完走して PHP までインストールできましたよ.そのまま以前の環境からデータと設定ファイルを引き継いで,設定ファイルに書かれた IP アドレスなどを書き換えて,chroot して動かすのに必要なファイルをコピーしまくって準備完了.特にトラブルもなく,無事 httpd が起動し,この日記が読める状態となりました.ふー.

気になる速度ですが,日記の方は普通そう.よかったー.一方別館の方はやっぱ読み込みがワンテンポ遅いかな.そんなひどいわけでもないけどちょっと引っかかる感じ.まあ,でもこれくらいなら許容範囲かなぁ・・・.まあとりあえずこれで移行完了ですな.ああ・・・つぎは DynDNS だ・・・.

DynDNSを何とかする

ここのページのドメイン名は,見りゃわかりますが DynDNS のやつです.元々ここのページが置いてあった実家のネットワークは,外側の口にグローバルIPが固定で割り振られていたので,DynDNS はアカウントが消失しないよう月に1回くらい手で更新するだけで十分でした.

が,今,この玄箱がつながっているネットワークの外側の口は,グローバル IP こそ振られているものの,固定である保証があるわけではなく,もしかしたら何らかの理由でリース期間が終わったところで IPアドレスが変わってしまうかもしれません (多分そうそうないとは思うけど).というわけで,IPアドレスが変わっちゃったら自動的に DynDNS に登録し直すような仕組みが欲しかったりします.

DynDNS に自動で登録する方法は色々あるようですが,軽く調べた感じだと ddclient が良いみたいです.ルータで dhclient が IP アドレスの変更を検出したときにこれを呼べば良さそうですね・・・.と思ったんですが,ルータ (OpenBlockS) には Perl が入っておらず,Flash の容量的にも入りそうな気がしません.Perl 自体を CF に入れるのも何か微妙だしなー.うーん.

仕方がないので ddclient は玄箱で動かすことにしました.が,ここで一つ疑問が. OpenBlockS の外側の口の IP アドレス (が変わったこと) を玄箱はどうやって知ることができるのか.

ヒタヒタさんを巻き込んであれこれ考えるもなかなかいいアイディアが思いつきません.外の Web サーバにアクセス元のIPアドレスを表示するページを置いて利用するとか, OpenBlockS が玄箱のどっかを NFS マウントして IP アドレスが変わるたびにそこに書き出すとか,玄箱から ssh とかで認証なしで入れるようにして定期的にチェックさせるとか,どれもちと微妙な感じです.

で,結局,OpenBlockS の namedb (OpenBlockS は LAN 内の DNS もやっている) に,名前を引くと外側の口の IP アドレスが返ってくるようなホスト名を追加し,外側の口の IP アドレスが更新されるたびに zone ファイルを書き換えて追従させることにしました.ヒタヒタさんはイマイチ賛同してくれませんでしたが (´・ω・`)

適当に外側の口の IP アドレスを調べて,今 zone ファイルに登録されているやつと違ってたら zone ファイルの IP アドレスとシリアル番号を書き換えるOpenBlockS用のスクリプトを作成.一応それっぽく動くようです./etc/dhclient-exit-hooks から呼ぶようにして,dhclient を落として上げたら zone ファイルに外側の口のアドレスが追加されました.IP アドレスが変わったときにも呼ばれるんだよな,このスクリプト・・・.

後は玄箱から定期的に OpenBlockS の外側の口に対応するホスト名の IP アドレスを引くようにして,今まで覚えていたのと違っていたら ddclient を呼んで DynDNS に登録すようにすればいいはず.・・・おっと,ddclient の設定がまだでした.・・・ん?この「use=web」ってなん・・・だ・・・と?

何と ddclient の設定に「use=web, web=checkip.dyndns.org/, web-skip='IP Address'」とか書いておけば, ddclient を実行する側が IP アドレスを知らなくても,DynDNS 側の機能を呼び出してこっち側のグローバル IP を調べてそのまま設定できちゃうみたいです・・・.あああ,確かに Web からアクセスしたときもそういう機能あったな・・・.というわけで,「適当に」といいつつも1時間くらいかけて書いたスクリプトが不要になりました orz

まあでもこれ使えば DynDNS まで問い合わせにいかなくてもいいわけで (当たり前),30秒に1回 IP アドレスが変わってないかチェックとかしても怒られないからw,こっちでやるってのもありかもなぁ.よーし,自前の方使ってみますかねー.

あ,そうそう,上記スクリプトを書いて動かそうとして気づいたんですが,OpenBlockS に awk と head が入ってなくて悶絶しましたw.すげえなこれ.とりあえず CF に head 入れました.いっそ CF に busybox を入れてしまうというのもありか・・・?

GMail

ところで問題の実家サーバは,再度上げ直してもらったものの,夜になってまた落ちてしまいました (;´Д`).上がった直後に SSH で入って dhcpd を止め,Proxy 経由で実家のルータの DHCP を有効化したんで,一応次に落ちてもネットワークが丸ごと死ぬという心配はなくなりましたが・・・..この前ちょっと構成変えたのが功を奏しましたなー.いやしかし,こうなると Web 以外の機能も他に移さないとダメってことですね・・・.

右上の方を見るとわかりますが,現在メールアドレスは GMail のものをメインに使っています.で,今までは GMail に届いたメールは一旦実家の方で使っているプロバイダ提供のメールアドレスに転送しておりました.これを手元のマシンで読む場合は,SSH で実家サーバを経由してプロバイダのメールサーバへのトンネルを掘って,そこを通じて fetchmail で POP してました.手元のマシンから送る時も,同じようにトンネルを掘って,実家サーバで上がってた SMTP サーバ経由で送ってました.・・・と,こんな事情により,とりあえずこの辺を何とかしないと手元のマシンでメールが使えなかったりします・・・.

というわけで,あんまりやりたくなかったんですが GMail の提供している SMTP と POP を利用することにしました.

まずは送る方から.MUA は未だに Mew なんですが,調べてみたら stunnel が入っていれば SMTP over SSL とかできるとか何とか.というわけで↓のように .emacs に設定してやり,

    (setq mew-smtp-server "smtp.gmail.com")
    (setq mew-smtp-ssl t)
    (setq mew-smtp-user "********@gmail.com")
    (setq mew-smtp-ssl-port "465")

さらにこちらに書いてある方法で ~/.certs を用意してやったら送れる用になりました.わーい.まあ,本当は ~/.certs を用意すればいいというところにたどり着くまでにかなりかかったんですけどね・・・.ちなみに Mew は 6.1,stunnel は 4.26 でやってます.Mew が古いと stunnel 3系じゃないとダメとかなんとかどっかで見ましたが,最近のは関係ないみたいですね.

次に受け取る方.こっちは Mew が直接叩かずに,fetchmail で拾います (その後 maildrop 噛まして SPAM と振り分けて非 SPAM は ~/.Maildir に突っ込ませている).調べてみたら fetchmail は最初から SSL に対応しているようで,自分のマシンに入ってるやつもちゃんと libssl とかとリンクしてました.知らんかったー.

というわけでここを参考に以下のようにやったらうまくいきました.まあこっちもここにたどり着くまでにずいぶんかかったんですが.というかそもそもあってんのかこれで・・・

poll "pop.gmail.com"
   protocol pop3
   port 995
   username "********@gmail.com"
   pass "パスワード"
   ssl
   sslcertck
   sslcertpath /home/nosuke/.certs

というわけで,GMail のサーバと直接やりとしてメールの送受信ができる状態をどうにか確保できました.めでたしめでたし・・・

GMailって実は・・・

と終わるはずが,実は問題発生.何か自分で自分に出したメールに限り POP できないじゃありませんか.ググってみたらどうも GMail はそういうもんらしい.マジかよ.こりゃ不便です (;´Д`)

仕方ないので,1個サブアカウントを取って,メインからサブに転送するようにして,サブの方を fetchmail で POP し,こっちから送るときは Dcc でサブにも送るようにして・・・とやって大体今までと同じような環境にできましたが,なんだかなぁ・・・.

2009年3月24日の日記を表示中

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2009年3月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ