Partager via


Gérer le gestionnaire de package du système d’exploitation à l’aide d’Azure IoT et de OSConfig

Important

La version 1.0.3 (publiée le 28 juin 2022) inclut des modifications cassants apportées aux noms de membres susceptibles d’avoir un impact sur les utilisateurs existants. Pour plus d’informations, consultez : Les noms de membres passent de PascalCase à camelCase dans la version 1.0.3

Audience et étendue

Cet article est conçu pour prendre en charge les personnes qui approvisionnent ou gèrent des appareils avec Azure IoT. Si ce n’est pas le cas, envisagez de consulter la documentation Audiences pour OSConfig.

Cet article traite de l’obtention de l’état du gestionnaire de package et de la définition de l’état souhaité du gestionnaire de package. Par exemple :

Fonctionnalité Cas d'utilisation
Assurez-vous que les gestionnaires de packages extraitnt de vos sources souhaitées • Votre stratégie d’exploitation est que les gestionnaires de packages d’appareils doivent extraire d’un référentiel de package privé avec des versions approuvées de bibliothèques et de composants
• Vous avez besoin d’appareils pour obtenir des packages à partir du référentiel d’un fournisseur spécifique
Informer les gestionnaires de packages souhaités • Votre stratégie d’exploitation est que les appareils doivent avoir un package spécifique comme « library-XYZ-v2 »
• Votre stratégie d’exploitation est que les appareils doivent avoir un graphique de dépendance spécifique des packages
Comparer le package des appareils
ou listes de sources
• Votre stratégie d’exploitation est que la liste des packages installés des appareils déployés doit correspondre à un bon appareil connu

Si vous êtes ici pour obtenir des informations de référence par opposition aux exemples de cas d’usage interactifs, vous pouvez passer à la section référence.

Important

À ce stade, les distributions basées sur apt , y compris Debian et Ubuntu, sont dans l’étendue. Si vous souhaitez développer la prise en charge des distributions BASÉEs sur RPM, consultez la documentation sur l’extensibilité.

Dans un environnement sans apt (par exemple, la génération à partir de la source et l’exécution sur une distribution familiale Red Hat), vous pouvez voir les messages de journal suivants indiquant que le module PackageManagerConfiguration n’est pas applicable.

  • Dans osconfig_pmc.log, lignes incluant le texte suivant :
    [ERROR] Cannot run on this platform, could not find required tool apt-get
  • Dans osconfig_pnp_agent.log, lignes incluant le texte suivant :
    [ERROR] PackageManagerConfiguration.state: MpiGet failed with 500

Exemples de cas d’usage

Ces exemples peuvent servir de points de départ pour vous adapter à votre environnement unique.

Conditions préalables pour essayer les exemples sur les systèmes en direct

Si vous utilisez cet article pour référence, il n’existe pas de conditions préalables. Vous pouvez consulter les exemples, copier les noms de propriétés, etc.

Si vous souhaitez essayer les exemples sur les systèmes en direct (recommandé), procédez comme suit :

  1. Créer un compte Azure gratuit ou utiliser un compte existant

  2. Connectez au moins un appareil osConfig à un IoT Hub

    Conseil

    Pour créer facilement un IoT Hub avec des appareils (virtuels) attachés, consultez Créer un environnement de laboratoire OSConfig (avec Azure IoT) en 5 minutes

  3. Préparez-vous à suivre l’instruction Portail Azure ou les instructions Azure CLI dans les exemples :

Si vous préférez utiliser le Portail Azure

  1. Connectez-vous à votre Portail Azure et accédez à la page Vue d’ensemble de votre IoT Hub capture d’écran montrant IoT Hub et les appareils à partir du portail Azure

-OR- Si vous préférez utiliser Azure CLI

  1. RECOMMANDÉ : Utilisez Azure Cloud Shell comme environnement bash en vous connectant à votre portail Azure, puis lancez Azure Cloud Shell en mode bash capture d’écran ouvrant Cloud Shell à partir du portail Azure
  2. ALTERNATIVE : Si vous préférez utiliser votre propre environnement bash plutôt que Cloud Shell, installez Azure CLI et connectez-vous
  3. Vérifiez que l’extension Azure IoT est prête en cours d’exécution az extension add --name azure-iot

Exemple 1. Spécifier les sources de package souhaitées

Cet exemple montre le flux de travail Azure IoT pour vous assurer que les appareils utilisent, comme l’une de leurs sources de package, le canal de production packages.microsoft.com pour Ubuntu 18.04. Vous pouvez adapter cet exemple pour utiliser n’importe quelle source de package. Par exemple, un autre dépôt public de distribution/version, un dépôt de fournisseur particulier ou un référentiel privé que vous organisez.

