教學課程:使用 Raspberry Pi 3 B+ 參考映像的 Azure IoT 中樞裝置更新

Azure IoT 中樞裝置更新支援映像型、套件型和指令碼型更新。

映像更新會在裝置的最終狀態提供更高的信賴度。 在生產前環境與生產環境之間複寫映像更新的結果通常比較容易,因為其不會引起與套件及其相依性相同的挑戰。 由於其不可部分完成的本質,您也可以輕鬆地採用 A/B 容錯移轉模型。

本教學課程將逐步引導您完成端對端映像型更新,方法是在 Raspberry Pi 3 B+ 面板上使用 IoT 中樞裝置更新。

在本教學課程中,您將了解如何:

  • 下載映像。
  • 將標籤新增至 IoT 裝置。
  • 匯入更新。
  • 部署映像更新。
  • 監視更新部署。

注意

已在 Raspberry Pi B3 面板上驗證本教學課程中的映像更新。

必要條件

如果您尚未這麼做,請建立裝置更新帳戶和執行個體,並設定 IoT 中樞。 本教學課程需要裝置透過乙太網路連線進行連線。

[裝置更新 GitHub 版本] 頁面上下載資產中的檔案。 Tutorial_RaspberryPi.zip 具有本教學課程所需的所有檔案。

在 IoT 中樞 中建立裝置,並取得連接字串

現在,將裝置新增至 IoT 中樞。 從 IoT 中樞內,為裝置產生連接字串。

  1. Azure 入口網站中,瀏覽至您的 IoT 中樞。

  2. 在左側窗格中,選取 [裝置]。 然後選取 [新增]。

  3. 在 [裝置識別碼] 下,輸入裝置的名稱。 確定已選取 [自動產生金鑰] 核取方塊。

  4. 選取 [儲存]。 在 [裝置] 頁面上,您建立的裝置應在清單中。

  5. 流覽至裝置檢視以取得裝置連接字串,選取[主要連接字串] 旁的[複製] 圖示。

  6. 將複製的字元貼到某處,稍後在下列步驟中使用:

    此複製的字串是您的裝置連接字串

注意

本教學課程使用裝置連接字串來驗證及與IoT 中樞連線,以方便設定。 針對生產案例,我們建議使用模組身分識別,並利用 AIS (IoT 身分識別服務) 來布建裝置。 瞭解更多資訊

設定 Raspberry Pi

我們在[裝置更新 GitHub 版本] 頁面上的資產中提供基底映射和更新檔案。 Tutorial_RaspberryPi.zip 具有本教學課程所需的所有檔案。 .wic 檔案是基底映射,您可以在 Raspberry Pi 3 B+ 面板上閃爍。 swUpdate (.swu) 檔案、自訂 swupdate 腳本和資訊清單是您要透過裝置更新匯入的更新檔案,以進行IoT 中樞。

此基底映射使用以 3.4.4 版為基礎的 Yocto 組建 (,) 搭配:

  • SWUpdate,可透過 DU 進行雙重分割區更新
  • 裝置更新代理程式

若要深入瞭解所使用的 Yocto 層,請參閱裝置更新 Yocto GitHub。

您可以使用您慣用的 OS 快閃工具,在將用於 Raspberry Pi 3 B+ 裝置的 SD 記憶卡上安裝裝置更新基底映射 (du-base-image) 。 以下是使用 bmaptool 閃爍至 SD 記憶卡的指示。

使用 bmaptool 來快閃 SD 記憶卡

  1. 安裝 bmaptool 公用程式 (如果您尚未安裝)。

    sudo apt-get install bmap-tools
    
  2. /dev 中找出 SD 記憶卡的路徑。 路徑應該會看起來像 /dev/sd*/dev/mmcblk*。 您可以使用 dmesg 公用程式來協助找出正確的路徑。

  3. 在快閃之前,請先卸載所有裝載的分割區。

    sudo umount /dev/<device>
    
  4. 確定您有裝置的寫入權限。

    sudo chmod a+rw /dev/<device>
    
  5. 選擇性:如需更快的快閃,請下載 bimap 檔案和映像檔,並將其放在相同的目錄中。

  6. 快閃 SD 記憶卡。

    sudo bmaptool copy <path to image> /dev/<device>
    

Azure IoT 中樞裝置更新軟體受限於下列授權條款:

在使用代理程式之前,請先閱讀授權條款。 安裝及使用代理程式即表示接受這些授權條款。 如果您不同意授權條款,請不要使用 IoT 中樞裝置更新代理程式。

在 Raspberry Pi 上設定裝置更新代理程式

  1. 確定 Raspberry Pi 3 已連線到網路。

  2. 使用 PowerShell 視窗中的下列命令,透過 SSH 連線到 Raspberry Pi 3:

      ssh raspberrypi3 -l root
    
  3. DU 組態檔 (du-config.json 和 du-diagnostics-config.json) 必須位於裝置上,才能正確設定IoT 中樞裝置更新。

    1. 若要使用下列 du-config.json 專案建立或開啟檔案以進行編輯:
      nano /adu/du-config.json
    
    1. 在執行命令之後,您應該會看到開啟的編輯器與檔案。 如果您從未建立檔案,其將是空的。 現在複製下列 du-config.json 內容,並以裝置所需的設定取代。 然後,將範例連接字串取代為您在先前步驟中為裝置建立的連接字串。

      du-config.json

    {
       "schemaVersion": "1.0",
       "aduShellTrustedUsers": [
          "adu",
          "do"
       ],
       "manufacturer": "contoso",
       "model": "virtual-vacuum-v2",
       "agents": [
          {
          "name": "main",
          "runas": "adu",
          "connectionSource": {
             "connectionType": "string",
             "connectionData": "HostName=example-connection-string.azure-devices.net;DeviceId=example-device;SharedAccessKey=M5oK/rOP12aB5678YMWv5vFWHFGJFwE8YU6u0uTnrmU=" 
          },
          "manufacturer": "contoso",
          "model": "virtual-vacuum-v2"
          }
       ]
    }  
    
    1. 完成您的變更之後,請選取 Ctrl+X 以結束編輯器。 然後輸入 y 以儲存變更。
  4. 現在,您必須使用類似的命令來建立 du-diagnostics-config.json 檔案。

    1. 首先,建立或開啟 du-diagnostics-config.json 檔案以進行編輯,方法是使用:
      nano /adu/du-diagnostics-config.json
    
    1. 複製下面提供的 du-diagnostics-config.json 內容,並取代與預設組建不同的任何組態。 範例 du-diagnostics-config.json 檔案代表 IoT 中樞裝置更新的預設記錄位置。 只有在實作不同時,您才需要變更這些預設值。

    du-diagnostics-config.json

    {
       "logComponents":[
          {
             "componentName":"adu",
             "logPath":"/adu/logs/"
          },
          {
             "componentName":"do",
             "logPath":"/var/log/deliveryoptimization-agent/"
          }
       ],
       "maxKilobytesToUploadPerLogPath":50
    }
    
    1. 完成您的變更之後,請選取 Ctrl+X 以結束編輯器。 然後輸入 y 以儲存變更。
  5. 使用下列命令來顯示位於 /adu/ 目錄中的檔案。 您應該會看到這兩個設定檔進行編輯,方法是使用:

      ls -la /adu/
    
  6. 重新啟動裝置更新系統精靈,以確定已套用設定。 在登入 raspberrypi 的終端機內使用下列命令:

      systemctl start deviceupdate-agent
    
  7. 使用下列命令檢查代理程式是否為即時:

      systemctl status deviceupdate-agent
    

    您應該會看到狀態顯示為運作中且綠色。

連線 IoT 中樞裝置更新中的裝置

  1. 在左側窗格中,選取 [裝置]。

  2. 選取具有您裝置名稱的連結。

  3. 在頁面頂端,選取 [裝置對應項]。

  4. 在 [裝置對應項] 屬性的 [報告] 區段下,尋找 Linux 核心版本。

    對於尚未從裝置更新接收更新的新裝置,DeviceManagement:DeviceInformation:1.swVersion 值代表裝置上執行的韌體版本。 在更新已套用至裝置之後,裝置更新會使用 AzureDeviceUpdateCore:ClientMetadata:4.installedUpdateId 屬性值來代表裝置上執行的韌體版本。

  5. 基礎和更新映像檔案在檔案名稱中具有版本號碼。

     adu-<image type>-image-<machine>-<version number>.<extension>
    

    在稍後的 [匯入更新] 區段中使用該版本號碼。

將裝置更新群組標籤新增至您的裝置

  1. 在 Azure 入口網站中,瀏覽至您的 IoT 中樞。

  2. 在左窗格的 [裝置] 底下,尋找您的 IoT 裝置,然後前往裝置對應項或模組對應項。

  3. 在裝置更新代理程式模組的模組對應項中,將其設定為 Null,以刪除任何現有的裝置更新標記值。 如果您使用裝置身分識別搭配裝置更新代理程式,請在裝置對應項上進行這些變更。

  4. 新增裝置更新標記值,如下所示:

        "tags": {
                "ADUGroup": "<CustomTagValue>"
                }
    

    顯示具有標記資訊的對應項螢幕擷取畫面。

    此螢幕擷取畫面顯示必須在對應項中新增標記的區段。

