Mengelola manajer paket OS menggunakan Azure IoT dan OSConfig
Penting
Versi 1.0.3 (diterbitkan 28 Juni 2022) mencakup perubahan yang melanggar pada nama anggota yang dapat memengaruhi pengguna yang ada. Untuk informasi selengkapnya, lihat: Transisi nama anggota dari PascalCase ke camelCase dalam versi 1.0.3
Artikel ini dirancang untuk mendukung orang-orang yang menyediakan atau mengelola perangkat dengan Azure IoT. Jika itu tidak terdengar seperti Anda, pertimbangkan untuk melihat dokumentasi Audiens untuk OSConfig.
Artikel ini tentang mendapatkan status manajer paket dan mengatur status yang diinginkan manajer paket. Contohnya:
Kemampuan | Kasus penggunaan |
---|---|
Pastikan manajer paket menarik dari sumber yang Anda inginkan | • Kebijakan operasi Anda adalah bahwa manajer paket perangkat harus menarik dari repositori paket privat dengan versi pustaka dan komponen yang disetujui • Anda memerlukan perangkat untuk mendapatkan paket dari repositori vendor tertentu |
Menginformasikan manajer paket paket yang diinginkan | • Kebijakan operasi Anda adalah bahwa perangkat harus memiliki paket tertentu seperti "library-XYZ-v2" • Kebijakan operasi Anda adalah bahwa perangkat harus memiliki grafik dependensi paket tertentu |
Membandingkan paket perangkat atau daftar sumber |
• Kebijakan operasi Anda adalah bahwa daftar paket yang diinstal perangkat yang disebarkan harus cocok dengan perangkat baik yang diketahui |
Jika Anda berada di sini untuk informasi referensi dibandingkan dengan contoh kasus penggunaan interaktif, Anda dapat melompat ke depan ke bagian referensi.
Penting
Saat ini, distro berbasis apt termasuk Debian dan Ubuntu berada dalam cakupan. Jika Anda ingin mengembangkan dukungan untuk distro berbasis RPM, lihat dokumentasi ekstensibilitas.
Di lingkungan tanpa apt (misalnya, membangun dari sumber dan berjalan pada distro keluarga Red Hat), Anda mungkin melihat pesan log berikut yang menunjukkan bahwa modul PackageManagerConfiguration tidak berlaku.
- Di osconfig_pmc.log, baris termasuk teks berikut:
[ERROR] Cannot run on this platform, could not find required tool apt-get
- Di osconfig_pnp_agent.log, baris termasuk teks berikut:
[ERROR] PackageManagerConfiguration.state: MpiGet failed with 500
Contoh-contoh ini dapat berfungsi sebagai titik awal bagi Anda untuk beradaptasi dengan lingkungan unik Anda.
Jika Anda menggunakan artikel ini untuk referensi, tidak ada prasyarat. Anda dapat meninjau contoh, menyalin nama properti, dll.
Jika Anda ingin mencoba contoh pada sistem langsung (disarankan), ikuti langkah-langkah berikut:
Membuat akun Azure gratis atau menggunakan akun yang sudah ada
Menyambungkan setidaknya satu perangkat yang mendukung OSConfig ke IoT Hub
Tip
Untuk membuat IoT Hub dengan mudah dengan perangkat (virtual) yang terpasang, lihat Membuat lingkungan lab OSConfig (dengan Azure IoT) dalam 5 menit
Bersiaplah untuk mengikuti instruksi portal Azure atau instruksi Azure CLI dalam contoh:
Jika Anda lebih suka menggunakan portal Azure
- Masuk ke portal Azure Anda dan akses halaman Gambaran Umum IoT Hub
-OR- Jika Anda lebih suka menggunakan Azure CLI
- DIREKOMENDASIKAN: Gunakan Azure Cloud Shell sebagai lingkungan bash Anda dengan masuk ke Portal Microsoft Azure Anda, lalu luncurkan Azure Cloud Shell dalam mode bash
- ALTERNATIF: Jika Anda lebih suka menggunakan lingkungan bash Anda sendiri daripada Cloud Shell, instal Azure CLI dan masuk
- Pastikan ekstensi Azure IoT siap dengan menjalankan
az extension add --name azure-iot
Contoh ini menunjukkan alur kerja Azure IoT untuk memastikan bahwa perangkat menggunakan, sebagai salah satu sumber paketnya, saluran prod packages.microsoft.com untuk Ubuntu 18.04. Anda dapat menyesuaikan contoh ini untuk menggunakan sumber paket apa pun. Misalnya, repositori publik distro/versi yang berbeda, repositori vendor tertentu, atau repositori privat yang Anda kurasi.
Instruksi tersedia dalam ragam untuk portal, CLI, perangkat tertentu, dan provisi dan manajemen dalam skala besar.
Dari halaman portal IoT Hub Anda, navigasikan ke kembaran OSConfig untuk perangkat yang ingin Anda kelola, dan tambahkan yang berikut ini ke
properties.desired
bagian , diikuti dengan koma untuk memisahkannya dari item berikutnya diproperties.desired
."PackageManagerConfiguration": { "desiredState": { "gpgKeys": { "pkgs-msft_key": "https://packages.microsoft.com/keys/microsoft.asc" }, "sources": { "pkgs-msft_insiders-slow": "deb [arch=amd64,armhf,arm64 signed-by=pkgs-msft_key] https://packages.microsoft.com/ubuntu/18.04/prod insiders-slow main" }, "packages": [ ] } }
Contoh 1 adalah tentang menentukan sumber paket baru. Untuk pelaporan pada hal yang sama, lanjutkan ke Contoh 2.
Dalam contoh ini, kami akan melaporkan:
- Sumber paket mana yang telah ditambahkan
- Apakah ada perangkat yang mengalami kesalahan PackageManagerConfiguration
Pada Contoh 1 di atas, kami menambahkan nilai PackageManagerConfiguration yang diinginkan ke kembaran modul OSConfig dari perangkat tertentu. Kita sekarang dapat mengamati hasilnya.
Tunggu 1 menit (untuk komunikasi jaringan, aktivitas sisi perangkat, dll.) setelah menambahkan PackageManagerConfiguration yang diinginkan dalam contoh di atas
Dalam kembar modul OSConfig perangkat yang sama, telusuri ke properti, lalu dilaporkan, lalu PackageManagerConfiguration, lalu statuskan.
Ini akan menunjukkan status terbaru konfigurasi manajer paket.
sourcesFileNames
harus mencerminkan dua saluran yang ditambahkanexecutionStatus
harus 2. Untuk nilai yang mungkin, lihat: dokumentasi ekstensibilitas
Bagian ini menjelaskan properti kembar dan perilaku yang sesuai.
Sangat berguna untuk memahami bahwa di Azure IoT ada dua model mental atau perspektif untuk menjelaskan konten kembar.
Perspektif yang diinginkan/dilaporkan biasa
Ini adalah model objek IoT Hub inti. Ini digunakan oleh layanan IoT Hub Query, layanan konfigurasi IoT Hub,
az iot hub module-twin
perintah, dan oleh tampilan kembar biasa di Portal Microsoft Azure dan IoT Explorer.Perspektif Digital Twin Definition Language (DTDL) yang ditingkatkan
DTDL (dengan pola yang sesuai termasuk Azure IoT Plug and Play [PnP]) memungkinkan aplikasi dan layanan untuk mengantisipasi, memvalidasi, dan mengkonteksualisasikan konten kembar dengan lebih baik. Ini digunakan oleh tampilan PnP di IoT Explorer, oleh layanan Azure Digital Twins, dan berpotensi oleh solusi cloud Anda saat berinteraksi dengan IoT Hub.
Dalam kebanyakan kasus di bawah ini, tidak ada perbedaan yang diperlukan. Misalnya "gpgKeys" disebut "gpgKeys" di kedua titik pandang.
Dalam kasus tertentu, perbedaan mungkin membantu. Misalnya nilai Jalur yang diberikan di bawah ini. Dalam kasus tersebut, deskripsi yang diinginkan/dilaporkan biasa diberikan terlebih dahulu, diikuti oleh perspektif DTDL yang ditingkatkan dalam tanda kurung.
Jalur:
properties.desired.PackageManagerConfiguration.desiredState
(DTDL:PackageManagerConfiguration
komponen -->desiredState
properti bisa-tulis)Deskripsi: Input dari admin; memungkinkan penambahan sumber paket dan paket ke perangkat
Anggota
Nama Jenis Catatan sumber sourceName
peta :sourceDescriptor
pasangan (string)Untuk setiap pasangan dalam kamus:
•sourceName
adalah pengidentifikasi yang ditentukan admin, misalnya:*my-source-foo*
•sourceDescriptor
adalah string definisi sumber dalam format yang digunakan oleh manajer paket; misalnya:deb [arch=amd64,armhf,arm64 signed-by=my-repo-key] https://packages.microsoft.com/ubuntu/18.04/prod focal main
• Di dalamsourceDescriptor
nilai yang diteruskan kesigned-by=
harus menjadi nama kunci darigpgKeys
(dijelaskan di bawah); misalnya: signed-by=my-source-foo-key
• Saat menambahkan atau memodifikasi sumber, file di sources.list.d akan diisi (menimpa file yang ada jika ada) dengan deskriptor sumber
• Untuk menentukan bahwa perangkat tidak boleh menggunakan sumber tertentu (dengan asumsi sebelumnya didefinisikan dalam sources.list.d, tidak di tempat lain pada sistem), sertakan pasangan seperti"my-source-bar": ""
; Jika file bernama my-source-bar.list ada di sources.list.d , file tersebut akan dihapus
• Jika Anda tidak lagi membutuhkan tidak boleh menggunakan direktif (misalnya, my-source-bar tidak lagi relevan setelah beberapa waktu), Anda dapat menghapusnya dari kembar yang diinginkan dengan mengubah nilai dari "my-source-bar": "" ke "my-source-bar": nullgpgKeys key-name
peta :uri
pasangan (string)Digunakan untuk menginformasikan paket
manajer kunci umum repositori;
Untuk setiap pasangan dalam kamus:
•key-name
adalah pengidentifikasi yang ditentukan admin; misalnya: my-repo-foo-key, yang dirujuk darisigned-by
dalamsources
•uri
adalah lokasi kunci umum repositori; misalnya:https://packages.microsoft.com/keys/microsoft.asc
• Kunci ditambahkan sebagai file ke /usr/share/keyrings/; Perhatikan bahwa untuk memastikan penerapan kunci terlingkup, jalur khusus non-apt ini digunakan; apt hanya akan menerapkan kunci tersebut ke sumber yang secara eksplisit terkait dengannya (melaluisigned-by
• Untuk menghapus file kunci dari /usr/share/keyrings diaturkey-name
agar sesuai dengan nama file (tanpa ekstensi), dan atururi
ke ""packages array pengidentifikasi paket (string) • Menginstruksikan manajer paket untuk memastikan paket ini diinstal
• Analog dengan nama> paket penginstalan <apt di Debian
• Aditif (tidak merusak) di alam; misalnya daftar kosong berarti "jangan lakukan apa-apa" (bukan "hapus instalan semua paket pada sistem")Contoh payload (seperti yang terlihat di bagian kembar
properties.desired
dari kembar IoT Hub)"PackageManagerConfiguration": { "desiredState": { "gpgKeys": { "pkgs-msft_key": "https://packages.microsoft.com/keys/microsoft.asc" }, "sources": { "pkgs-msft_insiders-slow": "deb [arch=amd64,armhf,arm64 signed-by=pkgs-msft_key] https://packages.microsoft.com/ubuntu/18.04/prod insiders-slow main" }, "packages": [ "cowsay" ] } }
Jalur:
properties.reported.PackageManagerConfiguration.state
(perspektif DTDL:PackageManagerConfiguration
komponen -->state
properti baca-saja)Deskripsi: Status PackageManagerConfiguration seperti yang dilaporkan oleh perangkat
Anggota
Nama Jenis Catatan packagesFingerprint string • Sidik jari buram untuk daftar semua paket yang diinstal pada perangkat (tidak terbatas pada paket yang direferensikan dalam desiredState.packages
)
• Digunakan untuk membandingkan sejumlah besar perangkat dengan perangkat yang dikenal baikpackages array pengidentifikasi paket (string) • Nama dan status (versi atau "gagal") dari paket yang ditentukan admin dari desiredState.packages
• Jika paket berhasil diinstal, nama diikuti dengan nomor versi yang diinstal
• Jika paket tidak dapat diinstal, nama diikuti dengan "gagal"sourcesFingerprint string • Sidik jari buram dari sumber paket yang digunakan oleh perangkat
• Digunakan untuk membandingkan sejumlah besar perangkat dengan perangkat yang dikenal baiksourcesFilenames array nama file (string) • Daftar sumber paket (sebagai nama file, misalnya my-repo.list) yang telah ditambahkan ke manajer paket melalui /etc/apt/sources.list.d (di Debian)
• Mencakup sumber apa pun yang ada, terlepas dari apakah sumber tersebut ditambahkan melaluidesiredState.sources
executionState int • Status keberhasilan/kegagalan keseluruhan
• Nilai nominal adalah 0 (status awal, tidak ada desiredState yang telah ditentukan) atau 2 (berhasil)
• Untuk nilai lain, lihat: dokumentasi ekstensibilitasexecutionSubstate int • Untuk kemungkinan nilai, lihat: dokumentasi ekstensibilitas executionSubstateDetails string • Informasi tambahan untuk pemecahan masalah Contoh payload (seperti yang terlihat di bagian kembar
properties.reported
)"PackageManagerConfiguration": { "state": { "packagesFingerprint": "9e7a85de3d067474e3621d7e1618f6ac0e2e8fc6cb9d60ee92af9927294114d3", "packages": [ "cowsay=3.03+dfsg2-7" ], "executionState": 2, "executionSubstate": 0, "executionSubstateDetails": "", "sourcesFingerprint": "64b7de49c2be4ef2c180e4a978300fbb7b8a743a89e4038ba7ac6a91c31b625f", "sourcesFilenames": [ "pkgs-msft_insiders-slow.list" ] } }
Jalur:
properties.reported.PackageManagerConfiguration.desiredState
(perspektif DTDL:PackageManagerConfiguration
komponen --> Bagian ACK daridesiredState
properti yang dapat ditulis)Deskripsi: Elemen tambahan yang dilaporkan ini adalah pengakuan dari perangkat; untuk alat admin dan melaporkannya melengkapi
state
-- memungkinkan toolchain admin untuk menentukan apakah perangkat belum menerima niat admin yang diambil dalam admin-bisa-tulis/diinginkandesiredState
Anggota
Nama Jenis Catatan nilai objek • Harus cermin properties.desired.PackageManagerConfiguration.desiredState
ac int • Menunjukkan keberhasilan (nilai 200) atau kegagalan (nilai 400) perangkat yang menerima dan memproses desiredState dari admin
Untuk gambaran umum skenario dan kemampuan OSConfig, lihat:
Untuk contoh praktis tertentu, lihat: