Ένα σύστημα UNIX μπορεί να περιέχει τόσο ελεύθερο όσο και εμπορικό (ιδιόκτητο) λογισμικό. Γενικά είναι δυνατόν ένας χρήστης να κατεβάσει και να μεταγλωττίσει μικρά πακέτα λογισμικού στο δικό του κατάλογο. Αυτό το λογισμικό πιθανόν είναι χρήσιμο μόνο για συγκεκριμένα άτομα.
Για να εγκαταστήσετε λογισμικό από τον πηγαίο κώδικα, είναι απαραίτητα κάποια βήματα.
Από όλα τα παραπάνω βήματα, πιθανώς το πιο δύσκολο είναι η μεταγλώττιση του πηγαίου κώδικα.
Όλες οι γλώσσες υψηλού επιπέδου πρέπει να μετατραπούν σε μια μορφή που μπορεί να καταλάβει ο υπολογιστής. Για παράδειγμα, ο πηγαίος κώδικας σε γλώσσα C μετατρέπεται σε μια γλώσσα χαμηλού επιπέδου που ονομάζεται assembly. Η assembly που παράγεται από αυτό το πρώτο στάδιο μετατρέπεται στον αντικειμενικό κώδικα (object code) ο οποίος είναι κομμάτια κώδικα τα οποία ο υπολογιστής μπορεί να καταλάβει άμεσα. Το τελευταίο στάδιο στην μεταγλώττιση περιλαμβάνει την σύνδεση (link) του αντικειμενικού κώδικα με βιβλιοθήκες κώδικα (libraries) οι οποίες περιέχουν συγκεκριμένες ενσωματωμένες συναρτήσεις (functions). Το τελευταίο αυτό στάδιο παράγει ένα εκτελέσιμο πρόγραμμα.
Η εκτέλεση όλων αυτών των βημάτων με το χέρι είναι πολύπλοκη και πέρα από τις δυνατότητες του τυπικού χρήστη. Ευτυχώς, οι προγραμματιστές έχουν φτιάξει μια σειρά από εργαλεία και βοηθητικά προγράμματα που απλοποιούν την διαδικασία.
Η εντολή make επιτρέπει στους προγραμματιστές να διαχειριστούν μεγάλα προγράμματα ή ομάδες προγραμμάτων. Βοηθάει στην ανάπτυξη μεγάλων προγραμμάτων καταγράφοντας ποια κομμάτια του προγράμματος έχουν αλλάξει και μεταγλωττίζοντας μόνο τα τμήματα που έχουν μεταβληθεί σε σχέση με την τελευταία μεταγλώττιση.
Το πρόγραμμα make διαβάζει τους κανόνες που θα ακολουθήσει για την μεταγλώττιση από ένα αρχείο κειμένου που ονομάζεται Makefile και το οποίο βρίσκεται στον ίδιο κατάλογο με τα αρχεία του πηγαίου κώδικα. Περιέχει πληροφορίες σχετικά με τον τρόπο μεταγλώττισης του λογισμικού, π.χ. το επίπεδο βελτιστοποίησης, αν θέλουμε να συμπεριληφθούν μέσα στο εκτελέσιμο οδηγίες αποσφαλμάτωσης (debugging) κ.λ.π. Περιέχει επίσης πληροφορίες για την τοποθεσία εγκατάστασης του τελικού εκτελέσιμου αρχείου, των σελίδων βοήθειας (manual pages), των αρχείων δεδομένων, τυχόν βιβλιοθηκών που χρησιμοποιούνται από το εκτελέσιμο, αρχείων ρυθμίσεων κ.α.
Μερικά πακέτα απαιτούν να αλλάξετε το Makefile χειροκίνητα για να ρυθμίσετε τον τελικό κατάλογο εγκατάστασης και πιθανόν και άλλες παραμέτρους. Ωστόσο, πολλά πακέτα διανέμονται πλέον με το βοηθητικό πρόγραμμα GNU configure.
Καθώς αυξάνονταν οι παραλλαγές συστημάτων UNIX, έγινε δυσκολότερη η συγγραφή προγραμμάτων που να μπορούν να εκτελεστούν σε όλες τις διανομές. Οι προγραμματιστές συχνά δεν είχαν πρόσβαση σε κάθε διαθέσιμο σύστημα, και τα χαρακτηριστικά μερικών συστημάτων άλλαζαν από έκδοση σε έκδοση. Το σύστημα ρύθμισης και μεταγλώττισης GNU απλοποιεί την μεταγλώττιση προγραμμάτων που διανέμονται με τη μορφή πηγαίου κώδικα. Όλα τα προγράμματα μεταγλωττίζονται με τη βοήθεια μια απλής και τυποποιημένης διαδικασίας δύο βημάτων. Ο χρήστης που θα μεταγλωττίσει το πρόγραμμα δεν χρειάζεται να εγκαταστήσει ειδικά εργαλεία για να εκτελέσει αυτή την εργασία.
Η εντολή configure είναι ένα script για το κέλυφος το οποίο προσπαθεί να βρει τις σωστές τιμές που απαιτούνται σε διάφορες μεταβλητές του συστήματος και χρησιμοποιούνται κατά τη μεταγλώττιση. Χρησιμοποιεί αυτές τις τιμές για να δημιουργήσει ένα αρχείο Makefile σε κάθε κατάλογο του πακέτου.
Ο απλούστερος τρόπος για τη μεταγλώττιση ενός πακέτου, είναι:
Το βοηθητικό πρόγραμμα configure υποστηρίζει μια μεγάλη ποικιλία επιλογών. Μπορείτε συνήθως να χρησιμοποιήσετε την επιλογή --help για να δείτε μια λίστα με ενδιαφέρουσες επιλογές για το συγκεκριμένο configure script που θα εκτελέσετε.
Οι μόνες γενικής φύσεως επιλογές που πρόκειται πιθανόν να χρησιμοποιήσετε είναι οι --prefix και --exec-prefix. Οι επιλογές αυτές χρησιμοποιούνται για να καθορίσουν τους καταλόγους εγκατάστασης.
Ο κατάλογος που δίνεται στην επιλογή --prefix θα περιέχει τα αρχεία που δεν έχουν σχέση με την αρχιτεκτονική του μηχανήματος, όπως αρχεία δεδομένων, τεκμηρίωσης και ρυθμίσεων
Ο κατάλογος που δίνεται στην επιλογή --exec-prefix, (ο οποίος τυπικά είναι υποκατάλογος του καταλόγου που δίνεται στο --prefix), θα περιέχει αρχεία που εξαρτώνται από το συγκεκριμένο μηχάνημα, όπως τα εκτελέσιμα.
Για το συγκεκριμένο παράδειγμα, θα κατεβάσουμε ένα μικρό ΕΛΛΑΚ πρόγραμμα, το οποίο μετατρέπει μεταξύ διαφορετικών μονάδων μέτρησης.
Αρχικά, δημιουργήστε ένα κατάλογο για να αποθηκεύσετε τον πηγαίο κώδικα:
% mkdir download
Κατεβάστε από εδώ τον πηγαίο κώδικα και αποθηκεύστε τον στον κατάλογο που δημιουργήσατε.
Μετακινηθείτε στον κατάλογο download και δείτε τα περιεχόμενα του.
% cd download
% ls -l
Όπως μπορείτε να δείτε, το όνομα του αρχείου έχει κατάληξη tar.gz. Η εντολή tar μπορεί να αποθηκεύσει αρκετά αρχεία και καταλόγους σε ένα μοναδικό αρχείο tar. Το αρχείο που προκύπτει συμπιέζεται έπειτα με τη χρήση του προγράμματος gzip, δημιουργώντας έτσι ένα αρχείο tar.gz.
Αρχικά, αποσυμπιέστε το αρχείο χρησιμοποιώντας την εντολή 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. Πρόκειται για απλά αρχεία κειμένου, και μπορείτε να τα δείτε εύκολα με την εντολή less. Τα αρχεία αυτά περιέχουν σημαντικές πληροφορίες σχετικά με τη μεταγλώττιση και εκτέλεση του λογισμικού.
Το πακέτο units που μεταγλωττίζουμε χρησιμοποιεί το σύστημα GNU configure για την μεταγλώττιση του πηγαίου κώδικα. Θα πρέπει να καθορίσουμε τον κατάλογο εγκατάστασης, καθώς ο προεπιλεγμένος θα βρίσκεται στους κύριους καταλόγους του συστήματος όπου δεν έχετε δυνατότητα εγγραφής. Θα πρέπει να δημιουργήσετε ένα κατάλογο εγκατάστασης μέσα στον προσωπικό σας κατάλογο.
% mkdir ~/units174
Εκτελέστε έπειτα το βοηθητικό πρόγραμμα configure, θέτοντας ταυτόχρονα και τον κατάλογο που θα γίνει η εγκατάσταση
% ./configure --prefix=$HOME/units174
Σημείωση:
Η μεταβλητή $HOME είναι ένα παράδειγμα μεταβλητής περιβάλλοντος. Η τιμή του $HOME είναι το πλήρες μονοπάτι για τον προσωπικό σας κατάλογο. Για να το διαπιστώσετε, απλώς πληκτρολογήστε:
% echo $HOME
για να δείτε τα περιεχόμενα αυτής της μεταβλητής. Θα μιλήσουμε περισσότερο για τις μεταβλητές περιβάλλοντος σε επόμενο μάθημα.
Αν εκτελεστεί σωστά το configure, θα δημιουργήσει ένα αρχείο Makefile με όλες τις απαραίτητες επιλογές. Μπορείτε να δείτε το Makefile αν θέλετε (χρησιμοποιήστε και πάλι την εντολή less), αλλά μην αλλάξετε τα περιεχόμενα του.
Μπορείτε τώρα να ξεκινήσετε τη μεταγλώττιση του πακέτου χρησιμοποιώντας την εντολή make.
% make
Μετά από ένα - δύο λεπτά (εξαρτάται από την ταχύτητα του υπολογιστή σας), θα δημιουργηθούν τα εκτελέσιμα. Μπορείτε να ελέγξετε αν η μεταγλώττιση έγινε σωστά, πληκτρολογώντας:
% make check
Αν όλα πήγαν καλά, μπορείτε τώρα να εγκαταστήσετε το πακέτο.
% make install
Η εντολή αυτή θα εγκαταστήσει το πακέτο στον κατάλογο ~/units174 που δημιουργήσαμε προηγουμένως.
Είμαστε πλέον έτοιμοι να εκτελέσουμε το λογισμικό (θεωρώντας ότι όλα λειτούργησαν).
% cd ~/units174
Αν δείτε τα περιεχόμενα του καταλόγου units, θα βρείτε ένα αριθμό από υποκαταλόγους.
| bin | Τα εκτελέσιμα αρχεία |
| info | Τεκμηρίωση μορφοποιημένη κατάλληλα για το πρόγραμμα GNU info |
| man | Σελίδες βοήθειας (man pages) |
| share | Κοινόχρηστα αρχεία δεδομένων |
Για να εκτελέσετε το πρόγραμμα, μετακινηθείτε στον κατάλογο bin και γράψτε
% ./units
Για παράδειγμα, μετατρέψτε 6 πόδια σε μέτρα.
You have: 6 feet
You want: metres
* 1.8288
Αν πάρετε την απάντηση 1.8288, συγχαρητήρια! Το πρόγραμμα λειτουργεί κανονικά.
Για να δείτε ποιες μονάδες μπορεί να μετατρέψει, κοιτάξτε το αρχείο δεδομένων στον κατάλογο share (η λίστα είναι σχετικά μεγάλη).
Για να διαβάσετε την πλήρη τεκμηρίωση, μετακινηθείτε στον κατάλογο info και πληκτρολογήστε:
% info --file=units.info
Κατά την ανάπτυξη ενός πακέτου λογισμικού, είναι χρήσιμο για τον προγραμματιστή να συμπεριλάβει πληροφορίες αποσφαλμάτωσης στο εκτελέσιμο αρχείο που προκύπτει. Με τον τρόπο αυτό, αν εμφανιστούν προβλήματα κατά την εκτέλεση του προγράμματος, ο προγραμματιστής μπορεί να φορτώσει το εκτελέσιμο σε ένα κατάλληλο πρόγραμμα και να βρει τα προβλήματα (bugs).
Αυτό είναι χρήσιμο για τον προγραμματιστή, αλλά άχρηστο για τον χρήστη. Μπορούμε να θεωρήσουμε ότι το πακέτο, από τη στιγμή που έχει τελειώσει και είναι διαθέσιμο για κατέβασμα έχει ήδη δοκιμαστεί και διορθωθεί. Ωστόσο, όταν μεταγλωττίσαμε το παραπάνω πακέτο, συμπεριλάβαμε στο τελικό εκτελέσιμο και τις πληροφορίες αποσφαλμάτωσης. Μια και είναι απίθανο να τις χρειαστούμε ως τελικοί χρήστες του προγράμματος, μπορούμε να τις βγάλουμε από το εκτελέσιμο. Θα έχουμε έτσι το πλεονέκτημα ενός μικρότερου εκτελέσιμου αρχείου που θα εκτελείται και λίγο ταχύτερα.
Θα δούμε το μέγεθος του εκτελέσιμου αρχείου πριν και μετά τη διαδικασία. Μετακινηθείτε στον υποκατάλογο bin του καταλόγου εγκατάστασης του προγράμματος units:
% cd ~/units174/bin
% ls -l
Όπως μπορείτε να δείτε, το αρχείο είναι πάνω από 100 kbytes σε μέγεθος. Μπορείτε να δείτε περισσότερες πληροφορίες για το αρχείο χρησιμοποιώντας την εντολή file:
% file units
units: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped
Για να διαγράψετε από το εκτελέσιμο τις πληροφορίες αποσφαλμάτωσης (debug) και αριθμών γραμμών από το δυαδικό αρχείο, χρησιμοποιήστε την εντολή strip:
% strip units
% ls -l
Όπως μπορείτε να δείτε, το αρχείο τώρα είναι μόλις 36 kbytes - το ένα τρίτο του αρχικού του μεγέθους! Δύο τρίτα του εκτελέσιμου αρχείου καταλαμβάνονταν από τις πληροφορίες αποσφαλμάτωσης.
Ελέγξτε ξανά τις πληροφορίες του αρχείου.
% file units
units: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), stripped
Σε μερικές περιπτώσεις, μπορείτε να χρησιμοποιήσετε την εντολή make για να εγκαταστήσετε δυαδικά αρχεία τα οποία από την αρχή να μην περιέχουν πληροφορίες αποσφαλμάτωσης. Αντί να γράψετε make install, πληκτρολογήστε απλώς make install-strip
M.Stonebank@surrey.ac.uk, © October 2001