Όνομα διανομής, glibc ή μεταγλωττιστής: τι ελέγχει ο εγκαταστάτης
Ένας εγκαταστάτης που απορρίπτει το παράγωγό σας μπορεί να διαβάζει όνομα διανομής, έκδοση περιβάλλοντος εκτέλεσης ή μεταγλωττιστή. Μόνο ένα από αυτά καθορίζει αν το δυαδικό αρχείο μπορεί να εκτελεστεί.
Ο εγκαταστάτης εκτυπώνει “unsupported distribution”, αλλάζετε ένα αλφαριθμητικό και συνεχίζει ώσπου να αποτύχει ένα λεπτό αργότερα με σφάλμα φορτωτή. Αυτή η ακολουθία είναι το σύμπτωμα που αξίζει να αναγνωρίσετε: η πρώτη αποτυχία ήταν έλεγχος αναγνώρισης και η δεύτερη είναι όριο συμβατότητας. Είναι δύο διαφορετικά προβλήματα που τυχαίνει να εμφανίζονται στο ίδιο τερματικό. Η αλλαγή του ελέγχου μπορεί μόνο να σας μεταφέρει από το πρώτο στο δεύτερο.
Το σύμπτωμα: ο εγκαταστάτης σταματά στο παράγωγό σας
Ένα σενάριο που διαβάζει όνομα διανομής και αρνείται να συνεχίσει σας λέει ότι ο συγγραφέας του δεν δοκίμασε το παράγωγό σας. Αυτή είναι δήλωση υποστήριξης και όχι τεχνικό γεγονός, και συχνά είναι λανθασμένη με την έννοια ότι το πακέτο θα λειτουργούσε καλά.
Το πρόβλημα αρχίζει όταν η προσωρινή λύση γίνεται το σχέδιο. Η αλλαγή ενός αρχείου ταυτότητας κάνει τον έλεγχο να περάσει και το πακέτο φορτώνεται, ή αποτυγχάνει να φορτωθεί, απέναντι στο περιβάλλον εκτέλεσης που είναι πραγματικά εγκατεστημένο. Αν αποτύχει εκεί, καμία περαιτέρω επεξεργασία ταυτότητας δεν θα βοηθήσει.
Άρα η χρήσιμη κίνηση είναι να βρείτε ποια ερώτηση έκανε ο εγκαταστάτης και μετά να βρείτε αν η απάντηση θα είχε σημασία. Είναι δύο ξεχωριστές έρευνες και μόνο η δεύτερη προβλέπει αν το πακέτο θα λειτουργήσει.
Τρεις εκδόσεις που ο κόσμος τις λέει έκδοση συστήματος
Μια έκδοση διανομής ονομάζει ένα συσκευασμένο περιβάλλον. Μια έκδοση βιβλιοθήκης C ονομάζει μια υλοποίηση περιβάλλοντος εκτέλεσης και την έκδοσή της. Μια έκδοση μεταγλωττιστή ονομάζει μια αλυσίδα εργαλείων. Ο κόσμος στη συζήτηση τις λέει και τις τρεις “έκδοση συστήματος”, και σε έναν εγκαταστάτη δεν είναι εναλλάξιμες.
cat /etc/os-release ldd --version | head -1 gcc --version | head -1 uname -m
Μια προκατασκευασμένη εφαρμογή περιμένει το περιβάλλον εκτέλεσης που υπήρχε όταν συνδέθηκε. Η αλλαγή μεταγλωττιστών στον κεντρικό υπολογιστή δεν τη συνδέει ξανά, και μια νεότερη αλυσίδα εργαλείων δεν αλλάζει τίποτα στα σύμβολα φορτωτή που ζητά το δυαδικό. Η αρχιτεκτονική μετρά ξανά ξεχωριστά, γιατί ένα πακέτο 32 bit σε σύστημα 64 bit αποτυγχάνει για λόγους που κανένα αλφαριθμητικό έκδοσης δεν εξηγεί.
Κρατήστε τις τέσσερις εξόδους μαζί με την αναφορά. Η συλλογή τους παίρνει δέκα δευτερόλεπτα και απαντούν στις περισσότερες ερωτήσεις που ο συντηρητής θα σας έκανε αλλιώς με email.
Διαβάστε το σφάλμα, όχι τον έλεγχο
Το πρώτο σφάλμα εκκίνησης είναι η απόδειξη. Ένα μήνυμα για κοινόχρηστο αντικείμενο που λείπει, ή για έκδοση συμβόλου που ο φορτωτής δεν μπορεί να ικανοποιήσει, είναι πρόβλημα εξάρτησης περιβάλλοντος εκτέλεσης. Ένα μήνυμα που επαναλαμβάνει το όνομα της διανομής είναι πάλι ο έλεγχος αναγνώρισης, σε άλλο σημείο.
Η τεκμηρίωση του δυναμικού συνδέτη περιγράφει πώς λειτουργεί η αναζήτηση βιβλιοθηκών και πού ψάχνει ο φορτωτής. Η αλλαγή ετικέτας διανομής δεν προσθέτει κατάλογο σε αυτή τη διαδρομή αναζήτησης, και γι' αυτό η δεύτερη αποτυχία φαίνεται άσχετη με την πρώτη.
Μην καταφεύγετε στο ldd σε ένα ληφθέν εκτελέσιμο ως απλό πρώτο βήμα. Το ίδιο του το εγχειρίδιο προειδοποιεί ότι μπορεί να εκτελέσει το πρόγραμμα υπό ορισμένες συνθήκες, και η εκτέλεση ενός μη αξιόπιστου εγκαταστάτη είναι ακριβώς η περίπτωση για την οποία μιλά αυτή η προειδοποίηση.
Γιατί η αλλαγή του αλφαριθμητικού δεν βοηθά
Η παραποίηση της ταυτότητας του λειτουργικού συστήματος αλλάζει πώς κάθε πρόγραμμα στο μηχάνημα βλέπει τον εαυτό του. Οι διαχειριστές πακέτων, τα εργαλεία υποστήριξης και άλλες εφαρμογές διαβάζουν το ίδιο αρχείο, και μια τιμή που ικανοποιεί έναν εγκαταστάτη μπορεί να μπερδέψει κάτι άλλο μήνες αργότερα.
Η αντικατάσταση βιβλιοθηκών του κεντρικού υπολογιστή με αρχεία από άλλη διανομή είναι χειρότερη. Μπορεί να σπάσει άσχετο λογισμικό, είναι αόρατη στον διαχειριστή πακέτων και απαιτεί σχέδιο συντήρησης που κανείς δεν γράφει. Αυτές οι αλλαγές δεν δικαιολογούνται από έναν περιοριστικό εγκαταστάτη.
Αν ο έλεγχος είναι πράγματι ελάττωμα αναγνώρισης, ο συντηρητής μπορεί να το επιβεβαιώσει και να περιγράψει τη υποστηριζόμενη διόρθωση. Αν δεν είναι ελάττωμα, η υποστηριζόμενη διαδρομή είναι μια κατασκευή για την πλατφόρμα σας, και αυτή η απάντηση δεν αλλάζει επειδή επεξεργάστηκε το αλφαριθμητικό.
Γράψτε μια αναφορά στην οποία ο συντηρητής μπορεί να βασιστεί
Καταγράψτε τη διανομή και την έκδοση, την αρχιτεκτονική, την έκδοση VPN, την ακριβή συνθήκη που απορρίφθηκε και το πρώτο σφάλμα περιβάλλοντος εκτέλεσης αν φτάσατε ως εκεί. Σημειώστε αν τροποποιήσατε κάτι, γιατί μια αναφορά από τροποποιημένο σύστημα είναι διαφορετική αναφορά.
Αφήστε τον αρχικό εγκαταστάτη αμετάβλητο και περιγράψτε τον έλεγχο αντί να τον παρακάμπτετε. Αυτή η διάκριση επιτρέπει στον συντηρητή να ξεχωρίσει έναν υπερβολικά στενό κανόνα αναγνώρισης από ένα πραγματικό όριο δυαδικής συμβατότητας, που είναι δύο πολύ διαφορετικά σφάλματα με δύο πολύ διαφορετικές διορθώσεις.
Αν η απάντηση είναι ότι η πλατφόρμα σας δεν υποστηρίζεται, αυτό είναι ένα αξιοποιήσιμο αποτέλεσμα. Σας λέει να ψάξετε για υποστηριζόμενη κατασκευή αντί να περάσετε άλλο ένα βράδυ σε αρχεία ταυτότητας που ποτέ δεν ήταν το πρόβλημα.