OpenNTPD

職場での時刻同期をするために,これまではFreeBSDでカーネルにPPSドライバを入れて再コンパイルしたうえで,PPSとNMEAコードを出力できるGPSコントローラの出力をRS-232C経由で受け取ってGPS信号に同期したntpサーバーを運用していました。このサーバーにはいろいろな仕事をさせているのですが,ぼちぼち引退をしないといけないお年頃,ということもあって,ntpサーバーの更新も考えなくてはならなくなりました。自分で構築したカーネルを使っていると,freebsd-updateでアップデートしたりするときにどう考えても不便ですので,この機会にntpサーバーを切り離しで専用機にまかせることにしました。

そんなわけで,GPSに同期するntpサーバーの専用機をaliexpressで適当に見繕って輸入をしてみました。キノコ型のGPSアンテナも,それを机の上に置くための足もつているし,webインターフェースで設定もできて超お手軽です。送料が無闇に高かったのでちょっと怯みましたが,もともとたいして高いものでもないので調達しました。アンテナを窓際に適当にチャチャっと設置してwebインターフェース経由でIPアドレスを設定するとあっという間に使えるようになります。

職場に転がっているクライアントからntpサーバーにアクセスするとちゃんと時刻同期をするのでちゃんと動いているようです。もちろん,時刻の精確さを調べる術がないので,まぁ,そんなもんか,って感じです。

ところが新規にインストールしたFreeBSD 13.3Rと14.0Rはどういうわけかntpq -pで同期の状態を調べるとステータス(というか,参照識別子=refid)が.INIT.となっていつまでも同期できません。もうちょっと厳密に言うと,13.3Rのほうは.INIT.のままですが,14.0Rのほうは長い間放置していると.XFAC.に変わります。どちらにしてもntpサーバーと同期できていない,ということには変わりはありません。このようなrefidの場合,普通は,クライアント側の時刻がサーバーと1000秒以上ずれている,とか,そもそもネットワーク的にサーバーに到達できないとか,そういうことが原因のようです。

もちろん,ntpdateで強制的に時刻同期してからntpdを起動しても時刻できない,という症状は改善しませんし,ntpサーバーへ普通にpingは通ります。ntpサーバー側のwebインターフェースで接続してくるクライアントを見ることができるのですが,ちゃんとクライアントから接続されていることが確認できます。そのうえ,FreeBSDの古いバージョン(9.1Rとか9.2Rなど)のntpdからであれば問題のntpサーバーに接続して普通に同期ができています。かなり頑張ってあれこれやったのですが,結局解決できませんでした。ただ,nfsサーバーの時計が狂っていると,ファイルのタイムスタンプが無茶苦茶になってたいへんなことになるのは目に見えているので,時刻同期はどうしてもやらねばなりません。

最悪,crontabでntpdateを起動して強制的に時刻同期させる,という選択肢もあるのですが,それだと時刻が大きくずれたタイミングの前後でファイルを書き込んだりするとややこしいことになってしまいます。

そこで,別の選択肢として,OpenNTPDをインストールしてみることにしました。あまり情報がないのですが,FreeBSD上でOpenNTPDを設定した,という人のブログがあったのでありがたく参考にさせていただきました。

備忘録として整理をしておきます。

1. pkg install openntpd
2. /usr/local/etc/ntpd.confに
server hoge.co.jp
という具合にntpサーバーの名前を設定する。いろいろ設定できるようだけれども他のことは全て放り出して,この1行だけ書く。
3. /etc/syslog.confに
!ntpd
*.* /va/log/ntpd.log
を追加
4. touch /var/log/ntpd.log
5. chmod 644 /var/log/ntpd.log
6. /etc/newsyslog.conf.d/ntp.confを作成して
/var/log/ntpd.log root:wheel 644 5 100 * CEXp
という行を書き込む。
7. service syslogd restart
としてsyslogdを再起動。
8. /etc/rc.confに
openntpd_enable="YES"
を追加して,ntpd_enableの行はコメントアウト(もし以前に書いていれば)
9. service openntpd start

以上でopenntpdが動きます。ntpq -pのような便利なコマンドはないので,動作状況はログを見るしかありません。/var/log/ntpd.logを見ると
ntp engine ready
peer xxx.xxx.xxx.xxx now valid
clock is now synced
adjusting clock frequency by xx.xxxx to xx.xxxxx
....
と云う具合にログが増えていきます。clock is now syncedが書き込まれるまでに5分くらい,adjusting...が書き込まれるまでにはさらに20分以上かかりますので気長に待つしかありません。

どのくらい時刻がずれているか,というような情報を得る方法はよくわかりませんが,ログを信じるならばたぶんちゃんと動いているのだと信じるしかありません。ntpサーバー側のwebインターフェースでもクライアントからアクセスしてきていることは確認できます。確認できたからといってちゃんと同期していたわけじゃなかったですからなんとも言えませんが。

あまりハマりそうにないところでずいぶんとハマってしまいました。うーむ。

Windows 11のクリーンインストール

BeelinkのSER 7 7840HSというミニPCを事務処理用に導入したので,職場のボリュームライセンスのWindows 11をインストールしようと考えました。Windowsのライセンスがあれば職場のボリュームライセンスをインストールしてよい,ということになっているのでもともと入っていたOSは即座に消去してしまうつもりでした。

手元に転がっている安物のUSB 2.0接続の8GBのUSBメモリにインストーラを焼いてブートをしたところ,キーボードの設定まではいくのですが,そのあと「必要なメディアドライバーがありません」というよくわからないエラ〜メッセージが表示されてそれ以上先に進むことができません。検索をしてみると同じエラ〜でインストールができない,という例はあるのですが,原因は千差万別のようでよくわかりません。Windows上でmicrosoftのツールを使ってインストールイメージを焼かなくてはダメだとか,ISOイメージが破損しているからだとか,ダブルレイヤーのDVDに焼いて起動すればOKだったとか,いろいろです。結局,私の場合は,こちらに書かれているのと同じ原因でUSBメモリがダメだったようです。amazonで調達した安物だったのですが,バッファローの32GBのUSB 3.0接続のものにインストーラを焼いて起動したら,何事もなかったようにインストールに成功しました。

どういうわけかわかりませんが,インストーラはUSBメモリを選ぶようです。

もともとはいっていたOSはすっぱり消してしまったのでドライバが何一つなく,800x600の昔懐かしいSVGAの解像度しかないので,最初の設定画面が醜くてたいへんですが,いったんログインできるようになれば,AMDのサイトからRyzen 7 7840HS用チップセット用のドライバをインストールすれば4K解像度にも自動であわせて表示してくれるのでごく普通に使えるようになります。

かなりハマりましたが,USBメモリがダメ,というのはちょっと想定外のオチでした。

なお,BeelinkはBIOSに入るのはDelキー,ブートメディアの選択はF7というはじめての組み合わせで,インストール以前にBIOSに入るところできっちりハマってしまいました。Windows 11のインストールなんて楽勝だと思ってナメてましたが,いろいろとハマりどころ満載でした。

うーむ。