組み込み Linux デバイスで実行するアプリケーションがあり、時々ソフトウェアに変更が加えられ、場合によってはルート ファイル システムやインストール済みのカーネルにも変更が加えられます。
現在の更新システムでは、古いアプリケーション ディレクトリの内容は単純に削除され、新しいファイルがその上にコピーされます。ルート ファイル システムに変更が加えられると、新しいファイルが更新の一部として配信され、古いファイルに単純にコピーされます。
現在、現在のアプローチにはいくつかの問題があり、状況を改善する方法を探しています。
- ファイル システム イメージの作成に使用されるターゲットのルート ファイル システムはバージョン管理されていません (元の rootfs さえないと思います)。
- 更新に入る rootfs ファイルは (差分ではなく) 手動で選択されます。
- 更新は継続的に成長し、それはピタになります。アップグレードに大きな rootfs の変更が含まれる場合、更新とアップグレードが分割されるようになりました。
- アップデートの一貫性チェックは、実装されたとしても脆弱であるという印象があります。
要件は次のとおりです。
- アプリケーション更新パッケージは大きすぎてはならず、変更が行われた場合にルート ファイル システムを変更できる必要もあります。
- アップグレードははるかに大きくなる可能性があり、ルート ファイル システムに入る要素 (新しいライブラリ、カーネルなど) のみが含まれます。アップデートでは、アップグレードがインストールされている必要がある場合があります。
アップグレードにルート ファイル システム全体を含めてdd
、ターゲットのフラッシュ ドライブで単純に実行できますか? - 更新/アップグレード パッケージの作成は、可能な限り自動化する必要があります。
ルート ファイル システムのバージョン管理を行う何らかの方法が絶対に必要です。diff
これは、ターゲット デバイスの rootfs を更新するために使用できる何らかの方法で計算できるようにする必要があります。
ソース コードに Subversion を使用しているため、すでに Subversion を調べましたが、Linux ルート ファイル システム (ファイルのアクセス許可、特殊ファイルなど) には不適切です。
に似たものを提供できるシェルスクリプトをいくつか作成しましたsvn diff
が、これに対して機能するテスト済みのソリューションが既に存在するかどうかを知りたいです。
そのような を使用diff
すると、アップグレードは単純に、既知のルート ファイル システムの状態に基づく増分更新を含むパッケージになると思います。
これについてあなたの考えやアイデアは何ですか?そのようなシステムをどのように実装しますか? あまり時間をかけずに実装できるシンプルなソリューションを好みます。