Abu failai yra 32 bitų, ir tik vienas jų veikia jūsų plokštėje. ELF32 rinkinys, skirtas Intel, ir ELF32 rinkinys, skirtas ARM, sutampa klasės lauke ir nesutampa visame, kas svarbu. Atsisiuntimo puslapis, siūlantis 32 bitų variantą, jums beveik nieko nepasakė, kol neperskaitėte antraštės failo, kurį iš tikrųjų atsisiuntėte. Failo pervadinimas nepakeičia nė vienos instrukcijos.

Klasė ir mašina atsako į skirtingus klausimus

Klasės laukas nurodo, ar failas naudoja 32 bitų, ar 64 bitų struktūras. Mašinos laukas įvardija instrukcijų rinkinį, kuriam failas buvo sukompiliuotas. Skaityti tik pirmąjį – tai kelias, kuriuo x86 rinkinys atsiduria ARM plokštėje su visiškai patikimai atrodančiu failo vardu. Abi reikšmės gaunamos iš tos pačios komandos, todėl vieną praleisti taip lengva.

Ta pati painiava galioja 64 bitų žymėms, kur aarch64 ir x86-64 dalijasi žodžio dydžiu ir visai nesidalija instrukcijomis. Tiekėjo puslapis, kuriame nurodytas vienas 64 bitų atsisiuntimas, aprašo savo paties rinkinį, o ne jūsų mašiną. Tikrinkite failo antraštę, o ne puslapio stulpelio pavadinimą.

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

Pirmoji komanda išspausdina antraštę, įskaitant klasę ir mašiną. Antroji parodo programos antraštes, kuriose yra interpretatoriaus užklausa. Trečioji duoda vieną eilutę, kai lentelė yra daugiau nei jums reikia.

Vykdymo teisės pridėjimas ar platinimo patikros taisymas nieko neverčia. Emuliacija, kur platforma ją palaiko, yra diegimo sprendimas su savo našumo ir priklausomybių kaina.

Perskaitykite antraštę prieš paleisdami diegimo programą

Patikrinkite patikimą artefaktą, prieš ką nors iš jo vykdydami. Diegimo programa, kuri nepavyksta pusiaukelėje, gali palikti pakeistas bibliotekas ir nieko veikiančio, o tai yra blogesnis atspirties taškas nei archyvas, su kuriuo pradėjote. Antraštės patikra yra tik skaitoma ir grįžtama ta prasme, kad sistemoje niekas nesikeičia.

Palyginkite mašinos lauką su veikiančios sistemos paketų architektūra, o ne su plokštės rinkodaros pavadinimu. 64 bitų procesoriui, veikiančiam 32 bitų vartotojo aplinką, reikia 32 bitų rinkinio, ir ši detalė nusprendžia, kuris atsisiuntimas yra vietinis. Plokštės galimybė nėra apribojimas; įdiegta vartotojo aplinka yra.

dpkg --print-architecture
uname -m
getconf LONG_BIT

Pirmoji komanda praneša architektūrą, kuriai sistema diegia paketus, ir tai yra reikšmė, kuri turi sutapti. Kitos dvi apibūdina branduolį ir žodžio dydį, ir jos gali nesutapti su vartotojo aplinka kelių architektūrų diegime.

Kai tie atsakymai nesutampa, nuspręskite, kurią palaiko tiekėjas, prieš atsisiųsdami kitą archyvą. Spėliojimas sukuria diegimų ciklą, kuriame kiekvienas nepavyksta kitoje vietoje, ir kiekviena nesėkmė atrodo kaip nauja problema.

Tikrinkite interpretatorių, ne tik architektūrą

Dinaminis vykdomasis failas programos antraštėje įrašo įkroviklį, kurio tikisi. Sistemoje su kitu įkroviklio keliu branduolys atsisako paleisti failą, net kai mašinos laukas sutampa tiksliai. Tai nesėkmė, dėl kurios žmonės ieško trūkstamų bibliotekų.

Klaidos pranešimas pasako, kokiu atveju esate, ir abu atvejus lengva supainioti. Formato ar architektūros atmetimas skiriasi nuo trūkstamo failo ar interpretatoriaus, ir tik vienas iš jų ištaisomas įdiegus kitą paketą.

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

Pirmoji komanda parodo interpretatoriaus kelią, kurio prašo dvejetainis failas. Antroji patikrina, ar tas kelias egzistuoja, o tai atskiria neteisingą rinkinį nuo trūkstamo įkroviklio.

Neleiskite priklausomybių sąrašo įrankio su nepatikimu dvejetainiu failu, nes kai kurios implementacijos gali vykdyti failą, kurį tikrina. Laikykite patikrą tik skaitomą ir atsispirkite pagundai pridėti įkroviklio simbolines nuorodas, kad nepalaikomas rinkinys pradėtų veikti.

Paprašykite rinkinio, turėdami faktus rankoje

Nusiųskite tiekėjui OS versiją, paketų architektūrą, klasės ir mašinos reikšmes bei pirmąjį klaidos pranešimą. Toks derinys užsitarnauja naudingą atsakymą, o bendros nesėkmės ekrano kopija – palaikymo šabloną.

Laikykite dvejetainio failo klausimą atskirai nuo konfigūracijos klausimo. Kai teisingas rinkinys paleidžiamas, profiliai, prisijungimo duomenys ir maršrutai vis dar yra jų pačių problemos, ir joks profilio redagavimas neprivers netinkamos architektūros dvejetainio failo veikti.

Susiję straipsniai