Ένα πακέτο VPN που αναφέρει Installed: (none) δεν λείπει· απλώς δεν είναι εγκατεστημένο. Η γραμμή που καθορίζει αν μπορείτε να το εγκαταστήσετε είναι η Candidate, την οποία το APT παράγει από τα ευρετήρια, το όνομα της σουίτας, την αρχιτεκτονική και τυχόν κανόνες καρφιτσώματος που ισχύουν. Οι περισσότερες αναφορές για ένα εξαφανισμένο πακέτο VPN αποδεικνύονται πρόβλημα υποψηφίου και όχι πρόβλημα συσκευασίας. Διαβάστε και τις δύο γραμμές πριν αγγίξετε έστω μία καταχώριση πηγής.

Ελέγχω πρώτα τον υποψήφιο, γιατί κοστίζει μία εντολή και αποκλείει τις μισές από τις συνηθισμένες εικασίες.

Τι σας λέει η έξοδος του apt-cache policy

Το apt-cache policy διαβάζει την τοπική προσωρινή μνήμη πακέτων, όχι το δίκτυο. Εκτυπώνει την εγκατεστημένη έκδοση, την έκδοση υποψηφίου και έναν πίνακα με κάθε ευρετήριο που προσφέρει το πακέτο μαζί με την προτεραιότητα που του αντιστοιχεί.

apt-cache policy openvpn
apt-cache madison openvpn
apt list -a network-manager-openvpn

Ο υποψήφιος είναι η έκδοση που θα διάλεγε το APT αυτή τη στιγμή. Το madison απαριθμεί τι προσφέρει κάθε πηγή με την προτεραιότητά της, και έτσι εντοπίζετε ένα πακέτο που υπάρχει σε ένα ευρετήριο αλλά χάνει τον διαγωνισμό καρφιτσώματος. Το εγχειρίδιο του apt-cache τεκμηριώνει και τα δύο ως αναγνώσεις προσωρινής μνήμης, οπότε κανένα από τα δύο δεν αποδεικνύει ότι ο καθρέφτης είναι προσβάσιμος αυτή τη στιγμή.

Αν η γραμμή υποψηφίου είναι κενή ή δείχνει (none), τίποτα στις ρυθμισμένες πηγές δεν είναι κατάλληλο για αυτό το σύστημα όπως είναι ρυθμισμένο.

Τέσσερις λόγοι για τους οποίους εξαφανίζεται ένας υποψήφιος

Στην πράξη η αιτία είναι σχεδόν πάντα ένα από τέσσερα πράγματα, και το καθένα έχει διαφορετική διόρθωση.

Το όνομα της σουίτας στις πηγές σας πρέπει να ταιριάζει με τη διανομή για την οποία χτίστηκε το πακέτο. Ένα σύστημα Debian bookworm στραμμένο σε καθρέφτη trixie, ή μια έκδοση Ubuntu που μετονομάστηκε σε αρχείο sources.list.d κατά τη διάρκεια αναβάθμισης, δεν λύνει τίποτα για πακέτα που υπάρχουν μόνο στην άλλη σουίτα. Συγκρίνετε το lsb_release -cs με το πεδίο της σουίτας σε κάθε καταχώριση.

Το APT βλέπει μόνο πακέτα χτισμένα για τις αρχιτεκτονικές που γνωρίζει το dpkg. Ένα κοντέινερ 32 bit, μια εικόνα arm64 ή μια εγκατάσταση σε Raspberry Pi που ζητά πακέτο διαθέσιμο μόνο για amd64 παίρνει κενό υποψήφιο αντί για μήνυμα σφάλματος. Τα dpkg --print-architecture και dpkg --print-foreign-architectures σας λένε σε ποιο σύνολο βρίσκεστε στην πραγματικότητα.

Τα συστατικά μετρούν επίσης. Ένα πακέτο στο contrib ή στο non-free είναι αόρατο όταν είναι ενεργό μόνο το main, και το universe του Ubuntu συμπεριφέρεται με τον ίδιο τρόπο. Το ευρετήριο υπάρχει και το πακέτο είναι μέσα του· απλώς η λίστα ενεργών συστατικών σας δεν το περιλαμβάνει.

Το καρφίτσωμα είναι το αθόρυβο. Ένα αρχείο στο /etc/apt/preferences.d μπορεί να περιορίσει ένα πακέτο κάτω από το κατώφλι εγκατάστασης, και τότε ένας εντελώς καλός υποψήφιος εξαφανίζεται από την έξοδο ενώ το ευρετήριο εξακολουθεί να τον απαριθμεί. Επειδή το policy εκτυπώνει τις προτεραιότητες δίπλα σε κάθε πηγή, ένα πακέτο όπου κάθε πηγή φέρει χαμηλό αριθμό καρφιτσώματος είναι η ένδειξη.

Τα παλιά ευρετήρια μοιάζουν με πακέτα που λείπουν

Η προσωρινή μνήμη είναι ένα στιγμιότυπο. Αν το τελευταίο apt update απέτυχε σε ένα ευρετήριο, τα ερωτήματα συνεχίζουν να απαντούν από το παλιότερο αντίγραφο, και το πακέτο που περιμένετε μπορεί να μην είναι σε εκείνο το αντίγραφο.

Το apt update εκτυπώνει σφάλματα ανά ευρετήριο, οπότε διαβάστε τα αντί να κυλήσετε κατευθείαν στην τελευταία γραμμή.

Μια ανανέωση που αποτυγχάνει λόγω σφάλματος υπογραφής, ληγμένου αρχείου release ή μη προσβάσιμου καθρέφτη αφήνει το προηγούμενο ευρετήριο στη θέση του. Αυτό είναι λογικό σχέδιο, γιατί διατηρεί μια λειτουργική μνήμη όταν ένας καθρέφτης πέσει για λίγο. Η παρενέργεια είναι ότι μια αναζήτηση μπορεί να πετύχει ενώ το αποθετήριο είναι εκτός σύνδεσης. Σημαίνει επίσης ότι η απουσία ενός πακέτου δεν αποδεικνύει τίποτα μέχρι να μάθετε πότε ανακτήθηκε το ευρετήριο τελευταία φορά. Ελέγξτε τις ημερομηνίες των αρχείων κάτω από το /var/lib/apt/lists πριν κατηγορήσετε το όνομα του πακέτου.

Ονομάστε το πακέτο που χρειάζεστε πραγματικά

OpenVPN είναι δαίμονας, και τα κομμάτια που θέλουν συνήθως οι άνθρωποι είναι ξεχωριστά πακέτα.

Η μηχανή, το πρόσθετο του NetworkManager και ο επεξεργαστής επιφάνειας εργασίας είναι τρία πακέτα με τρία ονόματα, και το πρόσθετο έχει παραλλαγή GTK της οποίας το όνομα διαφέρει μεταξύ διανομών. Το apt-cache search --names-only openvpn ταιριάζει ονόματα και παρεχόμενα ονόματα αντί για περιγραφές, και αυτό θέλετε όταν ξέρετε περίπου πώς λέγεται το πράγμα.

Αν το όνομα είναι πραγματικά άγνωστο, αναζητήστε μία φορά στις περιγραφές και μετά επιστρέψτε σε ακριβή ονόματα. Μην προσθέσετε κατάληξη -gui δανεισμένη από άλλη διανομή και συμπεράνετε ότι το πακέτο δεν υπάρχει πια.

Αλλάξτε τις πηγές τελευταία και μετά επαληθεύστε τη συναλλαγή

Η προσθήκη αποθετηρίου αλλάζει ποιος τροφοδοτεί τις ενημερώσεις σας, γι' αυτό ανήκει στο τέλος της έρευνας, όχι στην αρχή.

Πριν από αυτό, επιβεβαιώστε έκδοση, αρχιτεκτονική, συστατικό και κατάσταση καρφιτσώματος. Σημειώστε ποια από τα τέσσερα ελέγξατε, ώστε το επόμενο άτομο να μην επαναλάβει τη σάρωση. Αν και τα τέσσερα είναι σωστά και ο υποψήφιος λείπει ακόμη, το ειλικρινές συμπέρασμα είναι ότι αυτή η έκδοση δεν παρέχει αυτό το πακέτο. Οι υπόλοιπες επιλογές είναι ένα backport, ένα πακέτο προμηθευτή ή μια άλλη υποστηριζόμενη έκδοση, και καθεμία είναι συνειδητή επιλογή και όχι εικασία.

Όταν ο υποψήφιος εμφανιστεί, προσομοιώστε πριν δεσμεύσετε: το apt-get install --simulate με το όνομα του πακέτου δείχνει τι θα τραβηχτεί και τι θα αφαιρεθεί. Η διαθεσιμότητα του πακέτου, η εγκατάσταση και ένα λειτουργικό τούνελ παραμένουν τρία ξεχωριστά στάδια, και το τούνελ χρειάζεται ακόμη το προφίλ, τα διαπιστευτήρια, τις διαδρομές και το DNS του πριν μεταφέρει κίνηση.

Σχετικά άρθρα