Paġna tat-tniżżil tgħid 32-bit, il-fajl jinżel fuq Raspberry Pi, u l-installer ifalli b’messaġġ li ma jsemmi l-ebda parti utli tal-problema. Żewġ fajls eżegwibbli kompletament differenti t-tnejn jingħaddu bħala 32-bit fis-sens ELF, u wieħed biss minnhom jista’ jaħdem fuq dik il-bord. Il-qasam tal-klassi huwa fatt wieħed, il-qasam tal-magna huwa ieħor, u isem ta’ fajl ma jgħidlek bl-affidabbiltà lanqas wieħed minnhom. Aqra l-header qabel ma tibdel librerija jew tipprova mirja oħra.

Il-klassi tgħid id-daqs tal-kelma, il-magna tgħid is-sett ta’ istruzzjonijiet

Ir-referenza ELF ta’ Linux tiddefinixxi qasam tal-klassi u qasam tal-magna fl-header tal-fajl, u t-tnejn iwieġbu mistoqsijiet differenti. Il-klassi tgħid jekk il-fajl jużax il-forma 32-bit jew il-forma 64-bit; il-magna tgħid għal liema sett ta’ istruzzjonijiet inbena. Build x86 ta’ 32-bit u build ARM ta’ 32-bit jaqblu fuq l-ewwel u jiddifferixxu fuq it-tieni. Hekk tikseb tikketta li twiegħed id-daqs tal-kelma t-tajjeb xorta waħda kodiċi li l-proċessur ma jistax jiddekodifika. It-tielet valur li jistħoqqlu jinqara huwa l-interpretu mitlub, li l-headers tal-programm isemmuh meta l-binarju jiddikjara wieħed.

readelf -h -- ./vendor-vpn
readelf -l -- ./vendor-vpn
readelf -d -- ./vendor-vpn | grep NEEDED

L-ewwel kmand jistampa l-header, it-tieni jistampa l-headers tal-programm meta l-fajl ikollu xi wħud, u t-tielet jelenka l-oġġetti maqsuma li l-loader se jkollu bżonn. Irreġistra klassi, magna u interpretu flimkien, għax dawn it-tliet valuri huma l-mistoqsija kollha tal-kompatibbiltà f’dan is-saff. L-ebda waħda mit-tlieta ma tidher fuq buttuna tat-tniżżil, u għalhekk il-fajl irid jiġi spezzjonat u mhux deskritt.

Liema interpretu titlob mill-qalba

Fajl eżegwibbli li jiddikjara interpretu jitlob mill-qalba passaġġ wieħed speċifiku tal-loader. Meta dak il-loader ikun nieqes, it-tnedija tfalli anki jekk il-fajl li semmejt ikun proprju hemm. Dan huwa l-punt fejn in-nies jiddeċiedu li t-tniżżil huwa kkorrott, filwaqt li t-tweġiba vera hija loader li d-distribuzzjoni ma tagħtix.

Qabbel il-loader mas-sistema li tassew tħaddem: ir-rilaxx tal-OS, l-arkitettura tal-ispazju tal-utent u l-pakkett li jipprovdi l-loader. Qalba ta’ 64-bit tista’ tħaddem spazju tal-utent ta’ 32-bit biss meta dak l-ispazju u l-loader tiegħu jkunu installati, għalhekk il-kapaċitajiet tal-proċessur mhumiex il-fattur deċiżiv. Verifika qasira waħda ssemmi l-interpretu f’linja waħda, u tieħu inqas ħin minn ticket ta’ appoġġ. Skript shell ifalli b’mod ieħor ukoll, għax l-interpretu tiegħu jissemma fl-ewwel linja u mhux f’header ELF, u l-qari ta’ dik il-linja ma jiswa xejn.

file --brief ./vendor-vpn

Qabbel it-tniżżil mal-arkitettura tal-pakkett

