إدارة مدير حزمة نظام التشغيل باستخدام Azure IoT وOSConfig

هام

يتضمن الإصدار 1.0.3 (تاريخ النشر 28 يونيو 2022) التغييرات العاجلة على أسماء الأعضاء التي قد تؤثر على المستخدمين الحاليين. لمزيد من المعلومات، راجع: انتقال أسماء الأعضاء من PascalCase إلى camelCase في الإصدار 1.0.3

الجمهور والنطاق

تم تصميم هذه المقالة لدعم الأشخاص الذين يقومون بتوفير الأجهزة أو إدارتها باستخدام Azure IoT. إذا لم يبدو ذلك مثلك، ففكر في إلقاء نظرة على Audiences لوثائق OSConfig.

تتناول هذه المقالة الحصول على حالة مدير الحزمة وتعيين الحالة المطلوبة لمدير الحزمة. على سبيل المثال:

الإمكانية حالات الاستخدام
تأكد من سحب مديري الحزم من مصادرك المطلوبة • نهج التشغيل الخاص بك هو أن مديري حزمة الأجهزة يجب سحبها من مستودع حزمة خاصة مع إصدارات معتمدة من المكتبات والمكونات
• تحتاج إلى أجهزة للحصول على حزم من مستودع مورد معين
إبلاغ مديري الحزم بالحزم المطلوبة • نهج التشغيل الخاص بك هو أن الأجهزة يجب أن يكون لها حزمة معينة مثل "library-XYZ-v2"
• نهج التشغيل الخاص بك هو أن الأجهزة يجب أن يكون لها رسم بياني محدد للتبعية من الحزم
مقارنة حزمة الأجهزة
أو قوائم المصادر
• نهج التشغيل الخاص بك هو أن قائمة الحزم المثبتة للأجهزة المنشورة يجب أن تتطابق مع جهاز جيد معروف

إذا كنت هنا للحصول على معلومات مرجعية بدلا من أمثلة حالة الاستخدام التفاعلي، يمكنك التخطي إلى المقطع المرجعي.

هام

في هذا الوقت، توجد توزيعات مستندة إلى apt بما في ذلك Debian وUbuntu في النطاق. إذا كنت ترغب في تطوير دعم توزيعات تستند إلى RPM، راجع وثائق القابلية للتوسعة.

في بيئة بدون apt (على سبيل المثال، البناء من المصدر وتشغيله على توزيعة عائلة Red Hat)، قد ترى رسائل السجل التالية التي تشير إلى أن الوحدة النمطية PackageManagerConfiguration غير قابلة للتطبيق.

  • في osconfig_pmc.log، تتضمن الأسطر النص التالي:
    [ERROR] Cannot run on this platform, could not find required tool apt-get
  • في osconfig_pnp_agent.log، تتضمن الأسطر النص التالي:
    [ERROR] PackageManagerConfiguration.state: MpiGet failed with 500

أمثلة على حالات الاستخدام

يمكن أن تكون هذه الأمثلة بمثابة نقاط بداية للتكيف مع بيئتك الفريدة.

المتطلبات الأساسية لتجربة الأمثلة على الأنظمة المباشرة

إذا كنت تستخدم هذه المقالة للرجوع إليها، فلا توجد متطلبات مسبقة. يمكنك مراجعة الأمثلة ونسخ أسماء الخصائص وما إلى ذلك.

إذا كنت تريد تجربة الأمثلة على الأنظمة المباشرة (مستحسن)، فاتبع الخطوات التالية:

  1. إنشاء حساب Azure مجاني أو استخدام حساب موجود

  2. توصيل جهاز واحد على الأقل ممكن بواسطة OSConfig إلى IoT Hub

    تلميح

    لإنشاء مركز IoT بسهولة مع الأجهزة (الظاهرية) المرفقة، راجع إنشاء بيئة مختبر OSConfig (باستخدام Azure IoT) في غضون 5 دقائق

  3. استعد لاتباع تعليمات مدخل Azure أو إرشادات Azure CLI في الأمثلة:

إذا كنت تفضل استخدام مدخل Microsoft Azure

  1. تسجيل الدخول إلى مدخل Microsoft Azure والوصول إلى صفحة نظرة عامة على مركز IoT لقطة شاشة تعرض IoT Hub والأجهزة من مدخل Microsoft Azure

-OR- إذا كنت تفضل استخدام Azure CLI

  1. موصى به: استخدم Azure Cloud Shell كبيئة bash الخاصة بك عن طريق تسجيل الدخول إلى مدخل Microsoft Azure، ثم تشغيل Azure Cloud Shell في وضع bash لقطة شاشة تفتح Cloud Shell من مدخل Microsoft Azure
  2. ALTERNATIVE: إذا كنت تفضل استخدام بيئة bash الخاصة بك بدلا من Cloud Shell، فقم بتثبيت Azure CLI وتسجيل الدخول
  3. تأكد من أن ملحق Azure IoT جاهز عن طريق تشغيل az extension add --name azure-iot

مثال 1. تحديد مصادر الحزمة المطلوبة

يوضح هذا المثال سير عمل Azure IoT للتأكد من أن الأجهزة تستخدم، كأحد مصادر الحزم الخاصة بها، قناة prod packages.microsoft.com ل Ubuntu 18.04. يمكنك تكييف هذا المثال لاستخدام أي مصدر حزمة. على سبيل المثال، مستودع عام مختلف للمورد/الإصدار أو مستودع مورد معين أو مستودع خاص تقوم بتنسيقه.

تتوفر التعليمات في نكهات المدخل وCLI وجهاز معين والتزويد والإدارة على نطاق واسع.

  1. من صفحة مدخل IoT Hub، انتقل إلى OSConfig twin للجهاز الذي ترغب في إدارته، وأضف ما يلي إلى properties.desired القسم، متبوعا بفاشمة لفصله عن العنصر التالي في 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": [
          ]
       }
    }
    
    

    لقطة شاشة توضح كيفية تكوين تكوين مدير الحزمة من مدخل Microsoft Azure

كان المثال 1 حول تعريف مصدر حزمة جديد. للإبلاغ عن الشيء نفسه، تابع إلى المثال 2.

مثال: 2. تقرير عن حالة مدير الحزمة وتكوينها

في هذا المثال، سنبلغ عن:

  1. ما هي مصادر الحزم التي تمت إضافتها
  2. ما إذا كانت أي أجهزة تواجه أخطاء PackageManagerConfiguration

في المثال 1 أعلاه، أضفنا قيمة PackageManagerConfiguration المطلوبة إلى وحدة OSConfig المزدوجة لجهاز معين. يمكننا الآن مراقبة النتائج.

  1. انتظر دقيقة واحدة (لاتصالات الشبكة والنشاط الجانبي للجهاز وما إلى ذلك) بعد إضافة PackageManagerConfiguration المطلوب في المثال أعلاه

  2. في وحدة OSConfig النمطية للجهاز نفسه، استعرض التوأم للوصول إلى الخصائص، ثم تم الإبلاغ عنه، ثم PackageManagerConfiguration، ثم الحالة.

  3. سيظهر هذا أحدث حالة لتكوين مدير الحزمة.

    1. sourcesFileNames يجب أن تعكس القناتين المضافتين
    2. executionStatus يجب أن يكون 2. للحصول على القيم المحتملة، راجع: وثائق القابلية للتوسعة

    لقطة شاشة توضح كيفية التحقق من تكوين مدير الحزمة من مدخل Microsoft Azure

معلومات مرجعية

وصف نموذج الكائن

يصف هذا القسم الخصائص المزدوجة والسلوكيات المقابلة.

من المفيد أن نفهم أنه في Azure IoT هناك نموذجان أو منظوران عقليان لوصف المحتويات المزدوجة.

  • المنظور المطلوب/المبلغ عنه العادي

    هذا هو نموذج كائن IoT Hub الأساسي. يتم استخدامه بواسطة خدمة استعلام IoT Hub وخدمة az iot hub module-twin تكوينات IoT Hub والأوامر وطرق العرض المزدوجة العادية في مدخل Microsoft Azure ومستكشف IoT.

  • منظور محسن للغة تعريف التوأم الرقمي (DTDL)

    يمكن DTDL (مع الأنماط المقابلة بما في ذلك Azure IoT أجهزة التوصيل و التشغيل [PnP]) التطبيقات والخدمات من توقع المحتوى المزدوج والتحقق من صحته وتحسين سياقه. يتم استخدام هذا بواسطة طرق عرض PnP في IoT Explorer، وخدمة Azure Digital Twins، وربما من خلال حل السحابة الخاص بك عند التفاعل مع IoT Hub.

وفي معظم الحالات أدناه، لا يلزم التمييز. على سبيل المثال، يسمى "gpgKeys" "gpgKeys" في أي من نقطتي العرض.

وفي بعض الحالات، قد يكون التمييز مفيدا. على سبيل المثال، قيم المسار الموضحة أدناه. في هذه الحالات، يتم إعطاء الوصف المطلوب/المبلغ عنه العادي أولا، متبوعا بمنظور DTDL محسن بين قوسين.

desiredState (إدخال من المسؤول)
  • المسار: properties.desired.PackageManagerConfiguration.desiredState (DTDL: PackageManagerConfiguration مكون -->desiredState خاصية قابلة للكتابة)

  • الوصف: إدخال من المسؤول؛ تمكين إضافة مصادر الحزم والحزم إلى الأجهزة

  • الأعضاء

    الاسم النوع ملاحظات
    المصادر sourceNameخريطة : sourceDescriptor أزواج (سلاسل) لكل زوج في القاموس:
    sourceName هو معرف محدد للمسؤول، على سبيل المثال: *my-source-foo*
    sourceDescriptor هي سلسلة تعريف المصدر بالتنسيق المستخدم من قبل مدير الحزم؛ على سبيل المثال: deb [arch=amd64,armhf,arm64 signed-by=my-repo-key] https://packages.microsoft.com/ubuntu/18.04/prod focal main
    • يجب أن يكون داخل sourceDescriptor القيمة التي تم تمريرها إلى signed-by= اسم مفتاح من gpgKeys (موضح أدناه)؛ على سبيل المثال: موقعة من قبل =my-source-foo-key
    • عند إضافة مصدر أو تعديله ، سيتم ملء ملف في sources.list.d (الكتابة فوق الملف الموجود إذا كان موجودا) مع واصف المصدر
    • لتحديد أنه لا ينبغي للأجهزة استخدام مصدر معين (بافتراض أنه تم تعريفه مسبقا في sources.list.d، وليس في أي مكان آخر على النظام)، قم بتضمين زوج مثل "my-source-bar": ""؛ إذا كان هناك ملف باسم my-source-bar.list موجود في sources.list.d ، فستتم إزالته
    • إذا لم تعد بحاجة إلى توجيه لا ينبغي استخدامه (على سبيل المثال، لم يعد شريط المصدر الخاص بي ذا صلة بعد مرور بعض الوقت)، يمكنك إزالته من التوأم المطلوب عن طريق تغيير القيمة من "my-source-bar": "" إلى "my-source-bar": null
    gpgKeys key-nameخريطة : uri أزواج (سلاسل) يستخدم لإعلام الحزمة
    مدير المفاتيح العامة للمستودع؛
    لكل زوج في القاموس:
    key-name هو معرف محدد للمسؤول؛ على سبيل المثال: my-repo-foo-key، الذي يشار إليه من signed-by في sources
    uri هو موقع المفتاح العام للمخزن؛ على سبيل المثال: https://packages.microsoft.com/keys/microsoft.asc
    • تتم إضافة المفتاح كملف إلى /usr/share/keyrings/; لاحظ أنه لضمان تحديد نطاق تطبيق المفتاح، يتم استخدام هذا المسار غير المحدد؛ ستقوم apt بتطبيق هذا المفتاح فقط على المصادر المرتبطة به بشكل صريح (عبر signed-by
    • لإزالة ملف مفتاح من /usr/share/keyrings تم تعيينه key-name لمطابقة اسم الملف (بدون ملحق)، وتعيينه uri إلى ""
    الحزم صفيف معرفات الحزمة (سلاسل) • إرشاد مدير الحزم لضمان تثبيت هذه الحزم
    • مشابه لأسماء> حزم التثبيت <على Debian
    • مضافة (غير مدمرة) في الطبيعة؛ على سبيل المثال، تعني القائمة الفارغة "عدم القيام بأي شيء" (وليس "إلغاء تثبيت جميع الحزم على النظام")
  • مثال على الحمولة (كما هو الحال في قسم التوأم properties.desired من IoT Hub twin)

    "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"
           ]
        }
    }
    
