VPN స్థాపకుడు 32-bit అంటుంది: బదులుగా ELF హెడర్ తనిఖీ చేయండి
పదం పరిమాణం సూచన సమితిని గుర్తించదు. తరగతి, యంత్రం మరియు ఇంటర్ప్రిటర్ చదివి, ఆపై హోస్టుకు సరిపోయే build అడగడం విధానం.
ఒక డౌన్లోడ్ పేజీ 32-bit అంటుంది, ఫైల్ Raspberry Pi పైకి వస్తుంది, మరియు ఇన్స్టాలర్ సమస్యలో ఏ ఉపయోగకరమైన భాగాన్ని పేర్కొనని సందేశంతో విఫలమవుతుంది. పూర్తిగా భిన్నమైన రెండు అమలు చేయగలిగిన ఫైళ్లు ELF అర్థంలో రెండూ 32-bit గా లెక్కించబడతాయి, వాటిలో ఒకటి మాత్రమే ఆ బోర్డుపై నడుస్తుంది. తరగతి ఫీల్డ్ ఒక వాస్తవం, యంత్రం ఫీల్డ్ మరొకటి, మరియు ఫైల్ పేరు మీకు రెండింటినీ నమ్మకంగా చెప్పదు. లైబ్రరీని మార్చే లేదా మరో అద్దాన్ని ప్రయత్నించే ముందు హెడర్ చదవండి.
తరగతి పదం పరిమాణాన్ని చెబుతుంది, యంత్రం సూచన సమితిని చెబుతుంది
Linux ELF సూచిక ఫైల్ హెడర్లో తరగతి ఫీల్డ్ మరియు యంత్రం ఫీల్డ్ను నిర్వచిస్తుంది, రెండూ వేర్వేరు ప్రశ్నలకు సమాధానం ఇస్తాయి. ఫైల్ 32-bit లేదా 64-bit రూపాన్ని ఉపయోగిస్తుందా అని తరగతి చెబుతుంది; ఏ సూచన సమితి కోసం ఇది నిర్మించబడిందో యంత్రం చెబుతుంది. 32-bit x86 build మరియు 32-bit ARM build మొదటి విషయంలో ఏకీభవిస్తాయి, రెండవదానిలో భిన్నపడతాయి. ఈ విధంగా సరైన పదం పరిమాణానికి హామీ ఇచ్చే లేబుల్ కూడా ప్రాసెసర్ డీకోడ్ చేయలేని కోడ్ను అందిస్తుంది. చదవదగిన మూడవ విలువ అభ్యర్థించిన ఇంటర్ప్రిటర్, బైనరీ ఒకటి ప్రకటించినప్పుడు ప్రోగ్రామ్ హెడర్లు దానిని పేర్కొంటాయి.
readelf -h -- ./vendor-vpn
readelf -l -- ./vendor-vpn
readelf -d -- ./vendor-vpn | grep NEEDED
మొదటి ఆదేశం హెడర్ను ముద్రిస్తుంది, రెండవది ఫైల్లో ఉంటే ప్రోగ్రామ్ హెడర్లను ముద్రిస్తుంది, మూడవది లోడర్కు అవసరమయ్యే పంచుకున్న వస్తువులను జాబితా చేస్తుంది. తరగతి, యంత్రం మరియు ఇంటర్ప్రిటర్ను కలిసి నమోదు చేయండి, ఎందుకంటే ఈ మూడు విలువలే ఈ పొరలో మొత్తం అనుకూలత ప్రశ్న. మూడింటిలో ఏదీ డౌన్లోడ్ బటన్పై కనిపించదు, కాబట్టి ఫైల్ను వివరించడం కాదు, పరిశీలించాలి.
ఇది కర్నెల్ నుండి ఏ ఇంటర్ప్రిటర్ను అడుగుతుంది
ఇంటర్ప్రిటర్ను ప్రకటించే అమలు చేయగలిగిన ఫైల్ కర్నెల్ నుండి ఒక నిర్దిష్ట లోడర్ మార్గాన్ని అడుగుతుంది. ఆ లోడర్ లేనప్పుడు, మీరు పేర్కొన్న ఫైల్ సరిగ్గా అక్కడే ఉన్నా ప్రారంభం విఫలమవుతుంది. ఇక్కడే ప్రజలు డౌన్లోడ్ పాడైందని నిర్ణయిస్తారు, అసలు సమాధానం పంపిణీ అందించని లోడర్ అయి ఉండగా.
లోడర్ను మీరు నిజంగా నడిపే వ్యవస్థకు సరిపోల్చండి: OS విడుదల, వినియోగదారు స్థలపు నిర్మాణం మరియు లోడర్ను అందించే ప్యాకేజీ. 64-bit కర్నెల్ 32-bit వినియోగదారు స్థలాన్ని ఆ స్థలం మరియు దాని లోడర్ స్థాపించబడితేనే నడపగలదు, కాబట్టి ప్రాసెసర్ సామర్థ్యాలు నిర్ణాయక కారకం కావు. ఒక చిన్న తనిఖీ ఇంటర్ప్రిటర్ను ఒకే వరుసలో పేర్కొంటుంది, అది మద్దతు టికెట్ కంటే తక్కువ సమయం తీసుకుంటుంది. షెల్ స్క్రిప్ట్ మరో విధంగా విఫలమవుతుంది, ఎందుకంటే దాని ఇంటర్ప్రిటర్ ELF హెడర్లో కాదు మొదటి వరుసలో పేర్కొనబడింది, ఆ వరుసను చదవడానికి ఏమీ ఖర్చు కాదు.
file --brief ./vendor-vpn
డౌన్లోడ్ను ప్యాకేజీ నిర్మాణానికి సరిపోల్చండి
పంపిణీల ప్యాకేజీ నిర్మాణాలు అదే భేదాన్ని తమ సొంత పదకోశంలో సంకేతీకరిస్తాయి, విక్రేత మద్దతు ప్రకటన అదే పదకోశాన్ని సూచిస్తుంది. మీ ప్యాకేజీ నిర్వాహకుడు నివేదించే విలువను విక్రేత డాక్యుమెంట్ చేసే విలువతో పోల్చండి, మార్కెటింగ్ లేబుల్ను ఫైల్ పేరుతో పోల్చడం బదులు. ఇబ్బంది కలిగించే జతలు amd64 వర్సెస్ arm64, మరియు armhf వర్సెస్ armel, ఎందుకంటే ప్రతి జత డౌన్లోడ్ జాబితాలో పరస్పరం మార్చుకోగలిగినట్లు కనిపిస్తుంది. x64 లేదా ia32 తో ముగిసే ఫైల్ పేరు build లక్ష్యాన్ని వివరిస్తుంది, దానిని ఉంచే యంత్రాన్ని కాదు.
| 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 |
ప్రతి వరుస పదం పరిమాణం సరిగ్గా కనిపించినా కోడ్ ఇప్పటికీ తప్పుగా ప్రవర్తించే సందర్భం, లేదా అది ప్రారంభమై తర్వాత ఒక పొర కింద విఫలమయ్యే సందర్భం. ఇంటర్ప్రిటర్ నిలువును సూచనగా కాదు కఠిన అవసరంగా చదవండి, ఎందుకంటే కర్నెల్ మీ కోడ్లో ఏ భాగం నడిచే ముందే ఆ మార్గాన్ని పరిష్కరిస్తుంది. ఎమ్యులేషన్ తన సొంత పనితీరు మరియు మద్దతు పరిణామాలతో కూడిన అమలు నిర్ణయం, విశాలమైన పదం పరిమాణాన్ని ప్రచారం చేసే ప్రాసెసర్ దానిని ఎప్పుడూ సూచించదు.
dpkg --print-architecture
ENOEXEC మరియు ENOENT వేర్వేరు వైఫల్యాలు
ప్రారంభ దశ రెండు దోషాలలో ఒకటి నివేదిస్తుంది, అవి వేర్వేరు సమస్యలను సూచిస్తాయి. దోష విలువను చదవడం మరేదైనా నడపడానికి ముందే వైఫల్యాన్ని వర్గీకరిస్తుంది.
ENOEXEC అంటే ఆకృతి గుర్తించబడలేదు: తప్పు నిర్మాణం, తప్పు తరగతి లేదా అసలు అమలు చేయగలిగిన ఫైల్ కాని ఏదో. ELF ఫైల్లో ENOENT సాధారణంగా ఇంటర్ప్రిటర్ లేదని అర్థం, మీరు కోరిన ఫైల్ ఉన్నా. అదే ENOENT స్క్రిప్ట్ యొక్క ఇంటర్ప్రిటర్ లేదని కూడా అర్థం కావచ్చు, అందుకే స్క్రిప్ట్ మొదటి వరుస ముఖ్యం. ఎలాగైనా సందేశం పొరను పేర్కొంటుంది, ప్రతి “కనుగొనబడలేదు”ను తప్పిపోయిన కాన్ఫిగరేషన్గా పరిగణించడం దర్యాప్తును తప్పు దిశకు పంపుతుంది. టికెట్లో దోష విలువను ఉదహరించండి, ఎందుకంటే అది చుట్టుపక్కల వాక్యం కంటే మళ్లీ చెప్పడాన్ని మెరుగ్గా తట్టుకుంటుంది.
బైనరీ ప్రారంభం కానప్పుడు ఏమి చేయకూడదు
వివరించబడని బైనరీని షెల్ పొర ద్వారా బలవంతంగా పంపడం దానిని నడపదు. మీరు నమ్మని ఫైల్పై ఆధారత్వ తనిఖీని నిర్లక్ష్యంగా నడపకండి, ఎందుకంటే దానిని నడపడం కొన్ని పరిస్థితుల్లో బైనరీ నుండి కోడ్ను అమలు చేయవచ్చు. లోడర్ చిహ్న లింకులను జోడించకండి, హోస్ట్ లైబ్రరీలను మార్చకండి మరియు సందేశాన్ని దాటడానికి మూడవ పక్ష అద్దం నుండి పాత ఆర్కైవ్ను తీసుకురాకండి. వీటిలో ప్రతిదీ హెడర్ ఇప్పటికే పేర్కొన్న అసంగతిని తాకకుండా మార్పు విస్తీర్ణాన్ని పెంచుతుంది.
విక్రేతను సంప్రదించేటప్పుడు కథ కాదు విలువలు పంపండి: OS విడుదల, ప్యాకేజీ నిర్మాణం, తరగతి మరియు యంత్ర స్ట్రింగ్లు, అభ్యర్థించిన ఇంటర్ప్రిటర్ మరియు మొదటి దోష వరుస. ఆ సమితి మద్దతు ప్రశ్నలను విఫలమయ్యే ఇన్స్టాలర్ స్క్రీన్షాట్ కంటే వేగంగా పరిష్కరిస్తుంది. పాత కళాఖండాలు మరియు గుర్తున్న ఫోరమ్ అవుట్పుట్లు ప్రస్తుత మద్దతు మాత్రిక కావు, స్థానిక బైనరీ లోడ్ అయిన తర్వాత ప్రొఫైల్, ప్రమాణీకరణ మరియు రూటింగ్ వేరే పనిగా మిగులుతాయి.