Dela via


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.

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.

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 exempel libiothsm 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"
        }
    ]
}

Nästa steg

Importera en uppdatering till enhetsuppdateringen