Υπάρχουν πολλά λογισμικά τα οποία διατίθενται μέσω του Διαδικτύου ή σε CD και είναι διαθέσιμα για εγκατάσταση σε περιβάλλον Unix/Linux. Εδώ θεωρούμε οτι αναφερόμαστε σε ελεύθερο λογισμικό ή λογισμικό ανοικτού κώδικα. Σε περίπτωση που δεν είστε σίγουροι για την αδειοδότηση του λογισμικού τότε θα πρέπει να το εξετάσετε πριν από την εγκατάσταση.
Ανάλογα με τα δικαιώματα που έχουμε σε ένα συγκεκριμένο σύστημα (δηλαδή αν είμαστε προσκεκλημένος, απλός χρήστης ή διαχειριστής) μπορούμε να εγκαταστήσουμε λογισμικό είτε καθόλου, είτε μόνο στο προσωπικό μας κατάλογο είτε στους καταλόγους του συστήματος. Λογισμικά που εγκαθίστανται στους καταλόγους του συστήματος είναι τυπικά διαθέσιμα προς εκτέλεση σε όλους τους χρήστες. Λογισμικά που εγκαθίστανται σε προσωπικούς καταλόγους μπορεί να γίνουν διαθέσμια σε άλλους χρήστες με τροποποίηση των αδειών πρόσβασης των αντίστοιχων αρχείων.
Τα λογισμικά συνήθως διατίθενται σε δύο μορφές. Η πιο συνηθισμένη μορφή είναι λογισμικά έτοιμα προς εγκατάσταση σε συγκεκριμένη αρχιετκτονική ή / και διανομή ή / και έκδοση του Linux (π.χ για Ubuntu Linux 6.06 LTS για 32bit επεξεργαστή Intel). Αυτή είναι η ευχερέστερη περίπτωση και η επιδίωξή μας είναι κατ' αρχήν να εντοπίσουμε μια τέτοια μορφή του λογισμικού που μας ενδιαφέρει. Oι μεγάλες διανομές Linux διατηρούν ειδικές αρχειοθήκες (repositories) που οργανώνουν το διαθέσιμο γι'αυτές λογισμικό.
Επίσης διαθέτουν και ειδικά λογισμικά ή και περιβάλλοντα που αυτοματοποιούν όλα τα στάδια εγκατάστασης, τους λεγόμενους διαχειριστές πακέτων (package managers). Τέτοιοι διαχειριστές είναι διαθέσιμοι τόσο σε μορφή εντολών (command line) αλλά και σε μορφή γραφικών διεπαφών, κυρίως μέσω των γνωστών διαχειριστών παραθύρων (window managers) Gnome και KDE.
Σε περίπτωση που το λογισμικό που αναζητούμε δεν βρίσκεται στα επίσημα repositories της διανομής Linux που χρησιμοποιούμε, τότε αναζητούμε το λογισμικό στο διαδίκτυο είτε απευθυνόμενοι στις ευρύτατα γνωστές ιστοθέσεις (όπως για παράδειγμα το sourceforge) ή απλά αναζητούμε στις γνωστές μηχανές αναζήτησης (όπως το Google). Και πάλι αναζητούμε κατ' αρχήν μια έκδοση προετοιμασμένη ειδικά για την διανομή που μας ενδιαφέρει. Επιπλέον υπάρχει και η δυνατότητα της κατα-παραγγελία προετοιμασίας λογισμικού.
Με τη πάροδο του χρόνου και τη διαρκώς εξελισσόμενη αυτοματοποίηση των δημοφιλών εκδόσεων του Linux, οι δυσκολίες εγκατάστασης λογισμικού συνεχώς λιγοστεύουν. Για παράδειγμα ο οδηγός στην ιστοθέση http://www.monkeyblog.org/ubuntu/installing/ δίνει πληροφορίες εγκατάστασης για οτιδήποτε λογισμικό σε Ubuntu 6.06 LTS (Ελληνική μετάφραση στο pdplab.it.uom.gr/teaching/linux/).
Παρακάτω εξετάζουμε τη περίπτωση που το λογισμικό δεν βρέθηκε σε μορφή έτοιμη προς εγκατάσταση για τη διανομή μας. Τα βήματα που ακολουθούμε για την εγκατάσταση λογισμικού σε αυτή τη περίπτωση είναι τα εξής.
Από τα παραπάνω βήματα, συνήθως το πιο δύσκολο είναι αυτό της μεταγλώττισης.
Συνήθως ο πηγαίος κώδικας του προς εγκατάσταση λογισμικού είναι σε γλώσσα C και βρίσκεται σε μια σειρά αρχείων που απαιτούν σύνθετη μεταγλώττιση με συγκεκριμένη σειρά (separate comilation). Στις αντικειμενοστραφείς γλώσσες (όπως C++, Java) τα πράγματα είναι κάπως πιο έυκολα στη σύνθετη μεταγλώττιση, με τη χρήση των projects και packages. Η μεταγλώττιση περιλαμβάνει την παραγωγή ενδιάμεσου κώδικα (object code) ανά αρχείο, την σύνδεση (linking) των ενδιαμέσων κωδίκων όλων των αρχείων, και στη συνέχεια τη σύνδεση με τις προεγκατεστημένες βιβλιοθήκες της γλώσσας (code libraries) για τη παραγωγή του τελικού εκτελέσιμου.
Τα βήματα αυτά διευκολύνονται με τη χρήση μιας σειράς εργαλείων συστήματος που αναπτύχθηκαν γι' αυτό το σκοπό.
Η εντολή make επιτρέπει τη διαχείριση της σύνθετης μεταγλώττισης με το χωρισμό ενός κώδικα σε επιμέρους αρχεία και έτσι βοηθά στην ανάπτυξη μεγάλων προγραμμάτων. Μπορεί να ελέγχει ποιά τμήματα του προγράματος έχουν μεταβληθεί, να μεταφράζει μόνο εκείνα και να ανασυνθέτει το συνολικό πρόγραμμα, χρησιμοποιώντας κάθε φορά τις πιο πρόσφατες μεταφράσεις.
Η εντολή make λαμβάνει πληροφορίες και οδηγίες από ένα αρχείο κειμένου που λέγεται Makefile και βρίσκεται στον ίδιο κατάλογο με τα αρχεία του πηγαίου κώδικα. Περιλαμβάνει πληροφορίες μεταγλώττισης, όπως για παράδειγμα το επίπεδο βελτιστοποίησης (optimization) της μεταγλώττισης ή την ένθεση πληροφοριών εκσφαλμάτωσης (debugging). Επίσης περιλαμβάνει πληροφορίες για τα ονόματα διαδρομής που θα εγκατασταθούν τα τελικά εκτελέσιμα (binaries), οι σελίδες εγχειριδίου και τεκμηρίωσης (manual / documentation pages), τα αρχεία δεδομένων, πού θα βρεθούν οι εξαρτήσεις (dependencies) δηλαδή βιβλιοθήκες (libraries)και άλλα απαραίτητα προγράμματα ή αρχεία διαμορφωσης (configuration files) κλπ.
Αρκετές φορές απαιτείται η τροποποίηση του Makefile από τον χρήστη έτσι ώστε να ενημερωθούν τα ονόματα διαδρομής με βάση το συγκεκριμένο σύστημα, καθώς και άλλες παράμετροι. Πάντοτε κρατούμε ένα αντίγραφο ασφελείας του αρχικού Makefile. Ευτυχώς, πολλά λογισμικά αυτο-ρυθμίζονται με τη βοήθεια του σεναρίου κελύφους (shell script) GNU configure.
Με την συνεχή άυξηση των εκδόσεων και διανομών Unix / Linux, η σύνθεση μεταγλώττιση προγραμμάτων γινόταv όλο και πιο περίπλοκη αφού έπερε να ληφθούν υπ' όψη περισσότερες εναλλακτικές. Επι πλέον οι διανομές και οι εκδόσεις μεταβάλουν διάφορα χαρακτηριστικά και αυτό σημαίνει αλλαγές στις πληροφορίες μεταγλώττισης. Το σύστημα GNU configure and build απλοποιεί την σύνθεση του λογισμικού που διατίθεται σε μορφή πηγαλιου κώδικα. Όλα τα προγράμματα συντίθενται με τη βοήθεια μιας απλής τυποποιημένης διαδικασίας δύο σταδίων. Δεν απαιτείται η επιπλέον εγκατάσταση νέων εργαλείων λογισμικού.
Το σενάριο κελύφους configure μεταφορτώνεται μαζί με το προς εγκατάσταση λογισμικό και προσπαθεί να αναγνωρίσει το σύστημά μας και να διαμορφώσει τις σωστές τιμές για τις παραμέτρους του Makefile που εξαρτώνται από το σύστημα. Έτσι παράγει ενα δικό του Makefile σε κάθε υπο-κατάλογο του προς εγκατάσταση λογισμικού.
Ο απλουστερος τρόπος σύνθετης μεταγλώττισης είναι ο εξής:
Το configure υποστηρίζει ένα μεγάλο φάσμα επιλογών. Συνήθως μπορούμε να χρησιμοποιήσουμε την επιλογή configure --help για να ελέγξουμε τις δυνατότητες του συγκεκριμένου σεναρίου. Το GNU project παρέχει τα εργαλεία automake και autoconf που επιτρέπουν στους συγγραφείς λογισμικού την αυτόματη παραγωγή αρχείων Makefile και σεναρίων configure.
Πιθανότατα οι μόνες επιλογές που θα χρησιμοποιήσετε είναι οι --prefix και --exec-prefix. Αυτές χρησιμοποιούνται για τον καθορισμό των καταλόγων εγκατάστασης.
Ο κατάλογος που δίνεται μετά την επιλογή --prefix θα αποθηκεύσει τα αρχεία που είναι ανεξάρτητα από το σύστημα.
Ο κατάλογος που δίνεται μετά την επιλογή --exec-prefix (και συνήθως είναι υπο-κατάλογος του --prefix καταλόγου) θα αποηθκεύσει τα αρχεία που εξαρτώνται από το σύστημα, όπως τα εκτελέσιμα.
Ως παράδειγμα θα μεταφορτώσουμε ένα λογισμικό που κάνει μετατροπές μεταξύ διαφόρων μονάδων μέτρησης από το πανεπιστήμιο Cornell.
Πρώτα δημιουργούμε ένα κατάλογο μεταφόρτωσης.
mkdir download
Μεταφορτώνουμε το λογισμικό και το αποθηκεύουμε στον κατάλογο που δημιουργήσαμε.
Μεταφερόμαστε στον κατάλογο download και ελέγχουμε τα περιεχόμενά του.
cd download
ls -l
Το όνομα του μοναδικού αρχείου καταλήγει σε tar.gz. Η εντολή tar αρχειοθετεί έναν κατάλογο με υπο-καταλόγους και αρχεία σε ενιαία αρχειοθήκη (tar file.) Στην συνέχεια η αρχειοθήκη έχει συμπιεστεί με την εντολή gzip (tar.gz file).
Σε περίπτωση που συναντήσετε άλλη μέθοδο συμπίεσης ή αρχειθέτησης μπορείτε να συμβουλευτείτε τον window/file manager που χρησιμοποιείτε με τη διανομής σας. Επίσης μπορείτε να αναζητήσετε οδηγίες στο σημείο μεταφόρτωσης.
Πρώτα αποσυμπιέζουμε με την εντολή gunzip. Αυτή δημιουργεί ένα αρχείο .tar.
gunzip units-1.74.tar.gz
Στη συνέχεια εξάγουμε τα αρχεία του λογισμικού με τη δομή καταλόγων τους με τη βοήθεια της εντολής tar.
tar -xvf units-1.74.tar
Ελέγχουμε τα περιεχόμενα του καταλόγου download, και μεταφερόμαστε στον υπο-κατάλογο units-1.74.
cd units-1.74
Πρώτα διαβάζουμε προσεκτικά τα αρχεία κειμένου README και INSTALL (με την εντολή more ή less). Συνήθως σε κάθε πακέτο λογισμικού υπάρχουν κάποια αρχεία κειμένου με αυτά άλλα παρεμφερή ονόματα που δίνουν σχετικές πληροφορίες. Οι βιαστικοί συνήθως δεν διαβάζουν αυτά τα κείμενα και στη συνέχεια μπλέκουν σε περιπέτειες..
Το λογισμικό χρησιμοποιεία το GNU configure για τη σύνθετη μεταγλώττιση του πηγαίου κώδικα. Με τη βοήθεια της more ή less μπορείτε να δείτε τα σενάρια κελύφους και τα αρχεία διαμόρφωσης, όπως τα configure, configure.in, Makefile.in, Makefile.dos κλπ.
Αν δεν ορίσουμε κατάλογο εγκατάστασης το configure θα προσπαθήσει να εγκαταστήσει το λογισμικό στους καταλόγους του συστήματος. Αν δεν έχουμε τα κατάλληλα δικαιώματα διαχειριστή, ή αν θέλουμε να εγκαταστήσουμε το λογισμικό σε προσωπικό μας κατάλογο, τότε πρέπει να ορίσουμε ένα κατάλογο εγκατάστασης.
mkdir ~/units174
Στη συνέχεια εκτελούμε το configure δίνοντας τον κατάλογο εγκατάστασης.
./configure --prefix=$HOME/units174
Σημείωση: Η μεταβλητή περιβάλλοντος $HOME δίνει το όνομα διαδρομής του οικείου σας καταλόγου. Εσείς μπορείτε απλά να την αντικαταστήσετε με το όνομα διαδρομής του οικείου σας καταλόγου ή με το ~.
Αν το configure εκτελεστεί κανονικά θα δημιουργήσει το Makefile με όλες τις σωστές επιλογές. Μπορείτε να ελέγξετε τα περιεχόμενα του Makefile με την εντολή more ή less και να συγκρίνετε με τα αρχικά διαθέσιμα αρχεία.
Τώρα μπορούμε να προχωρήσουμε στη σύνθετη μεταγλώττιση του πηγαίου κώδικα εκτελώντας την εντολή make.
make
Μετά από λίγη ώρα και αρκετά μηνύματα, τα εκτελέσιμα αρχεία έχουν δημιουργηθεί. Μπορείτε να ελέγξετε τη λειτουργία τους με την εντολή
make check
Αν όλα είναι εντάξει, προχωρούμε στην εγκατάσταση.
make install
Τα αρχεία θα εγκαταστασθούν στον κατάλογο ~/units174 που δημιουργήσαμε.
Αν όλα πήγαν καλά μπορούμε να εκτελέσουμε το λογισμικό. Πρώτα μεταφερόμαστε στον κατάλογο εγκατάστασης.
cd ~/units174
Ο κατάλογος περιέχει τους παρακάτω υπο-καταλόγους.
bin | Τα εκτελέσιμα (binarιes) |
info | Τεκμηρίωση έτοιμη για χρήση με το GNU info |
man | Σελίδες εγχειριδίου man |
share | Μοιραζόμενα αρχεία δεδομένων |
Για την εκτέλεση μεταφερόμαστε στον υπο-κατάλογο bin και γράφουμε
./units
Για παράδειγμα μετατρέπουμε 6 πόδια σε μέτρα.
You have: 6 feet
You want: metres
* 1.8288
Αν πάρετε σαν απάντηση το 1.8288, τότε συγχαρητήρια!
Για να δούμε ποιές μετατροπές μπορούν να γίνουν μπορούμε να ελέγξουμε το αρχείο units.dat στον κατάλογο share.
Η τεκμηρίωση υπάρχει σε δύο μορφές. Στον υπο-κατάλογο man υπάρχει τεκμηρίωση που θα μπορούσε να ενσωματωθεί στον man του Unix εάν κάνουμε 'κεντρική' εγκατάσταση ως διαχειριστές συστήματος. Αντίστοιχα στον υπο-κατάλογο info έχουμε τεκμηρίωση σε μορφή κατανοητή για το GNU info. Αυτή μπορεί να διαβαστεί αν μεταφερθούμε στον υποκατάλογο info και γράψουμε
info --file=units.info
Συνήθως στη φάση ανάπτυξης ενός λογισμικού, οι προγραμματιστές προσθέτουν πληροφορίες εκσφαλμάτωσης που περιλαμβάνονται στο εκτελέσιμο. Με αυτό τον τρόπο μπορούν να ελέγξουν την λειτιυργία του λογισμικού με τη βοήθεια κάποιου ειδικού περιβάλλοντος παρακολούθησης.
Αυτή η πληροφορία είναι περιττή για τον τελικό χρήστη. Θεωρούμε οτι ως τελικοί χρήστες δεν είναι πιθανό να ασχοληθούμε με τη διόρθωση ενός προγράμματος που είναι πια έτοιμο και διατίθεται δημόσια προς χρήση. Παρ' όλα αυτά, αρκετές φορές όταν εκτελούμε τη διαδικασία της σύνθετης μεταγλώττισης του πηγαίου κώδικα, είναι πιθανό να περιλαμβάνουμε και τις πληροφορίες εκσφαλμάτωσης. Μπορούμε να δοκιμάσουμε να απομακρύνουμε αυτή τη πληροφορία από το τελικό εκτελέσιμο πρόγραμμα. Έτσι το μέγεθος του εκτελέσιμου κώδικα θα είναι μικρότερο και η εκτέλεση λίγο ταχύτερη.
Κατ' αρχή θα διαπιστώσουμε το μέγεθος του εκτελέσιμου πριν και μετά την απομάκρυνση του περιττού κώδικα. Πρώτα μεταφερόμαστε στον υπο-κατάλογο bin του καταλόγου εγκατάστασης.
cd ~/units174/bin
ls -l
Βλέπουμε οτι το μέγεθος του αρχείου είναι πάνω από 100 kbytes. Μπορούμε να πάρουμε περισσότερες πληροφορίες για τον τύπο του αρχείου με την εντολή file.
file units
units: ELF 32-bit LSB executable, Intel
80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses
shared libs), for GNU/Linux 2.2.0, not stripped
Για να απομακρύνουμε τον περιττό κώδικα χρησιμοποιούμε τη εντολή strip.
strip units
ls -l
Όπως βλέπουμε το μέγεθος του αρχείου είναι λίγο πάνω από 30 kbytes - το ένα τρίτο του αρχικού μεγέθους. Τα δύο τρίτα ήταν πληροφορίες εκσφαλμάτωσης!
Ελέγχουμε τις πληροφορίες του αρχείου πάλι.
file units
units: ELF 32-bit LSB executable, Intel
80386,
version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared
libs), for GNU/Linux 2.2.0, stripped
Μερικές φορές είναι δυνατό να χρησιμοποιήσουμε την εντολή make για την απευθείας εγκατάσταση 'καθαρισμένου' εκτελέσιμου προγράμματος. Αντί να γράψουμε make install, μπορούμε να γράψουμε make install-strip.
Στη
συνέχεια,
επιστρέφοντας
στη παράγραφο 5,
αφού
τελειώσουμε
με το make, αντί να
εκτελέσουμε
το make install
εκτελούμε