L-arkitetturi tal-pakketti tad-distribuzzjonijiet jikkodifikaw l-istess distinzjoni fil-vokabularju tagħhom, u għal dak il-vokabularju tirreferi d-dikjarazzjoni ta’ appoġġ tal-fornitur. Qabbel il-valur li jirrapporta l-maniġer tal-pakketti tiegħek mal-valur li jiddokumenta l-fornitur, minflok ma tqabbel tikketta tal-marketing ma’ isem ta’ fajl. Il-pari li joħolqu problemi huma amd64 kontra arm64, u armhf kontra armel, għax kull par jidher skambjabbli f’lista tat-tniżżil. Isem ta’ fajl li jispiċċa b’x64 jew ia32 jiddeskrivi mira tal-build, mhux il-magna li żżommu.

Label on the downloadELF classe_machineInterpreter the kernel wantsHow it fails on the wrong host
amd64ELF64x86-64/lib64/ld-linux-x86-64.so.2Immediate exec failure on an ARM board
armhfELF32ARM/lib/ld-linux-armhf.so.3Loads on a soft-float system, then fails on a float ABI call
i386ELF32Intel 80386/lib/ld-linux.so.2Exec format error where no 32-bit loader package exists

Kull ringiela hija każ fejn id-daqs tal-kelma jidher tajjeb u l-kodiċi xorta waħda jġib ruħu ħażin, jew fejn jibda u mbagħad ifalli saff wieħed aktar ’l isfel. Aqra l-kolonna tal-interpretu bħala rekwiżit iebes u mhux bħala ħjiel, għax il-qalba ssolvi dak il-passaġġ qabel ma jitwettaq xi parti mill-kodiċi tiegħek. L-emulazzjoni hija deċiżjoni ta’ skjerament bil-konsegwenzi tagħha stess għall-prestazzjoni u l-appoġġ, u qatt ma tiġi implikata minn proċessur li jirreklama daqs tal-kelma usa’.

dpkg --print-architecture

ENOEXEC u ENOENT huma fallimenti differenti

Il-fażi tat-tnedija tirrapporta wieħed minn żewġ żbalji, u dawn jindikaw problemi differenti. Il-qari tal-valur tal-iżball jikklassifika l-falliment qabel ma tħaddem xi ħaġa oħra.

ENOEXEC tfisser li l-format ma ġiex rikonoxxut: arkitettura ħażina, klassi ħażina jew xi ħaġa li mhix fajl eżegwibbli xejn. ENOENT fuq fajl ELF normalment tfisser li l-interpretu huwa nieqes, anki jekk il-fajl li tlabt jeżisti. L-istess ENOENT tista’ tfisser ukoll li l-interpretu ta’ skript huwa nieqes, u għalhekk l-ewwel linja ta’ skript hija importanti. Kif inhi, il-messaġġ isemmi s-saff, u t-trattament ta’ kull «ma nstabx» bħala konfigurazzjoni nieqsa jibgħat l-investigazzjoni fid-direzzjoni ħażina. Iċċita l-valur tal-iżball fit-ticket, għax jaqbeż it-tirrakkontar aħjar mis-sentenza madwaru.

X’m’għandekx tagħmel meta l-binarju ma jibdiex

L-imġiegħel ta’ binarju mhux spjegat minn involu tal-shell ma jġegħlux jaħdem. Tħaddimx verifikatur tad-dipendenzi ħafif fuq fajl li ma tafdax, għax it-tħaddim tiegħu jista’ f’xi ċirkostanzi jwettaq kodiċi mill-binarju. Iżidx links simboliċi tal-loader, tibdilx libreriji tal-host u ma ġġibx arċiv antik minn mirja ta’ parti terza biex tgħaddi mill-messaġġ. Kull waħda minn dawn twessa’ l-wiċċ tal-bidla mingħajr ma tmiss id-diskrepanza li l-header diġà semma.

Meta tikkuntattja lill-fornitur, ibgħat valuri mhux storja: ir-rilaxx tal-OS, l-arkitettura tal-pakkett, il-kordi tal-klassi u tal-magna, l-interpretu mitlub u l-ewwel linja tal-iżball. Dak is-sett jissolvi mistoqsijiet tal-appoġġ aktar malajr minn screenshot ta’ installer li jfalli. Artifatti antiki u outputs tal-forum miftakra mhumiex matriċi tal-appoġġ attwali, u ladarba binarju nattiv jitgħabba, il-profil, l-awtentikazzjoni u r-rotta jibqgħu xogħol separat.

Artikli relatati