匯入更新

  1. 下載範例教學課程資訊清單和範例更新 (.swu 檔案) ,以及最新代理程式發行資產Tutorial_RaspberryPi.zip範例 A/B 腳本。

  2. 登入 Azure 入口網站,並使用裝置更新移至 IoT 中樞。 在左窗格中,選取 [自動裝置管理] 下的 [更新]。

  3. 選取 [更新] 索引標籤。

  4. 選取 [+ 匯入新的更新]。

  5. 選取 [+ 從儲存體容器選取]。 選取現有帳戶或使用 [+ 儲存體帳戶] 建立新帳戶。 然後選取現有的容器,或使用 [+ 容器] 建立新的容器。 此容器將用來暫存更新檔案以進行匯入。

    注意

    建議您在每次匯入更新時使用新的容器,以避免意外從先前的更新匯入檔案。 如果您沒有使用新的容器,請務必先刪除現有容器中的任何檔案,再完成此步驟。

    此螢幕擷取畫面顯示儲存體帳戶和容器。

  6. 在容器中,選取 [上傳],然後移至您在步驟 1 下載的檔案。 選取了所有更新檔案之後,請選取 [上傳]。 然後選取 [選取] 按鈕,以返回 [匯入更新] 頁面。

    此螢幕擷取畫面顯示選取已上傳的檔案。

    此螢幕擷取畫面顯示匯入步驟。 檔案名稱可能不符合範例中使用的檔案名稱。

  7. 在 [匯入更新] 頁面上,檢閱要匯入的檔案。 然後選取 [匯入更新] 以啟動匯入程序。 在本教學課程中,請匯入範例教學課程資訊清單和範例更新 (.swu 檔案) ,以及稍早下載的範例 A/B 腳本。

    此螢幕擷取畫面顯示匯入更新。

  8. 匯入程序隨即開始,畫面會切換至 [匯入歷程記錄] 區段。 當 [狀態] 資料行指出匯入成功時,請選取 [可用的更新] 標頭。 您現在應該會在清單中看到您匯入的更新。

    此螢幕擷取畫面顯示作業狀態。

如需匯入程式的詳細資訊,請參閱將更新匯入至裝置更新

檢視裝置群組

裝置更新」會利用群組來組織裝置。 裝置更新會根據裝置指派的標籤和相容性內容,自動將裝置分類為群組。 個別裝置僅屬於群組,但群組可有多個子群組來排序不同的裝置類型。

  1. 移至頁面頂端的 [群組和部署] 索引標籤。

    此螢幕擷取畫面顯示已取消群組的裝置。

  2. 檢視群組清單和更新符合性圖表。 更新合規性圖表顯示各種合規性狀態的裝置計數:最新的更新有新的更新可用更新進行中了解更新合規性

    此螢幕擷取畫面顯示更新合規性檢視。

  3. 您應該會看到裝置群組,其包含您在本教學課程設定的模擬裝置,以及新群組裝置的任何可用更新。 如果有不符合群組裝置類別需求的裝置,會顯示在對應的無效群組中。 若要從此檢視將最佳的可用更新部署到新的使用者定義群組,請選取群組旁的 [部署]。

如需標籤和群組的詳細資訊,請參閱管理裝置群組

部署更新

  1. 建立群組之後,您應該會看到裝置群組可用的新更新,包含 [最佳更新] 底下的更新連結。 您可能需要再次重新整理。

    如需符合性的詳細資訊,請參閱裝置更新符合性

  2. 選取群組名稱來選取目標群組。 系統會將您導向至 [群組基本資料] 下方的群組詳細資料。

    此螢幕擷取畫面顯示群組詳細資料。

  3. 若要起始部署,請移至 [目前部署] 索引標籤。從 [可用更新] 區段選取所需更新旁的部署連結。 指定群組的最佳可用更新會以最佳醒目提示來表示。

    此螢幕擷取畫面顯示選取更新。

  4. 排程您的部署,以立即或在未來啟動。 然後選取 [建立]。

    提示

    根據預設,開始日期和時間是目前時間起算 24 小時。 如果您想要提早開始部署,請務必選取不同的日期和時間。

    此螢幕擷取畫面顯示正在建立部署。

  5. 在 [部署詳細資料] 下方,[狀態] 會變成 [作用中]。 部署的更新會標示為 [(部署中)]。

    顯示部署狀態為 [作用中] 的螢幕擷取畫面。

  6. 檢視合規性圖表,以查看更新目前是否正在進行中。

  7. 成功更新裝置之後,您會看到符合性圖表和部署詳細資料已更新以反映相同內容。

    顯示更新已成功的螢幕擷取畫面。

監視更新部署

  1. 選取頁面頂端的 [部署歷程記錄] 索引標籤。

    此螢幕擷取畫面顯示 [部署歷程記錄]。

  2. 選取您所建立部署旁的詳細資料連結。

    此螢幕擷取畫面顯示 [部署詳細資料]。

  3. 選取 [重新整理] 以檢視最新狀態詳細資料。

您現在已在 Raspberry Pi 3 B+ 裝置上使用 IoT 中樞裝置更新,完成成功的端對端映像更新。

清除資源

不再需要時,請清除您的裝置更新帳戶、執行個體、IoT 中樞和 IoT 裝置。

下一步