UBI/UBIFSからロードされる読み取り専用のルートファイルシステムを備えた組み込みLinuxマシンがあります。
デバイスが起動するたびに、新しいsystemdマシンIDが作成されます。これは、 ドキュメント を読んで理解できます。
マシンIDは通常、システムのインストール中にランダムなソースから生成され、その後のすべての起動で一定に保たれます。オプションで、ステートレスシステムの場合、空であることが判明した場合、起動時の実行時に生成されます。
Systemd machine-id-setup.c ファイルを読むことで、/ etc/machine-idにmachine-idを生成しようとするという意味でどのように機能するかを理解しています。それは存在しません。それが失敗し、パーティションが読み取り専用の場合、/ run/machine-idに生成され、/ etc/machine-id(シンボリックリンクではありません)にマウントされます。
質問があります、ステートレスデバイスの固定マシンIDを持つことができますか?私が持っている2つのオプションは次のとおりです。
1)マシンIDを不揮発性ストレージ(外部/ eMMC)に保存します。
したがって、デバイスが少なくとも1回初期化され、machine-idが不揮発性記憶媒体に保存されたので、起動シーケンスは次のようになります。
2)systemd machine-id-setup.c ファイルを変更し、machine-idが生成、保存、保存されるハードコードされたディレクトリを変更します。ただし、systemdシステムファイルを変更する必要があるため、このソリューションは避けたいと思います。
誰かがこれについていくつかの洞察を共有できますか?
ありがとう
最も簡単で最良のオプションは、おそらくカーネルコマンドライン変数systemd.machine_id
公式ドキュメントによる として渡すことです。本当に凝ったものにしたい場合は、実行しているSoCの本当にユニークなもの(シリアル番号、MACアドレスなど)に基づいてブートローダーに生成させることができます。
矛盾する概念を混ぜ合わせようとしています。永続性は状態を意味しますが、システムをステートレスにする必要があります。
あなたが言及したオプションに加えて、「ユニオン」または「オーバーレイ」ファイルシステムの使用を検討することもできます。これにより、OSは最初に永続ファイルシステム上のファイルを検索し、ファイルが存在しない場合はステートレスファイルシステムを確認するように指示されます。これがLiveCDの実装方法であり、明らかに読み取り専用メディアであるファイルを変更できるというほのめかしを与えます。
Rootfsの読み取り/書き込み(mount -o remount,rw /
)を再マウントし、ランダムに生成されたマシンIDを/etc/machine-id
ファイルに保存するだけで、この問題を解決しました。