Läs på engelska

Dela via


Hantera OS-pakethanteraren med Azure IoT och OSConfig

Viktigt

Version 1.0.3 (publicerad 28 juni 2022) innehåller icke-bakåtkompatibla ändringar av medlemsnamn som kan påverka befintliga användare. Mer information finns i: Medlemsnamn övergår från PascalCase till camelCase i version 1.0.3

Målgrupp och omfång

Den här artikeln är utformad för att stödja personer som etablerar eller hanterar enheter med Azure IoT. Om det inte låter som du kan du överväga att ta en titt på dokumentationen om Målgrupper för OSConfig.

Den här artikeln handlar om att hämta status för pakethanteraren och ange önskat tillstånd för pakethanteraren. Ett exempel:

Funktion Användningsfall
Se till att pakethanterare hämtar från dina önskade källor • Din driftsprincip är att enhetspakethanterare ska hämta från en privat paketlagringsplats med godkända versioner av bibliotek och komponenter
• Du behöver enheter för att hämta paket från en specifik leverantörs lagringsplats
Informera pakethanterare om önskade paket • Din driftsprincip är att enheterna ska ha ett specifikt paket som "library-XYZ-v2"
• Din driftsprincip är att enheterna ska ha ett specifikt beroendediagram över paket
Jämföra enheters paket
eller källlistor
• Din driftsprincip är att de distribuerade enheternas installerade paketlista ska matcha en känd bra enhet

Om du är här för referensinformation i stället för interaktiva användningsexempel kan du gå vidare till referensavsnittet.

Viktigt

För närvarande finns apt-baserade distributioner som Debian och Ubuntu inom omfånget. Om du vill utveckla stöd för RPM-baserade distributioner läser du utökningsdokumentationen.

I en miljö utan apt (till exempel skapa från källa och köra på en Red Hat-familjedistro) kan du se följande loggmeddelanden som anger att PackageManagerConfiguration-modulen inte är tillämplig.

  • I osconfig_pmc.log, rader inklusive följande text:
    [ERROR] Cannot run on this platform, could not find required tool apt-get
  • I osconfig_pnp_agent.log, rader inklusive följande text:
    [ERROR] PackageManagerConfiguration.state: MpiGet failed with 500

Exempel på användningsfall

De här exemplen kan fungera som utgångspunkter för att du ska kunna anpassa dig till din unika miljö.

Förutsättningar för att prova exemplen på livesystem

Om du använder den här artikeln som referens finns det inga förutsättningar. Du kan granska exemplen, kopiera egenskapsnamn osv.

Om du vill prova exemplen på livesystem (rekommenderas) följer du dessa steg:

  1. Skapa ett kostnadsfritt Azure-konto eller använd ett befintligt konto

  2. Ansluta minst en OSConfig-aktiverad enhet till en IoT Hub

    Tips

    Information om hur du enkelt skapar en IoT Hub med (virtuella) enheter anslutna finns i Skapa en OSConfig-labbmiljö (med Azure IoT) på 5 minuter

  3. Gör dig redo att följa antingen Azure Portal-instruktionen eller Azure CLI-instruktionerna i exemplen:

Om du föredrar att använda Azure Portal

  1. Logga in på Azure Portal och få åtkomst till IoT Hub översiktssida Skärmbild som visar IoT Hub och enheter från Azure-portalen

-OR – Om du föredrar att använda Azure CLI

  1. REKOMMENDERAS: Använd Azure Cloud Shell som bash-miljö genom att logga in på Azure-portalen och sedan starta Azure Cloud Shell i bash-läge Skärmdumpsöppning Cloud Shell från Azure-portalen
  2. ALTERNATIV: Om du föredrar att använda din egen bash-miljö i stället för att Cloud Shell installerar du Azure CLI och loggar in
  3. Kontrollera att Azure IoT-tillägget är klart genom att köra az extension add --name azure-iot

Exempel 1. Ange önskade paketkällor

Det här exemplet visar Azure IoT-arbetsflödet för att säkerställa att enheter som en av sina paketkällor använder den packages.microsoft.com prod-kanalen för Ubuntu 18.04. Du kan anpassa det här exemplet för att använda valfri paketkälla. Till exempel en annan distributions-/versions offentliga lagringsplats, en viss leverantörs lagringsplats eller en privat lagringsplats som du kurerar.

Anvisningarna finns i smakerna för portalen, CLI, specifika enheter och etablering och hantering i stor skala.

  1. Från IoT Hub portalsida navigerar du till OSConfig-tvillingen för den enhet som du vill hantera och lägger till följande i properties.desired avsnittet följt av ett kommatecken för att skilja den från nästa objekt i properties.desired.

    "PackageManagerConfiguration": {
       "desiredState": {
          "gpgKeys": {
             "pkgs-msft_key": "https://packages.microsoft.com/keys/microsoft.asc"
          },
          "sources": {
             "pkgs-msft_insiders-slow": "deb [arch=amd64,armhf,arm64 signed-by=pkgs-msft_key] https://packages.microsoft.com/ubuntu/18.04/prod insiders-slow main"
          },
          "packages": [
          ]
       }
    }
    
    

    Skärmbild som visar hur du konfigurerar konfiguration av pakethanteraren från Azure-portalen

Exempel 1 handlade om att definiera en ny paketkälla. Om du vill rapportera på samma sätt fortsätter du till Exempel 2.

Exempel 2. Rapportera om tillstånd och konfiguration för pakethanteraren

I det här exemplet rapporterar vi om:

  1. Vilka paketkällor har lagts till
  2. Om några enheter upplever PackageManagerConfiguration-fel

I exempel 1 ovan lade vi till ett önskat PackageManagerConfiguration-värde i OSConfig-modultvillingen för en specifik enhet. Nu kan vi se resultatet.

  1. Vänta 1 minut (för nätverkskommunikation, aktivitet på enhetssidan osv.) när du har lagt till önskad PackageManagerConfiguration i exemplet ovan

  2. I samma enhets OSConfig-modultvilling bläddrar du till egenskaper och rapporteras sedan, sedan PackageManagerConfiguration och sedan tillstånd.

  3. Då visas den senaste statusen för pakethanterarens konfiguration.

    1. sourcesFileNames bör återspegla de två kanaler som lagts till
    2. executionStatus bör vara 2. Möjliga värden finns i: utökningsdokumentation

    Skärmbild som visar hur du verifierar konfigurationen av pakethanteraren från Azure-portalen

Referensinformation

Beskrivning av objektmodell

I det här avsnittet beskrivs tvillingegenskaperna och motsvarande beteenden.

Det är användbart att förstå att det i Azure IoT finns två mentala modeller eller perspektiv för att beskriva tvillinginnehåll.

  • Enkelt önskat/rapporterat perspektiv

    Det här är den grundläggande IoT Hub objektmodellen. Den används av IoT Hub Query-tjänsten, IoT Hub Configurations-tjänsten, az iot hub module-twin kommandon och av de enkla tvillingvyerna i Azure-portalen och IoT Explorer.

  • Förbättrat perspektiv för DTDL (Digital Twin Definition Language)

    DTDL (med motsvarande mönster, inklusive Azure IoT Plug and Play [PnP]) gör det möjligt för appar och tjänster att förutse, validera och bättre kontextualisera tvillinginnehåll. Detta används av PnP-vyerna i IoT Explorer, av Azure Digital Twins-tjänsten och eventuellt av din molnlösning när du interagerar med IoT Hub.

I de flesta fall nedan behövs ingen skillnad. Till exempel kallas "gpgKeys" "gpgKeys" i endera vyn.

I vissa fall kan en skillnad vara till hjälp. Till exempel sökvägsvärdena som anges nedan. I dessa fall ges den vanliga önskade/rapporterade beskrivningen först, följt av ett förbättrat DTDL-perspektiv inom parentes.

