VPN instalētājs saka 32 bit: pārbaudiet ELF galveni
Vārda izmērs neidentificē instrukciju kopu. Procedūra, kā nolasīt klasi, mašīnu un interpretatoru un pēc tam pieprasīt build, kas atbilst hostam.
Lejupielādes lapā teikts 32 bit, fails nokļūst Raspberry Pi, un instalētājs neizdodas ar ziņojumu, kas nenosauc nevienu noderīgu problēmas daļu. Divi pilnīgi atšķirīgi izpildāmie faili abi tiek uzskatīti par 32 bit ELF nozīmē, un tikai viens no tiem var darboties šajā platē. Klases lauks ir viens fakts, mašīnas lauks ir cits, un faila nosaukums uzticami nepasaka nevienu. Izlasiet galveni pirms bibliotēkas maiņas vai cita spoguļa izmēģināšanas.
Klase saka vārda izmēru, mašīna – instrukciju kopu
Linux ELF rokasgrāmata faila galvenē definē klases lauku un mašīnas lauku, un abi atbild uz dažādiem jautājumiem. Klase saka, vai fails izmanto 32 bit vai 64 bit formu; mašīna saka, kurai instrukciju kopai tas būvēts. 32 bit x86 build un 32 bit ARM build piekrīt pirmajam un atšķiras otrajā. Tā etiķete, kas sola pareizo vārda izmēru, tomēr piegādā kodu, ko procesors nevar atšifrēt. Trešā vērtība, ko ir vērts nolasīt, ir pieprasītais interpretators, ko programmas galvenes nosauc, kad binārais fails kādu deklarē.
readelf -h -- ./vendor-vpn
readelf -l -- ./vendor-vpn
readelf -d -- ./vendor-vpn | grep NEEDED
Pirmā komanda izdrukā galveni, otrā izdrukā programmas galvenes, ja failam tādas ir, un trešā uzskaita koplietotos objektus, kas būs vajadzīgi ielādētājam. Pierakstiet klasi, mašīnu un interpretatoru kopā, jo šīs trīs vērtības ir viss saderības jautājums šajā slānī. Neviena no trim neparādās lejupielādes pogā, tāpēc fails ir jāpārbauda, nevis jāapraksta.
Kādu interpretatoru tas prasa no kodola
Izpildāmais fails, kas deklarē interpretatoru, prasa no kodola vienu konkrētu ielādētāja ceļu. Kad šī ielādētāja nav, palaišana neizdodas, lai gan jūsu nosauktais fails atrodas tieši tur. Šis ir punkts, kur cilvēki nolemj, ka lejupielāde ir bojāta, kamēr īstā atbilde ir ielādētājs, ko distribūcija nepiegādā.
Saskaņojiet ielādētāju ar sistēmu, kuru jūs faktiski darbināt: OS laidienu, lietotāja telpas arhitektūru un pakotni, kas nodrošina ielādētāju. 64 bit kodols var palaist 32 bit lietotāja telpu tikai tad, kad šī telpa un tās ielādētājs ir instalēti, tāpēc procesora iespējas nav izšķirošais faktors. Viena īsa pārbaude nosauc interpretatoru vienā rindā, un tā aizņem mazāk laika nekā atbalsta biļete. Shell skripts neizdodas vēl citādi, jo tā interpretators ir nosaukts pirmajā rindā, nevis ELF galvenē, un šīs rindas nolasīšana neko nemaksā.
file --brief ./vendor-vpn
Saskaņojiet lejupielādi ar pakotnes arhitektūru
Distribūciju pakotņu arhitektūras kodē to pašu atšķirību savā vārdnīcā, un tieši uz šo vārdnīcu atsaucas piegādātāja atbalsta paziņojums. Salīdziniet vērtību, ko ziņo jūsu pakotņu pārvaldnieks, ar vērtību, ko dokumentē piegādātājs, tā vietā lai salīdzinātu mārketinga etiķeti ar faila nosaukumu. Pāri, kas rada problēmas, ir amd64 pret arm64 un armhf pret armel, jo katrs pāris lejupielādes sarakstā izskatās aizvietojams. Faila nosaukums, kas beidzas ar x64 vai ia32, apraksta build mērķi, nevis mašīnu, kas to tur.
| 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 |
Katra rinda ir gadījums, kad vārda izmērs izskatās pareizs un kods tomēr uzvedas nepareizi, vai kad tas sākas un pēc tam neizdodas vienu slāni zemāk. Lasiet interpretatora kolonnu kā stingru prasību, nevis mājienu, jo kodols atrisina šo ceļu pirms jebkuras jūsu koda daļas izpildes. Emulācija ir izvietošanas lēmums ar savām veiktspējas un atbalsta sekām, un to nekad neietver procesors, kas reklamē plašāku vārda izmēru.
dpkg --print-architecture
ENOEXEC un ENOENT ir dažādas neveiksmes
Palaišanas posms ziņo par vienu no divām kļūdām, un tās norāda uz dažādām problēmām. Kļūdas vērtības nolasīšana klasificē neveiksmi pirms jebko cita palaišanas.
ENOEXEC nozīmē, ka formāts netika atpazīts: nepareiza arhitektūra, nepareiza klase vai kaut kas, kas nemaz nav izpildāms fails. ENOENT ELF failā parasti nozīmē, ka trūkst interpretatora, lai gan pieprasītais fails pastāv. Tas pats ENOENT var nozīmēt arī to, ka trūkst skripta interpretatora, tāpēc skripta pirmā rinda ir svarīga. Jebkurā gadījumā ziņojums nosauc slāni, un katras „nav atrasts“ traktēšana kā trūkstošas konfigurācijas izraisa izmeklēšanu nepareizā virzienā. Citējiet kļūdas vērtību biļetē, jo tā labāk iztur atstāstīšanu nekā to aptverošais teikums.
Ko nedarīt, ja binārais fails nepalaižas
Neizskaidrota binārā faila dzīšana caur shell apvalku neliek tam darboties. Nepalaidiet atkarību pārbaudītāju vieglprātīgi failā, kuram neuzticaties, jo tā palaišana atsevišķos apstākļos var izpildīt kodu no binārā faila. Nepievienojiet ielādētāja simboliskās saites, nemainiet hosta bibliotēkas un nelejupielādējiet vecu arhīvu no trešās puses spoguļa, lai apietu ziņojumu. Katrs no šiem paplašina izmaiņu lauku, neaizskarot neatbilstību, ko galvene jau nosaukusi.
Vēršoties pie piegādātāja, sūtiet vērtības, nevis stāstu: OS laidienu, pakotnes arhitektūru, klases un mašīnas virknes, pieprasīto interpretatoru un pirmo kļūdas rindu. Šis kopums atbalsta jautājumus atrisina ātrāk nekā neizdevušos instalētāja ekrānuzņēmums. Vecie artefakti un atcerētās foruma izvades nav pašreizējā atbalsta matrica, un pēc tam, kad ielādējas vietējais binārais fails, profils, autentifikācija un maršrutēšana paliek atsevišķs darbs.