الأنسيبل وفنون ما قبل الحاوية

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

بعبارة أخرى، كانت صور ISO هي السلائف لصور الحاويات. حتى عند عدم تشغيل أي حاويات، كان مدير ذاكرة ويندوز يسلمه أكبر قدر ممكن من الذاكرة مما أدى إلى إبطاء أي شيء كنت مشغولاً به. لذلك حظرتُ عميل Windows Docker من جهازي.

أرجوك لا تفهمني خطأ. أنا لا أكره Docker – فقط عميل ويندوز الخاص به.

أجبرتني هذه الخطوة على العودة إلى الوراء. بدأت تشغيل الأجهزة الافتراضية مباشرةً على Hyper-V، برنامج Windows Hypervisor. ثم أصبح تشكيل مجموعات كوبرنيتسعلى ويندوز هواية سعيدة بالنسبة لي كما يمكن أن نرى من مشاركاتي السابقة المنشورة هنا في DZone

صانع الأحذية، لماذا تذهب حافي القدمين؟

بعد اتباع نفس نقرات الماوس لإنشاء أجهزة افتراضية على Hyper-V Manager لساعات عديدة، أدركت أنني مثل صانع الأحذية الذي يذهب حافي القدمين: أنا أقوم بـ إنشاء خط أنابيب DevOps مقابل أجر بالساعة، ولكن أضيع الوقت في نقرات الفأرة؟

تم قبول التحدي. لقد قرأت أنه من الممكن إنشاء أجهزة افتراضية باستخدام PowerShell. لم يستغرق الأمر أسبوعًا للحصول على برنامج نصي ينشئ جهازًا افتراضيًا جديدًا كما يمكن رؤيته هنا. يمكن للبرنامج النصي الشقيق بدء تشغيل آلة افتراضية تم إيقاف تشغيلها.

فن قديم أعيد اكتشافه

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

لحسن الحظ، وجدتُ دليلًا ممتازًا عن كيفية القيام بذلك. تتألف العملية من ثلاث خطوات:

  1. تفكيك صورة تمهيد Ubuntu ISO.
  2. تلاعب بالمحتوى:
      إزالة سجل التمهيد الرئيسي (MBR).
      >تحديد ما يقوم به المستخدمون عادةً على واجهة المستخدم الرسومية وتخصيص ما يتم تثبيته وتشغيله أثناء التثبيت. يتم ذلك باستخدام مجموعة فرعية من لغة Cloud-init الخاصة بـ Ubuntu. انظر هنا للاطلاع على الإرشادات التي قمت بإنشائها.
      تعليمات محمل الإقلاع (Grub، في هذه الحالة) حيث يجد تعليمات الإقلاع المخصصة وعدم انتظار إدخال المستخدم. هذا هو تهيئة Grub التي استقررت عليها.
  3. قم بتجميع كل ذلك باستخدام تطبيق يسمى Xorriso.

بالنسبة لسحرة هذه الحرفة القديمة، يعتبر زوريسو بمثابة عصاهم السحرية. يحتوي على صفحات من التوثيق في شيء يشبه كتاب التعاويذ. سيتعين علي أن ألوث يدي لأفهم الأمر بشكل كامل، لكن فهمي الحالي (والأرجح أنه خاطئ) هو أنه ينشئ أقسام التمهيد، ويحمل MBR المنسوخ، ويفعل شيئًا ما مع تعليمات تشبه تعليمات Cloud-init لإنشاء صورة ISO معدلة.

مسؤول عن اللمسات الأخيرة

على الرغم من أنني تمكنت بارتياح كبير من تشغيل Ubuntu22 من PowerShell دون أي مدخلات أخرى مني، فماذا عن المرة القادمة عندما تطرح Ubuntu إصدارًا جديدًا؟ يفرض DevOps الحقيقي توثيق العملية ليس في ASCII، بل في نص برمجي جاهز للتشغيل عند الحاجة. يُظهر Ansible تنوعه في أنني تمكنت من القيام بذلك في فترة ما بعد الظهر. يكمن السر في توجيه تعليمات لـ Ansible بأنه إجراء محلي. بعبارة أخرى، لا تستخدم SSH لاستهداف جهاز لتلقي التعليمات، ولكن وحدة تحكم Ansible هي أيضًا الطالب:

