Η σήραγγά σας λειτουργούσε χθες, το μηχάνημα επανεκκίνησε μετά από ενημέρωση και τώρα η διεπαφή δεν ανεβαίνει. Σε σύστημα όπου το WireGuard χτίζεται ως εξωτερική μονάδα, η συνηθισμένη αιτία είναι ότι η μονάδα στον δίσκο ανήκει σε διαφορετική έκδοση πυρήνα από αυτή που εκτελείται τώρα. Κεφαλίδες με παρόμοιο όνομα στο ίδιο μηχάνημα δεν αποδεικνύουν τίποτα για αυτή την αντιστοίχιση. Μόνο η συμβολοσειρά έκδοσης το κρίνει αυτό.

Πυρήνας που εκτελείται ή εγκατεστημένος

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

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

Τρεις έλεγχοι πριν την επαναδόμηση

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

Οι εντολές παρακάτω απαντούν στις τρεις πρώτες χωρίς να αλλάξουν τίποτα. Διαβάστε κάθε αποτέλεσμα πριν προχωρήσετε, γιατί κάθε απάντηση αποκλείει διαφορετική επισκευή.

uname -r
ls -l /lib/modules/$(uname -r)/build
modinfo wireguard
lsmod | grep wireguard

Αν η δεύτερη γραμμή αναφέρει ότι η διαδρομή δεν υπάρχει, λείπει το περιβάλλον δόμησης για τον πυρήνα που εκτελείται και τίποτα από όσα μεταγλωττίσετε δεν θα ταιριάξει. Αν το modinfo αποτύχει ενώ η διαδρομή υπάρχει, η μονάδα μπορεί να μην είναι καθόλου εγκατεστημένη, κάτι φυσιολογικό σε πυρήνες που παρέχουν την υλοποίηση εντός του δέντρου. Αν το modinfo πετύχει και το lsmod δεν δείχνει τίποτα, η μονάδα υπάρχει αλλά δεν έχει φορτωθεί, που είναι πρόβλημα φόρτωσης και όχι δόμησης. Κάθε έκβαση σας στέλνει αλλού, γι' αυτό η ανάγνωση μετράει περισσότερο από τις εντολές.

Χτίστε για την έκδοση που εκτελείται

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

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

sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
sudo depmod -a

Όταν οι πακεταρισμένες κεφαλίδες υστερούν

Σε διανομές και υπολογιστές μίας πλακέτας που πακετάρουν τους δικούς τους πυρήνες, οι κεφαλίδες μπορεί να υστερούν ημέρες ή εβδομάδες από την έκδοση. Το πακέτο κεφαλίδων μπορεί να είναι σωστό στο όνομα και παλαιότερο στο περιεχόμενο, που δίνει δόμηση η οποία μεταγλωττίζεται και μετά αποτυγχάνει στη φόρτωση αντί κατά τη μεταγλώττιση. Η ανάμειξη πηγών το χειροτερεύει: πυρήνας διανομής με κεφαλίδες από αποθετήριο τρίτου μέρους, ή πυρήνας κατασκευαστή με γενικές κεφαλίδες, μπορεί να μεταγλωττιστεί καθαρά και παρ' όλα αυτά να απορριφθεί από τον πυρήνα που εκτελείται επειδή η διαμόρφωση διαφέρει. Οι αριθμοί έκδοσης από μόνοι τους δεν το λύνουν.

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

Επαληθεύστε τη διεπαφή μετά την επαναδόμηση

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

sudo ip link add wg9 type wireguard
lsmod | grep wireguard
sudo dmesg | tail -5

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

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