Walrus,Visit. | 一覧 | 検索 | 更新履歴(RSS) | 新規作成
はてなブックマークに追加 はてなブックマークを表示 編集 | 編集(管理者用) | 差分

Linuxザウルス/自動で時計合わせ

編集

Linuxザウルスでのntpdateの自動化。

ntpdateコマンドのipkファイルの配布が始まって、少し簡単になりました。 あわせて、ip-upの編集をメモ帳でやるようにしたので、さらにトラブルが減ってくれないかな、と期待しています。

SL-B500については大怪獣もぎゃさん、ぬりかべ魔人さんから動作報告をいただきました。

ページ作成:塚本牧生

SL/2nd.での時計合わせ。

編集

SL-C700では、rdateコマンドが失敗するな、と思っていたのですが、ZaurusArchivesでntpdateというコマンドのバイナリが配布されていました。 これを使うと、Linuxザウルスの第2世代、SL-C700とSL-B500でも時刻あわせができます。

ntpdateのインストール。

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点。

  • /usr/bin/ntpdate の部分は、上で「which ntpdate」を実行した時のレスポンスとあっているか確認してください。
  • clock.nc.fukuoka-u.ac.jp の部分は、上のntpdateの動作確認が成功したときのサーバ名に変えてください。

次にターミナルを開いて、以下の通りに実行します。

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回分程度保持することだけを実現するスクリプトを作りました。 これを、以下のような点で改造します。

  • SL-A300(メインユーザーはroot)でも使えるように、ログファイルの出力先を自動で切り替える。
  • TrayIconCtlAppletを使って、実行中はタスクトレイにアイコンを表示させる。
  • NTPサーバーのリストを~/Setting/timeadjust.confに持っておき、毎回接続先を順番に変えていく。

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)。

NetHelperAppletを使う場合は、以下の手順で設定します。 まず、以下のパッケージをインストールします。

  • NetHelperAppletをインストールする。
  • sudoをインストールする。
  • /home/zaurus/Settings/nethelper.conf を開く。

次に、ターミナルを開いて、以下の通りに実行します。

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カード)。

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接続またはダイアルアップ接続した際の、時刻合わせの結果がここに出力されています。

自動化の設定を削除する。

上の「自動化の設定」と同じ手順を踏んで下さい。 途中、メモ帳でip-upまたはnetworkを開いた際に、以下の行が既に書かれているはずですので、追記する代わりにこの行を削除してください。

/home/QtPalmtop/bin/timeadjust.sh ???

自動で時計あわせ クイックスタート

まず、ZaurusArchivesからntpdate非改造版をダウンロードしてインストールします。

次に、上の改造版スクリプトを簡単にインストールできるようにしたものが、下のファイルです。 これをダウンロードし、インストールします。

この後、上の自動化の手順を行います。

もし、自動化が「自動化の設定(スクリプト改造・ダイアルアップ)」の方法だけで良い(接続が少し遅くなっても良くて、ダイアルアップ接続の時だけ実行すれば良い)のであれば、上の timeadjust_1.3.0-1_arm.ipk のかわりに下のファイルをインストールします。 これは、「自動化の設定(スクリプト改造・ダイアルアップ)」の設定もインストール時に実施してくれます。

以下はなくても良いものですが、TrayIconCtlAppletをインストールしておくと実行中にはタスクトレイにアイコンが表示されます。 ちゃんと実行されているか、それが終わったかが気になる人はこれもインストールしておくと良いでしょう。

推奨公開 NTP サーバ

この情報は、「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