Ojú-ìwé ìgbàsílẹ̀ kan sọ 32-bit, fáìlì náà balẹ̀ lórí Raspberry Pi, olùfisọ́ọ̀lù sì kùnà pẹ̀lú ìfiránṣẹ́ tí kò dárúkọ apá èyíkéyìí tó wúlò nínú ìṣòro náà. Fáìlì ìmúṣẹ méjì tó yàtọ̀ pátápátá ni a kà ní 32-bit méjèèjì ní ìtumọ̀ ELF, ọ̀kan ṣoṣo nínú wọn sì lè ṣiṣẹ́ lórí pátákó yẹn. Pápá kíláàsì jẹ́ òtítọ́ kan, pápá ẹ̀rọ jẹ́ òmíràn, orúkọ fáìlì kò sì sọ èyíkéyìí nínú àwọn méjèèjì fún ọ pẹ̀lú ìgbẹ́kẹ̀lé. Ka orí náà kí o tó yí ìkàwé padà tàbí gbìyànjú dígí mìíràn.

Kíláàsì sọ ìwọ̀n ọ̀rọ̀, ẹ̀rọ sọ ẹ̀ka ìtọ́nisọ́nà

Ìwé ìtọ́kasí ELF ti Linux túmọ̀ pápá kíláàsì àti pápá ẹ̀rọ nínú orí fáìlì, àwọn méjèèjì sì dáhùn àwọn ìbéèrè ọ̀tọ̀ọ̀tọ̀. Kíláàsì sọ bóyá fáìlì náà ń lo ìrísí 32-bit tàbí 64-bit; ẹ̀rọ sọ ẹ̀ka ìtọ́nisọ́nà tí a kọ́ ọ fún. Build x86 32-bit àti build ARM 32-bit fohùn ṣọ̀kan lórí èkíní, wọ́n sì yàtọ̀ lórí èkejì. Báyìí ni àmì tó ṣèlérí ìwọ̀n ọ̀rọ̀ tó tọ́ ṣì ń fi kóòdù tí ẹ̀rọ ìṣirò kò lè yọ jáde ránṣẹ́. Ìye kẹta tó yẹ kí a kà ni atúmọ̀-ọ̀rọ̀ tí a béèrè, tí àwọn orí ètò ń dárúkọ nígbà tí bínárìì bá polongo ọ̀kan.

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

Àṣẹ àkọ́kọ́ ń tẹ orí jáde, èkejì ń tẹ àwọn orí ètò jáde tí fáìlì bá ní wọn, ẹ̀kẹta sì ń ṣe àkójọ àwọn ohun tí a pín tí ẹ̀rọ ìgbéwọlé yóò nílò. Kọ kíláàsì, ẹ̀rọ àti atúmọ̀-ọ̀rọ̀ papọ̀, nítorí àwọn ìye mẹ́ta yìí ni gbogbo ìbéèrè ìbámu ní ìpele yìí. Kò sí ọ̀kan nínú àwọn mẹ́ta tó farahàn lórí bọ́tìnnì ìgbàsílẹ̀, nítorí náà a gbọ́dọ̀ ṣàyẹ̀wò fáìlì náà kì í ṣe ṣàpèjúwe rẹ̀.

Atúmọ̀-ọ̀rọ̀ wo ni ó ń béèrè lọ́wọ́ kẹ́rnẹ́lì

Fáìlì ìmúṣẹ tó polongo atúmọ̀-ọ̀rọ̀ ń béèrè ipa ọ̀nà ẹ̀rọ ìgbéwọlé kan pàtó lọ́wọ́ kẹ́rnẹ́lì. Nígbà tí ẹ̀rọ ìgbéwọlé yẹn kò sí, ìbẹ̀rẹ̀ máa kùnà bí ó tilẹ̀ jẹ́ pé fáìlì tí o dárúkọ wà níbẹ̀ gan-an. Ibi yìí ni àwọn ènìyàn ti pinnu pé ìgbàsílẹ̀ náà ti bàjẹ́, nígbà tí ìdáhùn gidi ni ẹ̀rọ ìgbéwọlé tí ìpín kò pèsè.

Bá ẹ̀rọ ìgbéwọlé mu pẹ̀lú ẹ̀rọ tí o ń ṣiṣẹ́ gan-an: ìtúsílẹ̀ OS, ìtòlẹ́sẹẹsẹ ààyè olùlò àti àpò tó ń pèsè ẹ̀rọ ìgbéwọlé. Kẹ́rnẹ́lì 64-bit lè ṣiṣẹ́ ààyè olùlò 32-bit kìkì nígbà tí a ti fi ààyè yẹn àti ẹ̀rọ ìgbéwọlé rẹ̀ sórí ẹ̀rọ, nítorí náà agbára ẹ̀rọ ìṣirò kì í ṣe ohun tó ń pinnu. Àyẹ̀wò kúkúrú kan ń dárúkọ atúmọ̀-ọ̀rọ̀ ní ìlà kan, ó sì ń gba àkókò díẹ̀ ju tikẹ́ẹ̀tì ìtìlẹ́yìn lọ. Script shell ń kùnà lọ́nà mìíràn, nítorí a dárúkọ atúmọ̀-ọ̀rọ̀ rẹ̀ ní ìlà àkọ́kọ́ kì í ṣe nínú orí ELF, kíkà ìlà yẹn kò sì ná ohunkóhun.

file --brief ./vendor-vpn

Bá ìgbàsílẹ̀ mu pẹ̀lú ìtòlẹ́sẹẹsẹ àpò

Àwọn ìtòlẹ́sẹẹsẹ àpò ti àwọn ìpín ń ṣe àmì ìyàtọ̀ kan náà nínú ọ̀rọ̀ ìkàwé tiwọn, àti ọ̀rọ̀ ìkàwé yẹn ni ìkéde ìtìlẹ́yìn olùpèsè ń tọ́ka sí. Fi ìye tí olùṣàkóso àpò rẹ ń ròyìn wé ìye tí olùpèsè ṣe àkọsílẹ̀ rẹ̀, dípò fífi àmì tita ọjà wé orúkọ fáìlì. Àwọn tọ́pọ̀ tó ń dá wàhálà ni amd64 lòdì sí arm64, àti armhf lòdì sí armel, nítorí tọ́pọ̀ kọ̀ọ̀kan dà bí ẹni tí a lè pààrọ̀ nínú àkójọ ìgbàsílẹ̀. Orúkọ fáìlì tó parí pẹ̀lú x64 tàbí ia32 ń ṣàpèjúwe àfojúsùn build, kì í ṣe ẹ̀rọ tó ń gbé e.

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

Ìlà kọ̀ọ̀kan jẹ́ ọ̀ràn tí ìwọ̀n ọ̀rọ̀ dà bí ẹni tó tọ́ tí kóòdù ṣì ń hu ìwà tí kò tọ́, tàbí tí ó bẹ̀rẹ̀ tí ó sì kùnà ní ìpele kan nísàlẹ̀. Ka ọ̀wọ̀n atúmọ̀-ọ̀rọ̀ gẹ́gẹ́ bí ìbéèrè líle kì í ṣe ìtọ́nà, nítorí kẹ́rnẹ́lì ń yanjú ipa ọ̀nà yẹn kí apá kankan nínú kóòdù rẹ tó ṣiṣẹ́. Àfarawé jẹ́ ìpinnu ìgbékalẹ̀ tí ó ní àwọn àbájáde iṣẹ́ àti ìtìlẹ́yìn tirẹ̀, ẹ̀rọ ìṣirò tó ń polówá ìwọ̀n ọ̀rọ̀ gbòòrò kì í sì í fi í hàn rárá.

dpkg --print-architecture

ENOEXEC àti ENOENT jẹ́ ìkùnà ọ̀tọ̀ọ̀tọ̀

Ìpele ìbẹ̀rẹ̀ ń ròyìn ọ̀kan nínú àwọn àṣìṣe méjì, wọ́n sì ń tọ́ka sí àwọn ìṣòro ọ̀tọ̀ọ̀tọ̀. Kíkà ìye àṣìṣe ń ṣe ìpín ìkùnà náà kí o tó ṣiṣẹ́ ohunkóhun mìíràn.

ENOEXEC túmọ̀ sí pé a kò dá ìrísí náà mọ̀: ìtòlẹ́sẹẹsẹ tí kò tọ́, kíláàsì tí kò tọ́ tàbí ohun tí kì í ṣe fáìlì ìmúṣẹ rárá. ENOENT lórí fáìlì ELF sábà máa ń túmọ̀ sí pé atúmọ̀-ọ̀rọ̀ kò sí, bí ó tilẹ̀ jẹ́ pé fáìlì tí o béèrè wà. ENOENT kan náà lè tún túmọ̀ sí pé atúmọ̀-ọ̀rọ̀ script kò sí, ìdí nìyẹn tí ìlà àkọ́kọ́ script fi ṣe pàtàkì. Bó ti wù kó rí, ìfiránṣẹ́ náà ń dárúkọ ìpele náà, fífi gbogbo «a kò rí i» kà gẹ́gẹ́ bí ìṣètò tó ṣáko lọ ń fi ìwádìí ránṣẹ́ sí ọ̀nà tí kò tọ́. Fá àsìṣe náà yọ lára tikẹ́ẹ̀tì, nítorí ó ń faradà àtúnṣọ̀rọ̀ ju gbólóhùn tó yí i ká lọ.

Ohun tí kò yẹ kí o ṣe nígbà tí bínárìì kò bẹ̀rẹ̀

Fífi tipátipá mú bínárìì tí a kò ṣàlàyé gba inú àgbá shell kò mú kí ó ṣiṣẹ́. Má ṣe ṣiṣẹ́ olùṣàyẹ̀wò ìgbẹ́kẹ̀lé lórí fáìlì tí o kò gbẹ́kẹ̀lé pẹ̀lú àìbìkítà, nítorí ṣíṣe rẹ̀ lè mú kóòdù láti inú bínárìì ṣiṣẹ́ ní àwọn ipò kan. Má ṣe fi àwọn ìsopọ̀ àmì ẹ̀rọ ìgbéwọlé kún, má ṣe pààrọ̀ àwọn ìkàwé ẹ̀rọ olùgbàlejò, má sì ṣe gbé àkójọ àtijọ́ wá láti inú dígí ẹlẹ́ẹ̀kẹta láti yẹ̀wò ìfiránṣẹ́ náà. Ọ̀kọ̀ọ̀kan nínú ìwọ̀nyí ń gbòòrò ojú-ibi ìyípadà láìfi ọwọ́ kan àìbámu tí orí ti dárúkọ.

Nígbà tí o bá kan olùpèsè, rán àwọn ìye kì í ṣe ìtàn: ìtúsílẹ̀ OS, ìtòlẹ́sẹẹsẹ àpò, àwọn okùn kíláàsì àti ẹ̀rọ, atúmọ̀-ọ̀rọ̀ tí a béèrè àti ìlà àṣìṣe àkọ́kọ́. Àkójọ yẹn ń yanjú àwọn ìbéèrè ìtìlẹ́yìn kíákíá ju àwòrán ojú-ìwé olùfisọ́ọ̀lù tó kùnà lọ. Àwọn ohun àtijọ́ àti àbájáde fọ́rọ́mù tí a rántí kì í ṣe matrix ìtìlẹ́yìn lọ́wọ́lọ́wọ́, bí bínárìì ìbílẹ̀ bá sì gbéwọlé, prófáìlì, ìjẹ́rìí àti ìtọ́sọ́nà máa wà gẹ́gẹ́ bí iṣẹ́ ọ̀tọ̀.

Àwọn àpilẹ̀kọ tó jọra