Linuxザウルスでのntpdateの自動化。
ntpdateコマンドのipkファイルの配布が始まって、少し簡単になりました。 あわせて、ip-upの編集をメモ帳でやるようにしたので、さらにトラブルが減ってくれないかな、と期待しています。
SL-B500については大怪獣もぎゃさん、ぬりかべ魔人さんから動作報告をいただきました。
ページ作成:塚本牧生
SL-C700では、rdateコマンドが失敗するな、と思っていたのですが、ZaurusArchivesでntpdateというコマンドのバイナリが配布されていました。 これを使うと、Linuxザウルスの第2世代、SL-C700とSL-B500でも時刻あわせができます。
ZaurusArchivesのプログラムダウンロードから、ntpdateのipkファイルをダウンロードし、これをインストールします。 ipkファイルからのインストール方法は、マニュアルでご確認ください。
インストールができたら、実際にntpdateが使えることを確認します。 ターミナルを起動し、以下のようにしてみてください。
bash-2.05$ su # ntpdate ntp1.jst.mfeed.ad.jp
次のような反応があれば、ちゃんとntpdateが動作しています。
28 Dec 15:14:15 ntpdate[3741]: adjust time server 133.100.9.2 offset 0.015425 sec
うまく行かない時は、次のようにサーバーを変えて試してみてください。
# ntpdate time-nw.nist.gov # ntpdate eric.nc.u-tokyo.ac.jp
続けて、ntpdateがどこにインストールされたかを確かめておきます。 以下を実行してください。
bash-2.05# which ntpdate
私の場合、次のようになりました。
/usr/bin/ntpdate
時刻合わせを、簡単な1つのコマンドでできるよう、シェルスクリプトにまとめます。
まず、スクリプトファイルを作成します。 SL-C700のメモ帳で新規作成を選び、次のようなファイルを作成してください。 最後に、これを本体メモリ直下に「timeadjust」という名前で保存してください。
#!/bin/sh
# Setting
NTPDATE=/usr/bin/ntpdate
TIMESERVER=ntp1.jst.mfeed.ad.jp
LOGFILE=~zaurus/Documents/TimeAdjust.txt
TMPFILE=${LOGFILE}.tmp
# Time adjust
echo "--- Time Adjust ($1) ---" >>$LOGFILE
date >>$LOGFILE
$NTPDATE $TIMESERVER >>$LOGFILE 2>&1
echo 'W' > /var/spool/at/trigger 2>>$LOGFILE
date >>$LOGFILE
tail -10 $LOGFILE>$TMPFILE
mv $TMPFILE $LOGFILE
chown zaurus:qpe $LOGFILE
この時のポイントを2点。
次にターミナルを開いて、以下の通りに実行します。
bash-2.05$ su # bash bash-2.05# cd ~zaurus/Documents bash-2.05# mv timeadjust.txt timeadjust.sh bash-2.05# chown root:qpe timeadjust.sh bash-2.05# chmod 744 timeadjust.sh bash-2.05# mv timeadjust.sh /home/QtPalmtop/bin
これで、時刻合わせは「timeadjust.sh」というコマンドで実行できるようになります。 ネットワークにつながっている状態で、ターミナルを立ち上げて、以下を実行して下さい。
bash-2.05$ su # timeadjust.sh
実行結果はログファイルに出力されますので、メモ帳で開いてみてください。 ログファイルは、本体メモリの直下にある「Time Adjust」というファイルです。
上では、まず時刻合わせを実行できること、ログを過去2回分程度保持することだけを実現するスクリプトを作りました。 これを、以下のような点で改造します。
3点目の改造点が分かりにくいかもしれません。 これは従来のスクリプトのままだと、指定されたNTPサーバーが使えなくなった時に毎回時刻合せが失敗するままになってしまうので、これを回避するための改造です。 動作していないサーバーに当たってしまった時に失敗するのは変わりませんが、それでも次回実行時には別のサーバにアクセスするので、意識しなくてもある程度以上の頻度で時刻合せが成功するようにしよう、という目論見です。
#!/bin/sh
#
# TimeAdjust.sh by Makio Tsukamoto <walrus@digit.que.ne.jp>
# Version : 1.2.0
#
# Time adjust by ntpdate.
# Usage : timeadjust.sh [NTPDATE PATH] [TIME SERVER]
#
# --- Default Setting ---
NTPDATE=/usr/bin/ntpdate
ICONPICT=/home/QtPalmtop/pics144/timeadjust.png
# --- Process Comand Options ---
if [ "$1" != "" ]; then
if [ -x $1 ]; then
NTPDATE=$1
if [ "$2" != "" ]; then
TIMESERVER=$2
fi
else
TIMESERVER=$1
fi
fi
# --- Check user "zaurus" existance ---
USER=`grep zaurus /etc/passwd | cut -d : -f 1`
if [ "$USER" = "" ]; then
USER=root
fi
USERHOME=`grep $USER /etc/passwd | cut -d : -f 6`
CONFFILE=${USERHOME}/Settings/timeadjust.conf
LOGFILE=${USERHOME}/Documents/TimeAdjust.txt
TMPFILE=/tmp/TimeAdjust.txt
# --- read and rotate NTP server list ---
if [ "$TIMESERVER" = "" ]; then
TIMESERVER=`grep -v "#" -i $CONFFILE | head -1 | cut -f1`
(
grep -v "$TIMESERVER" $CONFFILE
grep "$TIMESERVER" $CONFFILE
) >$TMPFILE
mv $TMPFILE $CONFFILE
chown $USER $CONFFILE
fi
# --- Time Adjust ---
(
echo "--- TimeAdjust ---"
echo "NTPDATE : $NTPDATE"
echo "USER : $USER"
echo "LOGFILE : $LOGFILE"
echo "TIMESERVER : $TIMESERVER"
echo "START : "`date`
) >>$LOGFILE
qcop QPE/TrayIconCtl "add(QString,QString)" timeadjust $ICONPICT
$NTPDATE $TIMESERVER >>$LOGFILE 2>&1
echo 'W' > /var/spool/at/trigger 2>>$LOGFILE
qcop QPE/TrayIconCtl "remove(QString)" timeadjust
echo "FINISH : "`date` >>$LOGFILE
tail -20 $LOGFILE>$TMPFILE
mv $TMPFILE $LOGFILE
chown $USER $LOGFILE
~/Settings/timeadjust.conf には、ntp1.jst.mfeed.ad.jp など利用できるNTPサーバーを列記しておきます。 あとは、前のものと同様にこのスクリプトをtimeadjust.shなどのファイル名で保存し、実行するだけです。
困ったことにSL-C700ではしばしば時計が狂うのですが、一般的な感覚では、時計というのはあっているのが当り前です。 だからといって、時刻合わせをしょっちゅうするのは面倒。 そこで、ダイアルアップかLANでインターネットに接続した時に、自動的に上の時刻合わせスクリプトを実行させる方法をご紹介します。
自動化には、ネットワーク接続時に呼び出されるスクリプトでtimeadjust.shを実行する方法と、NetHelperAppletで実行する方法があります。 NetHelperAppletでの自動化はちょっと面倒ですが、後々メンテナンスしやすく、事故が起こりにくく、他の2方法でおこるネットワーク接続にかかる時間が増えるという問題を回避できるので、もっともお勧めです。
NetHelperAppletを使う場合は、以下の手順で設定します。 まず、以下のパッケージをインストールします。
次に、ターミナルを開いて、以下の通りに実行します。
bash-2.05$ cd bash-2.05$ cp Settings/nethelper.conf Documents/nethelper.txt
ターミナルは立ち上げたままにしておきます。 次に、Linuxザウルスのメモ帳で「本体メモリー」直下にある、nethelperを開き、以下のように書かれている部分を探します。
[Run_All]
次のように、「[Run_All]」と書かれている次の行に、接続時には "timeadjust.sh" を、切断時には "timeadjust.sh -c" を呼び出すよう、以下の2行を追加します。
[Run_All] up00 = /usr/bin/sudo /home/QtPalmtop/bin/timeadjust.sh down00 = /usr/bin/sudo /home/QtPalmtop/bin/timeadjust.sh -c
追加が済んだら、保存してメモ帳を閉じます。 次に、ターミナルに戻って、以下の通りに実行します。
bash-2.05$ cp Documents/nethelper.txt Settings/nethelper.conf
これで準備完了。 後は、ダイアルアップやLAN接続など、適当な方法でネットワークに接続してみてください。
なお、[Run_All]の下にすでにup00がある場合や、特定のネットワーク接続でのみ自動実行したい場合などについては、NetHelperAppletのページで設定方法を確認してください。
ダイアルアップ時に、このコマンドを実行させるには、 /etc/ppp/ip-up というファイルから呼び出します。
まず、ターミナルを開いて、以下の通りに実行します。
bash-2.05$ su # bash bash-2.05# cd /etc/ppp/ bash-2.05# cp -p ip-up ip-up.org bash-2.05# cp ip-up ~zaurus/Documents/ip-up.txt bash-2.05# chmod 666 ~zaurus/Documents/ip-up.txt
ターミナルは立ち上げたままにしておきます。 次に、Linuxザウルスのメモ帳で「本体メモリー」直下にある、ip-upの末尾に以下を書き加えます。
/home/QtPalmtop/bin/timeadjust.sh
追記が済んだら、保存してメモ帳を閉じます。 次に、ターミナルに戻って、以下の通りに実行します。
bash-2.05# cp ~zaurus/Documents/ip-up.txt ip-up bash-2.05# rm ~zaurus/Documents/ip-up.txt
これで準備完了。 後は、実際に電話接続してみてください。
なお、切断時に実行中のtimeadjust.shを終了させるには、 /etc/ppp/ip-down を修正します。 同様の手順で、末尾に以下の1行を追記してください。
/home/QtPalmtop/bin/timeadjust.sh -c
CFタイプのLANカードでの接続時に、このコマンドを実行させるには、 /home/etc/pcmcia/network というファイルから呼び出します。
まず、ターミナルを開いて、以下の通りに実行します。
bash-2.05$ su # bash bash-2.05# cd /home/etc/pcmcia/ bash-2.05# cp -p network network.org bash-2.05# cp network ~zaurus/Documents/network.txt bash-2.05# chmod 666 ~zaurus/Documents/network.txt
ターミナルは立ち上げたままにしておきます。 次に、Linuxザウルスのメモ帳で「本体メモリー」直下にある、networkを開き、以下のように書かれている部分を探します。
start_fn $DEVICE
;;
'stop')
次のように、「start_fn $DEVICE」と書かれている次の行に、timeadjust.shの呼び出し行を追加します。
start_fn $DEVICE
/home/QtPalmtop/bin/timeadjust.sh lan
;;
'stop')
追加が済んだら、保存してメモ帳を閉じます。 次に、ターミナルに戻って、以下の通りに実行します。
bash-2.05# cp ~zaurus/Documents/network.txt network bash-2.05# rm ~zaurus/Documents/network.txt
これで準備完了。 後は、実際にCFタイプのLANカードを使い、ネットワークに接続してみてください。
メモ帳で「本体メモリー」直下にある、「Time Adjust」というファイルを開いてください。 最後にLAN接続またはダイアルアップ接続した際の、時刻合わせの結果がここに出力されています。
まず、ZaurusArchivesからntpdate非改造版をダウンロードしてインストールします。
次に、上の改造版スクリプトを簡単にインストールできるようにしたものが、下のファイルです。 これをダウンロードし、インストールします。
この後、上の自動化の手順を行います。
もし、自動化が「自動化の設定(スクリプト改造・ダイアルアップ)」の方法だけで良い(接続が少し遅くなっても良くて、ダイアルアップ接続の時だけ実行すれば良い)のであれば、上の timeadjust_1.3.0-1_arm.ipk のかわりに下のファイルをインストールします。 これは、「自動化の設定(スクリプト改造・ダイアルアップ)」の設定もインストール時に実施してくれます。
以下はなくても良いものですが、TrayIconCtlAppletをインストールしておくと実行中にはタスクトレイにアイコンが表示されます。 ちゃんと実行されているか、それが終わったかが気になる人はこれもインストールしておくと良いでしょう。
この情報は、「WikiRoom - プロバイダ別NTPサーバリスト」から引用しました
国内在住で利用している ISP が NTP サーバを提供していない場合は以下のサーバーを利用することを推奨します。
# Experimental NTP Servers ntp1.jst.mfeed.ad.jp (210.173.160.27) ntp2.jst.mfeed.ad.jp (210.173.160.57) ntp3.jst.mfeed.ad.jp (210.173.160.87)
asia.pool.ntp.org
ats1.e-timing.ne.jp
ls -l /home/QtPalmtop/bin/timeadjust.sh echo $PATH