apt マニフェストは、apt 更新ハンドラーに必要な更新の詳細を記述する JSON ファイルです。 このファイルは、他の更新プログラムと同様に、Device Update for IoT Hub にインポートできます。
詳細については、「 Device Update for IoT Hub への更新プログラムのインポート」を参照してください。
概要
apt マニフェストが更新プログラムとして Device Update エージェントに配信されると、エージェントはマニフェストを処理し、必要な操作を実行します。 必要な操作には、APT マニフェスト ファイルに指定されているパッケージとその依存関係を指定リポジトリからダウンロードし、インストールする作業が含まれます。
Device Update では、apt updateType と apt 更新ハンドラーがサポートされています。 このサポートによりデバイス更新エージェントは、インストールされている Debian パッケージを評価し、必要なパッケージを更新することができます。
スキーマ
APT マニフェスト ファイルは、バージョン管理されたスキーマを含む JSON ファイルです。
{
"name": "<name>",
"version": "<version>",
"packages": [
{
"name": "<package name>",
"version": "<version specifier>"
}
]
}
例えば次が挙げられます。
{
"name": "contoso-iot-edge",
"version": "1.0.0.0",
"packages": [
{
"name" : "thermocontrol",
"version" : "1.0.1"
},
{
"name" : "tempreport",
"version" : "2.0.0"
}
]
}
各 APT マニフェストには次のプロパティが含まれています。
-
名前: このAPTマニフェストの名前。 これは、シナリオにとって意味のある名前または ID にすることができます。 たとえば、
contoso-iot-edge
のようにします。 -
バージョン: この apt マニフェストのバージョン番号。 たとえば、
1.0.0.0
のようにします。 -
Packages: パッケージ固有のプロパティを含むオブジェクトの一覧。
-
名前: パッケージの名前または ID。 たとえば、
iotedge
のようにします。 -
バージョン: パッケージの目的のバージョン条件。 たとえば、
1.0.8-2
のようにします。 バージョン値に等号を含めることはできません。 バージョンを省略すると、指定したパッケージの利用可能な最新バージョンがインストールされます。
-
名前: パッケージの名前または ID。 たとえば、
現在、正確なバージョン番号のみがサポートされています。 バージョン番号は 、形式 [epoch:]upstream_version[-debian_revision] の目的の Debian パッケージ のバージョンです。 エポック は符号なし int であり、 upstream_version には英数字と文字 (".","+"、"-" 、"~" など) を含めることができます。 数字で始まる必要があります。
注
'1.0.8' は '1.0.8-0' に等しい
たとえば、 "name":"iotedge"
と "version":"1.0.8-2"
は、コマンドを使用してパッケージをインストールすることと同じです apt-get install iotedge=1.0.8-2
Debian パッケージのバージョン管理方法の詳細については、Debian ポリシーマニュアルを参照してください。
注
インストールする依存パッケージが自動的に解決されると、APT パッケージ マネージャーは、パッケージによって指定されたバージョン管理の要件を無視します。 依存パッケージの明示的なバージョンが指定されていない限り、パッケージ自体が特定のバージョンで厳密な要件 (=) を指定する場合でも、最新のパッケージが使用されます。 このように自動で解決されると、条件が満たされない依存関係に関するエラーが発生する可能性があります。 詳細情報
Azure IoT Edge セキュリティ デーモンの特定のバージョンを更新する場合は、必要なバージョンの aziot-edge
パッケージとその依存 aziot-identity-service
パッケージを apt マニフェストに含める必要があります。
詳しくは、IoT Edge を更新する方法に関する記事を参照してください。
apt マニフェストを使用して、Device Update エージェントとその依存関係を更新できます。 他のパッケージの場合と同様に、デバイス更新エージェント名と必要なバージョンを apt マニフェストに一覧表示します。 その後、この apt マニフェストは、Device Update for IoT Hub パイプラインを通じてインポートおよびデプロイできます。
パッケージの削除
apt マニフェストを使用して、インストールされているパッケージをデバイスから削除することもできます。 1 つの apt マニフェストを使用して、複数のパッケージを削除、追加、更新できます。
パッケージを削除するには、パッケージ名の後にマイナス記号 "-" を追加します。 削除するパッケージのバージョン番号を含めてはいけません。 APT マニフェストを使用してパッケージを削除しても、その依存関係と構成は削除されません。
例えば次が挙げられます。
{
"name": "contoso-video",
"version": "2.0.0.1",
"packages": [
{
"name" : "foo-"
}
]
}
この apt マニフェストは、デプロイされるデバイスからパッケージ "foo" を削除します。
インストール基準の推奨値
apt マニフェストのインストール済み条件は <name>-<version>
で、 <name>
は apt マニフェストの名前、 <version>
は apt マニフェストのバージョンです。 たとえば、contoso-iot-edge-1.0.0.0
のようにします。
apt マニフェストの作成に関するガイドライン
apt マニフェストを作成する際に注意すべきガイドラインがいくつかあります。
- apt マニフェストが整形式の json ファイルであることを常に確認してください。
- 各 apt マニフェストには、一意のバージョンが必要です。 シナリオに適しており、簡単に従うことができるように、apt マニフェストのバージョンをインクリメントする標準化された手法を考えてみてください。
- 各パッケージの目的の状態に関しては、デバイスにインストールするパッケージの正確な名前とバージョンを指定します。 常に、パッケージのソースとして使用するパッケージ リポジトリに対して値を検証します。
- apt マニフェスト内のパッケージが、インストールまたは削除する順序で一覧表示されていることを確認します。
- 結果が望ましいことを確認するために、テスト デバイスへのパッケージのインストールを常に検証します。
- パッケージの特定のバージョン (たとえば、
iotedge 1.0.9-1
) をインストールする場合は、apt マニフェストにインストールする依存パッケージの明示的なバージョンを含めるのがベスト プラクティスです (たとえば、libiothsm 1.0.9-1
) - 必須ではありませんが、デバイスが不明な状態にならないように、apt マニフェストが累積的であることを常に確認してください。 累積的な更新プログラムを使用すると、インストールで障害が発生したり、オフラインになったりしたために、デバイスが apt 更新プログラムの展開をスキップした場合でも、気になるすべてのパッケージの目的のバージョンがデバイスに確実に含まれるようになります。
例えば次が挙げられます。
基本「apt」マニフェスト
{
"name": "contoso-iot-edge",
"version": "1.0",
"packages": [
{
"name": "foo",
"version": "1.0.1"
}
]
}
正しくない更新プログラム
この更新プログラムにはバー パッケージが含まれていますが、foo パッケージは含まれません。
{
"name": "contoso-iot-edge",
"version": "2.0",
"packages": [
{
"name": "bar",
"version": "3.0.2"
}
]
}
良い更新
この更新プログラムには foo パッケージが含まれており、バー パッケージも含まれています。
{
"name": "contoso-iot-edge",
"version": "2.0",
"packages": [
{
"name": "foo",
"version": "1.0.1"
},
{
"name": "bar",
"version": "3.0.2"
}
]
}