Azure IoT 中樞裝置更新支援映像型、套件型和指令碼型更新。
映像檔更新對裝置的最終狀態提供更高的信賴度。 在生產階段前環境和生產環境之間復寫映像更新的結果通常比較容易,因為它不會對套件及其相依性帶來相同的挑戰。 由於其原子的本質,您也可以輕鬆地採用 A/B 容錯移轉模型。
本教學課程會逐步引導您如何使用 Raspberry Pi 3 B+ 板上的 IoT 中樞裝置更新功能,來完成全程的映像檔更新。
在本教學課程中,您將了解如何:
- 下載映像。
- 將標籤新增至IoT裝置。
- 匯入更新。
- 建立裝置群組。
- 部署映像更新。
- 監視更新部署。
備註
本教學課程中的映像更新已在Raspberry Pi B3面板上驗證。
先決條件
如果您尚未這麼做,請建立 裝置更新帳戶和實例, 並設定IoT中樞。
下載映像
我們在 裝置更新 GitHub 發行頁面的 資產中提供範例圖像。 .gz 檔案是可以燒錄到 Raspberry Pi 3 B+ 板子上的基本映像檔。 swUpdate 檔案是您要透過IoT中樞裝置更新匯入的更新。
將映像檔寫入 SD 記憶卡
使用您慣用的作業系統燒錄工具,將裝置更新基礎映像檔(adu-base-image)安裝到用於 Raspberry Pi 3 B+ 裝置的 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中樞代理程式的裝置更新。
在IoT中樞中建立裝置或模組並取得連接字串
現在,將裝置新增至IoT中樞。 從IoT中樞內,會為裝置產生連接字串。
從 Azure 入口網站啟動 IoT 中樞。
建立新的裝置。
在左側窗格中,選取 [裝置]。 然後選取 [ 新增]。
在 [裝置識別碼] 下,輸入裝置的名稱。 確定已選取 [自動產生金鑰] 核取方塊。
選取 [ 儲存]。 在 [ 裝置] 頁面上,您建立的裝置應該位於清單中。
使用兩個選項之一取得裝置連接字串:
- 選項 1:搭配模組身分識別使用裝置更新代理程式:在相同的 [裝置 ] 頁面上,選取頂端的 [新增模組身分識別 ]。 建立名為 IoTHubDeviceUpdate的新裝置更新模組。 選擇套用至使用案例的其他選項,然後選取 [ 儲存]。 選取新建立的模組。 在模組檢視中,選取 [主要連接字串] 旁的 [複製] 圖示。
- 選項 2:使用裝置更新代理程式搭配裝置身分識別:在裝置檢視中,選取 [主要連接字串] 旁的 [複製] 圖示。
將複製的字元貼到某處,以供稍後在下列步驟中使用:
此複製的字串是您的裝置連接字串。
為IoT中樞的裝置更新準備裝置上的設定
裝置上必須有兩個組態檔,IoT 中樞的裝置更新才能正確設定。 第一個檔案是du-config.json檔案,該檔案必須存在於。/adu/du-config.json 第二個檔案是 du-diagnostics-config.json 檔案,該檔案必須存在於 /adu/du-diagnostics-config.json。
以下是du-config.json檔案和du-diagnostics-config.json檔案的兩個範例:
範例 du-config.json
{
"schemaVersion": "1.0",
"aduShellTrustedUsers": [
"adu",
"do"
],
"manufacturer": "fabrikam",
"model": "vacuum",
"agents": [
{
"name": "main",
"runas": "adu",
"connectionSource": {
"connectionType": "string",
"connectionData": "HostName=example-connection-string.azure-devices.net;DeviceId=example-device;SharedAccessKey=M5oK/rOP12aB5678YMWv5vFWHFGJFwE8YU6u0uTnrmU="
},
"manufacturer": "fabrikam",
"model": "vacuum"
}
]
}
範例 du-diagnostics-config.json
{
"logComponents":[
{
"componentName":"adu",
"logPath":"/adu/logs/"
},
{
"componentName":"do",
"logPath":"/var/log/deliveryoptimization-agent/"
}
],
"maxKilobytesToUploadPerLogPath":50
}
在 Raspberry Pi 上設定裝置更新代理程式
請確定Raspberry Pi 3 已連線到網路。
請遵循下列指示來新增組態詳細資料:
首先,使用 PowerShell 視窗中的下列命令,透過 SSH 連線到電腦:
ssh raspberrypi3 -l root使用下列方法建立或開啟
du-config.json檔案進行編輯:nano /adu/du-config.json執行命令後,您應該會看到文件在開啟的編輯器中。 如果您從未建立檔案,則會是空的。 現在複製上述範例 du-config.json 內容,並取代裝置所需的設定。 然後將範例連接字串取代為您在上述步驟中建立之裝置的連接字串。
完成變更之後,請選取 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中樞裝置更新的預設記錄位置。 只有在您的實施有所不同時,您才需要更改這些。
完成變更之後,請選取 Ctrl+X 以結束編輯器。 然後輸入 y 以儲存變更。
使用下列命令來顯示位於目錄中的
/adu/檔案。 您應該能看到您的兩個組態 files.du-diagnostics-config.json 檔案,以便透過以下方式進行編輯:ls -la /adu/
重新啟動裝置更新系統精靈,以確定已套用設定。 在登入
raspberrypi的終端機內使用下列命令:systemctl start adu-agent使用下列命令檢查代理程式是否為即時:
systemctl status adu-agent您應該會看到狀態恢復為作用中且綠色。
在 IoT 中樞的裝置更新中連接設備
在左側窗格中,選取 [裝置]。
選取具有裝置名稱的連結。
在頁面頂端,如果您使用 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 Import Manifest_Pi.json)和範例更新檔(adu-update-image-raspberrypi3-0.6.5073.1.swu)。
登入 Azure 入口網站 ,並使用裝置更新移至 IoT 中樞。 在左窗格中,選取 [自動裝置管理] 下的 [更新]。
選取 [ 更新] 索引標籤。
選擇 [+ 匯入新更新]。
選取 [+ 從儲存體容器選取]。 選取現有帳戶或使用 [+ 儲存體帳戶] 建立新帳戶。 然後選取現有的容器,或使用 [+ 容器] 建立新的容器。 此容器將用來暫存更新檔案以進行匯入。
備註
建議您在每次匯入更新時使用新的容器,以避免意外從先前的更新匯入檔案。 如果您沒有使用新的容器,請務必先刪除現有容器中的任何檔案,再完成此步驟。
在容器中,選取 [上傳],然後移至您在步驟 1 下載的檔案。 選取所有更新檔案之後,請選取 [ 上傳]。 然後選取 [選取] 按鈕,以返回 [匯入更新] 頁面。
此螢幕擷取畫面顯示匯入步驟。 檔案名稱可能不符合範例中使用的檔案名稱。
在 [匯入更新] 頁面上,檢閱要匯入的檔案。 然後選取 [匯入更新] 以啟動匯入程序。
匯入程式隨即開始,畫面會切換至 [ 匯入歷程記錄] 區段。 當 [狀態] 資料行指出匯入成功時,請選取 [可用的更新] 標頭。 您現在應該會在清單中看到您匯入的更新。
深入瞭解 如何匯入更新。
建立更新群組
移至頁面頂端的 [群組和部署] 索引標籤。
選取 [新增群組 ] 以建立新的群組。
從清單中選取 IoT中樞 標籤和 裝置類別 。 接著選取 [建立群組]。
建立群組後,會更新合規性圖表和群組清單。 更新合規性圖表會顯示各種合規性狀態中的裝置計數: 最新更新、 可用的新更新,以及 進行中的更新。 瞭解更新合規性。
您應該會看到新建立的群組,以及新群組中裝置的任何可用更新。 如果有不符合群組裝置類別需求的裝置,它們會顯示在對應的無效群組中。 若要從此檢視將最佳的可用更新部署到新的使用者定義群組,請選取群組旁的 [部署]。
深入瞭解 如何新增標籤和建立更新群組。
部署更新
建立群組之後,您應該會看到裝置群組可用的新更新。 更新的鏈接應該在 [最佳更新] 底下。 您可能需要再次重新整理。 深入瞭解更新合規性。
透過選取群組名稱來選擇目標群組。 系統會將您導向至 [群組基本資料] 下方的群組詳細資料。
若要開始部署,請移至 [目前部署] 索引標籤。從 [可用的更新] 區段選取所需更新旁的 [部署] 連結。 指定群組的最佳可用更新會以 最佳 醒目提示表示。
安排您的部署,以立即啟動或設定在未來的某一時間啟動。 然後選取 [建立]。
在 [部署詳細資料] 下方,[狀態] 會變成 [作用中]。 部署的更新會標示為 [(部署中)]。
檢視合規性圖表,以查看更新目前是否正在進行中。
成功更新裝置之後,您會看到合規性圖表和部署詳細資料已更新,以反映相同狀態。
監控更新部署
您現在已在 Raspberry Pi 3 B+ 裝置上,使用 IoT 中樞的裝置更新服務成功完成端對端圖片更新。
清理資源
不再需要時,請清除您的裝置更新帳戶、實例、IoT 中樞和IoT裝置。