Les instructions sont disponibles dans les versions du portail, de l’interface CLI, de l’appareil spécifique et de la gestion à grande échelle.

  1. À partir de la page du portail de votre IoT Hub, accédez au jumeau OSConfig pour l’appareil que vous souhaitez gérer, puis ajoutez ce qui suit à la properties.desired section, suivi d’une virgule pour la séparer de l’élément suivant dans 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": [
          ]
       }
    }
    
    

    Capture d’écran montrant comment configurer la configuration du gestionnaire de package à partir du portail Azure

L’exemple 1 concerne la définition d’une nouvelle source de package. Pour la création de rapports sur la même chose, passez à l’exemple 2.

Exemple 2. Rapport sur l’état et la configuration du gestionnaire de package

Dans cet exemple, nous allons signaler les éléments suivants :

  1. Quelles sources de packages ont été ajoutées
  2. Indique si des appareils rencontrent des erreurs PackageManagerConfiguration

Dans l’exemple 1 ci-dessus, nous avons ajouté une valeur PackageManagerConfiguration souhaitée au jumeau de module OSConfig d’un appareil spécifique. Nous pouvons maintenant observer les résultats.

  1. Patientez 1 minute (pour les communications réseau, l’activité côté appareil, etc.) après avoir ajouté packageManagerConfiguration souhaité dans l’exemple ci-dessus

  2. Dans le jumeau de module OSConfig du même appareil, accédez aux propriétés, puis signalez, packageManagerConfiguration, puis état.

  3. Cela affiche l’état le plus récent de la configuration du gestionnaire de package.

    1. sourcesFileNames doit refléter les deux canaux ajoutés
    2. executionStatus doit être 2. Pour connaître les valeurs possibles, consultez la documentation sur l’extensibilité

    Capture d’écran montrant comment vérifier la configuration du gestionnaire de package à partir du portail Azure

Informations de référence

Description du modèle objet

Cette section décrit les propriétés de jumeau et les comportements correspondants.

Il est utile de comprendre que dans Azure IoT, il existe deux modèles mentaux ou perspectives pour décrire le contenu du jumeau.

  • Perspective souhaitée/signalée simple

    Il s’agit du modèle objet de base IoT Hub. Il est utilisé par IoT Hub service de requête, IoT Hub service Configurations, az iot hub module-twin commandes et par les vues de jumeaux simples dans le portail Azure et l’Explorateur IoT.

  • Perspective améliorée du langage DTDL (Digital Twin Definition Language)

    DTDL (avec des modèles correspondants, notamment Azure IoT Plug-and-Play [PnP]) permet aux applications et services d’anticiper, de valider et de mieux contextualiser le contenu de jumeau. Cela est utilisé par les vues PnP dans IoT Explorer, par le service Azure Digital Twins et potentiellement par votre solution cloud lors de l’interaction avec IoT Hub.

Dans la plupart des cas ci-dessous, aucune distinction n’est nécessaire. Par exemple, « gpgKeys » est appelé « gpgKeys » dans les deux points de vue.

Dans certains cas, une distinction peut être utile. Par exemple, les valeurs Path indiquées ci-dessous. Dans ces cas, la description simple souhaitée/signalée est donnée en premier, suivie d’une perspective améliorée DTDL entre parenthèses.

desiredState (entrée de l’administrateur)
  • Chemin d’accès : properties.desired.PackageManagerConfiguration.desiredState (DTDL : PackageManagerConfiguration composant -->desiredState propriété accessible en écriture)

  • Description : Entrée de l’administrateur ; permet l’ajout de sources de package et de packages à des appareils

  • Members (Membres)

    Nom Type Notes
    sources mappage de sourceName: sourceDescriptor paires (chaînes) Pour chaque paire dans le dictionnaire :
    sourceName est un identificateur spécifié par l’administrateur, par exemple : *my-source-foo*
    sourceDescriptor est une chaîne de définition de source au format utilisé par le gestionnaire de package, par exemple : deb [arch=amd64,armhf,arm64 signed-by=my-repo-key] https://packages.microsoft.com/ubuntu/18.04/prod focal main
    • Dans sourceDescriptor la valeur passée, signed-by= il doit s’agir du nom d’une clé ( gpgKeys décrite ci-dessous) ; par exemple : signed-by=my-source-foo-key
    • Lors de l’ajout ou de la modification d’une source, un fichier dans sources.list.d est rempli (remplacement du fichier existant s’il est présent) avec le descripteur source
    • Pour spécifier que les appareils ne doivent pas utiliser une source particulière (en supposant qu’il a été précédemment défini dans sources.list.d, pas ailleurs sur le système), incluez une paire comme "my-source-bar": ""; Si un fichier nommé my-source-bar.list existe dans sources.list.d , il est supprimé
    • Si vous n’avez plus besoin d’une directive ne doit pas utiliser de directive (par exemple, my-source-bar n’est plus pertinente après un certain temps), vous pouvez la supprimer du jumeau souhaité en remplaçant la valeur de « my-source-bar » : « » par « my-source-bar » : null
    gpgKeys mappage de key-name: uri paires (chaînes) Utilisé pour informer le package
    gestionnaire des clés publiques du référentiel ;
    Pour chaque paire dans le dictionnaire :
    key-name est un identificateur spécifié par l’administrateur ; par exemple : my-repo-foo-key, qui est référencé à partir de signed-by dans sources
    uri est l’emplacement de la clé publique d’un dépôt; par exemple : https://packages.microsoft.com/keys/microsoft.asc
    • La clé est ajoutée en tant que fichier à /usr/share/keyrings/; Notez que pour vous assurer que l’applicabilité de la clé est étendue, ce chemin spécifique non apt est utilisé ; apt applique uniquement cette clé aux sources qui y sont explicitement associées (via signed-by
    • Pour supprimer un fichier de clé de /usr/share/keyrings défini key-name pour correspondre au nom de fichier (sans extension), et défini uri sur « »
    packages tableau d’identificateurs de package (chaînes) • Indique au gestionnaire de package de s’assurer que ces packages sont installés
    • Analogue aux noms> des packages d’installation <apt sur Debian
    • Additif (non destructeur) dans la nature; par exemple, une liste vide signifie « ne rien faire » (pas « désinstaller tous les packages sur le système »)
  • Exemple de charge utile (comme indiqué dans la section du jumeau d’un properties.desired jumeau IoT Hub)

    "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
  • Chemin d’accès : properties.reported.PackageManagerConfiguration.state (perspective DTDL : PackageManagerConfiguration composant -->state propriété en lecture seule)

  • Description : État packageManagerConfiguration comme indiqué par l’appareil

  • Members (Membres)

    Nom Type Notes
    packagesFingerprint string • Empreinte digitale opaque pour la liste de tous les packages installés sur l’appareil (non limité aux packages référencés dans desiredState.packages)
    • Utilisé pour comparer un grand nombre d’appareils à un appareil connu
    packages tableau d’identificateurs de package (chaînes) • Nom et état (version ou « échec ») des packages spécifiés par l’administrateur à partir de desiredState.packages
    • Si un package a été installé avec succès, le nom est suivi du numéro de version installé
    • Si un package n’a pas pu être installé, le nom est suivi de « échec »
    sourcesFingerprint string • Empreinte digitale opaque des sources de package utilisées par l’appareil
    • Utilisé pour comparer un grand nombre d’appareils à un appareil connu
    sourcesFilenames tableau de noms de fichiers (chaînes) • Liste des sources de package (en tant que noms de fichiers, par exemple my-repo.list) qui ont été ajoutées au gestionnaire de package via /etc/apt/sources.list.d (sur Debian)
    • Inclut toutes les sources présentes, qu’elles aient été ajoutées ou non via desiredState.sources
    executionState int • État global de réussite/échec
    • Les valeurs nominales sont 0 (état initial, aucun desiredState n’a été spécifié) ou 2 (réussi)
    • Pour d’autres valeurs, consultez la documentation sur l’extensibilité
    executionSubstate int • Pour connaître les valeurs possibles, consultez la documentation sur l’extensibilité
    executionSubstateDetails string • Informations supplémentaires pour la résolution des problèmes
  • Exemple de charge utile (comme indiqué dans la section du properties.reported jumeau)

    "PackageManagerConfiguration": {
        "state": {
           "packagesFingerprint": "9e7a85de3d067474e3621d7e1618f6ac0e2e8fc6cb9d60ee92af9927294114d3",
           "packages": [
              "cowsay=3.03+dfsg2-7"
           ],
           "executionState": 2,
           "executionSubstate": 0,
           "executionSubstateDetails": "",
           "sourcesFingerprint": "64b7de49c2be4ef2c180e4a978300fbb7b8a743a89e4038ba7ac6a91c31b625f",
           "sourcesFilenames": [
              "pkgs-msft_insiders-slow.list"
           ]
        }
    }
    
desiredState (signalé; accusé de réception de l’appareil)
  • Chemin d’accès : properties.reported.PackageManagerConfiguration.desiredState (perspective DTDL : PackageManagerConfiguration composant --> Partie ACK de desiredState la propriété accessible en écriture)

  • Description : cet élément signalé supplémentaire est un accusé de réception de l’appareil ; pour les outils d’administration et la création de rapports state, ce qui permet à la chaîne d’outils d’administration de déterminer si l’appareil a encore reçu l’intention d’administrateur capturée dans l’écriture de l’administrateur/souhaité desiredState

  • Members (Membres)

    Nom Type Notes
    value object • Doit mettre en miroir properties.desired.PackageManagerConfiguration.desiredState
    clim int • Indique la réussite (valeur 200) ou l’échec (valeur 400) de l’appareil recevant et traitant l’état souhaité de l’administrateur

Étapes suivantes

Pour obtenir une vue d’ensemble des scénarios et fonctionnalités OSConfig, consultez :

Pour obtenir des exemples pratiques spécifiques, consultez :