מהו ואגרנט?
הושק לראשונה במרץ 2010 על ידי מיטש השיקמוטו מהאשיקורפ קורפ ושותפו ג'ון בנדר, ואגרנט היא כלי שורת פקודה פתוח המקשר לניהול מחזורי של מחשב וירטואלי (VM). הכלי מטרתו להגדיל את יצרנות הפיתוח על ידי הקמת התהליך הזה הרבה יותר פשוט. בעוד ואגרנט היה במקור קשור לאוראקל וירטואלבוקס, מאז גרסה 1.1, הוא כולל גם תמיכה ב-VMware, KVM ואחרים. עם זאת, כמה שהוירטואליזציה עוזרת בפיתוח אינטרנט, שימוש בואגרנט אינו תמיד אופציה מוצלחת.
למה להשתמש בואגרנט? האם זה שווה את זה?
קודם כל, ואגרנט מספק הרבה יותר גמישות עם סביבה מבוססת מעלית. זה מאפשר למפתחים לבנות סביבות הדרושות תכונות זמינות רק במערכות אחרות.
לדוגמה, אם הייתם צריכים לבנות יישום התומך במספר מערכות הפעלה וליבות, תוכלו בקלות ליצור מספר מחשבים וירטואליים שיכלו לבצע בדיקות באמצעות ואגרנט. באופן דומה, אם רציתם לשכפל את הסביבה של הלקוח (מערכת ההפעלה, משאבים וכו '), שילוב VM וואגרנט עשוי גם להיות מועיל במיוחד.
התקנת ואגרנט על עבודה
כדי להתחיל עם Vagrant, הורד את המתקדם או החבילה המתאימה מהדף הרשמי Vagrant Downloads page. ההוראות להלן מיועדות ל-Vagrant v2.3.3 (הגרסה העדכנית ביותר כפי שהיא בדצמבר 2022).
התקנת Vagrant ב-Windows
כדי להתקין Vagrant ב-Windows, קודם כל עליך להוריד את חבילת ה-MSI. לאחר מכן, אפשר פשוט להריץ את הקובץ ולעבור תהליך התקנה רגיל.
הערה: המתקדם יוסיף אוטומטית 'vagrant' למסלול המערכת שלך, כך שיופיע גם במסונים. אם Vagrant לא נמצא, עדיף להתחבר מחדש למערכת, שכן זהו קרוב נפוץ ב-Windows.
התקנת Vagrant ב-MacOS Catalina
בהנחה שכבר יש לך מנהל חבילות 'ברו' מותקן, כדי להגדיר במהירות Vagrant ב-Mac, אפשר לבצע את ההתקנה עם פקודת שורה אחת זו:
```bash
$> brew install vagrant
```
או שאפשר להתקין את Vagrant מבינאריים.
התקנת Vagrant ב-Linux
למערכות Linux, נדגים את תהליך ההתקנה עבור Vagrant ב-Ubuntu 20.04:
התקן את המפתח:
```bash
$> wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```
הוסף את המאגר:
```bash
$> echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
```
משוך עדכונים ובצע את ההתקנה:
```bash
$> sudo apt update && sudo apt install vagrant
```
זה הכול! עכשיו כל מה שאתה צריך לעשות הוא לפתוח את המסוף שלך ולהקליד "vagrant." חשוב גם לציין, עם זאת, שאם אתה מריץ את Vagrant לבד, תקבל רשימה עם הפקודות הבסיסיות הזמינות.
בעיות עיקריות שאפשר להתקבל בהתקנת Vagrant
בעוד שגיאות התקנת Vagrant די נדירות, הסיכויים להתרחש זאת עולים משמעותית אם יש מספר רב של מנהלי מסדי נתונים מותקנים במחשב שלך. אחרי הכל, מנהלי מסדי נתונים אינם נוטים לאפשר את יצירת מכוני הווירטואלים כאשר יש יותר מאחד מהם כבר בשימוש.
הבאים הם כמה פתרונות מהירים של התיעוד הרשמי של Vagrant שיכולים לעזור לך להשתמש ב-Vagrant ו-VirtualBox כאשר יש מנהל מסד נתונים נוסף:
ב-Linux
כשאתה משתמש במנהל מסד נתונים אחר, אולי תפגוש את השגיאה הבאה:
```bash
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.
Command: ["startvm", <ID of the VM>, "--type", "headless"]
Stderr: VBoxManage: error: VT-x is being used by another hypervisor (VERR_VMX_IN_VMX_ROOT_MODE).
VBoxManage: error: VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot
(VERR_VMX_IN_VMX_ROOT_MODE)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
```
כדי לגרום ל-VirtualBox לפעול כראוי, כל מנהלי מסדי נתונים נוספים יצטרכו להוספם לרשימת המניעה של המערכת שלך.
כדי לעשות זאת, ראשית גלה מהו המנהל המסד נתונים:
```bash
$> lsmod | grep kvm
kvm_intel 204800 6
kvm 593920 1 kvm_intel
irqbypass 16384 1 kvm
```
לאחר מכן, פשוט השתמש בפקודת "blacklist" כדי להוסיף את המנהל המסד נתונים לרשימת המניעה שלך.
```bash
echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf
```
לבסוף, שחרר את המכשיר שלך והשתמש בפקודת "vagrant" שוב.
ב-Windows
ב-Windows, אם אתה מנסה להתחיל מכונת VirtualBox VM, אתה עלול להתמודד עם מסך כחול מפתיע.
כדי להשתמש ב-VirtualBox כרגיל, עליך לוודא ש-Hyper-V מושבת. השתמש בפקודה הפשוטה הבאה כדי לכבות את התכונה ב-Windows 10:
```PowerShell
$> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
```
ב-Windows 11, אפשר גם להשתמש ב-Powershell מוגדרת:
```PowerShell
$> bcdedit /set hypervisorlaunchtype off
```
כפולות, אפשר להשבית את Hyper-V מתוך ההגדרות של המערכת של Windows.
- לחץ על הכפתור של Windows ובחר "אפליקציות ותכונות"
- פתח "להדליק או לכבות תכונות של Windows"
- הסר את הסימון מ-Hyper-V ולבסוף לחץ על אישור
הפעל מחדש את המכשיר כדי ליישם את השינויים.
ב-MacOS
אם אתה נתקל בהודעת שגיאה הבאה כשאתה מנסה לבצע את VBoxManage:
failed to open /dev/vboxnetctl: No such file or directory
כדאי לשכתב את Virtualbox לגמרי או פשוט להשתמש בפקודות שלהלן:
sudo /Library/StartupItems/VirtualBox/VirtualBox restart
או
sudo /Library/StartupItems/VirtualBox/VirtualBox start
שים לב שבגירסאות מודרניות יותר, הקובץ /Library/StartupItems/VirtualBox/VirtualBox
אינו קיים, אז תצטרך להשתמש בפקודה הבאה:
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.pl
MacOS Catalina: אבל זה עובד על המכשיר שלי
בעיה נוספת שעשויה להתרחש ב-Mac היא הבעיה הקלאסית הזו כשמספרים על אפליקציה ש"עובדת טוב על המכשיר שלי", ואין שום דרך לגרום לה לעבוד באותו אופן במקום אחר. הצוות שלי מ-SPG נתקל גם הם בבעיה זו בעבר.
דמיינו שאתם מפעילים ובודקים סביבות מקומיות עם Vagrant + VirtualBox. אחד המהנדסים בצוות שלכם משתמש בגרסה מותאמת אישית של VagrantBox, שעד כה עובדת טוב עבורם. הם ייקראו מפתח 1. במשרדם, VirtualBox v6.1.34, Vagrant 2.2, ו-Ubuntu פועלים ללא בעיות.
מצד שני, ברור שמפתח 2 צריך לעדכן את הסביבה המקומית שלהם. עד כה הם משתמשים בשילוב של MacOS, VirtualBox v6.1.24, ו-Vagrant 2.1.x במשרדם.
כתוצאה מכך, לפחות במבט ראשון, האסטרטגיה של מפתח 2 נראית פשוטה:
- שלב 1: עדכון גרסאות VirtualBox ו-Vagrant (חשוב מאוד להשתמש בגרסאות מאוחדות)
- שלב 2: התקנת כל הרכיבים הנוספים של הפרויקט
שני הפעולות מוצלחות, אך התוצאה בהחלט לא צפויה – מתברר שהאתר שהתקנו ב-VirtualBox אינו נגיש כלל. מה קרה פה?!
כשנתון בפניכם חידה כזו, חשוב לחשוב על פתרון ולפעול באופן הגיוני, כמו הפעולות הבאות:
- בדיקת קבצי יומנים
- אימות שכל שירותי VirtualBox, כגון PHP, Nginx ו-MySQL פועלים
- שימוש ב-curl לגשת לדף
במקרה זה, למרות זאת, הכל נראה פועל כראוי, ואין בעיות ברורות בתוך האינסטלציה של VirtualBox עצמה.
קבוצתך מחליטה אז לשנות גישה ולבדוק אם קיימת קשר מבוססת VirtualBox מהחוץ. לאחר שהשתמשו בפקודת ping פשוטה, הם נדהמו לגלות שאכן 100% מהקלטות אבדו. למרות שהחדשות האלו קצת מדאיגות, זה עשוי גם להיות הסיבה לכל העניין.
בעקבות זאת, הם מגלים שכעת יש לתת לממשקים HostOnly טווח שונה של כתובות IP. זה באמת החל עם עדכון התיקון VirtualBox v6.1.30:
192.168.55.х prior to the update
192.168.56.х. after the update.
הנה זה, ברור כיום, במדריך המשתמש המתוקן לאחרונה של VirtualBox משתמש:
“ב-Linux, Mac OS X ו-Solaris, Oracle VM VirtualBox יאפשר רק כתובות IP בטווח 192.168.56.0/21 לממשקים Host-Only.”
כולם בקבוצה שלך נופפים בנשימה משולשת. הבעיה נעלמה פתאום לאחר שיצרו ממשק HostOnly חדש ושינו את הממשק באפשרות VirtualBox. המרכיב האינטרנטי הקריטי של הפתרון סוף סוף נגיש והמפתח השני שמח סוף סוף.
Vagrant או…? אילו אלטרנטיבות קיימות? מה הן טובות יותר?
עם כל ההתרגשות, אולי תרצה לחפש אלטרנטיבות ל-Vagrant. אם תעשה זאת, כנראה תפגוש באינטרנט מספר אתרים המשווים את הכלי למארזים (לעתים קרובות, Docker). אבל האם זו השוואה תקפה? מתברר שכן, כל עוד תשמור על ההבדלים בין השניים.
רבים מיתרונות Docker על מעליות יכולים גם להיחשב לחסרונות – זה פשוט תלוי במה שאתה צריך אותו עבורו. אז בואו נתחיל עם אחד גדול: זמן הטעינה. בעוד שמארזים יכולים להתחיל במהירות מכיוון שהם בעצם רק קבוצה של תהליכים, זה גם אומר שהם משתמשים במערכת ההפעלה של המארח. כתוצאה מכך, במקום להסתמך על חומרה מדומה, המארזים ישתמשו ישירות בחומרה של המארח.
מעליות יכולות גם להחזיק משאבים מיוחדים כמו זיכרון, זמן CPU, שטח דיסק ועוד. לעומת זאת, מארזים חולקים משאבים עם תהליכים אחרים על מחשב המארח. באופן דומה, בעוד ש-Vagrant מאפשר לך ליצור מחשב וירטואלי שלם – מה שידרוש יותר זמן ומשאבים – הגישה המארזית של Docker מאפשרת לך לפרוס מהר יותר עם פחות משאבים.
אז עם זאת בחשבון, רק תזכרו שזו לא תחרות. זה פשוט עניין של הצורך של החברה שלך.
מסקנה
למרות ש-Vagrant הוא ללא ספק כלי חזק, הוא גם לא חסין מבעיות. אם לחברה שלך חסרים הבנה או ידע, צוות מיוחד של מפתחי תוכנה עשוי לעזור. אחרי הכל, גם כשזה "עובד רק על המחשב שלי", קיים פיתרון לכל בעיה.
Source:
https://dzone.com/articles/vagrantvirtualbox-on-macos-catalina-but-it-works-o