Gerenciar o gerenciador de pacotes do sistema operacional usando o Azure IoT e OSConfig
Importante
A versão 1.0.3 (publicada em 28 de junho de 2022) inclui alterações significativas nos nomes dos membros que podem afetar os usuários existentes. Para obter mais informações, consulte: Transição de nomes de membro de PascalCase para camelCase na versão 1.0.3
Público-alvo e escopo
Este artigo foi projetado para dar suporte a pessoas que provisionam ou gerenciam dispositivos com o Azure IoT. Se isso não soar como você, considere dar uma olhada na documentação do Audiences for OSConfig.
Este artigo trata sobre como obter o estado desejado do gerenciador de pacotes e definir o estado desejado do gerenciador de pacotes. Por exemplo:
Funcionalidade | Casos de uso |
---|---|
Garantir que os gerenciadores de pacotes efetuem pull de suas fontes desejadas | • Sua política operacional é que os gerenciadores de pacotes de dispositivos devem ser retirados de um repositório de pacote privado com versões aprovadas de bibliotecas e componentes • Você precisa de dispositivos para obter pacotes do repositório de um fornecedor específico |
Informar os gerenciadores de pacotes dos pacotes desejados | • Sua política operacional é que os dispositivos devem ter um pacote específico, como "library-XYZ-v2" • Sua política operacional é que os dispositivos devem ter um grafo de dependência específico de pacotes |
Comparar o pacote de dispositivos ou listas de fontes |
• Sua política operacional é que a lista de pacotes instalados dos dispositivos implantados deve corresponder a um dispositivo bom conhecido |
Se você estiver aqui para obter informações de referência em vez de exemplos interativos de casos de uso, você poderá ir para a seção de referência.
Importante
Neste momento, as distribuições baseadas em apt , incluindo Debian e Ubuntu, estão no escopo. Se você quiser desenvolver suporte para distribuições baseadas em RPM, consulte a documentação de extensibilidade.
Em um ambiente sem apt (por exemplo, compilando da origem e em execução em uma distribuição da família Red Hat), você pode ver as seguintes mensagens de log indicando que o módulo PackageManagerConfiguration não é aplicável.
- Em osconfig_pmc.log, linhas incluindo o seguinte texto:
[ERROR] Cannot run on this platform, could not find required tool apt-get
- Em osconfig_pnp_agent.log, linhas incluindo o seguinte texto:
[ERROR] PackageManagerConfiguration.state: MpiGet failed with 500
Exemplos de casos de uso
Esses exemplos podem servir como pontos de partida para você se adaptar ao seu ambiente exclusivo.
Pré-requisitos para experimentar os exemplos em sistemas dinâmicos
Se você estiver usando este artigo para referência, não haverá pré-requisitos. Você pode examinar os exemplos, copiar nomes de propriedades etc.
Se você quiser experimentar os exemplos em sistemas dinâmicos (recomendado), siga estas etapas:
Criar uma conta gratuita do Azure ou usar uma conta existente
Conectar pelo menos um dispositivo habilitado para OSConfig a um Hub IoT
Dica
Para criar facilmente um Hub IoT com dispositivos (virtuais) anexados, consulte Criar um ambiente de laboratório do OSConfig (com o Azure IoT) em 5 minutos
Prepare-se para seguir a instrução portal do Azure ou as instruções da CLI do Azure nos exemplos:
Se preferir usar o portal do Azure
- Entre em seu portal do Azure e acesse a página visão geral do Hub IoT
-OR- Se você preferir usar a CLI do Azure
- RECOMENDADO: Use o Cloud Shell do Azure como seu ambiente bash entrando no Portal do Azure e iniciando o Azure Cloud Shell no modo bash
- ALTERNATIVA: se você preferir usar seu próprio ambiente bash em vez de Cloud Shell, instale a CLI do Azure e entre
- Verifique se a extensão de IoT do Azure está pronta executando
az extension add --name azure-iot
Exemplo 1. Especificar fontes de pacote desejadas
Este exemplo demonstra o fluxo de trabalho do Azure IoT para garantir que os dispositivos usem, como uma de suas fontes de pacote, o canal packages.microsoft.com prod para o Ubuntu 18.04. Você pode adaptar este exemplo para usar qualquer fonte de pacote. Por exemplo, um repositório público de distribuição/versão diferente, um repositório de um fornecedor específico ou um repositório privado que você faz a curadoria.
As instruções estão disponíveis em tipos para portal, CLI, dispositivo específico e provisionamento e gerenciamento em escala.
Na página do portal do seu Hub IoT, navegue até o gêmeo OSConfig para o dispositivo que você deseja gerenciar e adicione o seguinte à
properties.desired
seção, seguido por uma vírgula para separá-lo do próximo item emproperties.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": [ ] } }
O exemplo 1 foi sobre a definição de uma nova fonte de pacote. Para relatar o mesmo, continue para o Exemplo 2.
Exemplo 2. Relatório sobre o estado e a configuração do gerenciador de pacotes
Neste exemplo, relataremos:
- Quais fontes de pacotes foram adicionadas
- Se algum dispositivo está enfrentando erros de PackageManagerConfiguration
No Exemplo 1 acima, adicionamos um valor de PackageManagerConfiguration desejado ao módulo gêmeo OSConfig de um dispositivo específico. Agora podemos observar os resultados.
Aguarde 1 minuto (para comunicações de rede, atividade do lado do dispositivo etc.) depois de ter adicionado o PackageManagerConfiguration desejado no exemplo acima
No módulo gêmeo OSConfig do mesmo dispositivo, navegue até as propriedades e, em seguida, reporte e, em seguida, PackageManagerConfiguration e, em seguida, estado.
Isso mostrará o status mais recente da configuração do gerenciador de pacotes.
sourcesFileNames
deve refletir os dois canais adicionadosexecutionStatus
deve ser 2. Para obter valores possíveis, consulte: documentação de extensibilidade
Informações de referência
Descrição do modelo de objeto
Esta seção descreve as propriedades do gêmeo e os comportamentos correspondentes.
É útil entender que, no Azure IoT, há dois modelos mentais ou perspectivas para descrever o conteúdo gêmeo.
Perspectiva simples desejada/relatada
Esse é o modelo de objeto principal Hub IoT. Ele é usado pelo serviço de consulta Hub IoT, Hub IoT serviço de configurações,
az iot hub module-twin
comandos e pelas exibições de gêmeo simples no Portal do Azure e no IoT Explorer.Perspectiva aprimorada da DTDL (Linguagem de Definição de Gêmeo Digital)
O DTDL (com padrões correspondentes, incluindo o Azure IoT Plug and Play [PnP]) permite que aplicativos e serviços antecipem, validem e contextualizem melhor o conteúdo do gêmeo. Isso é usado pelas exibições PnP no IoT Explorer, pelo serviço dos Gêmeos Digitais do Azure e potencialmente pela sua solução de nuvem ao interagir com Hub IoT.
Na maioria dos casos abaixo, nenhuma distinção é necessária. Por exemplo, "gpgKeys" é chamado de "gpgKeys" em qualquer ponto de exibição.
Em certos casos, uma distinção pode ser útil. Por exemplo, os valores de caminho fornecidos abaixo. Nesses casos, a descrição simples desejada/relatada é fornecida primeiro, seguida por uma perspectiva aprimorada de DTDL em parênteses.
desiredState (entrada do administrador)
Caminho:
properties.desired.PackageManagerConfiguration.desiredState
(DTDL:PackageManagerConfiguration
componente -->desiredState
propriedade gravável)Descrição: entrada do administrador; habilita a adição de fontes de pacote e pacotes a dispositivos
Membros
Nome Type Observações origens mapa de sourceName
:sourceDescriptor
pares (cadeias de caracteres)Para cada par no dicionário:
•sourceName
é um identificador especificado pelo administrador, por exemplo:*my-source-foo*
•sourceDescriptor
é uma cadeia de caracteres de definição de origem no formato usado pelo gerenciador de pacotes; por exemplo:deb [arch=amd64,armhf,arm64 signed-by=my-repo-key] https://packages.microsoft.com/ubuntu/18.04/prod focal main
• DentrosourceDescriptor
do valor passado devesigned-by=
ser o nome de uma chave degpgKeys
(descrito abaixo); por exemplo: signed-by=my-source-foo-key
• Ao adicionar ou modificar uma origem, um arquivo em sources.list.d será preenchido (substituindo o arquivo existente se presente) com o descritor de origem
• Para especificar que os dispositivos não devem usar uma fonte específica (supondo que ela tenha sido definida anteriormente em sources.list.d, não em outro lugar do sistema), inclua um par como"my-source-bar": ""
; Se um arquivo chamado my-source-bar.list existir em sources.list.d , ele será removido
• Se você não precisar mais de uma diretiva não deve usar (por exemplo, minha barra de origem não é mais relevante após algum tempo), você pode removê-la do gêmeo desejado alterando o valor de "my-source-bar": "" para "my-source-bar": nullgpgKeys mapa de key-name
:uri
pares (cadeias de caracteres)Usado para informar o pacote
gerente de chaves públicas do repositório;
Para cada par no dicionário:
•key-name
é um identificador especificado pelo administrador; por exemplo: my-repo-foo-key, que é referenciado emsigned-by
sources
•uri
é o local da chave pública de um repositório; por exemplo:https://packages.microsoft.com/keys/microsoft.asc
• A chave é adicionada como um arquivo a /usr/share/keyrings/; Observe que, para garantir que a aplicabilidade da chave esteja no escopo, esse caminho não específico é usado; apt só aplicará essa chave a fontes que estão explicitamente associadas a ela (por meio designed-by
• Para remover um arquivo de chave de /usr/share/keyrings definidokey-name
para corresponder ao nome do arquivo (sem extensão) e definiruri
como ""pacotes matriz de identificadores de pacote (cadeias de caracteres) • Instrui o gerenciador de pacotes a garantir que esses pacotes sejam instalados
• Análogo a apt instalar <nomes> de pacote no Debian
• Aditivo (não destrutivo) por natureza; por exemplo, uma lista vazia significa "não fazer nada" (não "desinstalar todos os pacotes no sistema")Conteúdo de exemplo (como visto na seção do
properties.desired
gêmeo de um gêmeo Hub IoT)"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
Caminho:
properties.reported.PackageManagerConfiguration.state
(perspectiva DTDL:PackageManagerConfiguration
componente -->state
propriedade somente leitura)Descrição: estado PackageManagerConfiguration, conforme relatado pelo dispositivo
Membros
Nome Type Observações packagesFingerprint string • Impressão digital opaca para a lista de todos os pacotes instalados no dispositivo (não limitado a pacotes referenciados em desiredState.packages
)
• Usado para comparar um grande número de dispositivos com um dispositivo conhecidopacotes matriz de identificadores de pacote (cadeias de caracteres) • Nome e status (versão ou "falha") dos pacotes especificados pelo administrador de desiredState.packages
• Se um pacote tiver sido instalado com êxito, o nome será seguido pelo número de versão instalado
• Se não foi possível instalar um pacote, o nome será seguido por "falha"sourcesFingerprint string • Impressão digital opaca das fontes de pacote usadas pelo dispositivo
• Usado para comparar um grande número de dispositivos com um dispositivo conhecidosourcesFilenames matriz de nomes de arquivo (cadeias de caracteres) • Lista de fontes de pacote (como nomes de arquivo, por exemplo , my-repo.list) que foram adicionadas ao gerenciador de pacotes por meio de /etc/apt/sources.list.d (no Debian)
• Inclui todas as fontes presentes, independentemente de terem sido adicionadas por meio dedesiredState.sources
executionState INT • Estado geral de êxito/falha
• Os valores nominais são 0 (estado inicial, nenhum desiredState foi especificado) ou 2 (êxito)
• Para outros valores, consulte: documentação de extensibilidadeexecutionSubstate INT • Para obter valores possíveis, consulte: documentação de extensibilidade executionSubstateDetails string • Informações adicionais para solução de problemas Conteúdo de exemplo (como visto na seção do
properties.reported
gêmeo)"PackageManagerConfiguration": { "state": { "packagesFingerprint": "9e7a85de3d067474e3621d7e1618f6ac0e2e8fc6cb9d60ee92af9927294114d3", "packages": [ "cowsay=3.03+dfsg2-7" ], "executionState": 2, "executionSubstate": 0, "executionSubstateDetails": "", "sourcesFingerprint": "64b7de49c2be4ef2c180e4a978300fbb7b8a743a89e4038ba7ac6a91c31b625f", "sourcesFilenames": [ "pkgs-msft_insiders-slow.list" ] } }
desiredState (relatado; confirmação do dispositivo)
Caminho:
properties.reported.PackageManagerConfiguration.desiredState
(perspectiva DTDL:PackageManagerConfiguration
componente --> parte ACK dadesiredState
propriedade gravável)Descrição: esse elemento relatado adicional é uma confirmação do dispositivo; para ferramentas de administração e suplementos de relatório, permitindo que a cadeia de ferramentas
state
de administrador determine se o dispositivo ainda recebeu a intenção de administrador capturada no admin-writable/desireddesiredState
Membros
Nome Type Observações value objeto • Deve espelhar properties.desired.PackageManagerConfiguration.desiredState
ac INT • Indica êxito (valor 200) ou falha (valor 400) do dispositivo que recebe e processa desiredState do administrador
Próximas etapas
Para obter uma visão geral dos cenários e funcionalidades do OSConfig, consulte:
Para obter exemplos práticos específicos, consulte: