Wani shafi na saukewa ya ce 32-bit, fayil ɗin ya sauka kan Raspberry Pi, kuma mai shigarwa ya kasa da saƙon da bai ambaci wani sashe mai amfani na matsalar ba. Fayiloli biyu masu aiwatarwa daban-daban duka ana lissafin su a matsayin 32-bit a ma’anar ELF, kuma ɗaya ne kawai daga cikinsu zai iya aiki a kan wannan allo. Filin aji abu ne ɗaya na gaskiya, filin na’ura wani ne, kuma sunan fayil ba ya gaya muku ko ɗaya cikinsu da aminci. Karanta kan kafin ka canza ɗakin karatu ko ka gwada wani madubi.

Aji ya ce girman kalma, na’ura ta ce saitin umarni

Tushen ELF na Linux ya bayyana filin aji da filin na’ura a cikin kan fayil, kuma duka biyu suna amsa tambayoyi daban-daban. Aji ya ce ko fayil ɗin yana amfani da siffar 32-bit ko 64-bit; na’ura ta ce don wace saitin umarni aka gina shi. Build na x86 32-bit da build na ARM 32-bit sun yarda a kan na farko kuma sun bambanta a kan na biyu. Haka ne lakabi da ke yin alkawarin girman kalma daidai yake bayar da lambar da na’urar sarrafawa ba za ta iya yankewa ba. Ƙima ta uku da ta cancanci karantawa ita ce mai fassara da ake nema, wanda kan shirye-shiryen ke ambata idan binary ya bayyana ɗaya.

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

Umarni na farko yana buga kan, na biyu yana buga kan shirye-shirye idan fayil ɗin yana da su, kuma na uku yana lissafa abubuwan da aka raba da mai ɗauka zai buƙata. Rubuta aji, na’ura da mai fassara tare, domin waɗannan ƙimomi uku su ne dukan tambayar jituwa a wannan mataki. Babu ɗaya daga cikin ukun da ke bayyana a maɓallin saukewa, shi ya sa dole a duba fayil ɗin maimakon kwatanta shi.

Wane mai fassara yake nema daga kernel

Fayil mai aiwatarwa da ya bayyana mai fassara yana neman kernel hanyar mai ɗauka guda takamaimai. Idan wannan mai ɗauka ba ya nan, ƙaddamarwa ta kasa ko da fayil ɗin da ka ambata yana nan a wurin. Wannan shi ne lokacin da mutane suke yanke shawarar cewa saukewar ta lalace, alhali amsar gaske ita ce mai ɗauka wanda rarrabawar ba ta bayarwa.

Daidaita mai ɗauka da tsarin da kake aiwatarwa da gaske: fitowar OS, gine-ginen sararin mai amfani da fakitin da ke bayar da mai ɗauka. Kernel 64-bit zai iya aiwatar da sararin mai amfani 32-bit ne kawai idan an shigar da wannan sarari da mai ɗaukansa, don haka iyawar na’urar sarrafawa ba ita ce abin da ke yanke hukunci ba. Wata gajeriyar dubawa tana ambatar mai fassara a layi ɗaya, kuma tana ɗaukar lokaci kaɗan fiye da tikitin tallafi. Shell script yana kasa wata hanya kuma, domin an ambaci mai fassararsa a layin farko ba a cikin kan ELF ba, kuma karanta wannan layin ba ya cin komai.

file --brief ./vendor-vpn

Daidaita saukewa da gine-ginen fakitin

Gine-ginen fakitin rarrabawa suna ɓoye wannan bambanci a cikin ƙamus ɗinsu, kuma wannan ƙamus ne bayanin tallafin mai sayarwa ke nufi. Kwatanta ƙimar da manajan fakitin ka ke bayarwa da ƙimar da mai sayarwa ya rubuta, maimakon kwatanta lakabin tallace-tallace da sunan fayil. Ma’auratan da ke haifar da matsala su ne amd64 da arm64, da armhf da armel, domin kowanne ma’auri yana kama da wanda za a iya musanya a cikin jerin saukewa. Sunan fayil da ya ƙare da x64 ko ia32 yana kwatanta makasudin build, ba na’urar da ke riƙe da shi ba.

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

Kowanne layi lamari ne inda girman kalma ya yi kama da daidai kuma lambar tana yin kuskure har yanzu, ko inda ta fara sannan ta kasa mataki ɗaya ƙasa. Karanta ginshiƙin mai fassara a matsayin buƙatu mai tsauri ba alama ba, domin kernel yana warware wannan hanya kafin kowane ɓangare na lambarka ya gudana. Emulation shawara ce ta turawa da ke da sakamakon aiki da tallafi nata, kuma na’urar sarrafawa da ke tallata girman kalma mafi faɗi ba ta taɓa nuna shi ba.

dpkg --print-architecture

ENOEXEC da ENOENT gazawa ne daban-daban

Matakin ƙaddamarwa yana ba da ɗaya daga cikin kurakurai biyu, kuma suna nuni ga matsaloli daban-daban. Karanta ƙimar kuskuren yana rarraba gazawar kafin ka aiwatar da wani abu.

ENOEXEC yana nufin ba a gane tsarin ba: gine-gine mara kyau, aji mara kyau ko wani abu da ba fayil mai aiwatarwa ba kwata-kwata. ENOENT a kan fayil ELF yawanci yana nufin mai fassara ya ɓace, ko da fayil ɗin da ka nemi yana nan. Wannan ENOENT ɗin zai iya nufin mai fassarar script ma ya ɓace, shi ya sa layin farko na script ke da muhimmanci. Ko ta yaya saƙon yana ambatar matakin, kuma ɗaukar kowane «ba a samu ba» a matsayin saitin da ya ɓace yana tura binciken zuwa wajen da bai dace ba. Ka ambaci ƙimar kuskuren a cikin tikitin, domin tana jure sake faɗi fiye da jimlar da ke kewaye da ita.

Abin da ba za a yi ba sa’ad da binary ba ya tashi

Tilasta binary da ba a bayyana ba ta hanyar shell wrapper ba ya sa ya gudana. Kada ka gudanar da dubawar dogaro da sakaci a kan fayil da ba ka amince da shi ba, domin gudanar da ita na iya aiwatar da lamba daga binary a wasu yanayi. Kada ka ƙara symlink ɗin mai ɗauka, kada ka musanya ɗakunan karatu na mai masauki kuma kada ka ɗauki tsohon ajiya daga madubin ɓangare na uku don wuce saƙon. Kowanne daga waɗannan yana faɗaɗa filin canji ba tare da taɓa rashin daidaiton da kan ya riga ya ambata ba.

Sa’ad da ka tuntuɓi mai sayarwa, aika ƙimomi ba labari ba: fitowar OS, gine-ginen fakitin, igiyoyin aji da na’ura, mai fassara da ake nema da layin farko na kuskure. Wannan saitin yana warware tambayoyin tallafi da sauri fiye da hoton allo na mai shigarwa da ke kasa. Tsofaffin kayan aiki da fitowar dandalin da aka tuna ba su ne matrix ɗin tallafi na yanzu ba, kuma da zarar binary na asali ya loda, bayanin martaba, tabbatarwa da turawa sun kasance aiki daban.

Labarai masu alaƙa