だが、Linuxを使うとなると話は別だ。DHCPでアドレスをもらうのは便利といえば便利だが、その都度ipアドレスが変わる、というのはとても使いづらいものがある。まさにクライアントとしてのみ運用し、いっさいのportをlistenしない、というならまだしも、普通はftpやtelnetくらいは使うし、rshやrlogin、場合によってはnfsなども使うだろう。つまりはDHCPでアドレスをもらいながらも、サーバとして動作させたい、という状況が必ず発生する。
そうすると、ホスト名からipアドレスをロクに引けないから、結局ブート時にifconfigなどでipアドレスを確認し、/etc/hostsを書き換えるなどという、いつの時代の話だそれわ、みたいな状況になったりする。2台のLinuxを使っていて、両方ともDHCPなipアドレスとかいう状態だと、どっちかをリブートしてipアドレスが変わったら、両方の/etc/hostsを手で直すなり、なんらかのscriptを書いてやらせるなりする必要がある。バカバカしいことではあるが…
そういう場合は、スタティックなipアドレスと、まっとうなホスト名を割り当ててもらえよ、という意見はまったくもっともなのだが、上記のごとくWindows主流なnetworkではなかなかそううまく話が進まない。なにしろ一歩自分のパーティションから出ようものなら、周囲はWindowsな世界だったりすると、もはや道理は通じないのだ。まさに隠れキリシタン状態(笑)
それに、ノートPCにLinuxを入れていて、家と会社の両方で使っていたりすると、これはもはやDHCPのお世話になるのが普通だ。こういう場合もやはり、その都度/etc/hostsを書き換えてやる必要が出てきたりする。
そこで、それを手作業でやらずに済むように、ツールを書いてみた。
名前はfumiedという。なんか一見エディタの仲間のようだがそうではない。「ふみえでぃー」と読んでくれ。そう。踏み絵デーモンなのだ(笑) 隠れキリシタンのように、会社でLinuxをコソッと使っている人のためのツールとして命名した。わははは。すまんねバカで。
赤帽5.1でdhcpcdを使っている場合は、ブート時にdhcpcdがipアドレスの取得に成功すると、/etc/sysconf-network-scripts/ifdhcpc-done という shell script が走るようだ。resolv.confをコピーしたりなどしている。で、ここにfumiedを仕込むことを前提にしている。ifdhcpc-done の末尾の部分は
if [ -f /etc/dhcpc/resolv.conf ]; then cp /etc/dhcpc/resolv.conf /etc fi
こんな風になっているので、それに続けて
if [ -f /var/run/fumied.pid ]; then /usr/bin/fumied -k fi /usr/bin/fumied
などとして使っている。makeしたfumiedは/usr/binに置いてあるものとする。また、shutdownの時や、networkの停止・再起動などをした場合に、正しくfumiedも再起動されるように /etc/sysconf-network-scripts/ifdown にもちょっとだけ手を入れる必要がある。/etc/sysconf-network-scripts/ifdown の最後の方に
if [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then if [ -f /var/run/dhcpcd-${DEVICE}.pid ]; then kill `cat /var/run/dhcpcd-${DEVICE}.pid` rm -f /var/run/dhcpcd-${DEVICE}.pid exit 0 fi exit 1 fi
という処理があるが、ここにfumiedをkillする処理を追加して
if [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then if [ -f /var/run/dhcpcd-${DEVICE}.pid ]; then kill `cat /var/run/dhcpcd-${DEVICE}.pid` rm -f /var/run/dhcpcd-${DEVICE}.pid if [ -f /var/run/fumied.pid ]; then -- ここから /usr/bin/fumied -k fi -- ここまで exit 0 fi exit 1 fi
のようにした。上記はdhcpcdを使っているホストでの設定例だが、ホストによっては、自分自身はスタティックなipアドレスを持っているけれど、DHCPなホストと一緒に使うためにfumiedに/etc/hostsを書き換えさせたい、という場合もあろう。そういうホストでは、rc.localの終りのほうにでも
if [ -f /var/run/fumied.pid ]; then rm /var/run/fumied.pid fi /usr/bin/fumied
とでも書いておけばよいと思う。
fumiedは/etc/hostsを書き換える関係で、rootで起動しないと動作しない。それと、最初にブロードキャストを飛ばした際に、2台以上の相手からACKが返ってきた場合のことを特に想定していない。まぁ早いもの勝ちで順番に処理してくれたらラッキー、くらいのもんで実にバータリー指向だ。だって、オレの環境って、せいぜいDHCPなLinuxを2台(ノートPC含めて)しか使っていないし、この仕様で困らないんだもん(笑)
ソースを固めたヤツはここに置いてあるので、興味がある人はどうぞ。
メール | 戻る |