Deskarga-orri batek 32 bit dio, fitxategia Raspberry Pi batera iritsi da, eta instalatzaileak huts egiten du arazoaren zati baliagarririk aipatzen ez duen mezu batekin. Bi exekutagarri erabat desberdin 32 bit balira zenbatzen dira ELF zentzuan, eta horietako batek soilik exekuta dezake plaka horretan. Klase eremua datu bat da, makina eremua beste bat, eta fitxategi izen batek ez dizu bata ez bestea modu fidagarrian esaten. Irakurri goiburua liburutegi bat aldatu edo beste ispilu bat probatu aurretik.

Klaseak hitzaren tamaina dio, makinak instrukzio multzoa

Linux ELF erreferentziak klase eremua eta makina eremua definitzen ditu fitxategi goiburuan, eta biek galdera desberdinei erantzuten diete. Klaseak dio fitxategiak 32 biteko edo 64 biteko forma erabiltzen duen; makinak dio zein instrukzio multzotarako eraiki zen. 32 biteko x86 build batek eta 32 biteko ARM build batek bat egiten dute lehenengoarekin eta desberdin pentsatzen dute bigarrenarekin. Horrela, hitzaren tamaina zuzena agintzen duen etiketa batek prozesadoreak deskodetu ezin duen kodea ematen du oraindik. Irakurtzea merezi duen hirugarren balioa eskatutako interpretea da, programaren goiburuek izendatzen dutena binarikoak bat deklaratzen duenean.

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

Lehenengo komandoak goiburua inprimatzen du, bigarrenak programaren goiburuak inprimatzen ditu fitxategiak baditu, eta hirugarrenak kargatzaileak beharko dituen objektu partekatuak zerrendatzen ditu. Idatzi klasea, makina eta interpretea elkarrekin, hiru balio horiek baitira maila honetako bateragarritasun galdera osoa. Hiruretako bat ere ez da deskarga botoi batean agertzen, eta horregatik fitxategia aztertu behar da, deskribatu beharrean.

Zein interprete eskatzen dion nukleoari

Interpretea deklaratzen duen exekutagarri batek kargatzaile bide zehatz bat eskatzen dio nukleoari. Kargatzaile hori falta denean, abiarazteak huts egiten du, izendatu duzun fitxategia bertan egon arren. Hori da jendeak deskarga hondatuta dagoela erabakitzen duen unea, benetako erantzuna banaketak ematen ez duen kargatzaile bat den bitartean.

Egin kargatzailea benetan exekutatzen duzun sistemarekin bat: OSaren bertsioa, erabiltzaile espazioaren arkitektura eta kargatzailea ematen duen paketea. 64 biteko nukleo batek 32 biteko erabiltzaile espazioa exekuta dezake espazio hori eta bere kargatzailea instalatuta daudenean soilik, beraz prozesadorearen gaitasunak ez dira faktore erabakigarria. Egiaztapen labur batek interpretearen izena lerro bakar batean ematen du, eta laguntza txartel bat baino denbora gutxiago hartzen du. Shell script batek beste modu batera huts egiten du berriro, bere interpretea lehen lerroan izendatzen baita, ELF goiburuan ez, eta lerro hori irakurtzeak ez du ezer kostatzen.

file --brief ./vendor-vpn

Egin deskarga paketearen arkitekturarekin bat

Banaketa paketeen arkitekturek bereizketa bera kodetzen dute beren hiztegi propioan, eta hiztegi horri egiten dio erreferentzia hornitzaile baten laguntza adierazpenak. Alderatu zure pakete kudeatzaileak ematen duen balioa hornitzaileak dokumentatzen duen balioarekin, marketin etiketa bat fitxategi izen batekin alderatu beharrean. Arazoak sortzen dituzten bikoteak amd64 versus arm64 eta armhf versus armel dira, bikote bakoitza deskarga zerrenda batean trukagarria ematen baitu. x64 edo ia32-rekin amaitzen den fitxategi izen batek build helburu bat deskribatzen du, ez duena duen makina.

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

Errenkada bakoitza hitzaren tamaina egokia ematen duen eta kodea oraindik gaizki portatzen den kasu bat da, edo abiarazi eta gero maila bat beherago huts egiten duena. Irakurri interpretearen zutabea baldintza gogor gisa, arrasto gisa ez, nukleoak bide hori zure kodea exekutatu aurretik ebazten baitu. Emulazioa inplementazio erabaki bat da, errendimendu eta laguntza ondorio propioekin, eta ez du inoiz inplikatzen hitzaren tamaina zabalagoa iragartzen duen prozesadore batek.

dpkg --print-architecture

ENOEXEC eta ENOENT hutsegite desberdinak dira

Abiarazte faseak bi erroreetatik bat jakinarazten du, eta arazo desberdinak seinalatzen dituzte. Errorearen balioa irakurtzeak hutsegitea sailkatzen du beste ezer exekutatu aurretik.

ENOEXEC esan nahi du formatua ez zela ezagutu: arkitektura okerra, klase okerra edo exekutagarri ez den zerbait. ELF fitxategi batean ENOENT-ek normalean esan nahi du interpretea falta dela, eskatu duzun fitxategia existitzen den arren. ENOENT berak script baten interpretea falta dela ere esan dezake, eta horregatik du garrantzia script baten lehen lerroak. Edonola ere mezuak maila izendatzen du, eta „aurkitu ez“ bakoitza konfigurazio falta gisa tratatzeak ikerketa norabide okerrean bidaltzen du. Aipatu errorearen balioa txartelean, inguruko esaldia baino hobeto jasaten baitu berriro kontatzea.

Zer ez egin binarikoa abiarazten ez denean

Azaldu gabeko binariko bat shell bilgarri batetik behartzeak ez du lortzen hura exekutatzea. Ez exekutatu mendekotasun egiaztatzaile bat axolagabe fidatzen ez duzun fitxategi batean, haren exekuzioak zenbait egoeratan binarikotik kodea exekuta baitezake. Ez gehitu kargatzailearen esteka sinbolikoak, ez trukatu ostalariaren liburutegiak eta ez ekarri artxibo zahar bat hirugarrenen ispilutik mezua gainditzeko. Horietako bakoitzak aldaketa azalera zabaltzen du goiburuak jada izendatu duen desberdintasuna ukitu gabe.

Hornitzailearengana jotzen duzunean, bidali balioak, ez istorio bat: OSaren bertsioa, paketearen arkitektura, klase eta makina kateak, eskatutako interpretea eta lehen errore lerroa. Multzo horrek laguntza galderak azkarrago ebazten ditu huts egiten duen instalatzaile baten pantaila-argazki batek baino. Artefaktu zaharrak eta gogoratutako foro irteerak ez dira oraingo laguntza matrizea, eta binariko natibo bat kargatzen denean, profila, autentifikazioa eta bideratzea lan bereizia izaten jarraitzen dute.

Erlazionatutako artikuluak