Container Linux を初回起動時の状態にする
Container Linux を使っていて、初回起動時の状態に戻す方法を調べる必要があったのでメモ。「初回起動」というのは初めて OS を起動した時の状態のことで、Container Linux の場合は初回起動時かどうかで Ignition や coreos-cloudinit の動きが異なる。つまり、初めて起動した時にのみ関連する処理が実行され、再起動後は処理が実行されないようになっている部分があるようだ。
Container Linux としての初回起動は /boot/coreos/first_boot
にファイルが存在するかどうかで決定される。このファイルが存在する場合は「初回起動」として扱われることがドキュメントでも確認できる。初回起動時にこのファイルは削除されるので、再起動後も「初回起動」としたい場合はこのファイルを再度作成しておけばよい。
これでうまくいく、と思いきやそうではなかった。Container Linux が採用しているプロセスマネージャーの Systemd も実は「初回起動」の状態を持っているので、これもリセットする必要があった。Systemd の初回起動は /run/systemd/first-boot
にファイルが存在するかどうかで決定されるため、このファイルも再度作成しておく必要がある。この仕組みは Systemd のドキュメントにも記載がなくソースコードから読み取ったので、もしかすると今後変更されるかもしれない。
今回は Container Linux と Systemd の状態をリセットすることでひとまずうまくいった。もっと細部までこだわるなら /etc/machine-id
なども削除した方がよさそうだ。