الولاية
  • المسار: properties.reported.PackageManagerConfiguration.state (منظور DTDL: PackageManagerConfiguration المكون -->state خاصية للقراءة فقط)

  • الوصف: حالة PackageManagerConfiguration كما أبلغ عنه الجهاز

  • الأعضاء

    الاسم النوع ملاحظات
    packagesFingerprint سلسلة • بصمة مبهمة لقائمة جميع الحزم المثبتة على الجهاز (لا تقتصر على الحزم المشار إليها في desiredState.packages)
    • يستخدم لمقارنة أعداد كبيرة من الأجهزة بجهاز معروف
    الحزم صفيف معرفات الحزمة (سلاسل) • الاسم والحالة (إصدار أو "فشل") للحزم المحددة من قبل المسؤول desiredState.packages
    • إذا تم تثبيت حزمة بنجاح، يتبع الاسم رقم الإصدار المثبت
    • إذا تعذر تثبيت حزمة، يتبع الاسم "فشل"
    sourcesFingerprint سلسلة • بصمة مبهمة لمصادر الحزمة المستخدمة من قبل الجهاز
    • يستخدم لمقارنة أعداد كبيرة من الأجهزة بجهاز معروف
    sourcesFilenames صفيف أسماء الملفات (سلاسل) • قائمة بمصادر الحزمة (كأسماء الملفات، على سبيل المثال my-repo.list) التي تمت إضافتها إلى مدير الحزمة عبر /etc/apt/sources.list.d (على Debian)
    • تضمين أي مصادر موجودة، بغض النظر عما إذا كانت قد تمت إضافتها عبر desiredState.sources
    حالة التنفيذ int • حالة النجاح/الفشل الإجمالية
    • القيم الاسمية هي 0 (الحالة الأولية، لم يتم تحديد أي حالة مطلوبة) أو 2 (نجحت)
    • للحصول على قيم أخرى، راجع: وثائق القابلية للتوسعة
    executionSubstate int • للحصول على القيم المحتملة، راجع: وثائق القابلية للتوسعة
    executionSubstateDetails سلسلة • معلومات إضافية لاستكشاف الأخطاء وإصلاحها
  • مثال على الحمولة (كما هو ملاحظ في قسم التوأم 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 (تم الإبلاغ عنه؛ الإقرار من الجهاز)
  • المسار: properties.reported.PackageManagerConfiguration.desiredState (منظور DTDL: PackageManagerConfiguration المكون --> جزء ACK من الخاصية desiredState القابلة للكتابة)

  • الوصف: هذا العنصر الإضافي المبلغ عنه هو إعلام من الجهاز؛ لأدوات المسؤول وإعداد التقارير عنه ملاحق state-- تمكين سلسلة أدوات المسؤول من تحديد ما إذا كان الجهاز قد تلقى حتى الآن هدف المسؤول الذي تم التقاطه في المسؤول القابل للكتابة/المطلوب desiredState

  • الأعضاء

    الاسم النوع ملاحظات
    القيمة كائن • يجب أن تعكس properties.desired.PackageManagerConfiguration.desiredState
    ac int • يشير إلى نجاح (القيمة 200) أو فشل (القيمة 400) للجهاز الذي يتلقى ويعالج desiredState من المسؤول

الخطوات التالية

للحصول على نظرة عامة حول سيناريوهات وإمكانيات OSConfig، راجع:

للحصول على أمثلة عملية محددة، راجع: