Gestire gestione pacchetti del sistema operativo con Azure IoT e OSConfig

Importante

La versione 1.0.3 (pubblicata 28 giugno 2022) include modifiche di rilievo ai nomi dei membri che potrebbero influire sugli utenti esistenti. Per altre informazioni, vedere: I nomi dei membri passano da PascalCase a camelCase nella versione 1.0.3

Destinatari e ambito

Questo articolo è progettato per supportare le persone che effettuano il provisioning o la gestione dei dispositivi con Azure IoT. Se questo non è simile a te, prendere in considerazione Destinatari per la documentazione di OSConfig.

Questo articolo descrive come ottenere lo stato di Gestione pacchetti e impostare lo stato desiderato di Gestione pacchetti. Ad esempio:

Funzionalità Casi d'uso
Assicurarsi che i gestori pacchetti eseggono dall'origine desiderata • I criteri operativi sono che i gestori dei pacchetti di dispositivi devono eseguire il pull da un repository di pacchetti privati con versioni approvate di librerie e componenti
• È necessario che i dispositivi ottengano pacchetti dal repository di un fornitore specifico
Informare i gestori pacchetti dei pacchetti desiderati • I criteri operativi sono che i dispositivi devono avere un pacchetto specifico come "library-XYZ-v2"
• I criteri operativi sono che i dispositivi devono avere un grafico di dipendenza specifico dei pacchetti
Confrontare il pacchetto dei dispositivi
o elenchi di origini
• I criteri operativi sono che l'elenco dei pacchetti installati dai dispositivi distribuiti deve corrispondere a un dispositivo valido noto

Se si è qui per informazioni di riferimento anziché esempi di casi d'uso interattivi, è possibile passare alla sezione di riferimento.

Importante

A questo punto, le distribuzioni basate su apt, tra cui Debian e Ubuntu sono nell'ambito. Per sviluppare il supporto per le distribuzioni basate su RPM, vedere la documentazione sull'estendibilità.

In un ambiente senza apt (ad esempio, la compilazione dall'origine e l'esecuzione in una distribuzione della famiglia Red Hat), è possibile che vengano visualizzati i messaggi di log seguenti che indicano che il modulo PackageManagerConfiguration non è applicabile.

  • In osconfig_pmc.log le righe includono il testo seguente:
    [ERROR] Cannot run on this platform, could not find required tool apt-get
  • In osconfig_pnp_agent.log le righe includono il testo seguente:
    [ERROR] PackageManagerConfiguration.state: MpiGet failed with 500

Esempi di casi d'uso

Questi esempi possono fungere da punti di partenza per adattarsi all'ambiente univoco.

Prerequisiti per provare gli esempi nei sistemi in tempo reale

Se si usa questo articolo per informazioni di riferimento, non sono presenti prerequisiti. È possibile esaminare gli esempi, copiare i nomi delle proprietà e così via.

Per provare gli esempi nei sistemi live (consigliato), seguire questa procedura:

  1. Creare un account Azure gratuito o usare un account esistente

  2. Connettere almeno un dispositivo abilitato per OSConfig a un hub IoT

    Suggerimento

    Per creare facilmente un hub IoT con dispositivi collegati (virtuali), vedere Creare un ambiente lab OSConfig (con Azure IoT) in 5 minuti

  3. Iniziare a seguire l'istruzione portale di Azure o le istruzioni dell'interfaccia della riga di comando di Azure negli esempi:

Se si preferisce usare la portale di Azure

  1. Accedere alla pagina Panoramica del portale di Azure e accedere alla pagina Panoramica dell'hub IoT che mostra hub IoT e dispositivi dal portale di Azure

-OR- Se si preferisce usare l'interfaccia della riga di comando di Azure

  1. CONSIGLIATO: usare Azure Cloud Shell come ambiente bash accedendo al portale di Azure, quindi avviando Azure Cloud Shell in modalità bash Acquisizione schermata di apertura Cloud Shell dal portale di Azure
  2. ALTERNATIVA: se si preferisce usare un ambiente bash personalizzato anziché Cloud Shell, installare l'interfaccia della riga di comando di Azure e accedere
  3. Verificare che l'estensione Azure IoT sia pronta eseguendo az extension add --name azure-iot

Esempio 1. Specificare le origini del pacchetto desiderate

In questo esempio viene illustrato il flusso di lavoro azure IoT per assicurarsi che i dispositivi usino, come una delle relative origini del pacchetto, il canale packages.microsoft.com prod per Ubuntu 18.04. È possibile adattare questo esempio per usare qualsiasi origine del pacchetto. Ad esempio, un repository pubblico di distribuzione/versione diverso, un determinato repository del fornitore o un repository privato curato.

Le istruzioni sono disponibili nei tipi di portale, interfaccia della riga di comando, dispositivo specifico e provisioning e gestione su larga scala.

  1. Dalla pagina del portale di hub IoT passare al gemello OSConfig per il dispositivo che si vuole gestire e aggiungere il codice seguente alla properties.desired sezione, seguito da una virgola per separarla dall'elemento successivo 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": [
          ]
       }
    }
    
    

    Acquisizione schermata che mostra come configurare la configurazione di Gestione pacchetti dal portale di Azure

L'esempio 1 riguardava la definizione di una nuova origine del pacchetto. Per la creazione di report sullo stesso, continuare con l'esempio 2.

Esempio 2. Report sullo stato e la configurazione di Gestione pacchetti

In questo esempio verrà visualizzato un report su:

  1. Quali origini pacchetti sono state aggiunte
  2. Indica se i dispositivi riscontrano errori packageManagerConfiguration

Nell'esempio 1 precedente è stato aggiunto un valore PackageManagerConfiguration desiderato al modulo OSConfig gemello di un dispositivo specifico. È ora possibile osservare i risultati.

  1. Attendere 1 minuto (per le comunicazioni di rete, l'attività sul lato dispositivo e così via) dopo aver aggiunto l'oggetto PackageManagerConfiguration desiderato nell'esempio precedente

  2. Nello stesso modulo OSConfig del dispositivo gemello passare alle proprietà, quindi segnalato, quindi PackageManagerConfiguration, quindi stato.

  3. Verrà visualizzato lo stato più recente della configurazione di Gestione pacchetti.

    1. sourcesFileNames deve riflettere i due canali aggiunti
    2. executionStatus deve essere 2. Per i valori possibili, vedere la documentazione di estendibilità

    Acquisizione schermata che mostra come verificare la configurazione di Gestione pacchetti dal portale di Azure

Informazioni di riferimento

Descrizione del modello a oggetti

In questa sezione vengono descritte le proprietà dei dispositivi gemelli e i comportamenti corrispondenti.

È utile comprendere che in Azure IoT sono disponibili due modelli mentali o prospettive per descrivere il contenuto dei dispositivi gemelli.

  • Prospettiva desiderata/segnalata normale

    Si tratta del modello a oggetti principale hub IoT. Viene usato dal servizio query hub IoT, dal servizio configurazioni hub IoT, az iot hub module-twin dai comandi e dalle visualizzazioni dei gemelli semplici nel portale di Azure e in IoT Explorer.

  • Prospettiva avanzata del linguaggio DTDL (Digital Twin Definition Language)

    DTDL (con modelli corrispondenti, tra cui Azure Plug and Play IoT [PnP]) consente alle app e ai servizi di prevedere, convalidare e migliorare la contestualizzazione del contenuto gemello. Viene usata dalle visualizzazioni PnP in IoT Explorer, dal servizio Gemelli digitali di Azure e potenzialmente dalla soluzione cloud durante l'interazione con hub IoT.

Nella maggior parte dei casi di seguito non è necessaria alcuna distinzione. Ad esempio, "gpgKeys" è denominato "gpgKeys" in entrambi i punti di vista.

In alcuni casi, può essere utile una distinzione. Ad esempio, i valori path indicati di seguito. In questi casi, viene prima fornita la descrizione desiderata/segnalata normale, seguita da una prospettiva avanzata DTDL tra parentesi.

desiredState (input dall'amministratore)
  • Percorso: properties.desired.PackageManagerConfiguration.desiredState (DTDL: PackageManagerConfiguration componente -->desiredState proprietà scrivibile)

  • Descrizione: input dall'amministratore; consente l'aggiunta di origini e pacchetti di pacchetti ai dispositivi

  • Members

    Nome Type Note
    sources mappa di sourceName: sourceDescriptor coppie (stringhe) Per ogni coppia nel dizionario:
    • sourceName è un identificatore specificato dall'amministratore, ad esempio: *my-source-foo*
    • sourceDescriptor è una stringa di definizione di origine nel formato utilizzato dalla gestione pacchetti, ad esempio: deb [arch=amd64,armhf,arm64 signed-by=my-repo-key] https://packages.microsoft.com/ubuntu/18.04/prod focal main
    • All'interno sourceDescriptor del valore passato a signed-by= deve essere il nome di una chiave da gpgKeys (descritto di seguito); ad esempio: signed-by=my-source-foo-key
    • Quando si aggiunge o si modifica un'origine, un file in sources.list.d verrà popolato (sovrascrivendo il file esistente, se presente) con il descrittore di origine
    • Per specificare che i dispositivi non devono usare una determinata origine (presupponendo che sia stata definita in precedenza in sources.list.d, non altrove nel sistema), includere una coppia come "my-source-bar": ""; Se esiste un file denominato my-source-bar.list in sources.list.d , verrà rimosso
    • Se non è più necessario usare una direttiva ( ad esempio, my-source-bar non è più rilevante dopo un certo periodo di tempo), è possibile rimuoverlo dal gemello desiderato modificando il valore da "my-source-bar": "" a "my-source-bar": null
    gpgKeys mappa di key-name: uri coppie (stringhe) Usato per informare il pacchetto
    responsabile delle chiavi pubbliche del repository;
    Per ogni coppia nel dizionario:
    • key-name è un identificatore specificato dall'amministratore, ad esempio my-repo-foo-key, a cui viene fatto riferimento da signed-by in sources
    • uri è la posizione della chiave pubblica di un repository, ad esempio: https://packages.microsoft.com/keys/microsoft.asc
    • La chiave viene aggiunta come file a /usr/share/keyrings/; Si noti che per assicurarsi che l'applicabilità della chiave sia con ambito, viene usato questo percorso non specifico di apt; apt applicherà solo la chiave alle origini che sono associate in modo esplicito (tramite signed-by
    • Per rimuovere un file di chiave da /usr/share/keyrings impostato key-name in modo che corrisponda al nome del file (senza estensione) e impostato su uri""
    packages matrice di identificatori di pacchetto (stringhe) • Indica a Gestione pacchetti di assicurarsi che questi pacchetti siano installati
    • Analogo a apt install <package names> on Debian
    • Additivi (non distruttivi) in natura; Ad esempio, un elenco vuoto significa "non eseguire alcuna operazione" (non "disinstallare tutti i pacchetti nel sistema")
  • Payload di esempio (come illustrato nella sezione del properties.desired gemello di un hub IoT gemello)

    "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
  • Percorso: properties.reported.PackageManagerConfiguration.state (prospettiva DTDL: PackageManagerConfiguration componente -->state proprietà di sola lettura)

  • Descrizione: PackageManagerConfiguration state as reported by the device

  • Members

    Nome Type Note
    packagesFingerprint string • Impronta digitale opaca per l'elenco di tutti i pacchetti installati nel dispositivo (non limitati ai pacchetti a cui si fa riferimento in desiredState.packages)
    • Usato per confrontare un numero elevato di dispositivi con un dispositivo valido noto
    packages matrice di identificatori di pacchetto (stringhe) • Nome e stato (versione o "non riuscita") dei pacchetti specificati dall'amministratore da desiredState.packages
    • Se un pacchetto è stato installato correttamente, il nome è seguito dal numero di versione installato
    • Se non è stato possibile installare un pacchetto, il nome è seguito da "failed"
    sourcesFingerprint string • Impronta digitale opaca delle origini dei pacchetti usate dal dispositivo
    • Usato per confrontare un numero elevato di dispositivi con un dispositivo valido noto
    sourcesFilenames matrice di nomi di file (stringhe) • Elenco di origini dei pacchetti (come nomi di file, ad esempio my-repo.list) che sono stati aggiunti alla gestione pacchetti tramite /etc/apt/sources.list.d (in Debian)
    • Include tutte le fonti presenti, indipendentemente dal fatto che siano state aggiunte tramite desiredState.sources
    executionState INT • Stato complessivo di esito positivo/guasto
    • I valori nominale sono 0 (stato iniziale, non è stato specificato desiredState) o 2 (completato)
    • Per altri valori, vedere: documentazione di estendibilità
    executionSubstate INT • Per i valori possibili, vedere: documentazione dell'estendibilità
    executionSubstateDetails string • Informazioni aggiuntive per la risoluzione dei problemi
  • Payload di esempio (come illustrato nella sezione del properties.reported gemello)

    "PackageManagerConfiguration": {
        "state": {
           "packagesFingerprint": "9e7a85de3d067474e3621d7e1618f6ac0e2e8fc6cb9d60ee92af9927294114d3",
           "packages": [
              "cowsay=3.03+dfsg2-7"
           ],
           "executionState": 2,
           "executionSubstate": 0,
           "executionSubstateDetails": "",
           "sourcesFingerprint": "64b7de49c2be4ef2c180e4a978300fbb7b8a743a89e4038ba7ac6a91c31b625f",
           "sourcesFilenames": [
              "pkgs-msft_insiders-slow.list"
           ]
        }
    }
    
desiredState (segnalato; riconoscimento dal dispositivo)
  • Percorso: (prospettiva DTDL: properties.reported.PackageManagerConfiguration.desiredStatePackageManagerConfiguration componente --> Parte ACK della desiredState proprietà scrivibile)

  • Descrizione: questo elemento segnalato aggiuntivo è un riconoscimento dal dispositivo; per gli strumenti di amministrazione e la creazione di report, stateabilitando la toolchain di amministrazione per determinare se il dispositivo ha ancora ricevuto la finalità di amministratore acquisita nell'amministratore-writable/desiderato desiredState

  • Members

    Nome Type Note
    Valore object • Deve eseguire il mirroring properties.desired.PackageManagerConfiguration.desiredState
    ac INT • Indica l'esito positivo (valore 200) o l'errore (valore 400) del dispositivo che riceve ed elabora desiredState dall'amministratore

Passaggi successivi

Per una panoramica degli scenari e delle funzionalità osConfig, vedere:

Per esempi pratici specifici, vedere: