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 :
Créer un compte Azure gratuit ou utiliser un compte existant
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
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
- Connectez-vous à votre Portail Azure et accédez à la page Vue
-OR- Si vous préférez utiliser Azure CLI
- RECOMMANDÉ : Utilisez Azure Cloud Shell comme environnement bash en vous connectant à votre portail Azure, puis lancez Azure Cloud Shell en mode bash
- ALTERNATIVE : Si vous préférez utiliser votre propre environnement bash plutôt que Cloud Shell, installez Azure CLI et connectez-vous
- 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.
- Portail : appareil spécifique
- Portail : à grande échelle
- CLI : appareil spécifique
- CLI : à grande échelle
À 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 dansproperties.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": [ ] } }
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 :
- Quelles sources de packages ont été ajoutées
- Indique si des appareils rencontrent des erreurs PackageManagerConfiguration
- Portail : appareil spécifique
- Portail : à grande échelle
- CLI : appareil spécifique
- CLI : à grande échelle
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.
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
Dans le jumeau de module OSConfig du même appareil, accédez aux propriétés, puis signalez, packageManagerConfiguration, puis état.
Cela affiche l’état le plus récent de la configuration du gestionnaire de package.
sourcesFileNames
doit refléter les deux canaux ajoutésexecutionStatus
doit être 2. Pour connaître les valeurs possibles, consultez la documentation sur l’extensibilité
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
• DanssourceDescriptor
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 » : nullgpgKeys 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 designed-by
danssources
•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 (viasigned-by
• Pour supprimer un fichier de clé de /usr/share/keyrings définikey-name
pour correspondre au nom de fichier (sans extension), et définiuri
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 connupackages 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 connusourcesFilenames 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 viadesiredState.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 dedesiredState
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 :