Het besturingssysteempakketbeheer beheren met Behulp van Azure IoT en OSConfig
Belangrijk
Versie 1.0.3 (gepubliceerd op 28 juni 2022) bevat belangrijke wijzigingen in ledennamen die van invloed kunnen zijn op bestaande gebruikers. Zie voor meer informatie: Member names transition from PascalCase to camelCase in version 1.0.3
Doelgroep en bereik
Dit artikel is ontworpen ter ondersteuning van personen die apparaten inrichten of beheren met Azure IoT. Als dat niet lijkt op u, kunt u overwegen om doelgroepen te bekijken voor osConfig-documentatie.
Dit artikel gaat over het verkrijgen van pakketbeheerstatus en het instellen van pakketbeheer gewenste status. Bijvoorbeeld:
Mogelijkheid | Gebruiksvoorbeelden |
---|---|
Zorg ervoor dat pakketbeheerders uit uw gewenste bronnen halen | • Uw operationele beleid is dat apparaatpakketbeheerders moeten ophalen uit een opslagplaats voor privépakketten met goedgekeurde versies van bibliotheken en onderdelen • U hebt apparaten nodig om pakketten op te halen uit de opslagplaats van een specifieke leverancier |
Pakketbeheerders informeren over gewenste pakketten | • Uw operationele beleid is dat apparaten een specifiek pakket moeten hebben, zoals 'library-XYZ-v2' • Uw operationele beleid is dat apparaten een specifieke afhankelijkheidsgrafiek van pakketten moeten hebben |
Het pakket van apparaten vergelijken of bronnenlijsten |
• Uw operationele beleid is dat de geïnstalleerde pakketlijst van geïmplementeerde apparaten moet overeenkomen met een bekend goed apparaat |
Als u hier bent voor referentie-informatie in plaats van interactieve use-casevoorbeelden, kunt u verdergaan naar de verwijzingssectie.
Belangrijk
Op dit moment zijn apt-gebaseerde distributies, waaronder Debian en Ubuntu, binnen het bereik. Als u ondersteuning voor op RPM gebaseerde distributies wilt ontwikkelen, raadpleegt u de documentatie over uitbreidbaarheid.
In een omgeving zonder apt (bijvoorbeeld bouwen vanuit de bron en wordt uitgevoerd op een distributie van een Red Hat-familie), ziet u mogelijk de volgende logboekberichten die aangeven dat de PackageManagerConfiguration-module niet van toepassing is.
- In osconfig_pmc.log, regels met inbegrip van de volgende tekst:
[ERROR] Cannot run on this platform, could not find required tool apt-get
- In osconfig_pnp_agent.log, regels met inbegrip van de volgende tekst:
[ERROR] PackageManagerConfiguration.state: MpiGet failed with 500
Voorbeelden van use cases
Deze voorbeelden kunnen fungeren als uitgangspunten om u aan te passen aan uw unieke omgeving.
Vereisten voor het uitproberen van de voorbeelden op livesystemen
Als u dit artikel gebruikt ter referentie, zijn er geen vereisten. U kunt de voorbeelden bekijken, eigenschappennamen kopiëren, enzovoort.
Als u de voorbeelden op livesystemen wilt uitproberen (aanbevolen), volgt u deze stappen:
Een gratis Azure-account maken of een bestaand account gebruiken
Ten minste één osConfig-apparaat verbinden met een IoT Hub
Tip
Als u eenvoudig een IoT Hub wilt maken met (virtuele) apparaten die zijn gekoppeld, raadpleegt u Binnen 5 minuten een OSConfig-testomgeving (met Azure IoT) maken
Bereid u voor op de Azure Portal instructies of de Azure CLI-instructies in de voorbeelden:
Als u liever de Azure Portal gebruikt
- Meld u aan bij uw Azure Portal en open de overzichtspagina van uw IoT Hub
-OF- Als u liever Azure CLI gebruikt
- AANBEVOLEN: Gebruik Azure Cloud Shell als uw bash-omgeving door u aan te melden bij uw Azure-portal en vervolgens Azure Cloud Shell te starten in de bash-modus
- ALTERNATIEF: Als u liever uw eigen bash-omgeving gebruikt in plaats van Cloud Shell, installeert u de Azure CLI en meldt u zich aan
- Zorg ervoor dat de Azure IoT-extensie gereed is door deze uit te voeren
az extension add --name azure-iot
Voorbeeld 1. Gewenste pakketbronnen opgeven
In dit voorbeeld ziet u de Azure IoT-werkstroom om ervoor te zorgen dat apparaten, als een van hun pakketbronnen, het packages.microsoft.com prod-kanaal voor Ubuntu 18.04 gebruiken. U kunt dit voorbeeld aanpassen om elke pakketbron te gebruiken. Bijvoorbeeld, een andere distributie/versie van de openbare opslagplaats, de opslagplaats van een bepaalde leverancier of een persoonlijke opslagplaats die u beheert.
De instructies zijn beschikbaar in smaken voor portal, CLI, specifiek apparaat en op schaal inrichten en beheren.
Navigeer vanaf de portalpagina van uw IoT Hub naar de OSConfig-dubbel voor het apparaat dat u wilt beheren en voeg het volgende toe aan de
properties.desired
sectie, gevolgd door een komma om deze te scheiden van het volgende item inproperties.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": [ ] } }
Voorbeeld 1 ging over het definiëren van een nieuwe pakketbron. Ga verder met voorbeeld 2 voor rapportage over hetzelfde rapport.
Voorbeeld 2. Rapporteren over de status en configuratie van pakketbeheer
In dit voorbeeld zullen we rapporteren over:
- Welke pakkettenbronnen zijn toegevoegd
- Of apparaten packageManagerConfiguration-fouten ondervinden
In voorbeeld 1 hierboven hebben we een gewenste PackageManagerConfiguration-waarde toegevoegd aan de OSConfig-moduledubbel van een specifiek apparaat. We kunnen nu de resultaten bekijken.
Wacht 1 minuut (voor netwerkcommunicatie, activiteit aan de apparaatzijde, enzovoort) nadat u de gewenste PackageManagerConfiguration hebt toegevoegd in het bovenstaande voorbeeld
Blader in de OSConfig-moduledubbel van hetzelfde apparaat naar eigenschappen en rapporteert vervolgens PackageManagerConfiguration en vervolgens de status.
Hiermee wordt de meest recente status van de configuratie van package manager weergegeven.
sourcesFileNames
moet overeenkomen met de twee toegevoegde kanalenexecutionStatus
moet 2 zijn. Zie de documentatie over uitbreidbaarheid voor mogelijke waarden
Referentiegegevens
Beschrijving van objectmodel
In deze sectie worden de eigenschappen van de tweeling en het bijbehorende gedrag beschreven.
Het is handig om te begrijpen dat er in Azure IoT twee mentale modellen of perspectieven zijn voor het beschrijven van de inhoud van dubbels.
Eenvoudig gewenst/gerapporteerd perspectief
Dit is het kernobjectmodel IoT Hub. Deze wordt gebruikt door IoT Hub Query-service, IoT Hub Configurations-service,
az iot hub module-twin
opdrachten en door de weergaven zonder opmaak in Azure Portal en IoT Explorer.DTDL (Digital Twin Definition Language) verbeterd perspectief
Met DTDL (met bijbehorende patronen, waaronder Azure IoT Plug en Play [PnP]) kunnen apps en services de dubbelinhoud anticiperen, valideren en beter contextueel maken. Dit wordt gebruikt door de PnP-weergaven in IoT Explorer, door de Azure Digital Twins-service en mogelijk door uw cloudoplossing bij interactie met IoT Hub.
In de meeste gevallen is er geen onderscheid nodig. Bijvoorbeeld 'gpgKeys' heet 'gpgKeys' in beide punten.
In bepaalde gevallen kan een onderscheid nuttig zijn. Bijvoorbeeld de padwaarden die hieronder worden gegeven. In die gevallen wordt eerst de gewenste/gerapporteerde beschrijving gegeven, gevolgd door een verbeterd DTDL-perspectief tussen haakjes.
desiredState (invoer van beheerder)
Pad:
properties.desired.PackageManagerConfiguration.desiredState
(DTDL:PackageManagerConfiguration
component -->desiredState
beschrijfbare eigenschap)Beschrijving: Invoer van beheerder; maakt het toevoegen van pakketbronnen en pakketten aan apparaten mogelijk
Leden
Naam Type Opmerkingen Bronnen kaart van sourceName
:sourceDescriptor
paren (tekenreeksen)Voor elk paar in de woordenlijst:
•sourceName
is een door de beheerder opgegeven id, bijvoorbeeld:*my-source-foo*
•sourceDescriptor
is een brondefinitietekenreeks in de indeling die door pakketbeheer wordt gebruikt, bijvoorbeeld:deb [arch=amd64,armhf,arm64 signed-by=my-repo-key] https://packages.microsoft.com/ubuntu/18.04/prod focal main
• BinnensourceDescriptor
de doorgegevensigned-by=
waarde moet de naam zijn van een sleutel uitgpgKeys
(hieronder beschreven); bijvoorbeeld: ondertekend door=my-source-foo-key
• Wanneer u een bron toevoegt of wijzigt , wordt een bestand in sources.list.d gevuld (bestaand bestand wordt overschreven indien aanwezig) met de brondescriptor
• Als u wilt opgeven dat apparaten geen bepaalde bron mogen gebruiken (ervan uitgaande dat deze eerder is gedefinieerd in sources.list.d, niet elders in het systeem), moet u een paar opnemen zoals"my-source-bar": ""
; Als er een bestand met de naam my-source-bar.list bestaat in sources.list.d , wordt het verwijderd
• Als u geen instructie meer nodig hebt (bijvoorbeeld mijn bronbalk is na enige tijd niet meer relevant), kunt u deze uit de gewenste dubbel verwijderen door de waarde te wijzigen van mijn bronbalk: "" in "my-source-bar": "" in "my-source-bar": nullGpgkeys kaart van key-name
:uri
paren (tekenreeksen)Wordt gebruikt om het pakket te informeren
manager van openbare opslagplaatssleutels;
Voor elk paar in de woordenlijst:
•key-name
is een door de beheerder opgegeven id; bijvoorbeeld: my-repo-foo-key, waarnaar wordt verwezen insigned-by
sources
•uri
is de locatie van de openbare sleutel van een opslagplaats; bijvoorbeeld:https://packages.microsoft.com/keys/microsoft.asc
• De sleutel wordt toegevoegd als een bestand aan /usr/share/keyrings/; Houd er rekening mee dat dit niet-apt-specifieke pad wordt gebruikt om de toepasselijkheid van de sleutel te waarborgen; apt past die sleutel alleen toe op bronnen die er expliciet aan zijn gekoppeld (viasigned-by
• Als u een sleutelbestand wilt verwijderen uit /usr/share/keyrings die zijn ingesteldkey-name
op overeenkomen met de bestandsnaam (zonder extensie), en ingesteld opuri
""Pakketten matrix van pakket-id's (tekenreeksen) • Geeft pakketbeheer opdracht om ervoor te zorgen dat deze pakketten zijn geïnstalleerd
• Analogous to apt install <package names> on Debian
• Additief (niet-destructief) in de natuur; Een lege lijst betekent bijvoorbeeld 'niets doen' (niet 'alle pakketten op het systeem verwijderen')Voorbeeld van nettolading (zoals in de sectie van
properties.desired
een dubbel van een IoT Hub dubbel)"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" ] } }
staat
Pad:
properties.reported.PackageManagerConfiguration.state
(DTDL perspectief:PackageManagerConfiguration
onderdeel ->state
alleen-lezen eigenschap)Beschrijving: PackageManagerConfiguration-status zoals gerapporteerd door het apparaat
Leden
Naam Type Opmerkingen packagesFingerprint tekenreeks • Ondoorzichtige vingerafdruk voor de lijst met alle geïnstalleerde pakketten op het apparaat (niet beperkt tot pakketten waarnaar wordt verwezen in desiredState.packages
)
• Wordt gebruikt voor het vergelijken van grote aantallen apparaten met een bekend goed apparaatPakketten matrix van pakket-id's (tekenreeksen) • Naam en status (versie of mislukt) van de door de beheerder opgegeven pakketten van desiredState.packages
• Als een pakket is geïnstalleerd, wordt de naam gevolgd door het geïnstalleerde versienummer
• Als een pakket niet kan worden geïnstalleerd, wordt de naam gevolgd door 'mislukt'sourcesFingerprint tekenreeks • Ondoorzichtige vingerafdruk van pakketbronnen die door het apparaat worden gebruikt
• Wordt gebruikt voor het vergelijken van grote aantallen apparaten met een bekend goed apparaatsourcesFilenames matrix met bestandsnamen (tekenreeksen) • Lijst met pakketbronnen (zoals bestandsnamen, bijvoorbeeld my-repo.list) die zijn toegevoegd aan pakketbeheer via /etc/apt/sources.list.d (op Debian)
• Omvat alle aanwezige bronnen, ongeacht of deze zijn toegevoegd viadesiredState.sources
executionState int • Algehele geslaagde/mislukte status
• Nominale waarden zijn 0 (initiële toestand, geen gewenste staat is opgegeven) of 2 (geslaagd)
• Zie de documentatie over uitbreidbaarheid voor andere waardenexecutionSubstate int • Zie voor mogelijke waarden: documentatie over uitbreidbaarheid executionSubstateDetails tekenreeks • Aanvullende informatie voor probleemoplossing Voorbeeldpayload (zoals weergegeven in de sectie van
properties.reported
dubbel)"PackageManagerConfiguration": { "state": { "packagesFingerprint": "9e7a85de3d067474e3621d7e1618f6ac0e2e8fc6cb9d60ee92af9927294114d3", "packages": [ "cowsay=3.03+dfsg2-7" ], "executionState": 2, "executionSubstate": 0, "executionSubstateDetails": "", "sourcesFingerprint": "64b7de49c2be4ef2c180e4a978300fbb7b8a743a89e4038ba7ac6a91c31b625f", "sourcesFilenames": [ "pkgs-msft_insiders-slow.list" ] } }
desiredState (gerapporteerd; bevestiging van apparaat)
Pad:
properties.reported.PackageManagerConfiguration.desiredState
(DTDL perspectief:PackageManagerConfiguration
component --> ACK-gedeelte vandesiredState
beschrijfbare eigenschap)Beschrijving: Dit extra gerapporteerde element is een bevestiging van het apparaat; voor beheerhulpprogramma's en rapportage van deze aanvullingen
state
: het inschakelen van de beheerhulpprogrammaketen om te bepalen of het apparaat de beheerdersintentie heeft ontvangen die is vastgelegd in de beheerbeschrijfbare/gewenstedesiredState
Leden
Naam Type Opmerkingen waarde object • Moet spiegelen properties.desired.PackageManagerConfiguration.desiredState
Ac int • Geeft aan dat het apparaat is geslaagd (waarde 200) of mislukt (waarde 400) van het apparaat datdesiredState ontvangt en verwerkt van de beheerder
Volgende stappen
Zie voor een overzicht van OSConfig-scenario's en -mogelijkheden:
Zie voor specifieke praktische voorbeelden: