Το σύστημα πακέτων χρησιμοποιεί μία ιδιωτική βάση δεδομένων για να παρακολουθεί
ποια πακέτα είναι εγκατεστημένα, ποια όχι και ποια είναι διαθέσιμα για
εγκατάσταση. Το πρόγραμμα apt-get
χρησιμοποιεί αυτή τη βάση
δεδομένων για να διαπιστώσει πως να εγκαταστήσει τα πακέτα που ζητά ο χρήστης
και για να διαπιστώσει ακόμα ποια επιπλέον πακέτα χρειάζονται ώστε ένα
συγκεκριμένο πακέτο να λειτουργεί σωστά.
Για να ανανεώσετε αυτό τον κατάλογο, θα χρησιμοποιούσατε την εντολή
apt-get update
. Η εντολή αυτή ψάχνει τους καταλόγους των πακέτων
στα αρχεία που βρίσκονται στο /etc/apt/sources.list· δείτε το Το αρχείο /etc/apt/sources.list,
Section 2.1 για περισσότερες πληροφορίες σχετικά με το αρχείο αυτό.
Καλό είναι να εκτελείτε την εντολή αυτή συχνά για να είσθε εσείς και το σύστημά σας ενημερωμένοι για πιθανές ενημερώσεις πακέτων, ειδικά για πακέτα ασφαλείας.
Επιτέλους, η διεργασία που όλοι περιμένατε! Με το αρχείο σας sources.list έτοιμο και τον κατάλογο με τα διαθέσιμα πακέτα ενημερωμένο το μόνο που έχετε να κάνετε είναι να εκτελέσετε την apt-get για να εγκαταστήσετε τα επιθυμητά πακέτα. Για παράδειγμα, μπορείτε να εκτελέσετε:
# apt-get install xchat
Το APT θα ψάξει την βάση δεδομένων του για την τελευταία έκδοση του πακέτου αυτού και θα την ανακτήσει από το αντίστοιχο αρχείο όπως αυτό καθορίζεται στο sources.list. Σε περίπτωση που το πακέτο αυτό εξαρτάται από ένα άλλο -- όπως στη συγκεκριμένη περίπτωση -- το APT θα ελέγξει τις εξαρτήσεις του και θα εγκαταστήσει τα απαραίτητα πακέτα. Δείτε αυτό το παράδειγμα:
# apt-get install nautilus Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 17.2MB will be used. Do you want to continue? [Y/n]
Το πακέτο nautilus
εξαρτάται από τις κοινόχρηστες βιβλιοθήκες που
αναφέρονται, επομένως το APT θα τις ανακτήσει από το αρχείο. Εάν είχατε
καθορίσει τα ονόματα αυτών των βιβλιοθηκών στη γραμμή εντολών του
apt-get, το APT δεν θα ρωτούσε εάν θέλετε να συνεχίσετε· θα
δεχόταν αυτόματα ότι θέλετε να εγκαταστήσετε όλα αυτά τα πακέτα.
Αυτό σημαίνει ότι το APT ρωτάει για επιβεβαίωση μόνο όταν πρέπει να εγκαταστήσει πακέτα τα οποία δεν είχαν καθοριστεί στην γραμμή εντολών.
Οι ακόλουθες επιλογές για το apt-get μπορεί να είναι χρήσιμες:
-h This help text. -d Download only - do NOT install or unpack archives -f Attempt to continue if the integrity check fails -s No-act. Perform ordering simulation -y Assume Yes to all queries and do not prompt -u Show a list of upgraded packages as well
Πολλαπλά πακέτα μπορούν να επιλεγούν για εγκατάσταση σε μία γραμμή. Αρχεία τα οποία έχουν 'κατεβαστεί' από το δίκτυο τοποθετούνται στον κατάλογο /var/cache/apt/archives για να μπορούν να εγκατασταθούν αργότερα.
Μπορείτε να καθορίσετε πακέτα τα οποία θα αφαιρεθούν στην ίδια γραμμή εντολών,επίσης. Απλά βάλτε ένα '-' αμέσως μετά το όνομα του πακέτου προς αφαίρεση, κάπως έτσι:
# apt-get install nautilus gnome-panel- Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 2594kB will be used. Do you want to continue? [Y/n]
Δείτε τον τομέα Αφαιρώντας πακέτα, Section 3.3 για λεπτομέρειες στην αφαίρεση πακέτων.
Αν με κάποιο τρόπο προκαλέσετε ζημιά σε ένα εγκατεστημένο πακέτο ή απλά θέλετε τα αρχεία ενός πακέτου να επανεγκατασταθούν με τη νεότερη διαθέσιμη έκδοση, χρησιμοποιήστε την επιλογή --reinstall με τον ακόλουθο τρόπο:
# apt-get --reinstall install gdm Reading Package Lists... Done Building Dependency Tree... Done 0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded. Need to get 0B/182kB of archives. After unpacking 0B will be used. Do you want to continue? [Y/n]
Η έκδοση του APT που χρησιμοποιήθηκε σε αυτό το εγχειρίδιο είναι η 0.5.3, η τρέχουσα έκδοση του `unstable' (sid) κατά το χρόνο συγγραφής. Εάν έχετε αυτή την έκδοση εγκατεστημένη, τότε διαθέτετε επιπλέον δυνατότητες : μπορείτε να δίνετε εντολές της μορφής apt-get install package/distribution και να εγκαταστήσετε ένα πακέτο από μια συγκεκριμένη έκδοση, ή την εντολή apt-get install package=version. Για παράδειγμα:
# apt-get install nautilus/unstable
θα εγκαταστήσει το nautilus από την έκδοση `unstable' ακόμα και αν έχετε εγκατεστημένη την `stable'. Αποδεκτές ονομασίες για το 'distribution' είναι οι stable, testing, και unstable.
Ίσως προτιμήσετε τη χρήση του -t για την επιλογή της έκδοσης
προέλευσης, έτσι ώστε το apt-get
να προτιμά αυτή την έκδοση όταν
επιλύει εξαρτήσεις.
ΣΗΜΑΝΤΙΚΌ: η έκδοση `unstable' του Debian είναι αυτή η οποία δέχεται πρώτη τις νεώτερες εκδόσεις των πακέτων. Εδώ γίνονται όλες οι αλλαγές από τις οποίες περνά ένα πακέτο, από τα πιό μικρά μέχρι τα πιό σημαντικά που επηρεάζουν πολλά άλλα ή και ολόκληρο το σύστημα. Έχοντάς υπόψιν σας τα παραπάνω να θυμάστε ότι αυτή η έκδοση της διανομής δεν πρέπει να χρησιμοποιείται από άπειρους χρήστες ή από αυτούς που απαιτούν δοκιμασμένη σταθερότητα.
Η έκδοση `testing' είναι σε ελαφρώς καλύτερη μοίρα σε σχέση με την `unstable' όσον αφορά την σταθερότητα τουλάχιστον, αλλά και πάλι για συστήματα παραγωγής καλύτερα να χρησιμοποιείτε την έκδοση stable.
Εάν δεν χρειάζεστε πλέον ένα πακέτο, μπορείτε να το αφαιρέσετε από το σύστημά σας χρησιμοποιώντας το APT. Για να το κάνετε αυτό απλώς πληκτρολογείστε: apt-get remove package. Για παράδειγμα:
# apt-get remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets gnome-panel gnome-panel-data gnome-session 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]
Όπως μπορείτε να δείτε στο παραπάνω παράδειγμα, το APT αφαιρεί και τα πακέτα που εξαρτώνται από το πακέτο που ζητήσατε να αφαιρεθεί. Δεν υπάρχει τρόπος να αφαιρεθεί ένα πακέτο με το APT χωρίς να αφαιρεθούν και τα πακέτα που εξαρτώνται από αυτό.
Εκτελώντας την apt-get
, όπως παραπάνω, θα αφαιρεθούν τα πακέτα
αλλά τα αρχεία ρυθμίσεών τους, εάν υπάρχουν, θα παραμείνουν άθικτα στο σύστημα.
Για μία ολοκληρωτική αφαίρεση του πακέτου, εκτελέστε:
# apt-get --purge remove gnome-panel Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: gnome-applets* gnome-panel* gnome-panel-data* gnome-session* 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. Need to get 0B of archives. After unpacking 14.6MB will be freed. Do you want to continue? [Y/n]
Προσέξτε το '*' μετά τα ονόματα. Δείχνει ότι τα αρχεία ρυθμίσεων του κάθε πακέτου θα αφαιρεθούν επίσης.
Όπως και στην περίπτωση της μεθόδου install, μπορείτε να χρησιμοποιήσετε ένα σύμβολο με την remove για να αντιστρέψετε το νόημά της για ένα συγκεκριμένο πακέτο. Στην περίπτωση της αφαίρεσης, αν προσθέσετε ένα '+' αμέσως μετά το όνομα του πακέτου, το πακέτο θα εγκατασταθεί αντί να αφαιρεθεί.
# apt-get --purge remove gnome-panel nautilus+ Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: bonobo libmedusa0 libnautilus0 nautilus The following packages will be REMOVED: gnome-applets* gnome-panel* gnome-panel-data* gnome-session* The following NEW packages will be installed: bonobo libmedusa0 libnautilus0 nautilus 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. Need to get 8329kB of archives. After unpacking 2594kB will be used. Do you want to continue? [Y/n]
Παρατηρείστε ότι η apt-get
παρουσιάζει σε λίστα τα επιπλέον πακέτα
που θα εγκατασταθούν (δηλαδή, τα πακέτα που η εγκατάστασή τους είναι απαραίτητη
για τη σωστή λειτουργία του πακέτου που ζητήθηκε η εγκατάσταση),και αυτά που θα
αφαιρεθούν, και αυτά που θα εγκατασταθούν (συμπεριλαμβάνοντας τα επιπλέον
πακέτα πάλι).
Οι αναβαθμίσεις των πακέτων είναι μια μεγάλη επιτυχία του συστήματος APT. Μπορούν να επιτευχθούν με μία μόνο εντολή: apt-get upgrade. Μπορείτε να χρησιμοποιήσετε την εντολή αυτή για να αναβαθμίσετε πακέτα μέσα στην ίδια διανομή, καθώς και να αναβαθμίσετε σε μία νέα διανομή, αν και γι αυτό το τελευταίο προτιμάται η εντολή apt-get dist-upgrade· δείτε τον τομέα Αναβαθμίζοντας σε μια νέα διανομή, Section 3.5 για περισσότερες λεπτομέρειες.
Είναι χρήσιμο να εκτελείτε αυτήν την εντολή με την επιλογή -u. Η επιλογή αυτή κάνει το APT να εμφανίζει την ολοκληρωμένη λίστα των πακέτων που θα αναβαθμιστούν. Χωρίς αυτήν, θα κάνετε αναβάθμιση στα τυφλά. Το APT θα 'κατεβάσει' τις τελευταίες εκδόσεις του κάθε πακέτου και θα τις εγκαταστήσει στη σωστή σειρά. Είναι σημαντικό να εκτελείτε πάντα την apt-get update προτού δοκιμάσετε κάτι τέτοιο. Δείτε τον τομέα Ανανεώνοντας τον κατάλογο των διαθέσιμων πακέτων, Section 3.1. Δείτε αυτό το παράδειγμα:
# apt-get -u upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages have been kept back cpp gcc lilo The following packages will be upgraded adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded. Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used. Do you want to continue? [Y/n]
Η διαδικασία είναι πολύ απλή. Παρατηρείστε ότι στις πρώτες γραμμές, η apt-get λέει ότι μερικά πακέτα έχουν γίνει kept back. Αυτό σημαίνει ότι υπάρχουν νέες εκδόσεις αυτών των πακέτων, οι οποίες δε θα εγκατασταθούν για κάποιο λόγο. Πιθανοί λόγοι είναι χαλασμένες εξαρτήσεις (ένα πακέτο από το οποίο εξαρτάται δεν έχει μια έκδοση διαθέσιμη για κατέβασμα) ή νέες εξαρτήσεις (το πακέτο πλέον εξαρτάται από νέα πακέτα μετά την τελευταία έκδοση).
Δεν υπάρχει καθαρή λύση για την πρώτη περίπτωση. Για τη δεύτερη, αρκεί να εκτελέσετε την apt-get install για το συγκεκριμένο πακέτο, καθώς αυτό θα κατεβάσει τις εξαρτήσεις. Μία ακόμα πιο καθαρή λύση είναι να χρησιμοποιήσετε την dist-upgrade. Δείτε τον τομέα Αναβαθμίζοντας σε μια νέα διανομή, Section 3.5.
Αυτό το χαρακτηριστικό του APT σας επιτρέπει να αναβαθμίσετε ένα ολόκληρο σύστημα Debian απ' ευθείας, είτε μέσω του Internet είτε μέσω ενός νέου CD (το οποίο αγοράσατε ή κατεβάσατε ως ISO image).
Χρησιμοποιείται ακόμα όταν πραγματοποιούνται αλλαγές στις σχέσεις μεταξύ των εγκατεστημένων πακέτων. Με την apt-get upgrade, αυτά τα πακέτα θα παρέμεναν άθικτα (kept back).
Για παράδειγμα, υποθέστε ότι χρησιμοποιείτε την βελτιωμένη έκδοση 0 της
σταθερής έκδοσης του Debian και αγοράζετε ένα CD με την βελτιωμένη έκδοση 3.
Μπορείτε μέσω του APT να αναβαθμίσετε το σύστημά σας από αυτό το νέο CD. Για
να το πετύχετε, χρησιμοποιήστε την apt-cdrom
(δείτε τον τομέα Προσθέτοντας ένα CD-ROM στο αρχείο
sources.list, Section 2.4) για να προσθέσετε το CD στο αρχείο σας
/etc/apt/sources.list και στη συνέχεια εκτελέστε την apt-get
dist-upgrade.
Είναι σημαντικό να σημειώσετε ότι το APT ψάχνει πάντα για τις πιο πρόσφατες εκδόσεις των πακέτων. Επομένως, αν το αρχείο σας /etc/apt/sources.list επρόκειτο να παρουσιάσει σε λίστα ένα αρχείο που είχε μια πιο πρόσφατη έκδοση ενός πακέτου από αυτή του CD, το APT θα κατέβαζε το πακέτο από εκεί.
Στο παράδειγμα που δώσαμε στον τομέα Αναβαθμίζοντας πακέτα, Section 3.4, είδαμε ότι μερικά πακέτα είχαν γίνει kept back. Θα λύσουμε αυτό το πρόβλημα τώρα με την μέθοδο dist-upgrade:
# apt-get -u dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Done The following NEW packages will be installed: cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages have been kept back lilo The following packages will be upgraded adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc 31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded. Need to get 0B/7098kB of archives. After unpacking 3118kB will be used. Do you want to continue? [Y/n]
Παρατηρείστε τώρα ότι τα πακέτα θα αναβαθμιστούν, και νέα πακέτα θα εγκατασταθούν (οι νέες εξαρτήσεις των πακέτων). Παρατηρείστε ακόμα ότι το lilo γίνεται ακόμα kept back. Μάλλον έχει σοβαρότερο πρόβλημα από μία νέα εξάρτηση. Μπορούμε να το διαπιστώσουμε εκτελώντας:
# apt-get -u install lilo Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages will be REMOVED: debconf-tiny The following NEW packages will be installed: cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2 logrotate mailx The following packages will be upgraded lilo 1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded. Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used. Do you want to continue? [Y/n]
Όπως σημειώθηκε ανωτέρω, το lilo έχει μια νέα σύγκρουση με το πακέτο
debconf-tiny
, πράγμα που σημαίνει ότι δεν μπορούσε να εγκατασταθεί
(ή αναβαθμιστεί) χωρίς να αφαιρεθεί το debconf-tiny.
Για να γνωρίζετε τι κρατάει ή αφαιρεί ένα πακέτο μπορείτε να χρησιμοποιήσετε:
# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Starting Starting 2 Investigating python1.5 Package python1.5 has broken dep on python1.5-base Considering python1.5-base 0 as a solution to python1.5 0 Holding Back python1.5 rather than change python1.5-base Investigating python1.5-dev Package python1.5-dev has broken dep on python1.5 Considering python1.5 0 as a solution to python1.5-dev 0 Holding Back python1.5-dev rather than change python1.5 Try to Re-Instate python1.5-dev Done Done The following packages have been kept back gs python1.5-dev 0 packages upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Με αυτόν τον τρόπο, παρατηρούμε εύκολα ότι το πακέτο python1.5-dev δεν μπορεί να εγκατασταθεί, λόγω μιας ανικανοποίητης εξάρτησης: python1.5.
Όταν εγκαθιστάτε ένα πακέτο το APT ανακτά τα απαραίτητα αρχεία από τους hosts
που υπάρχουν στο /etc/apt/sources.list, τα αποθηκεύει σε μια τοπική αποθήκη
(/var/cache/apt/archives/
), και στη συνέχεια προχωρά στην
εγκατάσταση, δείτε τον τομέα Εγκαθιστώντας πακέτα, Section
3.2.
Με το χρόνο η αποθήκη αυτή μπορεί να μεγαλώσει και να φτάσει να καταλαμβάνει πολύ χώρο στο σκληρό δίσκο. Ευτυχώς, το APT παρέχει εργαλεία για τη διαχείριση της τοπικής αποθήκης του: τις μεθόδους clean και autoclean του apt-get.
Η εντολή apt-get clean
αφαιρεί τα πάντα εκτός από τα κλειδωμένα
αρχεία που βρίσκονται στο /var/cache/apt/archives/
και στο
/var/cache/apt/archives/partial/
. Επομένως, εάν θέλετε να
επανεγκαταστήσετε ένα πακέτο, το APT θα το ανακτήσει και πάλι.
Η εντολή apt-get autoclean
αφαιρεί μόνο τα αρχεία πακέτων που δεν
κατεβαίνουν.
Το παρακάτω παράδειγμα δείχνει πως δουλεύει η εντολή apt-get autoclean:
# ls /var/cache/apt/archives/logrotate* /var/cache/apt/archives/gpm* logrotate_3.5.9-7_i386.deb logrotate_3.5.9-8_i386.deb gpm_1.19.6-11_i386.deb
Στο /var/cache/apt/archives υπάρχουν δύο αρχεία για το πακέτο
logrotate
και ένα για το πακέτο gpm
.
# apt-show-versions -p logrotate logrotate/stable uptodate 3.5.9-8 # apt-show-versions -p gpm gpm/stable upgradeable from 1.19.6-11 to 1.19.6-12
Η εντολή apt-show-versions
δείχνει ότι το αρχείο
logrotate_3.5.9-8_i386.deb
παρέχει την ενημερωμένη έκδοση του
πακέτου logrotate
, επομένως το
logrotate_3.5.9-7_i386.deb
είναι άχρηστο. Επίσης, το
gpm_1.19.6-11_i386.deb
είναι άχρηστο γιατί μια πιο πρόσφατη έκδοση
του πακέτου μπορεί να ανακτηθεί.
# apt-get autoclean Reading Package Lists... Done Building Dependency Tree... Done Del gpm 1.19.6-11 [145kB] Del logrotate 3.5.9-7 [26.5kB]
Τέλος, η εντολή apt-get autoclean αφαιρεί μόνο τα παλιά αρχεία. Δείτε τον τομέα Πως να αναβαθμίσετε πακέτα από συγκεκριμένες εκδόσεις του Debian, Section 3.9 για περισσότερες πληροφορίες για την εντολή apt-show-versions.
Το dselect
είναι ένα πρόγραμμα που βοηθάει τους χρήστες να
επιλέγουν τα πακέτα του Debian που θέλουν να εγκαταστήσουν. Θεωρείται κάπως
περίπλοκο και μάλλον βαρετό, αλλά με εξάσκηση μπορείτε να συνηθίσετε το
console-based ncurses περιβάλλον διεπαφής του.
Ένα χαρακτηριστικό του dselect είναι ότι γνωρίζει πως να εκμεταλλευτεί τη χωρητικότητα των πακέτων του Debian ώστε να "προτείνει" άλλα πακέτα για εγκατάσταση. Για να χρησιμοποιήσετε το πρόγραμμα, εκτελέστε dselect ως root. Επιλέξτε 'apt' ως μέθοδο πρόσβασης. Αυτό δεν είναι απαραίτητο, αλλά εάν δεν χρησιμοποιείτε ένα CD ROM και θέλετε να κατεβάζετε πακέτα από το Διαδίκτυο, είναι ο καλύτερος τρόπος για να χρησιμοποιήσετε το dselect.
Για να κατανοήσετε καλύτερα την χρήση του dselect, διαβάστε τα σχετικά με το
dselect έγγραφα που θα βρείτε στη σελίδα του Debian http://www.debian.org/doc/ddp
.
Αφού κάνετε τις επιλογές σας με το dselect, χρησιμοποιήστε:
# apt-get -u dselect-upgrade
όπως και στο παρακάτω παράδειγμα:
# apt-get -u dselect-upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages will be REMOVED: lbxproxy The following NEW packages will be installed: bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0 gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy util-linux-locales vacation xbill xplanet-images The following packages will be upgraded debian-policy 1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded. Need to get 7140kB of archives. After unpacking 16.3MB will be used. Do you want to continue? [Y/n]
Συγκρίνετε με αυτά που βλέπουμε όταν εκτελούμε την apt-get dist-upgrade στο ίδιο σύστημα:
# apt-get -u dist-upgrade Reading Package Lists... Done Building Dependency Tree... Done Calculating Upgrade... Done The following packages will be upgraded debian-policy 1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 421kB of archives. After unpacking 25.6kB will be freed. Do you want to continue? [Y/n]
Παρατηρείστε ότι πολλά από τα παραπάνω πακέτα εγκαθιστώνται διότι άλλα πακέτα τα "πρότειναν". Αλλά εγκαθίστανται ή αφαιρούνται (όπως π.χ. η περίπτωση του lbxproxy) σύμφωνα με τις επιλογές που κάναμε κατά την πλοήγησή μας στη λίστα πακέτων του dselect. Το dselect μπορεί να είναι ένα πανίσχυρο εργαλείο όταν χρησιμοποιείται σε συνεργασία με το APT.
Κάποιοι, μερικές φορές, ενδιαφέρονται να χρησιμοποιήσουν μία από τις εκδόσεις του Debian ως κύριο σύστημα διακίνησης και ένα ή περισσότερα πακέτα από ένα άλλο σκέλος.
Για να ρυθμίσετε ποια είναι η κύρια έκδοση του Debian για εσάς θα πρέπει να
επεξεργαστείτε το αρχείο /etc/apt/apt.conf
ώστε να περιέχει την
παρακάτω γραμμή:
APT::Default-Release "testing";
Για να εγκαταστήσετε πακέτα από το unstable, χρησιμοποιήσετε την επιλογή -t:
# apt-get -t unstable install packagename
Μην ξεχνάτε ότι για να εγκαταστήσετε πακέτα θα πρέπει να υπάρχει μια δήλωση στο
αρχείο /etc/apt/sources.list
. Στην περίπτωση μας θα πρέπει να
υπάρχουν δηλώσεις τόσο για την έκδοση testing όσο και για την
unstable.
Η apt-show-versions
παρέχει έναν ασφαλή τρόπο για τους χρήστες
μικτών διανομών ώστε να αναβαθμίζουν τα συστήματά τους χωρίς να παίρνουν
περισσότερο από τη λιγότερο σταθερή διανομή από αυτό που περίμεναν. Για
παράδειγμα, είναι δυνατό να αναβαθμίσετε μόνο τα ασταθή πακέτα εκτελώντας, μετά
την εγκατάσταση, το πακέτο apt-show-versions:
# apt-get install `apt-show-versions -u -b | grep unstable`
Μπορεί να έχετε τροποποιήσει κάτι σε ένα πακέτο και να μην έχετε χρόνο ή να μη θέλετε να μεταφέρετε τις αλλαγές αυτές σε μια νέα έκδοση του προγράμματος. Ή, για παράδειγμα, μπορεί να έχετε μόλις αναβαθμίσει τη διανομή του Debian σας στην 3.0, αλλά να θέλετε να συνεχίσετε με την έκδοση ενός συγκεκριμένου πακέτου από το Debian 2.2. Μπορείτε να 'καρφιτσώσετε' την έκδοση που έχετε εγκατεστημένη έτσι ώστε να μην αναβαθμιστεί.
Η χρήση του πόρου αυτού είναι απλή. Απλώς χρειάζεται να επεξεργαστείτε το αρχείο /etc/apt/preferences.
Η διαμόρφωση είναι απλή:
Package: <package> Pin: <pin definition> Priority: <pin's priority>
Για παράδειγμα, για να κρατήσω το πακέτο sylpheed
που έχω
τροποποιήσει για να χρησιμοποιεί το "reply-to-list" έκδοσης 0.4.99,
προσθέτω:
Package: sylpheed Pin: version 0.4.99*
Παρατηρείστε ότι χρησιμοποίησα έναν * (αστερίσκο). Αυτό είναι ένας "μπαλαντέρ"· δηλώνει ότι θέλω αυτή η "καρφίτσα" να ισχύει για όλες τις εκδόσεις που ξεκινούν με 0.4.99. Και αυτό επειδή το Debian εκδίδει τα πακέτα του με μία "βελτιωμένη έκδοση Debian" και δε θέλω να αποφύγω την εγκατάσταση των βελτιωμένων αυτών εκδόσεων. Έτσι για παράδειγμα, οι εκδόσεις 0.4.99-1 και 0.4.99-10 θα εγκατασταθούν μόλις γίνουν διαθέσιμες. Παρατηρείστε ότι εάν τροποποιήσατε το πακέτο δεν θα θέλετε να κάνετε τα πράγματα έτσι.
Το πεδίο Priority είναι προαιρετικό· αν δεν το καθορίσετε, θα έχει προκαθορισμένη τιμή το 989.
Ας δούμε πως δουλεύουν οι pin priorities. Μία προτεραιότητα χαμηλότερη του 0 δηλώνει ότι το πακέτο δεν πρέπει ποτέ να εγκατασταθεί. Προτεραιότητες από 0 έως 100 δηλώνουν πακέτα που δεν είναι εγκατεστημένα και που δεν έχουν διαθέσιμες εκδόσεις. Αυτά δεν θα εισέλθουν στη διαδικασία επιλογής έκδοσης. Η προτεραιότητα 100 είναι αυτή που ανατίθεται σε ένα εγκατεστημένο πακέτο -για να αντικατασταθεί μία ήδη εγκατεστημένη έκδοση από μία διαφορετική, η νέα έκδοση πρέπει να έχει προτεραιότητα μεγαλύτερη του 100.
Προτεραιότητες μεγαλύτερες του 100 δηλώνουν ότι το πακέτο πρέπει να εγκατασταθεί. Τυπικά, η ήδη εγκατεστημένη έκδοση αλλάζει μόνο για να αναβαθμιστεί σε νεότερη. Οποιαδήποτε προτεραιότητα μεταξύ 100 και 1000 (inclusive) υποδηλώνει αυτήν την συμπεριφορά. Ένα πακέτο με τέτοια προτεραιότητα δεν υποβαθμίζεται σε μια διαθέσιμη έκδοση με χαμηλότερο αριθμό έκδοσης. Για παράδειγμα, εάν έχω εγκατεστημένη την έκδοση 0.5.3 του sylpheed και καθορίσω 'καρφίτσα' για το sylpheed 0.4.99 με προτεραιότητα 999, το πακέτο 0.4.99 δεν θα εγκατασταθεί για να ικανοποιήσει την 'καρφίτσα'. Για να "υποβαθμίσετε" ένα πακέτο και να ικανοποιήσετε την καρφίτσα η προτεραιότητα πρέπει να είναι άνω του 1000.
Καρφίτσα σε ένα πακέτο μπορεί να προσδιοριστεί σε version, release ή origin
Καρφιτσώνοντας μία version, όπως είδαμε υποστηρίζει διαφορετικές εκδοχές καθώς και μπαλαντέρ που που προσδιορίζει διαφορετικές εκδόσεις ταυτόχρονα
Η εκδοχή release εξαρτάται από το Release αρχειο μιάς APT αποθήκης ή από ένα CD. Αυτό να είναι εντελώς άχρηστο αν χρησιμοποιείτε αποθήκες πακέτων που δεν τροφοδοτούν αυτό το αρχείο. Μπορείτε να δείτε τα περιεχόμενα των Release αρχείων που έχετε στο /var/lib/apt/lists/. Οι παραμετροι για μία έκδοση είναι: a (archive), c (components), v (version), o (origin) και l (label).
Ένα παράδειγμα:
Package: * Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian Priority: 1001
Σε αυτό το παράδειγμα, διαλέξαμε την έκδοση 2.2* του Debian (μπορεί να είναι η 2.2r2, ή η 2.2r3 -- αυτό αναφέρεται σε υποεκδόσεις που συνήθως περιέχουν διορθώσεις ασφαλείας και άλλες σημαντικές ενημερώσεις), την αποθήκη stable, τον τομέα main (σε αντίθεση με τον contrib ή τον non-free) και πηγή και ετικέτα το Debian. Η πηγή (o=) καθορίζει ποιός παρήγαγε αυτό το αρχείο έκδοσης, ενώ η ετικέτα (l=) καθορίζει το όνομα της διανομής: Debian για το ίδιο το Debian και Progeny για το Progeny, για παράδειγμα. Ένα δείγμα αρχείου έκδοσης:
$ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release Archive: stable Version: 2.2r3 Component: main Origin: Debian Label: Debian Architecture: i386
APT HOWTO
1.8.5 - July 2003kov@debian.org
costas@step.gr