YAML

 

- hosts: localhost
  connection: local

تظهر المسرحية الكاملة بعد ذلك وتوفر عرضًا آخر لما تم شرحه أعلاه:

YAML

 

# stamp_images.yml

- hosts: localhost
  connection: local
  become: true
  vars_prompt:
    - name: "base_iso_location"
      prompt: "Enter the path to the base image"
      private: no
      default: /tmp/ubuntu-22.04.4-live-server-amd64.iso

  tasks:
    - name: Install 7Zip
      ansible.builtin.apt:
        name: p7zip-full
        state: present

    - name: Install Xorriso
      ansible.builtin.apt:
        name: xorriso
        state: present

    - name: Unpack ISO
      ansible.builtin.command: 
        cmd: "7z -y x {{ base_iso_location }} -o/tmp/source-files"

    - name: Copy boot partitions
      ansible.builtin.copy:
        src: /tmp/source-files/[BOOT]/
        dest: /tmp/BOOT
  
    - name: Delete working boot partitions
      ansible.builtin.file:
        path:  /tmp/source-files/[BOOT]
        state: absent
  
    - name: Copy files for Ubuntu Bare
      ansible.builtin.copy:
        src: bare/source-files/bare_ubuntu
        dest: /tmp/source-files/

    - name: Copy boot config for Ubuntu bare
      ansible.builtin.copy:
        src: bare/source-files/boot/grub/grub.cfg
        dest: /tmp/source-files/boot/grub/grub.cfg

    - name: Stamp bare image
      ansible.builtin.command: 
        cmd: xorriso -as mkisofs -r   -V 'Ubuntu 22.04 LTS AUTO (EFIBIOS)'   -o ../ubuntu-22.04-wormhole-autoinstall-bare_V5_1.iso   --grub2-mbr ../BOOT/1-Boot-NoEmul.img -partition_offset 16   --mbr-force-bootable   -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b ../BOOT/2-Boot-NoEmul.img   -appended_part_as_gpt   -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7   -c '/boot.catalog'   -b '/boot/grub/i386-pc/eltorito.img'     -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info   -eltorito-alt-boot   -e '--interval:appended_partition_2:::'   -no-emul-boot .
        chdir: /tmp/source-files

    - name: Copy files for Ubuntu Atomika
      ansible.builtin.copy:
        src: atomika/source-files/atomika_ubuntu
        dest: /tmp/source-files/

    - name: Copy boot config for Ubuntu Atomika
      ansible.builtin.copy:
        src: atomika/source-files/boot/grub/grub.cfg
        dest: /tmp/source-files/boot/grub/grub.cfg

    - name: Stamp Atomika image
      ansible.builtin.command:
        cmd: xorriso -as mkisofs -r   -V 'Ubuntu 22.04 LTS AUTO (EFIBIOS)'   -o ../ubuntu-22.04-wormhole-autoinstall-atomika_V5_1.iso   --grub2-mbr ../BOOT/1-Boot-NoEmul.img -partition_offset 16   --mbr-force-bootable -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b ../BOOT/2-Boot-NoEmul.img   -appended_part_as_gpt   -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7   -c '/boot.catalog'   -b '/boot/grub/i386-pc/eltorito.img'     -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info   -eltorito-alt-boot   -e '--interval:appended_partition_2:::'   -no-emul-boot .
        chdir: /tmp/source-files        

>لاحظ سحر أمر Xorriso المستخدم هنا لإعداد صورتين: واحدة مع دعم والأخرى بدون دعم لـ Kubernetes.

التحذير الوحيد هو أن يكون لديك جهاز مثبت عليه Ansible لتشغيل هذه المسرحية منه. يمكن تنزيل المخرجات من المسرحية أعلاه من من هنا وتثبيت نسخة حديثة جدًا من Ansible.

الخلاصة

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

أشرت إلى جزء من الكود، ولكن يمكن الاطلاع على المشروع كاملاً على GitHub.

Source:
https://dzone.com/articles/ansible-and-the-pre-container-arts