Εικονικές μηχανές με το virt-manager - Μέρος 3ο

Εικονικές μηχανές με το virt-manager - Μέρος 3ο

Στο προηγούμενο και το προ-προηγούμενο μέρος…

Ειδαμε καποιες βασικες εννοιες και πως δημιουργούμε μια πολυ απλή εικονική μηχανή. Σε αυτο το μέρος θα δουμε το περιβάλλον του virt-manager και τις δυνατοτητές του με καποιες λεπτομέριες. Θα δούμε πως θα επιτυχουμε αμφίδρομη αντιγραφη/επικολληση, αλλαγή μεγέθους της απεικόνησης της εικονικης μας μηχανης, και διαμοιρασμο αρχειων μεταξυ της εικονικης μηχανής και του μηχανηματος-οικοδεσπότη (host). Θα δούμε επίσεις πως ενεργοποιουμε το UEFI στις εικονικές μας μηχανές (το SecureBoot θα το αφήσουμε για επομενο μέρος της σειρας μας) και άλλα πολλά.

Πριν αρχίσουμε, να υπενθυμήσω οτι τα screenshots του virt-manager που δειχνω εδω ειναι στα αγγλικα οποτε εαν δεν καταλαβαινετε τι λεει σε καποιο σημειο πειτε μου και θα το μεταφρασω ή αλλιως αν χρειαστειτε μεταφραση εκεινη την στιγμη μπορειτε να παρετε μια ιδεα απο το Google Translate. Αυτο γίνεται διότι σε οτι διανομη ή λειτουργικο δεν έχει μεταφραση στην Ελληνική (ή οποιαδηποτε άλλη) γλώσσα η προεπιλεγμένη γλώσσα συνηθως ειναι τα Αγγλικα.

Επίσεις μια συγνώμη εκ των προτέρων για το μέγεθος αυτου του αρθρου Ίσως είναι λίγο πιο μεγάλο από τα προηγούμενα μέρη. Μια ακομα συγνωμη για την καθηστερηση που υπηρξε… η ζωη μας ριχνει καμια φορα συμαντικα εμποδια μπροστα μας και πολλα απο αυτα χρειαζονται απερισπαστη την προσοχη μας. Και ετσι καποια πραγματα οπως το 3ο μερος αυτο του οδηγου πανε (πολλες φορες αρκετα) πισω.

Προετοιμασια γεφυρωμενης δυκτιωσης (bridged networking)

Για να ενεργοποιησουμε την δικτυακη γεφυρα μεταξυ του host και των εικονικων μηχανων μας ετσι ωστε να μπορουμε να εχουμε προσβαση σε αυτες με περισσοτερες δυνατοτητες πρεπει να τρεξουμε το virt-manager με το sudo απο μεσα απο ενα τερματικο
δηλαδη:

sudo virt-manager

Μολις τρεξουμε το virt-manager κανουμε διπλο κλικ στο QEMU/KVM και στο παραθυρο με τις λεπτομεριες της συνδεσης (Connection details) (Εικονα Networking1) κανουμε ενα κλικ στο παραθυρο των εικονικων δικτύων (virtual networks) για να ενεργοποιησουμε το προεπιλεγμενο (default) γεφυρομενο δικτυο πατωντας το κουμπι που μοιαζει με το play απο τα παλια μας video οπως το βλεπετε στην παρακατω απεικονηση (εικονα Networking2).:

Για να μπορεσει ο χρηστης που ανοικει στα αναλογα γκρουπ (που αναφεραμε πιο πανω) να χρησιμοποιησει την γεφυρωμενη δυκτιωση πρεπει να ορισουμε στο συστημα να επιτρεψει τετοια χρηση. Για να γινει αυτο πρεπει να δημιουργησουμε ενα υποφακελο με το ονομα qemu μεσα στον φακελο /etc και εκει να δημιουργησουμε ενα αρχειο με το ονομα bridge.conf και να το επεξεργαστουμε. Δηλαδη:

Για να δημιουργησουμε τον φάκελο qemu μέσα στον φάκελο /etc, γραφουμε:

sudo mkdir /etc/qemu

Για να δημιουργησουμε το αρχειο bridge.conf μεσα στον φακελο /etc/qemu, γραφουμε:

sudo touch /etc/qemu/bridge.conf

Για να επεξεργαστουμε το αρχειο bridge.conf

sudo nano /etc/qemu/bridge.conf

Μεσα στο αρχειο bridge.conf γραφουμε την εξης γραμμη:

allow virbr0

και μετα σωζουμε τις αλλαγες μας στο αρχειο μας (CTRL-O και Enter) και βγαινουμε απο τον επεξεργαστη κειμενων (CTRL-X).

Ενα ακομα βημα που πρεπει να κανουμε για την γεφηρομενη δικτυωση ειναι να δωσουμε την εξης εντολη:

sudo chmod 4755 /usr/lib/qemu/qemu-bridge-helper

Η εντολη αυτη αλλαζει τα δικαιωματα χρησης της συγκεκριμενης εφαρμογης που ειναι υπευθυνη να βοηθησει το QEMU σε θεματα δυκτιωσης. Οταν μας παρουσιαζεται προβλημα στην χρηση της γεφυρομενης δυκτιωσης με το virt-manager αυτη η εντολη ειναι απο τις βασικες που θα πρεπει να προσπαθησουμε για να λυσουμε το προβλημα μας.

Αυτες οι κινησεις γινονται για να εχουμε την δυνατοτητα να χρησιμοποιησουμε γεφυρομενη δυκτιωση στις εικονικες μας μηχανες και γινονται μονο μια φορα και δεν χρειαζεται να τις ξανακανουμε. Γιατι ομως; Υπαρχουν περιπτωσεις που η γεφυρωμενη δυκτιωση ειναι απαραιτητη και για καποιες εφαρμογες η καλυτερη λυση. Η διαφορα της γεφυρομενης δικτυωσης με την δικτύωση κατάστασης χρήστη ειναι οτι δημιουργηται στον Host ενα εικονικο δικτυο που μας επιτρεπει να εχουμε προσβαση στις εικονικες μηχανες που το χρησιμοποιουν μεσω SSH ή αλλων υπηρεσιων/πρωτοκολλων.

SPICE … λίγο, έτσι για τη γεύση

Σε αυτη την περιπτωση SPICE δεν σημαινει μπαχαρικό αλλά ενα πρωτόκολλο επικοινωνιας ειδικα σχεδιασμενο για εικονικες μηχανες (). Το SPICE επικοινωνει οχι μονο με το υποσυστημα γραφικών αλλα και με αλλα υποσυστηματα… οπως ηχου, USB και αλλων υποσυστηματων. Για να υπαρχει καλητερη ενσωματωση των εικονικων μηχανων το πρωτοκολλο ειναι “σπασμενο” σε μερικα κομματια. Για το γραφικό περιβάλλον υπαρχει ειδικος driver που εξομειώνει καρτα γραφικών με το ονομα QXL (το ονομα του πακετου σε διανομες βασισμενες στο Debian ειναι xserver-xorg-video-qxl). Υπαρχουν δυο προγραμματα ατζεντηδες, το spice-vdagent και το qemu-guest-agent που διακανονιζουν την επικοινωνια μεταξυ εικονικης μηχανης και κανονικου υπολογιστη. Σε αυτη την επικοινωνια μπαινουν μεσα και οι διαφορες συσκευες τυπου virtio (εικονικο πληκτρολογιο,ποντικι και καρτα δυκτιου) καθως και οι USB συσκευες.

virtιο-win a’la Virtualbox Guest Additions

Για εικονικές μηχανες που σαν λειτουργικο συστημα εχουν τo Microsoft Windows (7,8,8.1,10) το virt-manager εχει το virtio-win. Ειναι το αντιστοιχο των Guest Additions του γνωστου VirtualBox. Το βρήσκετε στην εξής διεύθυνση

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso

και ερχεται σε μορφη ISO. Μπορειτε να το κατεβασετε να το συμπεριλάβετε στο εικονικό CD/DVD της εικονικής σας μηχανής και οταν μπείτε στα Windows (στην εικονική σας μηχανη), μπορειτε να δειτε τα περιεχόμενα του ISO αρχειου στον οδηγό D: Απο κει μπορείτε να κανετε εγκατάσταση το αρχειο virtio-win-gt-x64.msi (για 64άμπιτα Windows ) ή το virtio-win-gt-x86.msi (για 32άμπιτα Windows).

Guest Additions για το GNU/Linux

Αντιστοιχο του Guest Additions ISO οπως προανεφερα, αλλα για το GNU/Linux δεν υπαρχει σε ISO μορφη αλλα οτι χρειαζομαστε για να εχουμε καλη ενσωμάτωση μεταξη host και εικονικως μηχανών, υπαρχει σε μορφη βοηθητικών πακέτων. Για τις εικονικες μηχανες που στηριζονται στο Debian τα πακετα που πρέπει να εγκατασταθουν σε καθε εικονικη μηχανη μου δημιουργουμε ειναι το spice-vdagent και το qemu-guest-agent.

Με την εντολη:

sudo apt-get install spice-vdagent qemu-guest-agent

τα κατεβαζουμε και τα εγκαθηστουμε και τα δυο. Υποψιν. Αυτα τα δυο πακετα ειναι ΜΟΝΟ για τις εικονικες μηχανες που φτιαχνουμε. Κατα την διαρκεια της εγκαταστασης ισως να εγκατασταθουν και αλλα πακετα-εξαρτησεις (αναλογα την διανομη).

Αμφιδρομη αντιγραφη/επικόλληση

Για να κανουμε αντιγραφη επικολληση κειμενου μεταξυ του host και της εικονικης μας μηχανης δεν χρειαζεται να κανουμε τιποτα. Δουλευει εξω-απ’το-κουτι ή out-of-the-box οπως λένε και οι αγγλόφωνοι φιλοι μας. Το ιδιο συμβαινει και με την αντιγραφη και επικόλληση εικόνων και απο τις δυο μεριές. Για αυτή τη λειτουργεία πρεπει να ειναι εγκατεστημενα στην εικονικη μας μηχανη. τα δυο προαναφερθεντα πακετα, spice-vdagent και qemu-guest-agent.

virt-viewer, Remmina και αλλα προγραμματα

Ενα απο τα πλεονεκτήματα απο την χρήστη του SPICE στις εικονικές μας μηχανές ειναι οτι μπορούμε να χρησιμοποιήσουμε κατι αλλο εκτώς απο τον virt-manager για να εχουμε πρόσβαση στις εικονικές μας μηχανές. Ενα απο αυτά τα προγράμματα ειναι το virt-viewer που υποστιρίζει πλήρως το πρωτόκολλο του SPICE. Ενα άλλο πρόγραμμα που μας βοηθάει να εχουμε πρόσβαση σε εικονικές μηχανες και υποστηρίζει το SPICE ειναι το Remmina. Σε αντίθεση με το virt-viewer το Remmina υποστηρίζει το πρωτόκολλο SPICE μεσω plugin.

Διαμειρασμος αρχειων σε στυλ GNU/Linux

Αφου εγκαταστησουμε το λειτουργικο συστημα της εικονικης μας μηχανης θα πρεπει τωρα να δουμε πως μπορουμε να μετακινησουμε αρχεια μεταξύ της εικονικης μας μηχανής και του host.

Ο πρώτος εύκολος τροπος ειναι απλος. Κανουμε drag & drop αρχεια απο τον host στην εικονικη μηχανη. Και δουλευει χωρις σκέψη απο αυτη την κατευθυνη. Αλλα το αντίθετο ομως (απο την εικονικη μηχανη προς τον host δεν δουλευει. Δηλαδη δεν γινεται να κανουμε drag & drop απο την εικονικη μηχανη στον host.

Ενας ευκολος εναλλακτικός τροπος ειναι να εγκαταστησουμε στον host εναν SSH Server (πχ openssh-server ή dropbear) ή να κανουμε χρηση καποιου αλλου SSH server στο δυκτιο μας και μετα νσ συνδεθουμε απο την εικονικη μας μηχανη στον server που θελουμε (αρκει να ειναι προσβασιμος στο εσωτερικό μας δύκτιο. Μα ετσι απλα; Ναι. και με την γεφυρωμενη δικτυωση (bridged networking) αλλα και με την δικτυωση καταστασης χρηστη (usermode networking) οι υπηρεσιες που τρεχουν στον host ειναι προσβασιμες απο τις εικονικες μηχανες. Το αντιθετο ισχυει μονο για την γεφυρωμενη δικτυωση (bridged networking). Στην δικτυωση καταστασης χρηστη (usermode networking) πρεπει να κανουμε ενα port forward για την εικονικη μας μηχανη (περισσοτερα παρακατω).

Διαμοιρασμος αρχειων για εικονικες μηχανες με Windows

Λοιπον. Κατα πασα πιθανοτητα θα χρειαστει ειτε για λογους εργασιακους ειτε για λογους του οτι δεν υπαρχει αντιστοιχο προγραμμα με αυτο που θελουμε στo GNU/Linux ιδιως οταν εχουμε συνηθησει μερικα πραγματα στα Windows θα θελησουμε σε καποια στιγμη να τα κανουμε εγκατασταση σε μια εικονικη μηχανη. Για να μπορουμε να μεταφερουμε αρχεια απο και προς την εικονικη μας μηχανη θα πρεπει να εχουμε καποιους κοινους φακελους ή ενα δικτυακα διαμοιρασμενο εικονικο δισκο. Συνηθος για να γινει κατι τετοιο θα πρεπει να μεταξυ του host που θα ειναι GNU/Linux και της εικονικης μας μηχανης με τα Windows, θα πρεπει να κανουμε εγκατασταση και ριθμηση εναν Samba Server στον host ή σε καποιο μηχανιμα στο εσωτερικο μας δικτυο.

Η δικια μου προταση ειναι να μην ασχοληθουμε καν με το Samba αλλα να παμε με την λυση του SSH. Η εγκατασταση ενος SSH Server στον host ειναι μια απλη υποθεση. Για να εγκαταστησουμε εναν SSH server θα πρεπει να κατεβασουμε και να εγκαταστησουμε ενα απο τα παρακατω πακετα: ειτε το openssh-server ειτε το dropbear. Μολις γινει η εγκατασταση και το ρυθμησουμε οπως θελουμε (δηλαδη αλλαξουμε ports και το ριθμησουμε να δεχεται μονο συγκεκριμενους χρηστες και χρηστες που ανοικουν σε ενα συγκεκριμενο group αν θα κανει ταυτοποιηση του χρηστη μονο με SSH κλειδια και οχι με κωδικους ) τοτε κατεβαζουμε στην εικονικη μας μηχανη το WinFSP (που το βρισκουμε εδω: GitHub - billziss-gh/winfsp: Windows File System Proxy - FUSE for Windows ) το SSHFS-Win (που το βρισκουμε εδω: GitHub - billziss-gh/sshfs-win: SSHFS For Windows ) και το SSHFS-Win-Manager που θα επιτρεψει να συνδεθουμε με τον SSH Server του host και αυτη η συνδεση θα εμφανισει σαν ενα Network Drive ( το βρισκεται εδω: GitHub - evsar3/sshfs-win-manager: A GUI for SSHFS-Win (https://github.com/billziss-gh/sshfs-win) )

Πρωτα θα κανουμε εγκατασταση το WinFSP και το SSHFS-Win. Κατα την εγκατασταση και τα δυο προγραμματα ειναι πολυ απλα και δεν χρειαζεται να αλλαξουμε κατι στις προεπιλεγμενες ριθμησεις τους. Το SSHFS-Win-Manager ειναι εξισου απλο στην εγκατασταση. Αφου τελειωσει η εγκατασταση του SSHFS-Win-Manager μπορουμε πια να ριθμησουμε την συνδεση με τον SSH Server στο μηχανιμα που θελουμε να αποθηκευσουμε και απο τον οποιο θελουμε να παρουμε αρχεια. Πιο κατω θα δειτε μερικα screenshots για να δειτε ποσο ευκολο ειναι να χειριστουμε το SSHFS-Win-Manager.

Αυτοματη αλλαγη αναλυσης της επιφανειας εργασιας της εικονικης μηχανης

Εδω υπαρχουν και καλα νεα και κακα νεα. Ναι γινεται αυτοματη αλλαγη του μεγεθους της επιφανειας εργασιας της εικονικης μηχανης αλλα ειναι μεγεθυνση και σμικρινση (scaling) οχι κανονικη αλλαγη της αναλυσης. Δυστηχως δεν γινεται με τον ιδιο τροπο που γινεται στο Virtualbox και στο VMWare ή σε καποια αλλη πλατφορμα εικονικων μηχανων. To Scaling γινεται απο το προγραμμα που χρησιμοποιουμε για να δουμε την εικονικη μας μηχανη δηλαδη ειτε το ιδιο το virt-manager ειτε το virt-viewer και το remmina. Για το καθε προγραμμα γινεται λιγο διαφορετικα.

Υποστήρηξη επιτάχυνσης γραφικών

Εδω λιγο κολλάει το θεμα μας. Υπαρχουν τροποι για υποστήρηξη επιτάχυνσης γραφικών σε εικονικες μηχανες με το virt-manager αλλα θελει λιγο δουλεια και προσπαθεια. Για αυτο το σκοπο εχει δημιουργηθει το Virgl ενας ειδικος driver που δινει στην εικονικη μας μηχανη δυνατοτητες επιταχυνσης γραφικων. Βεβαια δεν θα δουμε επιδωσεις μιας Nvidia RTX-3090 σε μια εικονικη μηχανη εκτώς εαν την κανουμε να δουλεψει σαν PCI-Passgthrough αλλα αυτο ειναι αλλο κεφαλαιο (που ισως αργησει να ερθει μιας και δεν εχω μηχανιματα που υποστηριζουν PCI-Passthrough).

Virsh και οποιος αντεξει

Το virsh ειναι ενα εργαλειο της γραμμης εντολων (για τους fan του τερματικου) που μπορει να χρησιμοποιηθει για να ελεγξει μια εικονικη μηχανη.

Για να δουμε ποιες εικονικες μηχανες τρεχουν και ποιες ειναι κλειστες στο τερματικο μας γραφουμε:

virsh list --all

Και λογικα πρεπει να παρουμε ενα αποτελεσμα παρομοιο με το παρακατω:

 Id   Name                    State
----------------------------------------
 -    BullseyeXFCE            shut off
 -    Buster-Openbox-Hotrod   shut off
 -    BusterKDE               shut off
 -    Debian10LXQt            shut off
 -    Mint20MATE-VM           shut off
 -    MXLInuxVM               shut off
 -    win10                   shut off
 -    Win7VM                  shut off

Για να ξεκινησουμε την εικονικη μηχανη ΜΧLinuxVM τοτε στο τερματικο μας παλι γραφουμε:

virsh start MXLΙnuxVM

Και τωρα το αποτελεσμα της:

virsh list --all

ειναι

 Id   Name                    State
----------------------------------------
 1    MXLInuxVM               running
 -    BullseyeXFCE            shut off
 -    Buster-Openbox-Hotrod   shut off
 -    BusterKDE               shut off
 -    Debian10LXQt            shut off
 -    Mint20MATE-VM           shut off
 -    win10                   shut off
 -    Win7VM                  shut off

Για να κλεισουμε μια εικονικη μηχανη γραφουμε το παρακατω στο τερματικο μας:

virsh destroy MXLInuxVM

Για να κανουμε επανεκκινηση σε μια εικονικη μηχανη που για καποιο λογο μας εχει κολλησει τοτε κανουμε το εξης κολπο:

virsh destroy MXLInuxVM;virsh start MXLΙnuxVM

Και με παραπλησιο τροπο μπορουμε αν χρειαζομαστε να ξεκινησουμε παραπανω απο μια εικονικες μηχανες.

Για να αλλαξουμε κατι σε μια απο τις εικονικες μας μηχανες (πχ την MXLInuxVM) μπορουμε να γραψουμε το εξης:

virsh edit MXLInuxVM

με το που θα πατησουμε Enter για να εισαγουμε την εντολη στο τερματικο θα ανοιξει ο κειμενογραφος του τερματικου και θα μας δειξει τα στοιχεια της εικονικης μηχανης σε διαμορφοση XML, Εκει μπορουμε να κανουμε τις αλλαγες μας πχ ποσους πυρινες θελουμε να δοσουμε στην εικονικη μας μηχανη ή ποση μνημη RAM και να σωσουμε τις αλλαγες. Καποιες απο αυτες μπορουν να ενεργοποιηθουν αμεσως καποιες αλλες χρειαζεται να γινει επανεκκινηση στην εικονικη μηχανη.

Port Forward ή αλλιως ανοιγοντας τρυπες στο τοιχος.

Οταν δημιουργουμε μαι εικονικη μηχανη με το virt-manager ειναι συνηθως διαχωρισμενη απο τον host. Συνηθως δεν μπορουμε να εχουμε προσβαση σε διαφορες υπηρεσιες οπως το SSH ή το RDP που μπορει να θελουμε ή να χρειαζομαστε. Για αυτο θα πρεπει να δημιουργησουμε ενα port forward. Τι ειναι αυτο; Μια διαδικασια κατα την οποια οι υπηρεσιες της εικονικης μηχανης ειναι προσβασιμες απο τον host. Ειναι συμαντικο να προσεξουμε την ρoή των πληροφοριων σε αυτη την περιπτωση (κανουμε port forward για να μπορει να εχει προσβαση ο host στην εικονικη μηχανη οχι το αναποδο). Για ενα επιτυχες port forward θα πρεπει να ξερουμε την TCP ή UDP θυρα της υπηρεσιας την αναλογη θυρα που θελουμε να χρησιμοποιησουμε στον host για να μην εχουμε προβληματα με υπηρεσιες που τρεχουν ηδη στον host.

Για port forwards δεν υπαρχει γραφικο περιβαλλον οποτε πρεπει στις εικονικες μηχανες να γινει ειτε αλλαζοντας τις ρυθμισεις της εικονικης μηχανης (που ειναι λιγο περιπλοκο για πρωτη επαφη) ειτε με την παρακατω εντολη:

virsh qemu-monitor-command --hmp MXLInuxVM 'hostfwd_add ::2222-:22'

Τι κανει η παραπανω εντολη; Εν ολιγις… δινει εντολη στην εικονικη μηχανη μας (την μηχανη με ονομα MXLInuxVM) να ανακατευθυνει τις πληροφοριες που προοριζονται για την TCP θυρα 2222 του host στην TCP θυρα 22 της εικονικης μηχανης.

Επιλογος

Θα μπορουσα να γραψω ακομα και αλλα καταγραφοντας τις πολλες δυνατοτητες του virt-manager και των εικονικων μηχανων με το QEMU/KVM/libvirt συστημα. Μπορει να μην ειναι ενα εξολοκληρου συστημα οπως αλλα συστηματα εικονικων μηχανων που ειναι λιγο ποιο “γυαλισμενα” αλλα οτι χανουμε απο ευκολεια κερδιζουμε σε δυνατοτητες.

Καθως ο καιρος πλησιαζει για να αλλαξει η σταθερη εκδοση του Debian (το Debian 11 ειναι σχεδον ετοιμο να γινει η επομενη σταθερη εκδοση) καποια πραγματα θα εχουν σηγουρα αλλαξει. Εαν υπαρχουν λαθη, παραλειψεις ή καποια πραγματα ειναι λιγο “μπαγιατικα” πειτε μου και θα προσπαθησω να ανανεωσω το αρθρο.

Ελπιζω η σειρα αυτη να βοηθησε στο να δειτε οτι το virt-manager δεν υστερει σε κατι απο τα “μεγαλα” ονοματα στον χωρο των συστηματων εικονικων μηχανων

6 «Μου αρέσει»