إدارة مدير حزمة نظام التشغيل باستخدام 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
أمثلة على حالات الاستخدام
يمكن أن تكون هذه الأمثلة بمثابة نقاط بداية للتكيف مع بيئتك الفريدة.
المتطلبات الأساسية لتجربة الأمثلة على الأنظمة المباشرة
إذا كنت تستخدم هذه المقالة للرجوع إليها، فلا توجد متطلبات مسبقة. يمكنك مراجعة الأمثلة ونسخ أسماء الخصائص وما إلى ذلك.
إذا كنت تريد تجربة الأمثلة على الأنظمة المباشرة (مستحسن)، فاتبع الخطوات التالية:
إنشاء حساب Azure مجاني أو استخدام حساب موجود
توصيل جهاز واحد على الأقل ممكن بواسطة OSConfig إلى IoT Hub
تلميح
لإنشاء مركز IoT بسهولة مع الأجهزة (الظاهرية) المرفقة، راجع إنشاء بيئة مختبر OSConfig (باستخدام Azure IoT) في غضون 5 دقائق
استعد لاتباع تعليمات مدخل Azure أو إرشادات Azure CLI في الأمثلة:
إذا كنت تفضل استخدام مدخل Microsoft Azure
- تسجيل الدخول إلى مدخل Microsoft Azure والوصول إلى صفحة نظرة عامة على مركز IoT
-OR- إذا كنت تفضل استخدام Azure CLI
- موصى به: استخدم Azure Cloud Shell كبيئة bash الخاصة بك عن طريق تسجيل الدخول إلى مدخل Microsoft Azure، ثم تشغيل Azure Cloud Shell في وضع bash
- ALTERNATIVE: إذا كنت تفضل استخدام بيئة bash الخاصة بك بدلا من Cloud Shell، فقم بتثبيت Azure CLI وتسجيل الدخول
- تأكد من أن ملحق Azure IoT جاهز عن طريق تشغيل
az extension add --name azure-iot
مثال 1. تحديد مصادر الحزمة المطلوبة
يوضح هذا المثال سير عمل Azure IoT للتأكد من أن الأجهزة تستخدم، كأحد مصادر الحزم الخاصة بها، قناة prod packages.microsoft.com ل Ubuntu 18.04. يمكنك تكييف هذا المثال لاستخدام أي مصدر حزمة. على سبيل المثال، مستودع عام مختلف للمورد/الإصدار أو مستودع مورد معين أو مستودع خاص تقوم بتنسيقه.
تتوفر التعليمات في نكهات المدخل وCLI وجهاز معين والتزويد والإدارة على نطاق واسع.
من صفحة مدخل 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": [ ] } }
كان المثال 1 حول تعريف مصدر حزمة جديد. للإبلاغ عن الشيء نفسه، تابع إلى المثال 2.
مثال: 2. تقرير عن حالة مدير الحزمة وتكوينها
في هذا المثال، سنبلغ عن:
- ما هي مصادر الحزم التي تمت إضافتها
- ما إذا كانت أي أجهزة تواجه أخطاء PackageManagerConfiguration
في المثال 1 أعلاه، أضفنا قيمة PackageManagerConfiguration المطلوبة إلى وحدة OSConfig المزدوجة لجهاز معين. يمكننا الآن مراقبة النتائج.
انتظر دقيقة واحدة (لاتصالات الشبكة والنشاط الجانبي للجهاز وما إلى ذلك) بعد إضافة PackageManagerConfiguration المطلوب في المثال أعلاه
في وحدة OSConfig النمطية للجهاز نفسه، استعرض التوأم للوصول إلى الخصائص، ثم تم الإبلاغ عنه، ثم PackageManagerConfiguration، ثم الحالة.
سيظهر هذا أحدث حالة لتكوين مدير الحزمة.
sourcesFileNames
يجب أن تعكس القناتين المضافتينexecutionStatus
يجب أن يكون 2. للحصول على القيم المحتملة، راجع: وثائق القابلية للتوسعة
معلومات مرجعية
وصف نموذج الكائن
يصف هذا القسم الخصائص المزدوجة والسلوكيات المقابلة.
من المفيد أن نفهم أنه في 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": nullgpgKeys 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، راجع:
للحصول على أمثلة عملية محددة، راجع: