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
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
De här exemplen kan fungera som utgångspunkter för att du ska kunna anpassa dig till din unika miljö.
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:
Skapa ett kostnadsfritt Azure-konto eller använd ett befintligt konto
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
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
- Logga in på Azure Portal och få åtkomst till IoT Hub översiktssida
-OR – Om du föredrar att använda Azure CLI
- 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
- 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
- Kontrollera att Azure IoT-tillägget är klart genom att köra
az extension add --name azure-iot
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.
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 iproperties.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": [ ] } }
Exempel 1 handlade om att definiera en ny paketkälla. Om du vill rapportera på samma sätt fortsätter du till Exempel 2.
I det här exemplet rapporterar vi om:
- Vilka paketkällor har lagts till
- 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.
Vänta 1 minut (för nätverkskommunikation, aktivitet på enhetssidan osv.) när du har lagt till önskad PackageManagerConfiguration i exemplet ovan
I samma enhets OSConfig-modultvilling bläddrar du till egenskaper och rapporteras sedan, sedan PackageManagerConfiguration och sedan tillstånd.
Då visas den senaste statusen för pakethanterarens konfiguration.
sourcesFileNames
bör återspegla de två kanaler som lagts tillexecutionStatus
bör vara 2. Möjliga värden finns i: utökningsdokumentation
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.
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 sourceName
karta ö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
• InutisourceDescriptor
det värde som skickas tillsigned-by=
ska vara namnet på en nyckel frångpgKeys
(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": nullGpgkeys key-name
karta ö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ånsigned-by
isources
•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 (viasigned-by
• Om du vill ta bort en nyckelfil från /usr/share/keyrings inställdkey-name
på att matcha filnamnet (utan filnamnstillägg) och angeuri
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" ] } }
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 enhetPaket 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 enhetsourcesFilenames 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 viadesiredState.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ökningsbarhetsdokumentationexecutionSubstate 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" ] } }
Sökväg:
properties.reported.PackageManagerConfiguration.desiredState
(DTDL-perspektiv:PackageManagerConfiguration
komponent –> ACK-del avdesiredState
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
state
möjligt för administratörsverktygskedjan att avgöra om enheten ännu har tagit emot administratörsavsikten som registrerats i admin-writable/desireddesiredState
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
En översikt över OSConfig-scenarier och funktioner finns i:
Specifika praktiska exempel finns i: