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アドレスなど)に基づいてブートローダにそれを生成させることができます。
答え2
あなたは矛盾した概念の混合を求めています。永続性は状態を意味しますが、システムは状態の非保存を望んでいます。
上記のオプションに加えて、「Union」または「Overlay」ファイルシステムの使用を検討することもできます。これは、オペレーティング・システムに最初に永続ファイル・システム内のファイルを検索し、そのファイルが存在しない場合は、ステートレス・ファイル・システムを検査するように指示します。これは、LiveCDが実装される方法で、読み取り専用メディアのファイルを変更する機能を意味します。
答え3
簡単にrootfs read-write(mount -o remount,rw /
)を再マウントし、ランダムに生成されたコンピュータIDをファイルに保存して/etc/machine-id
問題を解決しました。