तपाईंको VPN बाइनरी यो CPU का लागि बनाइएको हो? ELF हेडर पढ्नुहोस्
ELF वर्ग र मेसिन फरक फिल्ड हुन्, र इन्टरप्रिटर तेस्रो हो। Pi वा अन्य कुनै बोर्डमा VPN क्लाइन्ट स्थापना गर्नुअघि तीनै पढ्नुहोस्।
दुवै फाइल 32-बिट छन् र तीमध्ये एउटा मात्र तपाईंको बोर्डमा चल्छ। Intel का लागि ELF32 बिल्ड र ARM का लागि ELF32 बिल्ड वर्ग फिल्डमा सहमत छन् र महत्त्वपूर्ण सबै कुरामा असहमत छन्। 32-बिट विकल्प दिने डाउनलोड पृष्ठले तपाईंले वास्तवमै डाउनलोड गरेको फाइलको हेडर नपढेसम्म तपाईंलाई लगभग केही पनि भनेको छैन। नाम बदल्नाले एउटै निर्देश पनि बदल्दैन।
वर्ग र मेसिन फरक प्रश्नको उत्तर दिन्छन्
वर्ग फिल्डले फाइलले 32-बिट वा 64-बिट संरचना प्रयोग गर्छ कि भन्ने बताउँछ। मेसिन फिल्डले फाइल कुन निर्देश-समूहका लागि कम्पाइल गरिएको हो त्यो नाम दिन्छ। पहिलो मात्र पढ्नु भनेको पूर्ण विश्वसनीय देखिने फाइल नामका साथ x86 बिल्ड ARM बोर्डमा पुग्ने बाटो हो। दुवै मान एउटै कमाण्डबाट आउँछन्, त्यसैले एउटा छोड्न यति सजिलो छ।
त्यही भ्रम 64-बिट लेबलमा पनि लागू हुन्छ, जहाँ aarch64 र x86-64 शब्दको आकार साझा गर्छन् र एउटै निर्देश साझा गर्दैनन्। एउटा 64-बिट डाउनलोड सूचीबद्ध गर्ने विक्रेताको पृष्ठले आफ्नै बिल्ड वर्णन गर्छ, तपाईंको मेसिन होइन। पृष्ठको स्तम्भ शीर्षक होइन, फाइलको हेडर जाँच्नुहोस्।
readelf -h ./vendor-vpn readelf -l ./vendor-vpn | head -20 file ./vendor-vpn
पहिलो कमाण्डले हेडर छाप्छ, जसमा वर्ग र मेसिन समावेश छन्। दोस्रोले प्रोग्राम हेडर देखाउँछ, जहाँ इन्टरप्रिटर अनुरोध हुन्छ। तेस्रोले तालिका तपाईंको आवश्यकताभन्दा बढी हुँदा तपाईंलाई एउटा लाइन दिन्छ।
कार्यान्वयन अनुमति थप्नु वा वितरण जाँच प्याच गर्नुले केही पनि अनुवाद गर्दैन। इमुलेसन, जहाँ प्लेटफर्मले समर्थन गर्छ, आफ्नै कार्यसम्पादन र निर्भरता लागत भएको तैनाथी निर्णय हो।
इन्स्टलर चलाउनुअघि हेडर पढ्नुहोस्
विश्वसनीय आर्टिफ्याक्टबाट केही चलाउनुअघि त्यसको निरीक्षण गर्नुहोस्। आधा बाटोमा असफल हुने इन्स्टलरले लाइब्रेरी बदलिएका र केही काम नगर्ने अवस्था छोड्न सक्छ, जो तपाईंले सुरु गरेको अर्काइभभन्दा खराब सुरुवात बिन्दु हो। हेडर निरीक्षण पढ्ने मात्र हो र प्रणालीमा केही पनि नबदलिने अर्थमा उल्टाउन सकिन्छ।
मेसिन फिल्डलाई चलिरहेको प्रणालीको प्याकेज आर्किटेक्चरसँग तुलना गर्नुहोस्, बोर्डको मार्केटिङ नामसँग होइन। 32-बिट प्रयोगकर्ता ठाउँ चलाउने 64-बिट CPU लाई 32-बिट बिल्ड चाहिन्छ, र यही विवरणले कुन डाउनलोड मूल हो भनी निर्धारण गर्छ। बोर्डको क्षमता सीमा होइन; स्थापित प्रयोगकर्ता ठाउँ नै सीमा हो।
dpkg --print-architecture uname -m getconf LONG_BIT
पहिलो कमाण्डले प्रणालीले कुन आर्किटेक्चरका लागि प्याकेज स्थापना गर्छ भनी जानकारी दिन्छ, र त्यही मान मिल्नुपर्छ। बाँकी दुईले कर्नेल र शब्दको आकार वर्णन गर्छन्, र बहु-आर्किटेक्चर स्थापनामा ती प्रयोगकर्ता ठाउँसँग फरक हुन सक्छन्।
ती उत्तर फरक हुँदा, अर्को अर्काइभ डाउनलोड गर्नुअघि विक्रेताले कुनलाई समर्थन गर्छ निर्णय गर्नुहोस्। अनुमानले प्रत्येक फरक बिन्दुमा असफल हुने स्थापनाको चक्र बनाउँछ, र प्रत्येक असफलता नयाँ समस्याजस्तो देखिन्छ।
इन्टरप्रिटर जाँच्नुहोस्, आर्किटेक्चर मात्र होइन
गतिशील कार्यान्वयनयोग्य फाइलले प्रोग्राम हेडरमा आफूले अपेक्षा गरेको लोडर रेकर्ड गर्छ। फरक लोडर मार्ग भएको प्रणालीमा कर्नेलले फाइल सुरु गर्न अस्वीकार गर्छ, मेसिन फिल्ड ठ्याक्कै मिले पनि। यही असफलताले मानिसहरूलाई हराएका लाइब्रेरी खोज्न पठाउँछ।
त्रुटि सन्देशले तपाईं कुन अवस्थामा छ भनी बताउँछ, र दुवै अवस्था छुट्याउन सजिलो छ। ढाँचा वा आर्किटेक्चरको अस्वीकृति हराएको फाइल वा इन्टरप्रिटरभन्दा फरक हो, र तीमध्ये एउटा मात्र अर्को प्याकेज स्थापना गरेर सुधारिन्छ।
readelf -l ./vendor-vpn | grep -A1 INTERP ls -l /lib64/ld-linux-x86-64.so.2
पहिलो कमाण्डले बाइनरीले माग्ने इन्टरप्रिटर मार्ग देखाउँछ। दोस्रोले त्यो मार्ग अवस्थित छ कि जाँच्छ, जसले गलत बिल्डलाई हराएको लोडरबाट छुट्याउँछ।
अविश्वसनीय बाइनरीमा निर्भरता-सूची नचलाउनुहोस्, किनकि केही कार्यान्वयनले आफूले जाँचिरहेको फाइल चलाउन सक्छन्। निरीक्षण पढ्ने मात्र राख्नुहोस् र असमर्थित बिल्ड सुरु गर्न लोडर सिम्लिङ्क थप्ने लोभलाई रोक्नुहोस्।
तथ्य हातमा राखेर बिल्ड माग्नुहोस्
विक्रेतालाई OS संस्करण, प्याकेज आर्किटेक्चर, वर्ग र मेसिन मान र पहिलो त्रुटि सन्देश पठाउनुहोस्। त्यो संयोजनले उपयोगी उत्तर पाउँछ, जबकि सामान्य असफलताको स्क्रिनसटले समर्थन टेम्प्लेट पाउँछ।
बाइनरीको प्रश्नलाई कन्फिगरेसनको प्रश्नबाट अलग राख्नुहोस्। सही बिल्ड सुरु भएपछि, प्रोफाइल, प्रमाणहरू र मार्गहरू अझै आफ्नै समस्या हुन्, र प्रोफाइल सम्पादनको कुनै पनि मात्राले गलत आर्किटेक्चरको बाइनरी चलाउँदैन।