Baca dalam bahasa Inggris

Bagikan melalui


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

Audiens dan cakupan

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 kasus penggunaan

Contoh-contoh ini dapat berfungsi sebagai titik awal bagi Anda untuk beradaptasi dengan lingkungan unik Anda.

Prasyarat untuk mencoba contoh pada sistem langsung

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:

  1. Membuat akun Azure gratis atau menggunakan akun yang sudah ada

  2. 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

  3. Bersiaplah untuk mengikuti instruksi portal Azure atau instruksi Azure CLI dalam contoh:

Jika Anda lebih suka menggunakan portal Azure

  1. Masuk ke portal Azure Anda dan akses halaman Gambaran Umum IoT Hub Anda Cuplikan layar memperlihatkan IoT Hub dan perangkat dari Portal Microsoft Azure

-OR- Jika Anda lebih suka menggunakan Azure CLI

  1. DIREKOMENDASIKAN: Gunakan Azure Cloud Shell sebagai lingkungan bash Anda dengan masuk ke Portal Microsoft Azure Anda, lalu luncurkan Azure Cloud Shell dalam mode bash Pembukaan tangkapan layar Cloud Shell dari Portal Microsoft Azure
  2. ALTERNATIF: Jika Anda lebih suka menggunakan lingkungan bash Anda sendiri daripada Cloud Shell, instal Azure CLI dan masuk
  3. Pastikan ekstensi Azure IoT siap dengan menjalankan az extension add --name azure-iot

Contoh 1. Tentukan sumber paket yang diinginkan

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.

  1. 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 di properties.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": [
          ]
       }
    }
    
    

    Tangkapan layar memperlihatkan cara mengonfigurasi konfigurasi manajer paket dari Portal Microsoft Azure

Contoh 1 adalah tentang menentukan sumber paket baru. Untuk pelaporan pada hal yang sama, lanjutkan ke Contoh 2.

Contoh 2. Laporan tentang status dan konfigurasi manajer paket

Dalam contoh ini, kami akan melaporkan:

  1. Sumber paket mana yang telah ditambahkan
  2. 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.

  1. Tunggu 1 menit (untuk komunikasi jaringan, aktivitas sisi perangkat, dll.) setelah menambahkan PackageManagerConfiguration yang diinginkan dalam contoh di atas

  2. Dalam kembar modul OSConfig perangkat yang sama, telusuri ke properti, lalu dilaporkan, lalu PackageManagerConfiguration, lalu statuskan.

  3. Ini akan menunjukkan status terbaru konfigurasi manajer paket.

    1. sourcesFileNames harus mencerminkan dua saluran yang ditambahkan
    2. executionStatus harus 2. Untuk nilai yang mungkin, lihat: dokumentasi ekstensibilitas

    Tangkapan layar memperlihatkan cara memverifikasi konfigurasi manajer paket dari Portal Microsoft Azure

Informasi referensi

Deskripsi model objek

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.

desiredState (input dari admin)
  • 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 sourceNamepeta : 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 dalam sourceDescriptor nilai yang diteruskan ke signed-by= harus menjadi nama kunci dari gpgKeys (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": null
    gpgKeys key-namepeta : 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 dari signed-by dalam sources
    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 (melalui signed-by
    • Untuk menghapus file kunci dari /usr/share/keyrings diatur key-name agar sesuai dengan nama file (tanpa ekstensi), dan atur uri 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"
           ]
        }
    }
    
state
  • 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 baik
    packages 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 baik
    sourcesFilenames 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 melalui desiredState.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 ekstensibilitas
    executionSubstate 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"
           ]
        }
    }
    
desiredState (dilaporkan; pengakuan dari perangkat)
  • Jalur: properties.reported.PackageManagerConfiguration.desiredState (perspektif DTDL: PackageManagerConfiguration komponen --> Bagian ACK dari desiredState 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/diinginkan desiredState

  • 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

Langkah berikutnya

Untuk gambaran umum skenario dan kemampuan OSConfig, lihat:

Untuk contoh praktis tertentu, lihat: