نشر IoT Edge على جهاز Ubuntu ظاهري على Azure Stack Edge

ينطبق على:Yes for Pro GPU SKUAzure Stack Edge Pro - GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro RYes for Mini R SKUAzure Stack Edge Mini R

توضح هذه المقالة كيفية نشر وقت تشغيل IoT Edge على جهاز Ubuntu ظاهري يعمل على جهاز Azure Stack Edge. لعمل التطوير الجديد، استخدم أسلوب النشر ذاتي الخدمة الموضحة في هذه المقالة لأنه يستخدم أحدث إصدار من البرامج.

تدفق عالي المستوى

التدفق عالي المستوى كما يلي:

  1. إنشاء أو تحديد مثيل IoT Hub أو Azure IoT Hub Device Provisioning Service (DPS ).
  2. استخدم Azure CLI للحصول على صورة Ubuntu 20.04 LTS VM.
  3. قم بتحميل صورة Ubuntu إلى مكتبة صور Azure Stack Edge VM.
  4. انشر صورة Ubuntu كجهاز ظاهري باستخدام الخطوات التالية:
    1. أدخل اسم الجهاز الظاهري واسم المستخدم وكلمة المرور. إنشاء قرص آخر اختياري.
    2. إعداد تكوين الشبكة.
    3. قم بتوفير برنامج نصي معد ل cloud-init في علامة التبويب Advanced .

المتطلبات الأساسية

قبل أن تبدأ، تأكد من أن لديك:

  • جهاز Azure Stack Edge الذي قمت بتنشيطه. للحصول على خطوات مفصلة، راجع تنشيط Azure Stack Edge Pro GPU.

  • الوصول إلى أحدث صورة Ubuntu 20.04 VM، إما الصورة من Azure Marketplace أو صورة مخصصة تقوم بإحضارها:

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160

    استخدم الخطوات في البحث عن صور Azure Marketplace للحصول على صورة الجهاز الظاهري.

إعداد البرنامج النصي ل cloud-init

لنشر وقت تشغيل IoT Edge على جهاز Ubuntu الظاهري، استخدم البرنامج النصي cloud-init أثناء نشر الجهاز الظاهري.

استخدم الخطوات في أحد الأقسام التالية:

استخدام توفير المفتاح المتماثل

لتوصيل جهازك ب IoT Hub بدون DPS، استخدم الخطوات الواردة في هذا القسم لإعداد برنامج نصي للتهيئة السحابية للصفحة المتقدمة لإنشاء الجهاز الظاهري لنشر وقت تشغيل IoT Edge ووقت تشغيل حاوية Nvidia.

  1. استخدم IoT Hub موجود أو أنشئ مركز جديد. استخدم هذه الخطوات لإنشاء مركز IoT.

  2. استخدم هذه الخطوات لتسجيل جهاز Azure Stack Edge في IoT Hub.

  3. استرجع Primary الاتصال ion String من IoT Hub لجهازك، ثم الصقه في الموقع أدناه للجهاز الاتصال ionString.

البرنامج النصي Cloud-init لتزويد المفاتيح المتماثلة


#cloud-config

runcmd:
  - dcs="<DeviceConnectionString>"
  - |
      set -x
      (

        # Wait for docker daemon to start

        while [ $(ps -ef | grep -v grep | grep docker | wc -l) -le 0 ]; do 
          sleep 3
        done
        
        if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then

          #install Nvidia drivers

          apt install -y ubuntu-drivers-common
         ubuntu-drivers devices
          ubuntu-drivers autoinstall

          # Install NVIDIA Container Runtime

          curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | apt-key add -
          distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
          curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | tee /etc/apt/sources.list.d/nvidia-container-runtime.list
          apt update
          apt install -y nvidia-container-runtime
        fi
        
        # Restart Docker

        systemctl daemon-reload
        systemctl restart docker

        # Install IoT Edge

        apt install -y aziot-edge

        if [ ! -z $dcs ]; then
          iotedge config mp --connection-string $dcs
          iotedge config apply
        fi
      if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then      
         reboot
      fi       ) &

