Ο όρος "Open Source" (Aνοιχτού Κώδικα) σημαίνει κυριολεκτικά πως ο κώδικας του εν λόγω λογισμικού διατίθεται ελεύθερα στους χρήστες για τροποποίηση, αναδιανομή και με άλλα χαρακτηριστικά που ορίζονται από την άδεια του λογισμικού. Δηλαδή είναι ανοιχτός.
Μπορεί οποιοσδήποτε να δει ακριβώς τι εγκαθιστά στον υπολογιστή του, σε αντίθεση με το ιδιοταγές λογισμικό του οποίου ο κώδικας δεν είναι διαθέσιμος, επομένως δεν μπορεί κάποιος να γνωρίζει τι ακριβώς κάνει το λογισμικό που εγκαθιστά.
Υπάρχουν αρκετοί τρόποι για την εγκατάσταση προγραμμάτων ανοιχτού κώδικα στο Ubuntu και γενικότερα στις διανομές Linux. Ουσιαστικά πρόκειται για μία διαδικασία που εφαρμόζεται με διαφορετικές ενέργειες και με διαφορετικά εργαλεία. Μπορεί κάποιος να εγκαταστήσει ένα πρόγραμμα με χρήση εντολών για λήψη του πακέτου από κάποιο αποθετήριο και εγκατάσταση με τη χρήση του διαχειριστή πακέτων, με τη χρήση κάποιου αρχείου εγκατάστασης ή με την μεταγλώττιση του πηγαίου κώδικα και το "χτίσιμο" του προγράμματος στον υπολογιστή.
Σε αυτόν τον οδηγό θα δούμε την διαδικασία που πρέπει να ακολουθήσουμε προκειμένου να εγκαταστήσουμε λογισμικό μεταγλωττίζοντας τον πηγαίο του κώδικα.
Στόχος είναι να γίνει κατανοητή η διαδικασία της μεταγλώττισης στην απλούστερη μορφή της.
Ως "πειραματόζωο" στις εικόνες χρησιμοποιήθηκε ο πηγαίος κώδικας του polari, ενός IRC Client του GNOME Project.
Επιγραμματικά, τα βήματα που ακολουθούμε είναι:
- Εντοπίζουμε και κατεβάζουμε στον υπολογιστή μας το αρχείο που περιέχει τον πηγαίο κώδικα ενός πακέτου.
- Αποσυμπιέζουμε το αρχείο, διότι συνήθως ο κώδικας είναι συμπιεσμένος υπό μορφές που ποικίλουν, συνήθως tar.gz / tar.xz / tar.bz κλπ.
- Μεταγλωττίζουμε τον κώδικα. Με τον όρο μεταγλώττιση εννοούμε την μετατροπή του κώδικα από γλώσσα προγραμματισμού, σε εκτελέσιμη μορφή στον υπολογιστή.
- Εγκαθιστούμε το πακέτο με τη χρήση του εκτελέσιμου.
Γιατί όμως να μπει κάποιος στην διαδικασία να εγκαταστήσει ένα πακέτο στον υπολογιστή με τη χρήση του πηγαίου κώδικα;
Για διάφορους λόγους. Συνήθως η εγκατάσταση των πακέτων γίνεται με τη χρήση των εργαλείων που παρέχει η εκάστοτε διανομή και μέσω αποθετηρίων.
Τα πακέτα που βρίσκονται στα αποθετήρια συχνά δεν είναι της τελευταίας έκδοσης, μεταξύ άλλων για λόγους σταθερότητας. Αν κάποιος θέλει να εγκαταστήσει την τελευταία έκδοση ενός πακέτου θα πρέπει να το κάνει χρησιμοποιώντας τον πηγαίο κώδικα. Άλλη περίπτωση είναι να μην υπάρχει καν ένα πακέτο σε κάποιο αποθετήριο ή με τη μορφή αρχείου εγκατάστασης για μία διανομή και για να το εγκαταστήσει κάποιος στον υπολογιστή, να καταφύγει στην μόνη λύση που είναι η εγκατάσταση από τον πηγαίο κώδικα.
Τα βήματα που ακολουθούμε για την μεταγλώττιση του πηγαίου κώδικα ενός λογισμικού και την εγκατάστασή του, είναι τα παρακάτω.
Προετοιμασία συστήματος:
Προτού ξεκινήσουμε την διαδικασία της μεταγλώττισης και της εγκατάστασης ενός πακέτου από τον πηγαίο κώδικα, θα πρέπει να έχουμε στο σύστημα κάποια πακέτα που είναι απαραίτητα για να μπορέσουμε να προχωρήσουμε με τη διαδικασία. Τα εγκαθιστούμε με την εντολή:
- Κώδικας: Επιλογή όλων
sudo apt-get install build-essential checkinstall automake fakeroot dpkg-dev
Αυτά τα πακέτα είναι εξαιρετικά χρήσιμα όταν ακολουθούμε διαδικασίες που επικεντρώνονται στον πηγαίο κώδικα ενός λογισμικού και σε ενέργειες που αφορούν τη λήψη του από τα αποθετήρια, το "χτίσιμο" αρχείων .deb, την επίλυση εξαρτήσεων και πολλά άλλα.
Λήψη του πηγαίου κώδικα:
Πρόκειται για ένα καθαρά διαδικαστικό βήμα, αφού πρέπει να έχουμε τον πηγαίο κώδικα ενός πακέτου προκειμένου να τον χρησιμοποιήσουμε για εγκατάσταση. Ο πηγαίος κώδικας ενός λογισμικού ανοιχτού κώδικα είναι διαθέσιμος για λήψη σε κάποιο σημείο στο διαδίκτυο, ώστε να μπορούν οι χρήστες να τον χρησιμοποιήσουν, να τον τροποποιήσουν, να τον αντιγράψουν και γενικά να κάνουν πολλές ενέργειες που ορίζονται από την άδεια στην οποία υπόκειται το λογισμικό.
Συνεπώς, εντοπίζουμε τον πηγαίο κώδικα του λογισμικού που μας ενδιαφέρει στο διαδίκτυο και κατεβάζουμε το αρχείο στον υπολογιστή μας.
Μπορούμε εναλλακτικά να χρησιμοποιήσουμε στο τερματικό την εντολή wget για τη λήψη του κώδικα, αν γνωρίζουμε τον σύνδεμο λήψης. Η εντολή είναι:
- Κώδικας: Επιλογή όλων
wget "σύνδεσμος-λήψης"
Έτσι, θα γίνει λήψη του αρχείου από τον σύνδεσμο και αποθήκευσή του στον φάκελο όπου βρισκόμαστε στο τερματικό.
Unpack / Αποσυμπίεση αρχείου:
Στο Linux και γενικότερα στα λειτουργικά συστήματα της οικογενείας του UNIX, η διανομή του πηγαίου κώδικα ενός λογισμικού γίνεται κυρίως με τη χρήση αρχείων .tar (αναφέρονται συχνά ως tarballs) με διάφορες μορφές, όπως tar.gz, tar.bz2, tar.xz κλπ. Για να προχωρήσουμε στην μεταγλώττιση του κώδικα θα πρέπει πρώτα να αποσυμπιέσουμε τον κώδικα που εμπεριέχεται στο αρχείο tar. Θα το κάνουμε με τη χρήση της γραμμής εντολών (σε τερματικό) και το αντίστοιχο εργαλείο.
Πρώτα, πηγαίνουμε στον φάκελο όπου έχουμε αποθηκευμένο το αρχείο tar που κατεβάσαμε, με την εντολή:
- Κώδικας: Επιλογή όλων
cd /διαδρομή/για/φάκελο
Και συνεχίζουμε κάνοντας unpack:
- Για αρχεία tar.gz χρησιμοποιούμε την εντολή:
- Κώδικας: Επιλογή όλων
tar -zxvf όνομα_αρχείου.tar.gz
- Για αρχεία tar.bz2 χρησιμοποιούμε την εντολή:
- Κώδικας: Επιλογή όλων
tar -jxvf όνομα_αρχείου.tar.bz2
- Για άρχεια tar.xz χρησιμοποιούμε την εντολή:
- Κώδικας: Επιλογή όλων
tar -xJvf όνομα_αρχείου.tar.xz
- Κώδικας: Επιλογή όλων
cd όνομα_φακέλου
Το όνομα του φακέλου συνήθως είναι το όνομα του λογισμικού, το οποίο βλέπουμε εύκολα με την εντολή:
- Κώδικας: Επιλογή όλων
ls
H οποία θα επιστρέψει μία λίστα με τους φακέλους και τα αρχεία που βρίσκονται στον φάκελο που βρισκόμαστε, όπου μεταξύ τους θα υπάρχει και ο φάκελος που δημιουργήθηκε μετά την αποσυμπίεση του αρχείου tar.
Έλεγχος εξαρτήσεων και ρύθμιση του πακέτου:
Μέσα στον τρέχων φάκελο υπάρχει ένα script που ονομάζεται configure, το οποίο πρέπει να εκτελεστεί στον υπολογιστή.
Για την εκτέλεση του script configure, χρησιμοποιούμε την εντολή:
- Κώδικας: Επιλογή όλων
./configure
Αυτό το script αποτελείται από εντολές που χρησιμοποιούνται για έλεγχο σε λεπτομέρειες του υπολογιστή προκειμένου να διαπιστωθεί το περιβάλλον είναι κατάλληλα ρυθμισμένο για την εγκατάσταση του λογισμικού που μας ενδιαφέρει. Το script θα ελέγξει το σύστημα για εξαρτήσεις (dependencies), δηλαδή άλλα πακέτα των οποίων η εγκατάσταση είναι απαραίτητη για να λειτουργήσει το λογισμικό που θέλουμε να εγκαταστήσουμε. Αυτά τα πακέτα μπορεί να είναι ήδη εγκατεστημένα στον υπολογιστή. Αν είναι, τότε το script θα εκτελεστεί με επιτυχία, ενώ αν δεν είναι, τότε δεν θα ολοκληρωθεί η διαδικασία και δεν θα μπορέσουμε να προχωρήσουμε με την εγκατάσταση του λογισμικού, αν πρώτα δεν εγκαταστήσουμε τα απαραίτητα πακέτα που χρειάζονται για τη σωστή λειτουργία του λογισμικού.
Όπως κάθε εντολή που θα χρησιμοποιήσουμε, έτσι και η ./configure δίνει κάποια έξοδο στο τερματικό καθώς εκτελείται το script. Βλέπουμε εκεί τα μηνύματα που αφορούν την εκτέλεση του script και αν δημιουργηθεί κάποιο πρόβλημα λόγω έλλειψης εξάρτησης, τότε θα δούμε κάποιο μήνυμα που θα μας παροτρύνει να εγκαταστήσουμε την εν λόγω εξάρτηση και μετά να συνεχίσουμε.
Τα μηνύματα που εμφανίζονται όταν λείπει μία εξάρτηση είναι μηνύματα της μορφής:
έγραψε:To πακέτο πακέτο-τάδε δεν είναι εγκατεστημένο. Εγκαταστήστε το.
Aρκετές φορές σε τέτοιες περιπτώσεις, χρειάζεται να εγκαταστήσουμε την έκδοση dev του πακέτου, δηλαδή:
- Κώδικας: Επιλογή όλων
sudo apt-get install πακέτο-τάδε-dev
Σε αυτή την περίπτωση λοιπόν, εγκαθιστούμε όποια πακέτα λείπουν και εκτελούμε ξανά την εντολή ./configure.
Μπορούμε να χρησιμοποιήσουμε περισσότερες επιλογές που θα καθορίσουν τις λεπτομέρειες της εγκατάστασης με τις κατάλληλες παραμέτρους στην εντολή ./configure.
Για παράδειγμα, μπορούμε να ορίσουμε την θέση της εγκατάστασης χρησιμοποιώντας:
- Κώδικας: Επιλογή όλων
./configure --prefix=/διαδρομή/θέσης
Αυτή και πολλές άλλες χρήσιμες επιλογές για την χρήση της ./configure μπορούμε να τις δούμε με την εντολή:
- Κώδικας: Επιλογή όλων
./configure --help
Όταν εκτελεστεί το script θα δούμε στο τερματικό διάφορα μηνύματα που ενημερώνουν για την πρόοδο της διαδικασίας. Σε αυτά τα μηνύματα βλέπουμε αν όλα πήγαν όπως πρέπει ή αν υπήρξαν προβλήματα και ποια είναι αυτά.
Όταν η διαδικασία ολοκληρωθεί με επιτυχία, ως αποτέλεσμα της εκτέλεσης του configure, θα δημιουργηθεί στον τρέχων φάκελο ένα αρχείο 'Makefile'.
To makefile είναι ένα αρχείο που ουσιαστικά περιέχει τους κανόνες σύμφωνα με τους οποίους θα γίνει η μεταγλώττιση του πηγαίου κώδικα σε εκτελέσιμη μορφή που "κατανοεί" ο υπολογιστής, προκειμένου να γίνει η εγκατάσταση.
Μεταγλώττιση του κώδικα:
Σε αυτό το σημείο θα χρησιμοποιηθεί το makefile για την μεταγλώττιση (compile) του πηγαίου κώδικα σε εκτελέσιμο αρχείο. Αυτό γίνεται με τη χρήση του εργαλείου GNU Make. To Make υπάρχει σχεδόν σε όλα τα λειτουργικά συστήματα της οικογένειας του UNIX (UNIX-like).
Το Make ψάχνει στον φάκελο που περιέχει τον κώδικα του προγράμματος για το αρχείο makefile και το χρησιμοποιεί για να μεταγλωττίσει τον πηγαίο κώδικα σε εκτελέσιμη μορφή. Αυτό γίνεται με την εντολή make ενώ βρισκόμαστε στον φάκελο που περιέχει τον πηγαίο κώδικα:
- Κώδικας: Επιλογή όλων
make
Eκτελώντας λοιπόν την παραπάνω εντολή, το Make θα ακολουθήσει την διαδικασία που περιγράφεται στο makefile, που ορίζει πως ακριβώς θα γίνει η εγκατάσταση των αρχείων του λογισμικού.
Είναι χρήσιμο να παρατηρούμε την έξοδο της εντολής make για σφάλματα, εδώ φαίνονται μερικά μηνύματα που χρειάζονται έλεγχο.
Διαγνωστικός έλεγχος:
Αυτό είναι ένα προαιρετικό βήμα. Μπορούμε ξανά με τη χρήση του make, να τρέξουμε κάποιους διαγνωστικούς ελέγχους που εμπεριέχονται στον κώδικα του λογισμικού που θέλουμε να εγκαταστήσουμε, ώστε να δούμε αν όλα έχουν γίνει σωστά και δεν έχει γίνει κάποια παράληψη.
Αυτό το κάνουμε με την εντολή:
- Κώδικας: Επιλογή όλων
make check
Συνεχίζουμε αν διαπιστώσουμε πως όλα έχουν γίνει όπως πρέπει ως εδώ.
Εγκατάσταση του λογισμικού:
Σε αυτό το σημείο θα εγκαταστήσουμε το λογισμικό. Έχουμε ολοκληρώσει όλα τα βήματα που χρειάζονται για να αρχίσει η εγκατάσταση:
- Αποσυμπιέσαμε τον κώδικα από το αρχείο που κατεβάσαμε με την χρήση του tar.
- Δημιουργήσαμε το αρχείο makefile από το configure script με την εντολή ./configure.
- Μεταγλωττίσαμε τον κώδικα σύμφωνα με τους κανόνες του makefile με την χρήση του make και κάναμε επαληθεύσαμε πως όλα έχουν γίνει σωστά με την εντολή make check.
- Κώδικας: Επιλογή όλων
sudo make install
Αποτέλεσμα αυτής της εντολής θα είναι να μεταφερθούν όλα τα εκτελέσιμα αρχεία που δημιουργήθηκαν από την εντολή make στις κατάλληλες θέσεις στο σύστημά μας ώστε να λειτουργεί σωστά το πρόγραμμα που εγκαταστήσαμε.
Eναλλακτικά, μπορούμε να χρησιμοποιήσουμε την εντολή checkinstall η οποία μας παρέχει και άλλες επιλογές. Αν εκτελεστεί χωρίς παραμέτρους, τότε ουσιαστικά κάνει την διαδικασία ακριβώς όπως και η make install.
Αφαίρεση περιττών αρχείων:
Kαι αυτό το βήμα είναι προαιρετικό. Μπορούμε να χρησιμοποιήσουμε την παρακάτω εντολή για την αφαίρεση των αρχείων και των φακέλων που δημιουργήθηκαν κατά τη διάρκεια της εγκατάστασης και δεν μας χρειάζονται πλέον:
- Κώδικας: Επιλογή όλων
sudo make clean
Αυτή είναι σε γενικές γραμμές η διαδικασία που ακολουθούμε για την μεταγλώττιση και την εγκατάσταση πακέτων από τον πηγαίο κώδικα. Σε αρκετές περιπτώσεις, κάθε αρχείο που κατεβάζουμε που περιέχει πηγαίο κώδικα, περιέχει επίσης και ένα αρχείο README όπου συνήθως αναγράφονται οδηγίες για την εγκατάσταση του πακέτου. Αυτό γιατί αρκετά πακέτα ίσως να έχουν κάποιες ιδιαιτερότητες οι οποίες να επηρεάζουν την διαδικασία της μεταγλώττισης και της εγκατάστασης και να χρειάζονται να γίνουν επιπλέον βήματα ώστε να γίνει σωστά η διαδικασία.
Οπότε το πρώτο πράγμα που ελέγχουμε αφού κατεβάσουμε τον πηγαίο κώδικα ενός πακέτου, είναι η ύπαρξη ενός αρχείου README με οδηγίες για την σωστή εγκατάσταση.
Σύνοψη:
Συνοψίζοντας τα παραπάνω, αφού έχουμε κατεβάσει τον πηγαίο κώδικα ενός πακέτου, στο τερματικό:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
sudo apt-get install build-essential checkinstall automake fakeroot dpkg-dev
cd /φάκελος/λήψης
tar -zxvf όνομα_αρχείου.tar.gz #για αρχεία .tar.gz
tar -jxvf όνομα_αρχείου.tar.bz2 #για αρχεία .tar.bz2
tar -xJvf όνομα_αρχείου.tar.xz #για αρχεία .tar.xz
cd όνομα_φακέλου
./configure #με ή χωρίς επιλογές
make
make check #προαιρετικό
sudo make install
sudo make clean #προαιρετικό
- Απεγκατάσταση
- Κώδικας: Επιλογή όλων
sudo make uninstall
- Κώδικας: Επιλογή όλων
sudo dpkg -r όνομα_πακέτου
Αν θέλουμε για οποιονδήποτε λόγο να απεγκαταστήσουμε ένα πακέτο που εγκαταστήσαμε με την παραπάνω διαδικασία, χρησιμοποιούμε την εντολή:
H απεγκατάσταση μπορεί να γίνει και με τη χρήση του dpkg:
Αρκετές φορές, μεγάλα και περίπλοκα projects ανοιχτού κώδικα, όπως ο πυρήνας Linux ή μεγάλα γραφικά περιβάλλοντα όπως το GNOME Shell δεν εγκαθίστανται με την ίδια διαδικασία, καθώς η διαδικασία της μεταγλώττισης και της εγκατάστασης είναι διαφορετική και πιο χρονοβόρα.
Aν γνωρίζετε τρόπους για τη βελτιστοποίηση της διαδικασίας ή ειδικές περιπτώσεις σας καλώ να τις γράψετε εδώ ή σε δικούς σας νέους οδηγούς, ώστε να κατανοηθούν οι τρόποι με τους οποίους μπορούμε να εκμεταλλευτούμε τον πηγαίο κώδικα λογισμικού.

Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Μη εμπορική χρήση-Παρόμοια διανομή 3.0 Ελλάδα