Είναι το δυαδικό VPN σας χτισμένο για αυτόν τον επεξεργαστή; Διαβάστε την κεφαλίδα ELF
Η κλάση και η μηχανή ELF είναι διαφορετικά πεδία, και ο διερμηνέας είναι τρίτο. Διαβάστε και τα τρία πριν εγκαταστήσετε έναν πελάτη VPN σε ένα Pi ή σε οποιαδήποτε άλλη πλακέτα.
Και τα δύο αρχεία είναι 32-bit και μόνο ένα από αυτά εκτελείται στην πλακέτα σας. Μια κατασκευή ELF32 για Intel και μια κατασκευή ELF32 για ARM συμφωνούν στο πεδίο κλάσης και διαφωνούν σε ό,τι έχει σημασία. Μια σελίδα λήψης που προσφέρει επιλογή 32-bit δεν σας έχει πει σχεδόν τίποτα μέχρι να διαβάσετε την κεφαλίδα του αρχείου που κατεβάσατε πραγματικά. Η μετονομασία δεν αλλάζει ούτε μία εντολή.
Η κλάση και η μηχανή απαντούν σε διαφορετικά ερωτήματα
Το πεδίο κλάσης λέει αν το αρχείο χρησιμοποιεί δομές 32-bit ή 64-bit. Το πεδίο μηχανής ονομάζει το σύνολο εντολών για το οποίο μεταγλωττίστηκε το αρχείο. Το να διαβάζει κανείς μόνο το πρώτο είναι ο τρόπος με τον οποίο μια κατασκευή x86 καταλήγει σε πλακέτα ARM με όνομα αρχείου που φαίνεται απολύτως πειστικό. Και οι δύο τιμές προέρχονται από την ίδια εντολή, γι' αυτό είναι τόσο εύκολο να παραλείψει κανείς τη μία.
Η ίδια σύγχυση ισχύει για τις ετικέτες 64-bit, όπου τα aarch64 και x86-64 μοιράζονται μέγεθος λέξης και καμία εντολή. Μια σελίδα προμηθευτή που απαριθμεί μία λήψη 64-bit περιγράφει τη δική του κατασκευή, όχι τη μηχανή σας. Ελέγξτε την κεφαλίδα του αρχείου και όχι την επικεφαλίδα της στήλης στη σελίδα.
readelf -h ./vendor-vpn readelf -l ./vendor-vpn | head -20 file ./vendor-vpn
Η πρώτη εντολή εκτυπώνει την κεφαλίδα, συμπεριλαμβανομένων κλάσης και μηχανής. Η δεύτερη δείχνει κεφαλίδες προγράμματος, όπου βρίσκεται ένα αίτημα διερμηνέα. Η τρίτη σας δίνει μία γραμμή όταν ένας πίνακας είναι περισσότερο από ό,τι χρειάζεστε.
Η προσθήκη άδειας εκτέλεσης ή η επιδιόρθωση ενός ελέγχου διανομής δεν μεταφράζει τίποτα. Η εξομοίωση, όπου την υποστηρίζει η πλατφόρμα, είναι απόφαση ανάπτυξης με δικό της κόστος απόδοσης και εξαρτήσεων.
Διαβάστε την κεφαλίδα πριν εκτελέσετε το πρόγραμμα εγκατάστασης
Επιθεωρήστε ένα αξιόπιστο τεχνούργημα πριν εκτελέσετε οτιδήποτε από αυτό. Ένα πρόγραμμα εγκατάστασης που αποτυγχάνει στα μισά μπορεί να αφήσει βιβλιοθήκες αντικατεστημένες και τίποτα να μη λειτουργεί, κάτι που είναι χειρότερο σημείο εκκίνησης από το αρχείο με το οποίο ξεκινήσατε. Η επιθεώρηση κεφαλίδας είναι μόνο ανάγνωση και αναστρέψιμη με την έννοια ότι τίποτα στο σύστημα δεν αλλάζει.
Συγκρίνετε το πεδίο μηχανής με την αρχιτεκτονική πακέτων του συστήματος που εκτελείται, όχι με το εμπορικό όνομα της πλακέτας. Ένας επεξεργαστής 64-bit που εκτελεί περιβάλλον χρήστη 32-bit χρειάζεται την κατασκευή 32-bit, και αυτή η λεπτομέρεια καθορίζει ποια λήψη είναι εγγενής. Η δυνατότητα της πλακέτας δεν είναι ο περιορισμός· το εγκατεστημένο περιβάλλον χρήστη είναι.
dpkg --print-architecture uname -m getconf LONG_BIT
Η πρώτη εντολή αναφέρει την αρχιτεκτονική για την οποία το σύστημα εγκαθιστά πακέτα, και αυτή είναι η τιμή που πρέπει να ταιριάζει. Οι άλλες δύο περιγράφουν τον πυρήνα και το μέγεθος λέξης, και μπορούν να διαφωνούν με το περιβάλλον χρήστη σε εγκατάσταση πολλαπλών αρχιτεκτονικών.
Όταν αυτές οι απαντήσεις διαφωνούν, αποφασίστε ποια υποστηρίζει ο προμηθευτής πριν κατεβάσετε άλλο αρχείο. Η εικασία δημιουργεί έναν κύκλο εγκαταστάσεων που αποτυγχάνουν η καθεμία σε διαφορετικό σημείο, και κάθε αποτυχία μοιάζει με νέο πρόβλημα.
Ελέγξτε τον διερμηνέα, όχι μόνο την αρχιτεκτονική
Ένα δυναμικό εκτελέσιμο καταγράφει σε κεφαλίδα προγράμματος τον φορτωτή που περιμένει. Σε σύστημα με διαφορετική διαδρομή φορτωτή ο πυρήνας αρνείται να ξεκινήσει το αρχείο ακόμη και όταν το πεδίο μηχανής ταιριάζει ακριβώς. Αυτή είναι η αποτυχία που στέλνει τον κόσμο να ψάχνει βιβλιοθήκες που λείπουν.
Το μήνυμα λάθους σας λέει σε ποια περίπτωση βρίσκεστε, και οι δύο περιπτώσεις συγχέονται εύκολα. Μια απόρριψη μορφότυπου ή αρχιτεκτονικής διαφέρει από ένα αρχείο ή διερμηνέα που λείπει, και μόνο μία από αυτές διορθώνεται με την εγκατάσταση άλλου πακέτου.
readelf -l ./vendor-vpn | grep -A1 INTERP ls -l /lib64/ld-linux-x86-64.so.2
Η πρώτη εντολή δείχνει τη διαδρομή διερμηνέα που ζητά το δυαδικό. Η δεύτερη ελέγχει αν υπάρχει αυτή η διαδρομή, κάτι που ξεχωρίζει μια λάθος κατασκευή από έναν φορτωτή που λείπει.
Μην εκτελείτε εργαλείο λίστας εξαρτήσεων σε μη αξιόπιστο δυαδικό, γιατί ορισμένες υλοποιήσεις μπορούν να εκτελέσουν το αρχείο που επιθεωρούν. Κρατήστε την επιθεώρηση μόνο για ανάγνωση και αντισταθείτε στην προσθήκη συμβολικών δεσμών φορτωτή για να ξεκινήσετε μια μη υποστηριζόμενη κατασκευή.
Ζητήστε μια κατασκευή με τα γεγονότα στο χέρι
Στείλτε στον προμηθευτή την έκδοση του λειτουργικού, την αρχιτεκτονική πακέτων, τις τιμές κλάσης και μηχανής και το πρώτο μήνυμα λάθους. Αυτός ο συνδυασμός κερδίζει μια χρήσιμη απάντηση, ενώ ένα στιγμιότυπο οθόνης μιας γενικής αποτυχίας κερδίζει ένα πρότυπο υποστήριξης.
Κρατήστε το ερώτημα του δυαδικού ξεχωριστό από το ερώτημα της διαμόρφωσης. Μόλις ξεκινήσει η σωστή κατασκευή, τα προφίλ, τα διαπιστευτήρια και οι διαδρομές παραμένουν δικά τους προβλήματα, και καμία ποσότητα επεξεργασίας προφίλ δεν θα κάνει ένα δυαδικό λάθος αρχιτεκτονικής να εκτελεστεί.