apt:
  preserve_sources_list: true
  sources:
    msft.list:
      source: "deb https://packages.microsoft.com/ubuntu/20.04/prod focal main"
      key: |
        -----BEGIN PGP PUBLIC KEY BLOCK-----
        Version: GnuPG v1.4.7 (GNU/Linux)

        mQENBFYxWIwBCADAKoZhZlJxGNGWzqV+1OG1xiQeoowKhssGAKvd+buXCGISZJwT
        LXZqIcIiLP7pqdcZWtE9bSc7yBY2MalDp9Liu0KekywQ6VVX1T72NPf5Ev6x6DLV
        7aVWsCzUAF+eb7DC9fPuFLEdxmOEYoPjzrQ7cCnSV4JQxAqhU4T6OjbvRazGl3ag
        OeizPXmRljMtUUttHQZnRhtlzkmwIrUivbfFPD+fEoHJ1+uIdfOzZX8/oKHKLe2j
        H632kvsNzJFlROVvGLYAk2WRcLu+RjjggixhwiB+Mu/A8Tf4V6b+YppS44q8EvVr
        M+QvY7LNSOffSO6Slsy9oisGTdfE39nC7pVRABEBAAG0N01pY3Jvc29mdCAoUmVs
        ZWFzZSBzaWduaW5nKSA8Z3Bnc2VjdXJpdHlAbWljcm9zb2Z0LmNvbT6JATUEEwEC
        AB8FAlYxWIwCGwMGCwkIBwMCBBUCCAMDFgIBAh4BAheAAAoJEOs+lK2+EinPGpsH
        /32vKy29Hg51H9dfFJMx0/a/F+5vKeCeVqimvyTM04C+XENNuSbYZ3eRPHGHFLqe
        MNGxsfb7C7ZxEeW7J/vSzRgHxm7ZvESisUYRFq2sgkJ+HFERNrqfci45bdhmrUsy
        7SWw9ybxdFOkuQoyKD3tBmiGfONQMlBaOMWdAsic965rvJsd5zYaZZFI1UwTkFXV
        KJt3bp3Ngn1vEYXwijGTa+FXz6GLHueJwF0I7ug34DgUkAFvAs8Hacr2DRYxL5RJ
        XdNgj4Jd2/g6T9InmWT0hASljur+dJnzNiNCkbn9KbX7J/qK1IbR8y560yRmFsU+
        NdCFTW7wY0Fb1fWJ+/KTsC4=
        =J6gs
        -----END PGP PUBLIC KEY BLOCK----- 
packages:
  - moby-cli
  - moby-engine
write_files:
  - path: /etc/systemd/system/docker.service.d/override.conf
    permissions: "0644"
    content: |
      [Service]
      ExecStart=
      ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime --log-driver local

استخدام DPS

استخدم الخطوات الواردة في هذا القسم لتوصيل جهازك ب DPS وIoT Central. ستقوم بإعداد ملف script.sh لنشر وقت تشغيل IoT Edge أثناء إنشاء الجهاز الظاهري.

  1. استخدم IoT Hub وDPS الحاليين، أو أنشئ IoT Hub جديدا.

  2. انتقل إلى مورد DPS وأنشئ تسجيلا فرديا. 

    1. انتقل إلى Device Provisioning Service>Manage enrollments>Add individual enrollment.
    2. تأكد من أن تحديد المفتاح المتماثل لنوع التصديق وجهاز IoT Edge هو True. التحديد الافتراضي هو False.
    3. استرداد المعلومات التالية من صفحة مورد DPS:
      • معرف التسجيل. نوصي باستخدام نفس معرف الجهاز ل IoT Hub.
      • نطاق المعرف المتوفر في قائمة نظرة عامة.
      • مفتاح SAS الأساسي من قائمة التسجيل الفردي.
  3. انسخ القيم والصقها من IoT Hub (IDScope) وDPS (RegistrationID، وSymmetric Key) في وسيطات البرنامج النصي.

البرنامج النصي Cloud-init ل IoT Hub DPS


#cloud-config

runcmd:
    - dps_idscope="<DPS IDScope>"
    - registration_device_id="<RegistrationID>"
    - key="<Symmetric Key>"
    - |
      set -x
      (
      
      wget https://github.com/Azure/iot-edge-config/releases/latest/download/azure-iot-edge-installer.sh -O azure-iot-edge-installer.sh \
      && chmod +x azure-iot-edge-installer.sh \
      && sudo -H ./azure-iot-edge-installer.sh -s $dps_idscope -r $registration_device_id -k $key \
      && rm -rf azure-iot-edge-installer.sh
      
      # Wait for docker daemon to start

      while [ $(ps -ef | grep -v grep | grep docker | wc -l) -le 0 ]; do 
        sleep 3
      done

      systemctl stop aziot-edge

      if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then

        #install Nvidia drivers

        apt install -y ubuntu-drivers-common
        ubuntu-drivers devices
        ubuntu-drivers autoinstall

        # Install NVIDIA Container Runtime

        curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | apt-key add -
        distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
        curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | tee /etc/apt/sources.list.d/nvidia-container-runtime.list
        apt update
        apt install -y nvidia-container-runtime
      fi

      # Restart Docker

      systemctl daemon-reload
      systemctl restart docker

      systemctl start aziot-edge    
      if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then      
         reboot
      fi
      ) &
write_files:
  - path: /etc/systemd/system/docker.service.d/override.conf
    permissions: "0644"
    content: |
      [Service]
      ExecStart=
      ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime --log-driver local

