Windows における NTP 関連情報
ntp の Windows 版バイナリが欲しいと思い、510 Software Group からダウンロードしてきた。ntp の最新版は、4.2.0 だが、ここにある Windows 版バイナリは、4.1.72 だった。インストーラ付きだが、インストールはしたくなかったので、icomp.exe を使って、ファイルだけを取り出した。
ntp 4.2.0 の Windows 版バイナリを自分でコンパイルしてみようと思い、ちょっと調べてみた。「WindowsNT 管理者日記」には、かなり昔のバージョンのコンパイル方法が載っていた。同じようにしてやってみたのだが、ntptrace がコンパイルできなかった。よく見ると、ntp-4.2.0.tar.gz には、ntptrace のソースが入っていなかった。1つ前のバージョンの ntp-4.1.80-rc1.tar.gz を持ってきて、ntptrace 関連の足りないファイルを 4.2.0 にコピーしたところ、一応コンパイルできた。4.2.0 と 4.1.80-rc1 が混ざったキメラ ntptrace のできあがりである。
玄箱で、現在の時刻をミリ秒単位で表示してみたいと思い、ちょっとしたプログラムを書いてみた。(mdate.c)
ntp 関連のプログラムのうち、ntpd など一部のプログラムのコンパイルには OpenSSL が必要になる。そこで、OpenSSL 0.9.7f をコンパイルしてみた。コンパイル方法は、以前と同じ。
OpenSSL がバージョンアップしたので Crypt::SSLeay も再コンパイルしてみた。こちらもコンパイル方法は、以前と同じ。
Crypt::SSLeay のついでに他の Perl モジュールもコンパイルしてみた。Unicode::Japanese がいつの間にか 0.26 にバージョンアップしていたので、それをコンパイルしてみた。VC6 でコンパイルしたところコンパイルエラーが発生した。どうやら最新の Platform SDK をインストールしていないとコンパイルできないようだ。Platform SDK をインストールするのが面倒だったので、とりあえず、ちょっとしたパッチを当ててエラーを回避。
PortForwarder の 2.4.0 が出ていたので、インストール。以前と同じように改造してみた。
FILENAME PortForwarder.exe 0001544C: 01 00
FreeBSD QandA 2255 より。ssh のキーをリモートマシンに転送する方法としては、scp などを使う方法が良く紹介されているが、次のような方法も使える。
% cat ~/.ssh/backup.pub | ssh remotehost 'cat >> .ssh/authorized_keys'
FreeBSD QandA 1579 より。APOP が使えないメールサーバーに安全にアクセスする方法として、POP over ssh という方法がある。早速 PortForwarder を組み合わせて使うことにした。
NTP 関連の情報は NTP - wiki@nothing によくまとまっている。
mfeed の NTP サービスは長い間、試験運用だったが、明日から正式にサービス開始だそうだ。
NTP の本家である http://www.ntp.org/ から、ntp 4.2.0 をダウンロードしてきた。ntp のコンパイルには OpenSSL が必要なようだ。
Debian で、apt-get を使ってインストールしたパッケージの確認方法が分からなかったので、調べてみた。dpkg コマンドを使えばいいらしい。
dpkg --get-selections
玄箱で xterm を実行しようとすると、
xterm: Error 1, errno 13: 許可がありません
というエラーが出て起動しないのが以前から気になっていた。「玄箱を使い倒す」に解決策が載っていた。/etc/fstab を書き換えればよいらしい。試してみたところ、無事 xterm が起動するようになった。
ELM - 電子工作掲示板 #3800 の USB−シリアル変換器はおもしろそう。ちなみにチップの型番 CP2101 で検索してみたら、次のような製品、情報が出てきた。
玄箱で、起動時に adjtimex を実行するように設定した。まずは、apt-get で adjtimex をインストールしたときに書き込まれる、/etc/init.d/adjtimex を次のように書き換えた。(adjtimex.diff) 次に、以下のようにして、adjtimex の実行順序を遅らせた。
mv /etc/rsS.d/S20adjtimex /etc/rsS.d/S99adjtimex
玄箱の /etc/ntp.conf をいじって、ドリフトファイルを利用しないように設定変更。
昨日のサイトの情報を元に、玄箱の時計の狂いをチェックしてみることにした。以下のコマンドで、1時間で時計がどれだけ狂うかを4回測定。
# ntpdate -b ntp2.jst.mfeed.ad.jp; sleep 3600; ntpdate -b ntp2.jst.mfeed.ad.jp 32.446624 * 1000000 * 3600 / (3600 - 8.336229) = 32521932.4 32.446625 * 1000000 * 3600 / (3600 - 8.324798) = 32521829.9 32.446624 * 1000000 * 3600 / (3600 - 8.351301) = 32522068.8 32.446585 * 1000000 * 3600 / (3600 - 8.335641) = 32521887.9
平均を取って、decrementer frequency = 32521929.75 Hz と出た。この値を元に、adjtimex を設定すればよいようだ。
関連 URL
この前のメモに書いた「[news] 個人向け NAS 関連」をよく見ると、2002/02/09 に書いた「S.M.A.R.T. is SMART! 開発準備編」と同じ人のサイトだったようだ。(S.M.A.R.T. is SMART!) このサイトからリンクされていた MSDN の S.M.A.R.T. サンプルプログラムがいつの間にかなくなっていた。以前ダウンロードしてあったはずだが手元に見あたらない。困ったことだ。
玄箱の時計の精度はかなり悪いらしい。以下関連情報。
2ch の 【偽造HDD】5A320J0、その性能と対策スレ【Maxtor】 で ICC が紹介されているのを発見。偽造だかなんだか知らないが、ICC はそういうことには使えないと思うのだが、気になるところではある。
ICC のドキュメントの表記で以前から気になっている点があったのを、これを機に修正することにした。
Maxtor 偽造 HDD 関連情報↓
以前から S.M.A.R.T. 情報を取得するソフトはないものかと思っていたのだが、たまたま HDD Health というソフトを知った。S.M.A.R.T. をうまく使えば、HDD の状況を知り HDD の寿命を予測したりできるようになるわけだが、果たしてどの程度役に立つのか気になるところである。ちなみに、hddtemp も S.M.A.R.T. を利用して HDD の温度を取得している。
IBM dW : Linux : メモリー管理の内側 - Japan ← malloc, free の実装方法
@IT:止められない基幹業務サーバの管理対策 第1回 - Page1 ← 個人でサーバを動かす際にも役に立つはず。
JF のスクリーンショットを撮ってみた。(jf_kuro-box.png)
「Ring Server Project が NTP サーバのサービスを開始」だそうだ。ntptrace でアクセスしてみたところ、以下のようになった。
$ ntptrace ntp.ring.gr.jp ring.aist.go.jp: stratum 3, offset 1.500329, synch distance 0.02557 ring.nict.go.jp: stratum 2, offset 1.486153, synch distance 0.01242 sntp1.nict.go.jp: stratum 1, offset 1.486544, synch distance 0.00000, refid 'PPS'
壊れた CRT ディスプレイの代わりとして、I-O DATA LCD-AD174CB を \36,980 で購入。今回は以下の条件で購入を決めた。
PC-98 対応の液晶ディスプレイは、もはや EIZO ぐらいしか出していないと思っていたのだが、意外にも最近の I-O のディスプレイはほとんどが PC-98 対応のようだ。(他にも SHARP のディスプレイも PC-98 に対応しているようだ。I-O がどこの液晶パネルを使っているのか少し気になる。) この条件で最も安いものがこれだった。ちなみに +\2,100 にてドット抜け交換保証というものがあったが、交換するときの手間を考えると面倒そうでやめておいた。帰宅してからすぐにチェックしたところ、幸いなことにドット抜けはなかった。
店頭で「玄箱で遊ぼう!!」を見たところ、第2版第2刷が入荷しており、日本語環境と X の記事が追加されていた。買うのはもう少し待てばよかったかな?
[news] 個人向け NAS 関連
Type-g Platform ← シリアルコンソールを引き出すなど、deep な改造。
かなり前に中古で買った CRT ディスプレイ (NEC MultiSync 17VL / PC-KM173R2) が壊れてしまった。電源ボタンを押してもうんともすんとも言わない。実はこのところ、ディスプレイの調子が悪くて、ときどきパシッと音がすると同時に画面が一瞬消えるという現象が発生していたのでそろそろ寿命かとは思っていたが、ついに逝ってしまったようだ。今度の土日にでも LCD ディスプレイを買ってくるか。ところで、この壊れたディスプレイはどうやって処分したらいいんだ?
X-Deep/32 という X サーバを試してみた。これは元々は製品だったのだが、現在はフリーソフトとして公開されているとのこと。玄箱上で JF を動かして、X-Deep/32 で表示してみたのだが、これを使っても日本語は文字化けしてしまった。ついでに少々挙動が怪しい。ときどきキー入力が効かなくなってしまうことがある。さらに、メニューアイテムの一部がどういうわけか単独のウィンドウとして表示されることがある。
Java で日本語が化ける件をもう少し調査。Linux 上の Java で日本語を表示できるようにするための設定については、font.properties.ja がよくまとまっている。で、これを見ながらいろいろ試してみたが、相変わらずうまくいかない。
hddtemp というソフトで HDD の温度を調べることができるらしい。HandsOn Vol.22「/Vmag.流「玄箱」パーフェクトマニュアル」インストールパッケージ集からバイナリを入手して試してみた。同梱されているデータベースの内容が古かったらしく、6B200P0 には対応していないというメッセージが表示された。(それでも一応温度は表示されたが。) hddtemp の本家のサイトにあった最新の hddtemp.db は 6B200P0 にも対応していた。
「玄箱で遊ぼう!!」のサポートページに日本語環境と X のインストール方法に関する記事が追加されていた。
玄箱の OS を Debian に入れ替えることにした。「玄箱で遊ぼう!!」にしたがってやったが、ちょっと問題発生。P.158 には、「このインストールの方法の、もうひとつの大きな利点は、必要最小限の変更しかしないことである。たとえば、/mnt/share ディレクトリのファイルがそっくり残っている。」と書かれているが、玄箱/HG の場合には、/mnt/share の中身も消されてしまう。また、その本の通り、Samba の設定をそっくりそのまま保存して、Debian 化後に上書きしたのだが、Win98 から共有フォルダにアクセスしたら、パスワードが必要になってしまった。(Debian 化前にはパスワードはいらなかったと思うのだが・・・。) 結局、smbpasswd -a で Win98 のユーザー名を登録しておくことにした。
Debian 化によって、apt-get コマンドで簡単にパッケージを追加できるようになったのは便利である。
ちなみに、玄箱の IP address は語呂合わせで、192.168.0.96 にしておいた。
次に X アプリが使えるか試してみた。X アプリとして apt-get で kterm をインストールしてみた。PC 側で以下のようにして Cygwin/X を起動しておき、
$ startxwin.sh $ xhost +kuro-box
玄箱で、
$ export DISPLAY=<Cygwin/X を起動しているマシンの IP address>:0 $ kterm&
としたところ、PC 上に kterm の画面が表示された。全くトラブルがなく、ちょっと拍子抜けした。
今度は、昨日のページにしたがって Java を入れてみた。次のような簡単な GUI プログラムを書いて (frame.java)、実行してみた。
import java.awt.*; import java.awt.event.*; public class frame extends Frame { public static void main(String[] args) { frame f = new frame(); f.setSize(500, 300); f.show(); } public frame() { super("frame"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); } }
すると、以下のようなエラーが表示されて動かなかった。
Exception in thread "main" java.lang.ExceptionInInitializerError at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method) at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:175) at java.lang.Class.forName1(Native Method) at java.lang.Class.forName(Class.java:180) at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:91) at java.awt.Window.init(Window.java:268) at java.awt.Window.<init>(Window.java:312) at java.awt.Frame.<init>(Frame.java:431) at fr.<init>(frame.java:12) at fr.main(frame.java:6) Caused by: java.lang.NullPointerException at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2159) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1994) at java.lang.Runtime.loadLibrary0(Runtime.java:824) at java.lang.System.loadLibrary(System.java:908) at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:76) at java.security.AccessController.doPrivileged1(Native Method) at java.security.AccessController.doPrivileged(AccessController.java:287) at sun.awt.font.NativeFontWrapper.<clinit>(NativeFontWrapper.java:68) ... 10 more
何が問題なのかなかなか分からなかったが結局次のようにして解決できた。まず、/usr/local/java/jre/lib/graphics.jar を解凍して、sun/awt/font/NativeFontWrapper.class を jad で逆アセンブルしてみたところ、今回のエラーの原因と思われる部分が見つかった。
AccessController.doPrivileged(new LoadLibraryAction("fontmanager"));
fontmanager という共有ライブラリを読み込もうとしてエラーになっているようだった。そこで、このライブラリの実体と思われる、/usr/local/java/jre/bin/libfontmanager.so を覗いてみると、libstdc++.so.5 という文字列が見つかった。/usr/lib には libstdc++.so.5 が見あたらなかったので、何とかこれを用意してみることにした。
# apt-get install libstdc++3 # cd /usr/lib # ln -s libstdc++.so.3 libstdc++.so.5
これで、無事 frame.java が起動できるようになった。
次に、(実はこれが最大の目的であったのだが) JF を玄箱で動かしてみた。無事起動して、ファイラっぽい画面も表示されたのだが、残念ながら日本語が文字化けしていた。Cygwin/X の問題なのか、Java の問題なのかよく分かっていない。とりあえず関連のありそうなサイトをいくつかメモしておく。
とりあえず、ここまでの時点で apt-get でインストールしたものを列挙しておくと、以下のようになった。
apt-get update apt-get upgrade apt-get install samba apt-get install swat apt-get install ntp apt-get install less apt-get install lv apt-get install gcc apt-get install fdclone apt-get install libc6-dev apt-get install kterm apt-get install xfonts-shinonome apt-get install xbase-clients apt-get install libstdc++2.10 apt-get install libncurses5 apt-get install libncurses5-dev apt-get install xvfb apt-get install libstdc++3 apt-get install sudo apt-get install ssh
IBM のサイトをさまよっていたら、玄箱に関する記事(英語)を発見。ちょっとびっくり。
玄箱に ntp を入れてみた。ntp サーバには、ntp3.jst.mfeed.ad.jp, ntp2.jst.mfeed.ad.jp を指定しておいた。「玄箱で遊ぼう!!」では ntp サーバの例として福岡大学を挙げていたが、最近福岡大学はアクセスが集中していて困っているそうである。
玄箱で Java が使えるかどうか興味がある。調べてみたら、「玄箱でJava - ECCO」というページを発見。IBM から PowerPC 用の JDK 1.4.2 が入手できるようだ。ユーザー登録後ログインして、IBM SDK for 32-bit iSeries/pSeries (バージョン 142 SR1a) を選択して、ようやく IBMJava2-SDK-142.ppc.tgz がダウンロードできた。
玄箱で(Java も含めて)いろいろやるなら、やはり OS を Debian などに入れ替えた方がいいのだろうか。
玄箱をネットワークドライブに割り当て、HDBENCH 3.30 (容量 20MB) で速度を測ってみた。
Client | Read | Write | Copy | Interface |
---|---|---|---|---|
st6e | 9291 | 4998 | 4540 | PCI (100BASE-TX) |
Ls312 | 1432 | 1884 | 3090 | PCCard |
Nr150 | 5504 | 2140 | 3232 | CardBus |
cf-r2c | 2231 | 1327 | 1385 | IEEE 802.11g |
やはり大してスピードは出ていない。これを機に 1000BASE-T 環境を導入するか?
玄箱/HG \17,980、MAXTOR 6B200P0 (200GB) \10,980、NEXcell 単4 NiMH 900mAH * 2 \358、「玄箱で遊ぼう!!」。玄箱/HG が休日特価で安かったので買ってしまった。1000BASE-T 環境がないので HG である必要はあまりなかったが、通常版よりも \3k 高い程度だったので、まあいいだろう。玄箱を使うには、HDD も必要なので、容量単価が一番安いものを購入。今まで買ったことのある HDD は全て IBM か HGST 製だったが、今回初めて他のメーカーのものに手を出してみた。果たして吉と出るか凶と出るか。
SpringM でディレクトリのタイムスタンプが変更できるようになった。Win9x でディレクトリのタイムスタンプが変更できるファイラはほとんどないはず。
touch の中核部分のみを抜き出して、DLL を作ってみた。これで、簡単に他の Win32 プログラムからもディレクトリのタイムスタンプを変更できるようになる。さて、SpringM に組み込んでみるとするか。
Win9x でもディレクトリのタイムスタンプを変更できるツールにはどんなものがあるか少し調べてみた。EzFileAge + Wfut16.dll/Wfut32.dll というものを見つけた。EzFileAge 単体では、一時的にシステムの日時を変更する方法で、ディレクトリのタイムスタンプを変更するようだが、Wfut16.dll/Wfut32.dll を使うと普通の方法(?)でタイムスタンプを変更するようだ。Wfut16.dll/Wfut32.dll は、元々は WinFD の機能拡張用の DLL らしい。おそらく、touch とは異なって、フラットサンクなどのまっとうな方法を使って Int 21h Function 7143h を実行しているのだろう。
久しぶりに Windows プログラミングの本を1冊購入。買ったのは、「プログラミングのスパイス」。Path API という便利なものが存在していたということを初めて知った。ちょうど今作っている自作 touch コマンドにも使えそうだ。Path API は IE4 以降でなければ使えないようだが、さすがにこの制限は今さら気にする必要はなかろう。
以前の実験結果を元に、Win9x でもディレクトリのタイムスタンプが変更可能な touch コマンドを作ってみることにした。
Win9x でディレクトリのタイムスタンプが変更可能なツールはほとんど存在していない。あったとしても、一時的にシステムの日時を変更して、新たにディレクトリを作成することでタイムスタンプを変更したように見せかけるようなものだったりする。
DLL にして、SpringM から呼び出せるようにしてみるのもおもしろいかもしれない。
SpringM でディレクトリのタイムスタンプを変更できるようにできないか解析中。NT 系ならばちょっとした手直しで可能になりそうだが、9x 系で実行した場合にどうするべきかが問題だ。
CF-R2C には、CD-ROM ドライブがないので、CD-ROM ドライブを使いたいときは、デスクトップ機の CD-ROM ドライブを共有して、それを使うことが多い。しかし、Windows の共有では、ただのネットワークドライブとして扱われてしまい、CD-ROM ドライブとして扱うことはできない。リモートマシンの CD-ROM ドライブを、ローカルの CD-ROM ドライブとして扱うことのできるソフトがあれば便利かもしれない。実際にそんなソフトを作るとなったら、仮想 CD-ROM ドライブのドライバ、ネットワーク、CD-ROM ドライブの直接制御方法などに関する知識が必要になるだろう。おもしろそうだが、難易度はかなり高そうだ。
先月の spam メールの集計結果。着信拒否になった spam が少なくとも 4697通。着信拒否にならなかった spam が 266通。そのうち Spam Mail Killer で削除できた spam は 263通(98.9%)。先月までに比べると spam の量自体が少し少なかった。