ステートレス(UBI/UBIFS) 組み込みLinux環境の永続システムマシンID

ステートレス(UBI/UBIFS) 組み込みLinux環境の永続システムマシンID

UBI / UBIFSから読み込まれた読み取り専用ルートファイルシステムを備えた組み込みLinuxシステムがあります。

デバイスが起動されるたびに、新しいシステムIDが作成されます。文書:

コンピュータIDは通常、システムのインストール中に任意のソースから生成され、その後のすべての起動で変更されません。または、ステートレスストレージシステムの場合、空であることが確認された場合は、最初に起動されたランタイム中に作成されます。

systemd 読み取りからマシンIDの設定cファイルがどのように機能するかについてのアイデアがあります。存在しない場合、/ etc / machine-idはマシンIDを生成しようとし、失敗し、パーティションが読み取り専用の場合は作成しようとします。 /run/machine-id でビルドし、/etc/machine-id(symlink ではない)にインストールします。

問題は、ステートレスストレージデバイスに固定のコンピュータIDを持つことができるかどうかです。私が持っている2つのオプションは次のとおりです。

1)コンピュータIDを不揮発性メモリ(外部/ eMMC)に保存します。

  • 起動後、/etc/machine-idが存在することを確認してください。
  • それ以外の場合(通常どおり)、systemdサービスを介してシステムIDを生成したサービス/マウントを引き続き渡します。
  • 新しいサービスファイル:コンピュータIDを作成したら、この文字列をメモリ/ NANDにないパーティション、つまり不揮発性(eMMC)にコピーします。

このようにして、デバイスが複数回初期化され、コンピュータIDが不揮発性記憶媒体に記憶された。これで起動順序は次のようになります。

  • デバイスが不揮発性パーティションを起動してマウントします。
  • 不揮発性コンピュータIDがあることを確認してください(上記の手順1と同じ)。
  • ファイルが存在するため、/etc/machine-idにマウントします。
  • /etc/machine-id 番号を処理するサービスファイルはすでに存在するため、実行されません。

2) システム修正マシンIDの設定cファイルを作成し、コンピュータIDが作成、保存、および保存されるハードコードされたディレクトリを変更します。しかし、この方法はシステムシステムファイルを変更する必要があるため避けたいと思います。

誰でもこれについての洞察を共有できますか?

ありがとう

ベストアンサー1

最も簡単で最善の選択肢は、おそらくカーネルコマンドライン変数に渡すことです。systemd.machine_id 公式文書によると。本当にクールにしたい場合は、実行中のSoC固有の情報(シリアル番号、MACアドレスなど)に基づいてブートローダにそれを生成させることができます。

おすすめ記事