معلومات للتوزيعات المدعومة من المجتمع المحلي وغير المعتمدة

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

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

جميع التوزيعات الأخرى، غير Azure Marketplace، التي تعمل على Azure لديها عدد من المتطلبات الأساسية. لا يمكن أن تشمل هذه المقالة كافة التوزيعات؛ نظراً لأن كل توزيع مختلف عن الآخر. حتى إذا استوفيت جميع المعايير التالية، فقد تحتاج إلى تعديل نظام Linux بشكل كبير حتى يعمل بشكل صحيح.

تركز هذه المقالة على الإرشادات العامة لتشغيل توزيع Linux على Azure.

ملاحظات عامة لتثبيت Linux

  1. تنسيق القرص الثابت الظاهري Hyper-V (VHDX) غير مدعوم في Azure، فقط VHD ثابت. يمكنك تحويل القرص إلى تنسيق VHD باستخدام Hyper-V Manager أو cmdlet Convert-VHD. إذا كنت تستخدم VirtualBox، فحدد الحجم الثابت بدلاً من الحجم الافتراضي (المخصص ديناميكياً) عند إنشاء القرص.

  2. يدعم Azure الأجهزة الظاهرية من الجيل 1 (تمهيد BIOS) والجيل 2 (تمهيد UEFI).

  3. الحد الأقصى للحجم المسموح به لـ VHD هو 1,023 جيجابايت.

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

  5. يعد دعم Kernel لتركيب أنظمة ملفات UDF ضرورياً. عند التمهيد الأول على Azure، يتم تمرير تكوين التوفير إلى جهاز Linux الظاهري باستخدام وسائط بتنسيق UDF متصلة بالضيف. يجب على عامل Azure Linux تحميل نظام ملفات UDF لقراءة تكوينه وتوفير الجهاز الظاهري.

  6. لا تدعم إصدارات Linux kernel الأقدم من 2.6.37 NUMA على Hyper-V بأحجام VM أكبر. تؤثر هذه المشكلة بشكل أساسي في التوزيعات القديمة التي تستخدم المصدر Red Hat 2.6.32 kernel، وتم إصلاحها في Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504). يجب على الأنظمة التي تقوم بتشغيل kernel مخصصة أقدم من 2.6.37 أو kernel تستند إلى RHEL أقدم من 2.6.32-504 تعيين معلمة التمهيد numa=off على سطر أوامر kernel في grub.conf. لمزيد من المعلومات، راجع Red Hat KB 436883.

  7. لا تقم بتكوين قسم مبادلة على قرص نظام التشغيل. يمكن تكوين عامل Linux لإنشاء ملف الذاكرة الظاهرية على قرص المورد المؤقت، كما هو موضح في الخطوات التالية.

  8. يجب أن يكون لكافة أقراص VHD على Azure حجم ظاهري تمت محاذاته إلى 1 ميجابايت (1024 × 1024 بايت). عند التحويل من قرص أولي إلى VHD، يجب التأكد من أن حجم القرص الأولي من مضاعفات 1 ميجابايت قبل التحويل، كما هو موضح في الخطوات التالية.

  9. قم باستخدام أحدث إصدار توزيع وحزم وبرامج.

  10. قم بإزالة المستخدمين وحسابات النظام والمفاتيح العامة والبيانات الحساسة والبرامج والتطبيقات غير الضرورية.

تثبيت وحدات kernel النمطية دون Hyper-V

يعمل Azure على مراقب الأجهزة الظاهرية Hyper-V؛ لذلك يتطلب Linux تشغيل وحدات kernel نمطية معينة في Azure. إذا كان لديك جهاز ظاهري تم إنشاؤه خارج Hyper-V، فقد لا تتضمن مثبتات Linux برامج تشغيل Hyper-V في ramdisk الأولي (initrd أو initramfs)، ما لم يكتشف الجهاز الظاهري أنه يعمل على بيئة Hyper-V. عند استخدام نظام ظاهري مختلف (مثل VirtualBox وKVM وما إلى ذلك) لإعداد صورة Linux الخاصة بك، قد تحتاج إلى إعادة إنشاء initrd بحيث تتوفر على الأقل وحدات kernel النمطية hv_vmbus وhv_storvsc على ramdisk الأولي. هذه المشكلة المعروفة خاصة بالأنظمة القائمة على توزيع Red Hat المصدر، وربما أنظمة أخرى.

قد تختلف آلية إعادة بناء صورة initrd أو initramfs اعتماداً على التوزيع. راجع وثائق التوزيع أو الدعم للإجراء المناسب. فيما يلي مثال لإعادة بناء initrd باستخدام الأداة المساعدة mkinitrd:

  1. قم بعمل نسخة احتياطية من صورة initrd الموجودة:

    cd /boot
    sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
    
  2. إعادة بناء initrd مع hv_vmbus وhv_storvsc وحدات kernel:

    sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
    

تغيير حجم VHDs

يجب أن يكون لصور VHD على Azure حجم ظاهري يحاذي 1 ميجابايت. عادة ما تتم محاذاة VHDs التي تم إنشاؤها باستخدام Hyper-V بشكل صحيح. إذا لم تتم محاذاة VHD بشكل صحيح، فقد تتلقى رسالة خطأ مشابهة لما يلي عند محاولة إنشاء صورة من VHD.

The VHD http:\//\<mystorageaccount>.blob.core.windows.net/vhds/MyLinuxVM.vhd has an unsupported virtual size of 21475270656 bytes. The size must be a whole number (in MBs).

في هذه الحالة، قم بتغيير حجم الجهاز الظاهري باستخدام إما وحدة تحكم إدارة Hyper-V أو Resize-VHD PowerShell cmdlet. إذا لم تكن تعمل في بيئة Windows، فإننا نوصي باستخدام qemu-img لتحويل VHD (إذا لزم الأمر) وتغيير حجمه.

ملاحظة

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

  1. تغيير حجم VHD مباشرة باستخدام أدوات مثل qemu-img أو vbox-manage قد يؤدي إلى VHD غير قابل للتمهيد. نوصي أولاً بتحويل VHD إلى صورة قرص RAW. إذا تم إنشاء صورة الجهاز الظاهري كصورة قرص RAW (الوضع الافتراضي لبعض برامج مراقبة الأجهزة الظاهرية مثل KVM)، فيمكنك تخطي هذه الخطوة.

    qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
    
  2. احسب الحجم المطلوب لصورة القرص بحيث تتم محاذاة الحجم الظاهري إلى 1 ميجابايت. يستخدم البرنامج النصي bash shell التالي qemu-img info لتحديد الحجم الظاهري لصورة القرص، ثم يقوم بحساب الحجم إلى 1 ميجابايت التالية.

    rawdisk="MyLinuxVM.raw"
    vhddisk="MyLinuxVM.vhd"
    
    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "$rawdisk" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    
    rounded_size=$(((($size+$MB-1)/$MB)*$MB))
    
    echo "Rounded Size = $rounded_size"
    
  3. تغيير حجم القرص الأولي باستخدام $rounded_size كما هو محدد أعلاه.

    qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. الآن، قم بتحويل قرص RAW مرة أخرى إلى VHD ثابت الحجم.

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

    أو، مع إصدارات qemu قبل 2.6، قم بإزالة force_size الخيار.

    qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

متطلبات Linux Kernel

تُساهم برامج تشغيل Linux Integration Services (LIS) لـ Hyper-V وAzure مباشرة في Linux kernel المصدر. يحتوي العديد من التوزيعات التي تتضمن إصداراً حديثاً من Linux kernel (مثل 3.x) على برامج التشغيل هذه المتوفرة بالفعل، أو توفر إصدارات الحمل العكسي من برامج التشغيل هذه مع نواتها. يتم تحديث برامج التشغيل هذه باستمرار في kernel المصدر بإصلاحات وميزات جديدة؛ لذلك نوصي بتشغيل توزيع معتمد يتضمن هذه الإصلاحات والتحديثات عند الإمكان.

إذا كنت تستخدم إصدارات مختلفة من Red Hat Enterprise Linux من 6.0 إلى 6.3، فستحتاج إلى تثبيت أحدث برامج تشغيل LIS لـ Hyper-V. بداية من RHEL 6.4+ (ومشتقاته)، يتم تضمين برامج تشغيل LIS بالفعل مع kernel، ومن ثَمَّ لا توجد حاجة إلى حزم تثبيت إضافية.

إذا كانت هناك حاجة إلى kernel مخصصة، فإننا نوصي بإصدار kernel حديث (مثل 3.8+). بالنسبة إلى التوزيعات أو البائعين الذين يحتفظون بـ kernel الخاصة بهم، ستحتاج إلى إجراء حمل عكسي لبرامج تشغيل LIS بانتظام من kernel المصدر إلى kernel المخصصة الخاصة بك. حتى إذا كنت تقوم بتشغيل إصدار kernel حديث نسبياً، فإننا نوصي بشدة بتتبع أي إصلاحات في المصدر في برامج تشغيل LIS وإجراء حمل عكسي حسب الحاجة. يتم تحديد مواقع ملفات مصدر برنامج تشغيل LIS في ملف MAINTAINERS في شجرة مصدر Linux kernel:

    F:    arch/x86/include/asm/mshyperv.h
    F:    arch/x86/include/uapi/asm/hyperv.h
    F:    arch/x86/kernel/cpu/mshyperv.c
    F:    drivers/hid/hid-hyperv.c
    F:    drivers/hv/
    F:    drivers/input/serio/hyperv-keyboard.c
    F:    drivers/net/hyperv/
    F:    drivers/scsi/storvsc_drv.c
    F:    drivers/video/fbdev/hyperv_fb.c
    F:    include/linux/hyperv.h
    F:    tools/hv/

يجب تضمين التصحيحات التالية في kernel. لا يمكن أن تكون هذه القائمة كاملة لجميع التوزيعات.

⁧⁩Azure Linux Agent⁧⁩

يوفر Azure Linux Agentwaagent جهازاً ظاهرياً لنظام التشغيل Linux في Azure. يمكنك الحصول على أحدث إصدار، أو مشكلات الملفات، أو إرسال طلبات السحب في مستودع Linux Agent GitHub.

  • يتم إصدار عامل Linux بموجب ترخيص Apache 2.0. يوفر العديد من التوزيعات حزم RPM أو .deb للعامل، ويمكن بسهولة تثبيت هذه الحزم وتحديثها.
  • Azure Linux Agent يتطلب Python v2.6+.
  • يتطلب العامل أيضاً وحدة python-pyasn1 النمطية. توفر معظم التوزيعات هذه الوحدة النمطية كحزمة منفصلة ليتم تثبيتها.
  • في بعض الحالات، لا يكون Azure Linux Agent متوافقاً مع NetworkManager. يقوم العديد من حزم RPM/deb التي توفرها التوزيعات بتكوين NetworkManager كتعارض مع حزمة waagent. في هذه الحالات، سيتم إلغاء تثبيت NetworkManager عند تثبيت حزمة عامل Linux.
  • يجب أن يكون Azure Linux Agent عند الحد الأدنى للإصدار المدعوم أو أعلى.

ملاحظة

تأكد من تمكين الوحدات النمطية 'udf' (cloud-init >= 21.2) و'vfat'. سيؤدي إدراج الوحدة النمطية udf في قائمة الحظر إلى فشل التوفير، وسيؤدي إدراج الوحدة النمطية vfat في قائمة الحظر إلى فشل كل من التوفير والتمهيد. لا تتأثر Cloud-init < 21.2 ولا تتطلب هذا التغيير.

متطلبات نظام Linux العامة

  1. قم بتعديل سطر تمهيد kernel في GRUB أو GRUB2 لتضمين المعلمات التالية، بحيث يتم إرسال كافة رسائل وحدة التحكم إلى المنفذ التسلسلي الأول. يمكن أن تساعد هذه الرسائل دعم Azure في تصحيح أي مشكلات.

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

    نوصي أيضاً بإزالة المعلمات التالية إن وُجدت.

    rhgb quiet crashkernel=auto
    

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

  2. بعد الانتهاء من التحرير/وما إلي ذلك/الافتراضي/اليرقة، قم بتشغيل الأمر التالي لإعادة بناء تكوين اليرقة:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. أضف وحدات Hyper-V على حد سواء تعليمات initrd و initramfs (Dracut).

  4. إعادة بناء initrd أو initramfs Initramfs

    cp /boot/initramfs-$(uname -r).img /boot/initramfs-[latest kernel version ].img.bak 
    dracut -f -v /boot/initramfs-[latest kernel version ].img  [depending on the version of grub] 
    grub-mkconfig -o /boot/grub/grub.cfg 
    grub2-mkconfig -o /boot/grub2/grub.cfg 
    

    مخطط Initrd

    mv /boot/[initrd kernel] /boot/[initrd kernel]-old 
    mkinitrd /boot/initrd.img-[initrd kernel]-generic /boot/[initrd kernel]-generic-old 
    update-initramfs -c -k [initrd kernel] 
    update-grub 
    
  5. تأكد من تثبيت خادم SSH وتكوينه لبدء وقت التمهيد. هذا التكوين هو عادة الافتراضي.

  6. قم بتثبيت Azure Linux Agent. Azure Linux Agent مطلوب لتوفير صورة Linux على Azure. يوفر العديد من التوزيعات العامل كحزمة RPM أو .deb (تسمى الحزمة عادة WALinuxAgent أو walinuxagent). يمكن أيضاً تثبيت العامل يدوياً باتباع الخطوات الواردة في دليل Linux Agent.

    قم بتثبيت عامل Azure Linux وcloud-init بواسطة السحابة والأدوات المساعدة الضرورية الأخرى عن طريق تشغيل الأمر التالي:

    نظام تشغيل Redhat/Centos

    sudo yum install -y [waagent] cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Ubuntu/Debian

    sudo apt install walinuxagent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    شركة Suse

    sudo zypper install python-azure-agent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    ثم قم بتمكين العامل والمدخل السحابي في جميع التوزيعات باستخدام:

    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  7. لا تنشئ مساحة مبادلة على قرص نظام التشغيل. يمكن لـ Azure Linux Agent تكوين مساحة المبادلة تلقائياً باستخدام قرص المورد المحلي المرفق بالجهاز الظاهري بعد التوفير على Azure. قرص المورد المحلي هو قرص مؤقت، وقد يتم إفراغه عند إلغاء توفير الجهاز الظاهري. بعد تثبيت Azure Linux Agent، قم بتعديل المعلمات التالية في/إلخ/waagent.conf حسب الحاجة.

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: Set this to your desired size.
    
  8. تكوين cloud-init للتعامل مع التزويد:

    1. تكوين waagent لـ 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
      
      إذا كنت تقوم بترحيل آلة افتراضية معينة ولا ترغب في إنشاء صورة عامة، ضبط Provisioning.Agent=disabled في التكوين /etc/waagent.conf.
    2. تكوين وحدات:
      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
      
    3. تكوين مصدر بيانات Azure:
      echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      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
      
  9. تكوين تسجيل cloud-init:

    echo "Add console log file"
    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
    
  10. كون المبادلة. لا تقم بإنشاء مساحة مبادلة على قرص نظام التشغيل. في السابق، قام عامل Azure Linux بتكوين مساحة المبادلة تلقائيًا باستخدام قرص الموارد المحلي المتصل بالآلة الافتراضية بعد توفير الجهاز الافتراضي على Azure. ومع ذلك، يتم التعامل مع هذا الآن بواسطة cloud-init، يجب ألا تستخدم عامل Linux لتنسيق قرص الموارد إنشاء ملف المبادلة، وتعديل المعلمات التالية في/إلخ/waagent.conf بشكل مناسب:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    

    إذا كنت ترغب في التركيب والتنسيق وإنشاء المقايضة، فيمكنك أيضًا: 1. قم بتمرير هذا كتكوين داخلي سحابي في كل مرة تقوم فيها بإنشاء VM من خلال customdata. هذا هو الأسلوب الموصى بها. 2. استخدم توجيهًا داخليًا للسحابة موجودًا في الصورة والذي سيفعل ذلك في كل مرة يتم فيها إنشاء VM.

           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.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
           EOF
    
         ```
    
    
  11. إلغاء توفير الوصول.

    تنبيه

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

    قم بتشغيل الأوامر التالية لإلغاء توفير الجهاز الظاهري.

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

    ملاحظة

    في Virtualbox، قد ترى الخطأ التالي بعد تشغيل waagent -force -deprovision الذي يشير إلى [Errno 5] Input/output error. رسالة الخطأ هذه ليست حرجة ويمكن تجاهلها.

  12. قم بإيقاف تشغيل الجهاز الظاهري وقم بتحميل VHD إلى Azure.

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

قم بإنشاء Linux VM من قرص مخصص باستخدام Azure CLI .