L-installer tal-VPN jgħid 32-bit: iċċekkja l-header ELF minflok
Id-daqs tal-kelma ma jidentifikax is-sett ta’ istruzzjonijiet. Proċedura biex taqra klassi, magna u interpretu, imbagħad titlob build li jaqbel mal-host.
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 download | ELF class | e_machine | Interpreter the kernel wants | How it fails on the wrong host |
|---|---|---|---|---|
| amd64 | ELF64 | x86-64 | /lib64/ld-linux-x86-64.so.2 | Immediate exec failure on an ARM board |
| armhf | ELF32 | ARM | /lib/ld-linux-armhf.so.3 | Loads on a soft-float system, then fails on a float ABI call |
| i386 | ELF32 | Intel 80386 | /lib/ld-linux.so.2 | Exec 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.