प्रति पंक्ति एक OpenVPN निर्देश, और लाइन रैपिंग झूठ क्यों बोलती है
नरमी से लिपटी स्क्रीन फ़ाइल में नई पंक्ति नहीं है। किसी ख़राब हिस्से को अजनबी के टेम्पलेट से बदलने से पहले असली पंक्ति विराम जाँचें।
एक प्रोफ़ाइल जो पहले चलती थी अब विकल्प त्रुटि के साथ विफल होती है, और पार्सर जिस पंक्ति का हवाला देता है वह स्क्रीन पर पूरी तरह उचित दिखती है। यही जाल है: कॉन्फ़िगरेशन फ़ाइल भौतिक पंक्तियों की सूची है, हर एक में एक विकल्प कीवर्ड और उसके तर्क होते हैं, और संपादक द्वारा लिपटी लंबी पंक्ति बाइट देखने तक दो पंक्तियों जैसी ही दिखती है। नेटवर्क, प्रमाणपत्र या टनल इस विफलता वर्ग में शामिल नहीं हैं। स्क्रीन पर एक जैसी दिखने वाली दो पंक्तियाँ एक बाइट से भिन्न हो सकती हैं।
नीचे दी गई जाँचें क्रम से करें और पहली विफल जाँच पर रुकें। हर एक अगली से सस्ती है, और हर एक अलग व्याख्या हटाती है।
एक पंक्ति, एक निर्देश
पार्सर एक पंक्ति पढ़ता है, पहला शब्द विकल्प के रूप में लेता है और बाकी को उसी विकल्प के तर्क मानता है। इसलिए cert server.crt port 1194 जैसी पंक्ति दो लगातार निर्देश नहीं है। यह तीन तर्कों वाला एक cert विकल्प है, और तीसरा ऐसा फ़ाइल नाम नहीं है जिसे विकल्प स्वीकार करता हो। त्रुटि को अनुपस्थित पंक्ति विराम के रूप में पढ़ना सही है; उसे अनुपस्थित निर्देश के रूप में पढ़ना सही नहीं है।
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
वे दो सुधरी हुई पंक्तियाँ एक टुकड़ा हैं, कॉन्फ़िगरेशन नहीं। वे यह दिखाने के लिए हैं कि सीमा कहाँ है। प्रोफ़ाइल में हर सामान्य निर्देश वही नियम मानता है, और दो को जोड़ने वाली पंक्ति या तो तर्क त्रुटि देती है या ऐसा मान जिसकी विकल्प ने अपेक्षा नहीं की थी।
साबित करें कि पंक्ति विराम असली है
संपादक प्रदर्शन के लिए लपेटते हैं। कुछ चिपकाते समय कठोर विराम भी डालते हैं, कुछ नहीं, इसलिए एक ही दृश्य परिणाम दो बहुत अलग फ़ाइलों से आ सकता है। कुछ बदलने से पहले पंक्तियों के अंत दिखाएँ और पंक्तियाँ गिनें। मापना एक कमांड का ख़र्च है; अनुमान एक शाम का।
cat -A /etc/openvpn/server/lab.conf | sed -n '10,20p'
awk 'NR>=10 && NR<=20 {printf "%d:%s\n", NR, $0}' /etc/openvpn/server/lab.conf
पहले आउटपुट में हर असली पंक्ति विराम $ चिह्न के रूप में दिखता है, इसलिए लिपटी पर न बँटी पंक्ति वहाँ कोई चिह्न नहीं दिखाती जहाँ आपकी स्क्रीन लपेटती है। दूसरा कमांड क्रमांकित पंक्तियाँ छापता है, जो पार्सर की रिपोर्ट और फ़ाइल की सामग्री की तुलना का सबसे तेज़ तरीका है।
अतिरिक्त रिक्तियाँ भी निर्देश नहीं बनातीं। इंडेंटेशन दिखावटी है, और रिक्ति से शुरू होने वाली पंक्ति वही एकमात्र विकल्प रहती है। यदि त्रुटि संदेश पंक्ति संख्या बताता है, तो ठीक उसी पंक्ति को पढ़ें, न कि उस पैराग्राफ़ को जिससे वह संबंधित है।
निर्देशों की सूची नहीं, पथ उद्धृत करें
उद्धरण चिह्न रिक्ति वाले तर्कों के लिए हैं, विकल्पों को समूहित करने के लिए नहीं। रिक्ति वाले प्रमाणपत्र पथ को अपने उद्धरण चिह्न चाहिए; एक जोड़ी उद्धरण चिह्न साझा करने वाले दो निर्देश अब भी एक ख़राब पंक्ति हैं।
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
विकल्पों के नाम लेआउट के साथ-साथ जाँचें, क्योंकि जुड़ी पंक्ति एक विश्वसनीय दिखने वाला टोकन बना सकती है जो कभी था ही नहीं। पोर्ट निर्देश port है; जो प्रोफ़ाइल उसी विचार के लिए कुछ और उपयोग करती है वह पंक्ति सीमाएँ ठीक करने के बाद भी विफल रहेगी। जब कोई नाम अपरिचित लगे, तो उसे फ़ोरम के उदाहरण के बजाय आपके चलाए संस्करण की विकल्प सूची से तुलना करें।
इनलाइन ब्लॉकों को ब्लॉक रखें
प्रोफ़ाइल प्रमाणपत्र और कुंजियाँ इनलाइन रख सकती हैं, और वे ब्लॉक डेटा हैं, कॉन्फ़िगरेशन नहीं। ब्लॉक के अंदर PEM पंक्तियाँ ऐसे विकल्प नहीं हैं जिन्हें समतल, पुनः इंडेंट या जोड़ा जाए, और ब्लॉक के चिह्न अपनी पंक्तियों पर रहने चाहिए।
इनलाइन ब्लॉक को अपारदर्शी क्षेत्र मानें: इसके आसपास की विकल्प पंक्तियाँ ठीक करें, इसकी सामग्री बाइट-दर-बाइट अछूती छोड़ें, और इसे कभी सार्वजनिक सहायता थ्रेड में चिपकाएँ नहीं। यदि फ़ॉर्मेटिंग उपकरण ने ब्लॉक फिर से लिखा है, तो हाथ से ठीक करने के बजाय अपने PKI से पुनर्स्थापित करें।
टेम्पलेट नहीं, सबसे छोटा हिस्सा ठीक करें
लुभावनी मरम्मत यह है कि पूरी फ़ाइल को ऐसे ट्यूटोरियल के कॉन्फ़िगरेशन से बदल दिया जाए जो „काम करता है”। यह एक ख़राब पंक्ति को उन नीति परिवर्तनों के समूह से बदल देता है जिनकी किसी ने समीक्षा नहीं की: अलग DH पैरामीटर, संपीड़न सेटिंग्स, साइफ़र चयन, दोहरे श्रोता। मूल समस्या छोटी और स्थानीय है, और प्रतिस्थापन उनमें से कोई नहीं।
प्रोफ़ाइल को संरक्षित वर्किंग फ़ाइल में कॉपी करें, उस कॉपी में पंक्ति सीमाएँ ठीक करें, और सेवा के सामान्य स्वामी को इसे लोड करने दें। फिर इंस्टेंस शुरू करें और पहली त्रुटि, यदि हो, शुरुआत से पढ़ें।
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
जब विश्लेषण चरण पार हो जाए, अगली विफलता शब्दावली के बजाय फ़ाइल, प्रमाणपत्र या साइफ़र के बारे में होगी, और यही वास्तविक प्रगति है। वर्किंग कॉपी और इस बारे में एक पंक्ति का नोट रखें कि क्या जोड़ा गया; वही पेस्ट उसी टीम के किसी और के साथ फिर होगा।