โปรไฟล์ที่เคยเริ่มทำงานได้ตอนนี้ล้มเหลวด้วยข้อผิดพลาดตัวเลือก และบรรทัดที่ตัวแยกวิเคราะห์อ้างถึงดูสมเหตุสมผลที่สุดบนหน้าจอ นั่นคือกับดัก: ไฟล์กำหนดค่าเป็นรายการของบรรทัดจริง แต่ละบรรทัดมีคำหลักของตัวเลือกหนึ่งคำและอาร์กิวเมนต์ของมัน และบรรทัดยาวที่ถูกตัดโดยโปรแกรมแก้ไขจะดูเหมือนสองบรรทัดจนกว่าคุณจะดูที่ไบต์ ไม่มีส่วนใดของเครือข่าย ใบรับรอง หรืออุโมงค์ที่เกี่ยวข้องกับความล้มเหลวประเภทนี้ สองบรรทัดที่ดูเหมือนกันบนหน้าจออาจ ต่างกันเพียงหนึ่งไบต์

ทำการตรวจสอบด้านล่างตามลำดับและหยุดที่รายการแรกที่ล้มเหลว แต่ละรายการถูกกว่าอันถัดไป และแต่ละรายการตัดคำอธิบายที่แตกต่างกันออกไป

หนึ่งบรรทัด หนึ่งคำสั่ง

ตัวแยกวิเคราะห์อ่านหนึ่งบรรทัด ใช้คำแรกเป็นตัวเลือก และถือว่าส่วนที่เหลือเป็นอาร์กิวเมนต์ของตัวเลือกนั้น ดังนั้นบรรทัดอย่าง 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

เมื่อขั้นตอนการแยกวิเคราะห์ผ่าน ความล้มเหลวถัดไปจะเกี่ยวกับไฟล์ ใบรับรอง หรือไซเฟอร์ ไม่ใช่คำศัพท์ และนั่นคือความก้าวหน้าจริง เก็บสำเนางานและบันทึกหนึ่งบรรทัดเกี่ยวกับสิ่งที่รวมเข้าด้วยกัน การวางแบบเดียวกันจะเกิดขึ้นอีกกับคนอื่นในทีมเดียวกัน

บทความที่เกี่ยวข้อง