Wednesday, December 23, 2020

Γνωριμία με τον LXD σε ένα laptop, στην εποχή του Cloud και του Ανοιχτού Κώδικα...

...και, δυστυχώς, του κορωνοϊού...

"Τον τελευταίο (τον) καιρό" έψαχνα νά βρω τρόπο να μπορώ:

  1. να κατεβάζω, να ελέγχω και να διαμορφώνω λογισμικό και (web) εφαρμογές ανοιχτού κώδικα που θα μπορούσαν να χρησιμοποιηθούν για να διευκολύνουν/επιτρέψουν τη (συνεργατική) εργασία ή/και εργασία από απόσταση, τη δημιουργία portal και ιστοσελίδων κλπ (π.χ. Apache Guacamole, dokuwiki, NextCloud, dspace, ...),
  2. να συντηρώ και να αναβαθμίζω (web) εφαρμογές που έχουν υλοποιηθεί με λογισμικό ανοιχτού κώδικα και είναι ήδη εγκατεστημένες σε (εικονικά και μή) μηχανήματα και
  3. να αναπτύσσω, όταν βρίσκω χρόνο, (web κυρίως) εφαρμογές

στο laptop μου, διαχωρίζοντας και απομονώνοντας όμως τόσο την, μη μόνιμη τις περισσότερες φορές, εγκατάσταση του απαιτούμενου λογισμικού λειτουργίας των παραπάνω (web servers, βάσεις δεδομένων, πακέτα γλωσσών προγραμματισμού κλπ) από το λειτουργικό σύστημα (Lubuntu focal (20.04)) του laptop, όσο και την ίδια τη λειτουργία τους από τις άλλες δραστηριότητες της καθημερινότητας στον προσωπικό υπολογιστή.

Η προφανής (στην εποχή του cloud) λύση (που παρέχεται από τα γνωστά προγράμματα εικονικοποίησης K(ernel)V(irtual)M(achine), VirtualBox, VMware) είναι τα εικονικά μηχανήματα, με τα (επίσης) γνωστά όμως προβλήματα κατασπατάλησης και κακής διαχείρισης πόρων του υπολογιστή φιλοξενίας (δέσμευση CPU και μνήμης ακόμα και σε κατάσταση αδράνειας των φιλοξενούμενων μηχανημάτων κλπ, κλπ). Υπάρχει πάντα και η λύση του Docker, αλλά, όπως ανέφερα από την αρχή, στόχος μου δεν ήταν να ασχοληθώ σε αυτή τη φάση με τη συστηματική και αυτοματοποιημένη (σε επίπεδο DevOps) ανάπτυξη λογισμικού. Γνωρίζοντας επομένως τα μεγάλα μειονεκτήματά της "προφανούς" λύσης, επέκτεινα (με κόστος 60 ε υ ρ ώ) τη μνήμη του laptop από 8 σε 16GB (τη μέγιστη δυνατή για το συγκεκριμένο laptop), ενώ δυστυχώς, ψάχνοντάς το, κατέληξα στο ότι δεν γινόταν αναβάθμιση σε ισχυρότερη CPU (και κυρίως με περισσότερους πυρήνες που ήταν το ζητούμενο).
 
Ξεκινώντας επομένως με τις εικονικές μηχανές, στην πορεία προέκυψε ένα πρόβλημα με 2 ιστοσελίδες που είχαν αναπτυχθεί σε WordPress και concrete5 αντίστοιχα, εγκατεστημένες στο ίδιο εικονικό μηχάνημα Ubuntu 14.04. H απαίτηση ήταν να αναβαθμιστεί το WordPress στην τελευταία έκδοση χωρίς να επηρεαστεί όμως από την αναβάθμιση αυτή η λειτουργία της ιστοσελίδας concrete5, στην οποία άλλωστε δεν είχαμε πρόσβαση (κωδικούς κλπ). Η αναβάθμιση της ιστοσελίδας WordPress απαιτούσε την τελευταία έκδοση της php και o πιο εύκολος τρόπος αναβάθμισης της php απαιτεί διαδοχικές αναβαθμίσεις του Ubuntu από την 14.04 στην 16.04, από εκεί στην 18.04 φτάνοντας στην 20.04. Όταν τελείωσε (επιτυχώς) η αναβάθμιση της ιστοσελίδας WordPress δεν δούλευε η ιστοσελίδα concrete5! Η προφανής λύση και σε αυτή την περίπτωση θα ήταν ο διαχωρισμός των ιστοσελίδων σε 2 εικονικά μηχανήματα. Η ενδεικνυόμενη λύση βέβαια είναι η εγκατάσταση της ιστοσελίδας concrete5 σε έναν container εφαρμογών (π.χ. Docker), o οποίος θα τρέχει στο ίδιο, αναβαθμισμένο, εικονικό μηχάνημα.
 
Κάπως έτσι, θεωρώντας ότι δεν μπορώ να το αποφύγω, ξεκίνησα να μάθω τα βασικά του Docker και, όντας "οπαδός" του Ubuntu, παράλληλα αναζήτησα κάποια στιγμή στο διαδίκτυο "ubuntu containers" για να δω αν η Canonical αναπτύσσει κάτι σχετικό με containers εφαρμογών. Και τότε βρήκα αυτή την ιστοσελίδα η οποία ανέφερε τον L(inu)XD(aemon), τον ανοιχτού κώδικα, εύχρηστο και πρακτικό διαχειριστή  L(inu)XC(ontainer)s συστημάτων αλλά και εικονικών μηχανών Linux. Περισσότερα μπορείτε να διαβάσετε στο σχετικό whitepaper της Canonical.

Για την εκμάθηση και δοκιμή του LXD εγκαταστάθηκαν σε 3  LXContainers Ubuntu 20.04 (focal)
  • τo "clientless remote desktop gateway" ανοιχτού κώδικα Apache Guacamole
  • το dokuwiki, λογισμικό ανοιχτού κώδικα που επιτρέπει τη συνεργατική σύνταξη wiki και 
  • το DBMS ανοιχτού κώδικα PostgreSQL με τη (διαδικτυακή πλέον) εφαρμογή διαχείρισής του pgAdmin4 (μόνιμη εγκατάσταση αυτή, αφού προορίζεται να χρησιμοποιηθεί στην ανάπτυξη web εφαρμογών)
Επιπλέον, για τον έλεγχο της λειτουργίας του Guacamole, δημιουργήθηκε άλλος ένας LXContainer Ubuntu 20.04 στον οποίο προστέθηκε το ("λιτό και κομψό") παραθυρικό περιβάλλον Ubuntu Budgie (ήθελα να το δω κι αυτό κάποια στιγμή) και το xrdp για την επικοινωνία με το Guacamole μέσω του πρωτοκόλλου rdp. Συνολικά, χρειάστηκαν δύο, μη εντατικά οκτάωρα, το μεγαλύτερο μέρος των οποίων αναλώθηκε στην εγκατάσταση και δοκιμή των εφαρμογών στους containers παρά στην εκμάθηση (των βασικών) του LXD/LXC.
 
Ονόματα containers και εφαρμογές/λογισμικό που περιλαμβάνουν: 1) dev1: Ubuntu Budgie και xrdp, 2) guacserver: Apache Guacamole, 3) pg1: PostgreSQL και pgAdmin4, 4) prod1: dokuwiki   

Το αποτέλεσμα είναι εντυπωσιακό από κάθε άποψη (δείτε για παράδειγμα πιο κάτω τα "Στιγμιότυπα"). Οι 4 containers καταλαμβάνουν περίπου 2.5GB στο δίσκο, ενώ CPU και μνήμη χρησιμοποιούνται μόνο όταν απαιτείται από τις εφαρμογές των containers, επιτρέποντας την, χωρίς περισπασμούς και προσκόμματα, λειτουργία του προσωπικού υπολογιστή και άρα την εργασία (ή όποια άλλη δραστηριότητα)  αυτού που τον χρησιμοποιεί. Θα μπορούσε κάποιος να πει ότι με αυτή τη χρηστή και τόσο αποδοτική διαχείριση υπολογιστικών πόρων από το σύστημα LXD/LXC, σπατάλησα χωρίς λόγο 60 ε υ ρ ώ για την επέκταση της μνήμης του laptop και ίσως να είχε δίκιο αν στο υπολογιστή μου δεν υπήρχε ανάγκη να χρησιμοποιώ και τα "αδηφάγα" Windows 10, εγκατεστημένα σε εικονικό μηχάνημα του VirtualBox, για διάφορες δραστηριότητες της καθημερινότητας και κυρίως για τη σύνταξη κειμένων και τη δημιουργία παρουσιάσεων και υπολογιστικών φύλλων σε συνεργασία με άλλους, φίλους και συνεργάτες. Σύμφωνα με τα τελευταία νέα πάντως, στην Canonical ετοιμάζουν λύση και για αυτό το "πρόβλημα"! Και, φυσικά, υπάρχουν ήδη διαδικτυακές εφαρμογές ανοιχτού κώδικα για τη συνεργατική σύνταξη κειμένων/παρουσιάσεων/φύλλων όπως το NextCloud σε συνδυασμό με το Collabora ή το OnlyOffice.
 

Στιγμιότυπα

 
Apache Guacamole στον container guacserver

 
Μετά την είσοδο στο Guacamole: Διάλογος Login του xrdp στoν container dev1

 
Μετά την είσοδο (login) στον container dev1: Ubuntu Budgie!


 
 
dokuwiki στον container prod1



pgAdmin4 στον container pg1

To laptop

 
Επεξεργαστής: Intel Core i7-4500U (1.80 GHz έως 3GHz σε Turbo Mode, 2 Cores, 4 Threads) με 4 MB L3 cache
Οθόνη: 15.6'' HD LED
Μνήμη: 8GB (2 x 4GB) DDR3L 1600 MHz
Σκληρός Δίσκος: 1TB SATA (5400rpm)
Προεγκατεστημένο Λ/Σ: DELL Ubuntu Linux 12.04 SP1
Έτος αγοράς: 3/2014

Επεκτάσεις / αντικαταστάσεις


Μνήμη: 16GB (2 x 8GB) DDR3L 1600 MHz
Σκληρός Δίσκος: 1TB 2.5'' SATA 6 Gb/s Interface, συμβατό με SATA 3 Gb/s & SATA 1.5 Gb/s interface, Μνήμη Cache: 1 GB Low Power DDR4 SDRAM
Eγκατεστημένο Λ/Σ: Lubuntu Linux 20.04 (focal)