Verwalten des Betriebssystempaket-Managers mithilfe von Azure IoT und OSConfig
Wichtig
Version 1.0.3 (veröffentlicht am 28. Juni 2022) umfasst Unterbrechungen von Änderungen an Mitgliedsnamen, die sich auf vorhandene Benutzer auswirken können. Weitere Informationen finden Sie unter: Membernamen übergang von PascalCase zu camelCase in Version 1.0.3
Zielgruppe und Bereich
Dieser Artikel wurde entwickelt, um Personen zu unterstützen, die Geräte mit Azure IoT bereitstellen oder verwalten . Wenn dies nicht wie Sie klingt, sollten Sie einen Blick auf die Benutzergruppen für die OSConfig-Dokumentation werfen.
In diesem Artikel wird der Status des Paket-Managers und das Festlegen des gewünschten Zustands des Paket-Managers behandelt. Beispiel:
Funktion | Anwendungsfälle |
---|---|
Stellen Sie sicher, dass Paketmanager aus Ihren gewünschten Quellen stammen | • Ihre Betriebsrichtlinie besteht darin, dass Gerätepaketmanager aus einem privaten Paket-Repository mit genehmigten Versionen von Bibliotheken und Komponenten abrufen sollten. • Sie benötigen Geräte, um Pakete aus dem Repository eines bestimmten Anbieters abzurufen. |
Informieren Sie Paketmanager von gewünschten Paketen | • Ihre Betriebsrichtlinie besteht darin, dass Geräte über ein bestimmtes Paket wie "library-XYZ-v2" verfügen sollten. • Ihre Betriebsrichtlinie besteht darin, dass Geräte über ein bestimmtes Abhängigkeitsdiagramm von Paketen verfügen sollten. |
Gerätepaket vergleichen oder Quellenlisten |
• Ihre Betriebsrichtlinie besteht darin, dass die installierte Paketliste der bereitgestellten Geräte mit einem bekannten guten Gerät übereinstimmt. |
Wenn Sie sich hier für Referenzinformationen im Gegensatz zu interaktiven Beispielen für Anwendungsfälle befinden, können Sie den Referenzabschnitt überspringen.
Wichtig
Zu diesem Zeitpunkt sind apt-basierte Distros, einschließlich Debian und Ubuntu, im Bereich. Wenn Sie unterstützung für RPM-basierte Verteiler entwickeln möchten, lesen Sie die Erweiterbarkeitsdokumentation.
In einer Umgebung ohne apt (z. B. erstellen aus Quelle und Ausführung auf einer Red Hat Family-Vertrotro), werden möglicherweise die folgenden Protokollmeldungen angezeigt, die angeben, dass das PackageManagerConfiguration-Modul nicht anwendbar ist.
- In osconfig_pmc.log zeilen, einschließlich des folgenden Texts:
[ERROR] Cannot run on this platform, could not find required tool apt-get
- In osconfig_pnp_agent.log zeilen, einschließlich des folgenden Texts:
[ERROR] PackageManagerConfiguration.state: MpiGet failed with 500
Beispiele für Anwendungsfälle
Diese Beispiele können als Ausgangspunkte dienen, die Sie für Ihre einzigartige Umgebung anpassen können.
Voraussetzungen für das Testen der Beispiele für Livesysteme
Wenn Sie diesen Artikel zur Referenz verwenden, gibt es keine Voraussetzungen. Sie können die Beispiele überprüfen, Eigenschaftsnamen kopieren usw.
Wenn Sie die Beispiele für Livesysteme ausprobieren möchten (empfohlen), führen Sie die folgenden Schritte aus:
Erstellen eines kostenlosen Azure-Kontos oder Verwenden eines vorhandenen Kontos
Verbinden sie mindestens ein OSConfig-fähiges Gerät mit einem IoT Hub
Tipp
Informationen zum einfachen Erstellen einer IoT Hub mit angefügten (virtuellen) Geräten finden Sie unter Erstellen einer OSConfig -Laborumgebung (mit Azure IoT) in 5 Minuten
Machen Sie sich bereit, entweder die Azure-Portal Anweisung oder die Azure CLI-Anweisungen in den Beispielen zu befolgen:
Wenn Sie die Azure-Portal verwenden möchten
- Melden Sie sich bei Ihrem Azure-Portal an, und greifen Sie auf die Seite "Übersicht" Ihres IoT Hub zu,
.
-OR- Wenn Sie Azure CLI verwenden möchten
- EMPFOHLEN: Verwenden Sie Azure Cloud Shell als Bash-Umgebung, indem Sie sich bei Ihrem Azure-Portal anmelden, und starten Sie Dann Azure Cloud Shell im Bash-Modus
- ALTERNATIVE: Wenn Sie ihre eigene Bash-Umgebung anstelle von Cloud Shell verwenden möchten, installieren Sie die Azure CLI und melden Sie sich an.
- Stellen Sie sicher, dass die Azure IoT-Erweiterung bereit ist, indem Sie ausführen
az extension add --name azure-iot
Beispiel 1: Angeben der gewünschten Paketquellen
In diesem Beispiel wird der Azure IoT-Workflow veranschaulicht, um sicherzustellen, dass Geräte als eine ihrer Paketquellen den packages.microsoft.com Prod-Kanal für Ubuntu 18.04 verwenden. Sie können dieses Beispiel anpassen, um eine beliebige Paketquelle zu verwenden. Beispielsweise das öffentliche Repository einer anderen Distro/Version, das Repository eines bestimmten Anbieters oder ein privates Repository, das Sie zusammengestellt haben.
Die Anweisungen sind in Varianten für Portal, CLI, bestimmte Geräte und die skalierungsbasierte Bereitstellung und Verwaltung verfügbar.
Navigieren Sie auf der Portalseite Ihrer IoT Hub zum OSConfig-Zwilling für das Gerät, das Sie verwalten möchten, und fügen Sie dem
properties.desired
Abschnitt folgendes hinzu, gefolgt von einem Komma, um es vom nächsten Elementproperties.desired
zu trennen."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": [ ] } }
Beispiel 1 war das Definieren einer neuen Paketquelle. Wenn Sie über dasselbe Berichten berichten möchten, fahren Sie mit Beispiel 2 fort.
Beispiel 2: Bericht über den Paket-Manager-Zustand und die Konfiguration
In diesem Beispiel wird Folgendes berichtet:
- Welche Paketquellen hinzugefügt wurden
- Gibt an, ob Geräte PackageManagerConfiguration-Fehler haben
In Beispiel 1 oben haben wir dem OSConfig-Modul-Twin eines bestimmten Geräts einen gewünschten PackageManagerConfiguration-Wert hinzugefügt. Wir können jetzt die Ergebnisse beobachten.
Warten Sie 1 Minute (für Netzwerkkommunikation, geräteseitige Aktivität usw.), nachdem Sie das gewünschte PackageManagerConfiguration im obigen Beispiel hinzugefügt haben
Navigieren Sie im OSConfig-Modul desselben Geräts zu Eigenschaften, dann gemeldet, dann PackageManagerConfiguration, und zustand.
Dadurch wird der neueste Status der Paket-Manager-Konfiguration angezeigt.
sourcesFileNames
sollte die beiden hinzugefügten Kanäle widerspiegelnexecutionStatus
sollte 2 sein. Mögliche Werte finden Sie in der Dokumentation zur Erweiterbarkeit
Referenzinformationen
Objektmodellbeschreibung
In diesem Abschnitt werden die Zwillingseigenschaften und die entsprechenden Verhaltensweisen beschrieben.
Es ist nützlich zu verstehen, dass in Azure IoT zwei mentale Modelle oder Perspektiven zum Beschreiben von Zwillingsinhalten vorhanden sind.
Nur gewünschte/gemeldete Perspektive
Dies ist das Kernobjektmodell IoT Hub. Es wird von IoT Hub Abfragedienst, IoT Hub Konfigurationsdienst,
az iot hub module-twin
Befehlen und von den einfachen Zwillingsansichten in Azure Portal und IoT Explorer verwendet.Digitale Twin Definition Language (DTDL) erweiterte Perspektive
DTDL (mit entsprechenden Mustern, einschließlich Azure IoT Plug & Play [PnP]) ermöglicht Apps und Diensten, zwei Inhalte zu erwarten, zu überprüfen und besser zu kontextualisieren. Dies wird von den PnP-Ansichten im IoT-Explorer, vom Azure Digital Twins-Dienst und möglicherweise von Ihrer Cloudlösung beim Interagieren mit IoT Hub verwendet.
In den meisten Fällen unten ist keine Unterscheidung erforderlich. Beispielsweise wird "gpgKeys" in beiden Ansichten als "gpgKeys" bezeichnet.
In bestimmten Fällen kann eine Unterscheidung hilfreich sein. Beispiel: Die unten angegebenen Pfadwerte. In diesen Fällen wird zuerst die einfache gewünschte/gemeldete Beschreibung gegeben, gefolgt von einer DTDL-erweiterten Perspektive in Klammern.
desiredState (Eingabe von Administrator)
Pfad:
properties.desired.PackageManagerConfiguration.desiredState
(DTDL:PackageManagerConfiguration
component -->desiredState
beschreibbare Eigenschaft)Beschreibung: Eingabe von Administrator; ermöglicht das Hinzufügen von Paketquellen und Paketen zu Geräten
Mitglieder
Name type Notizen sources Zuordnung von sourceName
:sourceDescriptor
Paare (Zeichenfolgen)Für jedes Paar im Wörterbuch:
•sourceName
ist ein angegebener Administratorbezeichner, z. B.:*my-source-foo*
•sourceDescriptor
ist eine Quelldefinitionszeichenfolge im format, das vom Paket-Manager verwendet wird. Beispiel:deb [arch=amd64,armhf,arm64 signed-by=my-repo-key] https://packages.microsoft.com/ubuntu/18.04/prod focal main
• InnerhalbsourceDescriptor
des übergebenensigned-by=
Werts sollte der Name eines Schlüssels seingpgKeys
(siehe unten). Beispiel: signed-by=my-source-foo-key
• Beim Hinzufügen oder Ändern einer Quelle wird eine Datei in sources.list.d aufgefüllt (vorhandene Datei überschreiben) mit dem Quelldeskriptor
• Um anzugeben, dass Geräte keine bestimmte Quelle verwenden sollten (sofern sie zuvor in sources.list.d definiert wurde, nicht an anderer Stelle im System), schließen Sie ein Paar wie"my-source-bar": ""
; Wenn eine Datei namens "my-source-bar.list" in "sources.list.d " vorhanden ist, wird sie entfernt.
• Wenn Sie keine Direktive mehr benötigen (z. B. ist my-source-bar nach einiger Zeit nicht mehr relevant), können Sie sie aus dem gewünschten Zwilling entfernen, indem Sie den Wert von "my-source-bar": "" in "my-source-bar" ändern: null: nullGpgkeys Zuordnung von key-name
:uri
Paare (Zeichenfolgen)Wird verwendet, um das Paket zu informieren
Manager öffentlicher Repositoryschlüssel;
Für jedes Paar im Wörterbuch:
•key-name
ist ein administrator angegebener Bezeichner, z. B. my-repo-foo-key, der vonsigned-by
insources
•uri
die Position des öffentlichen Schlüssels eines Repo, z. B.:https://packages.microsoft.com/keys/microsoft.asc
• Der Schlüssel wird als Datei zu /usr/share/keyrings/hinzugefügt; Beachten Sie, dass für die Anwendbarkeit des Schlüssels ein Bereich verwendet wird, der nicht geeignete Pfad verwendet wird; apt wendet nur diesen Schlüssel auf Quellen an, die explizit damit verknüpft sind (übersigned-by
• So entfernen Sie eine Schlüsseldatei aus /usr/share/keyrings, die aufkey-name
den Dateinamen (ohne Erweiterung) festgelegt sind, und legen Sie auf "" fest.uri
packages Array von Paketbezeichnern (Zeichenfolgen) • Weist den Paket-Manager an, sicherzustellen, dass diese Pakete installiert sind.
• Analog zu geeigneten Installationspaketnamen <> auf Debian
• Zusatzstoffe (nicht destruktiv) in der Natur; Eine leere Liste bedeutet z. B. "Nichts tun" (nicht "alle Pakete auf dem System deinstallieren")Beispielnutzlast (wie im Abschnitt eines Zwillings
properties.desired
eines IoT Hub Twins dargestellt)"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
Pfad: (DTDL-Perspektive:
properties.reported.PackageManagerConfiguration.state
PackageManagerConfiguration
Component -->state
read-only-Eigenschaft)Beschreibung: PackageManagerConfiguration-Zustand wie vom Gerät gemeldet
Mitglieder
Name type Notizen packagesFingerprint Zeichenfolge • Undurchsichtiger Fingerabdruck für die Liste aller installierten Pakete auf dem Gerät (nicht beschränkt auf Pakete, auf die in desiredState.packages
) verwiesen wird
• Wird verwendet, um große Anzahl von Geräten mit einem bekannten Gerät zu vergleichenpackages Array von Paketbezeichnern (Zeichenfolgen) • Name und Status (Version oder "fehlgeschlagen") der vom Administrator angegebenen Pakete desiredState.packages
• Wenn ein Paket erfolgreich installiert wurde, folgt der Name der installierten Versionsnummer.
• Wenn ein Paket nicht installiert werden konnte, wird der Name gefolgt von "fehlgeschlagen"sourcesFingerprint Zeichenfolge • Undurchsichtiger Fingerabdruck von Paketquellen, die vom Gerät verwendet werden
• Wird verwendet, um große Anzahl von Geräten mit einem bekannten Gerät zu vergleichensourcesFilenames Array von Dateinamen (Zeichenfolgen) • Liste der Paketquellen (z. B. "my-repo.list"), die dem Paket-Manager über /etc/apt/sources.list.d (auf Debian) hinzugefügt wurden
• Enthält alle quellen, die vorhanden sind, unabhängig davon, ob sie überdesiredState.sources
executionState INT • Gesamterfolgs-/Fehlerstatus
• Nominalwerte sind 0 (Anfangszustand, es wurde kein desiredState angegeben) oder 2 (erfolgreich)
• Weitere Werte finden Sie in der ErweiterbarkeitsdokumentationexecutionSubstate INT • Mögliche Werte finden Sie in der Erweiterbarkeitsdokumentation executionSubstateDetails Zeichenfolge • Zusätzliche Informationen zur Problembehandlung Beispiel-Nutzlast (wie im Abschnitt "Twin
properties.reported
" dargestellt)"PackageManagerConfiguration": { "state": { "packagesFingerprint": "9e7a85de3d067474e3621d7e1618f6ac0e2e8fc6cb9d60ee92af9927294114d3", "packages": [ "cowsay=3.03+dfsg2-7" ], "executionState": 2, "executionSubstate": 0, "executionSubstateDetails": "", "sourcesFingerprint": "64b7de49c2be4ef2c180e4a978300fbb7b8a743a89e4038ba7ac6a91c31b625f", "sourcesFilenames": [ "pkgs-msft_insiders-slow.list" ] } }
desiredState (gemeldet; Bestätigung von Gerät)
Pfad: (DTDL-Perspektive:
PackageManagerConfiguration
Komponente -properties.reported.PackageManagerConfiguration.desiredState
-> ACK-Teil derdesiredState
schreibbaren Eigenschaft)Beschreibung: Dieses zusätzliche gemeldete Element ist eine Bestätigung vom Gerät; für Administratortools und Berichte, die es ergänzt
state
– die Aktivierung der Administratortoolkette, um festzustellen, ob das Gerät noch die in der Admin-Beschriftbare/gewünschte Administratorabsicht erfasste Administratorabsicht erhalten hat.desiredState
Mitglieder
Name Typ Notizen value Objekt (object) • Sollte spiegelen properties.desired.PackageManagerConfiguration.desiredState
ac INT • Gibt Erfolg (Wert 200) oder Fehler (Wert 400) des Geräts an, das vom Administrator empfangen und verarbeitet wird.
Nächste Schritte
Eine Übersicht über OSConfig-Szenarien und -Funktionen finden Sie unter:
Spezifische praktische Beispiele finden Sie unter: