教學課程:使用Raspberry Pi 映像 IoT 中樞的 Azure 裝置更新
Azure IoT 中樞裝置更新支援映像型、套件型和指令碼型更新。 本教學課程示範在Raspberry Pi 3 B+ 面板上使用 Yocto 映像進行 IoT 中樞 更新的端對端映像型裝置更新。
映射更新會對裝置的結束狀態提供高度的信心,而且不會對套件或腳本型更新造成相同的套件和相依性管理挑戰。 在生產階段前與生產環境之間復寫映像更新的結果,或輕鬆地採用 A/B 故障轉移模型會比較容易。
在本教學課程中,您已:
- 下載並安裝映像更新。
- 將標籤指派給IoT裝置。
- 匯入映像更新。
- 部署映像更新。
- 檢視更新部署歷程記錄。
必要條件
使用IoT中樞設定的裝置更新帳戶和實例。
透過乙太網路連線到硬體的 Raspberry Pi 3 IoT 面板,可下載並擷取圖像檔並控制裝置。
注意
本教學課程中的映像更新已在Raspberry Pi B3面板上驗證。
註冊裝置並取得 連接字串
將裝置新增至IoT中樞中的裝置登錄,並取得裝置產生的連接字串 IoT 中樞。
- 在 Azure 入口網站 中,開啟與您的裝置更新實例相關聯的IoT中樞頁面。
- 在左側瀏覽窗格中,選取 [裝置管理>裝置]。
- 在 [ 裝置] 頁面上,選取 [ 新增裝置]。
- 在 [裝置識別碼] 下,輸入裝置的名稱。 確定已 選取 [自動產生金鑰 ] 複選框。
- 選取儲存。 裝置會出現在 [裝置] 頁面上的清單中。
- 在 [ 裝置] 頁面上,選取您註冊的裝置。
- 在裝置頁面上,選取 [連接字串][主要密鑰] 旁的 [複製] 圖示。 儲存此裝置 連接字串,以在設定裝置更新代理程式時使用。
注意
為了示範目的,本教學課程會使用裝置 連接字串 來驗證並連線到IoT中樞。 針對生產案例,最好使用模組身分識別和 IoT身分識別服務 來布建裝置。 如需詳細資訊,請參閱 裝置更新代理程式布建。
設定 Raspberry Pi
Tutorial_RaspberryPi3.zip檔案具有教學課程所需的所有檔案。 從 GitHub 裝置更新發行頁面上最新版本的 [資產] 區段下載檔案,然後將它解壓縮。
在擷 取的 Tutorial_RaspberryPi3 資料夾中,您可以在Raspberry Pi面板上閃爍的基底映像是 adu-base-image-raspberrypi3.wic。 基底映像使用以 3.4.4 版為基礎的 Yocto 組建。 映像具有裝置更新代理程式和 SWUpdate,可啟用裝置更新雙分割區更新。 如需 Yocto 層的詳細資訊,請參閱 使用 Yocto 專案建置以裝置更新代理程式的自定義 Linux 型系統。
您透過裝置更新匯入的更新檔案如下:
- SWUpdate 檔案 adu-update-image-raspberrypi3-1.2.0.swu
- 自訂 SWUpdate 腳稿 example-a-b-update.sh
- 指令清單 EDS-ADUClient.yocto-update.1.2.0.importmanifest.json
使用 bmaptool 來快閃 SD 記憶卡
重要
適用於 IoT 中樞 軟體的 Azure 裝置更新受限於下列授權條款:
使用代理程式之前,請先閱讀授權條款。 代理程式安裝和使用構成接受這些條款。 如果您不同意授權條款,請勿使用裝置更新代理程式。
使用OS閃爍工具,將裝置更新基底映射安裝在您在Raspberry Pi裝置中使用的 SD 記憶卡上。 下列指示會使用 bmaptool
快閃到 SD 記憶卡。 將 <device>
佔位元取代為您的裝置名稱, <path to image>
並將佔位元取代為下載映射檔的路徑。
bmap-tools
如果您沒有公用程式,請安裝公用程式。sudo apt-get install bmap-tools
在 /dev 中找出 SD 記憶卡路徑。 路徑看起來應該類似 /dev/sd* 或 /dev/mmcblk*。 您可以使用
dmesg
公用程式來協助找出正確的路徑。在快閃之前,請先卸載所有裝載的分割區。
sudo umount /dev/<device>
確定您有裝置的寫入權限。
sudo chmod a+rw /dev/<device>
快閃 SD 記憶卡。
sudo bmaptool copy <path to image> /dev/<device>
提示
為了加快閃爍速度,您可以下載 bimap 檔案和圖像檔,並將其放在相同的目錄中。
在 Raspberry Pi 上設定裝置更新代理程式
請確定Raspberry Pi已連線到網路。
使用 PowerShell 視窗中的下列命令,保護殼層 (SSH) 進入 Raspberry Pi:
ssh raspberrypi3 -l root
建立裝置更新組態檔
裝置更新 du-config.json 和 du-diagnostics-config.json 組態檔必須位於裝置上。 若要建立檔案,請在登入Raspberry Pi的終端機中執行下列命令。
若要建立 du-config.json 檔案或開啟檔案以進行編輯,請執行下列命令:
nano /adu/du-config.json
編輯器會 開啟du-config.json 檔案。 如果您要建立檔案,則為空白。 將下列程式代碼複製並貼到檔案中,以您裝置的任何必要設定取代範例值。 將範例
connectionData
字串取代為您在裝置註冊步驟中複製的裝置 連接字串。{ "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 檔案。 建立並開啟檔案:
nano /adu/du-diagnostics-config.json
將下列 du-diagnostics-config.json 程式代碼複製並貼到 檔案中。 這些值是預設的 Device Update 記錄位置,而且只有在您的設定與預設值不同時,才需要變更它們。
{ "logComponents":[ { "componentName":"adu", "logPath":"/adu/logs/" }, { "componentName":"do", "logPath":"/var/log/deliveryoptimization-agent/" } ], "maxKilobytesToUploadPerLogPath":50 }
按 Ctrl+X 結束編輯器,然後輸入 y 以儲存變更。
使用下列命令來顯示位於 /adu/ 目錄中的檔案。 您應該會看到這兩個組態檔。
ls -la /adu/
使用下列命令重新啟動裝置更新系統精靈,並確定已套用設定。
systemctl start deviceupdate-agent
執行下列命令來檢查代理程式是否為即時:
systemctl status deviceupdate-agent
狀態應該會顯示為作用中和綠色。
聯機到 IoT 中樞 中的裝置,並新增群組標籤
在裝置更新實例的 [Azure 入口網站 IoT 中樞] 頁面上,從左側導覽中選取 [裝置管理>裝置]。
在 [ 裝置] 頁面上,選取裝置的名稱。
在裝置頁面頂端,選取 [裝置對應項]。
在 [裝置對應項] 頁面的 [裝置
"properties"
對應項] 區段底下"reported"
,尋找您裝置的Linux核心版本。對於尚未從裝置更新接收更新的新裝置, DeviceManagement:DeviceInformation:1.swVersion 屬性值代表在裝置上執行的韌體版本。 套用裝置更新之後, AzureDeviceUpdateCore:ClientMetadata:4.installedUpdateId 屬性值代表韌體版本。
基底和更新映像檔名的格式為 adu-image type-image-machine-version<><<> number。<>擴充功能>。 請注意匯入更新時要使用的版本號碼。
新增群組標籤
裝置更新會根據其指派的標籤和相容性屬性,自動將裝置組織成群組。 每個裝置只能屬於一個群組,但群組可以有多個子群組來排序不同的裝置類別。 如需標籤和群組的詳細資訊,請參閱管理裝置群組。
在裝置對應項中,將現有裝置更新標籤設定為 null,然後新增下列新的 Device Update 群組標籤,以刪除任何現有的 Device Update 標籤。 如果您使用模組身分識別搭配裝置更新代理程式,請在模組身分識別對應項中新增標記,而不是裝置對應項。
"tags": { "ADUGroup": "<CustomTagValue>" },
下列螢幕快照顯示檔案中要新增標記的位置。
選取儲存。
匯入更新
在裝置更新實例的 [Azure 入口網站 IoT 中樞] 頁面上,從左側導覽中選取 [裝置管理> Updates]。
在 [ 更新] 頁面上,選取 [ 匯入新的更新]。
在 [匯入更新] 頁面上,選取 [從記憶體容器選取]。
在 [ 記憶體帳戶 ] 頁面上,選取現有的記憶體帳戶,或選取 [儲存體帳戶] 來建立新的帳戶。
在 [ 容器] 頁面上,選取現有的容器,或選取 [容器] 來建立新的容器。 您可以使用容器來暫存更新檔案以進行匯入。
提示
若要避免不小心從先前的更新匯入檔案,請在每次匯入更新時使用新的容器。 如果您未使用新的容器,請務必從現有的容器中刪除任何檔案。
在容器頁面上,選取 [ 上傳]。 拖放,或瀏覽至並選取您下載Tutorial_RaspberryPi3資料夾中的下列更新檔案:
- adu-update-image-raspberrypi3-1.2.0.swu
- example-a-b-update.sh
- EDS-ADUClient.yocto-update.1.2.0.importmanifest.json
選取上傳。 上傳之後,檔案會出現在容器頁面上。
在容器頁面上,檢閱並選取要匯入的檔案,然後選取 [選取]。
在 [ 匯入更新] 畫面上,選取 [ 匯入更新]。
匯入程式隨即開始,畫面會切換至 [ 更新] 畫面。 匯入成功之後,它會出現在 [ 更新] 索引標籤上。如需匯入程式的詳細資訊,請參閱 將更新匯入至裝置更新。
選取裝置群組
您可以使用套用至裝置的群組標籤,將更新部署至裝置群組。 選取 [更新] 頁面頂端的 [群組和部署] 索引卷標,以檢視群組和部署清單以及更新合規性圖表。
更新合規性圖表顯示各種合規性狀態的裝置計數:最新的更新、有新的更新可用和更新進行中。 如需詳細資訊,請參閱裝置更新合規性。
在 [組名] 底下,您會看到連線至此 IoT 中樞的裝置及其可用更新的所有裝置群組清單,以及 [狀態] 底下部署更新的連結。 不符合群組裝置類別需求的任何裝置都會出現在對應的無效群組中。 如需標籤和群組的詳細資訊,請參閱管理裝置群組。
您應該會看到包含您在本教學課程中設定之裝置的裝置群組,以及群組中裝置的可用更新。 您可能需要重新整理網頁。 若要從此檢視將最佳的可用更新部署到群組,請選取 群組旁的 [部署 ]。
部署更新
在 [群組詳細數據] 頁面上,選取 [目前部署] 索引卷標,然後在 [可用更新] 區段中選取 [所需更新] 旁的 [部署]。 群組的最佳可用更新會以最佳醒目提示表示。
在 [ 建立部署] 頁面上,排程您的部署立即或未來啟動,然後選取 [ 建立]。
提示
根據預設,開始日期和時間是目前時間起算 24 小時。 如果您想要更快開始部署,請務必選取不同的日期和時間。
在 [部署詳細資料] 下方,[狀態] 會變成 [作用中]。 在 [可用的更新] 下,選取的更新會標示為 [部署]。
在 [ 更新] 頁面上,檢視合規性圖表,以查看更新目前正在進行中。 裝置成功更新之後,您的合規性圖表和部署詳細數據會更新以反映該狀態。
檢視更新部署歷程記錄
若要檢視部署歷程記錄:
清除資源
當您不再需要為本教學課程建立的資源時,您可以將其刪除。
- 在 Azure 入口網站 中,流覽至包含資源的資源群組。
- 若要刪除群組中的所有資源,您可以選取 [刪除資源群組]。
- 如果您只想要刪除部分資源,請使用複選框來選取資源,然後選取 [ 刪除]。