ネット接続時に自動で時計合わせ

ザウルスは再起動やサスペンドといったタイミングで時計が狂いやすい。今朝もザウルスでメモを取る時に時計が狂ってた。その都度、auの携帯電話やらカーナビの時計やら(どちらもGPSなので正確)を見てザウルスの時計を合わし直せば済むんだけど、普段ザウルスを使う中で意識せずに時計合わせを自動的に行ってくれないかと思って、ネット接続時にntpdateで時計合わせするようにしてみた。
同様な手段やパッケージはいくつかあるが、自分が欲しいと思うものが無かったので先人達の情報を元に仕組みを作ってみる。

ネット接続時に実行されるシェルスクリプト

ダイヤルアップ接続時は /etc/ppp/ip-up の末尾に、LANカードもしくは無線LANカードでの接続時は /etc/pcmcia/network の start_fn $DEVICE の下に、ザウルス付属のUSBケーブルでPCとの接続時は、/etc/hotplug/net.agent の usbd_net_if_up の下に「/usr/bin/ntpdate ntp.ring.gr.jp」のように時計合わせをするコマンドをフルパスで書けばいい。

ntpdateコマンドとRTCへの日時反映

ntpのパッケージに含まれるntpdateコマンドは何人かがザウルス用のバイナリとして配布してくれているが、ntpdateはカーネル上の時刻しか正しくすることしか出来ず、内蔵時計(RTC)への反映が行われない為、再起動すると再び時計が狂ってしまう。
これを避けるために一般的なLinuxではcronで定期的に「clock -w」を実行しているが、ザウルスの場合は「/bin/echo 'W' > /var/spool/at/trigger」というコマンドを発行してatdにRTCへの反映を指示してやる必要がある。
http://park11.wakwak.com/~nkon/homepc/zaurus/config/ntpdate.html

パッケージ化

Zaurus Archivesで公開されているntpdateコマンド Zaurus版はntpdateでの時計合わせを行うと同時に上記コマンドも発行してくれるが、/usr/bin/ntpdateにインストールされる為、SD/CFカードへのインストールが出来ない。
http://www.geocities.co.jp/SiliconValley-Bay/1180/download.html
そこで/opt/QtPalmtop/bin/ntpdateに配置し直し(./opt、./opt/QtPalmtop、./opt/QtPalmtop/binディレクトリもdata.tar.gzに含まれていなければSD/CFカードへのインストールは出来ない)て、先ほどのネット接続時に実行されるシェルスクリプトにntpdateでの時計合わせ処理の追加・削除を行うシェルスクリプト postinst、prermを用意して(control.tar.gzに含めて)、再パッケージ化してみた。
尚、NTPサーバは「ntp.ring.gr.jp」固定になっている。また、ntpdateには一切のオプションも無いので必要に応じて「-u」等を付けたい場合は、前述の各スクリプトファイルを直接修正する必要がある。

postinst
#!/bin/sh
echo '/opt/QtPalmtop/bin/ntpdate ntp.ring.gr.jp' >> /etc/ppp/ip-up
cp /etc/pcmcia/network /tmp/network
sed -e '/^[ 	]start_fn \$DEVICE/a\
/opt/QtPalmtop/bin/ntpdate ntp.ring.gr.jp' /tmp/network > /etc/pcmcia/network
sed -e '/^[ 	]*usbd_net_if_up/a\
/opt/QtPalmtop/bin/ntpdate ntp.ring.gr.jp' /tmp/net.agent > /etc/hotplug/net.agent
prerm
#!/bin/sh
cp /etc/ppp/ip-up /tmp/ip-up
sed -e '/\/opt\/QtPalmtop\/bin\/ntpdate ntp.ring.gr.jp/d' < /tmp/ip-up > /etc/ppp/ip-up
cp /etc/pcmcia/network /tmp/network
sed -e '/\/opt\/QtPalmtop\/bin\/ntpdate ntp.ring.gr.jp/d' < /tmp/network > /etc/pcmcia/network
cp /etc/hotplug/net.agent /tmp/net.agent
sed -e '/\/opt\/QtPalmtop\/bin\/ntpdate ntp.ring.gr.jp/d' < /tmp/net.agent > /etc/hotplug/net.agent

出来上がったパッケージを以下に置いた。
http://www.areanine.gr.jp/~nyano/download.html#ntpauto