隠居日録

隠居日録

2016年(世にいう平成28年)、発作的に会社を辞め、隠居生活に入る。日々を読書と散歩に費やす

FreeBSD 14.0への更新ではまる

公式のリリースアナウンスは出ていないが、既に更新できる状態になっているようである。

手元にNanoPI NEO2、RaspberryPI 4、ラップトップPCと3台のFreeBSDマシンがあり、順次更新していく予定である。まず手始めにNanoPI NEO2を更新してみた。他の2台はzfsを使っていて、リリースノートにあるようにブートローダーの更新が必要だからだ。未だにzpool upgradeは自分で実行するのか、freebsd-updateが実行するのかよくわかっていない。自分としてはNanoPI NEO2の更新は問題なくできるだろうと思っていたのだが、見事にはまってしまった。更新作業は土曜日から始めたのだが、ファイルのダウンロードだけでも5~6時間ぐらいかかった。一回目のfreebsd-update installからshutdownは問題なく実行できて、NanoPI NEO2も立ち上がって来たので、2回目のfreebsd-update installを実行して、再びshutdownしたのだが、立ち上がらくなってしまった。この時点で土曜日の夜だったので、日曜日に持ち越した。

日曜日に14.0のSDカードイメージをダウンロードし、このイメージを基に起動メディアを作成して立ち上げると、当然起動してくる。sshでログインして、/devを確認するとディスクも存在するし、リードオンリーでマウントすると問題なくできた。この時点で何が起きているかわからなくなった。実はディスクはGEOM journalにしているので、これが問題なのかと思い、急遽普通のUFSのディスクを用意して、そのディスクをrootfsになるように設定して起動すると、これも問題なく起動してくる。こうなるとますますGEOM journalが怪しいのだが、FreeBSDが立ち上がると、アクセスできるので、何とも不思議な状況だった。そこで次は"kenv"と"reboot -r"を利用して、起動後rootfsをGEOM journalのディスクにルートファイルシステムを切り替えて起動してみたのだが、これだと起動できない。

ここまでに数時間費やしている。もうあまり解決するアイディアがないので、もしかするとファイルシステムがおかしくなったのかと思い、fsckを実行すると、エラーがポロポロと出てきた。それらを修復して、再度試してみると、起動してきた。もっと早くfsckを試すべきだった。

次にNanoPI NEO2上のjail (bastille) を更新してみた。一見問題なく更新できているように見えるし、jailも起動できるのだが、bastille consoleが実行できない。ログを調べてみると、opieが見つからないとなっている。リリースノートを見るとopieは14.0で削除されたようだ。どうも、これはbastilleの問題で、確かにあの更新方法だと/etcのファイルは更新されない。githubに既にissueが上がっていた。

RaspberryPI4ではメールとかウェブサーバーはjail上で動かしているので、安全に確実にjail環境を更新できないと14.0には移行できない。だから、RaspberryPI4の更新はしばらく先になりそうだ。

2023年11月22日追記
jailに関しては、etcupdateで更新できそうだ。ただし、この場合はソースコードを持ってこなければいけない。あるいは誰かが更新ファイルをtarに固めてどこかに置かなければいけないけれど、信頼が置けるファイルにしないといけないので、tarファイルの方はローカル以外では使えないだろう。testという名前のjailがある場合は、以下のコマンドで更新できる。log1.logとlog2.logはログファイル。

etcupdate -D /usr/local/bastille/jails/test/root -L log1.log | tee log2.log

公式のgithubのissueに現時点で動きはない。

2023年11月24日追記
色々etcupdateを試してみて、14.0のソースコードをダウンロードし、bastille/releases/14.0-RELEASE/usr/srcの配下に展開し、jail環境でオプションなしでetcupdateを実行するのが良いような感じがする。host環境で-dオプションとか-sオプションを指定して更新を試みようとするも、更新してくれない現象に遭遇した。何度試しても更新しないので、etcupdateのバグのような気がするが、詳細は不明。-sの方に何か問題があるような気もするが、調査方法もよくわからないので、深掘りはしないつもり。
実はtarballを作り、それをもとに更新しようと試していたのだが、tarballはできるものの、更新ができなかった。jail環境ならtarballもできるし、それをもとに更新もできるようだ。