Ναι αυτή ήταν η πρώτη σκέψη που έκανα όταν είπα πως θα χτίσω αυτό το PC και πλέον έγινε πραγματικότητα. Εγκατέστησα έναν Type 1 Hypervisor ώστε να μπορώ να εκμεταλλευτώ στο έπακρο τους πόρους του PC μου και να τρέχω διαφορετικά λογισμικά, να μάθω server configurations, containers και άλλες τεχνολογίες. Άλλωστε αυτός είναι ο σκοπός μου, να μάθω skills που θα μου χρησιμεύσουν στην εργασία μου αργότερα.
Ο Type 1 Hypervisor που εγκατέστησα είναι το Prxomox. Είναι ανοιχτού κώδικα, δωρεάν όμως το σημαντικότερο είναι ότι βασίζεται σε Linux. Οπότε, μπορώ από τη μία να μαθαίνω για Virtual Machines, Container κτλ αλλά παράλληλα να εξοικειώνομαι περισσότερο με τα Linux.
Η αρχική μου ιδέα ήταν να κάνω ένα VM (Virtual Machine) που θα έχει δυνατά χαρακτηριστικά, ώστε να το χρησιμοποιώ σαν το κρίως PC μου. Αυτό και έκανα! Του έδωσα 8 πυρίνες επεξεργαστή, 16GB RAM και επίσης του έδωσα πρόσβαση στην κάρτα γραφικών μου ώστε να μπορεί να ανοίγει μερικά παιχνίδια για την ‘ώρα του παιδιού’, να μπορώ να δω καμιά ταινία (αν και για ταινίες έχω σκεφτεί άλλο σύστημα πιο cool που θα σας το περιγράψω σε άλλο άρθρο, όταν το ολοκληρώσω! Υπομονή).
Εδώ να πω λίγα λόγια για το Proxmox. Είναι όπως είπα πιο πάνω ένας Type 1 Hypervisor (για όσους δε γνωρίζουν από Virtualization σας προτείνω ανεπιφύλακτα να εμβαθύνεται σε αυτή την τεχνολογία διότι όλο και περισσότερο εισέρχεται στην ζωή μας) και εγκαθιστάται σε ‘bare metal’ όπως λένε και στο χωριό μου. Bare metal σημαίνει ότι εγκαθιστάται επάνω στο Hardware ενός PC ή ενός server, σε αντίθεση με τους Type 2 που εγκαθίστανται επάνω σε κάποιο λειτουργικό σύστημα (OS). Το καλό με το Proxmox είναι ότι έχει Web UI, που σημαίνει ότι μπορώ να το διαχειρίζομαι εξ ολοκλήρου από κάποιον browser σε ένα άλλο PC ή laptop. Αυτό είναι εξεραιτικά ωραίο γιατί μπορώ να έχω διαφορετικά VMs για διαφορετικές δουλειές και να μπορώ να τα χειρίζομαι από διαφορετικά τερματικά! Ένα παράδειγμα είναι ότι μπορώ εγώ να παίζω ένα παιχνίδι στο Macbook μου, που θα είναι συνδεμένο με το gaming PC στον server ενώ ο αδερφός μου στο διπλανό δωμάτιο να βλέπει την αγαπημένη του σειρά από το δικό του laptop που θα είναι συδεμένο σε κάποια άλλη υπηρεσία του server! Αυτά για τις ευκολίες, πίσω στα ζόρικα… Το ότι είναι Linux based σημαίνει οτι για όποιο configuration θα πρέπει να δωθούν εντολές Linux, αυτό είναι καλό γιατί παράλληλα με τη διασκέδαση μπορώ να μαθαίνω σε περισσότερο βάθος τα Linux και πως αυτά ρυθμίζονται.
Εντολές για αφοσίωση GPU σε ένα VM
Εδώ θα παραθέσω τις εντολές που απαιτούνται για να γίνει το configuration για τη συγκεκριμένη εργασία και επίσης θα προσπαθήσω να εξηγήσω κάτω από κάθε μια τι κάνει.
###
Πριν ξεκινήσουμε θέλω να σημειωθεί ότι το πρώτο βήμα είναι να επισκεφτούμε το BIOS της μητρικής μας και να σιγουρευτούμε ότι η εντολή IOMMU είναι ενεργοποιημένη καθώς φυσικά και το virtualization, θα πρέπει και τα δύο να είναι Enable.
Επίσης, επειδή έχει αρκετό copy-paste είναι πιο χρηστικό να κάνετε κάποια ssh σύνδεση στον Proxmox server.
###
Προϋποθέσεις για να λειτουργήσει:
- Git
- Python3
- python3-pip
- dkms
- pve-headers
- build-sessential
- jq
Εντολές:
nano /etc/apt/sources.list
Δημιουργούμε το αρχείο sources.list που βρίσκεται στον apt φάκελο του etc, με τον κειμενογράφο nano. Αυτό το αρχείο το χρησιμοποιεί ο server για να κάνει τα apt updates του. Εμείς θα προσθέσουμε ένα ακόμη repository για να τσεκάρει όταν κάνει τα updates του.
deb http://download.proxmox.com/debian/pve buster pve-no-subscription
Προσθέτουμε το link στο αρχείο που δημιουργήσαμε. Και με CTRL-o (save), CTRL-x (βγαίνει από το αρχείο.)
apt update
Κάνουμε ένα update για να ανανεωθούν τα πακέτα του server. Και στην συνέχεια:
apt -y upgrade
Κάνουμε upgrade τυχών πακέτα που χρειάζονται.
apt -y install python3 python3-pip git build-essential pve-headers dkms jq
Εγκαθιστούμε τις προϋποθέσεις που εξέθεσα παραπάνω για να λειτουργήσει αυτό που πάμε να κάνουμε. Θα πάρει γύρω στα 2-5 λεπτά εξαρτάται το hardware μας.
pip3 install frida
Το Frida είναι ένα toolkit της Python που σου επιτρέπει να εισάγεις snippets από άλλες γλώσσες στον python κώδικά σου. Θα χρειαστεί κι αυτό.
git clone https://github.com/DualCoder/vgpu_unlock
Κατβάζουμε τη git repository για το vgpu unlock.
wget http://ftp.br.debian.org/debian/pool/main/m/mdevctl/mdevctl_0.81-1_all.deb
Κατεβάζω το αρχείο mdevctl.
chmod -R +x vgpu_unlock
Του δίνουμε τα κατάλληλα permissions, κάνουμε οτιδήποτε βρίσκεται μέσα σε αυτό το φάκελο executable.
dpkg -i mdevctl_0.81-1_all.deb
Κάνουμε extraction τα αρχεία με την μέθοδο dpkg. Και τέλος κάνουμε ένα
reboot
για να ξεκινήσει το σύστημα με τις αλλαγές που κάναμε ως τώρα. Αν σας πετάξει μην τρομάξετε όταν τελειώσει η διαδικασία του reboot θα επανέλθει η σύνδεση κανονικά.
Στη συνέχεια:
IOMMU Configuration
nano /etc/default/grub
Πηγαίνουμε στο αρχείο grub που βρίσκεται στο φάκελο default του etc χρησιμοποιώντας πάλι τον αγαπημένο μας κειμενογράφο nano.
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt”
– Ή –
GRUB_CMDLINE_LINUX_DEFAULT
=”quiet amd_iommu=on iommu=pt”
Παραθέτω δύο εντολές, εξαρτάται από τον κατασκευαστή του επεξεργαστή μας επιλέγουμε την ανάλογη εντολή για intel ή AMD. Πάλι με CTRL-o (save), CTRL-x (βγαίνει από το αρχείο.)
update-grub
Κάνουμε update grub για να πάρει τις αλλαγές που του κάναμε.
nano /etc/modules
Ξανά με τον nano ανοίγουμε το αρχείο modules του etc και κάνουμε copy-paste τις παρακάτω vfio modules:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
Πάλι με CTRL-o (save), CTRL-x (βγαίνει από το αρχείο.)
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
Δίνουμε κάποιες echo εντολές για να πούμε στον Proxmox να μη δώσει σημασία στα drivers του GPU μας αλλά να λάβει υπόψη του τις ρυθμίσεις που έχουμε κάνει εμείς.
update-initramfs -u
Κάνουμε ένα update στο αρχείο initramfs για να πάρει τις εντολές και τέλος:
reboot
Κάνουμε reboot για να αποθηκευτούνε οι αλλαγές. Κάπου εδώ τελειώσαμε το configuration μας και είμαστε έτοιμοι να πάμε να δημιουργήσουμε το VM μας.
Κατασκευή πρώτου VM (Windows 11)
Το πρώτο VM που κατασκεύασα ήταν αυτό που περιέγραψα πιο επάνω, που θα το έχω για main PC μου και καθημερινή χρήση. Σε αυτό συνάντησα μια δυσκολία όσων αφορά την αφοσίωση του GPU ώστε να μπορώ να παίζω κάποια παιχνίδια και να σηκώνει γενικά κάποιες εργασίες που απαιτούν την κάρτα γραφικών. Το καλό με τον τομέα της πληροφορικής είναι ότι για κάθε πρόβλημα που συναντάς είναι πολύ πιθανό να το έχει ήδη λύσει κάποιος άλλος και με το ανάλογο ψάξιμο η λύση αυτή είναι και δική σου. Έτσι λοιπόν βρήκα κι εγώ μερικούς οδηγούς για την αφιέρωση του GPU σε αυτό το VM, δε θα πω ψέματα ήταν επίπονη διαδικασία διότι συναντούσα για πρώτη φορά εντολές με configuration που έπρεπε να γίνει, επίσης το έφερα εις πέρρας σε ένα ζεστό διαμέρισμα τέλη Ιουνίου με αρκετή ζέστη και σαν να μην έφτανε αυτό την πρώτη φορά που έστησα όλο το configuration έκανα μια λάθος ρύμιση που μου ακύρωσε την κάρτα δικτύου του server και χάθηκε η σύνδεση με αποτέλεσμα να μην μπορώ να επεξεργαστώ τίποτα. Έκανα λοιπόν ξανά format και εγκατέστησα από την αρχή το λογισμικό και όλο το configuration για την αφιέρωση του GPU στο PC μου. Ενώ θα έπρεπε να νευριάσω το πήρα ψύχραιμα και το είδα σαν μια ευκαιρία για επανάληψη, οπότε και προχώρησα κανονικά από την αρχή!
Τέλος, θα ενημερώσω ότι το VM με τα Windos 11 λειτουργεί κανονικά όπως ήθελα και ανυπομονώ ήδη για το επόμενο μου project που θα έιναι να εγκαταστήσω την TrueNAS εφαρμογή ώστε να έχω το δικό μου cloud σπίτι μου! Ευχαριστώ που παρακολουθήσατε ως εδώ τις περιπέτειες μου στο χώρο της πληροφορικής, να είστε σίγουροι πως έρχονται ακόμη πιο cool πράγματα και τεχνολογίες που θα μάθω και θα γράψω τα αντίστοιχα άρθρα!! Ως τότε να είστε καλά και να μαθαίνεται συνεχώς!!!