Νέοι επεξεργαστές και νέες τεχνολογίες μας επιτρέπουν να διαχειριζόμαστε ακόμα πιο έξυπνα την υπολογιστική μας ισχύ. Και ευτυχώς έχουμε πολύ… Τη σήμερον ημέρα, οι τετραπύρηνοι επεξεργαστές έχουν γίνει βασικοί για τον υπολογιστή μας στο desktop και ετοιμάζονται να εισβάλλουν και στα laptop. Παρότι δεν προσφέρουν και πολλά αν τρέχουμε μια και μόνη εφαρμογή, δίνουν σιγά σιγά νέες δυνατότητες ακόμα και στους απλούς χρήστες – πόσο μάλλον στους χρήστες που “ψάχνονται”…
Γι’ αυτό και ξεκινάω ένα νέο θεσμό – το πρότζεκτ του σαββατοκύριακου – όπου με απλά λογάκια θα εξηγούμε νέα και ενδιαφέροντα πράγματα που μπορούμε να κάνουμε με τον υπολογιστή μας – όταν βρούμε το χρόνο δηλαδή. Δεδομένων όλων των παραπάνω, θα ξεκινήσω με το καινούριο μας buzzword (εντάξει, εδώ και ένα χρόνο δηλαδή…): το Virtualization (ελληνιστί εικονοποίηση).
Τι πάει να πεί virtualization;
Με λίγα λόγια, οι τεχνολογίες virtualization μας δίνουν τη δυνατότητα να δημιουργήσουμε εικονικές μηχανές με ένα υποσύνολο των διαθέσιμων πόρων του υπολογιστή μας. Οι εικονικές αυτές μηχανές μπορούν έπειτα να τρέξουν οποιοδήποτε λειτουργικό – σαν να έτρεχαν σε έναν άλλο, λιγότερο ισχυρό, υπολογιστή. Ας προσπεράσουμε προς στιγμήν το γιατί, αν και είναι προφανές, και ας πάμε στο πως.
Οι δύο βασικές τεχνολογίες που χρησιμοποιούνται είναι το paravirtualization και το hardware ή πλήρες virtualization (ή απλά virtualization). Η διαφορά τους έγκειται στο κατά πόσον το υλικό του υπολογιστή μας μπορεί να υποστηρίξει virtualization. Στην περίπτωση του paravirtualization, ένα κομμάτι λογισμικού το οποίο τρέχει στο βασικό λειτουργικό σύστημα του χρήστη αναλαμβάνει να υλοποιήσει το virtualization. Κατά συνέπεια, ό,τι τρέχει στο λειτουργικό σύστημα – “καλεσμένο” (δηλαδή το λειτουργικό σύστημα στην εικονική μηχανή) πρέπει να μεταφραστεί σε εντολές προς το βασικό ΛΣ. Σε πλήρες virtualization mode, το βασικό ΛΣ προσπερνάται πλήρως, και το guest ΛΣ μιλά κατευθείαν με τον επεξεργαστή, τη μνήμη και τα υπόλοιπα υποσυστήματα. Αν και αυτή είναι μια αρκετά απλουστευτική εικόνα, είναι αρκετό για να ξέρουμε πάνω κάτω τι συμβαίνει.
Γιατί το χρειάζομαι;
Εδώ μπαίνουμε στα δύσκολα ερωτήματα… Οι περισσότεροι χρήστες ίσως να μην το χρειαστούν ποτέ – άλλωστε εάν κάποιος είναι απολύτως ικανοποιημένος με το λειτουργικό του σύστημα δεν έχει κανένα λόγο να το επιχειρήσει καν. Έχει όλες τις εφαρμογές που του χρειάζονται και ζει ήσυχος και ευχαριστημένος.
Ας πάμε όμως σε έναν πιο προχωρημένο χρήστη. Ας πούμε ότι έχουμε να κάνουμε με έναν ενθουσιώδη χρήστη που θέλει να δοκιμάσει ότι λειτουργικό κυκλοφορεί στην αγορά, από διαφορετικές εκδόσεις Windows, μέχρι τις τελευταίες διανομές Linux και το καινούριο Mac OS X. Θα μπορούσε βέβαια να δημιουργήσει 15 διαφορετικά partitions στο δίσκο του και να ξεκινά κάθε φορά το λειτουργικό που ορέγεται, αλλά… κάθε φορά που θέλει το συγκεκριμένο προγραμματάκι που είδε στο Linux πρέπει να βγαίνει από τα Windows, και κάθε φορά που του στέλνει κάποιος ένα “βαρβάτο” docx αρχείο να ξαναγυρνάει πίσω πάλι… Και να θυμάται να αντιγράφει τα αρχεία που χρειάζεται από partitions με διαφορετικό format… Μοιάζει σαν ορισμό της κόλασης.
Ο χρήστης μας δεν χρειάζεται να κάνει τίποτα από όλα αυτά χρησιμοποιώντας virtualization. Μπορεί να έχει σαν βασικό λειτουργικό του αυτό το οποίο είναι πιο σταθερό, ασφαλές ή που ξέρει καλύτερα και να δημιουργεί ξεχωριστές εικονικές μηχανές για κάθε extra λειτουργικό που θέλει να τρέξει. Οι δίσκοι των μηχανών του αποθηκεύονται σαν αρχεία στον δίσκο και μπορεί να μεταφέρει αρχεία από το ένα λειτουργικό στο άλλο, ενώ τρέχουν και τα δύο. Τέλος, μπορεί ακόμα να κάνει και copy-paste από το linux desktop του στα windows και τούμπαλιν.
Βέβαια, τα παραπάνω μπορεί να φαίνονται πρακτικά για έναν χρήστη, αλλά για κάποιον προγραμματιστή ίσως να είναι απαραίτητα. Και μην πάει μακρυά το μυαλό σας: ας πούμε ότι θέλετε να κάνετε ένα όμορφο site που να παίζει για κάθε browser που κυκλοφορεί. Αν είστε πιο άνετος να προγραμματίζετε στο linux, θα χρειαστείτε οπωσδήποτε όχι ένα αλλά δύο εικονικές μηχανές: μια με Windows XP και IE6 και μια με τα καινούρια Windows 7 για τον IE 7 και 8.
Και τώρα που λύσαμε τα βασικά ερωτήματα, ας περάσουμε στην υλοποίηση.
Υποστηρίζει το μηχάνημά μου πλήρες virtualization;
Γενικά, αν η απάντηση στον τίτλο είναι ναι, είμαστε τυχεροί γιατί θα έχουμε καλύτερες επιδόσεις και περισσότερες επιλογές από εργαλεία. Για όσους είναι όχι όμως, δεν χρειάζεται να απελπίζονται: υπάρχουν εξίσου απλοί τρόποι για να τρέξουν εικονικές μηχανές αξιοπρεπώς. Ένας εύκολος τρόπος να ελέγξουμε αν υποστηρίζει ο υπολογιστής μας virtualization είναι στα Windows να κατεβάσουμε και να εγκαταστήσουμε το CPUID ή στην περίπτωση που δουλεύουμε σε Linux, να δώσουμε:
user@machine$ cat /proc/cpuinfo
Και στις δύο περιπτώσεις, ψάχνουμε για μια γραμμή που να περιέχει τα αρχικά vmx ή svm, που αντιπροσωπεύουν την υποστήριξη virtualization σε Intel και AMD επεξεργαστές αντίστοιχα. Σε περίπτωση που ο επεξεργαστής μας θα έπρεπε να υποστηρίζει virtualization (για παράδειγμα, με βάση τα στοιχεία στο ark.intel.com, όπου θα έπρεπε να έχει VT/x extentions), θα πρέπει να πάμε στο BIOS της μητρικής μας και να το ενεργοποιήσουμε από εκεί. Μερικές παλαιότερες μητρικές μπορεί να μην έχουν τη συγκεκριμένη υποστήριξη, αλλά αυτό λύνεται εύκολα με ένα firmware upgrade.
Και τώρα που ξέρουμε τι δυνατότητες έχουμε από τον υπολογιστή μας, μπορούμε να προχωρήσουμε στην εγκατάσταση των εργαλείων μας. Αν δεν έχουμε υποστήριξη πλήρους virtualization, μπορούμε να παίξουμε με Virtualbox και VMware Player (για Windows, MacOS X και Linux) ενώ σε άλλη περίπτωση μπορούμε να ρίξουμε μια ματιά και στο KVM/QEMU/libvirt “stack” για Linux (με το virt-manager για ποιό φιλικά προς τον χρήστη αποτελέσματα).
VirtualBox
Το VirtualBox αποτελεί την πιο απλή λύση για virtualization. Αναπτύχθηκε από την Sun και μετά την εξαγορά της έχει περάσει στην Oracle. Μπορούμε να το κατεβάσουμε από εδώ και σίγουρα θα καλύψει τις ανάγκες των περισσότερων χρηστών. Εν ολίγοις, δίνει τη δυνατότητα να δημιουργήσουμε τη δική μας εικονική μηχανή μέσω ενός εύκολου και απλού οδηγού, καθώς και αρκετές εύκολες λειτουργίες για τους απλούς χρήστες (όπως τη δυνατότητα για κοινόχρηστους εικονικούς φακέλους μεταξύ του βασικού και του guest λειτουργικού). Συνεπώς είναι η ιδανική επιλογή για όσους αρκούνται στα λίγα απλά χαρακτηριστικά και δεν έχουν υπολογιστές με δυνατότητες virtualization.
VMware Player
Η δωρεάν προσφορά της VMware δεν θα απογοητεύσει τους περισσότερους. Παρότι δεν μπορούμε να δημιουργήσουμε τη δική μας εικονική μηχανή, μπορούμε να κατεβάσουμε μια από τις άπειρες προεγκατεστημένες που κυκλοφορούν στο δίκτυο και να την αλλάξουμε στις ανάγκες μας. Λόγω αυτού, είναι ακόμα πιο εύκολο να ξεκινήσει κανείς, αλλά πολύ δύσκολο να συνεχίσει, όσο μαθαίνει περισσότερα πράγματα. Μπορούμε να το κατεβάσουμε από εδώ.
KVM
Και τώρα που τελειώσαμε με τα απλά γραφικά εργαλειάκια, μπορούμε να πάμε στα πιο επαγγελματικά (με άλλα λόγια, πως το κάνει η Amazon και η Rackspace…). Το KVM εν συντομία είναι ένα module που φορτώνεται στον πυρήνα του Linux και μας δίνει τη δυνατότητα να εκμεταλλευτούμε τις δυνατότητες του υπολογιστή μας στο έπακρο. Απαιτεί virtualization extentions οπότε είναι για αυτούς που έχουν τις αντίστοιχες δυνατότητες στον επεξεργαστή τους.
Το QEMU που αναφέραμε συνοπτικά παραπάνω είναι το ενιαίο εργαλείο για τον χρήστη, ώστε να περνάει εντολές στο kvm (με πολύ απλά αφηρημένα λογάκια…). Στην ουσία όμως κάνει και αυτό πολύ δουλειά, μιας και αναλαμβάνει να ελέγξει όλες τις εικονικές συσκευές μιας μηχανής πριν τη δώσει στο kvm. Εικονικές συσκευές μπορεί να είναι οτιδήποτε, από αρχεία στο βασικό ΛΣ τα οποία θα δίνονται σαν να είναι πραγματικοί δίσκοι για το λειτουργικό που τρέχει πάνω από το KVM, εικονικές κάρτες δικτύου για να δίνουμε πρόσβαση στο εικονικό ΛΣ, εικονικές κάρτες γραφικών για να μπορούμε να τρέχουμε γραφικό περιβάλλον, έως και VNC server ώστε να έχουμε γραική απομεκρυσμένη πρόσβαση στην εικονική μηχανή μας η οποία μπορεί να τρέχει σε οποιοδήποτε υπολογιστή στο δίκτυο.
Πάνω από το QEMU σηνήθως βρίσκεται η libvirt. Η libvirt αποτελεί ένα εύκολο εργαλείο διαχείρησης εικονικών μηχανών, χωρίς να χρειάζεται να μιλάμε κατευθείαν στον QEMU. Δίνει τη δυνατότητα στο χρήστη να χρησιμοποιήσει όλες τις δυνατότητες του QEMU χωρίς να χρειαστεί να μάθει όλες τις στρυφνές παραμέτρους και τη σύνταξή τους, καθώς και ένα περιβάλλον που ελέγχει τις εικονικές μηχανές που τρέχουν στο σύστημα.
Δουλειά για το σπίτι
Νομίζω ότι αρκετά εξαντλήσαμε τη θεωρία σε αυτό το post. Επειδή δεν μας έχει μείνει πολύς χώρος, θα μπούμε πιο αναλυτικά από την επόμενη βδομάδα στα βαθιά του KVM. Αυτή τη βδομάδα, θα χρησιμοποιήσουμε μόνο το VirtualBox για να πάρουμε μια ιδέα. Για το συγκεκριμένο demo, θα δουλέψω σε linux (Ubuntu 10.04), αλλά η διαδικασία είναι παρόμοια για οποιοδήποτε λειτουργικό.
Καταρχάς κατεβάζουμε το απαραίτητο .deb πακέτο προσθέτωντας στο αρχείο /etc/apt/sources.list τη γραμμή (με sudo gedit /etc/apt/sources.list):
deb http://download.virtualbox.org/virtualbox/debian lucid non-free
Έπειτα δίνουμε τις ακόλουθες εντολές σε μια κονσόλα, για να το εγκαταστήσουμε:
$ wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add –
$ sudo apt-get update
$ sudo apt-get install virtualbox-3.2
Με το πέρας της εγκατάστασης απλά τρέχουμε το VirtualBox από το μενού εφαρμογών. Κατεβάζουμε το .iso μιας διανομής linux που θέλουμε να δοκιμάσουμε ή των Windows οποιασδήποτε έκδοσης (δεν θέλω να ξέρω που το βρήκαμε 😉 ) ή ακόμα και ένα CD/DVD το οποίο είχαμε γράψει παλιά. Κάνουμε κλικ στο Storage, μετά κλικ στο εικονίδιο “+”, επιλέγουμε το καινούριο εικονικό Drive μας (με το όνομα Empty) και στο δεξί κομμάτι κάνουμε κλικ στο εικονίδιο φακέλου δίπλα από το CD/DVD device. Προσθέτουμε το CD μας και επιλέγουμε select. Τώρα είμαστε έτοιμοι να εγκαταστήσουμε το λειτουργικό μας, όπως και σε ένα κανονικό μηχάνημα.
Με το πέρας της εγκατάστασης, αφαιρούμε το CD device με τον ίδιο τρόπο, και αφού ξεκινήσει το νέο λειτουργικό προσθέτουμε τα VirualBox Additions. Αυτοί είναι μια σειρά από drivers για το εικονικό λειτουργικό που μας επιτρέπουν να έχουμε περισσότερες δυνατότητες και μια καλύτερη εμπειρία ενσωμάτωσης με το βασικό μας λειτουργικό (π.χ. μπορούμε να δουλεύουμε και στα δύο λειτουργικά χωρίς να κάνουμε capture το ποντίκι και το πληκτρολόγιο στο ένα ή στο άλλο, μπορούμε να αλλάζουμε το μέγεθος του παραθύρου από το βασικό μας λειτουργικό και να ανανεώνεται αυτόματα η ανάλυση του εικονικού κλπ.). Για να το κάνουμε αυτό, ενώ τρέχει η εικονική μας μηχανή, πηγαίνουμε στο μενού Devices και επιλέγουμε Install Guest Additions. Μετά την εγκατάσταση στο εικονικό λειτουργικό και την επανεκκίνησή του, είμαστε έτοιμοι να απολαύσουμε όλες τις δυνατότητες του Virtualization!
Υ.Γ. Στο επόμενο τεύχος θα δούμε πως κάνουμε τα παραπάνω με τη χρήση KVM, libvirt και virt-manager 🙂