Πριν από λίγες εβδομάδες έγραψα ένα άρθρο σχετικά με τον τρόπο εκτέλεσης πολλαπλών X συνεδριών χωρίς εικονικοποίηση, οι οποίες έδειξαν πώς μπορείτε να τρέχετε ταυτόχρονα πολλαπλά περιβάλλοντα επιφάνειας εργασίας στον ίδιο υπολογιστή και να κάνετε εναλλαγή μεταξύ τους με το πάτημα ενός κουμπιού. Παραδέχομαι ότι αυτό ήταν κάπως ζεστό για την πραγματική εμφάνιση - πώς να τρέχετε πολλαπλές διανομές Linux ταυτόχρονα χωρίς να χρειάζεται να αντιμετωπίζετε τα μειονεκτήματα του λογισμικού εικονικοποίησης.

Σήμερα, πρόκειται να χρησιμοποιήσουμε το chroot για να αντιμετωπίσουμε ορισμένα τμήματα του συστήματος αρχείων σας Linux ως σχεδόν σχεδόν απομονωμένα συστήματα. Αυτό μπορεί να σας επιτρέψει να κάνετε όλα τα ενδιαφέροντα πράγματα, όπως να εκτελέσετε ένα πλήρες σύστημα Gentoo από το εσωτερικό του συστήματός σας Ubuntu με ελάχιστη ή μηδενική απώλεια απόδοσης.

Πως δουλεύει

Πριν ξεκινήσουμε, θα ήταν καλή ιδέα να περάσουμε ακριβώς αυτό που κάνουμε και πώς όλα λειτουργούν. Όταν ξεκινάτε τον υπολογιστή σας Linux, περνάτε μια σειρά από βήματα για να εκκινήσετε. Το GRUB, το bootloader σας, φορτώνει τον πυρήνα που έχει οριστεί στο αρχείο ρυθμίσεων του GRUB, το αποδίδει στο ριζικό διαμέρισμα και τρέχει τα αποθηκευμένα σε αυτό scripts init. Από εκεί και πέρα, το σύστημά σας τρέχει από μέσα σε αυτό το διαμέρισμα ρίζας.

Θα χρησιμοποιήσουμε ένα κεντρικό σύστημα Linux (θα το κάνω από το Debian, αλλά τα βήματα θα πρέπει να είναι σχεδόν πανομοιότυπα ανεξάρτητα από τη διανομή) που περνάει από αυτήν την κανονική διαδικασία εκκίνησης, αλλά στη συνέχεια επεξεργάζεται ένα συγκεκριμένο τμήμα του συστήματος αρχείων σας ( όπως / mnt / guest) ως δική του απομονωμένη εγκατάσταση. Αυτό το σύστημα guest δεν θα περάσει από τη διαδικασία εκκίνησης, δεν θα φορτώσει έναν πυρήνα και δεν θα εκτελέσει δέσμες ενεργειών init. Θα πείτε απλώς στον κεντρικό σας υπολογιστή "σύνδεση με αυτόν τον κατάλογο σαν να είναι το νέο διαμέρισμα ρίζας". Το παρακάτω διάγραμμα θα πρέπει να καταδείξει τι εννοώ.

Αυτό είναι περίπου το πώς τα αρχεία θα τοποθετηθούν στο σύστημά σας, απλά κάθονται εκεί ως κανονικά αρχεία σε ένα κανονικό διαμέρισμα, αντιμετωπίζονται όπως όλα τα άλλα αρχεία μέχρι να χρησιμοποιήσουμε το "chroot" για να τα κάνουμε κάτι ξεχωριστό.

Αλλά μόλις χρησιμοποιήσουμε το chroot (CHange ROOT) και το τοποθετήσουμε στο / mnt / guest (ή όπου βάζουμε τα αρχεία στο επόμενο βήμα), αυτός ο κατάλογος είναι τώρα δικό του σύστημα αρχείων ρίζας. Γίνεται εντελώς ανυπόφορη στο σύστημα υποδοχής. Όλα τα προγράμματα και οι εντολές τρέχουν από μέσα σε αυτή τη νέα ρίζα εκτελούνται με βάση το λογισμικό μέσα σε αυτό το νέο υποκατάστημα.

Για παράδειγμα, εάν είστε chrooted σε / mnt / guest και πληκτρολογήστε "ls", διαβάζει την εντολή "ls" μέσα από αυτό το chrooted περιβάλλον, αγνοώντας εντελώς την εντολή "ls" στο κεντρικό σύστημα. Αν πληκτρολογείτε "firefox", εκτελείται ο Firefox μέσα από τη νέα ρίζα, ανεξάρτητα από το αν έχετε εγκαταστήσει το Firefox στον κεντρικό υπολογιστή.

Να πάρει και να χρησιμοποιεί το Guest Distro

Για να γίνει αυτό το έργο, χρειάζεστε απλώς το βασικό σύστημα αρχείων ενός διανομικού Linux, ανεξάρτητα από το ποια διανομή μπορεί να είναι. Το Debian έχει ένα εξαιρετικό εργαλείο για αυτό το σκοπό που ονομάζεται debbootstrap το οποίο κατεβάζει τα αρχεία βάσης και τα τοποθετεί όποτε θέλετε. Για να κρατήσουμε τα πράγματα ενδιαφέροντα και να δείξουμε τι μπορεί να κάνει το chroot, πρόκειται να χρησιμοποιήσουμε ένα σύστημα αρχείων Gentoo για τους πελάτες μας. Για να διατηρήσουμε τα πράγματα απλά και άμεσα, θα συμπεριλάβω τη λήψη του tarball ως ένα από τα βήματα που θα κάνουμε στη γραμμή εντολών.

Αυτά τα βήματα θα κατεβάσουν όλα τα βασικά αρχεία για ένα σύστημα Gentoo, θα τα εξαγάγουν στον κατάλογο προορισμού (θα χρησιμοποιήσω το / mnt / guest αλλά θα μπορέσετε να χρησιμοποιήσετε οτιδήποτε θέλετε) και στη συνέχεια chroot σε αυτόν τον κατάλογο έτσι αντιμετωπίζεται ως νέος κατάλογος ρίζας (/). Μπορεί να χρειαστείτε δικαιώματα root (sudo) για κάποιες από τις ακόλουθες εντολές.

 mkdir / 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 / guest 

Αυτές οι εντολές ακολουθούν τα ακόλουθα βήματα, με τη σειρά του αριθμού γραμμής:

  1. Δημιουργήστε το χώρο για να ζήσετε το σύστημα φιλοξενουμένων μας
  2. Μετακινήστε τον χώρο
  3. Κάντε λήψη των αρχείων του συστήματος Gentoo
  4. Αποσπάστε τα
  5. Αντιμετωπίστε αυτό το νέο χώρο ως τον κατάλογο root (/)

Το παρακάτω στιγμιότυπο οθόνης θα βοηθήσει να αποδείξει ότι μόλις χρησιμοποιήσαμε chroot για να συνδέσουμε τον νέο μας κατάλογο ως root, τώρα απομονώνεται από τους προηγούμενους κλάδους στο δέντρο του συστήματος αρχείων.

Για να εξηγήσουμε το στιγμιότυπο οθόνης, ξεκινάμε από μια κανονική γραμμή εντολών στο σύστημα κεντρικού υπολογιστή. Χρησιμοποιώ το pwd για να εμφανίσω τον τρέχοντα κατάλογο, όπου όλα τα αρχεία του Gentoo κάθονται ως απλά παλιά αρχεία χωρίς ιδιαίτερο νόημα. Στη συνέχεια, χρησιμοποιώ το chroot για να αντιμετωπίσω αυτόν τον κατάλογο ως τη νέα ρίζα και τώρα μπορείτε να βλέπετε οπτικά ότι η προτροπή μου έχει αλλάξει επειδή η γραμμή εντολών τραβά τώρα όλες τις πληροφορίες της (συμπεριλαμβανομένου του τρόπου σύνταξης της προτροπής) από το ριζικό περιβάλλον του Gentoo. ΟΛΑ οι εντολές και οι ενέργειες που παίρνω ενώ chrooted σε εξαρτάται από τις εντολές που υπάρχουν σε αυτό το νέο δέντρο αρχείων. Όταν πληκτρολογώ ξανά το pwd, δεν λέει πια / mnt / guest, γιατί όσο γνωρίζει το κέλυφος, τίποτα δεν υπάρχει εκτός από αυτό που βλέπει μέσα σε αυτό το δέντρο.

Πράγματα που πρέπει να θυμάστε

Όπως αναφέρω παραπάνω, αυτό δεν απομονώνεται 100% από το κεντρικό σύστημα. Το περιβάλλον chrooted δεν ήταν ποτέ "εκκίνηση", έτσι δεν φόρτωσε ποτέ τον πυρήνα του, και ποτέ δεν έτρεξε τα δικά του init scripts. Στο παράδειγμά μας, έχουμε το Gentoo που τρέχει στον πυρήνα που έχει εκκινήσει ο κεντρικός υπολογιστής (στη δική μου περίπτωση το Debian).

Αυτή η μέθοδος σίγουρα δεν αποτελεί αντικατάσταση του virtualization και δεν μπορεί να κάνει τα πάντα που μπορεί να κάνει το λογισμικό VM. Το σύστημα guest ποτέ δεν "εκκινεί" ή εκτελεί δέσμες ενεργειών init και είναι πιθανό ότι το λειτουργικό σας σύστημα μπορεί να απαιτήσει ορισμένες λειτουργίες που ο πυρήνας του κεντρικού υπολογιστή σας δεν προσφέρει.

Για ποιο λόγο?

Στους χρόνους που ανέφερα αυτή την τεχνική στους ανθρώπους στο παρελθόν, έχω πει συχνά κάτι αντίστοιχο με το "Αυτό είναι δροσερό, αλλά τι θα το χρησιμοποιούσατε;". Προσωπικά έχω βρει διάφορες χρήσεις για το chroot :

  • Δοκιμάστε την ανάπτυξη λογισμικού σε ένα παρθένο περιβάλλον
  • Εκτελέστε λογισμικό που προορίζεται για άλλη διανομή
  • Εκτελέστε λογισμικό που απαιτεί παλαιότερη ή νεότερη έκδοση της τρέχουσας διανομής σας
  • Πρόσβαση σε μια εγκατάσταση Linux σε διαφορετικό διαμέρισμα χωρίς να απαιτείται επανεκκίνηση
  • Εκκινήστε ένα Live CD και χρησιμοποιήστε το chroot για να επιδιορθώσετε την εγκατάστασή σας ή το GRUB
  • Αποκτήστε πρόσβαση σε μια μονάδα δίσκου όπου έχετε ξεχάσει το χρήστη / περάσει
  • Εκτελέστε μια εφαρμογή 32 bit σε περιβάλλον 64 bit

Και είμαι σίγουρος ότι υπάρχουν πολλά περισσότερα που δεν έχω ποτέ όμως. Έχετε χρησιμοποιήσει ποτέ chroot για να τρέξει πολλαπλές διανομές; Τι συμβαίνει με την επισκευή ενός συστήματος Linux από ένα Live CD; Ενημερώστε μας στα σχόλια.