Begge filer er 32-bit, og kun én af dem kører på dit board. Et ELF32-build til Intel og et ELF32-build til ARM er enige om klassefeltet og uenige om alt, der betyder noget. En downloadside, der tilbyder en 32-bit-mulighed, har næsten ikke fortalt dig noget, før du læser headeren på den fil, du faktisk hentede. At omdøbe den ændrer ikke en eneste instruktion.

Klasse og maskine svarer på forskellige spørgsmål

Klassefeltet siger, om filen bruger 32-bit- eller 64-bit-strukturer. Maskinefeltet angiver det instruktionssæt, filen er kompileret til. At læse kun det første er måden, hvorpå et x86-build havner på et ARM-board med et filnavn, der ser helt troværdigt ud. Begge værdier kommer fra samme kommando, og derfor er det så nemt at springe én over.

Den samme forvirring gælder 64-bit-etiketter, hvor aarch64 og x86-64 deler en ordstørrelse og ingen instruktioner. En leverandørside, der viser én 64-bit-download, beskriver sit eget build, ikke din maskine. Tjek filens header i stedet for kolonneoverskriften på siden.

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

Den første kommando udskriver headeren, inklusive klasse og maskine. Den anden viser programheaders, hvor en fortolkeranmodning ligger. Den tredje giver dig én linje, når en tabel er mere, end du har brug for.

At tilføje køretilladelse eller patche et distributionscheck oversætter ingenting. Emulering, hvor platformen understøtter det, er en udrulningsbeslutning med sine egne omkostninger til ydeevne og afhængigheder.

Læs headeren, før du kører installationsprogrammet

Undersøg et betroet artefakt, før du udfører noget fra det. Et installationsprogram, der fejler halvvejs, kan efterlade udskiftede biblioteker og intet, der virker, hvilket er et værre udgangspunkt end det arkiv, du startede med. Headerundersøgelse er skrivebeskyttet og reversibel i den forstand, at intet på systemet ændres.

Sammenlign maskinefeltet med pakkearkitekturen i det kørende system, ikke med boardets markedsføringsnavn. En 64-bit-CPU, der kører et 32-bit-brugerland, har brug for 32-bit-buildet, og den detalje afgør, hvilken download der er native. Boardets formåen er ikke begrænsningen; det installerede brugerland er.

dpkg --print-architecture
uname -m
getconf LONG_BIT

Den første kommando rapporterer den arkitektur, systemet installerer pakker til, og det er den værdi, der skal matche. De to andre beskriver kernen og ordstørrelsen, og de kan være uenige med brugerlandet ved en multiarch-installation.

Når de svar er uenige, skal du beslutte, hvilken leverandøren understøtter, før du henter endnu et arkiv. Gætteri skaber en løkke af installationer, der hver især fejler på et forskelligt punkt, og hver fejl ser ud som et nyt problem.

Tjek fortolkeren, ikke kun arkitekturen

En dynamisk eksekverbar fil registrerer den loader, den forventer, i et programheader. På et system med en anden loader-sti nægter kernen at starte filen, selv om maskinefeltet matcher nøjagtigt. Det er den fejl, der sender folk på jagt efter manglende biblioteker.

Fejlmeddelelsen fortæller, hvilket tilfælde du er i, og de to tilfælde er lette at forveksle. En afvisning af format eller arkitektur adskiller sig fra en manglende fil eller fortolker, og kun ét af dem løses ved at installere en anden pakke.

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

Den første kommando viser den fortolkersti, den binære fil anmoder om. Den anden tjekker, om den sti findes, hvilket adskiller et forkert build fra en manglende loader.

Kør ikke en afhængighedsliste mod en ikke-betroet binær fil, fordi nogle implementeringer kan udføre den fil, de undersøger. Hold undersøgelsen skrivebeskyttet, og modstå fristelsen til at tilføje loader-symbolske links for at få et ikke-understøttet build til at starte.

Bed om et build med fakta i hånden

Send leverandøren OS-versionen, pakkearkitekturen, klasse- og maskineværdierne og den første fejlmeddelelse. Den kombination giver et brugbart svar, mens et skærmbillede af en generisk fejl giver en supportskabelon.

Hold det binære spørgsmål adskilt fra konfigurationsspørgsmålet. Når det korrekte build starter, er profiler, legitimationsoplysninger og ruter stadig deres egne problemer, og ingen mængde profilredigering får en binær fil med forkert arkitektur til at køre.

Relaterede artikler