إعداد جهاز ظاهري يستند إلى Red Hat لـ Azure

ينطبق على: ✔️ أجهزة Linux الظاهرية ✔️ مجموعات المقياس المرنة ✔️ مجموعات المقياس الموحدة

في هذه المقالة، ستتعلم كيفية إعداد جهاز ظاهري Red Hat Enterprise Linux (RHEL) للاستخدام في Azure. إصدارات RHEL التي تغطيها هذه المقالة هي 6.X و7.X و8.X. برامج مراقبة الأجهزة الافتراضية للتحضير التي تغطيها هذه المقالة هي Hyper-V وVM المستندة إلى kernel (KVM) وVMware.

لمزيد من المعلومات حول متطلبات الأهلية للمشاركة في برنامج Red Hat للوصول إلى السحابة، راجع موقع Red Hat Cloud Access على الويب وتشغيل RHEL على Azure. للحصول على طرق لأتمتة إنشاء صور RHEL، راجع Azure Image Builder.

إشعار

كن على دراية بالإصدارات التي في نهاية عمرها (EOL) ولم تعد مدعومة من قبل Red Hat. يتم دعم الصور التي تم تحميلها في EOL أو خارجها على أساس معقول من الجهد التجاري. لمزيد من المعلومات، راجع دورات حياة منتج Red Hat.

Hyper-V Manager

يوضح لك هذا القسم كيفية إعداد RHEL 6 أو RHEL 7 أو RHEL 8 VM باستخدام Hyper-V Manager.

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

يفترض هذا القسم أنك حصلت بالفعل على ملف ISO من موقع Red Hat على الويب وقمت بتثبيت صورة RHEL على قرص ثابت ظاهري (VHD). لمزيد من المعلومات حول كيفية استخدام Hyper-V Manager لتثبيت صورة نظام التشغيل، راجع تثبيت دور Hyper-V وتكوين جهاز ظاهري.

ملاحظات تثبيت RHEL

  • لا يدعم Azure تنسيق VHDX. يدعم Azure VHD الثابت فقط. يمكنك استخدام Hyper-V Manager لتحويل القرص إلى تنسيق VHD، أو يمكنك استخدام convert-vhd cmdlet. إذا كنت تستخدم VirtualBox، فحدد الحجم الثابت بدلاً من الخيار الافتراضي المخصص ديناميكيًا عند إنشاء القرص.
  • يدعم Azure الأجهزة الظاهرية Gen1 (تمهيد BIOS) وGen2 (تمهيد UEFI).
  • الحد الأقصى للحجم المسموح به لـ VHD هو 1023 GB.
  • يجب تمكين الوحدة النمطية vfat kernel في النواة.
  • يتم دعم إدارة وحدة التخزين المنطقية (LVM) ويمكن استخدامها على قرص نظام التشغيل أو أقراص البيانات في أجهزة Azure الظاهرية. بشكل عام، نوصي باستخدام الأقسام القياسية على قرص نظام التشغيل بدلا من LVM. تتجنب هذه الممارسة تعارض اسم LVM مع الأجهزة الظاهرية المستنسخة، خاصة إذا كنت بحاجة إلى إرفاق قرص نظام تشغيل بجهاز ظاهري آخر متطابق لاستكشاف الأخطاء وإصلاحها. لمزيد من المعلومات، راجع وثائق LVM و RAID.
  • مطلوب دعم Kernel لتثبيت أنظمة ملفات تنسيق القرص العالمي (UDF). في التمهيد الأول على Azure، تمرر الوسائط المنسقة بواسطة UDF المرفقة بالضيف تكوين التوفير إلى Linux VM. يجب أن يكون عامل Azure Linux قادرًا على إدخال نظام ملفات UDF لقراءة تكوينه وتوفير الجهاز الظاهري. بدون هذه الخطوة، يفشل التوفير.
  • لا تقم بتكوين قسم تبديل على قرص نظام التشغيل. لمزيد من المعلومات، اقرأ الخطوات التالية.
  • يجب أن يكون لجميع أقراص VHD على Azure حجم ظاهري محاذاته إلى 1 ميغابايت. عند التحويل من قرص خام إلى VHD، يجب التأكد من أن حجم القرص الخام هو مضاعف 1 ميغابايت قبل التحويل. لمزيد من المعلومات، اقرأ الخطوات التالية. راجع أيضا ملاحظات تثبيت Linux.

إشعار

Cloud-init >= 21.2 يزيل متطلبات UDF. ومع ذلك، بدون تمكين الوحدة النمطية UDF، لن يتم تحميل CD-ROM أثناء التوفير، مما يمنع تطبيق البيانات المخصصة. الحل البديل هو تطبيق البيانات المخصصة باستخدام بيانات المستخدم. على عكس البيانات المخصصة، لا يتم تشفير بيانات المستخدم. لمزيد من المعلومات، راجع تنسيقات بيانات المستخدم.

RHEL 6 تستخدم إدارة Hyper-V

هام

في 30 نوفمبر 2020، وصلت RHEL 6 إلى نهاية مرحلة الصيانة. تليها مرحلة الصيانة مرحلة العمر الممتد. مع انتقال RHEL 6 من مراحل Full/Maintenance، نوصي بشدة بالترقية إلى RHEL 7 أو 8 أو 9. إذا كان يجب أن تبقى على RHEL 6، نوصي بإضافة الوظيفة الإضافية دعم دورة الحياة الموسعة RHEL.

  1. في Hyper-V Manager، حدد الجهاز الظاهري.

  2. حدد Connect لفتح نافذة وحدة تحكم للجهاز الظاهري.

  3. في RHEL 6، NetworkManager يمكن أن تتداخل مع عامل Azure Linux. إلغاء تثبيت هذه الحزمة:

    sudo rpm -e --nodeps NetworkManager
    
  4. أنشئ الملف /etc/sysconfig/network أو حرره، ثم أضف النص التالي:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. أنشئ الملف /etc/sysconfig/network-scripts/ifcfg-eth0 أو حرره، ثم أضف النص التالي:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. انقل (أو أزل) قواعد udev لتجنب إنشاء قواعد ثابتة لواجهة Ethernet. تتسبب هذه القواعد في حدوث مشاكل عند استنساخ جهاز ظاهري في Azure أو Hyper-V:

    تحذير

    تتطلب العديد من أحجام الأجهزة الظاهرية "v5" والأحدث الشبكات المتسارعة. إذا لم يتم تمكينه، فسيعين NetworkManager نفس عنوان IP لجميع واجهات الوظائف الظاهرية. لمنع تكرار عناوين IP، تأكد من تضمين قاعدة udev هذه عند الترحيل إلى حجم أحدث.

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

    إشعار

    عند استخدام الشبكات المسرعة، يجب تكوين الواجهة الاصطناعية التي تم إنشاؤها لتكون غير مدارة باستخدام قاعدة udev. يمنع NetworkManager هذا الإجراء من تعيين نفس IP إليه مثل الواجهة الأساسية.

    لتطبيقه:

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  7. تأكد من أن خدمة الشبكة تبدأ في وقت التمهيد:

    sudo chkconfig network on
    
  8. تسجيل اشتراك Red Hat لتمكين تثبيت الحزم من مستودع RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  9. تم دفع حزمة WALinuxAgent، WALinuxAgent-<version>، إلى مستودع إضافات Red Hat. تمكين مستودع الإضافات:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  10. تعديل خط تمهيد kernel في تكوين grub الخاص بك لتضمين المزيد من معلمات kernel ل Azure. لإجراء هذا التعديل، افتح /boot/grub/menu.lst في محرر نص. تأكد من أن النواة الافتراضية تتضمن المعلمات التالية:

    console=ttyS0 earlyprintk=ttyS0
    

    يضمن هذا الإجراء أيضا إرسال جميع رسائل وحدة التحكم إلى المنفذ التسلسلي الأول، والذي يمكن أن يساعد دعم Azure في تصحيح المشكلات.

    نوصي أيضا بإزالة المعلمات التالية:

    rhgb quiet crashkernel=auto
    

    الأحذية الرسومية والهادئة ليست مفيدة في بيئة سحابية حيث تريد إرسال جميع السجلات إلى المنفذ التسلسلي. يمكنك ترك crashkernel الخيار مكونا إذا كنت تريد ذلك. تقلل هذه المعلمة مقدار الذاكرة المتوفرة في الجهاز الظاهري بمقدار 128 ميغابايت أو أكثر. قد يكون هذا التكوين مشكلة لأحجام الأجهزة الظاهرية الأصغر.

  11. تأكد من تثبيت خادم shell الآمن (SSH) وتكوينه للبدء في وقت التمهيد، وهو عادةً ما يكون الإعداد الافتراضي. عدِّل /etc/ssh/sshd_config لتضمين السطر التالي:

    ClientAliveInterval 180
    
  12. تثبيت عامل Azure Linux:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    

    يؤدي تثبيت حزمة WALinuxAgent إلى NetworkManager إزالة الحزمتين و NetworkManager-gnome إذا لم تتم إزالتها بالفعل في الخطوة 3.

  13. لا تقم بإنشاء مساحة تبديل على قرص نظام التشغيل.

    يمكن لعامل Azure Linux تكوين مساحة التبديل تلقائيا باستخدام قرص المورد المحلي المرفق بالجهاز الظاهري بعد توفير الجهاز الظاهري على Azure. قرص المورد المحلي هو قرص مؤقت وقد يتم إفراغه إذا تم إلغاء توفير الجهاز الظاهري. بعد تثبيت عامل Azure Linux في الخطوة السابقة، قم بتعديل المعلمات /etc/waagent.conf التالية بشكل مناسب:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  14. إلغاء تسجيل الاشتراك (إذا لزم الأمر):

    sudo subscription-manager unregister
    
  15. إلغاء توفير الجهاز الظاهري وإعداده للتزويد على Azure:

    إشعار

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

        sudo waagent -force -deprovision
        sudo export HISTSIZE=0
    
  16. حدد Action>Shut down في Hyper-V Manager. أصبح قرص Linux VHD جاهزاً الآن للتحميل إلى Azure.

