教學課程:使用模擬器代理程式 IoT 中樞 的 Azure 裝置更新
適用於 IoT 中樞 的 Azure 裝置更新支援映像型、套件型和腳本型更新。 本教學課程示範使用Ubuntu模擬器代理程式的端對端映像型裝置更新更新。
映射更新會對裝置的結束狀態提供高度的信心,而且不會對套件或腳本型更新造成相同的套件和相依性管理挑戰。 在生產階段前與生產環境之間復寫映像更新的結果,或輕鬆地採用 A/B 故障轉移模型會比較容易。
在本教學課程中,您已:
- 使用標籤將IoT裝置指派給裝置更新群組。
- 下載並安裝映像更新。
- 匯入映像更新。
- 部署映像更新。
- 檢視更新部署歷程記錄。
必要條件
- Ubuntu 18.04 x64 實體或虛擬機
- 使用IoT中樞設定的裝置更新帳戶和實例
註冊及設定裝置和模組
在 IoT 中樞中,將裝置新增至裝置登錄檔。 必須註冊連線至 IoT 中樞的每個裝置。
- 在 Azure 入口網站 中,開啟與您的裝置更新實例相關聯的IoT中樞頁面。
- 在瀏覽窗格中,選取 [裝置管理>裝置]。
- 在 [ 裝置] 頁面上,選取 [ 新增裝置]。
- 在 [裝置識別碼] 下,輸入裝置的名稱。 確定已 選取 [自動產生金鑰 ] 複選框。
- 選取儲存。 裝置會出現在 [裝置] 頁面上的清單中。
建立模組身分識別
註冊裝置之後,請建立模組身分識別。 模組是IoT裝置元件的獨立身分識別,可在裝置執行多個進程時更細微。
在本教學課程中,您會為裝置上執行的裝置更新代理程式建立模組身分識別。 如需詳細資訊,請參閱了解和使用 Azure IoT 中樞的模組對應項。
- 在 [ 裝置] 頁面上,選取您註冊的裝置。
- 在裝置頁面上,選取 [新增模組身分識別]。
- 在 [新增模組身分識別] 頁面的 [模組身分識別名稱] 下,輸入模組的名稱,例如 DeviceUpdateAgent。
- 選取儲存。 新的模組身分識別會出現在裝置頁面上 的 [模組身分識別]。
- 選取模組名稱,然後在 [模組身分識別詳細數據] 頁面上,選取連接字串 (主鍵) 旁的 [複製] 圖示。 儲存此模組 連接字串 設定裝置更新代理程式時使用。
將群組標籤新增至模組對應項
裝置更新會根據其指派的標籤和相容性屬性,自動將裝置組織成群組。 個別裝置僅屬於群組,但群組可有多個子群組來排序不同的裝置類型。
您可以將標籤指派給 Device Update 管理的任何裝置,以將裝置指派給裝置更新群組。 標記可以位於裝置對應項或模組對應項中,如本教學課程所示。 每個裝置只能指派給一個裝置更新群組。
在 [ 模組身分識別詳細數據] 頁面上,選取 [模組身分識別對應項]。
在 [模組身分識別對應項] 頁面上,將新的
DeviceUpdateGroup
標記新增至與 和version
相同層級modelId
的 JSON 程序代碼,如下所示:"tags": { "DeviceUpdateGroup": "DU-simulator-tutorial" },
選取儲存。 入口網站會重新格式化模組對應項,以將標記併入 JSON 結構。
安裝和設定裝置更新代理程式
裝置更新代理程式會在裝置更新管理的每個裝置上執行。 在本教學課程中,您會在Ubuntu18.04裝置上安裝裝置更新代理程式,並將其設定為以模擬器的形式執行,示範如何在不變更裝置設定的情況下將更新套用至裝置。
注意
您也可以使用 Azure IoT 身分識別服務來布建裝置。 若要這樣做, 請先安裝 Azure IoT 身分識別服務 ,再安裝裝置更新代理程式。 然後使用 設定裝置更新代理程式 "connectionType": "AIS"
,並將 保留 connectionData
為組態檔中的空白字串。
新增Microsoft套件存放庫,然後將Microsoft套件簽署密鑰新增至受信任的密鑰清單。
wget https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
安裝裝置更新代理程式 .deb 套件。
sudo apt-get update sudo apt-get install deviceupdate-agent
開啟du-config.json代理程式組態檔。
sudo nano /etc/adu/du-config.json
使用下列範例值更新 du-config.json 。 將
<connection string>
佔位元取代為您從模組身分識別複製的 連接字串。 如需參數的詳細資訊,請參閱 裝置更新組態檔。manufacturer: "contoso"
model: "video"
agents.name: "aduagent"
agents.connectionData: <connection string>
agents.manufacturer: "contoso"
agents.model: "video"
編輯 的du-config.json 檔案看起來應該像這樣:
{ "schemaVersion": "1.0", "aduShellTrustedUsers": [ "adu", "do" ], "manufacturer": "contoso", "model": "video", "agents": [ { "name": "aduagent", "runas": "adu", "connectionSource": { "connectionType": "string", "connectionData": <connection string> }, "manufacturer": "contoso", "model": "video" } ] }
按 Ctrl+X 結束編輯器,然後輸入 y 以儲存變更。
若要將代理程式設定為模擬器執行,請在IoT裝置上執行下列命令。 裝置更新代理程式會叫用模擬器處理程序來處理使用Microsoft SWUpdate 擴充功能的更新。
sudo /usr/bin/AducIotAgent --extension-type updateContentHandler --extension-id 'microsoft/swupdate:1' --register-extension /var/lib/adu/extensions/sources/libmicrosoft_simulator_1.so
取得模擬器檔案
將Tutorial_Simulator.zip封存從 GitHub 裝置更新發行最新版本資產一節下載並解壓縮到您的 Ubuntu 18.04 計算機。
您可以使用
wget
下載 ZIP 檔案。 以最新版本取代<release_version>
,例如1.0.0
。wget https://github.com/Azure/iot-hub-device-update/releases/download/<release_version>/Tutorial_Simulator.zip
將 sample-du-simulator-data.json 檔案從解壓縮 Tutorial_Simulator 資料夾複製到 tmp 資料夾。
cp sample-du-simulator-data.json /tmp/du-simulator-data.json
注意
如果 tmp 資料夾不存在,請建立它,如下所示:
sudo mkdir/tmp sudo chown root:root/tmp sudo chmod 1777/tmp
變更 /tmp/sample-du-simulator-data.json 檔案的許可權。
sudo chown adu:adu /tmp/du-simulator-data.json sudo chmod 664 /tmp/du-simulator-data.json
重新啟動裝置更新代理程式以套用變更。
sudo systemctl restart deviceupdate-agent
匯入更新
如果您的Ubuntu18.04 IoT裝置不同,請從 GitHub 裝置更新發行最新發行資產一節下載並解壓縮Tutorial_Simulator.zip封存盤。 本節使用 Tutorial_Simulator 資料夾中的 TutorialImportManifest_Sim.importmanifest.json 和 adu-update-image-raspberrypi3.swu 檔案。
更新檔案與Raspberry Pi教學課程中的檔案相同。 因為本教學課程中的更新是模擬更新,所以特定的檔案內容並不重要。
在您的開發計算機上,登入 Azure 入口網站,然後移至使用您的裝置更新實例設定的IoT中樞。
在瀏覽窗格中,選取 [裝置管理>][更新]。
在 [ 更新] 頁面上,選取 [ 匯入新的更新]。
在 [匯入更新] 頁面上,選取 [從記憶體容器選取]。
選取現有的記憶體帳戶,或選取 [記憶體帳戶] 來建立新的帳戶。
選取現有的容器,或選取 [容器] 來建立新的容器。 此容器用來暫存要匯入的更新檔案。
注意
若要避免不小心從先前的更新匯入檔案,請在每次匯入更新時使用新的容器。 如果您未使用新的容器,請務必從現有的容器中刪除任何檔案。
在容器頁面上,選取 [ 上傳]。 流覽至並選取TutorialImportManifest_Sim.importmanifest.json和 adu-update-image-raspberrypi3.swu 檔案,然後選取 [上傳]。
選取這兩個檔案的複選框,然後選取 [ 選取 ] 以返回 [ 匯入更新] 頁面。
在 [ 匯入更新] 頁面上,檢閱要匯入的檔案,然後選取 [ 匯入更新]。
匯入程式隨即開始,您可以選取 [檢視匯入記錄 ] 以檢視匯入歷程記錄和狀態。 在 [ 更新歷程記錄] 頁面上,[ 狀態 ] 字段會在匯入完成時顯示 [成功 ]。 您可以選取 [ 重新整理 ] 以更新狀態。
匯入的更新現在會出現在 [ 更新 ] 頁面上。
如需匯入程序的詳細資訊,請參閱將更新匯入至 IoT 中樞裝置更新。
選取裝置群組
您可以使用套用至裝置的群組標籤,將更新部署至裝置群組。 選取 [更新] 頁面頂端的 [群組和部署] 索引卷標,以檢視群組和部署清單以及更新合規性圖表。
更新合規性圖表顯示各種合規性狀態的裝置計數:最新的更新、有新的更新可用和更新進行中。 如需詳細資訊,請參閱裝置更新合規性。
在 [組名] 底下,您會看到連線至此 IoT 中樞的裝置及其可用更新的所有裝置群組清單,以及 [狀態] 底下部署更新的連結。 不符合群組裝置類別需求的任何裝置都會出現在對應的無效群組中。 如需標籤和群組的詳細資訊,請參閱管理裝置群組。
您應該會看到包含您在本教學課程中設定之模擬裝置的裝置群組。 選取群組名稱以檢視其詳細資料。
部署更新
在 [ 群組詳細數據] 頁面上,您應該會看到一個新的更新可供此群組使用。 選取 [部署] 以開始部署。
您匯入的更新會列為此群組的最佳可用更新。 選取 [部署]。
排程您的部署以立即啟動,然後選取 [ 建立]。
流覽至 [目前更新] 索引標籤。在 [部署詳細數據] 底下,[狀態] 會變成 [作用中]。
在裝置成功更新之後,返回 [ 更新] 頁面。 您應該會看到您的合規性圖表和部署詳細數據已更新,以包含已安裝的更新。
檢視更新部署歷程記錄
清除資源
如果您要繼續進行下一個教學課程,請保留裝置更新和 IoT 中樞資源。 當您不再需要為本教學課程建立的資源時,您可以將其刪除。
- 在 Azure 入口網站 中,流覽至包含資源的資源群組。
- 若要刪除群組中的所有資源,您可以選取 [刪除資源群組]。
- 如果您只想要刪除部分資源,請使用複選框來選取資源,然後選取 [ 刪除]。