教學課程:使用 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 中樞內,為裝置產生連接字串。
從 Azure 入口網站中,瀏覽至 IoT 中樞。
在左側窗格中,選取 [裝置]。 然後選取下一步。
在 [裝置識別碼] 下,輸入裝置的名稱。 確定已選取 [自動產生金鑰] 核取方塊。
選取 [儲存]。 在 [裝置] 頁面上,您建立的裝置應在清單中。
瀏覽至裝置檢視以取得裝置連接字串,選取 [主要連接字串] 旁的 [複製] 圖示。
將複製的字元貼到某處,稍後在下列步驟中使用:
此複製的字串是您的裝置連接字串。
注意
本教學課程使用裝置連接字串進行驗證以及與 IoT 中樞連線,以便設定。 針對生產案例,我們建議使用模組身分識別,並利用 AIS (IoT 身分識別服務) 來佈建裝置。 深入了解
設定 Raspberry Pi
我們在裝置更新 GitHub 發行頁面上的 [資產] 中提供基底映像和更新檔案。 Tutorial_RaspberryPi.zip 具有教學課程的所有必要檔案。 .wic 檔案是基礎映像,您可以將其快閃至 Raspberry Pi 3 B+ 面板。 swUpdate(.swu) 檔案、自訂 swupdate 指令碼和資訊清單是您要透過 IoT 中樞裝置更新匯入的更新檔案。
此基底映像使用 Yocto 組建 (以 3.4.4 版為基礎) 搭配:
- SWUpdate,其可使用 DU 啟用雙重分割區更新
- 裝置更新代理程式
若要深入了解使用的 Yocto 層,請參閱裝置更新 Yocto GitHub。
您可使用您最愛的 OS 快閃工具,在 SD 記憶卡上安裝將用於 Raspberry Pi 3 B+ 裝置的裝置更新基礎映像 (du-base-image)。 以下是使用 bmaptool 燒錄至 SD 記憶卡的指示。
使用 bmaptool 來快閃 SD 記憶卡
安裝
bmaptool
公用程式 (如果您尚未安裝)。sudo apt-get install bmap-tools
在
/dev
中找出 SD 記憶卡的路徑。 路徑應該會看起來像/dev/sd*
或/dev/mmcblk*
。 您可以使用dmesg
公用程式來協助找出正確的路徑。在快閃之前,請先卸載所有裝載的分割區。
sudo umount /dev/<device>
確定您有裝置的寫入權限。
sudo chmod a+rw /dev/<device>
選擇性:如需更快的快閃,請下載 bimap 檔案和映像檔,並將其放在相同的目錄中。
快閃 SD 記憶卡。
sudo bmaptool copy <path to image> /dev/<device>
Azure IoT 中樞裝置更新軟體受限於下列授權條款:
在使用代理程式之前,請先閱讀授權條款。 安裝及使用代理程式即表示接受這些授權條款。 如果您不同意授權條款,請不要使用 IoT 中樞裝置更新代理程式。
在 Raspberry Pi 上設定裝置更新代理程式
確定 Raspberry Pi 3 已連線到網路。
在 PowerShell 視窗中使用下列命令,透過 SSH 連線到 Raspberry Pi 3:
ssh raspberrypi3 -l root
DU 組態檔 (du-config.json 和 du-diagnostics-config.json) 必須位於裝置上,才能正確設定 IoT 中樞的裝置更新。
- 若要建立或開啟
du-config.json
檔案以進行編輯,請使用:
nano /adu/du-config.json
在執行命令之後,您應該會看到開啟的編輯器與檔案。 如果您從未建立檔案,其將是空的。 現在複製下面 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=<hub_name>.azure-devices.net;DeviceId=<device_id>;SharedAccessKey=<device_key>" }, "manufacturer": "contoso", "model": "virtual-vacuum-v2" } ] }
- 完成您的變更之後,請選取
Ctrl+X
以結束編輯器。 然後輸入y
以儲存變更。
- 若要建立或開啟
現在,您必須使用類似的命令來建立
du-diagnostics-config.json
檔案。- 首先,建立或開啟
du-diagnostics-config.json
檔案以進行編輯,方法是使用:
nano /adu/du-diagnostics-config.json
- 複製下面提供的 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 }
- 完成您的變更之後,請選取
Ctrl+X
以結束編輯器。 然後輸入y
以儲存變更。
- 首先,建立或開啟
使用下列命令來顯示位於
/adu/
目錄中的檔案。 您應該會看到這兩個設定檔進行編輯,方法是使用:ls -la /adu/
重新啟動裝置更新系統精靈,以確定已套用設定。 在登入
raspberrypi
的終端機內使用下列命令:systemctl start deviceupdate-agent
使用下列命令檢查代理程式是否為即時:
systemctl status deviceupdate-agent
您應該會看到狀態顯示為運作中且綠色。
連線 IoT 中樞裝置更新中的裝置
在左側窗格中,選取 [裝置]。
選取具有您裝置名稱的連結。
在頁面頂端,選取 [裝置對應項]。
在 [裝置對應項] 屬性的 [報告] 區段下,尋找 Linux 核心版本。
對於尚未從裝置更新接收更新的新裝置,DeviceManagement:DeviceInformation:1.swVersion 值代表裝置上執行的韌體版本。 在更新已套用至裝置之後,裝置更新會使用 AzureDeviceUpdateCore:ClientMetadata:4.installedUpdateId 屬性值來代表裝置上執行的韌體版本。
基礎和更新映像檔案在檔案名稱中具有版本號碼。
adu-<image type>-image-<machine>-<version number>.<extension>
在稍後的 [匯入更新] 區段中使用該版本號碼。
將裝置更新群組標籤新增至您的裝置
在 Azure 入口網站中,瀏覽至您的 IoT 中樞。
在左窗格的 [裝置] 底下,尋找您的 IoT 裝置,然後前往裝置對應項或模組對應項。
在裝置更新代理程式模組的模組對應項中,將其設定為 Null,以刪除任何現有的裝置更新標記值。 如果您使用裝置身分識別搭配裝置更新代理程式,請在裝置對應項上進行這些變更。
新增裝置更新標記值,如下所示:
"tags": { "ADUGroup": "<CustomTagValue>" }
此螢幕擷取畫面顯示必須在對應項中新增標記的區段。
匯入更新
從最新代理程式的 [發行資產] 之下的 Tutorial_RaspberryPi.zip,下載範例教學課程資訊清單和範例更新 (.swu 檔案) 和範例 A/B 指令碼。
登入 Azure 入口網站,並使用裝置更新移至 IoT 中樞。 在左窗格中,選取 [自動裝置管理] 下的 [更新]。
選取 [更新] 索引標籤。
選取 [+ 匯入新的更新]。
選取 [+ 從儲存體容器選取]。 選取現有帳戶或使用 [+ 儲存體帳戶] 建立新帳戶。 然後選取現有的容器,或使用 [+ 容器] 建立新的容器。 此容器將用來暫存更新檔案以進行匯入。
注意
建議您在每次匯入更新時使用新的容器,以避免意外從先前的更新匯入檔案。 如果您沒有使用新的容器,請務必先刪除現有容器中的任何檔案,再完成此步驟。
在容器中,選取 [上傳],然後移至您在步驟 1 下載的檔案。 選取了所有更新檔案之後,請選取 [上傳]。 然後選取 [選取] 按鈕,以返回 [匯入更新] 頁面。
此螢幕擷取畫面顯示匯入步驟。 檔案名稱可能不符合範例中使用的檔案名稱。
在 [匯入更新] 頁面上,檢閱要匯入的檔案。 然後選取 [匯入更新] 以啟動匯入程序。 在本教學課程中,匯入範例教學課程資訊清單和範例更新 (.swu 檔案) 及稍早下載的範例 A/B 指令碼。
匯入程序隨即開始,畫面會切換至 [匯入歷程記錄] 區段。 當 [狀態] 資料行指出匯入成功時,請選取 [可用的更新] 標頭。 您現在應該會在清單中看到您匯入的更新。
如需匯入程式的詳細資訊,請參閱將更新匯入至裝置更新。
檢視裝置群組
裝置更新」會利用群組來組織裝置。 裝置更新會根據裝置指派的標籤和相容性內容,自動將裝置分類為群組。 個別裝置僅屬於群組,但群組可有多個子群組來排序不同的裝置類型。
移至頁面頂端的 [群組和部署] 索引標籤。
檢視群組清單和更新符合性圖表。 更新合規性圖表顯示各種合規性狀態的裝置計數:最新的更新、有新的更新可用和更新進行中。 了解更新合規性。
您應該會看到裝置群組,其包含您在本教學課程設定的模擬裝置,以及新群組裝置的任何可用更新。 如果有不符合群組裝置類別需求的裝置,會顯示在對應的無效群組中。 若要從此檢視將最佳的可用更新部署到新的使用者定義群組,請選取群組旁的 [部署]。
如需標籤和群組的詳細資訊,請參閱管理裝置群組。
部署更新
建立群組之後,您應該會看到裝置群組可用的新更新,包含 [最佳更新] 底下的更新連結。 您可能需要再次重新整理。
如需符合性的詳細資訊,請參閱裝置更新符合性。
選取群組名稱來選取目標群組。 系統會將您導向至 [群組基本資料] 下方的群組詳細資料。
若要起始部署,請移至 [目前部署] 索引標籤。從 [可用更新] 區段選取所需更新旁的 [部署] 連結。 所指定群組的最佳可用更新會以最佳醒目提示來表示。
排程您的部署,以立即或在未來啟動。 然後選取建立。
提示
根據預設,開始日期和時間是目前時間起算 24 小時。 如果您想要提早開始部署,請務必選取不同的日期和時間。
在 [部署詳細資料] 下方,[狀態] 會變成 [作用中]。 部署的更新會標示為 [(部署中)]。
檢視合規性圖表,以查看更新目前是否正在進行中。
成功更新裝置之後,您會看到符合性圖表和部署詳細資料已更新以反映相同內容。
監視更新部署
您現在已在 Raspberry Pi 3 B+ 裝置上使用 IoT 中樞裝置更新,完成成功的端對端映像更新。
清除資源
不再需要時,請清除您的裝置更新帳戶、執行個體、IoT 中樞和 IoT 裝置。