RHEL 7 تستخدم إدارة Hyper-V

  1. في Hyper-V Manager، حدد الجهاز الظاهري.

  2. حدد Connect لفتح نافذة وحدة تحكم للجهاز الظاهري.

  3. أنشئ الملف /etc/sysconfig/network أو حرره، ثم أضف النص التالي:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. أنشئ الملف /etc/sysconfig/network-scripts/ifcfg-eth0 أو حرره، ثم أضف النص التالي:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    

    إشعار

    عند استخدام الشبكات المسرعة، يجب تكوين الواجهة الاصطناعية التي تم إنشاؤها لتكون غير مدارة باستخدام قاعدة udev. يمنع NetworkManager هذا الإجراء من تعيين نفس IP إليه مثل الواجهة الأساسية.

    لتطبيقه:

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  5. تأكد من أن خدمة الشبكة تبدأ في وقت التمهيد:

    sudo systemctl enable network
    
  6. تسجيل اشتراك Red Hat لتمكين تثبيت الحزم من مستودع RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. تعديل خط تمهيد kernel في تكوين grub الخاص بك لتضمين المزيد من معلمات kernel ل Azure. لإجراء هذا التعديل، افتح /etc/default/grub في محرر نص وقم بتحرير المعلمة GRUB_CMDLINE_LINUX . على سبيل المثال:

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    ENABLE_BLSCFG=true
    

    إشعار

    إذا كان ENABLE_BLSCFG=false موجودا في /etc/default/grub بدلا من ENABLE_BLSCFG=true، فقد لا تعمل أدوات مثل grubedit أو gubby، والتي تعتمد على Boot Loader Specification (BLS) لإدارة إدخالات التمهيد والتكوينات، بشكل صحيح في RHEL 8 و9. إذا ENABLE_BLSCFG لم يكن موجودا، فإن السلوك الافتراضي هو false.

    يضمن هذا التعديل أيضا إرسال جميع رسائل وحدة التحكم إلى المنفذ التسلسلي الأول وتمكين التفاعل مع وحدة التحكم التسلسلية، والتي يمكن أن تساعد دعم Azure في تصحيح المشكلات. يؤدي هذا التكوين أيضا إلى إيقاف تشغيل اصطلاحات تسمية RHEL 7 الجديدة لبطاقات واجهة الشبكة (NICs).

    rhgb quiet crashkernel=auto
    

    الأحذية الرسومية والهادئة ليست مفيدة في بيئة سحابية حيث تريد إرسال جميع السجلات إلى المنفذ التسلسلي. يمكنك ترك crashkernel الخيار مكونا إذا كنت تريد ذلك. تقلل هذه المعلمة مقدار الذاكرة المتوفرة في الجهاز الظاهري بمقدار 128 ميغابايت أو أكثر، مما قد يكون مشكلة لأحجام الأجهزة الظاهرية الأصغر.

  8. بعد الانتهاء من التحرير /etc/default/grub، قم بتشغيل الأمر التالي لإعادة إنشاء تكوين grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    إشعار

    إذا كنت تقوم بتحميل جهاز ظاهري ممكن ل UEFI، فإن الأمر لتحديث grub هو grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg.

  9. تأكد من تثبيت خادم SSH وتكوينه للبدء في وقت التمهيد، والذي عادةً ما يكون بالإعداد الافتراضي. عدِّل /etc/ssh/sshd_config لتضمين السطر التالي:

    ClientAliveInterval 180
    
  10. تم دفع حزمة WALinuxAgent، WALinuxAgent-<version>، إلى مستودع إضافات Red Hat. تمكين مستودع الإضافات:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. تثبيت عامل Azure Linux والأدوات cloud-initالمساعدة الضرورية الأخرى:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  12. تكوين cloud-init للتعامل مع التزويد:

    1. تكوين waagent ل cloud-init:

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=auto/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
      

      إشعار

      إذا كنت تقوم بترحيل جهاز ظاهري معين ولا تريد إنشاء صورة معممة، فقم بتعيين Provisioning.Agent=disabled على /etc/waagent.conf التكوين.

    2. تكوين وحدات:

      sudo echo "Adding mounts and disk_setup to init stage"
      sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
      sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
      
    3. تكوين مصدر بيانات Azure:

      sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
      datasource_list: [ Azure ]
      datasource:
          Azure:
              apply_network_config: False
      EOF
      
    4. إذا تم تكوينه، فقم بإزالة ملف التبديل الموجود:

      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swapfile by default
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
    5. تكوين cloud-init التسجيل:

      sudo echo "Add console log file"
      sudo cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
      
      # This tells cloud-init to redirect its stdout and stderr to
      # 'tee -a /var/log/cloud-init-output.log' so the user can see output
      # there without needing to look on the console.
      output: {all: '| tee -a /var/log/cloud-init-output.log'}
      EOF
      
      
  13. تكوين المبادلة:

    • لا تقم بإنشاء مساحة تبديل على قرص نظام التشغيل.

      في السابق، تم استخدام عامل Azure Linux لتكوين مساحة التبديل تلقائيا باستخدام قرص المورد المحلي المرفق بالجهاز الظاهري بعد توفير الجهاز الظاهري على Azure. تتم معالجة هذا الإجراء الآن بواسطة cloud-init. يجب عدم استخدام عامل Linux لتنسيق قرص المورد لإنشاء ملف التبديل. تعديل المعلمات التالية بشكل /etc/waagent.conf مناسب:

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
    • إذا كنت تريد تحميل التبديل وتنسيقه وإنشائه، فيمكنك إما:

      • مرر هذه التعليمة البرمجية كتكوين cloud-init في كل مرة تقوم فيها بإنشاء جهاز ظاهري من خلال بيانات مخصصة. نوصي بهذا الأسلوب.

      • استخدم توجيها مخبوزا cloud-init في الصورة التي تقوم بهذه الخطوة في كل مرة يتم فيها إنشاء الجهاز الظاهري.

        sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
        sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
        #cloud-config
        # Generated by Azure cloud image build
        disk_setup:
          ephemeral0:
            table_type: mbr
            layout: [66, [33, 82]]
            overwrite: True
        fs_setup:
          - device: ephemeral0.1
            filesystem: ext4
          - device: ephemeral0.2
            filesystem: swap
        mounts:
          - ["ephemeral0.1", "/mnt/resource"]
          - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
        EOF
        
  14. إذا كنت تريد إلغاء تسجيل الاشتراك، فشغِّل الأمر التالي:

    sudo subscription-manager unregister
    
  15. إلغاء توفير الجهاز الظاهري وإعداده للتزويد على Azure:

    تنبيه

    إذا كنت تقوم بترحيل جهاز ظاهري معين ولا تريد إنشاء صورة معممة، فتخط خطوة إلغاء التوفير. يؤدي تشغيل الأمر waagent -force -deprovision+user إلى جعل الجهاز المصدر غير قابل للاستخدام. تهدف هذه الخطوة فقط إلى إنشاء صورة معممة.

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  16. حدد Action>Shut down في Hyper-V Manager. أصبح قرص Linux VHD جاهزاً الآن للتحميل إلى Azure.

