Kedua berkas berukuran 32-bit dan hanya satu di antaranya berjalan di papan Anda. Build ELF32 untuk Intel dan build ELF32 untuk ARM sepakat pada bidang kelas dan tidak sepakat pada semua hal yang penting. Halaman unduhan yang menawarkan opsi 32-bit hampir tidak memberi tahu Anda apa pun sampai Anda membaca header berkas yang benar-benar Anda unduh. Mengganti namanya tidak mengubah satu instruksi pun.

Kelas dan mesin menjawab pertanyaan yang berbeda

Bidang kelas menyatakan apakah berkas memakai struktur 32-bit atau 64-bit. Bidang mesin menyebut kumpulan instruksi yang menjadi target kompilasi berkas. Membaca hanya yang pertama adalah cara build x86 mendarat di papan ARM dengan nama berkas yang tampak sepenuhnya masuk akal. Kedua nilai berasal dari perintah yang sama, karena itu melewatkan salah satunya sangat mudah.

Kebingungan yang sama berlaku untuk label 64-bit, di mana aarch64 dan x86-64 berbagi ukuran kata dan sama sekali tidak berbagi instruksi. Halaman vendor yang mencantumkan satu unduhan 64-bit menjelaskan build miliknya sendiri, bukan mesin Anda. Periksa header berkas, bukan judul kolom di halaman.

readelf -h ./vendor-vpn
readelf -l ./vendor-vpn | head -20
file ./vendor-vpn

Perintah pertama mencetak header, termasuk kelas dan mesin. Perintah kedua menampilkan header program, tempat permintaan interpreter berada. Perintah ketiga memberi Anda satu baris saat tabel lebih dari yang Anda butuhkan.

Menambahkan izin eksekusi atau menambal pemeriksaan distribusi tidak menerjemahkan apa pun. Emulasi, di mana platform mendukungnya, adalah keputusan penerapan dengan biaya kinerja dan dependensinya sendiri.

Baca header sebelum menjalankan pemasang

Periksa artefak tepercaya sebelum menjalankan apa pun darinya. Pemasang yang gagal di tengah jalan dapat meninggalkan pustaka yang tergantikan dan tidak ada yang berfungsi, yang merupakan titik awal lebih buruk daripada arsip yang Anda mulai. Pemeriksaan header hanya-baca dan dapat dibalik dalam arti tidak ada yang berubah pada sistem.

Bandingkan bidang mesin dengan arsitektur paket sistem yang berjalan, bukan dengan nama pemasaran papan. CPU 64-bit yang menjalankan ruang pengguna 32-bit memerlukan build 32-bit, dan detail itu menentukan unduhan mana yang asli. Kemampuan papan bukanlah kendalanya; ruang pengguna yang terpasanglah kendalanya.

dpkg --print-architecture
uname -m
getconf LONG_BIT

Perintah pertama melaporkan arsitektur yang menjadi target pemasangan paket sistem, dan itulah nilai yang harus cocok. Dua perintah lainnya menjelaskan kernel dan ukuran kata, dan keduanya dapat berbeda dengan ruang pengguna pada pemasangan multiarch.

Ketika jawaban itu berbeda, putuskan mana yang didukung vendor sebelum mengunduh arsip lain. Menebak menghasilkan lingkaran pemasangan yang masing-masing gagal di titik berbeda, dan setiap kegagalan tampak seperti masalah baru.

Periksa interpreter, bukan hanya arsitektur

Berkas eksekutabel dinamis mencatat pemuat yang diharapkannya di header program. Pada sistem dengan jalur pemuat berbeda, kernel menolak menjalankan berkas itu meskipun bidang mesin cocok persis. Itulah kegagalan yang membuat orang mencari pustaka yang hilang.

Pesan galat memberi tahu Anda kasus mana yang Anda hadapi, dan kedua kasus mudah dikacaukan. Penolakan format atau arsitektur berbeda dari berkas atau interpreter yang hilang, dan hanya satu di antaranya diperbaiki dengan memasang paket lain.

readelf -l ./vendor-vpn | grep -A1 INTERP
ls -l /lib64/ld-linux-x86-64.so.2

Perintah pertama menunjukkan jalur interpreter yang diminta biner. Perintah kedua memeriksa apakah jalur itu ada, yang memisahkan build yang salah dari pemuat yang hilang.

Jangan menjalankan pendaftar dependensi pada biner yang tidak tepercaya, karena beberapa implementasi dapat mengeksekusi berkas yang diperiksanya. Jaga pemeriksaan tetap hanya-baca dan tahan keinginan menambahkan symlink pemuat agar build yang tidak didukung bisa mulai.

Minta build dengan fakta di tangan

Kirimkan kepada vendor rilis OS, arsitektur paket, nilai kelas dan mesin, serta pesan galat pertama. Kombinasi itu menghasilkan jawaban yang berguna, sedangkan tangkapan layar kegagalan umum menghasilkan templat dukungan.

Pisahkan pertanyaan biner dari pertanyaan konfigurasi. Setelah build yang benar berjalan, profil, kredensial, dan rute tetap menjadi masalahnya sendiri, dan tidak ada penyuntingan profil yang akan membuat biner berarsitektur salah berjalan.

Artikel terkait