Adakah binari VPN anda dibina untuk CPU ini? Baca pengepala ELF
Kelas dan mesin ELF ialah medan berbeza, dan penterjemah ialah medan ketiga. Baca ketiga-tiganya sebelum memasang klien VPN pada Pi atau papan lain.
Kedua-dua fail ialah 32-bit dan hanya satu daripadanya berjalan pada papan anda. Binaan ELF32 untuk Intel dan binaan ELF32 untuk ARM bersetuju pada medan kelas dan tidak bersetuju pada segala yang penting. Halaman muat turun yang menawarkan pilihan 32-bit hampir tidak memberitahu anda apa-apa sehingga anda membaca pengepala fail yang benar-benar anda muat turun. Menamakannya semula tidak mengubah satu arahan pun.
Kelas dan mesin menjawab soalan yang berbeza
Medan kelas menyatakan sama ada fail menggunakan struktur 32-bit atau 64-bit. Medan mesin menamakan set arahan yang fail itu disusun untuknya. Membaca yang pertama sahaja ialah cara binaan x86 mendarat pada papan ARM dengan nama fail yang kelihatan sangat munasabah. Kedua-dua nilai datang daripada arahan yang sama, sebab itulah melangkau satu adalah sangat mudah.
Kekeliruan yang sama terpakai pada label 64-bit, di mana aarch64 dan x86-64 berkongsi saiz perkataan dan tidak berkongsi satu arahan pun. Halaman vendor yang menyenaraikan satu muat turun 64-bit menerangkan binaannya sendiri, bukan mesin anda. Periksa pengepala fail dan bukannya tajuk lajur pada halaman.
readelf -h ./vendor-vpn readelf -l ./vendor-vpn | head -20 file ./vendor-vpn
Arahan pertama mencetak pengepala, termasuk kelas dan mesin. Yang kedua menunjukkan pengepala program, tempat permintaan penterjemah berada. Yang ketiga memberikan anda satu baris apabila jadual lebih daripada yang anda perlukan.
Menambah kebenaran laksana atau menampal pemeriksaan pengedaran tidak menterjemah apa-apa. Emulasi, di mana platform menyokongnya, ialah keputusan penggunaan dengan kos prestasi dan kebergantungannya sendiri.
Baca pengepala sebelum menjalankan pemasang
Periksa artifak yang dipercayai sebelum melaksanakan apa-apa daripadanya. Pemasang yang gagal di pertengahan jalan boleh meninggalkan pustaka yang diganti dan tiada apa yang berfungsi, iaitu titik permulaan yang lebih teruk daripada arkib yang anda mulakan. Pemeriksaan pengepala adalah baca sahaja dan boleh diterbalikkan dalam erti kata tiada apa yang berubah pada sistem.
Bandingkan medan mesin dengan seni bina pakej sistem yang sedang berjalan, bukan dengan nama pemasaran papan. CPU 64-bit yang menjalankan ruang pengguna 32-bit memerlukan binaan 32-bit, dan butiran itu menentukan muat turun mana yang asli. Keupayaan papan bukanlah kekangan; ruang pengguna yang dipasang itulah kekangan.
dpkg --print-architecture uname -m getconf LONG_BIT
Arahan pertama melaporkan seni bina yang sistem pasang pakej untuknya, dan itulah nilai yang mesti sepadan. Dua lagi menerangkan kernel dan saiz perkataan, dan ia boleh berbeza daripada ruang pengguna dalam pemasangan berbilang seni bina.
Apabila jawapan itu berbeza, putuskan mana yang disokong vendor sebelum memuat turun arkib lain. Meneka menghasilkan gelung pemasangan yang setiap satunya gagal pada titik berbeza, dan setiap kegagalan kelihatan seperti masalah baharu.
Periksa penterjemah, bukan hanya seni bina
Fail boleh laksana dinamik merekodkan pemuat yang dijangka dalam pengepala program. Pada sistem dengan laluan pemuat berbeza, kernel enggan memulakan fail itu walaupun medan mesin sepadan dengan tepat. Itulah kegagalan yang menghantar orang mencari pustaka yang hilang.
Mesej ralat memberitahu anda dalam kes yang mana, dan kedua-dua kes mudah dikelirukan. Penolakan format atau seni bina berbeza daripada fail atau penterjemah yang hilang, dan hanya satu daripadanya diperbaiki dengan memasang pakej lain.
readelf -l ./vendor-vpn | grep -A1 INTERP ls -l /lib64/ld-linux-x86-64.so.2
Arahan pertama menunjukkan laluan penterjemah yang diminta oleh binari. Yang kedua memeriksa sama ada laluan itu wujud, yang memisahkan binaan yang salah daripada pemuat yang hilang.
Jangan jalankan penyenarai kebergantungan terhadap binari yang tidak dipercayai, kerana sesetengah pelaksanaan boleh melaksanakan fail yang diperiksanya. Kekalkan pemeriksaan sebagai baca sahaja dan tahan keinginan menambah pautan simbolik pemuat supaya binaan yang tidak disokong boleh bermula.
Minta binaan dengan fakta di tangan
Hantar kepada vendor keluaran OS, seni bina pakej, nilai kelas dan mesin serta mesej ralat pertama. Gabungan itu memperoleh jawapan yang berguna, manakala tangkapan skrin kegagalan umum memperoleh templat sokongan.
Asingkan soalan binari daripada soalan konfigurasi. Setelah binaan yang betul bermula, profil, kelayakan dan laluan masih menjadi masalah mereka sendiri, dan tiada jumlah penyuntingan profil akan membuat binari dengan seni bina salah berjalan.