לפני שבייבינג הפך את העבודה של הכיוון של התמונות למין אומן, היה אומן להכין תמונות ISO מותאמות באופן מותאם של דיסקים. אחר כך התמונות האלה הושמות להתחיל מכונות וירטואליות. במילים אחרות, תמונות ISO היו קדמות לתמונות הקונטרים.
למעשה, היה לי כמה מגעים לא מוצלחים עם הלקוח הוינדואלי של דוקר. אפילו כשלא היו מופעלים כל קונטרים, מנהל הזיכרון של הוינדואל היה מעניק לו כל הזיכרון האפשרי כך שהאשכבתי את כל מה שעבדתי. לכן הבטחתי את הלקוח הוינדואלי הזה מהמכונה שלי.
אל תרמזו עלי. איני שונא דוקר — רק את הלקוח הוינדואלי.
השלב הזה הכרח אותי לחזור אחורה בזמן. התחלתי להריץ מכונות וירטואליות ישירות על הייביירנינג של הוינדואל. אז קיבלתי עונג מאד בעיבוד קבצי קוברנטס על הוינדואל כפי שניתן לראות מהפוסטים שלי שפורסמו כאן בדזון.
עורקא, מדוע אתה הולך חסר נעליים?
אחרי שהלכתי בעקבות אותו העלצוץ ליצירת מכונות וירטואליים על מנהל ההייביירנינג של הוינדואל לשעות רבות, הבנתי שאני כמו עורקא שהולך חסר נעליים: אני בונה שרשרת בייביס עבור שעולה של שעתיים, אבל מבזבזת זמן בעלצוצי מauser?
אימץת האתגר: בדיקתי בדפדפן וקראתי שניתן ליצור מחשבות מדומה בעזרת PowerShell. לא לקח שבוע עד שקיבלתי סקripט שיוצק מחשב מדומה חדש. הסקripט האחר יכול להתחיל מחשב מדומה שכבה.
אומנות עתיקה מתגלת
זה היה נהדר, אבל הבנתי שעדיין הייתי צריך לבצע קליקים עם המושב בזמן ההתקנה של אובונטו. לאוטומציה של זה נראה שהיא עצם קשה יותר לפתרון. צריך לפרק את תמונת הISO, לעבד אותה בדרך מסויימת, ואחר כך לארוז אותה שוב בהזדמנות להשאיר במצב שלם כל אותם ההוראות שמדריך את המחשב להתחיל.
למרבה המזל, מצאתי הוראה מצוינתעל איך לעשות בדיוק את זה. התהליך מורכב משלושה שלבים:
- פרקת תמונת ההתחלה של אובונטו ISO.
- מעבדה את התוכן:
- הועבר את הרשימת הבית (MBR).
- אספק מה שמשתמשים בדרך כלל עושים במשך המסך המשתמש (GUI) והתאמן מה שמותקן ומופעל בזמן ההתקנה. זה נעשה באמצעות חלק משפת ה-Cloud-init של Ubuntu. ראו פה עבור ההוראות שניצרתי.
- אומר למערכת ההתחלה (Grub, במקרה זה) היכן למצוא את ההוראות המותאמות עבור ההתחלה ולא לחכות עבור קבלת ההשתתפות של המשתמש. הנה ה תצורת Grub שהחלטתי עליה.
- ארז את הכל בעזרת יישומה שנקרא Xorriso.
לקוסמים האלו של מלאכת הקשת העתיקה, Xorriso משמש כשרביט הקסם. יש לו דפי תיעוד במשהו שנראה כמו ספר קסומים. אני אצטרך להזדקק לידיים כדי להבין לחלוטין, אבל ההבנה הנוכחית שלי (וכנראה שגויה) היא שזה יוצר חלקיות אתחול, טוען את הMBR שהועתק, ועושה משהו עם ההוראות הדומות ל-Cloud-init כדי ליצור דמות ISO מותאמת.
Ansible למצבק הסופי
למרות שהיתה לי הרגשה של הספקת גמול כשהצלחתי להפעיל את Ubuntu22 מ-PowerShell בלי עוד קלט ממני, מה עם הפעם הבאה שאובונטו יוציא גירסה חדשה? ה-DevOps האמיתי מצהיר שיש לתעד את התהליך לא ב-ASCII, אלא בסקריפט שמוכן לריצה כשנדרש. Ansible מראה את גמישותו כשיכולתי לעשות בדיוק זאת במהלך הצהריים. הסוד הוא להורות ל-Ansible שזה פעולה מקומית. במילים אחרות, אל תשתמש ב-SSH כדי למטרת מכונה שתקבל הוראות, אלא המנהל ה-Ansible גם הוא הסטודנט:
- hosts: localhost
connection: local
המשחק המלא נתון בהמשך ומציע עוד תצוגה של מה שהוסבר למעלה:
# 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