ヘルスゲートと自動ロールバック
最終更新
ヘルスゲートは更新の最終段階です。新バージョンを入れてデーモンを再起動した後、ロボットが健全かを確認し、通らなければ自動でロールバックします。
更新の各段階
preflight → downloading → verifying → swapping → health_gate
どの段階でも失敗しうるものの、失敗の結末はすべて「ロボットは以前動いていたバージョンに戻る」であって、「半死半生になる」ではありません。
開発にとっての意味
つまり、自分でビルドしたものを入れるのは安全な操作です。scripts/dev-push.sh が入れるものもまったく同じ経路を通ります。署名、成果物のハッシュ、互換性、ヘルスゲート、自動ロールバック。違うのは署名した鍵だけです。
起動しないビルドは取り消され、ボードを文鎮にすることはできません。
バグに見える成功例
ゲートが正常に働いているとき、それが失敗のように見えることがあります。
開発ボードで --ref を付けずに apply daemon すると安定版が入ります。その安定版が、いまボード上に unit ファイルを持つデーモンより古ければ、unit の ExecStart は旧版に存在しないバイナリを指し、再起動が失敗してロールバックします。
見えるのは「更新に失敗した」ですが、実際に起きたのはゲートに助けられたことです。