הרפתקאות עם lguest
31/08/2007 18:17 ע"י כתריאל טראוםכבר זמן מה אני מדבר על lguest ועל הרצון שלי לנסות אותו קצת. הפוסט הבא הוא קיצור נסיוני עם lguest.
למי שלא מכיר, למי שלא שמע, lguest הוא פתרון וירטואליזצה קליל ("רק" 5000 שורות קוד) שכתב ראסטי ראסל (Rusty Russell) ומוזג עם קרנל 2.6.23 לראשונה.
lguest מגיע כמודול (אם רוצים) וכלי userland פשוט לניהול ה-VM-ים אשר יושב בספריית lguest תחת Documentation בעץ הקרנל. קימפול הכלי הוא די פשוט ומוסבר בדוקומנטציה. לפני שתתחילו לעבוד עם lguest, קמפלו אותו.
בהמשך להשוואה שערכתי בפוסט קודם, אציין רק שהחוזק העיקרי של lguest הוא הפשטות וה"קלות" שלו לעומת פתרונות אחרים. הוא משתמש באותו הקרנל בעבור מחשב אורח ומארח, ומדובר רק במודול ולא ארכיטקטורה שלמה.
החסרון העיקרי שלו לעומת המתחרים הוא חוסר תמיכה במערכות אחרות מלינוקס. אישית הנושא של חוסר תמיכה במערכות שאינן לינוקס אינו מפריע. גם כך אינני עובד איתם בבית ביום יום. (למרות שיש לי XP (חוקי, כן, כן, חוקי למהדרין) ב-Dual Boot בשביל הבנק ופתרון VPN שלא נתמך בלינוקס, לכו תבינו).
לפני שמתחילים לעבוד עם lguest, להלן רשימת נושאים שכדאי לדעת לפני. למזלכם, כבר השקעתי את הזמן כדי לפתור את הבעיות עד שעלתה לי מערכת:
- lguest עדיין לא מגיע עם הפצות נפוצות כרגע, מכיוון שהוא הוכנס כ-Patch רק בגירסא 2.6.23-rc1. מה שאומר בעצם שכרגע, צריך לקמפל קרנל בשביל תמיכה ב-lguest. לא להיט, אבל לא נורא אם יש קצת סבלנות. הערכים שיש לדאוג לאפשר הם:
CONFIG_HIGHMEM64G=n ("High Memory Support" "64GB")[1]
CONFIG_TUN=y/m ("Universal TUN/TAP device driver support")
CONFIG_EXPERIMENTAL=y ("Prompt for development and/or incomplete code/drivers")
CONFIG_PARAVIRT=y ("Paravirtualization support (EXPERIMENTAL)")
CONFIG_LGUEST=y/m ("Linux hypervisor example code")
הערה: CONFIG_LGUEST נמצא תחת Device Drivers
- ה-console device של מערכת שרצה תחת lguest הוא /dev/hvc0, צריך להוסיף שורה בסגנון של:
1:2345:respawn:/sbin/getty hvc0
לקובץ /etc/inittab של ה-image שבו תשתמשו. ולא לשכוח, כדי ש-root יכול לעשות דרכו לוגין, צריך להוסיף אותו ל-/etc/securetty
- lguest משתמש ב-tunnel device כדי לתקשר עם מערכת ההפעלה המארחת. דרך אחת היא להשתמש ברשת פרטית ו-NAT כדי לאפשר ל-VM לצאת לעולם, אך הדרך שמצאתי נוחה יותר היא בעזרת Bridge. בפדורה, כדי לקנפג Bridge Interface יש לצור קובץ ifcfg-lg0 שהוא בעצם Bridge ולקשר אליו את eth0.
אצלי זה נראה כך:
- הקובץ /etc/sysconfig/network-scripts/ifcfg-lg0:
DEVICE=lg0 BOOTPROTO=static BROADCAST=192.168.1.255 IPADDR=192.168.1.10 NETMASK=255.255.255.0 NETWORK=192.168.1.0 ONBOOT=yes
- והקובץ /etc/sysconfig/network-scripts/ifcfg-eth0:
DEVICE=eth0 BOOTPROTO=static ONBOOT=yes BRIDGE=lg0
יותר מאוחר כאשר נצור את ה-VM, נקשר אותו ל-Bridge הנ"ל.
- הדיסקים של המערכת האורחת נקראים lgba, lgbb וכו'. הייתי צריך לעדכן את ה-fstab של המערכת האורחת כדי שתתאים לשמות החדשים. בנוסף צריך לעשות אחד משני הדברים הבאים כדי שהמערכת תכיר את ה-block devices:
- לדאוג שלמערכת האורחת יש udev
- לצור אותם עם mknod. ה-major של lgba הוא 253 ושל lgbb הוא 252. השיטה העדיפה היא כמובן udev.
טוב, אני חושב שזה כל ה-gotchas שצריך לשים לב אליהם. אפשר להתחיל לעבוד.
אני השתמשי ב-image של דביאן בגירסא 3.1 שהורדתי מ-jailtime.org, ושידרגתי בעזרת apt לגירסה 4.
שימו לב : כדי לחסוך בזמן הורדה/מקום, jailtime מספקים rootfs בגודל של 1G בלבד. ניתן לעקוב אחרי ההוראות הבאות כדי להגדיל אותו.
אחרי שהורדתי, פרסתי, מחקתי את המיותר ושיניתי שמות למשהו הגיוני יותר נותרתי עם הקבצים הבאים:
- root-lgba.img
- swap-lgbb.img
שלב הבא היה סידור ה-rootfs כדי שיעבוד עם lguest. עיגנתי את root-lgba.img וביצעתי chroot לתוכו. ערכתי את fstab, inittab, securetty והתקנתי udev בשביל יצירה אוטומאטית של devices. זהו, מוכנים להפעיל את lguest כבר?
רק עוד נקודה אחרונה. אין ל-lguest עדיין ניהול קונסול מבריק או יכולות daemon. הכלי lguest (כבר קימפלתם אותו נכון?) מורץ משורת הפקודה, ואם תסגרו את הטרמינל או תריצו pkill lguest, ה-VM שלכם ימות באכזריות. לצורך כך השתמשתי ב-screen כדי להריץ את ה-vm ולשמור לי את היכולת להתנתק ממנו בעת הצורך כדי שלא יתפוס לי טרמינל.
יאללה, לעבודה, הכל מוכן. הפקודה להרצת ה-vm נראית כך:
# screen # lguest 128m /boot/vmlinux-2.6.23-rc5-lguest --tunnet=bridge:lg0 \ --block=/home/data/vm/web-vm/root-lgba.img \ --block=/home/data/vm/web-vm/swap-lgbb.img root="/dev/lgba ro"
שימו לב שאני משתמש ב vmlinux (שעשיתי לו strip) ולא vmlinuz. לפי הדוקומנטציה ניתן להשתמש ב vmlinuz אך בנסיונות שלי זה לא עבד. אם הכל עבר כשורה, יש לכם כעת VM רץ לשימושכם.
אישית אני משתמש ב-lguest כ-vm לפיתוח של jiyuu. שימושי.