desiredState (indata från administratör)
  • Sökväg: properties.desired.PackageManagerConfiguration.desiredState (DTDL: PackageManagerConfiguration komponent –>desiredState skrivbar egenskap)

  • Beskrivning: Indata från administratör; möjliggör tillägg av paketkällor och paket till enheter

  • Medlemmar

    Namn Typ Kommentarer
    Källor sourceNamekarta över : sourceDescriptor par (strängar) För varje par i ordlistan:
    sourceName är en administratör angiven identifierare, till exempel: *my-source-foo*
    sourceDescriptor är en källdefinitionssträng i det format som används av pakethanteraren, till exempel: deb [arch=amd64,armhf,arm64 signed-by=my-repo-key] https://packages.microsoft.com/ubuntu/18.04/prod focal main
    • Inuti sourceDescriptor det värde som skickas till signed-by= ska vara namnet på en nyckel från gpgKeys (beskrivs nedan); till exempel: signed-by=my-source-foo-key
    • När du lägger till eller ändrar en källa fylls en fil i sources.list.d (skriver över befintlig fil om den finns) med källbeskrivningen
    • Om du vill ange att enheterna inte ska använda en viss källa (förutsatt att den tidigare har definierats i sources.list.d, inte någon annanstans i systemet), inkluderar du ett par som "my-source-bar": ""; Om det finns en fil med namnet my-source-bar.list i sources.list.d tas den bort
    • Om du inte längre behöver ett bör inte använda-direktiv (till exempel om my-source-bar inte längre är relevant efter en tid), kan du ta bort det från den önskade tvillingen genom att ändra värdet från "my-source-bar": "" till "my-source-bar": null
    Gpgkeys key-namekarta över : uri par (strängar) Används för att informera paketet
    hanterare av offentliga nycklar för lagringsplatsen.
    För varje par i ordlistan:
    key-name är en administratör angiven identifierare, till exempel : my-repo-foo-key, som hänvisas till från signed-by i sources
    uri är platsen för en lagringsplats offentliga nyckel, till exempel: https://packages.microsoft.com/keys/microsoft.asc
    • Nyckeln läggs till som en fil i /usr/share/keyrings/; Observera att för att säkerställa att nyckelns tillämplighet är begränsad används den här icke-apt-specifika sökvägen. apt tillämpar endast den nyckeln på källor som uttryckligen är kopplade till den (via signed-by
    • Om du vill ta bort en nyckelfil från /usr/share/keyrings inställd key-name på att matcha filnamnet (utan filnamnstillägg) och ange uri till ""
    Paket matris med paketidentifierare (strängar) • Instruerar pakethanteraren att se till att paketen är installerade
    • Detsamma som namn på APT-installationspaket <> på Debian
    • Additiva (icke-destruktiva) till sin natur. en tom lista innebär till exempel "gör ingenting" (inte "avinstallera alla paket i systemet")
  • Exempelnyttolast (som visas i tvillingavsnittet properties.desired i en IoT Hub tvilling)

    "PackageManagerConfiguration": {
        "desiredState": {
           "gpgKeys": {
              "pkgs-msft_key": "https://packages.microsoft.com/keys/microsoft.asc"
           },
           "sources": {
              "pkgs-msft_insiders-slow": "deb [arch=amd64,armhf,arm64 signed-by=pkgs-msft_key] https://packages.microsoft.com/ubuntu/18.04/prod insiders-slow main"
           },
           "packages": [
              "cowsay"
           ]
        }
    }
    
state
  • Sökväg: properties.reported.PackageManagerConfiguration.state (DTDL-perspektiv: PackageManagerConfiguration komponent –>state skrivskyddad egenskap)

  • Beskrivning: PackageManagerConfiguration-tillstånd som rapporterats av enheten

  • Medlemmar

    Namn Typ Kommentarer
    packagesFingerprint sträng • Ogenomskinliga fingeravtryck för listan över alla installerade paket på enheten (inte begränsat till paket som anges i desiredState.packages)
    • Används för att jämföra ett stort antal enheter med en fungerande enhet
    Paket matris med paketidentifierare (strängar) • Namn och status (version eller "misslyckades") för de administratörsspecifika paketen från desiredState.packages
    • Om ett paket har installerats korrekt följs namnet av det installerade versionsnumret
    • Om det inte gick att installera ett paket följs namnet av "failed" (misslyckades)
    sourcesFingerprint sträng • Ogenomskinliga fingeravtryck från paketkällor som används av enheten
    • Används för att jämföra ett stort antal enheter med en fungerande enhet
    sourcesFilenames matris med filnamn (strängar) • Lista över paketkällor (som filnamn, till exempel my-repo.list) som har lagts till i pakethanteraren via /etc/apt/sources.list.d (på Debian)
    • Innehåller alla källor som finns, oavsett om de har lagts till via desiredState.sources
    executionState int • Övergripande status för lyckade/misslyckade
    • Nominella värden är 0 (initialt tillstånd, inget desiredState har angetts) eller 2 (lyckades)
    • Andra värden finns i: utökningsbarhetsdokumentation
    executionSubstate int • Information om möjliga värden finns i: utökningsbarhetsdokumentation
    executionSubstateDetails sträng • Ytterligare information för felsökning
  • Exempelnyttolast (som visas i twin-avsnittet properties.reported )

    "PackageManagerConfiguration": {
        "state": {
           "packagesFingerprint": "9e7a85de3d067474e3621d7e1618f6ac0e2e8fc6cb9d60ee92af9927294114d3",
           "packages": [
              "cowsay=3.03+dfsg2-7"
           ],
           "executionState": 2,
           "executionSubstate": 0,
           "executionSubstateDetails": "",
           "sourcesFingerprint": "64b7de49c2be4ef2c180e4a978300fbb7b8a743a89e4038ba7ac6a91c31b625f",
           "sourcesFilenames": [
              "pkgs-msft_insiders-slow.list"
           ]
        }
    }
    
desiredState (rapporterad; bekräftelse från enhet)
  • Sökväg: properties.reported.PackageManagerConfiguration.desiredState (DTDL-perspektiv: PackageManagerConfiguration komponent –> ACK-del av desiredState skrivbar egenskap)

  • Beskrivning: Det här ytterligare rapporterade elementet är en bekräftelse från enheten. för administratörsverktyg och rapportering kompletterar – vilket gör det statemöjligt för administratörsverktygskedjan att avgöra om enheten ännu har tagit emot administratörsavsikten som registrerats i admin-writable/desired desiredState

  • Medlemmar

    Namn Typ Kommentarer
    värde objekt • Ska speglas properties.desired.PackageManagerConfiguration.desiredState
    Ac int • Anger framgång (värde 200) eller fel (värde 400) för enheten som tar emot och bearbetar desiredState från administratören

Nästa steg

En översikt över OSConfig-scenarier och funktioner finns i:

Specifika praktiska exempel finns i: