הפעלת חלונות XP תחת מכונה וירטואלית בלינוקס

החל מגרסה 2.6.20 של גרעין מערכת ההפעלה לינוקס, נוספה יכולת למערכת ההפעלה המאפשרת להריץ מכונה וירטואלית1 על גבי מערכת ההפעלה עצמה, ללא תוכנה חיצונית. אם יש ברשותכם מחשב המריץ גרסה עדכנית של מערכת הפעלה מבוססת לינוקס, הנה רשימת הצעדים כדי להפעיל את חלונות בתוך מכונה וירטואלית, בלי לכבות את הלינוקס ובלי צורך בתוכנה נוספת (כמו VMWare או VirtualBox), בעזרת KVM : Kernel Virtual Machine.

המצרכים:

  • מחשב מודרני עם תמיכה בהאצת וירטואליזציה בחומרה. בלי מעבד עם האצת חומרה, אפשר להריץ את חלונות רק בעזרת סימולטור וזה מאוד מאוד איטי (לא טוב לבריאות הנפש). מעבדים העונים לדרישות הן מעבדי אינטל מסדרת Core 2 או מעבדים של AMD מסדרת Athlon64 FX ומעלה.
  • מערכת הפעלה לינוקס עם קרנל 2.6.20 ומעלה, לדוגמה פדורה 7 או אובונטו 7.04
  • חבילות התוכנה המתאימות – דרך מנהל התוכנה של מערכת ההפעלה יש לבקש להתקין את חבילת kvm.
  • תקליטור של חלונות XP (רצוי גרסת Professional) ומספר רשיון חוקי ותקף. אם המחשב שעליו הולכת להיות מותקנת המערכת מכיל כבר התקנה של חלונות (או הכיל בעבר ואותו רשיון לא נצא בשימוש באף מערכת אחרת כרגע) אז אפשר להשתמש באותו קוד רשיון, אחרת יש לרכוש רשיון חדש – עותק של Microsoft Window XP Professional OEM באנגלית ניתן לרכוש החל מ-640 ש”ח

התקנה

הגדרה והתקנה של המכונה הוירטואלית נעשית כולה בפקודות טקסט בטרמינל – כיום עוד אין ממשק תצורה גרפי שתומך בצורה טובה בבנית מכונות וירטואליות של KVM. אי לכך ובהתאם לזאת, נא להפעיל תוכנת טרמינל, בהתאם למערכת ההפעלה שלכם וסביבת העבודה הגרפית. ב-GNOME כדאי להפעיל את gnome-terminal שנמצא בד”כ תחת Applications->Accessories בשם Terminal, או תחת Applications->System Tools. ב-KDE כדאי להפעיל את konsole שנמצא בד”כ תחת System->Terminal. את כל שאר הפקודות יש להקיש בטרמינל אלא אם נאמר במפורש אחרת.

לפני שנתחיל בהתקנה, יש להוריד כמה תסריטים שכתבתי, שיעזרו בהפעלת ה-KVM, ולהתקין אותם למערכת ההפעלה. מכיוון שחלקים שונים מהתהליך דורשים הרשאות מנהל מערכת, התסריט דורש הרשאות root ואוכף את זה בעזרת פקודת sudo שמופעלת באופן אוטומטי כשהתסריט מופעל שלא עם הרשאות מתאימות2. כתוצאה מכך, וכדי להקל את ההפעלה של המכונות הוירטואליות על ידי משתמשים שונים, אני ממליץ להוריד את הקבצים הנ”ל ולהתקין אותם בתיקיית /usr/local/bin, אבל אפשר להתקין אותם בכל תיקייה כרצונכם. בנוסף צריך להגדיר למשתמשים המעוניינים להפעיל מכונות וירטואליות הרשאות sudo ל-kvm-start, או לאפשר להם להריץ את התוכנה כ-root בצורה אחרת.
יש להוריד את שני הקבצים kvm-start ו-kvm-network-setup ולשמור אותם על בתיקייה כפי שתואר. לאחר מכן יש להפעיל כ-root (או בעזרת sudo) את הפקודות הבאות על מנת לאפשר להריץ את התסריטים:

chmod 755 /usr/local/bin/kvm-start /usr/local/bin/kvm-network-setup

(ציינתי את התיקייה /usr/local/bin כפי שהסברתי למעלה, במקרה ולא שם נשמרו הקבצים, יש לשנות את הנתיב בהתאם)

ניגש להתקנה:

  1. דבר ראשון יש לייצר את דמות הכונן הקשיח שלתוכה נתקין את מערכת ההפעלה – אין אפשרות בשלב זה להשתמש ב-KVM עם מחיצה אמיתית ולכן צריך ליצור קובץ על הכונן הקשיח הרגיל שבתוכו תתבצע סימולציה של כונן קשיח. יש לכך גם יתרונות רבים: שימוש בכונן וירטואלי מונע שגיאות שיכולות לגרום למחיקה של מערכת ההפעלה האמיתית, מאפשר לשכפל ולשמור גיבוי של מערכת ההפעלה ועוד כמה דברים יותר מורכבים (אולי אגע בהם בהמשך). הפקודה שצריך להקיש היא:

    qemu-img create windows.img -f qcow2 6G

    על מנת ליצור כונן וירטואלי בגודל של 6GB. אפשר כמובן ליצור כונן בכל גודל שיכול להתאים לכמות המקום הפנוי בכונן הקשיח האמיתי, אבל יש לזכור שהתקנה של חלונות XP כולל עדכונים לוקחת כ-3.5GB בעצמה בלי שום דבר אחר. עם אנטי וירוס ועדכון דפדפן (ל-Firefox או Internet Explorer 7, או שניהם) אנחנו כבר ב-4GB. בכל מקרה, הקובץ שנוצר לא מייד תופס את כל המקום שציינו – הפורמט של הכונן הוירטואלי שבחרנו – qcow – לוקח שטח מהכונן האמיתי רק לפי השטח שבאמת מנוצל בכונן המדומה, ולכן הקובץ מתחיל מאוד קטן וגדל לפי מה ששומרים בתוכו. למרות זאת מומלץ מאוד לא לעשות “over booking” של הכונן המדומה ולא לבקש יותר גודל מכמות המקום הפנוי בכונן האמיתי מכיוון שזה יכול ליצור תקלות מוזרות במערכת ההפעלה הוירטואלית.
  2. השלב הבא הוא להשיג תקליטור של חלונות ולדאוג שה-KVM יוכל לקרוא אותו. אם יש לנו תקליטור אמיתי אז כמובן שיש לשים אותו בכונן, אבל אם ברשותנו קובץ ISO של חלונות אז אין צורך לצרוב אותו – KVM יוכל לקרוא את קובץ ה-ISO ישירות כאילו הוא תקליטור אמיתי.
  3. עכשיו אפשר לגשת להפעלה של המכונה הוירטואלית, ולהחל בהתקנה של חלונות. אם ברשותנו תקליטור אמיתי, יש להפעיל:

    kvm-start windows.img --windows --cdrom

    לעומת זאת, אם נעדיף להתקין מקובץ ISO (לדוגמה כי אין במחשב כונן תקליטורים אמיתי), אז צריך להפעיל:

    kvm-start windows.img --windows --cd-image ms-windows-xp.iso

    (כמובן שיש להחליף את ms-windows-xp.iso בשם הקובץ האמיתי(

    הציון של --windows מטרתו להכריח את חלונות להיות מותקן בלי תמיכה ב-ACPI, שאחרת המערכת לא תותקן כמו שצריך ותסרב לרוץ. לאחר ההתקנה אין צורך להוסיף את האפשרות הזאת במהלך הפעלה רגילה.

  4. עכשיו צריך להופיע חלון ובו נטען התקליטור של חלונות. בשביל להתחיל את ההתקנה, יש ללחוץ על איזשהוא מקש תוך חמש שניות מרגע שהתקליטור נטען – תופיע על כך הודעה בחלון, ולאחר מכן ממשיכים עם התקנה רגילה של חלונות.
  5. כשההתקנה מסתיימת חלונות יאתחל את המחשב הוירטואלי. יתכן והמחשב יצליח לעשות אתחול מסודר, ויתכן שהוא פשוט יכבה – במקרה שהחלון פשוט נעלם, בשורות הפקודה יש לחזור על הפקודה הקודמת ולהריץ אותה שוב כדי להשלים את השלב השני של ההתקנה.
  6. בתום השלב השני, חלונות ינסה לכבות את המחשב שוב. הפעם יש לוודא שהמחשב הוירטואלי אכן נכבה והחלון נעלם – אם הוא ממשיך באתחול רגיל, פשוט יש לסגור את החלון כמו חלון של ישום רגיל. עכשיו אפשר להפעיל את המערכת הוירטואלית בלי התקליטור, בצורה הזאת:

    kvm-start windows.img

    והמערכת תופעל מהתחלה בצורה רגילה.
  7. עכשיו אפשר להגדיר את חיבור הרשת. אנחנו הולכים להשתמש בהגדרות סטאטיות בשביל הרשת הוירטואלית – ככה היה לי קל יותר לכתוב את התסריטים:
    יש לגשת לחיבורי הרשת (אני בד”כ לוחץ כפתור ימני על “Network Places” ובוחר “Properties”) ולהכנס לדיאלוג ה-TCP/IP properties של חיבור הרשת. שם יש להגדיר את כתובת ה-IP כ-192.168.100.2, את הרשת כ-255.255.255.0 ואת ה-gateway כ-192.168.100.1. בנוסף יש להגדיר את שרתי השמות לפי מה שמוגדר במחשב המארח. אני בד”כ כותב 194.90.1.5 (שרת השמות של נטוויז’ן. אני כדי משוכנע שלא אכפת להם, למרות שאני לא לקוח). לאשר ולסגור את הדיאלוג. הרשת צריכה לעבוד עכשיו ואפשר לבדוק זאת על ידי הפעלת הדפדפן (Internet Explorer בלבד, לצערי). ההגדרות הנ”ל קבועות בתסריט הגדרות הרשת (kvm-network-setup ואפשר לשנות אותן ידנית אבל עוד אין אפשרות להגדיר את זה באופן נוח.
  8. מומלץ בשלב זה להפעיל את Windows Update ולהתקין את כל עדכוני האבטחה. דבר זה ידרוש אתחול המערכת מספר פעמים נוספות אבל לא יגזול יותר משעתיים שלוש על מחשב מודרני עם חיבור מהיר לאינטרנט

יש לשים לב שהממשק הגרפי של המחשב הוירטואלי לא תופס את העכבר באופן אוטומטי – כדי להשתמש בעכבר בתוך המכונה הוירטואלית צריך ללחוץ על החלון עם אחד מלחצני העכבר, ואז העכבר יתפס על ידי המכונה הוירטואלית. כשהעכבר תפוס הוא אינו יכול לחרוג מגבולות החלון של המכונה הוירטואלית, ובשביל לשחרר אותו כדי לחזור לשולחן העבודה האמיתי צריך ללחוץ על CTRL ו-ALT בו זמנית.

יש אפשרות לשפר את המצב על ידי שימוש ב-VNC, שהוא פרוטוקול תקשורת המאפשר העברה של תצוגה גרפית מלאה על גבי הרשת – בדומה ל-Remote Desktop של חלונות. כשמפעילים את מצב ה-VNC של KVM, לא מופיע חלון רגיל כשמפעילים את המכונה הוירטואלית, אלא במקום זאת מופעל שרת VNC מקומי, בלי תצוגה, שאפשר להתחבר אליו בעזרת תוכנת לקוח של VNC (שמגיעה עם כל מערכת הפעלה מודרנית היום), לדוגמה vncviewer או krdc (אני ממליץ על האחרון). כדי להפעיל את KVM במצב VNC יש להריץ:

kvm-start windows.img --vnc

אחרי שמערכת ההפעלה עולה אפשר להתחבר לתצוגה, לדוגמה על ידי krdc על ידי הרצה – משורת הפקודה3 או בעזרת דיאלוג “הפעל” הרגיל של שולחן העבודה – של הפקודה krdc :1.

תוכנת הלקוח של VNC תופסת את העכבר באופן אוטומטי כשהוא נכנס לחלון של התצוגה ומשחררת את העכבר כשמושכים אותו מחוץ לחלון. הבעיה היחידה היא שאין סנכרון טוב בין הסמן של העכבר בתוך המכונה הוירטואלית לבין הסמן הפנימי של תוכנת ה-VNC (מסיבות טכניות שאין טעם להכנס אליהן כרגע). כדי לפתור זאת צריך להכנס ל-Control Panel בחלונות, ולמצוא את הגדרות העכבר, ושם תחת Pointer Options לכבות את “Enhance pointer precision” ולכוון את “Pointer Speed” כך שיהיה בדיוק באמצע. עכשיו לאשר ולסגור.התוצאה צריכה להיות שהסמן של העכבר במערכת ההפעלה הוירטואלית וב-VNC נעים באותה מהירות אבל כנראה לא ממש אחד על השני – צריך לאפס אותם על ידי שמביאים את הסמן של העכבר במערכת ההפעלה לאחת הפינות, יוצאים מהחלון וחוזרים.

חשוב מאוד

במצב VNC, סגירת החלון של תוכנת ה-VNC לא מכבה את המחשב הוירטואלי – אפילו אם החלונות עשה shutdown והגיע למסך של “You may now turn off your computer”, ה-KVM עדיין רץ. אם הרצנו אותו משורת הפקודה אז אפשר לחזור לטרמינל ולהקיש CTRL ו-C ביחד כדי ל”שבור” את ה-KVM, אחרת צריך למצוא את ה-kvm ברשימת התהליכים ולהרוג אותו משם (ברשימת התהליכים יופיע גם kvm-start – יש להזהר לא להרוג אותו אלא רק את התהליך הראשי של ה-KVM. לאחר שהתהליך הראשי יכבה, kvm-start צריך לנקות אחריו, ולאחר מכן הוא יסגר לבד).

זהו לבינתיים. ל-kvm-start יש הרבה אפשרויות נוספות להריץ את ה-KVM, ואפשר להפעיל kvm-start --help בשביל לקבל רשימה מלאה. אם יש למישהו בעיות להפעיל את המערכת הוא מוזמן לפנות אלי, כמו כן אשמח לקבל הצעות ושיפורים לתסריטים.

בהצלחה.

Windows is afraid of viruses

  1. תוכנה המדמה מחשב נוסף []
  2. יש לציין שאפשר להפעיל את ה-KVM ללא הרשאות root, אלא שגישה למערכת ה-tun/tap המשתמשת לחיבור רשת וירטואלית ל-KVM דורשת בשלב זה הרשאות מנהל מערכת. []
  3. לשים לב שאם משתמשים בשורת הפקודה בשביל להפעיל את לקוח ה-VNC, שלא עושים זאת מאותו חלון שבו מופעל kvm-start, מכיוון ש-kvm-start תופס את שורת הפקודה ולא משחרר אותה עד לסיום הריצה של המכונה הוירטואלית. יש לפתוח חלון חדש (או טאב חדש בתוכנות טרמינל התומכות בכך) ולהריץ משם []

5 Responses to “הפעלת חלונות XP תחת מכונה וירטואלית בלינוקס”

  1. MrM:

    המממ לא הצלחתי לגרום לתסריט לזהות את כונן הדיסקים שלי ולא הצלחתי לטעון מתוך image
    בסוף ערכתי את הסקריפט ושיניתי את הדיפולט ששמת שם ל/dev/sr1 שזה הכונן דיסקים שלי וזה עובד.

    גם רצוי שתוסיף אופציית fullscreen (גם כן הוספתי את זה בתסריט hard coded כי לא היה לי כח להוסיף אופציה, אבל רצוי שתשים את זה)

    כמו כן הייתי רוצה לחזק את ידיך ולהגיד שהסקריפטים האלה הקלו עלי מאוד את החיים! 😀

    טודע! 🙂

  2. Guss:

    בבקשה. אני אוציא גרסה נוספת בקרוב. כמו שאומרים באנגלית – watch this space

  3. MrM:

    אם אתה מוציא גרסא חדשה, הייתי רוצה גם לבקש שתגמיש קצת את הסקריפט של החיבורי רשת. עברתי איזה שבעה-שמונה מדורי גהנום עד שהגדרתי את הרשת 🙂

  4. Guss:

    אתה יכול לתת לי את הקונפיגורציה הנוכחית שלך – או פשוט לאמר לי מה אתה רוצה לשנות?

    האפשרויות שלי לבחון כל מיני תצורות היא מוגבלת לבערך שתי תצורות שונות – פדורה 8 ואובונטו.

  5. טכנאי מחשבים:

    תודה, בלוג מעניין!

Leave a Reply