APT-manifest för enhetsuppdatering
APT-manifestet är en JSON-fil som beskriver en uppdateringsinformation som krävs av apt-uppdateringshanteraren. Den här filen kan importeras till Enhetsuppdatering för IoT Hub precis som andra uppdateringar.
Mer information finns i Importera en uppdatering av enhetsuppdatering för IoT Hub.
Översikt
När ett apt-manifest levereras till en enhetsuppdateringsagent som en uppdatering bearbetar agenten manifestet och utför nödvändiga åtgärder. Dessa åtgärder omfattar nedladdning och installation av de paket som anges i apt-manifestfilen och deras beroenden från en angiven lagringsplats.
Enhetsuppdatering stöder apt updateType och apt-uppdateringshanteraren. Med det här stödet kan enhetsuppdateringsagenten utvärdera de installerade Debian-paketen och uppdatera de nödvändiga paketen.
Schema
En apt-manifestfil är en JSON-fil med ett versionsschema.
{
"name": "<name>",
"version": "<version>",
"packages": [
{
"name": "<package name>",
"version": "<version specifier>"
}
]
}
Ett exempel:
{
"name": "contoso-iot-edge",
"version": "1.0.0.0",
"packages": [
{
"name" : "thermocontrol",
"version" : "1.0.1"
},
{
"name" : "tempreport",
"version" : "2.0.0"
}
]
}
Varje apt-manifest innehåller följande egenskaper:
-
Namn: Namnet på det här apt-manifestet. Detta kan vara det namn eller ID som är meningsfullt för dina scenarier. Till exempel
contoso-iot-edge
. -
Version: Ett versionsnummer för det här apt-manifestet. Till exempel
1.0.0.0
. -
Paket: En lista över objekt som innehåller paketspecifika egenskaper.
-
Namn: Paketets namn eller ID. Till exempel
iotedge
. -
Version: Önskat versionskriterier för paketet. Till exempel
1.0.8-2
. Versionsvärdet får inte innehålla ett likhetstecken. Om versionen utelämnas installeras den senaste tillgängliga versionen av det angivna paketet.
-
Namn: Paketets namn eller ID. Till exempel
För närvarande stöds endast exakt versionsnummer. Versionsnumret är den önskade Debian-paketversionen i formatet [epoch:]upstream_version[-debian_revision], där epok är ett osignerat int och upstream_version kan innehålla alfanumeriska tecken som ""-" och "~". Den bör börja med en siffra.
Anteckning
"1.0.8" är lika med "1.0.8-0"
Och motsvarar till exempel "name":"iotedge"
"version":"1.0.8-2"
att installera ett paket med kommandot apt-get install iotedge=1.0.8-2
Mer information om hur Debian-paket versionshanteras finns i Debians policyhandbok
Anteckning
APT-pakethanteraren ignorerar versionskraven som anges av ett paket när de beroende paket som ska installeras löses automatiskt. Om inte explicita versioner av beroende paket ges kommer de att använda den senaste, även om själva paketet kan ange ett strikt krav (=) för en viss version. Den här automatiska lösningen kan leda till fel som rör ett ouppfyllt beroende. Läs mer
Om du uppdaterar en specifik version av Azure IoT Edge säkerhetsdaemon bör du inkludera önskad version av aziot-edge
paketet och dess beroende aziot-identity-service
paket i ditt apt-manifest.
Mer information finns i Så här uppdaterar du IoT Edge.
Ett apt-manifest kan användas för att uppdatera enhetsuppdateringsagenten och dess beroenden. Ange namnet på enhetsuppdateringsagenten och önskad version i apt-manifestet, precis som för andra paket. Det här apt-manifestet kan sedan importeras och distribueras via enhetsuppdateringen för IoT Hub pipeline.
Ta bort paket
Du kan också använda ett apt-manifest för att ta bort installerade paket från enheten. Ett enda apt-manifest kan användas för att ta bort, lägga till och uppdatera flera paket.
Om du vill ta bort ett paket lägger du till ett minustecken "-" efter paketnamnet. Du bör inte inkludera ett versionsnummer för de paket som du tar bort. Om du tar bort ett paket via ett apt-manifest tas inte dess beroenden och konfigurationer bort.
Ett exempel:
{
"name": "contoso-video",
"version": "2.0.0.1",
"packages": [
{
"name" : "foo-"
}
]
}
Det här apt-manifestet tar bort paketet "foo" från de enheter som det distribueras till.
Rekommenderat värde för installerade villkor
De installerade kriterierna för ett apt-manifest är <name>-<version>
var <name>
är namnet på apt-manifestet och <version>
är versionen av apt-manifestet. Till exempel contoso-iot-edge-1.0.0.0
.
Riktlinjer för att skapa ett apt-manifest
När du skapar apt-manifestet finns det några riktlinjer att tänka på:
- Se alltid till att apt-manifestet är en välformulerad json-fil.
- Varje apt-manifest bör ha en unik version. Prova att komma med en standardiserad metod för att öka versionen av apt-manifestet, så att det passar dina scenarier och enkelt kan följas.
- När det gäller önskat tillstånd för varje enskilt paket anger du det exakta namnet och versionen av paketet som du vill installera på enheten. Verifiera alltid värdena mot den paketlagringsplats som du tänker använda som källa för paketet.
- Se till att paketen i apt-manifestet visas i den ordning de ska installeras/tas bort.
- Verifiera alltid installationen av paket på en testenhet för att säkerställa att resultatet önskas.
- När du installerar en specifik version av ett paket (till exempel
iotedge 1.0.9-1
) är det bästa praxis att även i apt-manifestet ha de explicita versionerna av de beroende paket som ska installeras (till exempellibiothsm 1.0.9-1
) - Även om det inte är obligatoriskt bör du alltid se till att ditt apt-manifest är kumulativt för att undvika att enheten hamnar i ett okänt tillstånd. En kumulativ uppdatering säkerställer att dina enheter har önskad version av varje paket som du bryr dig om även om enheten har hoppat över en apt-uppdateringsdistribution på grund av fel i installationen eller offline
Ett exempel:
Base apt-manifest
{
"name": "contoso-iot-edge",
"version": "1.0",
"packages": [
{
"name": "foo",
"version": "1.0.1"
}
]
}
Felaktig uppdatering
Den här uppdateringen innehåller bar-paketet, men inte foo-paketet.
{
"name": "contoso-iot-edge",
"version": "2.0",
"packages": [
{
"name": "bar",
"version": "3.0.2"
}
]
}
Bra uppdatering
Den här uppdateringen innehåller foo-paket och även bar-paket.
{
"name": "contoso-iot-edge",
"version": "2.0",
"packages": [
{
"name": "foo",
"version": "1.0.1"
},
{
"name": "bar",
"version": "3.0.2"
}
]
}