ちょっといろいろ暴言を吐きまくったので反省の意味で少し書いておく。
FreeBSD/mipsのおそらく最後のリリースになるであろう12.3Rが出たので、ZRoute.orgでビルドしていろいろ焼き直しをしている。
以前はamd64の12RでjailとZFSのコマンドで環境を作っていたが13RにしてBastilleBSDに環境を移行した。
改めてビルドしてみるといくつかのportsもどきでCVEのエラーが出たので、本家と同じバージョンにアップデートしてみた。
すでに本家のportsはgcc4では通らないfor(int i=0;;)にパッチを当てていないものがあり、gcc4のサポートは終了しているようだ。
RalinkのSOCを使っているGPS,JJY NTP ST1とおうちモニター(oumon)は結構すんなり入れ替えられた。
入れ替え作業のついでにoumonで照度データを集めるようにしました。
またRalinkのifのrtに若干不安があるので、センサーモジュールからoumonへのhttpはこれまでの1分おきから10分おきに変更しました。
以前はrootfsを小さくするためにntpdとntpdateを分けていたのだが、分けてビルドできなくなったので、一つにした。以前は4M Flashも想定したが、現在はすべて8M以上なのであまり分ける意味がなくなった。
入れ替えはAsia BSD Con 2019で話したリモートアップデートで行った。コンソールつないだりの手間がないので、非常に簡単にできるが、失敗しないかはらはらする。
FireWallとVPNはAtherosのSOCで動かしていてまずVPNサーバの焼き直しをしてみたところまったく機能しなくなった。
dmesgを見てみるとスイッチ(RTL8366SR)の認識に失敗している。
なにか修正の副作用かと思い調べてみたが、なかなかわからない。以前は認識してはずの古いコードでも問題が解消しない。
RTL8366SRのサポートは自分が作ったもので、コードをいじってみたが上手くいかない。NYCBUGの過去のdmesgを検索してみても以前はちゃんと動いていたことが確認できる。
完全に壊れているわけではなく、u-bootでは認識していたり、起動後にスイッチとしては機能している。
どうもRTL8366SRの挙動が変わってしまって認識できなくなったのが原因と思われます。RTL8366SRはReaktekの初期のGigaスイッチであまり作られておらず、ほとんどが後継のRTL8366RBを使っています。
RT2880なモジュールに付いたRTL8366SRも認識できなくなっているので、コードの問題かもしれません。
Gigaなスイッチは消費電力が大きく壊れやすいのかもしれません。RBのタイプでも調子が悪くu-bootからネットアクセスができないモジュールもありました。
そもそもSRとRBはチップを認識するためのIDが別のアドレスにあり、とってもおかしな設計をしていたり、不思議な動きがあったような記憶があります。やっぱり蟹です。
このモジュールは3,4年くらい24x7で使っていて、可能性としてはRTL8366SR自体の問題か、電源などの周辺回路の問題が考えられますが、深くは調べてません。
結局RTL8366RBのモジュールに入れ替えました。同じモジュールがふたつあるので、今回の教訓からコールドスタンバイにしました。
OS入れ替えなどで障害が発生した場合はOSを疑いますが、入れ替えのために電源を落としたりすることで、部品の故障が顕在化する可能性があるような気がします。
OS入れ替えの前に、電源を落としてそのまま起動しても、問題が起きていた可能性が高いです。このような確認をしたほうが良いのかもしれません。
すこし調べてみたところI2CでのRTL8366SRが認識できなくなってるようです。1回はアクセスに成功するのですが2回目以降はダメです。
openwrtをビルドして焼いてみて試したところ、認識できているようです。FreeBSDのI2Cのコードと相性が悪くなったような感じです。とはいえ以前は動いていたコードだしなんだかなって感じです。
CoregaのCG-WLR300GNVもネットワークが使えない。RTL8366RBが見えなくなってるようだ。
我が家で一番故障率が高いのはRT3050が入った白いFONです。 故障はいろいろなパターンがあるような気がします。
- 全く起動しない
- ブート後すぐ固まる
- 起動するが数日すると固まっている
安定しているモジュールもあるので、OSの問題とは考え難い。
かなり熱を持つので、SOCにヒートシンクを貼っているが、それでも壊れる。 いろいろ対策下おかげか、ほとんど壊れなくなりました。
おうちのNTP ST1はすべてこれなのでどうにかしたい。