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

היום, אנחנו הולכים להשתמש chroot לטפל בחלקים מסוימים של מערכת הקבצים לינוקס שלך (כמעט) מערכות מבודדות לחלוטין. זה יכול לתת לך לעשות כל מיני דברים מעניינים, כמו להפעיל מערכת ג'נטו מלאה מתוך מערכת אובונטו שלך עם מעט ללא אובדן ביצועים.

איך זה עובד

לפני שנתחיל, זה יהיה רעיון טוב לעבור בדיוק מה אנחנו עושים ואיך זה עובד. כאשר אתה מפעיל את המחשב לינוקס שלך, אתה עובר סדרה של צעדים כדי לאתחל. GRUB, Bootloader שלך, טוען את הליבה שצוין בקובץ התצורה של GRUB, מצרף אותו למחיצת השורש שלך, ומפעיל את scripts init מאוחסנים שם. מכאן ואילך, המערכת שלך פועלת מתוך מחיצת השורש.

אנחנו הולכים להיות באמצעות מערכת לינוקס המארח (אני אעשה את זה מ דביאן אבל השלבים צריכים להיות די דומים זה מזה ללא קשר להפצה) שעובר את תהליך האתחול הרגיל, אבל אז בטיפול חלק מסוים של מערכת הקבצים שלך ( כמו / mnt / אורח) כמו ההתקנה מבודד משלה. כי מערכת אורח לא יעבור את תהליך האתחול, לא לטעון ליבה, ולא יפעיל scriptים init. אתה פשוט אומר המארח שלך "להתחבר לספרייה זו כאילו זה מחיצת השורש החדש". התרשים שלהלן אמור לעזור להדגים את כוונתי.

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

אבל ברגע שאנחנו משתמשים chroot (CHANG ROOT) ואת הצבע אותו / mnt / אורח (או בכל מקום שבו אנחנו שמים את הקבצים בשלב הבא), כי המדריך הוא עכשיו מערכת הקבצים השורש שלו. הוא הופך להיות לגמרי אדיש למערכת המארחת. כל התוכניות והפקודות המופעלות מתוך אותו שורש חדש מופעלות על בסיס התוכנה בתוך אותו ענף חדש.

לדוגמה, אם אתה chrooted לתוך / mnt / אורח סוג "ls", זה לקרוא את הפקודה "ls" מתוך הסביבה chrooted כי, לגמרי לא מודע של הפקודה "ls" על המערכת המארחת. אם אתה מקליד "Firefox", הוא מפעיל את Firefox מתוך השורש החדש, בין אם יש לך מותקן פיירפוקס על המארח.

קבלת ושימוש Distro אורח

כדי להפוך את העבודה הזאת, אתה רק צריך את מערכת הקבצים הבסיסית של הפצה לינוקס, כל מה שיכול להיות. דביאן יש כלי נהדר עבור מטרה זו רק בשם debbootstrap אשר מוריד את קבצי הבסיס וממקם אותם בכל מקום שתרצה. כדי לשמור דברים מעניינים, וכדי להוכיח מה chroot יכול לעשות, אנחנו הולכים להשתמש במערכת הקבצים ג'נטו עבור האורח שלנו. כדי לשמור על הדברים פשוט וישיר, אני הולך לכלול את ההורדה של tarball כאחד הצעדים נעשה בשורת הפקודה.

שלבים אלה הולכים להוריד את כל קבצי הבסיס עבור מערכת ג'נטו, לחלץ אותם לספרייה היעד שלנו (אני אהיה משתמש / mnt / אורח אבל אתה יכול להשתמש בכל דבר שאתה אוהב) ולאחר מכן chroot לתוך ספרייה אז זה מטופל כמו ספריית שורש חדשה (/). ייתכן שתצטרך הרשאות root (sudo) עבור חלק מהפקודות הבאות.

 mddir / mnt / אורח cd / mnt / אורח wget http://distfiles.gentoo.org/releases/x86/2008.0/stages/stage3-x86-2008.0.tar.bz2 tar -jxvf stage3-x86-2008.0.tar.bz2 chroot / mnt / אורח 

פקודות אלה נוקטות בצעדים הבאים, לפי סדר השורה:

  1. צור את המרחב עבור מערכת האורח שלנו כדי לחיות
  2. זז לתוך החלל הזה
  3. הורד את קבצי המערכת של ג'נטו
  4. חלץ אותם
  5. טפל בחלל החדש הזה בתור ספריית השורש (/)

צילום המסך הבא יעזור להוכיח כי פעם השתמשנו chroot כדי לחבר את המדריך החדש שלנו כמו שורש, הוא מבודד עכשיו מן הענפים הקודמים בעץ הקבצים.

כדי להסביר את צילום המסך, אנו מתחילים בשורת הפקודה הרגילה במערכת המארחת. אני משתמש pwd להציג את הספרייה הנוכחית שלי, שבו כל הקבצים של ג'נטו יושבים כמו קבצים ישנים רגיל ללא משמעות מיוחדת. לאחר מכן אני משתמש chroot לטפל במדריך זה כמו השורש החדש, ואתה יכול עכשיו לראות חזותית כי הפקודה שלי השתנתה כי שורת הפקודה עכשיו מושך את כל המידע שלה (כולל איך לצייר את הפקודה) מתוך סביבת שורש של ג'נטו. כל הפקודות והפעולות שאני לוקח בעת chrooted תלוי פקודות אלה קיימים בתוך עץ קובץ חדש זה. כאשר אני מקליד pwd שוב, זה כבר לא אומר / mnt / אורח, כי ככל פגז יודע, שום דבר לא קיים מלבד מה שהוא רואה בתוך העץ הזה.

דברים שכדאי לזכור

כפי שאני רמז לעיל, זה לא 100% מבודדים מן המערכת המארחת. הסביבה chrooted מעולם לא היה "אתחול למעלה", ולכן הוא מעולם לא נטען הקרנל שלו, ומעולם לא ניהל משלהי init שלה. בדוגמה שלנו, יש לנו ג'נטו פועל על הקרנל כי המארח (במקרה שלי דביאן) אתחול עם.

שיטה זו היא בהחלט לא תחליף לווירטואליזציה, ולא יכול לעשות כל דבר תוכנת VM יכול לעשות. מערכת אורח אף פעם לא ממש "מגפיים" או מפעיל scriptים init, וזה אפשרי מערכת ההפעלה האורחת שלך עשוי לדרוש כמה תכונות הקרנל המארח שלך אינו מציע.

בשביל מה?

בזמנים שהזכרתי את הטכניקה הזו לאנשים בעבר, הם אמרו לעתים קרובות משהו כמו "זה מגניב, אבל מה היית משתמש בו?". באופן אישי מצאתי כמה שימושים עבור chroot :

  • מבחן פיתוח תוכנה בסביבה וטהור
  • הפעל תוכנה המיועדת לחלוקה נוספת
  • הפעל תוכנה הדורשת גרסה ישנה יותר או חדשה יותר של הפצה הנוכחי שלך
  • גישה להתקנת לינוקס במחיצה אחרת ללא צורך באתחול מחדש
  • אתחול תקליטור חי והשתמש ב- chroot כדי לתקן את ההתקנה או את GRUB
  • גש לכונן שבו שכחת את המשתמש / העבר
  • הפעל יישום של 32 סיביות בסביבת 64 סיביות

ואני בטוח שיש הרבה יותר כי אני אף פעם לא. האם אי פעם השתמשת chroot להפעלת מספר רב של distros? מה דעתך על תיקון מערכת לינוקס מתקליטור חי? תן לנו לדעת את ההערות.