Er VPN-binærfilen din bygd for denne prosessoren? Les ELF-hovudet
ELF-klasse og -maskin er ulike felt, og tolken er eit tredje. Les alle tre før du installerer ein VPN-klient på ein Pi eller eit anna kort.
Begge filene er 32-bit, og berre éin av dei køyrer på kortet ditt. Ein ELF32-bygg for Intel og ein ELF32-bygg for ARM er samde om klassefeltet og usamde om alt som tel. Ei nedlastingsside som tilbyr eit 32-bit-alternativ har nesten ikkje fortalt deg noko før du les hovudet på fila du faktisk lasta ned. Å gje henne nytt namn endrar ikkje éin einaste instruksjon.
Klasse og maskin svarer på ulike spørsmål
Klassefeltet seier om fila brukar 32-bit- eller 64-bit-strukturar. Maskinfeltet namngjev instruksjonssettet fila vart kompilert for. Å lese berre det første er måten ein x86-bygg hamnar på eit ARM-kort med eit filnamn som ser heilt truverdig ut. Begge verdiane kjem frå same kommando, difor er det så lett å hoppe over éin.
Den same forvirringa gjeld 64-bit-etikettar, der aarch64 og x86-64 deler ein ordstorleik og ingen instruksjonar. Ei leverandørside som listar opp éi 64-bit-nedlasting skildrar sin eigen bygg, ikkje maskina di. Sjekk hovudet på fila i staden for kolonneoverskrifta på sida.
readelf -h ./vendor-vpn readelf -l ./vendor-vpn | head -20 file ./vendor-vpn
Den første kommandoen skriv ut hovudet, inkludert klasse og maskin. Den andre viser programhovud, der ein tolkeførespurnad ligg. Den tredje gjev deg éi linje når ei tabell er meir enn du treng.
Å leggje til køyretillating eller å patche ein distribusjonssjekk omset ingenting. Emulering, der plattforma støttar det, er ei utrullingavgjerd med sin eigen kostnad for yting og avhengnader.
Les hovudet før du køyrer installasjonsprogrammet
Undersøk eit klarert artefakt før du utfører noko frå det. Eit installasjonsprogram som feilar halvveges kan etterlate erstatta bibliotek og ingenting som verkar, noko som er eit dårlegare utgangspunkt enn arkivet du byrja med. Hovudundersøking er skriveverna og reversibel i den forstand at ingenting på systemet vert endra.
Samanlikn maskinfeltet med pakkearkitekturen til det køyrande systemet, ikkje med marknadsføringsnamnet til kortet. Ein 64-bit-CPU som køyrer eit 32-bit-brukarland treng 32-bit-byggen, og den detaljen avgjer kva nedlasting som er nativ. Evna til kortet er ikkje avgrensinga; det installerte brukarlandet er det.
dpkg --print-architecture uname -m getconf LONG_BIT
Den første kommandoen rapporterer arkitekturen systemet installerer pakkar for, og det er verdien som må stemme. Dei to andre skildrar kjernen og ordstorleiken, og dei kan vere usamde med brukarlandet ved ein multiarch-installasjon.
Når desse svara er usamde, må du avgjere kva leverandøren støttar før du lastar ned eit nytt arkiv. Gjettar skapar ei løkke av installasjonar som kvar feilar på eit ulikt punkt, og kvar feil ser ut som eit nytt problem.
Sjekk tolken, ikkje berre arkitekturen
Ei dynamisk køyrbar fil registrerer lastaren ho ventar i eit programhovud. På eit system med ein annan lastarbane nektar kjernen å starte fila sjølv om maskinfeltet stemmer nøyaktig. Det er feilen som sender folk på jakt etter manglande bibliotek.
Feilmeldinga fortel deg kva tilfelle du er i, og dei to tilfella er lette å forveksle. Ei avvising av format eller arkitektur er ulik ei manglande fil eller tolk, og berre eitt av dei vert løyst ved å installere ein annan pakke.
readelf -l ./vendor-vpn | grep -A1 INTERP ls -l /lib64/ld-linux-x86-64.so.2
Den første kommandoen viser tolkebanen den binære fila ber om. Den andre sjekkar om den banen finst, noko som skil ein feil bygg frå ein manglande lastar.
Ikkje køyr ein avhengnadslister mot ei ikkje-klarert binærfil, fordi nokre implementasjonar kan køyre fila dei undersøkjer. Hald undersøkinga skriveverna, og motstå freistinga til å leggje til lastar-symlenkjer for å få ein ikkje-støtta bygg til å starte.
Be om ein bygg med fakta i handa
Send leverandøren OS-versjonen, pakkearkitekturen, klasse- og maskinverdiane og den første feilmeldinga. Den kombinasjonen gjev eit nyttig svar, medan eit skjermbilete av ein generisk feil gjev ein støttemal.
Hald det binære spørsmålet åtskilt frå konfigurasjonsspørsmålet. Når den riktige byggen startar, er profilar, påloggingsinformasjon og ruter framleis deira eigne problem, og inga mengd profilredigering får ei binærfil med feil arkitektur til å køyre.