Delen via


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:

  1. Een gratis Azure-account maken of een bestaand account gebruiken

  2. 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

  3. Bereid u voor op de Azure Portal instructies of de Azure CLI-instructies in de voorbeelden:

Als u liever de Azure Portal gebruikt

  1. Meld u aan bij uw Azure Portal en open de overzichtspagina van uw IoT Hub met IoT Hub en apparaten in de Azure-portal

-OF- Als u liever Azure CLI gebruikt

  1. 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 Schermopname die Cloud Shell opent vanuit Azure Portal
  2. ALTERNATIEF: Als u liever uw eigen bash-omgeving gebruikt in plaats van Cloud Shell, installeert u de Azure CLI en meldt u zich aan
  3. 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.

  1. 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 in 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": [
          ]
       }
    }
    
    

    Schermopname die laat zien hoe u de configuratie van package manager configureert vanuit Azure Portal

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:

  1. Welke pakkettenbronnen zijn toegevoegd
  2. 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.

  1. Wacht 1 minuut (voor netwerkcommunicatie, activiteit aan de apparaatzijde, enzovoort) nadat u de gewenste PackageManagerConfiguration hebt toegevoegd in het bovenstaande voorbeeld

  2. Blader in de OSConfig-moduledubbel van hetzelfde apparaat naar eigenschappen en rapporteert vervolgens PackageManagerConfiguration en vervolgens de status.

  3. Hiermee wordt de meest recente status van de configuratie van package manager weergegeven.

    1. sourcesFileNames moet overeenkomen met de twee toegevoegde kanalen
    2. executionStatus moet 2 zijn. Zie de documentatie over uitbreidbaarheid voor mogelijke waarden

    Schermopname die laat zien hoe u de configuratie van package manager verifieert vanuit De Azure-portal

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
    • Binnen sourceDescriptor de doorgegeven signed-by= waarde moet de naam zijn van een sleutel uit gpgKeys (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": null
    Gpgkeys 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 in signed-bysources
    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 (via signed-by
    • Als u een sleutelbestand wilt verwijderen uit /usr/share/keyrings die zijn ingesteld key-name op overeenkomen met de bestandsnaam (zonder extensie), en ingesteld op uri""
    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 apparaat
    Pakketten 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 apparaat
    sourcesFilenames 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 via desiredState.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 waarden
    executionSubstate 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 van desiredState 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/gewenste desiredState

  • 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: