ΕΛ/ΛΑΚ | creativecommons.gr | mycontent.ellak.gr |
freedom

GSoC 2019: Expanding NextCloudPi

Τα τελευταία χρόνια έχει μπει στη ζωή μας η έννοια του cloud. Πολλές είναι οι υπηρεσίες που μας προσφέρουν δωρεάν χώρο για να αποθηκεύσουμε τα αρχεία μας. Δεν γνωρίζουμε όμως ποιος έχει πρόσβαση σε αυτά και πού είναι αποθηκευμένα. Εδώ έρχεται να δώσει λύση το Nextcloud, μια ανοικτού κώδικα λύση εγκατάστασης ενός ιδιωτικού server όπου αποθηκεύετε τα αρχεία σας σε δικό σας χώρο.

Είναι ωστόσο γεγονός πως η εγκατάσταση του Nextcloud ίσως αποτελεί δύσκολο έργο για πολλούς. Το NextCloudPi, ένα επίσημο εργαλείο του Nextcloud, έχει στόχο να απλοποιήσει αυτήν την διαδικασία, έχοντας όλες τις προαπαιτήσεις του Nextcloud προεγκατεστημένες και ρυθμισμένες, ώστε να κάνει τη ζωή μας πιο εύκολη.

Στα πλαίσια του GSoC και υπό την επίβλεψη της ΕΛ/ΛΑΚ, έγινε μια προσπάθεια επέκτασης του NextCloudPi, τόσο με καινοτόμες ιδέες όσο και με χαρακτηριστικά που έχουν ζητηθεί από την αντίστοιχη κοινότητα και θα το καταστήσουν πιο δημοφιλές.

Κάποια από τα χαρακτηριστικά που υλοποιήθηκαν είναι τα παρακάτω:

Travis CI

Το NextCloudPi δεν είχε ακόμα προσαρμοστεί στην τεχνολογία του CI/CD. Στα πλαίσια του GSoC έγινε η προσαρμογή των docker images κάθε αρχιτεκτονικής σε CI. Χρησιμοποιήθηκε το σύστημα Travis CI μέσα από το οποίο παράγονται τα docker images, εκτελούνται μερικά tests πάνω σε αυτά και τελικά ανεβαίνουν στο DockerHub. Η αυτοματοποιημένη αυτή διαδικασία όχι μόνο εξοικονομεί χρόνο αλλά και παρέχει διαφάνεια στους χρήστες ως προς τη διαδικασία παραγωγής των docker images.

Επιπλέον, διάφορα εργαλεία δημιουργήθηκαν κατά τη διάρκεια αυτής της εργασίας, τα οποία μπορεί να φανούν χρήσιμα κατά τη δημιουργία του travis.yml αρχείου οποιουδήποτε project, όπως το εργαλείο αυτόματης επανεκκίνησης των failed jobs στο Travis μέσω terminal ή του καθαρισμού της cache του Travis επίσης μέσω terminal.

Παρακάτω δίνεται ένα διάγραμμα ροής του αρχείου travis.yml που υλοποιήθηκε:

NextCloudPi VM στο VirtualBox

ToNextCloudPi εκτός από τα images για board computers ή τα docker images παρέχει και τη δυνατότητα δημιουργίας ενός VM με το NCP προεγκατεστημένο. Παρ’όλα αυτά, το να χρησιμοποιήσεις τον provider που προτιμάς και να ρυθμίσεις τα χαρακτηριστικά του εικονικού μηχανήματος ίσως να μην είναι πάντα προφανές για κάποιον αρχάριο. Για το σκοπό αυτό δημιουργήθηκε ένα εργαλείο το οποίο μέσα από μερικές απλές ερωτήσεις που δεν απαιτούν τεχνικές γνώσεις δημιουργεί αυτόματα ένα NCP VM στο VirtualBox. Το VirtualBox επιλέχθηκε ως provider διότι είναι ευρέως διαδεδομένο και εύκολο στη χρήση του. Επιπλέον, το εργαλείο που δημιουργήθηκε, παρέχει και τη δυνατότητα αντιγραφής ενός υπάρχοντος NCP VM, έτσι ώστε να αποφύγουμε το χρόνο του setup.

Τα εικονικά μηχανήματα δημιουργούνται μέσω ενός Vagrantfile, το οποίο περιέχει εντολές ειδικά για VirtualBox ενώ μέσα από την είσοδο που παρέχει ο χρήστης ρυθμίζονται τα χαρακτηριστικά του VM σχετικά με το όνομα, το δίκτυο και τους πόρους που θα χρησιμοποιήσει.

Docker Swarm System

Το NextCloudPi παρέχει τη δυνατότητα backup των δεδομένων σου, τι γίνεται όμως αν το μηχάνημα σου χαλάσει και έχεις ξεχάσει να κάνεις backup; Ή αν θέλεις να κάνεις κοινή χρήση ενός φακέλου με κάποιο άλλο μηχάνημα στο ίδιο δίκτυο; Ένα εργαλείο δημιουργήθηκε για την κατασκευή ενός κατανεμημένου συστήματος το οποίο ικανοποιεί αυτές ακριβώς τις απαιτήσεις. Τα εργαλεία που χρησιμοποιούνται είναι το Docker Swarm για το κατανεμημένο σύστημα όπου κάθε κόμβος είναι ένα μηχάνημα που τρέχει ένα NextCloudPi και το GlusterFS για την αναπαραγωγή των αρχείων σε κάθε κόμβο.

Παρακάτω δίνεται ένα διάγραμμα ροής που περιγράφει τον αλγόριθμο του εργαλείου που δημιουργήθηκε:

Ansiblizing NextCloudPi server

Το γεγονός ότι πολλοί άνθρωποι στον τομέα του IT χρησιμοποιούν Ansible, καθώς και το ότι είναι πιο εύκολο στην εκμάθηση έναντι της γλώσσας bash, πράγμα που θα βοηθούσε στην προσέλκυση νέων devolopers στο NextCloudPi, μας οδήγησε στην προσπάθεια μετατροπής του server του NextCloudPi από bash σε Ansible.

Κάθε bash script μετατράπηκε σε ένα ή περισσότερα Ansible playbooks τα οποία αντικατέστησαν τις κλήσεις συναρτήσεων σε βασικά κομμάτια κώδικα του NextCloudPi με τις αντίστοιχες εντολές Ansible.

Backward updates system

Ένα γνωστό πρόβλημα στο NextCloudPi ήταν ότι το σύστημα παρουσίαζε προβλήματα αν κάποιος δεν είχε κάνει update πολύ καιρό. Αυτό επιλύθηκε δημιουργώντας έναν μηχανισμό όπου ανάλογα με την version του τρέχοντος NextCloudPi του χρήστη, εντοπίζεται ποια updates του λείπουν μέσω μιας δυαδικής αναζήτησης και πακέτα από updates εκτελούνται στο αντίστοιχο σύστημα.

Λεπτομέρειες και κώδικας

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

Μελλοντικές επεκτάσεις

Κάποια από τα παραπάνω χαρακτηριστικά θα μπορούσαν να βελτιωθούν και να ολοκληρωθούν, όπως το Travis CI για board images και η Ansible (μέχρι τώρα έχει ολοκληρωθεί το CONFIG και το SYSTEM κομμάτι από τον NCP server).

Επίσης, νέα χαρακτηριστικά θα μπορούσαν να υλοποιηθούν όπως η μετατροπή του NextCloudPi web panel σε app, ένας VPN server, ένας Mail server κ.ά.

Leave a Comment