نشر وقت تشغيل IoT Edge

يعد نشر وقت تشغيل IoT Edge جزءا من إنشاء الجهاز الظاهري، باستخدام البرنامج النصي cloud-init المذكور أعلاه.

فيما يلي الخطوات عالية المستوى لنشر الجهاز الظاهري ووقت تشغيل IoT Edge:

  1. احصل على صورة Ubuntu VM من Azure Marketplace. للحصول على خطوات مفصلة، اتبع الإرشادات الواردة في استخدام صورة Azure Marketplace لإنشاء صورة الجهاز الظاهري ل Azure Stack Edge.

    1. في مدخل Microsoft Azure، انتقل إلى Azure Marketplace.
    2. الاتصال إلى Azure Cloud Shell أو عميل مع تثبيت Azure CLI. للحصول على خطوات مفصلة، راجع التشغيل السريع ل Bash في Azure Cloud Shell.

    إشعار

    سيؤدي إغلاق جلسة shell إلى حذف جميع المتغيرات التي تم إنشاؤها أثناء جلسة عمل shell. تتطلب إعادة فتح جلسة العمل إعادة إنشاء المتغيرات.

    ج. قم بتشغيل الأمر التالي لتعيين الاشتراك.

    az account set –subscription <subscription id>
    
  2. استخدم الخطوات في البحث عن صور Azure Marketplace للبحث في Azure Marketplace عن صورة Ubuntu 20.04 LTS.

    مثال على صورة Ubuntu 20.04 LTS:

    $urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
    
  3. إنشاء قرص مدار جديد من صورة Marketplace. للحصول على خطوات مفصلة، راجع استخدام صورة Azure Marketplace لإنشاء صورة الجهاز الظاهري ل Azure Stack Edge.

  4. تصدير VHD من القرص المدار إلى حساب Azure Storage. للحصول على خطوات مفصلة، راجع تصدير VHD من القرص المدار إلى Azure Storage.

  5. اتبع هذه الخطوات لإنشاء جهاز ظاهري Ubuntu باستخدام صورة الجهاز الظاهري.

    1. حدد البرنامج النصي cloud-init في علامة التبويب Advanced. لإنشاء جهاز ظاهري، راجع نشر GPU VM عبر مدخل Microsoft Azure أو نشر الجهاز الظاهري عبر مدخل Microsoft Azure.

      Screenshot of the Advanced tab of VM configuration in the Azure portal.

    2. حدد سلسلة الاتصال الجهاز المناسبة في cloud-init للاتصال بجهاز IoT Hub أو DPS. للحصول على خطوات مفصلة، راجع التوفير باستخدام مفاتيح متماثلة أو توفير مع IoT Hub DPS.

      Screenshot of the Custom data field of VM configuration in the Azure portal.

إذا لم تحدد cloud-init أثناء إنشاء الجهاز الظاهري، يتعين عليك نشر وقت تشغيل IoT Edge يدويا بعد إنشاء الجهاز الظاهري:

  1. الاتصال إلى الجهاز الظاهري عبر SSH.
  2. تثبيت محرك الحاوية على الجهاز الظاهري. للحصول على خطوات مفصلة، راجع إنشاء وتوفير جهاز IoT Edge على Linux باستخدام مفاتيح متماثلة أو التشغيل السريع - إعداد IoT Hub DPS باستخدام مدخل Microsoft Azure.

تحقق من وقت تشغيل IoT Edge

استخدم هذه الخطوات للتحقق من تشغيل وقت تشغيل IoT Edge.

  1. انتقل إلى مورد IoT Hub في مدخل Microsoft Azure.

  2. حدد جهاز IoT Edge.

  3. تحقق من تشغيل وقت تشغيل IoT Edge.

    Screenshot of the IoT Edge runtime status in the Azure portal.

    لاستكشاف أخطاء تكوين جهاز IoT Edge وإصلاحها، راجع استكشاف أخطاء جهاز IoT Edge وإصلاحها.

تحديث وقت تشغيل IoT Edge

لتحديث الجهاز الظاهري، اتبع الإرشادات الواردة في تحديث IoT Edge. للعثور على أحدث إصدار من Azure IoT Edge، راجع إصدارات Azure IoT Edge.

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

لنشر وتشغيل وحدة IoT Edge على جهاز Ubuntu الظاهري، راجع الخطوات في نشر وحدات IoT Edge النمطية.

لنشر وحدة DeepStream الخاصة ب Nvidia، راجع نشر الوحدة النمطية Nvidia DeepStream على Ubuntu VM على Azure Stack Edge Pro مع GPU.

لنشر NVIDIA DIGITS، راجع تمكين وحدة معالجة الرسومات في وحدة NVIDIA مسبقة الصنع.