Tutorial: Atualização de Dispositivo do Azure para Hub IoT usando uma imagem do Raspberry Pi
A Atualização de Dispositivo para Hub IoT do Azure é compatível com atualizações baseadas em imagem, pacote e script. Este tutorial demonstra uma Atualização de Dispositivo para Hub IoT baseada em imagem de ponta a ponta usando uma imagem Yocto em uma placa Raspberry Pi 3 B+.
As atualizações de imagem fornecem um alto nível de confiança no estado final do dispositivo e não representam os mesmos desafios de gerenciamento de dependência e pacote como atualizações baseadas em pacote ou script. É mais fácil replicar os resultados de uma atualização de imagem entre um ambiente de pré-produção e produção ou adotar facilmente um modelo de failover A/B.
Neste tutorial, você:
- Baixe e instale uma atualização de imagem.
- Atribua uma marca ao dispositivo IoT.
- Importe a atualização da imagem.
- Implante a atualização de imagem.
- Exiba o histórico de implantação de atualização.
Pré-requisitos
Uma conta de Atualização de Dispositivo e uma instância configurada com um hub IoT.
Uma placa IoT do Raspberry Pi 3 conectada via Ethernet ao hardware que pode baixar e extrair os arquivos de imagem e controlar o dispositivo.
Observação
As atualizações de imagem neste tutorial foram validadas em uma placa Raspberry Pi B3.
Registrar o dispositivo e obter a cadeia de conexão
Adicione seu dispositivo ao registro de dispositivo no hub IoT e obtenha a cadeia de conexão que o Hub IoT gera para o dispositivo.
- No portal do Azure, abra a página do hub IoT associada à sua instância de atualização de dispositivo.
- No painel de navegação esquerdo, selecione Gerenciamento de dispositivo>Dispositivos.
- Na página Dispositivos, selecione Adicionar dispositivo.
- Em ID do Dispositivo, insira um nome para o dispositivo. Certifique-se de que a caixa de seleção Gerar chaves automaticamente esteja marcada.
- Selecione Salvar. O dispositivo aparece na lista na página Dispositivos.
- Na página Dispositivos, selecione o dispositivo que você registrou.
- Na página do dispositivo, selecione o ícone Copiar ao lado da Cadeia de conexão (chave primária). Salve essa cadeia de conexão do dispositivo a ser usada ao configurar o agente de Atualização de Dispositivo.
Observação
Para fins de demonstração, este tutorial usa uma cadeia de conexão de dispositivo para autenticar e conectar-se com o Hub IoT. Para cenários de produção, é melhor usar a identidade do módulo e o Serviço de Identidade IoT para provisionar dispositivos. Para obter mais informações, consulte provisionamento do agente de Atualização de Dispositivo.
Configurar o Raspberry Pi
O arquivo Tutorial_RaspberryPi3.zip tem todos os arquivos necessários para o tutorial. Baixe o arquivo da seção Ativos da versão mais recente na página Versões de Atualização de Dispositivo do GitHub e descompacte-o.
Na pasta Tutorial_RaspberryPi3 extraída, a imagem base que você pode exibir na placa Raspberry Pi é adu-base-image-raspberrypi3.wic. A imagem base usa um build yocto com base na versão 3.4.4. A imagem tem o agente de Atualização de Dispositivo e SWUpdate, que habilita a atualização de partição dupla da Atualização de Dispositivo. Para obter mais informações sobre as camadas Yocto, consulte Criar um sistema personalizado baseado em Linux com o agente de Atualização de Dispositivo usando o Projeto Yocto.
Os arquivos de atualização importados por meio da Atualização de Dispositivo são:
- Arquivo SWUpdate adu-update-image-raspberrypi3-1.2.0.swu
- Script SWUpdate personalizado example-a-b-update.sh
- Manifesto EDS-ADUClient.yocto-update.1.2.0.importmanifest.json
Usar bmaptool para atualizar o cartão SD
Importante
O software de Atualização de Dispositivo do Azure para Hub IoT está sujeito aos seguintes termos de licença:
Leia os termos de licença antes de usar o agente. A instalação e o uso do agente constituem a aceitação desses termos. Se você não concordar com os termos de licença, não use o agente de Atualização de Dispositivo.
Use uma ferramenta de flash do sistema operacional para instalar a imagem base de Atualização do Dispositivo no cartão SD que você usa no dispositivo Raspberry Pi. As instruções a seguir usam bmaptool
para piscar para o cartão SD. Substitua o espaço reservado <device>
pelo nome do dispositivo e o espaço reservado <path to image>
pelo caminho para o arquivo de imagem baixado.
Instale o utilitário
bmap-tools
se você não o tiver.sudo apt-get install bmap-tools
Localize o caminho do cartão SD em /dev. O caminho deve ser semelhante a /dev/sd* ou /dev/mmcblk*. Você pode usar o utilitário
dmesg
para ajudar a localizar o caminho correto.Desmonte todas as partições montadas antes de atualizar.
sudo umount /dev/<device>
Verifique se você tem permissões de gravação para o dispositivo.
sudo chmod a+rw /dev/<device>
Atualize o cartão SD.
sudo bmaptool copy <path to image> /dev/<device>
Dica
Para piscar mais rapidamente, você pode baixar o arquivo bimap e o arquivo de imagem e colocá-los no mesmo diretório.
Configurar o agente de Atualização de Dispositivo no Raspberry Pi
Verifique se o Raspberry Pi está conectado à rede.
Secure shell (SSH) no Raspberry Pi usando o seguinte comando em uma janela do PowerShell:
ssh raspberrypi3 -l root
Criar os arquivos de configuração de Atualização de Dispositivo
Os arquivos de configuração da Atualização de Dispositivo du-config.json e du-diagnostics-config.json devem estar no dispositivo. Para criar os arquivos, execute os seguintes comandos no terminal conectado ao Raspberry Pi.
Para criar o arquivo du-config.json ou abri-lo para edição, execute o seguinte comando:
nano /adu/du-config.json
O editor abre o arquivo du-config.json. Se você estiver criando o arquivo, ele estará vazio. Copie e cole o código a seguir no arquivo, substituindo os valores de exemplo por quaisquer configurações necessárias para seu dispositivo. Substitua a cadeia de caracteres de exemplo
connectionData
pela cadeia de conexão do dispositivo copiada na etapa de registro do dispositivo.{ "schemaVersion": "1.0", "aduShellTrustedUsers": [ "adu", "do" ], "manufacturer": "contoso", "model": "virtual-vacuum-v2", "agents": [ { "name": "main", "runas": "adu", "connectionSource": { "connectionType": "string", "connectionData": "HostName=<hub_name>.azure-devices.net;DeviceId=<device_id>;SharedAccessKey=<device_key>" }, "manufacturer": "contoso", "model": "virtual-vacuum-v2" } ] }
Pressione Ctrl+X para sair do editor e digite y para salvar suas alterações.
Crie o arquivo du-diagnostics-config.json usando comandos semelhantes. Crie e abra o arquivo:
nano /adu/du-diagnostics-config.json
Copie e cole o seguinte código du-diagnostics-config.json no arquivo. Os valores são os locais de log de Atualização de Dispositivo padrão e você precisará alterá-los somente se a configuração for diferente do padrão.
{ "logComponents":[ { "componentName":"adu", "logPath":"/adu/logs/" }, { "componentName":"do", "logPath":"/var/log/deliveryoptimization-agent/" } ], "maxKilobytesToUploadPerLogPath":50 }
Pressione Ctrl+X para sair do editor e digite y para salvar suas alterações.
Use o comando a seguir para mostrar os arquivos localizados no diretório /adu/. Você deve ver os dois arquivos de configuração.
ls -la /adu/
Use o comando a seguir para reiniciar o daemon do sistema de Atualização de Dispositivo e garantir que as configurações sejam aplicadas.
systemctl start deviceupdate-agent
Verifique se o agente está ativo executando o seguinte comando:
systemctl status deviceupdate-agent
O status deve aparecer como vivo e verde.
Conectar-se ao dispositivo no Hub IoT e adicionar uma marca de grupo
Na página do hub IoT do portal do Azure para sua instância de Atualização de Dispositivo, selecione Gerenciamento de dispositivo>Dispositivos na navegação à esquerda.
Na página Dispositivos, selecione o nome do dispositivo.
Na parte superior da página do dispositivo, selecione Dispositivo gêmeo.
Na página Dispositivo gêmeo, na seção
"reported"
da seção"properties"
do dispositivo gêmeo, procure a versão do kernel do Linux para seu dispositivo.Para um novo dispositivo que não recebeu uma atualização da Atualização do Dispositivo, o valor da propriedade DeviceManagement:DeviceInformation:1.swVersion representa a versão do firmware em execução no dispositivo. Depois que o dispositivo tiver uma atualização aplicada, o valor da propriedade AzureDeviceUpdateCore:ClientMetadata:4.installedUpdateId representa a versão do firmware.
Os nomes de arquivo de imagem base e de atualização têm o formato adu-<tipo de imagem>-imagem-<computador>-<número da versão>.<extensão>. Observe os números de versão a serem usados ao importar a atualização.
Adicionar uma marca de grupo
A Atualização de Dispositivo organiza automaticamente dispositivos em grupos com base em suas marcas atribuídas e propriedades de compatibilidade. Cada dispositivo pode pertencer a apenas um grupo, mas os grupos podem ter vários subgrupos para classificar classes de dispositivo diferentes. Para obter mais informações sobre as marcas e os grupos, consulte Gerenciar grupos de dispositivos.
No dispositivo gêmeo, exclua todos os valores de marca de Atualização de Dispositivo existentes definindo-os como nulos e, em seguida, adicione a nova marca de grupo atualização de dispositivo a seguir. Se você estiver usando uma Identidade de Módulo com o agente de Atualização de Dispositivo, adicione a marca no Gêmeo de Identidade do módulo em vez do dispositivo gêmeo.
"tags": { "ADUGroup": "<CustomTagValue>" },
A captura de tela a seguir mostra onde no arquivo para adicionar a marca.
Selecione Salvar.
Importar a atualização
Na página do hub IoT do portal do Azure para sua instância de Atualização de Dispositivo, selecione Gerenciamento de dispositivo>Atualizações na navegação à esquerda.
Na página Atualizações, selecione Importar uma nova atualização.
Na página Importar atualização, selecione Selecionar no contêiner de armazenamento.
Na página Contas de Armazenamento, selecione uma conta de armazenamento existente ou crie uma conta selecionando Conta de armazenamento.
Na página Contêineres, selecione um contêiner existente ou crie um novo contêiner selecionando Contêiner. Você usa o contêiner para preparar os arquivos de atualização para importação.
Dica
Para evitar a importação acidental de arquivos de atualizações anteriores, use um novo contêiner sempre que importar uma atualização. Se você não usar um novo contêiner, exclua todos os arquivos do contêiner existente.
Na página do contêiner, selecione Carregar. Arraste e solte ou navegue até e selecione os seguintes arquivos de atualização da pasta Tutorial_RaspberryPi3 baixada:
- adu-update-image-raspberrypi3-1.2.0.swu
- example-a-b-update.sh
- EDS-ADUClient.yocto-update.1.2.0.importmanifest.json
Escolha Carregar. Depois de carregarem, os arquivos serão exibidos na página do contêiner.
Na página do contêiner, examine e selecione os arquivos a serem importados e selecione Selecionar.
Na tela Importar atualização, selecione Importar atualização.
O processo de importação começa e a tela muda para a tela Atualizações. Depois que a importação for bem-sucedida, ela será exibida na guia Atualizações. Para obter mais informações sobre o processo de importação, consulte Importar uma atualização para a Atualização de Dispositivo.
Selecione o grupo de dispositivos
Você pode usar a marca de grupo aplicada ao dispositivo para implantar a atualização no grupo de dispositivos. Selecione a guia Grupos e Implantações na parte superior da página Atualizações para exibir a lista de grupos e implantações e o gráfico de conformidade de atualização.
O gráfico de conformidade da atualização mostra a contagem de dispositivos em vários estados de conformidade: Com a atualização mais recente, Novas atualizações disponíveis e Atualizações em andamento. Para obter mais informações, confira a Conformidade da Atualização de Dispositivo.
Em Nome do grupo, você vê uma lista de todos os grupos de dispositivos para dispositivos conectados a esse hub IoT e suas atualizações disponíveis, com links para implantar as atualizações em Status. Todos os dispositivos que não atendem aos requisitos de classe de dispositivo de um grupo aparecem em um grupo inválido correspondente. Para obter mais informações sobre as marcas e os grupos, consulte Gerenciar grupos de dispositivos.
Você deverá ver o grupo de dispositivos que contém o dispositivo configurado neste tutorial, juntamente com as atualizações disponíveis para os dispositivos no grupo. Talvez seja necessário atualizar a página. Para implantar a melhor atualização disponível para um grupo nessa exibição, selecione Implantar ao lado do grupo.
Implantar a atualização
Na página Detalhes do Grupo, selecione a guia Implantação atual e, em seguida, selecione Implantar ao lado da atualização desejada na seção Atualizações disponíveis. A melhor atualização disponível para o grupo é indicada com um Melhor em destaque.
Na página Criar implantação, agende sua implantação para iniciar imediatamente ou no futuro e selecione Criar.
Dica
Por padrão, a data e a hora de Início são 24 horas a partir do horário atual. Selecione uma data e hora diferentes se desejar que a implantação comece mais cedo.
Em Detalhes da implantação, o Status se torna Ativo. Em Atualizações disponíveis, a atualização selecionada é marcada com (implantando).
Na página Atualizações, exiba o gráfico de conformidade para ver que a atualização está em andamento. Depois que o dispositivo for atualizado com êxito, o gráfico de conformidade e os detalhes da implantação serão atualizados para refletir esse status.
Exibir o histórico de implantação de atualização
Para exibir o histórico de implantação:
Selecione a guia Histórico de implantação na parte superior da página Detalhes do Grupo e selecione o link de detalhes ao lado da implantação que você criou.
Na página Detalhes da implantação, selecione Atualizar para exibir os detalhes de status mais recentes.
Limpar os recursos
Quando você não precisar mais dos recursos criados para este tutorial, poderá excluí-los.
- No portal do Azure, navegue até o grupo de recursos que contém os recursos.
- Se você quiser excluir todos os recursos do grupo, selecione Excluir grupo de recursos.
- Se você quiser excluir apenas alguns dos recursos, use as caixas de seleção para selecionar os recursos e selecione Excluir.
Próximas etapas
- Atualização de Dispositivo para Hub IoT usando um agente de simulador
- Atualização de Dispositivo para Hub IoT usando um agente de pacote