Το σύστημα πακέτων λογισμικού του Debian

Εικόνα: markos
Submitted by markos on Δευ, 05/03/2007 - 01:07

Το σύστημα πακέτων του Debian, μαζί με ορισμένα εργαλεία όπως το APT, στην ουσία ευθύνονται για το ότι το Debian θεωρείται μια από τις πιο εύκολες στη διαχείριση διανομές Linux που υπάρχουν αυτή τη στιγμή. Τα πλεονεκτήματα του συστήματος πακέτων του Debian είναι η αυστηρότητα και η συνέπεια από την οποία διέπεται, όσον αφορά τις εξαρτήσεις (dependencies) μεταξύ των πακέτων, καθώς και την αυξημένη παραμετροποίηση των πακέτων κατά την εγκατάσταση, με τη χρήση προγραμμάτων όπως το debconf. Κάθε πακέτο λογισμικού του Debian, χαρακτηρίζεται από αρκετά πεδία, τα πιο σημαντικά εκ των οποίων είναι τα εξής:

  • Όνομα (Package)
    Φυσικά κάθε πακέτο λογισμικού χαρακτηρίζεται από ένα μοναδικό όνομα. Οι μόνοι περιορισμοί που ισχύουν σε κάθε όνομα είναι ότι πρέπει να γράφεται με μικρούς λατινικούς χαρακτήρες.

  • Αρχιτεκτονική (Architecture)
    Όπως αναφέραμε και στην αρχή του οδηγού αυτού, η διανομή Debian είναι διαθέσιμη για περισσότερες από μία αρχιτεκτονικές, η κάθε μία από τις οποίες χρησιμοποιεί τα δικά της πακέτα λογισμικού. Εξαίρεση στον κανόνα αυτό αποτελούν τα ανεξάρτητα αρχιτεκτονικής πακέτα λογισμικού (architecture independent packages) που προσφέρουν αρχεία δεδομένων για άλλα πακέτα, ή σενάρια κελύφους ή ακόμη και πηγαίο κώδικα κάποιας μη μεταγλωττίσιμης γλώσσας, όπως Perl, Python, κλπ. Για αυτά τα πακέτα, η αρχιτεκτονική ορίζεται ως all.

  • Τομέας (Section)
    Κάθε πακέτα ανήκει σε κάποιο τομέα, ώστε να είναι εύκολη η κατηγοριοποίηση και αναζήτησή τους στη διανομή. Κάτι τέτοιο είναι απαραίτητο, ειδικά αν σκεφτούμε ότι μια διανομή όπως το Debian αποτελείται από περισσότερα από 8000 πακέτα! Υπάρχουν αρκετοί τομείς που καλύπτουν σχεδόν όλες τις κατηγορίες λογισμικού, όπως base, comms, devel, games, graphics, net, www, x11, κλπ.

  • Έκδοση (Version)
    Η έκδοση του κάθε πακέτου είναι ένα από τα πιο σημαντικά πεδία και χάρη σε αυτό είναι δυνατή η συχνή ανανέωση των πακέτων. Η έκδοση αποτελείται από δύο πεδία, την κύρια έκδοση του πακέτου και την δευτερεύουσα έκδοση (ή αναθεώρηση, revision). Η κύρια έκδοση είναι η έκδοση με την οποία διανέμεται το πακέτο από τους δημιουργούς του (και όχι από το Debian) και λέγεται συχνά και upstream ή pristine version (αναλλοίωτη ή άθικτη έκδοση) ενώ η δευτερεύουσα έκδοση είναι αυτή που αφορά τις αλλαγές από τους ίδιους τους συντηρητές και Developers του Debian. Συχνά, υπάρχουν περισσότερες από μία revisions για την ίδια έκδοση του ίδιου πακέτου. Η κύρια έκδοση συνήθως είναι ένας δεκαδικός αριθμός (π.χ. 3.2) αλλά πολλές φορές συναντάται και ως ημερομηνία σε ανάστροφη μορφή (YYYYMMDD) όπως π.χ. σε πακέτα λογισμικού από δέντρα CVS.

  • Συντηρητής (Maintainer)
    Ο συντηρητής κάποιου πακέτου είναι κάποιος Developer ή η ομάδα από Developers στην περίπτωση των μεγάλων και πολύπλοκων πακέτων (όπως τα X, η GNU C library και ο μεταγλωττιστής GCC) που αναλαμβάνουν τη συγκρότηση και κατασκευή του πακέτου λογισμικού από την αναλλοίωτη έκδοση του λογισμικού που διατίθεται από τους ίδιους τους δημιουργούς του. Είναι υπεύθυνος για την επίλυση οποιονδήποτε προβλημάτων που χαρακτηρίζουν το ίδιο το πακέτο, τα οποία καταχωρούνται στο Debian Bug Tracking System (BTS).

  • Εξαρτήσεις (Depends)
    Οι εξαρτήσεις είναι ίσως το πιο σημαντικό πεδίο σε ένα πακέτο. Κάθε πακέτο για να λειτουργήσει, εξαρτάται από μια ομάδα άλλων πακέτων, πολλές φορές με συγκεκριμένες εκδόσεις. Δηλώνοντας τις εξαρτήσεις αυτές, αποφεύγεται η εγκατάσταση κάποιου λογισμικού χωρίς τα πακέτα από τα οποία εξαρτάται και χωρίς τα οποία δε θα μπορούσε να λειτουργήσει σωστά. Με βάση αυτό το πεδίο, είναι δυνατή η εγκατάσταση όλόκληρου σχεδόν του συστήματος με μία γραμμή εντολής, όπως θα δούμε και σε επόμενη παράγραφο (σύστημα APT).

  • Ασυμβατότητα (Conflicts)
    Παράλληλα με τις εξαρτήσεις, πολύ σημαντική είναι επίσης η ασυμβατότητα κάποιων πακέτων μεταξύ τους. Άν για παράδειγμα προσπαθήσετε να εγκαταστήσετε δύο διακομιστές αλληλογραφίας (mail servers) το σύστημα αφού σας ενημερώσει σχετικά, θα προχωρήσει στην απεγκατάσταση του ενός και θα προχωρήσει στην εγκατάσταση του άλλου.

  • Περιγραφή (Description)
    Κάθε πακέτο έχει μια σύντομη περιγραφή μιας γραμμής κειμένου και μια αναλυτική. Η σύντομη φαίνεται όταν ζητάτε μια εκτενή λίστα πακέτων (π.χ. με την εντολή dpkg -l) ενώ η αναλυτική όταν ζητάτε εκτεταμένες πληροφορίες για κάποιο συγκεκριμένο πακέτο (dpkg -s).

    Με βάση ορισμένα από αυτά τα πεδία, συγκεκριμένα το όνομα, την αρχιτεκτονική και την έκδοση (κύρια και δευτερεύουσα) ονομάζεται το αρχείο που περιέχει το πακέτο λογισμικού. Συγκεκριμένα, κάθε πακέτο στο Debian χρησιμοποιεί την εξής ονοματολογία:

    name-version-revision_arch.deb
    

    όπου name το όνομα του πακέτου (πάντα με μικρούς λατινικούς χαρακτήρες), version η αναλλοίωτη έκδοση του πακέτου, revision η αναθεώρηση του πακέτου στο Debian, arch η αρχιτεκτονική και .deb είναι η κατάληξη που χαρακτηρίζει κάθε πακέτο λογισμικού του Debian. Ένα παράδειγμα ονόματος είναι coreutils-5.0-4_i386.deb.

    Υπάρχει περίπτωση να δούμε και ένα ακόμη πεδίο το χρονικό ορόσημο (epoch), το οποίο χωρίζεται από την κύρια έκδοση με άνω και κάτω τελεία “:”. Αυτό είναι ένας αριθμός που όταν υπάρχει, επιβάλλει την εγκατάσταση ενός πακέτου ακόμη και όταν το ήδη εγκατεστημένο έχει φαινομενικά μεγαλύτερη έκδοση. Για παράδειγμα, έστω ότι έχουμε το πακέτο λογισμικού autotools-dev με έκδοση που αντιστοιχεί στην ημερομηνία συγκρότησής του από το δέντρο CVS (20030519) και revision 1, δηλαδή η έκδοση του πακέτου λογισμικού είναι 20030519-1.

    Αν κάποια στιγμή κυκλοφορήσει μια τελική έκδοση του πακέτου, π.χ. 2.1-1 τότε το σύστημα δε θα δεχτεί να το εγκαταστήσει γιατί, ως αριθμός, η έκδοση 20030519-1 είναι προφανώς μεγαλύτερη από τη 2.1-1. Σε αυτήν την περίπτωση χρησιμοποιείται το πεδίο epoch και η έκδοση του νέου πακέτου είναι πλέον 1:2.1-1. Το σύστημα διαχείρισης πακέτων θα αναγνωρίσει το epoch και θα εγκαταστήσει το σωστό πακέτο. Σε περίπτωση που και η παλιά έκδοση είχε πεδίο epoch, θα εγκατασταθεί το πακέτο με το μεγαλύτερο epoch.

    Εξαρτήσεις & Εκδόσεις

    Θα αναφερθούμε λίγο περισσότερο στη σημασία των εξαρτήσεων και των εκδόσεων και το πόσο σημαντικές είναι στην διαχείριση του συστήματος.
    Ως παράδειγμα θα θεωρήσουμε ένα από τα πιο χρήσιμα πακέτα στη διανομή (και ίσως το πιο απαραίτητο!), το μεταγλωττιστή GNU της γλώσσας C, gcc. Το πακέτο αυτό έχει τη στιγμή της συγγραφής του οδηγού τις εξής εξαρτήσεις:

    cpp (>= 3:3.3-1), gcc-3.3 (>= 1:3.3-0pre9), cpp-3.3 (>= 1:3.3-0pre9)
    

    Αυτό σημαίνει ότι για να μπορέσουμε να εγκαταστήσουμε το πακέτο gcc, θα πρέπει πρώτα να έχουμε εγκαταστήσει τα πακέτα cpp, gcc-3.3 και cpp-3.3 με εκδόσεις μεγαλύτερες ή ίσες από αυτές που φαίνονται στις παρενθέσεις.
    Αντίστοιχα, το πακέτο gcc-3.3 εξαρτάται από τα εξής πακέτα:

    gcc-3.3-base, libgcc1 (>= 1:3.3), libc6 (>= 2.3.1-1), cpp-3.3 (>= 1:3.3), 
    cpp-3.3 (<< 1:3.4), binutils (>= 2.13.90.0.10)
    

    Έτσι για να εγκαταστήσουμε το πακέτο gcc, θα πρέπει να έχουμε εγκαταστήσει όλα τα παραπάνω πακέτα (καθώς και τις εξαρτήσεις του καθενός).

    Προφανώς, η εγκατάσταση των πακέτων, αν φυσικά πρόκειται να γίνει δια χειρός, θα πρέπει να γίνει από το χαμηλότερο επίπεδο του δέντρου και σταδιακά να ανεβαίνουμε επίπεδο. Κάτι τέτοιο μπορεί να αποδειχτεί αρκετά κουραστικό ειδικά όταν πρόκειται για εγκατάσταση πολλών πακέτων. Ευτυχώς, το Debian προσφέρει το APT, ένα εργαλείο που αυτοματοποιεί τη διαδικασία της εγκατάστασης σε μεγάλο βαθμό, όπως θα δούμε και σε επόμενη παράγραφο.

0
Your rating: None