Të dy skedarët janë 32-bitësh dhe vetëm njëri prej tyre punon në tabelën tuaj. Një ndërtim ELF32 për Intel dhe një ndërtim ELF32 për ARM bien dakord për fushën e klasës dhe nuk bien dakord për gjithçka që ka rëndësi. Një faqe shkarkimi që ofron një opsion 32-bitësh nuk ju ka thënë pothuajse asgjë derisa të lexoni kokën e skedarit që keni shkarkuar në të vërtetë. Riemërtimi nuk ndryshon asnjë instruksion.

Klasa dhe makina përgjigjen për pyetje të ndryshme

Fusha e klasës thotë nëse skedari përdor struktura 32-bitësh apo 64-bitësh. Fusha e makinës emërton grupin e instruksioneve për të cilin u kompilua skedari. Të lexosh vetëm të parën është mënyra se si një ndërtim x86 përfundon në një tabelë ARM me një emër skedari që duket plotësisht i besueshëm. Të dyja vlerat vijnë nga i njëjti komandë, prandaj është kaq e lehtë të anashkalosh njërën.

I njëjti konfuzion vlen për etiketat 64-bitësh, ku aarch64 dhe x86-64 ndajnë një madhësi fjale dhe asnjë instruksion. Një faqe furnizuesi që liston një shkarkim 64-bitësh përshkruan ndërtimin e vet, jo makinën tuaj. Kontrolloni kokën e skedarit dhe jo titullin e kolonës në faqe.

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

Komanda e parë printon kokën, duke përfshirë klasën dhe makinën. E dyta tregon kokën e programit, ku ndodhet kërkesa për interpretues. E treta ju jep një rresht kur një tabelë është më shumë sesa ju nevojitet.

Shtimi i lejes së ekzekutimit ose rregullimi i kontrollit të shpërndarjes nuk përkthen asgjë. Emulimi, aty ku platforma e mbështet, është një vendim vendosjeje me koston e vet të performancës dhe varësive.

Lexoni kokën përpara se të ekzekutoni instaluesin

Inspektoni një artefakt të besueshëm përpara se të ekzekutoni ndonjë gjë prej tij. Një instalues që dështon në gjysmë të rrugës mund të lërë biblioteka të zëvendësuara dhe asgjë që punon, çka është një pikënisje më e keqe sesa arkivi me të cilin filluat. Inspektimi i kokës është vetëm lexim dhe i kthyeshëm në kuptimin që asgjë në sistem nuk ndryshon.

Krahasoni fushën e makinës me arkitekturën e paketave të sistemit që punon, jo me emrin e marketingut të tabelës. Një CPU 64-bitësh që drejton një hapësirë përdoruesi 32-bitësh ka nevojë për ndërtimin 32-bitësh, dhe ky detaj vendos se cili shkarkim është vendas. Aftësia e tabelës nuk është kufizimi; hapësira e përdoruesit e instaluar është.

dpkg --print-architecture
uname -m
getconf LONG_BIT

Komanda e parë raporton arkitekturën për të cilën sistemi instalon paketa, dhe ajo është vlera që duhet të përputhet. Dy të tjerat përshkruajnë kernelin dhe madhësinë e fjalës, dhe mund të mos përputhen me hapësirën e përdoruesit në një instalim me shumë arkitektura.

Kur këto përgjigje ndryshojnë, vendosni se cilën mbështet furnizuesi përpara se të shkarkoni një arkiv tjetër. Hamendja krijon një cikël instalimesh që dështojnë secila në një pikë të ndryshme, dhe çdo dështim duket si një problem i ri.

Kontrolloni interpretuesin, jo vetëm arkitekturën

Një ekzekutues dinamik regjistron në kokën e programit ngarkuesin që pret. Në një sistem me shteg tjetër ngarkuesi, kerneli refuzon të nisë skedarin edhe kur fusha e makinës përputhet saktësisht. Ky është dështimi që i dërgon njerëzit të kërkojnë biblioteka që mungojnë.

Mesazhi i gabimit ju thotë në cilin rast jeni, dhe të dy rastet janë të lehta për t'u ngatërruar. Një refuzim i formatit ose arkitekturës ndryshon nga një skedar ose interpretues që mungon, dhe vetëm njëri prej tyre rregullohet duke instaluar një paketë tjetër.

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

Komanda e parë tregon shtegun e interpretuesit që kërkon binari. E dyta kontrollon nëse ai shteg ekziston, çka ndan një ndërtim të gabuar nga një ngarkues që mungon.

Mos ekzekutoni një listues varësish mbi një binar të pabesuar, sepse disa implementime mund të ekzekutojnë skedarin që inspektojnë. Mbajeni inspektimin vetëm lexim dhe kundërshtoni tundimin për të shtuar lidhje simbolike të ngarkuesit për të nisur një ndërtim të pambështetur.

Kërkoni një ndërtim me faktet në dorë

Dërgoni furnizuesit versionin e OS-së, arkitekturën e paketave, vlerat e klasës dhe të makinës dhe mesazhin e parë të gabimit. Ai kombinim fiton një përgjigje të dobishme, ndërsa një pamje ekrani e një dështimi të përgjithshëm fiton një model mbështetjeje.

Mbajeni pyetjen e binarit të ndarë nga pyetja e konfigurimit. Pasi ndërtimi i saktë niset, profilet, kredencialet dhe rrugët mbeten problemet e tyre, dhe asnjë sasi e redaktimit të profilit nuk do ta bëjë një binar me arkitekturë të gabuar të punojë.

Artikuj të ngjashëm