RHEL 8+ باستخدام Hyper-V Manager

  1. في Hyper-V Manager، حدد الجهاز الظاهري.

  2. حدد Connect لفتح نافذة وحدة تحكم للجهاز الظاهري.

  3. تأكد من أن خدمة Network Manager تبدأ في وقت التمهيد:

    sudo systemctl enable NetworkManager.service
    
  4. تكوين واجهة الشبكة لبدء التشغيل تلقائيا واستخدام بروتوكول تكوين المضيف الديناميكي:

    sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
    

    إشعار

    عند استخدام الشبكات المسرعة، يجب تكوين الواجهة الاصطناعية التي تم إنشاؤها لتكون غير مدارة باستخدام قاعدة udev. يمنع NetworkManager هذا الإجراء من تعيين نفس IP إليه مثل الواجهة الأساسية.

    لتطبيقه:

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  5. تسجيل اشتراك Red Hat لتمكين تثبيت الحزم من مستودع RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  6. قم بتعديل خط تمهيد kernel في تكوين grub الخاص بك لتضمين المزيد من معلمات kernel ل Azure وتمكين وحدة التحكم التسلسلية.

  7. إزالة معلمات GRUB الحالية:

    sudo grub2-editenv - unset kernelopts
    
  8. قم بالتحرير /etc/default/grub في محرر نص، وأضف المعلمات التالية:

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

    يضمن هذا التعديل أيضا إرسال جميع رسائل وحدة التحكم إلى المنفذ التسلسلي الأول وتمكين التفاعل مع وحدة التحكم التسلسلية، والتي يمكن أن تساعد دعم Azure في تصحيح المشكلات. يقوم هذا التكوين أيضًا بإيقاف تشغيل اصطلاحات التسمية الجديدة لـ NIC.

  9. نوصي أيضا بإزالة المعلمات التالية:

    rhgb quiet crashkernel=auto
    

    الأحذية الرسومية والهادئة ليست مفيدة في بيئة سحابية حيث تريد إرسال جميع السجلات إلى المنفذ التسلسلي. يمكنك ترك crashkernel الخيار مكونا إذا كنت تريد ذلك. تقلل هذه المعلمة مقدار الذاكرة المتوفرة في الجهاز الظاهري بمقدار 128 ميغابايت أو أكثر، مما قد يكون مشكلة لأحجام الأجهزة الظاهرية الأصغر.

  10. بعد الانتهاء من التحرير /etc/default/grub، قم بتشغيل الأمر التالي لإعادة إنشاء تكوين grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    بالنسبة إلى جهاز ظاهري ممكن ل UEFI، قم بتشغيل الأمر التالي:

    sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    
  11. تأكد من تثبيت خادم SSH وتكوينه للبدء في وقت التمهيد، والذي عادةً ما يكون بالإعداد الافتراضي. عدِّل /etc/ssh/sshd_config لتضمين السطر التالي:

    ClientAliveInterval 180
    
  12. تثبيت عامل Azure Linux والأدوات cloud-initالمساعدة الضرورية الأخرى:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  13. تكوين cloud-init للتعامل مع التزويد:

    1. تكوين waagent ل cloud-init:

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
      

      إشعار

      إذا كنت تقوم بترحيل جهاز ظاهري معين ولا تريد إنشاء صورة معممة، فقم بتعيين Provisioning.Agent=disabled على /etc/waagent.conf التكوين.

    2. تكوين وحدات:

      sudo echo "Adding mounts and disk_setup to init stage"
      sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
      sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
      
    3. تكوين مصدر بيانات Azure:

      sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
      datasource_list: [ Azure ]
      datasource:
          Azure:
              apply_network_config: False
      EOF
      
    4. إذا تم تكوينه، فقم بإزالة ملف التبديل الموجود:

      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swapfile by defaul
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
    5. تكوين cloud-init التسجيل:

      sudo echo "Add console log file"
      sudo cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
      
      # This tells cloud-init to redirect its stdout and stderr to
      # 'tee -a /var/log/cloud-init-output.log' so the user can see output
      # there without needing to look on the console.
      output: {all: '| tee -a /var/log/cloud-init-output.log'}
      EOF
      
  14. تكوين المبادلة:

    • لا تقم بإنشاء مساحة تبديل على قرص نظام التشغيل.

      في السابق، تم استخدام عامل Azure Linux لتكوين مساحة التبديل تلقائيا باستخدام قرص المورد المحلي المرفق بالجهاز الظاهري بعد توفير الجهاز الظاهري على Azure. تتم معالجة هذا الإجراء الآن بواسطة cloud-init. يجب عدم استخدام عامل Linux لتنسيق قرص المورد لإنشاء ملف التبديل. تعديل المعلمات التالية بشكل /etc/waagent.conf مناسب:

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
      • مرر هذه التعليمة البرمجية كتكوين cloud-init في كل مرة تقوم فيها بإنشاء جهاز ظاهري من خلال بيانات مخصصة. نوصي بهذا الأسلوب.

      • استخدم توجيها مخبوزا cloud-init في الصورة التي تقوم بهذه الخطوة في كل مرة يتم فيها إنشاء الجهاز الظاهري.

        sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
        sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
        #cloud-config
        # Generated by Azure cloud image build
        disk_setup:
          ephemeral0:
            table_type: mbr
            layout: [66, [33, 82]]
            overwrite: True
        fs_setup:
          - device: ephemeral0.1
            filesystem: ext4
          - device: ephemeral0.2
            filesystem: swap
        mounts:
          - ["ephemeral0.1", "/mnt/resource"]
          - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
        EOF
        
  15. إذا كنت تريد إلغاء تسجيل الاشتراك، فشغِّل الأمر التالي:

    sudo subscription-manager unregister
    
  16. قم بتشغيل الأوامر التالية لإلغاء توفير الجهاز الظاهري وإعداده للتزويد على Azure:

    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo sudo rm -f /var/log/waagent.log
    sudo export HISTSIZE=0
    

    تنبيه

    إذا كنت تقوم بترحيل جهاز ظاهري معين ولا تريد إنشاء صورة معممة، فتخط خطوة إلغاء التوفير. يؤدي تشغيل الأمر waagent -force -deprovision+user إلى جعل الجهاز المصدر غير قابل للاستخدام. تهدف هذه الخطوة فقط إلى إنشاء صورة معممة.

  17. حدد Action>Shut down في Hyper-V Manager. أصبح قرص Linux VHD جاهزاً الآن للتحميل إلى Azure.

KVM

يوضح لك هذا القسم كيفية استخدام KVM لإعداد توزيع RHEL 6 أو RHEL 7 لتحميلها إلى Azure.

RHEL 6 تستخدم KVM

هام

في 30 نوفمبر 2020، وصلت RHEL 6 إلى نهاية مرحلة الصيانة. تليها مرحلة الصيانة مرحلة العمر الممتد. مع انتقال RHEL 6 من مراحل Full/Maintenance، نوصي بشدة بالترقية إلى RHEL 7 أو 8 أو 9. إذا كان يجب أن تبقى على RHEL 6، نوصي بإضافة الوظيفة الإضافية دعم دورة الحياة الموسعة RHEL.

  1. قم بتنزيل صورة KVM لـ RHEL 6 من موقع Red Hat على الويب.

  2. عيّن كلمة مرور جذر.

    أنشئ كلمة مرور مشفرة، وانسخ إخراج الأمر:

    sudo openssl passwd -1 changeme
    

    عيّن كلمة مرور جذر مع guestfish:

    sudo guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    تغيير الحقل الثاني من المستخدم الجذر من !! إلى كلمة المرور المشفرة.

  3. إنشاء جهاز ظاهري في KVM من صورة qcow2. قم بتعيين نوع القرص إلى qcow2، وقم بتعيين طراز جهاز واجهة الشبكة الظاهرية إلى virtio. ثم ابدأ تشغيل الجهاز الظاهري وسجل الدخول كجذر.

  4. أنشئ الملف /etc/sysconfig/network أو حرره، ثم أضف النص التالي:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. أنشئ الملف /etc/sysconfig/network-scripts/ifcfg-eth0 أو حرره، ثم أضف النص التالي:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. انقل (أو أزل) قواعد udev لتجنب إنشاء قواعد ثابتة لواجهة Ethernet. تتسبب هذه القواعد في حدوث مشاكل عند استنساخ جهاز ظاهري في Azure أو Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

    إشعار

    عند استخدام الشبكات المسرعة، يجب تكوين الواجهة الاصطناعية التي تم إنشاؤها لتكون غير مدارة باستخدام قاعدة udev. يمنع NetworkManager هذا الإجراء من تعيين نفس IP إليه مثل الواجهة الأساسية.

    لتطبيقه:

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparently bonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  7. تأكد من أن خدمة الشبكة تبدأ في وقت التمهيد:

    sudo chkconfig network on
    
  8. تسجيل اشتراك Red Hat لتمكين تثبيت الحزم من مستودع RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  9. تعديل خط تمهيد kernel في تكوين grub الخاص بك لتضمين المزيد من معلمات kernel ل Azure. للقيام بهذا التكوين، افتح /boot/grub/menu.lst في محرر نص. تأكد من أن النواة الافتراضية تتضمن المعلمات التالية:

    console=ttyS0 earlyprintk=ttyS0
    

    تضمن هذه الخطوة أيضا إرسال جميع رسائل وحدة التحكم إلى المنفذ التسلسلي الأول، والذي يمكن أن يساعد دعم Azure في تصحيح المشكلات.

    نوصي أيضا بإزالة المعلمات التالية:

    rhgb quiet crashkernel=auto
    

    الأحذية الرسومية والهادئة ليست مفيدة في بيئة سحابية حيث تريد إرسال جميع السجلات إلى المنفذ التسلسلي. يمكنك ترك crashkernel الخيار مكونا إذا كنت تريد ذلك. تقلل هذه المعلمة مقدار الذاكرة المتوفرة في الجهاز الظاهري بمقدار 128 ميغابايت أو أكثر، مما قد يكون مشكلة لأحجام الأجهزة الظاهرية الأصغر.

  10. إضافة وحدات Hyper-V إلى initramfs:

    حرر /etc/dracut.conf، وأضف المحتوى التالي:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    إعادة بناء initramfs:

    sudo dracut -f -v
    
  11. إلغاء التثبيت cloud-init:

    sudo yum remove cloud-init
    
  12. تأكد من تثبيت خادم SSH وتكوينه للبدء في وقت التمهيد:

    sudo chkconfig sshd on
    

    قم بتعديل /etc/ssh/sshd_config لتضمين الأسطر التالية:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. تم دفع حزمة WALinuxAgent، WALinuxAgent-<version>، إلى مستودع إضافات Red Hat. تمكين مستودع الإضافات:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  14. تثبيت عامل Azure Linux:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  15. يمكن لعامل Azure Linux تكوين مساحة التبديل تلقائيا باستخدام قرص المورد المحلي المرفق بالجهاز الظاهري بعد توفير الجهاز الظاهري على Azure. قرص المورد المحلي هو قرص مؤقت، وقد يتم إفراغه إذا تم إلغاء توفير الجهاز الظاهري. بعد تثبيت عامل Azure Linux في الخطوة السابقة، قم بتعديل المعلمات /etc/waagent.conf التالية بشكل مناسب:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  16. إلغاء تسجيل الاشتراك (إذا لزم الأمر):

    sudo subscription-manager unregister
    
  17. قم بتشغيل الأوامر التالية لإلغاء توفير الجهاز الظاهري وإعداده للتزويد على Azure.

    إشعار

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

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  18. إيقاف تشغيل الجهاز الظاهري في KVM.

  19. قم بتحويل صورة qcow2 إلى تنسيق VHD.

    إشعار

    هناك خطأ معروف في إصدارات >qemu-img =2.2.1 ينتج عنه VHD منسق بشكل غير صحيح. تم إصلاح المشكلة في QEMU 2.6. نوصي باستخدام qemu-img 2.2.0 أو أقل، أو التحديث إلى 2.6 أو أعلى. لمزيد من المعلومات، راجع موقع الويب هذا.

    قم أولاً بتحويل الصورة إلى تنسيق أولي:

    sudo qemu-img convert -f qcow2 -O raw rhel-6.9.qcow2 rhel-6.9.raw
    

    تأكد من محاذاة حجم الصورة الأولية مع 1 ميغابايت. وإلا، فقم بتقريب الحجم لمحاذاة 1 ميغابايت:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    تحويل القرص الخام إلى قرص ثابت الحجم VHD:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    أو، مع qemu الإصدار 2.6+، قم بتضمين force_size الخيار:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
    

RHEL 7 تستخدم KVM

  1. قم بتنزيل صورة KVM لـ RHEL 7 من موقع Red Hat على الويب. يستخدم هذا الإجراء RHEL 7 كمثال.

  2. عيّن كلمة مرور جذر.

    أنشئ كلمة مرور مشفرة، وانسخ إخراج الأمر:

    sudo openssl passwd -1 changeme
    

    عيّن كلمة مرور جذر مع guestfish:

    sudo  guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    تغيير الحقل الثاني من المستخدم الجذر من !! إلى كلمة المرور المشفرة.

  3. إنشاء جهاز ظاهري في KVM من صورة qcow2. قم بتعيين نوع القرص إلى qcow2، وقم بتعيين طراز جهاز واجهة الشبكة الظاهرية إلى virtio. ثم ابدأ تشغيل الجهاز الظاهري وسجل الدخول كجذر.

  4. أنشئ الملف /etc/sysconfig/network أو حرره، ثم أضف النص التالي:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. أنشئ الملف /etc/sysconfig/network-scripts/ifcfg-eth0 أو حرره، ثم أضف النص التالي:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    

    إشعار

    عند استخدام الشبكات المسرعة، يجب تكوين الواجهة الاصطناعية التي تم إنشاؤها لتكون غير مدارة باستخدام قاعدة udev. يمنع NetworkManager هذا الإجراء من تعيين نفس IP إليه مثل الواجهة الأساسية.

    لتطبيقه:

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  6. تأكد من أن خدمة الشبكة تبدأ في وقت التمهيد:

    sudo systemctl enable network
    
  7. تسجيل اشتراك Red Hat لتمكين تثبيت الحزم من مستودع RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  8. تعديل خط تمهيد kernel في تكوين grub الخاص بك لتضمين المزيد من معلمات kernel ل Azure. للقيام بهذا التكوين، افتح /etc/default/grub في محرر نص وقم بتحرير المعلمة GRUB_CMDLINE_LINUX . على سبيل المثال:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    يضمن هذا الأمر أيضًا إرسال جميع رسائل وحدة التحكم إلى المنفذ التسلسلي الأول، والذي يمكن أن يساعد دعم Azure في مشكلات تصحيح الأخطاء. يقوم الأمر أيضًا بإيقاف تشغيل اصطلاحات تسمية RHEL 7 الجديدة لبطاقات NIC. نوصي أيضا بإزالة المعلمات التالية:

    rhgb quiet crashkernel=auto
    

    الأحذية الرسومية والهادئة ليست مفيدة في بيئة سحابية حيث تريد إرسال جميع السجلات إلى المنفذ التسلسلي. يمكنك ترك crashkernel الخيار مكونا إذا كنت تريد ذلك. تقلل هذه المعلمة مقدار الذاكرة المتوفرة في الجهاز الظاهري بمقدار 128 ميغابايت أو أكثر، مما قد يكون مشكلة لأحجام الأجهزة الظاهرية الأصغر.

  9. بعد الانتهاء من التحرير /etc/default/grub، قم بتشغيل الأمر التالي لإعادة إنشاء تكوين grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  10. أضف وحدات Hyper-V إلى initramfs.

    قم بتعديل /etc/dracut.conf وأضف المحتوى:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    إعادة بناء initramfs:

    sudo dracut -f -v
    
  11. إلغاء التثبيت cloud-init:

    sudo yum remove cloud-init
    
  12. تأكد من تثبيت خادم SSH وتكوينه للبدء في وقت التمهيد:

    sudo systemctl enable sshd
    

    قم بتعديل /etc/ssh/sshd_config لتضمين الأسطر التالية:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. تم دفع حزمة WALinuxAgent، WALinuxAgent-<version>، إلى مستودع إضافات Red Hat. تمكين مستودع الإضافات:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  14. تثبيت عامل Azure Linux:

    sudo yum install WALinuxAgent
    

    waagent تمكين الخدمة:

    sudo systemctl enable waagent.service
    
  15. تثبيت cloud-init.

    اتبع الخطوات الواردة في "Prepare a RHEL 7 VM from Hyper-V Manager"، الخطوة 12، "Install cloud-init to handle the provisioning. "

  16. تكوين المبادلة:

    • لا تقم بإنشاء مساحة تبديل على قرص نظام التشغيل.
    • اتبع الخطوات الواردة في "Prepare a RHEL 7 VM from Hyper-V Manager"، الخطوة 13، "Swap configuration".
  17. إلغاء تسجيل الاشتراك (إذا لزم الأمر):

    sudo subscription-manager unregister
    
  18. إلغاء التوفير باتباع الخطوات الواردة في "إعداد RHEL 7 VM من Hyper-V Manager"، الخطوة 15، "Deprovision".

  19. إيقاف تشغيل الجهاز الظاهري في KVM.

  20. قم بتحويل صورة qcow2 إلى تنسيق VHD.

    إشعار

    هناك خطأ معروف في إصدارات >qemu-img =1.1.1 ينتج عنه VHD منسق بشكل غير صحيح. تم تصحيح المشكلة في QEMU 1.6. نوصي باستخدام qemu-img 1.1.0 أو أقل، أو التحديث إلى 1.6 أو أعلى. لمزيد من المعلومات، راجع موقع الويب هذا.

    قم أولاً بتحويل الصورة إلى تنسيق أولي:

    sudo qemu-img convert -f qcow2 -O raw rhel-7.4.qcow2 rhel-7.4.raw
    

    تأكد من محاذاة حجم الصورة الأولية مع 1 ميغابايت. وإلا، فقم بتقريب الحجم لمحاذاة 1 ميغابايت:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    تحويل القرص الخام إلى قرص ثابت الحجم VHD:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    أو، مع qemu الإصدار 1.6+، قم بتضمين force_size الخيار:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
    

VMware

يوضح لك هذا القسم كيفية إعداد توزيع RHEL 6 أو RHEL 7 من VMware.

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

يفترض هذا القسم أنك قمت بالفعل بتثبيت RHEL VM في VMware. للحصول على معلومات حول كيفية تثبيت نظام تشغيل في VMware، راجع دليل تثبيت نظام تشغيل VMware Guest.

  • عند تثبيت نظام التشغيل Linux، نوصيك باستخدام الأقسام القياسية بدلاً من LVM، والتي غالبًا ما تكون الخيار الافتراضي للعديد من عمليات التثبيت. يؤدي استخدام الأقسام إلى تجنب تعارض اسم LVM مع جهاز ظاهري مستنسخ، خاصة إذا كان قرص نظام التشغيل بحاجة إلى إرفاقه بجهاز ظاهري آخر لاستكشاف الأخطاء وإصلاحها. يمكن استخدام LVM أو RAID على أقراص البيانات إذا كنت تريد ذلك.
  • لا تقم بتكوين قسم تبديل على قرص نظام التشغيل. يمكنك تكوين عامل Linux لإنشاء ملف مبادلة على قرص المورد المؤقت. لمزيد من المعلومات، اقرأ الخطوات التالية.
  • عند إنشاء VHD، حدد تخزين القرص الظاهري كملف واحد.

RHEL 6 تستخدم VMware

هام

في 30 نوفمبر 2020، وصلت RHEL 6 إلى نهاية مرحلة الصيانة. تليها مرحلة الصيانة مرحلة العمر الممتد. مع انتقال RHEL 6 من مراحل الملء/الصيانة، نوصي بشدة بالترقية إلى RHEL 7 أو 8 أو 9. إذا كان يجب أن تبقى على RHEL 6، نوصي بإضافة الوظيفة الإضافية دعم دورة الحياة الموسعة RHEL.

  1. في RHEL 6، NetworkManager يمكن أن تتداخل مع عامل Azure Linux. إلغاء تثبيت هذه الحزمة:

    sudo rpm -e --nodeps NetworkManager
    
  2. أنشئ ملف باسم الشبكة في الدليل /etc/sysconfig/ الذي يحتوي على النص التالي:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  3. أنشئ الملف /etc/sysconfig/network-scripts/ifcfg-eth0 أو حرره، ثم أضف النص التالي:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  4. انقل (أو أزل) قواعد udev لتجنب إنشاء قواعد ثابتة لواجهة Ethernet. تتسبب هذه القواعد في حدوث مشاكل عند استنساخ جهاز ظاهري في Azure أو Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

    إشعار

    عند استخدام الشبكات المسرعة، يجب تكوين الواجهة الاصطناعية التي تم إنشاؤها لتكون غير مدارة باستخدام قاعدة udev. يمنع NetworkManager هذا الإجراء من تعيين نفس IP إليه مثل الواجهة الأساسية.

    لتطبيقه:

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparently bonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  5. تأكد من أن خدمة الشبكة تبدأ في وقت التمهيد:

    sudo chkconfig network on
    
  6. تسجيل اشتراك Red Hat لتمكين تثبيت الحزم من مستودع RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. تم دفع حزمة WALinuxAgent، WALinuxAgent-<version>، إلى مستودع إضافات Red Hat. تمكين مستودع الإضافات:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  8. تعديل خط تمهيد kernel في تكوين grub الخاص بك لتضمين المزيد من معلمات kernel ل Azure. للقيام بهذه الخطوة، افتح /etc/default/grub في محرر نص وقم بتحرير المعلمة GRUB_CMDLINE_LINUX . على سبيل المثال:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
    

    تضمن هذه الخطوة أيضا إرسال جميع رسائل وحدة التحكم إلى المنفذ التسلسلي الأول، والذي يمكن أن يساعد دعم Azure في تصحيح المشكلات. نوصي أيضا بإزالة المعلمات التالية:

    rhgb quiet crashkernel=auto
    

    الأحذية الرسومية والهادئة ليست مفيدة في بيئة سحابية حيث تريد إرسال جميع السجلات إلى المنفذ التسلسلي. يمكنك ترك crashkernel الخيار مكونا إذا كنت تريد ذلك. تقلل هذه المعلمة مقدار الذاكرة المتوفرة في الجهاز الظاهري بمقدار 128 ميغابايت أو أكثر، مما قد يكون مشكلة لأحجام الأجهزة الظاهرية الأصغر.

  9. إضافة وحدات Hyper-V إلى initramfs:

    حرر /etc/dracut.conf، وأضف المحتوى التالي:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    إعادة بناء initramfs:

    sudo dracut -f -v
    
  10. تأكد من تثبيت خادم SSH وتكوينه للبدء في وقت التمهيد، والذي عادةً ما يكون بالإعداد الافتراضي. عدِّل /etc/ssh/sshd_config لتضمين السطر التالي:

    ClientAliveInterval 180
    
  11. تثبيت عامل Azure Linux:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  12. لا تقم بإنشاء مساحة تبديل على قرص نظام التشغيل.

    يمكن لعامل Azure Linux تكوين مساحة التبديل تلقائيا باستخدام قرص المورد المحلي المرفق بالجهاز الظاهري بعد توفير الجهاز الظاهري على Azure. قرص المورد المحلي هو قرص مؤقت، وقد يتم إفراغه إذا تم إلغاء توفير الجهاز الظاهري. بعد تثبيت عامل Azure Linux في الخطوة السابقة، قم بتعديل المعلمات /etc/waagent.conf التالية بشكل مناسب:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  13. إلغاء تسجيل الاشتراك (إذا لزم الأمر):

    sudo subscription-manager unregister
    
  14. قم بتشغيل الأوامر التالية لإلغاء توفير الجهاز الظاهري وإعداده للتزويد على Azure:

    إشعار

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

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  15. إيقاف تشغيل الجهاز الظاهري، وتحويل ملف VMDK إلى ملف .vhd.

    إشعار

    هناك خطأ معروف في إصدارات >qemu-img =2.2.1 ينتج عنه VHD منسق بشكل غير صحيح. تم إصلاح المشكلة في QEMU 2.6. نوصي باستخدام qemu-img 2.2.0 أو أقل، أو التحديث إلى 2.6 أو أعلى. لمزيد من المعلومات، راجع موقع الويب هذا.

    قم أولاً بتحويل الصورة إلى تنسيق أولي:

    sudo qemu-img convert -f vmdk -O raw rhel-6.9.vmdk rhel-6.9.raw
    

    تأكد من محاذاة حجم الصورة الأولية مع 1 ميغابايت. وإلا، فقم بتقريب الحجم لمحاذاة 1 ميغابايت:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    تحويل القرص الخام إلى قرص ثابت الحجم VHD:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    أو، مع qemu الإصدار 2.6+، قم بتضمين force_size الخيار:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
    

RHEL 7 تستخدم VMware

  1. أنشئ الملف /etc/sysconfig/network أو حرره، ثم أضف النص التالي:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  2. أنشئ الملف /etc/sysconfig/network-scripts/ifcfg-eth0 أو حرره، ثم أضف النص التالي:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    

    إشعار

    عند استخدام الشبكات المسرعة، يجب تكوين الواجهة الاصطناعية التي تم إنشاؤها لتكون غير مدارة باستخدام قاعدة udev. يمنع NetworkManager هذا الإجراء من تعيين نفس IP إليه مثل الواجهة الأساسية.

    لتطبيقه:

    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  3. تأكد من أن خدمة الشبكة تبدأ في وقت التمهيد:

    sudo systemctl enable network
    
  4. تسجيل اشتراك Red Hat لتمكين تثبيت الحزم من مستودع RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  5. تعديل خط تمهيد kernel في تكوين grub الخاص بك لتضمين المزيد من معلمات kernel ل Azure. لإجراء هذا التعديل، افتح /etc/default/grub في محرر نص وقم بتحرير المعلمة GRUB_CMDLINE_LINUX . على سبيل المثال:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    يضمن هذا التكوين أيضًا إرسال جميع رسائل وحدة التحكم إلى المنفذ التسلسلي الأول، والذي يمكن أن يساعد دعم Azure في مشكلات تصحيح الأخطاء. ويقوم أيضًا بإيقاف تشغيل اصطلاحات تسمية RHEL 7 الجديدة لبطاقات NIC. بالإضافة إلى ذلك، نوصي بإزالة المعلمات التالية:

    rhgb quiet crashkernel=auto
    

    الأحذية الرسومية والهادئة ليست مفيدة في بيئة سحابية حيث تريد إرسال جميع السجلات إلى المنفذ التسلسلي. يمكنك ترك crashkernel الخيار مكونا إذا كنت تريد ذلك. تقلل هذه المعلمة مقدار الذاكرة المتوفرة في الجهاز الظاهري بمقدار 128 ميغابايت أو أكثر، مما قد يكون مشكلة لأحجام الأجهزة الظاهرية الأصغر.

  6. بعد الانتهاء من التحرير /etc/default/grub، قم بتشغيل الأمر التالي لإعادة إنشاء تكوين grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  7. إضافة وحدات Hyper-V إلى initramfs:

    حرر /etc/dracut.conf، وأضف المحتوى:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    إعادة بناء initramfs:

    sudo dracut -f -v
    
  8. تأكد من تثبيت خادم SSH وتكوينه للبدء في وقت التمهيد. عادةً ما يكون هذا الإعداد هو الإعداد الافتراضي. عدِّل /etc/ssh/sshd_config لتضمين السطر التالي:

    ClientAliveInterval 180
    
  9. تم دفع حزمة WALinuxAgent، WALinuxAgent-<version>، إلى مستودع إضافات Red Hat. تمكين مستودع الإضافات:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  10. تثبيت عامل Azure Linux:

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent.service
    
  11. تثبيت cloud-init :

    اتبع الخطوات الواردة في "Prepare a RHEL 7 VM from Hyper-V Manager"، الخطوة 12، "Install cloud-init to handle the provisioning. "

  12. تكوين المبادلة:

    • لا تقم بإنشاء مساحة تبديل على قرص نظام التشغيل.
    • اتبع الخطوات الواردة في "Prepare a RHEL 7 VM from Hyper-V Manager"، الخطوة 13، "Swap configuration".
  13. إذا كنت تريد إلغاء تسجيل الاشتراك، فشغِّل الأمر التالي:

    sudo subscription-manager unregister
    
  14. إلغاء التوفير باتباع الخطوات الواردة في "إعداد RHEL 7 VM من Hyper-V Manager"، الخطوة 15، "Deprovision".

  15. إيقاف تشغيل الجهاز الظاهري وتحويل ملف VMDK إلى تنسيق VHD.

    إشعار

    هناك خطأ معروف في إصدارات >qemu-img =2.2.1 ينتج عنه VHD منسق بشكل غير صحيح. تم إصلاح المشكلة في QEMU 2.6. نوصي باستخدام qemu-img 2.2.0 أو أقل، أو التحديث إلى 2.6 أو أعلى. لمزيد من المعلومات، راجع موقع الويب هذا.

    قم أولاً بتحويل الصورة إلى تنسيق أولي:

    sudo qemu-img convert -f vmdk -O raw rhel-7.4.vmdk rhel-7.4.raw
    

    تأكد من محاذاة حجم الصورة الأولية مع 1 ميغابايت. وإلا، فقم بتقريب الحجم لمحاذاة 1 ميغابايت:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    تحويل القرص الخام إلى قرص ثابت الحجم VHD:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    أو، مع qemu الإصدار 2.6+، قم بتضمين force_size الخيار:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
    

ملف بدء التشغيل

يوضح لك هذا القسم كيفية إعداد توزيعة RHEL 7 من ISO باستخدام ملف بدء التشغيل.

RHEL 7 من ملف بدء التشغيل

  1. إنشاء ملف بدء التشغيل الذي يتضمن المحتوى التالي وحفظ الملف. للحصول على معلومات حول تثبيت بدء التشغيل، راجع دليل تثبيت بدء التشغيل.

    # Kickstart for provisioning a RHEL 7 Azure VM
    
    # System authorization information
      auth --enableshadow --passalgo=sha512
    
    # Use graphical install
    text
    
    # Don't run the Setup Agent on first boot
    firstboot --disable
    
    # Keyboard layouts
    keyboard --vckeymap=us --xlayouts='us'
    
    # System language
    lang en_US.UTF-8
    
    # Network information
    network  --bootproto=dhcp
    
    # Root password
    rootpw --plaintext "to_be_disabled"
    
    # System services
    services --enabled="sshd,waagent,NetworkManager"
    
    # System timezone
    timezone Etc/UTC --isUtc --ntpservers 0.rhel.pool.ntp.org,1.rhel.pool.ntp.org,2.rhel.pool.ntp.org,3.rhel.pool.ntp.org
    
    # Partition clearing information
    clearpart --all --initlabel
    
    # Clear the MBR
    zerombr
    
    # Disk partitioning information
    part /boot --fstype="xfs" --size=500
    part / --fstyp="xfs" --size=1 --grow --asprimary
    
    # System bootloader configuration
    bootloader --location=mbr
    
    # Firewall configuration
    firewall --disabled
    
    # Enable SELinux
    selinux --enforcing
    
    # Don't configure X
    skipx
    
    # Power down the machine after install
    poweroff
    
    %packages
    @base
    @console-internet
    chrony
    sudo
    parted
    -dracut-config-rescue
    
    %end
    
    %post --log=/var/log/anaconda/post-install.log
    
    #!/bin/bash
    
    # Register Red Hat Subscription
    subscription-manager register --username=XXX --password=XXX --auto-attach --force
    
    # Install latest repo update
    yum update -y
    
    # Enable extras repo
    subscription-manager repos --enable=rhel-7-server-extras-rpms
    
    # Install WALinuxAgent
    yum install -y WALinuxAgent
    
    # Unregister Red Hat subscription
    subscription-manager unregister
    
    # Enable waaagent at boot-up
    systemctl enable waagent
    
    # Install cloud-init
    yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    # Configure waagent for cloud-init
    sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    
    echo "Adding mounts and disk_setup to init stage"
    sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    # Disable the root account
    usermod root -p '!!'
    
    # Configure swap using cloud-init
    echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
    #cloud-config
    # Generated by Azure cloud image build
    disk_setup:
    ephemeral0:
        table_type: mbr
        layout: [66, [33, 82]]
        overwrite: True
    fs_setup:
    - device: ephemeral0.1
        filesystem: ext4
    - device: ephemeral0.2
        filesystem: swap
    mounts:
    - ["ephemeral0.1", "/mnt"]
    - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
    EOF
    
    # Set the cmdline
    sed -i 's/^\(GRUB_CMDLINE_LINUX\)=".*"$/\1="console=tty1 console=ttyS0 earlyprintk=ttyS0"/g' /etc/default/grub
    
    # Enable SSH keepalive
    sed -i 's/^#\(ClientAliveInterval\).*$/\1 180/g' /etc/ssh/sshd_config
    
    # Build the grub cfg
    grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # Configure network
    cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    EOF
    
    sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparentlybonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
    # Deprovision and prepare for Azure if you are creating a generalized image
    sudo cloud-init clean --logs --seed
    sudo rm -rf /var/lib/cloud/
    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    
    sudo waagent -force -deprovision+user
    rm -f ~/.bash_history
    export HISTSIZE=0
    
    %end
    
  2. ضع ملف بدء التشغيل، حيث يمكن لنظام التثبيت الوصول إليه.

  3. في Hyper-V Manager، قم بإنشاء جهاز ظاهري جديد. في صفحة الاتصال بالقرص الثابت الظاهري، حدد إرفاق قرص ثابت ظاهري لاحقا، وأكمل معالج الجهاز الظاهري الجديد.

  4. افتح إعدادات الجهاز الظاهري:

    1. إرفاق VHD جديد بالجهاز الظاهري. تأكد من تحديد تنسيق VHD والحجم الثابت.

    2. أرفق معيار ISO للتثبيت بمحرك أقراص DVD.

    3. عيّن BIOS للتمهيد من القرص المضغوط.

  5. تشغيل الجهاز الظاهري. عند ظهور دليل التثبيت، حدد المفتاح Tab لتكوين خيارات التمهيد.

  6. أدخل inst.ks=<the location of the kickstart file> في نهاية خيارات التمهيد، وحدد مفتاح الإدخال Enter .

  7. انتظر حتى ينتهي التثبيت. عند الانتهاء، يتم إيقاف تشغيل الجهاز الظاهري تلقائيا. أصبح قرص Linux VHD جاهزاً الآن للتحميل إلى Azure.

المشكلات المعروفة

المشكلة التالية معروفة.

تعذر تضمين برنامج تشغيل Hyper-V في قرص ذاكرة الوصول العشوائي الأولي عند استخدام برنامج تشغيل hypervisor غير Hyper-V

في بعض الحالات، قد لا تتضمن مثبتات Linux برامج تشغيل Hyper-V في قرص ذاكرة الوصول العشوائي الأولي (initrd أو initramfs) ما لم يكتشف Linux أنه يعمل في بيئة Hyper-V.

عند استخدام نظام ظاهرية مختلف (على سبيل المثال، VirtualBox أو Xen) لإعداد صورة Linux، قد تحتاج إلى إعادة إنشاء initrd للتأكد من توفر الوحدات النمطية وkernel hv_storvsc على الأقل hv_vmbus على قرص ذاكرة الوصول العشوائي الأولي. هذه المشكلة معروفة، على الأقل على الأنظمة التي تستند إلى توزيع Red Hat المصدر.

لحل هذه المشكلة، قم بإضافة وحدات Hyper-V إلى initramfs وإعادة إنشائها:

حرر /etc/dracut.conf، وأضف المحتوى التالي:

add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "

إعادة بناء initramfs:

sudo dracut -f -v

لمزيد من المعلومات، راجع إعادة إنشاء initramfs.