QuickFix.
This commit is contained in:
@@ -2,114 +2,26 @@
|
||||
|
||||
\noindent Στην παρούσα ενότητα θα αναλυθούν οι τεχνολογίες που χρησιμοποιήθηκαν
|
||||
για την υλοποίηση του συστήματος, οι αποφάσεις που πάρθηκαν κατά την ανάπτυξή
|
||||
του και οι σχεδιαστικές επιλογές που έγιναν. Επίσης, θα πραγματοποιηθεί
|
||||
απεικόνιση των συσχετίσεων μεταξύ των συστατικών του συστήματος και θα αναλυθεί
|
||||
περαιτέρω η λειτουργία τους.
|
||||
του και οι σχεδιαστικές επιλογές που πραγματοποιήθηκαν. Επίσης, θα αναλυθεί η
|
||||
αρχιτεκτονική του συστήματος και θα επεξηγηθούν οι λειτουργίες των συστατικών
|
||||
του.
|
||||
|
||||
\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions}
|
||||
\section{Μοντέλο ανάπτυξης}
|
||||
|
||||
Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που
|
||||
θέσαμε στην Ενότητα \ref{overcomingDockerDisadvantages} και συγκεκριμένα για
|
||||
την επικοινωνία με διάφορους παρόχους νέφους, επιλέχθηκε να γίνει χρήση της
|
||||
βιβλιοθήκης libcloud \footfullcite{libcloud}. Μια από τις δύο επιλογές
|
||||
βιβλιοθηκών της Apache \footfullcite{apache} για την επικοινωνία με παρόχους
|
||||
νέφους. Συγκριτικά με την βιβλιοθήκη jclouds \footfullcite{jclouds}, η οποία
|
||||
σχεδιάστηκε για την γλώσσα Java \footfullcite{java}, η libcloud είναι πιο απλή
|
||||
στην χρήση, αφού είναι σχεδιασμένη για την γλώσσα Python \footfullcite{python}.
|
||||
Επιπροσθέτως, η libcloud είναι πιο διαδεδομένη και η γλώσσα python αποτελεί μια
|
||||
πιο ευέλικτη επιλογή για τις ανάγκες του εργαλείου.
|
||||
|
||||
Η ανάγκη για μια βιβλιοθήκη που θα λειτουργεί ως μεσάζοντας μεταξύ του
|
||||
εργαλείου και των παρόχων νέφους, οφείλεται στο γεγονός ότι οι πάροχοι νέφους
|
||||
δεν διαθέτουν ένα κοινό API για την διαχείριση των υποδομών τους. Απεναντίας, ο
|
||||
καθένας από αυτούς διαθέτει το δικό του API, το οποίο χρησιμοποιείται έμμεσα
|
||||
μέσω του πίνακα ελέγχου του, που βρίσκεται στην ιστοσελίδα του, ενός δικού του
|
||||
εργαλείου γραμμής εντολών, ή άμεσα μέσω της βιβλιοθήκης που παρέχει ο ίδιος. Η
|
||||
libcloud αποτελεί μια προσπάθεια δημιουργίας ενός ενιαίου API, το οποίο
|
||||
χρησιμοποιώντας τις ίδιες συναρτήσεις, επιχειρεί να προσκομίσει ίδια
|
||||
αποτελέσματα ανεξαρτήτως του παρόχου νέφους που στοχεύει.
|
||||
|
||||
\clearpage
|
||||
|
||||
Παρ' όλη την προσπάθεια που καταβλήθηκε από την libcloud όμως, για την
|
||||
ενοποίηση αυτή, οι διαφορές στους τρόπους λειτουργίας του κάθε παρόχου αρχίζουν
|
||||
να εμφανίζονται σύντομα κατά την ανάπτυξη. Για το εργαλείο που προτείνει η
|
||||
παρούσα διπλωματική εργασία, χρειάζεται να γίνει χρήση των λειτουργιών
|
||||
\textquote{Compute} της βιβλιοθήκης. Στην αρχική σελίδα της, αναφέρεται
|
||||
υποστήριξη για πάνω από 50 παρόχους. Κατά την σελίδα τεκμηρίωσης
|
||||
\cite{libcloudProviders} για τις λειτουργίες \textquote{Compute}, αναφέρονται
|
||||
48 πάροχοι σε έναν πίνακα ο οποίος αναγράφει την υποστήριξη ή απουσία αυτής,
|
||||
διάφορων συναρτήσεων εικονικών μηχανών. Στις συναρτήσεις αυτές περιλαμβάνονται
|
||||
η δημιουργία εικονικών μηχανών, η εκκίνηση, η παύση, η διαγραφή τους και εν
|
||||
γένει όσες λειτουργίες είναι απαραίτητες για την ολοκληρωμένη λειτουργία του
|
||||
εργαλείου. Από αυτούς τους 48 παρόχους, οι 25 υποστηρίζουν και τις 9
|
||||
συναρτήσεις. Ωστόσο, από αυτούς τους 25 έπρεπε να αφαιρεθούν οι 20 για λόγους
|
||||
όπως η μη ύπαρξη τεκμηρίωσης χρήσης από την libcloud, η μη συνέχιση της
|
||||
λειτουργίας τους, η έλλειψη πληροφοριών τιμής ή δοκιμαστικής περιόδου για τις
|
||||
υπηρεσίες τους και η αδυναμία δημιουργίας λογαριασμού στην επίσημη σελίδα τους.
|
||||
Επομένως, υπάρχουν εν τέλει 5 πάροχοι νέφους που δύναται να χρησιμοποιηθούν
|
||||
υποστηρίζοντας όλες τις πιθανές λειτουργίες διαχείρισης εικονικών μηχανών.
|
||||
Τέλος, από αυτούς τους 5, επιλέχθηκαν για επίσημη υποστήριξη από το εργαλείο
|
||||
που προτείνεται στην παρούσα διπλωματική εργασία, τα τρία μεγαλύτερα ονόματα
|
||||
του χώρου, οι Amazon, Google και Microsoft. Οι άλλοι δύο είτε δεν παρείχαν
|
||||
δοκιμαστική περίοδο των υπηρεσιών τους, είτε δεν υπήρχε εμπιστοσύνη ως προς την
|
||||
ποιότητα των υπηρεσιών αυτών.
|
||||
|
||||
Παρακάτω θα διαπιστώσουμε πως ακόμα και με την χρήση της βιβλιοθήκης libcloud
|
||||
και την επίσημη υποστήριξη όλων των λειτουργιών για κάθε πάροχο, υπήρχε η
|
||||
ανάγκη χρήσης της επίσημης βιβλιοθήκης της Azure για την δημιουργία Resource
|
||||
Group \footfullcite{azure-mgmt-resource} και Virtual Network
|
||||
\footfullcite{azure-mgmt-network} διότι αυτές οι λειτουργίες δεν υποστηρίζονται
|
||||
μέσω της libcloud. Επιπροσθέτως, δίχως την υποστήριξη των λειτουργιών αυτών, ο
|
||||
χρήστης θα ήταν υποχρεωμένος να δημιουργεί αυτούς τους πόρους χειροκίνητα ή να
|
||||
είναι περιορισμένος μονάχα σε μια γεωγραφική τοποθεσία. Οι δύο τελευταίες
|
||||
επιλογές πάνε ενάντια σε έναν από τους βασικότερους στόχους του εργαλείου. Την
|
||||
ομοιόμορφη λειτουργία για κάθε πάροχο νέφους που υποστηρίζεται.
|
||||
|
||||
\clearpage
|
||||
|
||||
Πέρα από την απόφαση για την χρήση της libcloud και την γλώσσα προγραμματισμού
|
||||
Python, πάρθηκε επίσης η απόφαση για την υποστήριξη των 6 δημοφιλέστερων
|
||||
επιλογών για λειτουργικά συστήματα Linux σε περιβάλλοντα διακομιστών. Οι
|
||||
διανομές αυτές υποστηρίζονται και για τους 3 παρόχους νέφους και κάθε μια από
|
||||
αυτές περιλαμβάνει διαφορετικές εκδόσεις της κάθε διανομής. Αυτές είναι οι εξής
|
||||
για κάθε πάροχο:
|
||||
|
||||
\begin{savenotes}
|
||||
\selectfont
|
||||
\begin{table}[!ht]
|
||||
\caption{Υποστηριζόμενες εκδόσεις διανομών για κάθε πάροχο}
|
||||
\renewcommand{\arraystretch}{1.5}
|
||||
\centering
|
||||
\textgreek{\begin{tabular}{lc|c|c|c|}
|
||||
\cline{3-5}
|
||||
& & \multicolumn{3}{c|}{Πάροχοι} \\ \cline{3-5}
|
||||
& & AWS & Azure & GCE \\ \hline
|
||||
\multicolumn{1}{|c|}{\multirow{6}{*}{\rotatebox{90}{Διανομές}}} & Ubuntu \footfullcite{ubuntu} & 22.04, 22.10 & 22.04, 22.10 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & Debian \footfullcite{debian} & 10, 11 & 10, 11 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & CentOS \footfullcite{centos} & 7, 8, 9 & 8.4, 8.5 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & Fedora \footfullcite{fedora} & 37 & 36, 37 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & Red Hat Enterprise Linux \footfullcite{redhat} & 7.9, 8.6, 9 & 8.6, 9.1 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & openSUSE Leap \footfullcite{opensuse} & 15.3, 15.4 & 15.3, 15.4 & Όλες \\ \hline
|
||||
\end{tabular}}
|
||||
\label{table:supportedDistributions}
|
||||
\renewcommand{\arraystretch}{1}
|
||||
\end{table}
|
||||
\end{savenotes}
|
||||
|
||||
Ο λόγος που οι εκδόσεις είναι συγκεκριμένες για τους παρόχους AWS και Azure,
|
||||
είναι διότι ο αριθμός των διαθέσιμων διανομών και εκδόσεών τους είναι
|
||||
υπερβολικά μεγάλος και κατά την εκτέλεση της λειτουργίας δημιουργίας λίστας
|
||||
τους ή κατά τον έλεγχο της ορθότητας δεδομένων που εισάγει ο χρήστης, το
|
||||
πρόγραμμα θα καθυστερούσε σε τεράστιο βαθμό να ολοκληρωθεί.
|
||||
|
||||
\clearpage
|
||||
Για την ανάπτυξη του SecDep, ακολουθήθηκε το μοντέλο καταρράκτη. Στο μοντέλο
|
||||
αυτό, κάθε στάδιο της δραστηριότητας ανάπτυξης εκτελείται σειριακά. Δηλαδή, για
|
||||
την μετάβαση σε κάθε επόμενο στάδιο, απαιτείται η επιτυχής ολοκλήρωση του
|
||||
προηγούμενου. Έτσι και εδώ, ξεκινάμε με την ανάλυση απαιτήσεων, έπειτα
|
||||
προχωράμε στη σχεδίαση του συστήματος και τέλος φτάνουμε στην υλοποίησή του. Η
|
||||
επίδειξη της τελικής μορφής του εργαλείου καλύπτεται στο Κεφάλαιο
|
||||
\ref{installationANDShowcase}, ενώ η αποτίμηση των αποτελεσμάτων εκτέλεσής του,
|
||||
στο Κεφάλαιο \ref{experimentationANDresults}.
|
||||
|
||||
\section{Απαιτήσεις από το εργαλείο} \label{toolRequirements}
|
||||
|
||||
Κατά την ανάπτυξη του εργαλείου, έγινε μια προσπάθεια να καλυφθούν ορισμένες
|
||||
βασικές απαιτήσεις που θα έπρεπε να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι και
|
||||
αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του
|
||||
βασικές απαιτήσεις που θα έπρεπε αυτό να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι
|
||||
και αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του
|
||||
χρήστη ή ενός οργανισμού, στην εγκατάσταση και διαμόρφωση με αυτοματοποιημένο
|
||||
τρόπο ενός ασφαλούς, κατανεμημένου περιβάλλοντος για την εγκατάσταση και
|
||||
λειτουργία μιας εφαρμογής μικρο-υπηρεσιών. Για να γίνει αυτό πραγματικότητα,
|
||||
@@ -119,86 +31,87 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων
|
||||
ονομάτων στον κλάδο της νεφο-υπολογιστικής}
|
||||
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
|
||||
εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6
|
||||
δημοφιλέστερων διανομών για περιβάλλον διακομιστή}
|
||||
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
|
||||
εμφάνισης λίστας των διαθέσιμων τοποθεσιών
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών
|
||||
ώστε να μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του}
|
||||
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
|
||||
εμφάνισης λίστας των διαθέσιμων διανομών
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
|
||||
λειτουργία εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής}
|
||||
\item Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται παραμέτρους, να
|
||||
ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
|
||||
λειτουργία εμφάνισης λίστας των διαθέσιμων τοποθεσιών}
|
||||
\item Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου που
|
||||
δίνεται από τον χρήστη
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
|
||||
λειτουργία εμφάνισης λίστας των διαθέσιμων διανομών}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας
|
||||
εικονικής μηχανής
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται
|
||||
παραμέτρους, να ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης εικονικής
|
||||
μηχανής
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου
|
||||
που δίνεται από τον χρήστη}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης εικονικής
|
||||
μηχανής
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας
|
||||
εικονικής μηχανής}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία επανεκκίνησης
|
||||
εικονικής μηχανής
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης
|
||||
εικονικής μηχανής}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής εικονικής
|
||||
μηχανής
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης
|
||||
εικονικής μηχανής}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με SSH ακόμα και χωρίς
|
||||
να διαθέτει ο χρήστης πελάτη SSH
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία
|
||||
επανεκκίνησης εικονικής μηχανής}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης όλων των
|
||||
εικονικών μηχανών που διαχειρίζεται
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής
|
||||
εικονικής μηχανής}
|
||||
\item Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση που κάτι
|
||||
πάει στραβά κατά την εκτέλεση
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με SSH ακόμα
|
||||
και χωρίς να διαθέτει ο χρήστης πελάτη SSH}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση του
|
||||
αρχείου ρυθμίσεών του
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης
|
||||
όλων των εικονικών μηχανών που διαχειρίζεται}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού εκτελέσιμου
|
||||
αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση
|
||||
που κάτι πάει στραβά κατά την εκτέλεση}
|
||||
\item Το εργαλείο πρέπει να εγκαθιστά και να σκληραίνει και το Docker πέρα
|
||||
από το λειτουργικό σύστημα
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση
|
||||
του αρχείου ρυθμίσεων του}
|
||||
\item Το εργαλείο θα ενημερώνει περιοδικά τα πακέτα της εικονικής μηχανής
|
||||
και θα κλείνει αχρησιμοποίητες θύρες
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού
|
||||
εκτελέσιμου αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων στις
|
||||
εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της σκλήρυνσής
|
||||
τους, μέσω ενός αρχείου docker-compose.yml που θα βρίσκεται στον ίδιο
|
||||
φάκελο με το εκτελέσιμο αρχείο του
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων
|
||||
στις εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της
|
||||
σκλήρυνσής τους, μέσω ενός αρχείου docker-compose.yml που θα
|
||||
βρίσκεται στον ίδιο φάκελο με το εκτελέσιμο αρχείο του}
|
||||
\item Το εργαλείο πρέπει να μπορεί να εγκαθιστά δοχεία στις εικονικές
|
||||
μηχανές, κατά την διάρκεια σκλήρυνσής τους, μέσω παραμέτρων που έχει
|
||||
εισάγει ο χρήστης
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των
|
||||
διαθέσιμων εντολών του}
|
||||
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των
|
||||
διαθέσιμων εντολών του
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης
|
||||
συμπλήρωσης εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών}
|
||||
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης συμπλήρωσης
|
||||
εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών (Bash, Zsh, tcsh)
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της
|
||||
έκδοσης του}
|
||||
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της έκδοσής του
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση
|
||||
του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών μηχανών}
|
||||
\item Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση
|
||||
(bypassing) του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών
|
||||
μηχανών
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης
|
||||
περιοχής για τον πάροχο AWS}
|
||||
\item Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης περιοχής
|
||||
για τον πάροχο AWS
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για
|
||||
την λειτουργία σύνδεσης μέσω SSH}
|
||||
\item Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για την
|
||||
λειτουργία σύνδεσης μέσω SSH
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα
|
||||
ενός παρόχου δίχως την συμπλήρωση κενών πεδίων για τους υπόλοιπους
|
||||
από τον χρήστη}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα ενός
|
||||
παρόχου δίχως την συμπλήρωση κενών πεδίων για τους υπόλοιπους από τον
|
||||
χρήστη
|
||||
|
||||
\end{itemize}
|
||||
|
||||
@@ -206,36 +119,39 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη
|
||||
που έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων
|
||||
ονομάτων στον κλάδο της νεφο-υπολογιστικής (Amazon, Google, Microsoft)
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις
|
||||
ρυθμίσεις του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο
|
||||
του}
|
||||
\item Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6 δημοφιλέστερων
|
||||
διανομών για περιβάλλον διακομιστή (Debian, Ubuntu, Red Hat Enterprise
|
||||
Linux, Fedora, CentOS, openSUSE Leap)
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων IP των
|
||||
εικονικών μηχανών που δημιουργεί ώστε να μπορούν να διαμορφωθούν
|
||||
περαιτέρω εάν ο χρήστης επιθυμεί να χρησιμοποιήσει άλλα προγράμματα
|
||||
όπως το Ansible}
|
||||
\item Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών ώστε να
|
||||
μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που να
|
||||
μπορεί ο χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα με τις
|
||||
ανάγκες του}
|
||||
\item Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη που
|
||||
έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν
|
||||
|
||||
\item \textbf{Το εργαλείο πρέπει να δημιουργεί κλειδιά SSH σε περίπτωση που
|
||||
δεν υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο αρχείο του}
|
||||
\item Το εργαλείο θα πρέπει να είναι αξιόπιστο, δηλαδή κάθε εκτέλεση να
|
||||
επιφέρει τα αναμενόμενα αποτελέσματα
|
||||
|
||||
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
|
||||
εγκαθιστά και να σκληραίνει και το Docker πέρα από το λειτουργικό
|
||||
σύστημα}
|
||||
\item Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις ρυθμίσεις
|
||||
του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο του
|
||||
|
||||
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
|
||||
δημιουργεί στην εικονική μηχανή δύο επιπλέον εκτελέσιμα αρχεία για
|
||||
περιοδική ενημέρωση των πακέτων και κλείσιμο αχρησιμοποίητων θυρών}
|
||||
\item Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων IP των εικονικών
|
||||
μηχανών που δημιουργεί ώστε να μπορούν να διαμορφωθούν περαιτέρω εάν ο
|
||||
χρήστης επιθυμεί να χρησιμοποιήσει άλλα προγράμματα, όπως το Ansible
|
||||
|
||||
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
|
||||
εγκαθιστά προγράμματα για την περαιτέρω σκλήρυνση του Docker και την
|
||||
διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων}
|
||||
\item Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που να μπορεί ο
|
||||
χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα με τις ανάγκες του
|
||||
|
||||
\item Το εργαλείο πρέπει να δημιουργεί κλειδιά SSH σε περίπτωση που δεν
|
||||
υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο αρχείο του
|
||||
|
||||
\item Το εργαλείο θα πρέπει να εγκαθιστά τις υπηρεσίες watchtower και
|
||||
portainer \footfullcite{portainer} για την περαιτέρω σκλήρυνση του
|
||||
Docker και την διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων
|
||||
αντίστοιχα
|
||||
|
||||
\end{itemize}
|
||||
|
||||
@@ -251,14 +167,15 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
|
||||
\ref{fig:useCaseDiagram} δημιουργήθηκε με την βοήθεια του εργαλείου
|
||||
\textquote{yuml} \footfullcite{yuml}. Επιπλέον, με το εργαλείο
|
||||
\textquote{mermaid} \footfullcite{mermaid}, δημιουργήθηκε ένα διάγραμμα ροής
|
||||
για το SecDep που απεικονίζεται στο Σχήμα \ref{fig:flowchartDiagram}. Το
|
||||
διάγραμμα ροής, απεικονίζει την ροή των εντολών που μπορεί να επιλεγούν από τον
|
||||
χρήστη κατά την εκτέλεση του προγράμματος.
|
||||
(flowchart) για το SecDep που απεικονίζεται στο Σχήμα
|
||||
\ref{fig:flowchartDiagram}. Το διάγραμμα ροής αυτό, απεικονίζει την ροή των
|
||||
εντολών που μπορεί να επιλεγούν από τον χρήστη κατά την εκτέλεση του
|
||||
προγράμματος.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 0.9\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
|
||||
\includegraphics[width = 0.8\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
|
||||
\captionof{figure}{Διάγραμμα περιπτώσεων χρήσης}
|
||||
\label{fig:useCaseDiagram}
|
||||
\end{figure}
|
||||
@@ -275,8 +192,8 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 1.0\textwidth]{Figures/Diagrams/secdep-flowchart-diagram.png}
|
||||
\captionof{figure}{Διάγραμμα ροής}
|
||||
\includegraphics[width = 1.4\textwidth]{Figures/Diagrams/flowchart/1secdep-flowchart-diagram.png}
|
||||
\captionof{figure}{Διάγραμμα ροής - Γενικό}
|
||||
\label{fig:flowchartDiagram}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
@@ -284,20 +201,140 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
|
||||
|
||||
\end{landscape}
|
||||
|
||||
\begin{landscape}
|
||||
\thispagestyle{empty}
|
||||
|
||||
\noindent Λόγω της πολυπλοκότητας του Σχήματος \ref{fig:flowchartDiagram}, αυτό
|
||||
διασπάστηκε σε 6 ξεχωριστά διαγράμματα ροής, για τις εξής λειτουργίες του
|
||||
SecDep:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item Εκτέλεση απλών μεθόδων
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 1.3\textwidth]{Figures/Diagrams/flowchart/2secdep-flowchart-diagramSimpleFunctions.png}
|
||||
\captionof{figure}{Διάγραμμα ροής - Απλές λειτουργίες}
|
||||
\label{fig:flowchartDiagram1}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\end{itemize}
|
||||
\end{landscape}
|
||||
|
||||
\clearpage
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item Απόκτηση λίστας εικονικών μηχανών
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 0.5\textwidth]{Figures/Diagrams/flowchart/3secdep-flowchart-ListVMs.png}
|
||||
\captionof{figure}{Διάγραμμα ροής - Λίστα εικονικών μηχανών}
|
||||
\label{fig:flowchartDiagram2}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item Εκτέλεση ενέργειας σε εικονική μηχανή
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 0.55\textwidth]{Figures/Diagrams/flowchart/4secdep-flowchart-ActionOnVM.png}
|
||||
\captionof{figure}{Διάγραμμα ροής - Ενέργεια σε εικονική μηχανή}
|
||||
\label{fig:flowchartDiagram3}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item Σύνδεση SSH σε εικονική μηχανή
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 0.6\textwidth]{Figures/Diagrams/flowchart/5secdep-flowchart-SSHToVM.png}
|
||||
\captionof{figure}{Διάγραμμα ροής - Σύνδεση SSH σε εικονική μηχανή}
|
||||
\label{fig:flowchartDiagram4}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item Απόκτηση πληροφοριών πόρων παρόχου
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 0.35\textwidth]{Figures/Diagrams/flowchart/6secdep-flowchart-ResourceInfo.png}
|
||||
\captionof{figure}{Διάγραμμα ροής - Απόκτηση πληροφοριών πόρων παρόχου}
|
||||
\label{fig:flowchartDiagram5}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\begin{landscape}
|
||||
\thispagestyle{empty}
|
||||
\begin{itemize}
|
||||
|
||||
\item Δημιουργία εικονικής μηχανής
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = 0.7\textwidth]{Figures/Diagrams/flowchart/7secdep-flowchart-CreateVM.png}
|
||||
\captionof{figure}{Διάγραμμα ροής - Δημιουργία εικονικής μηχανής}
|
||||
\label{fig:flowchartDiagram6}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\end{itemize}
|
||||
\end{landscape}
|
||||
\clearpage
|
||||
|
||||
Ουσιαστικά, κατά την πραγματική χρήση του SecDep υπάρχουν πάντοτε δύο οντότητες
|
||||
που αλληλεπιδρούν μεταξύ τους. Ο χρήστης και ο πάροχος νέφους. Ο χρήστης μπορεί
|
||||
να ζητήσει πληροφορίες για διαθέσιμους πόρους όπως οι εικονικές του μηχανές ή
|
||||
τα συστατικά που έχει στην διάθεσή του για την δημιουργία τους όπως οι
|
||||
να ζητήσει πληροφορίες για διαθέσιμους πόρους, όπως οι εικονικές του μηχανές, ή
|
||||
τα συστατικά που έχει στην διάθεσή του για την δημιουργία τους, όπως οι
|
||||
διανομές, τα μεγέθη και οι τοποθεσίες τους. Αυτή η αλληλεπίδραση μεταξύ του
|
||||
χρήστη και του παρόχου νέφους, απεικονίζεται στο Σχήμα
|
||||
χρήστη και του παρόχου νέφους, απεικονίζεται καλύτερα στο Σχήμα
|
||||
\ref{fig:sequenceDiagram}, το οποίο δημιουργήθηκε με το εργαλείο
|
||||
\textquote{mermaid}.
|
||||
\textquote{mermaid}. Πρόκειται για ένα διάγραμμα ακολουθίας (sequence diagram),
|
||||
στο οποίο απεικονίζεται η αλληλεπίδραση του χρήστη με τον πάροχο νέφους μέσω
|
||||
του SecDep, κατά την δημιουργία μιας εικονικής μηχανής.
|
||||
|
||||
\begin{center}
|
||||
\begin{figure}[!ht]
|
||||
\centering
|
||||
\includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png}
|
||||
\captionof{figure}{Διάγραμμα αλληλεπίδρασης χρήστη - παρόχου νέφους}
|
||||
\includegraphics[width = 1\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png}
|
||||
\captionof{figure}{Διάγραμμα ακολουθίας για την δημιουργία εικονικής μηχανής}
|
||||
\label{fig:sequenceDiagram}
|
||||
\end{figure}
|
||||
\vspace*{-30pt}
|
||||
@@ -366,8 +403,169 @@ pydeps -T png --cluster --include-missing --max-bacon=1 --noshow --reverse --ran
|
||||
\vspace*{-30pt}
|
||||
\end{center}
|
||||
|
||||
\noindent Οι παραπάνω βιβλιοθήκες, αποτελούν τους πυλώνες του SecDep. Κάθε μια
|
||||
από αυτές, εξειδικεύεται σε διαφορετικούς τομείς και χρησιμοποιείται για την
|
||||
κάλυψη διαφόρων λειτουργιών του SecDep. Με την σειρά που απεικονίζονται, έχουν
|
||||
τις εξής αρμοδιότητες:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item \textbf{azure}:
|
||||
|
||||
Η βιβλιοθήκη της azure, χρησιμοποιείται για την επικοινωνία και
|
||||
αυθεντικοποίηση με τον πάροχο νέφους Azure. Ο λόγος που χρειάζεται να
|
||||
χρησιμοποιηθεί συνδυαστικά με την libcloud, είναι για επιτύχουμε την
|
||||
ομοιόμορφη συμπεριφορά του εργαλείου κατά μήκος όλων των παρόχων που
|
||||
αυτό υποστηρίζει. Συγκεκριμένα, την χρειαζόμαστε για την επίτευξη των
|
||||
λειτουργιών δημιουργίας Resource Group και Virtual Network, καθώς αυτές
|
||||
λειτουργίες δεν υποστηρίζονται από την libcloud την παρούσα στιγμή.
|
||||
|
||||
\item \textbf{dotenv}:
|
||||
|
||||
Η βιβλιοθήκη dotenv \footfullcite{dotenv} χρησιμοποιείται για την
|
||||
ανάγνωση αρχείων \textquote{.env}. Το SecDep κάνει χρήση ενός αρχείου
|
||||
\textquote{.env}, στο οποίο δηλώνονται οι τιμές που χρειάζεται για την
|
||||
αυθεντικοποίηση με τους παρόχους νέφους.
|
||||
|
||||
\item \textbf{libcloud}:
|
||||
|
||||
Η βιβλιοθήκη libcloud είναι υπεύθυνη για την αυθεντικοποίηση με τους
|
||||
παρόχους νέφους, με σκοπό την εκτέλεση διαφόρων λειτουργιών σχετικά με
|
||||
τις εικονικές μηχανές του καθενός. Μας επιτρέπει να δημιουργούμε και να
|
||||
διαχειριζόμαστε εικονικές μηχανές, καθώς και να λαμβάνουμε πληροφορίες
|
||||
για πόρους του κάθε παρόχου νέφους.
|
||||
|
||||
\item \textbf{rich}:
|
||||
|
||||
Η βιβλιοθήκη rich \footfullcite{rich} εμπλουτίζει την εμφάνιση του
|
||||
SecDep. Βοηθάει στην καλύτερη διαμόρφωση της εμφάνισης των
|
||||
αποτελεσμάτων των εντολών του, με σκοπό την θετική αύξηση της εμπειρίας
|
||||
χρήσης του εργαλείου.
|
||||
|
||||
\item \textbf{shtab}:
|
||||
|
||||
Η βιβλιοθήκη shtab \footfullcite{shtab} χρησιμοποιείται για την
|
||||
δημιουργία συμπληρώσεων κελύφους. Αυτό αποτελεί βασικό χαρακτηριστικό
|
||||
για την ευχρηστία του εργαλείου, καθώς διευκολύνει τον χρήστη στην
|
||||
εύρεση των διαθέσιμων παραμέτρων και στην ταχύτερη σύνταξη εντολών.
|
||||
|
||||
\item \textbf{paramiko}:
|
||||
|
||||
Η βιβλιοθήκη paramiko \footfullcite{paramiko} αποτελεί εξάρτηση της
|
||||
libcloud για την επικοινωνία με τις εικονικές μηχανές, κάνοντας χρήση
|
||||
του πρωτοκόλλου SSH. Το SecDep, χρησιμοποιεί την βιβλιοθήκη αυτή για
|
||||
την διαδραστική σύνδεση σε εικονικές μηχανές μέσω SSH σε περίπτωση
|
||||
απουσίας πελάτη που να προσφέρει αυτή τη δυνατότητα. Επιπλέον,
|
||||
χρησιμοποιείται για την δημιουργία κλειδιών SSH.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\clearpage
|
||||
|
||||
\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions}
|
||||
|
||||
Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που
|
||||
θέσαμε στην Ενότητα \ref{overcomingDockerDisadvantages} και συγκεκριμένα για
|
||||
την επικοινωνία και διασύνδεση με διάφορους παρόχους νέφους, επιλέχθηκε να
|
||||
γίνει χρήση της βιβλιοθήκης libcloud \footfullcite{libcloud}. Μια από τις δύο
|
||||
επιλογές βιβλιοθηκών της Apache \footfullcite{apache} για την επικοινωνία με
|
||||
παρόχους νέφους στα πλαίσια της υλοποίησης multi-cloud εφαρμογών, πλατφορμών
|
||||
και εργαλείων. Συγκριτικά με την βιβλιοθήκη jclouds \footfullcite{jclouds}, η
|
||||
οποία σχεδιάστηκε για την γλώσσα Java \footfullcite{java}, η libcloud είναι πιο
|
||||
απλή στην χρήση, αφού είναι σχεδιασμένη για την γλώσσα Python
|
||||
\footfullcite{python}. Επιπροσθέτως, η libcloud είναι πιο διαδεδομένη, ενώ η
|
||||
γλώσσα python αποτελεί μια πιο ευέλικτη επιλογή για τις ανάγκες της ανάπτυξης
|
||||
του εργαλείου μας. Αυτό συμβαίνει διότι σε σχέση με την Java, η python είναι
|
||||
απλούστερη στην σύνταξή της, προεγκατεστημένη σε πολλά λειτουργικά συστήματα
|
||||
και διαθέτει πολλές επιβοηθητικές βιβλιοθήκες, επίσημες ή από τρίτους, οι
|
||||
οποίες δύναται να εμπλουτίσουν τα προγράμματα σε python, με παραπάνω
|
||||
λειτουργίες.
|
||||
|
||||
Η ανάγκη για μια βιβλιοθήκη που θα λειτουργεί ως μεσάζοντας μεταξύ του
|
||||
εργαλείου και των παρόχων νέφους, οφείλεται στο γεγονός ότι οι πάροχοι νέφους
|
||||
δεν διαθέτουν ένα κοινό API για την διαχείριση των υποδομών τους. Απεναντίας, ο
|
||||
καθένας από αυτούς διαθέτει το δικό του API, το οποίο χρησιμοποιείται έμμεσα
|
||||
μέσω του πίνακα ελέγχου του, που βρίσκεται στην ιστοσελίδα του, ενός δικού του
|
||||
εργαλείου γραμμής εντολών, ή άμεσα μέσω της βιβλιοθήκης που παρέχει ο ίδιος. Η
|
||||
libcloud αποτελεί μια προσπάθεια δημιουργίας ενός ενιαίου API, το οποίο
|
||||
χρησιμοποιώντας τις ίδιες μεθόδους, επιχειρεί να προσκομίσει πανομοιότυπα
|
||||
αποτελέσματα (πχ. δημιουργία εικονικής μηχανής με συγκεκριμένα χαρακτηριστικά)
|
||||
ανεξαρτήτως του παρόχου νέφους που στοχεύει.
|
||||
|
||||
Παρ' όλη την προσπάθεια που καταβλήθηκε από την libcloud όμως, για την
|
||||
ενοποίηση αυτή, οι διαφορές στους τρόπους λειτουργίας του κάθε παρόχου αρχίζουν
|
||||
να εμφανίζονται σύντομα κατά την ανάπτυξη. Για το εργαλείο SecDep που προτείνει
|
||||
η παρούσα διπλωματική εργασία, χρειάζεται να γίνει χρήση των λειτουργιών
|
||||
\textquote{Compute} της βιβλιοθήκης libcloud. Στην αρχική σελίδα της
|
||||
βιβλιοθήκης, αναφέρεται υποστήριξη για πάνω από 50 παρόχους. Κατά την σελίδα
|
||||
τεκμηρίωσης \cite{libcloudProviders} για τις λειτουργίες \textquote{Compute},
|
||||
αναφέρονται 48 πάροχοι σε έναν πίνακα, ο οποίος αναγράφει την υποστήριξη ή
|
||||
απουσία αυτής, για διάφορες λειτουργίες/μεθόδους (διαχείρισης) εικονικών
|
||||
μηχανών. Στις λειτουργίες αυτές περιλαμβάνονται η δημιουργία εικονικών μηχανών,
|
||||
η εκκίνηση, η παύση, η διαγραφή τους και εν γένει όσες λειτουργίες είναι
|
||||
απαραίτητες για την ολοκληρωμένη λειτουργία του προτεινούμενού μας εργαλείου.
|
||||
Από αυτούς τους 48 παρόχους, οι 25 υποστηρίζουν και τις 9 λειτουργίες
|
||||
διαχείρισης. Ωστόσο, από αυτούς τους 25 έπρεπε να αφαιρεθούν οι 20 για λόγους,
|
||||
όπως η μη ύπαρξη τεκμηρίωσης χρήσης από την libcloud, η μη συνέχιση της
|
||||
λειτουργίας τους, η έλλειψη πληροφοριών τιμής ή δοκιμαστικής περιόδου για τις
|
||||
υπηρεσίες τους και η αδυναμία δημιουργίας λογαριασμού στην επίσημη σελίδα τους.
|
||||
Επομένως, υπάρχουν εν τέλει 5 πάροχοι νέφους που δύναται να χρησιμοποιηθούν,
|
||||
υποστηρίζοντας όλες τις πιθανές λειτουργίες διαχείρισης εικονικών μηχανών.
|
||||
Τέλος, από αυτούς τους 5, επιλέχθηκαν για επίσημη υποστήριξη από το εργαλείο
|
||||
που προτείνεται στην παρούσα διπλωματική εργασία, τα τρία μεγαλύτερα ονόματα
|
||||
του χώρου, οι Amazon, Google και Microsoft. Οι άλλοι δύο είτε δεν παρείχαν
|
||||
δοκιμαστική περίοδο των υπηρεσιών τους, είτε δεν υπήρχε εμπιστοσύνη ως προς την
|
||||
ποιότητα των υπηρεσιών αυτών.
|
||||
|
||||
Παρακάτω θα διαπιστώσουμε πως ακόμα και με την χρήση της βιβλιοθήκης libcloud
|
||||
και την επίσημη υποστήριξη όλων των λειτουργιών για κάθε πάροχο, υπήρχε η
|
||||
ανάγκη χρήσης της επίσημης βιβλιοθήκης της Azure (Microsoft Azure SDK) για την
|
||||
δημιουργία Resource Group \footfullcite{azure-mgmt-resource} και Virtual
|
||||
Network \footfullcite{azure-mgmt-network} διότι αυτές οι λειτουργίες δεν
|
||||
υποστηρίζονται μέσω της libcloud. Επιπροσθέτως, δίχως την υποστήριξη των
|
||||
λειτουργιών αυτών, ο χρήστης θα ήταν υποχρεωμένος να δημιουργεί αυτούς τους
|
||||
πόρους χειροκίνητα ή να είναι περιορισμένος μονάχα σε μια γεωγραφική τοποθεσία.
|
||||
Οι δύο τελευταίες επιλογές πάνε ενάντια σε έναν από τους βασικότερους στόχους
|
||||
του εργαλείου. Την ομοιόμορφη λειτουργία για κάθε πάροχο νέφους που
|
||||
υποστηρίζεται.
|
||||
|
||||
Πέρα από την απόφαση για την χρήση της libcloud και την γλώσσα προγραμματισμού
|
||||
Python, πάρθηκε επίσης η απόφαση για την υποστήριξη των 6 δημοφιλέστερων
|
||||
επιλογών για λειτουργικά συστήματα Linux σε περιβάλλοντα διακομιστών. Οι
|
||||
διανομές αυτές υποστηρίζονται και για τους 3 παρόχους νέφους και κάθε μια από
|
||||
αυτές περιλαμβάνει διαφορετικές εκδόσεις της κάθε διανομής. Αυτές είναι οι εξής
|
||||
για κάθε πάροχο:
|
||||
|
||||
\begin{savenotes}
|
||||
\selectfont
|
||||
\begin{table}[!ht]
|
||||
\caption{Υποστηριζόμενες εκδόσεις διανομών για κάθε πάροχο}
|
||||
\renewcommand{\arraystretch}{1.5}
|
||||
\centering
|
||||
\textgreek{\begin{tabular}{lc|c|c|c|}
|
||||
\cline{3-5}
|
||||
& & \multicolumn{3}{c|}{Πάροχοι} \\ \cline{3-5}
|
||||
& & AWS & Azure & GCE \\ \hline
|
||||
\multicolumn{1}{|c|}{\multirow{6}{*}{\rotatebox{90}{Διανομές}}} & Ubuntu \footfullcite{ubuntu} & 22.04, 22.10 & 22.04, 22.10 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & Debian \footfullcite{debian} & 10, 11 & 10, 11 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & CentOS \footfullcite{centos} & 7, 8, 9 & 8.4, 8.5 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & Fedora \footfullcite{fedora} & 37 & 36, 37 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & Red Hat Enterprise Linux \footfullcite{redhat} & 7.9, 8.6, 9 & 8.6, 9.1 & Όλες \\ \cline{2-5}
|
||||
\multicolumn{1}{|c|}{} & openSUSE Leap \footfullcite{opensuse} & 15.3, 15.4 & 15.3, 15.4 & Όλες \\ \hline
|
||||
\end{tabular}}
|
||||
\label{table:supportedDistributions}
|
||||
\renewcommand{\arraystretch}{1}
|
||||
\end{table}
|
||||
\end{savenotes}
|
||||
|
||||
Ο λόγος που οι εκδόσεις είναι συγκεκριμένες για τους παρόχους AWS και Azure,
|
||||
είναι διότι ο αριθμός των διαθέσιμων διανομών και εκδόσεών τους είναι
|
||||
υπερβολικά μεγάλος. Αυτό θα είχε ως αποτέλεσμα, κατά την εκτέλεση της
|
||||
λειτουργίας δημιουργίας λίστας τους ή κατά τον έλεγχο της ορθότητας των
|
||||
παραμέτρων που εισάγει ο χρήστης, η αντίστοιχη αιτούμενη εκτέλεση του εργαλείου
|
||||
από τον χρήση, να καθυστερούσε σε τεράστιο βαθμό να ολοκληρωθεί. Επομένως, θα
|
||||
υπήρχε αρνητική επίδραση στην εμπειρία του χρήστη.
|
||||
|
||||
\section{Αρχιτεκτονική Εργαλείου} \label{architecture}
|
||||
|
||||
Οι διαθέσιμες συναρτήσεις και μεταβλητές του secdep.py, απεικονίζονται στα
|
||||
|
||||
Reference in New Issue
Block a user